// Create namespace
if (at == undefined) var at = {};
if (at.bartelme == undefined) at.bartelme = {};

// Newsticker Class
at.bartelme.newsticker = Class.create();
at.bartelme.newsticker.prototype = {
	initialize: function(container_id, effect, interval)
	{
		// Get elements
		switch (effect) {
			case 'slide' :
				this.effect = 'slide';
				break;
			case 'fade' :
			default :
				this.effect = 'fade';
				break;
		}

		if(interval) {
			this.interval = interval;
		} else {
			this.interval = 8000;
		}
		//this.container = $("newsticker");
		this.container = $(container_id);
		if(this.container) {
			this.messages  = $A(this.container.getElementsByTagName("li"));
			this.max_height = 0;
			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;

			for(var i=0; i<this.number_of_messages; i++) {
				if(this.messages[i].offsetHeight>this.max_height) {
					this.max_height = this.messages[i].offsetHeight;
				}
			}
			this.container.down(0).style.height = this.max_height+"px";

			// Create toggle button
			this.toggle_button = document.createElement("a");
			this.toggle_button.href = "#";
			this.toggle_button.className = "togglenewsticker";
			this.toggle_button.style.paddingRight = "5px";
			this.toggle_button.innerHTML = "Toggle";

			// Create pause button
			this.pause_button = document.createElement("a");
			this.pause_button.className = "pausenewsticker";
			this.pause_button.style.paddingRight = "5px";
			this.pause_button.innerHTML = "Pause";

			// Create next button
			this.next_button = document.createElement("a");
			this.next_button.className = "nextnewsticker";
			this.next_button.style.paddingRight = "5px";
			this.next_button.innerHTML = "Next";

			// Create prev button
			this.prev_button = document.createElement("a");
			this.prev_button.className = "prevnewsticker";
			this.prev_button.style.paddingRight = "5px";
			this.prev_button.innerHTML = "Prev";

			// Create play button
			this.play_button = document.createElement("a");
			this.play_button.className = "playnewsticker";
			this.play_button.style.paddingRight = "5px";
			this.play_button.innerHTML = "Play";

			this.info = document.createElement("span");
			this.info.className = "infonewsticker";
			this.info.innerHTML = "1/"+this.number_of_messages;

			this.title = document.createElement("div");
			this.title.className = 'title h1';
			this.h1 = document.createElement("h1");
			this.h1.innerHTML = "Newsticker";
			this.title.appendChild(this.h1);
			//this.container.insertBefore(this.title, this.container.down(0));

			this.control = document.createElement("div");
			this.control.innerHTML = "&nbsp";
			this.container.appendChild(this.control);

			Event.observe(this.toggle_button, "click", this.toggle.bindAsEventListener(this), false);
			Event.observe(this.pause_button, "click", this.pause.bindAsEventListener(this), false);
			Event.observe(this.prev_button, "click", this.prev.bindAsEventListener(this), false);
			Event.observe(this.next_button, "click", this.next.bindAsEventListener(this), false);
			Event.observe(this.play_button, "click", this.play.bindAsEventListener(this), false);

			//this.container.appendChild(this.toggle_button);
			this.control.appendChild(this.info);
			if(this.number_of_messages > 1) {
				this.hideMessages();
				this.control.appendChild(this.prev_button);
				this.control.appendChild(this.pause_button);
				this.control.appendChild(this.next_button);
				this.showMessage();
				// Install timer
				this.timer = setInterval(this.showMessage.bind(this), this.interval);
			}
		}
 	},
	showMessage: function()
	{	
		this.appearMessage();
		this.show = setTimeout(this.fadeMessage.bind(this), this.interval-1000);
		if (this.current_message < this.number_of_messages-1)
		{
			this.previous_message = this.current_message;
			this.current_message = this.current_message + 1;
		} else {
			this.current_message = 0;
			this.previous_message = this.number_of_messages - 1;
		}
	},
	appearMessage: function() {
		if(this.effect == 'slide') {
			Effect.SlideDown(this.messages[this.current_message]);
		} else if(this.effect == 'fade') {
			Effect.Appear(this.messages[this.current_message]);
		}
		this.info.innerHTML = (this.current_message+1)+"/"+this.number_of_messages;
	},
	fadeMessage: function()
	{
		if(this.effect == 'slide') {
			Effect.SlideUp(this.messages[this.previous_message]);
		} else if(this.effect == 'fade') {
			Effect.Fade(this.messages[this.previous_message]);
		}
	},
	hideMessages: function()
	{
		this.messages.each(function(message)
		{
			Element.hide(message);
		})
	},
	toggle: function()
	{
		Effect.BlindUp(this.container, 1000);
	},
	pause: function()
	{	
		clearTimeout(this.show);
		clearInterval(this.timer);
		this.prev_button.remove()
		this.pause_button.remove()
		this.next_button.remove()
		this.container.appendChild(this.play_button);
	},
	play: function() 
	{
		this.resume();
		this.play_button.remove()
		this.container.appendChild(this.prev_button);
		this.container.appendChild(this.pause_button);
		this.container.appendChild(this.next_button);
	},
	next: function()
	{
		this.hideMessages();
		clearTimeout(this.show);
		clearInterval(this.timer);
		this.appearMessage();
		if (this.current_message < this.number_of_messages-1)
		{
			this.previous_message = this.current_message;
			this.current_message = this.current_message + 1;
		} else {
			this.current_message = 0;
			this.previous_message = this.number_of_messages - 1;
		}
		this.resume();
	},
	prev: function()
	{
		this.hideMessages();
		clearTimeout(this.show);
		clearInterval(this.timer);
		if (this.current_message == 1) {
			this.current_message = this.number_of_messages - 1;
		} else {
			this.current_message = this.previous_message-1;
		}
		this.appearMessage();
		if (this.current_message < this.number_of_messages-1)
		{
			this.previous_message = this.current_message;
			this.current_message = this.current_message + 1;
		} else {
			this.current_message = 0;
			this.previous_message = this.number_of_messages - 1;
		}
		this.resume();
	},
	resume : function() {
		this.show = setTimeout(this.fadeMessage.bind(this), this.interval-1000);
		this.timer = setInterval(this.showMessage.bind(this), this.interval);
	},
	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);
	}
}


