

var Ticker = new Class({
	options: {
		speed: 1000,
		delay: 5000,
		direction: 'vertical',
		onComplete: Class.empty,
		onStart: Class.empty
	},
	
	setOptions: function(options) {
		this.options.speed = options.speed || 1000;
		this.options.delay = options.delay || 5000;
		this.options.direction = options.direction || 'vertical';
	},
	
	initialize: function(el,options){
		this.setOptions(options);
		this.el = $(el);
		
		// break if element is not found
		if ($(el) == null) return;

		this.items = this.el.getElements('li');

		// do not ticker if there is only one item
		if (this.items.length == 1) {
			return	
		}

		// if there are only 2 elements the ticker animation fails, so we duplicate all items
		if (this.items.length == 2) {
			this.items[0].clone().injectInside(this.el);
			this.items[1].clone().injectInside(this.el);
			this.items = this.el.getElements('li');
		}

		var w = 0;
		var h = 0;
		if(this.options.direction.toLowerCase()=='vertical') {
			h = this.el.getSize().y;
			this.items.each(function(li,index) {
				w += li.getSize().x;
			});
		} else {
			w = this.el.getSize().x;
			this.items.each(function(li,index) {
				h += li.getSize().y;
			});
		}
		this.el.setStyles({
			position: 'absolute',
			top: 0,
			left: 0,
			width: w,
			height: h
		});
		this.fx = new Fx.Morph(this.el,
			{duration:this.options.speed});
		this.fx.addEvent('complete', function() {
			var i = (this.current==0)?this.items.length:this.current;
			this.items[i-1].injectInside(this.el);
			this.el.setStyles({
				left:0,
				top:0
			});
		}.bind(this));
		this.current = 0;
		this.next();
			
		this.el.addEvent('mouseover', this.pause.bind(this));
		this.el.addEvent('mouseout', this.unpause.bind(this));
		
	},
	isPause: false,
	pause: function() {
		this.isPause = true;
	},
	unpause: function() {
		this.isPause = false;
	},
	next: function() {
		if (!this.isPause) {
			this.current++;
			if (this.current >= this.items.length) this.current = 0;
			var pos = this.items[this.current];
			this.fx.start({
				top: -pos.offsetTop,
				left: -pos.offsetLeft
			});
		}
		this.next.bind(this).delay(this.options.delay + this.options.speed);
	}
});



window.addEvent('domready', function() {
	if ($$('#newsticker')[0]) {
 		var tick_newsticker = new Ticker($$('#newsticker')[0], {speed:5000, delay:50});
 		
		if ($$('#animation')[0]) {
 			(function(){
	 			var tick_display = new Ticker($$('#animation')[0], {speed:4500, delay:6000, direction: 'horizontal'});
 		 	}).delay(3000);
		}

	}
});

