//ok
Element.addMethods({
    onmouseenter: function(element,observer) {
        element = $(element);
        element.observe('mouseover',function(evt,currentTarget) {
            var relatedTarget = $(evt.relatedTarget || evt.fromElement);
            if( relatedTarget!=currentTarget && relatedTarget.childOf(currentTarget)==false ) {
                observer();
            } 
        }.bindAsEventListener({},element));
        return element;
    },
    onmouseleave: function(element,observer) {
        element = $(element);
        element.observe('mouseout',function(evt,currentTarget) {
            var relatedTarget = $(evt.relatedTarget || evt.toElement);
            if( relatedTarget!=currentTarget && relatedTarget.childOf(currentTarget)==false ) {
                observer();
            } 
        }.bindAsEventListener({},element));
        return element;
    }
});

// ]]>
if (at == undefined) var at = {};
if (at.bartelme == undefined) at.bartelme = {};

// Newsticker Class
at.bartelme.newsticker = Class.create();
at.bartelme.newsticker.prototype = {
	initialize: function()
	{
	
	
		// Get elements
		this.interval = 4000;
		this.handler = null;
		this.onMouseOverHandler = null;
		this.container = $("newsticker");
	
			
		this.messages  = $A(this.container.getElementsByTagName("li"));
		this.listUl = $("messages");
		this.messagesHTML = this.container.innerHTML;
		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 toggle button
		this.toggle_button = document.createElement("a");
		this.toggle_button.href = "#";
		this.toggle_button.id = "togglenewsticker";
		this.toggle_button.innerHTML = "";
		Event.observe(this.toggle_button, "click", this.toggle.bindAsEventListener(this));
		
		Element.onmouseenter("newsticker", this.stopAnimation.bindAsEventListener(this));
		Element.onmouseleave("newsticker", this.doAnimation.bindAsEventListener(this));
		
		
		//Event.observe("newsticker", "mouseenter", this.stopAnimation.bindAsEventListener(this), false);
		//Event.observe("newsticker", "mouseleave", this.doAnimation.bindAsEventListener(this), false);

		

		this.container.appendChild(this.toggle_button);
		this.hideMessages();
		this.showMessage();
		// Install timer
		this.timer = setInterval(this.showMessage.bind(this), this.interval);
		this.fadeEffect = null;
		this.onMouseOut = false;
		this.onMouseOver = false;
		this.isExitFirstEvent = true;

		
  	},
	showMessage: function()
	{
	
		if (!this.onMouseOut){
			Effect.Appear(this.messages[this.current_message]);
		}
		else {
	
			this.messages[this.previous_message].style.display="none";
			Effect.Appear(this.messages[this.current_message]);
			
		}
		this.handler = 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;
		}
	},
	fadeMessage: function()
	{
		this.fadeEffect = new Effect.Fade(this.messages[this.previous_message], {});
	},
	hideMessages: function()
	{
		this.messages.each(function(message)
		{
			Element.hide(message);
		})
	},
	toggle: function()
	{
		Effect.BlindUp(this.container, 1000);
	},
	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);
	},
	
	stopAnimation:function(e){
		
		this.onMouseOver = true; 
		this.onMouseOut = false;
		

		//Event.stopObserving("newsticker", "mouseenter");
		//Event.observe("newsticker", "mouseleave", this.doAnimation.bindAsEventListener(this));
			
		clearTimeout(this.handler);
		clearInterval(this.timer);
		if (this.fadeEffect != null){
			this.fadeEffect.cancel();
		}
				
		
		this.isExitFirstEvent = false;
		
		

	},
	
	doAnimation:function(e){
		
		this.onMouseOver = false;
		this.onMouseOut = true;
		
		if (!this.isExitFirstEvent){
		
			//Event.observe("newsticker", "mouseenter", this.stopAnimation.bindAsEventListener(this));
			//Event.stopObserving("newsticker", "mouseleave");
			this.timer = setInterval(this.showMessage.bind(this), this.interval);
			this.showMessage();
		}
		
		this.isExitFirstEvent = false;
			
	
		
	}
	
	
}





				   
Event.observe(window, "load", function(){new at.bartelme.newsticker()}, false);

