var EventItem = new Class({
	Implements: [Options, Events, Log],

	// Variables
	options: {
		truncate: false,
		eventTitleLength: 40
	},
	element: null,


	// Class instances
	
	initialize: function( element, options )
	{
		//this.enableLog();
		//this.disableLog();
		this.log("EventItem::initialize()");

		// Set variables
		this.element = element;
		this.setOptions(options);

		this.initReadMore();

		var main = this.element.getElement('.main');
		var mainLink = main.getElement('.read-more');
		var support = this.element.getElement('.support');
		
		// Replace event title
		if(this.options.truncate && main.getElement('a')) this.truncateEventTitle(main.getElement('a'), this.options.eventTitleLength);
		
		// Replace support act
		if(this.options.truncate && support) this.truncateEventTitle(support, 70);

		// Replace country code
		if(mainLink)
		{
			this.replaceCountryCode(mainLink);
		}
		else if(main)
		{
			this.replaceCountryCode(main);
		}
		if(support) this.replaceCountryCode(support);
	},

	/*
	 * Init read more
	 */
	initReadMore: function()
	{
		this.log("EventItem::initReadMore()");

		var readMore = this.element.getElement('.read-more');
		var ticketsButton = this.element.getElement('.tickets');
		if(readMore)
		{
			var url = readMore.get('href');
			if(url)
			{
				this.element.addEvent('click', function(event) {
					event.preventDefault();

					if(event.target == ticketsButton && ticketsButton.get('href'))
					{
						url = ticketsButton.get('href');
					}

					var uri = new URI(url);
					uri.go();
				}.bind(this));
			}
		}

	},

	/*
	 * Replace country code
	 */
	replaceCountryCode: function( element )
	{
		this.log("EventItem::replaceCountryCode()");

		var text = element.get('text');
		var matches = text.match(/\([A-Z]{2}\)/g) ;

		if(matches)
		{
			matches = matches.unique();
			this.log("matches: " + matches);

			matches.each(function(match, index) {
				//this.log("[" + index + "] match: "+ match);

				var regexMatch = match;
				regexMatch = regexMatch.replace('(', '\\(');
				regexMatch = regexMatch.replace(')', '\\)');

				var regex = new RegExp(regexMatch, "g");
				var replace = '<sub class="country">' + match + '</sub>';
				text = text.replace(regex, replace);
			}.bind(this));
		}

		// Place new text
		this.log("new text: " + text);
		element.set('html', text);
	},

	/*
	 * Truncate event title
	 */
	truncateEventTitle: function( element, length )
	{
		this.log("EventItem::truncateEventTitle(" + element + ", " + length + ")");

		var text = element.get('text');

		text = text.truncate(length, '..', ' ');
		this.log("text: "+ text);

		// Place new text
		element.set('html', text);
	}

});
