// Create namespace
if (com == undefined) var com = {};
if (com.denodo == undefined) com.denodo = {};

// Newsticker Class
com.denodo.ticker = Class.create();
com.denodo.ticker.prototype = {
	initialize: function(tagname, seconds)
	{
		// Get elements
		this.interval = seconds * 1000;
		this.container = $(tagname);
		this.messages  = $A(this.container.getElementsByTagName("li"));
		this.number_of_messages = this.messages.length;
		if (this.number_of_messages == 0)
		{
			this.showError();
			return false;
		}
		this.current_message = 0;
		this.previous_message = null;

		// Create prev button
		this.prev_button = document.createElement("a");
		this.prev_button.href = "#";
		this.prev_button.id = tagname + "Prev";
		this.prev_button.innerHTML = "Prev";
		Event.observe(this.prev_button, "click", this.prevMessage.bindAsEventListener(this), false);
		this.container.appendChild(this.prev_button);
		
		// Create next button
		this.next_button = document.createElement("a");
		this.next_button.href = "#";
		this.next_button.id = tagname + "Next";
		this.next_button.innerHTML = "Next";
		Event.observe(this.next_button, "click", this.nextMessage.bindAsEventListener(this), false);
		this.container.appendChild(this.next_button);
		
		this.hideMessages();
		this.showMessage();
		// Install timer
		this.timer = setInterval(this.showMessage.bind(this), this.interval);
  	},
	showMessage: function()
	{
		Effect.Appear(this.messages[this.current_message]);
		this.timeout = setTimeout(this.fadeMessage.bind(this), this.interval-2000);
		
		this.previous_message = this.current_message;		
		if (this.current_message < this.number_of_messages-1)
		{
			this.current_message = this.current_message + 1;
		} else {
			this.current_message = 0;
		}
	},
	fadeMessage: function()
	{
		Effect.Fade(this.messages[this.previous_message]);
	},
	hideMessages: function()
	{
		this.messages.each(function(message)
		{
			Element.hide(message);
		})
	},
	nextMessage: function(event)
	{
		clearInterval(this.timer);
		this.timer = setInterval(this.showMessage.bind(this), this.interval);
	
		clearTimeout(this.timeout);
		this.timeout = setTimeout(this.fadeMessage.bind(this), this.interval-2000);
		
		this.messages[this.previous_message].style.display="none";
		Effect.Appear(this.messages[this.current_message]);
		
		this.previous_message = this.current_message;		
		if (this.current_message < this.number_of_messages-1)
		{
			this.current_message = this.current_message + 1;
		} else {
			this.current_message = 0;
		}
		Event.stop(event);
	},
	prevMessage: function(event)
	{
		clearInterval(this.timer);
		this.timer = setInterval(this.showMessage.bind(this), this.interval);
	
		clearTimeout(this.timeout);
		this.timeout = setTimeout(this.fadeMessage.bind(this), this.interval-2000);

		this.messages[this.previous_message].style.display="none";
		this.current_message = this.previous_message;
		
		if (this.current_message == 0)
		{
			this.previous_message = this.number_of_messages - 1;
		} else {
			this.previous_message = this.current_message - 1;
		}		
	
		Effect.Appear(this.messages[this.previous_message]);
		Event.stop(event);

	},
	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 data";
		this.list.appendChild(this.errorMessage);
	}
}

// Event.observe(window, "load", function(){new com.denodo.ticker('newsticker', 10)}, false);
