var leftToRight = 1; var rightToLeft = -1;

Effect.Slide = Class.create();
Object.extend(Object.extend(Effect.Slide.prototype, Effect.Move.prototype), {
	initialize: function(element) {
		this.element = $(element);
		if (arguments[1]) arguments[1].x = arguments[1].x * arguments[1].direction;

		var options = Object.extend({
			x:    0,
			y:    0,
			direction: rightToLeft,
			mode: 'relative',
			name: 'note',
			duration: 2,
			redirections : 1,
			transition: function(pos) { 
				pos = (- Math.cos(pos*Math.PI) / 2 + 0.5);
				pos = (- Math.cos(pos*Math.PI) / 2 + 0.5);
				var val = (- Math.cos(pos*Math.PI) / 2 + 0.5);
				return val; 
			},
			beforeStart: function(obj) { 
				obj._reposition(); 
			},
			afterUpdate: function(obj) {
				obj._reposition();
			}
		}, arguments[1] || {});
		options.x = (options.x / Math.abs(options.x)) * (Math.abs(options.x) + 2); // PATCH: HAY S SUMAR LOS MARGINS
		this.start(options);
	},

	_reposition: function() {
		return;
	},

	finish: function() {
		this._reposition();
	}

});

var Slider = {
	sliding: new Object(),
	current: new Object(),

	reset: function(id) {
		Slider.sliding[id] = false;
		Slider.current[id] = 0;
		Element.setStyle(id, { left: '0px' });
	},
	
	markPage: function (id, page) {
	},

	goTo: function (id, page) {
		Slider.current[id] = Slider.current[id] || 0;

		if (!Slider.sliding[id]) {
			var _elems = $Rels(id, "slider");

			if (_elems.length > 1) {
				var _direction = (Slider.current[id] >= page) ? leftToRight : rightToLeft;
				var _redirections = Math.abs(page - Slider.current[id] - 1);
				Slider.markPage(id, page);
				Slider.current[id] = page - 1;
				var _amnt = parseFloat(Element.getStyle(_elems[page],'width') || '0');

				if (_amnt > 0) {
					Slider.sliding[id] = true;
					new Effect.Slide(
						id,
						{ 
							direction: _direction,
							x: (_amnt * _redirections),
							redirections: _redirections,
							afterFinish: function() {
								Slider.sliding[id] = false;
							}
						}
					);
				}
			}
			return true;
		} else {
			return false;
		}
	},

	left: function (id) {
		if (!Slider.sliding[id]) {
			var _elems = Element.getElementsByAttribute(id, "rel", "slider");
			if (_elems.length > 1) {
				Slider.current[id] = Slider.current[id] || 0;
				var _lastamnt = parseFloat(Element.getStyle(_elems[Slider.current[id]],'width') || '0');
				var _page = Slider.current[id] - 1;
			
				if (_page >= 0) {
					Slider.markPage(id, _page+1);
					Slider.current[id] = _page;
					var _amnt = parseFloat(Element.getStyle(_elems[_page],'width') || '0');
					_amnt = _lastamnt;

					Slider.sliding[id] = true;
					new Effect.Slide(
						id,
						{ 
							direction: leftToRight,
							x: _amnt, 
							afterFinish: function() {
								Slider.sliding[id] = false;
							}
						}
					);
				}
			}
		}
	},

	right: function (id) {
		if (!Slider.sliding[id]) {
			var _elems = Element.getElementsByAttribute(id, "rel", "slider");
			if (_elems.length > 1) {
				Slider.current[id] = Slider.current[id] || 0;
				var _page = Slider.current[id] + 1;

				if (_page < _elems.length) {
					Slider.markPage(id, _page+1);
					Slider.current[id] = _page;
					var _amnt = parseFloat(Element.getStyle(_elems[_page],'width') || '0');

					Slider.sliding[id] = true;
					new Effect.Slide(
						id,
						{ 
							direction: rightToLeft,
							x: _amnt, 
							transition: function(pos) { 
								pos = (- Math.cos(pos*Math.PI) / 2 + 0.5);
								pos = (- Math.cos(pos*Math.PI) / 2 + 0.5);
								var val = (- Math.cos(pos*Math.PI) / 2 + 0.5);
								return val; 
							},
							afterFinish: function() {
								Slider.sliding[id] = false;
							}
						}
					);
				}
			}
		}
	},

	getCurrentPage: function(id) {
		return Slider.current[id] || 0;
	},

	getPageLength: function(id, p) {
		var _elems = Element.getElementsByAttribute(id, "rel", "slider");
		if (_elems[p]) return Element.getElementsByAttribute(_elems[p], "rel", "item").length;
		return false;
	}
}