/* A workaround for IE issues in mootools 1.2.1
 * - Recreates FX.Scroll() but utilises 1.2.0's getPosition/getOffset routines.
 */
Fx.Scroll2 = new Class({
 
    'Extends': Fx.Scroll,
 
    'styleString': Element.getComputedStyle,
    'styleNumber': function(element, style) {
        return this.styleString(element, style).toInt() || 0;
    },
    'borderBox': function(element) {
        return this.styleString(element, '-moz-box-sizing') == 'border-box';
    },
    'topBorder': function(element) {
        return this.styleNumber(element, 'border-top-width');
    },
    'leftBorder': function(element) {
        return this.styleNumber(element, 'border-left-width');
    },
    'isBody': function(element) {
        return (/^(?:body|html)$/i).test(element.tagName);
    }, 
    'toElement': function(el) {
        var offset   = {x: 0, y: 0};
        var element  = $(el);
 
        if (this.isBody(element)) {
            return offset;
        }
        var scroll = element.getScrolls();
 
        while (element && !this.isBody(element)){
            offset.x += element.offsetLeft;
            offset.y += element.offsetTop;
 
            if (Browser.Engine.gecko){
                if (!this.borderBox(element)){
                    offset.x += this.leftBorder(element);
                    offset.y += this.topBorder(element);
                }
                var parent = element.parentNode;
                if (parent && this.styleString(parent, 'overflow') != 'visible'){
                    offset.x += this.leftBorder(parent);
                    offset.y += this.topBorder(parent);
                }
            } else if (Browser.Engine.trident || Browser.Engine.webkit){
                offset.x += this.leftBorder(element);
                offset.y += this.topBorder(element);
            }
 
            element = element.offsetParent;
            if (Browser.Engine.trident) {
                while (element && !element.currentStyle.hasLayout) {
                    element = element.offsetParent;
                }
            }
        }
        if (Browser.Engine.gecko && !this.borderBox(element)){
            offset.x -= this.leftBorder(element);
            offset.y -= this.topBorder(element);
        }
 
        var relative = this.element;
        var relativePosition = (relative && (relative = $(relative))) ? relative.getPosition() : {x: 0, y: 0};
        var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};
 
        return this.start(position.x - relativePosition.x, position.y - relativePosition.y);
    }
});

var Ticker = {
	ticker: null,
	scroll: null,
	tickerWindow: null,
	currentItem: null,
	previousItem: null,
	tickerItems: [],
	timeout: 6000,
	effectDelay: 700,
	autoMode: true,
	init: function() {
    	var self = this;
		this.ticker = $('ticker');
		this.tickerWindow = $$('#ticker ul')[0];
		this.tickerItems = $$('#ticker ul li');
		this.tickerWindow.addEvent('startTick', function(event) {
			self.toItem(self.currentItem);
            self.autoNxt.delay(self.timeout);
		});
		for(var i = this.tickerItems.length-1; i>=0; i--){
			var item = this.tickerItems[i];
			item.addEvent('mouseover', function(event) {
	            self.autoMode = false;
			});
			item.addEvent('mouseout', function(event) {
	            self.autoMode = true;
			});
		}
		this.scroll = new Fx.Scroll2('ticker', {
			wait: false,
			duration: self.effectDelay,
			transition: Fx.Transitions.Quad.easeInOut
		});
		this.tickerWindow.fireEvent('startTick');
	},
	autoNxt: function(){
	    if(Ticker.autoMode){
    	    Ticker.nxtItem();
        }
        Ticker.autoNxt.delay(Ticker.timeout);
	},
	toItem: function(item){
	    if(item != this.previousItem){
			this.scroll.toElement(item);
			this.previousItem = item;
	    }
	    this.currentItem = item;
	},
	nxtItem: function(){
        var currentIndx = this.tickerItems.indexOf(this.currentItem);
		var nxt_id = currentIndx + 1;
		if(nxt_id >= this.tickerItems.length){
			nxt_id = 0;
		}
		this.toItem(this.tickerItems[nxt_id]);
	},
	prvItem: function(){
        var currentIndx = this.tickerItems.indexOf(this.currentItem);
		var prv_id = currentIndx - 1;
		if(prv_id < 0){
			prv_id = this.tickerItems.length - 1;
		}
		this.toItem(this.tickerItems[prv_id]);
	}
};

document.addEvent('domready', function(event) {
	Ticker.init();
});