﻿/*
 * Fantastic News Ticker Newsvine-like using Mootools
 * 
 * by Antonio Lupetti 
 * 
 * http://woork.blogspot.com/2008/07/fantastic-news-ticker-newsvine-like.html
 */

var Ticker = new Class( {
	setOptions : function(options) {
		this.options = Object.extend( {
			speed : 1500,
			delay : 5000,
			direction : 'vertical',
			onComplete : Class.empty,
			onStart : Class.empty
		}, options || {});
	},
	initialize : function(el, options) {
		this.setOptions(options);
		this.el = $(el);
		this.items = this.el.getElements('li');
		var w = 0;
		var h = 0;
		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,
			onComplete : 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;
		mytimer = this.next.bind(this).delay(
				this.options.delay + this.options.speed);
	},

	pause : function() {
		$clear(mytimer);
		mytimer = null;
	},
	resume : function() {
		if (mytimer == null) {
			this.next();
		}
	},
	next : function() {
		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
		});
		mytimer = this.next.bind(this).delay(
				this.options.delay + this.options.speed);
	}
});

