var News = new Class({
	Implements: [Options, Events, Log],
	Extends: Page,
		
	// Variables
	requestUrl: null,
	messageContainer: null,
	loaderContainer: null,
	messageFx: null,
	messageLoaderFx: null,
	messageIsLoaded: null,
	messageData: null,
	currentId: null,
	
	// Class instances
	

	/*
	 * Initialize
	 */
	initialize: function( name, element , options )
	{
		this.enableLog();
		this.log("News::initialize(" + name + ", " + element + ", " + options + ")");

		// Invoke parent method
		this.parent( name, element, options );

		this.requestUrl = this.application.getConfig().requestPath.news.item;

		// Overview
		this.initOverview();

		this.messageContainer = this.element.getElement('.item').getElement('.text');
		this.loaderContainer = this.element.getElement('.item');

		// Message animation
		this.messageFx = new Fx.Reveal(this.messageContainer, {
			duration: 500,
			transitionOpacity: false
		});
		this.messageFx.visible = true;
	   
		this.messageFx.addEvent('show', function(event) {
			this.log("messageFx show");

			this.messageFx.visible = true;

		}.bind(this));
		this.messageFx.addEvent('hide', function(event) {
			this.log("messageFx hide");

			this.messageFx.visible = false;

			if(this.messageIsLoaded)
			{
				this.showMessage.delay(1, this);
			}
			else
			{
				this.showLoadState();
			}

		}.bind(this));
	},


	/*
	 * Init overview
	 */
	initOverview: function()
	{
		this.log("News::initOverview()");

		var overview = this.element.getElement('.overview');

		var element = overview.getElement('.page-container');
		var pagination = overview.getElement('.paging ul');
		var maxListOptions = 5;
		var options = {
			maxListOptions: maxListOptions,
			fireEvent: 'optionListItemClick'
		};

		this.optionList = new OptionList(element, pagination, options);
		this.optionList.addEvent(options.fireEvent, function(id) {
//			this.log("News::event " + options.fireEvent + " fired with id: " + id);
			this.getNewsItem(id);
		}.bind(this));

		if(this.optionList.currentOptionIndex)
		{
			this.currentId = this.optionList.listOptions[this.optionList.currentOptionIndex].id;
		}
	},

	/*
	 * Get News Item
	 */
	getNewsItem: function(id)
	{
		this.log("News::getNewsItem(" + id + ")");

		if( id == this.currentId ) return;

		this.currentId = id;

		var params = new Object();
		params.id = id;

		var requestData = {
			url: this.requestUrl,
			params: params,
			link: 'cancel',
			onRequest: this.onRequest.bind(this),
			onSuccess: this.onSuccess.bind(this)
		}

		this.application.request(requestData);
	},

	showMessage: function()
	{
		this.log("News::showMessage()");

		var data = this.messageData;

		this.log("id: " + data.id);
		this.log("title: " + data.title);
		this.log("date: " + data.date);
		this.log("message: " + data.message);

		// Place new data
		this.messageContainer.getElement('.title').set('html', data.title);
		this.messageContainer.getElement('.date').set('html', data.date);
		this.messageContainer.getElement('.message').set('html', data.message);
	   
		if(this.messageLoaderFx && this.messageLoaderFx.visible)
		{
			//this.log("hideLoadState()");
			this.hideLoadState();
		}
		else
		{
			//this.log("messageFx.reveal()");
			this.messageFx.reveal();
			this.hideLoadState();
		}
	},

	hideMessage: function()
	{
		this.log("News::hideMessage()");

		this.messageFx.dissolve();
	},

	/*
	 * Retrieve results handlers
	 */
	onRequest: function()
	{
		this.log("News::onRequest()");

		
		//this.showLoadState();

		this.messageIsLoaded = false;

		this.hideMessage();
	},

	onSuccess: function(response)
	{
		this.log("News::onSuccess(" + response + ")");
		
		for(var i in response)
		{
			this.log(i + ": " + response[i]);
		}

		var result;

		if(response.result)
		{
			//this.log("result = response.result");
			result = response.result;
		}
		else
		{
			//this.log("result = response");
			result = response;
		}

		this.log("result.ArticleID: " + result.ArticleID);
		this.log("result: " + result);

		var data = result;
		/*
		var data = {};
		data.id = result.ArticleID;
		data.title = result.Title;
		data.date = result.PublishingDate;
		data.message = result.LeaderText;
		*/


		this.messageData = data;
		
		this.log("data.id: " + data.id);
		this.log("data.title: " + data.title);
		this.log("data.date: " + data.date);
		this.log("data.message: " + data.message);

		this.messageIsLoaded = true;

		if(!this.messageFx.visible)
		{
			this.showMessage();
		}
	},


	/*
	 * Show load state
	 */
	showLoadState: function()
	{
		this.log("News::showLoadState()");

		if(!this.loaderContainer.getElement('div.loader'))
		{
			var loader = new Element('div', {'class': 'loader'});
			this.loaderContainer.adopt(loader);

			// Message loader animation
			this.messageLoaderFx = new Fx.Tween(loader, {
				duration: 250,
				transition: Fx.Transitions.Quad.easeOut,
				property: 'opacity',
				link: 'cancel'
			});
			this.messageLoaderFx.visible = false;


			this.messageLoaderFx.addEvent('complete', function(event) {
				//this.log("message loader animation complete");

				// Toggle status
				if(loader.getStyle('opacity').toInt() == 1)
				{
					this.messageLoaderFx.visible = true;
				}
				else
				{
					this.messageLoaderFx.visible = false;
				}

				if(!this.messageLoaderFx.visible && this.messageIsLoaded) this.messageFx.reveal();
			}.bind(this));

		}

		this.messageLoaderFx.start(1);
	},

	/*
	 * Hide load state
	 */
	hideLoadState: function()
	{
		this.log("News::hideLoadState()");

		if(this.messageLoaderFx) this.messageLoaderFx.start(0);
	}
	
});
