/*global Class, $, $A, document, Event, setInterval, Effect, setTimeout, Element, window */
var NewsTicker = Class.create();
NewsTicker.prototype = {
	initialize: function( container, options )
	{
		this.container = $(container);
		this.options = Object.extend( options || { interval: 8 } );
		if (this.options.interval < 5) {
			this.options.interval = 5;
		}
		this.messages  = $A(this.container.getElementsByTagName( 'li' ) );
		this.total = this.messages.length;
		if (this.total === 0)
		{
			this.showError();
			return( false );
		}
		this.curr = 0;
		this.prev = null;
		this.hideMessages();
		Effect.SlideDown( this.container );
		this.showMessage();
		// Install timer
		this.timer = setInterval( this.showMessage.bind( this ), this.options.interval * 1000 );
	},
	showMessage: function()
	{
		this.timer = clearTimeout();
		Effect.Appear( this.messages[this.curr] );
		setTimeout( this.fadeMessage.bind( this ), (this.options.interval - 2) * 1000 );
		if (this.curr < this.total - 1)
		{
			this.prev = this.curr;
			this.curr = this.curr + 1;
		} else {
			this.curr = 0;
			this.prev = this.total - 1;
		}
	},
	fadeMessage: function()
	{
		Effect.Fade( this.messages[this.prev] );
	},
	hideMessages: function()
	{
		this.messages.each( function( m ) {
			Element.hide( m );
		} );
	},
	showError: function()
	{
		if (this.container.getElementsByTagName( 'ul' ).length === 0)
		{
			this.list = document.createElement( 'ul' );
			this.container.appendChild( this.list );
		} else {
			this.list = this.container.getElementsByTagName( 'ul' )[0];
		}
		this.errorMessage = document.createElement( 'li' );
		this.errorMessage.className = "error";
		this.errorMessage.innerHTML = "Could not retrieve ticker items.";
		this.list.appendChild( this.errorMessage );
	}
};
