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] || {});

		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]) {
			Slider.sliding[id] = true;
			var _elems = $Rels(id, "slider");

			if (_elems.length > 1) {
				var _amnt = parseFloat(Element.getStyle(_elems[0],'width') || '0');
				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;

				if (_amnt > 0) {
					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]) {
			Slider.sliding[id] = true;

			var _elems = Element.getElementsByAttribute($(id), "rel", "slider");
			if (_elems.length > 1) {
				var _amnt = parseFloat(Element.getStyle(_elems[0],'width') || '0');

				Slider.current[id] = Slider.current[id] || 0;
				var _page = (Slider.current[id] - 1) % _elems.length;
				_page = _page < 0 ? _page + _elems.length : _page;
				Slider.markPage(id, _page+1);
				Slider.current[id] = _page;

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

	right: function (id) {
		if (!Slider.sliding[id]) {
			Slider.sliding[id] = true;

			var _elems = Element.getElementsByAttribute($(id), "rel", "slider");
			if (_elems.length > 1) {
				var _amnt = parseFloat(Element.getStyle(_elems[0],'width') || '0');

				Slider.current[id] = Slider.current[id] || 0;
				var _page = (Slider.current[id] + 1) % _elems.length;
				Slider.markPage(id, _page+1);
				Slider.current[id] = _page;

				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;
						}
					}
				);
			}
		}
	}
}
