var multiSlider = new Class({

	getOptions: function(){
		return {
			aniWait: false,
			aniDuration: 1500,
			aniOffset: {'x': 0, 'y':0},
			aniTransition: Fx.Transitions.Quad.easeInOut,
			elementWidth: 129
		};
	},

	initialize: function(target, options){
		this.setOptions(this.getOptions(), options);

		this.targetEle = $(target);
		this.sliderContent = this.targetEle.getElements('ul');

		this.leftScroll = new Element('div').addClass('scrollLeft').injectInside(this.targetEle).addEvents({'mouseenter': this.rollOver.bind(this), 'mouseleave': this.rollOver.bind(this)});
		this.rightScroll = new Element('div').addClass('scrollRight').injectInside(this.targetEle).cloneEvents(this.leftScroll);
		this.scrollContainer = new Element('div').addClass('styleScroller').injectAfter(this.rightScroll);
		this.scrollBox = new Element('div').addClass('styleBox').injectInside(this.scrollContainer);
		this.sliderContent.injectInside(this.scrollBox);

		this.aniScroll = new Fx.Scroll(this.scrollContainer, {
			wait: this.options.aniWait,
			duration: this.options.aniDuration,
			offset: this.options.aniOffset,
			transition: this.options.aniTransition
		});

		this._currentX = 0;

		this._items = this.targetEle.getElements('li').length;

		this._maxX = (this._items * this.options.elementWidth);
		this._sliderSize =  this.scrollContainer.getStyle('width').toInt();
		this._scrollValue = this.options.elementWidth * 5;

		this.setActions();
		this.currentX(0);
	},

	rollOver: function(evt)
	{
		if (evt.target.hasClass('scrollLeft') == true)
		{
			evt.target.toggleClass('scrollLeft_on');
		}
		else if(evt.target.hasClass('scrollRight') == true)
		{
			evt.target.toggleClass('scrollRight_on');
		}
	},

	setActions: function()
	{
		this.leftScroll.addEvent('click', function(event) {
			event = new Event(event).stop();
			this.aniScroll.scrollTo(this.currentX(-this._scrollValue),0);
		}.bind(this));

		this.rightScroll .addEvent('click', function(event) {
			event = new Event(event).stop();
			this.aniScroll.scrollTo(this.currentX(this._scrollValue),0);
		}.bind(this));
	},

	opacFader: function(target, val)
	{
		var fader = new Fx.Style(target, 'opacity', {duration: 750, wait:false, transition: Fx.Transitions.Cubic.easeInOut});
		fader.start(val);
	},

	currentX: function(pushVal)
	{
		this._currentX += pushVal;

		if (this._currentX <= 0)
		{
			this._currentX = 0;
			this.opacFader(this.leftScroll,.25);
		}else{
			this.opacFader(this.leftScroll,1);
		}

		if ((this._currentX + this._sliderSize) >= this._maxX)
		{
			this._currentX = (this._maxX - this._sliderSize);
			this.opacFader(this.rightScroll,.25);
		}else{
			this.opacFader(this.rightScroll,1);
		}

		return this._currentX;
	}
})
multiSlider.implement(new Options);
multiSlider.implement(new Events);
