var ThumbScroller = new Class({
	/**
	 * @author Juan Pablo Brocca
	 * @classDescription Clase encargada de scrollear una lista de thumbnails
	 * @param {String} id El identificador de la lista que contiene las imágenes a scrollear
	 * @param {String} offset La cantidad de desplazamiento de scroll
	 */
	initialize: function (id, offset, speed) {
		this.thmbScroller	= $(id).getElements('ul')[0];
		this.offset			= offset || 10;
		this.speed			= speed  || 20;
		this.interval		= null;
		
		var scrollers 		= $(id).getElements('.scroller');
		this.prevScroller	= $(scrollers[0]);
		this.nextScroller	= $(scrollers[1]);	
			
		var me 				= this;
		
		//Hago el bind para el mouseover
		this.prevScroller.addEvent('mouseover',  function (event) {
			event = new Event(event).stop();
			//Creo un intervalo para que al posarme con el mouse permanezca scrolleando
			me.interval = setInterval(function () {
				me.scrollToPrevious()
			}, me.speed);			
		});
		
		//Hago el bind para el mouseover
		this.nextScroller.addEvent('mouseover',  function (event) {
			event = new Event(event).stop();
			//Creo un intervalo para que al posarme con el mouse permanezca scrolleando
			me.interval = setInterval(function () {
				me.scrollToNext()
			}, me.speed);
		});
		
		//Hago el bind para el mouseout
		this.prevScroller.addEvent('mouseout',  function (event) {
			//Mato el intervalo si es que aún existe
			if (me.interval) {
				clearInterval(me.interval);
			}
		});
		
		//Hago el bind para el mouseout
		this.nextScroller.addEvent('mouseout',  function (event) {
			//Mato el intervalo si es que aún existe
			if (me.interval) {
				clearInterval(me.interval);
			}
		});
			
	},
	/**
	 * Método que scrollea hacia adelante
	 */
	scrollToNext: function () {
		
		
		var me			= this;	
		var width 		= this.thmbScroller.offsetWidth;
		var position 	= this._getActualPosition();
		var totalWidth 	= this.thmbScroller.scrollWidth;
		
		// Si la posición más el ancho de la superficie que se visualiza es menor que el ancho total 
		// que tiene la lista entonces scrolleo
		if (position + width < totalWidth) {
			var value = position + this.offset;
			
			this._doScroll(value);
		} else {
			//Mato el intervalo si es que aún existe
			if (me.interval) {
				clearInterval(me.interval);
			}
		}
	},
	/**
	 * Método que scrollea hacia atrás
	 */
	scrollToPrevious: function () {
		var me			= this;	
		var width 		= this.thmbScroller.offsetWidth;
		var position 	= this._getActualPosition();
		
		// Si la posición es mayor que al comienzo entonces scrolleo
		if (position > 0) {
			var value = position - this.offset;
			
			this._doScroll(value);
		} else {
			//Mato el intervalo si es que aún existe
			if (me.interval) {
				clearInterval(me.interval);
			}
		}
	},
	/**
	 * Método que scrollea hacia atrás
	 */
	_doScroll: function (value) {
		this.thmbScroller.scrollTo(value, 0)
	},
	/**
	 * Método que devuelve la posición actual
	 */
	_getActualPosition: function () {
		return this.thmbScroller.scrollLeft;		
	}
}); 
