/**
 *trigger = {callback
 *
 */
var MegaSlider = Class.create({
	el: null,
	step: 73,
	max_left: 0,
	trigger   : null,

	initialize: function(el, step) {
		this.el   = $(el);
		this.step = step;
		this.updateViewWith();
		this.registerTriggers({});
	},

	slideImageRight: function() {		
		var element = this.el;
		var step    = -this.step;
		new Effect.Move(element, { x: step, mode: 'relative' });
		this._onUpdateRight();
	},

	slideImageLeft: function() {
	
		var element = this.el;
		var step    = this.step;
		new Effect.Move(element, { x: step, mode: 'relative' });
		this._onUpdateLeft();
	},

	_onUpdateLeft: function() {
		var element = this.el;
		var left    = parseInt(element.style.left);		
		
		if (left >= 0) {			
			this._trigger('left');
			new Effect.Move(element, {x: 0, mode: 'absolute'});
		}
	},

	_onUpdateRight: function() {
		var element = this.el;
		var left    = parseInt(element.style.left);
		var max_left= this.max_left;		
		
		if (left <= max_left) {
			this._trigger('right');
			new Effect.Move(element, {x: max_left, mode: 'absolute'});
		}

	},

	_trigger: function (type) {
		if(type != 'left') {
			type = 'right';
		}

		var trigger = this.trigger[type];

		if (!trigger.processing && Object.isFunction(trigger.callback)) {
			
			trigger.processing = true;
			var f = trigger.callback;
			f(this);
			
		}

	},

	switchTrigger: function(type, value) {
		if (type != 'left') {
			type = 'right';
		}
		this.trigger[type].processing = value;
	},

	updateViewWith: function(el) {
		if (el == null) {
			el = this.el.up();
		}

		var view_width = el.getWidth();
		this.max_left  = view_width - this.el.getWidth() ;

		if (this.max_left > 0 ) this.max_left = 0;
	},

	registerTriggers: function(obj) {
		var trigger_b = {callback: null, processing: true};
		var trigger   = {left:trigger_b, right: trigger_b};
		if (typeof obj == 'object') {
			
			trigger = Object.extend(trigger, obj);
			
		}
		this.trigger = trigger;
	}

});

