var carusel = new Class({
	options: {
		btPrev: 'a.btn-prev',
		btNext: 'a.btn-next',
		holder: 'div',
		mover: '.slide',
		scrollEl: 'li',
		duration : 3000,
		autoSlide:false,
		effect: Fx.Transitions.Expo.easeOut
	},

	// create class
	initialize: function(element, options){
	    this.setOptions(options);
		var _this = this;
		
		if (this.options.btNext)
				this.next = element.getElement(this.options.btNext);
			else this.next = false;
		if (this.options.btPrev)
				this.prev = element.getElement(this.options.btPrev);
			else this.prev = false;
		if (this.options.tabLinks)
				this.links = element.getElements(this.options.tabLinks);
			else this.links = false;
			
		this.holder = element.getElement(this.options.holder);
		this.mover = this.holder.getElements(this.options.mover)[0];
		this.scrollEl = this.holder.getElements(this.options.scrollEl);
		this.size = this.holder.getSize();
		this.step = this.size.x;
		
		this.animated = false;
		this.duration = this.options.duration;
		this.maxMargin = this.scrollEl.length * this.scrollEl[0].getSize().x - this.step;
		this.length = Math.floor(this.maxMargin/this.step)+1;
		this.current = 0;
		this.margin = 0;
		this.timer = false;
		
		this.mover.fx = new Fx.Tween(this.mover, {
			duration:_this.duration,
			transition: _this.options.effect,
			onStart: function(){
				_this.animated = true;
			},
			onComplete: function(){
				_this.animated = false;
			}
		});
		
		if (this.options.autoSlide) {
			this.autoSliding();
		}
		
		if (this.maxMargin%this.step == 0) this.length -= 1;
		
		this.mover.addEvent('mouseover', function(){
			if (_this.timer) clearInterval(_this.timer);
			return false;
		}).addEvent('mouseout', function(){
			
			//_this.autoSliding();
			return false;
		});
		
		if (this.next) {
			this.next.addEvent('click', function(){
				if (!_this.animated) {
					_this.nextSlide();
				}
				return false;
			});
		}
		if (this.prev) {
			this.prev.addEvent('click', function(){
				if (!_this.animated) {
					_this.prevSlide();
				}
				return false;
			});
		}
	},
	nextSlide: function(){
		this.current += 1;
		if (this.current > this.length) this.current = 0;
		this.margin = this.step*this.current;
		if (this.current >= this.length) this.margin = this.maxMargin;
		this.mover.fx.start('marginLeft', -(this.margin));
	},
	prevSlide: function(){
		this.current -= 1;
		if (this.current < 0) this.current = this.length;
		this.margin = this.step*this.current;
		if (this.current >= this.length) this.margin = this.maxMargin;
		this.mover.fx.start('marginLeft', -(this.margin));
	},
	autoSliding : function(){
		var _this = this;
		this.timer = setInterval(function(){_this.nextSlide()}, this.options.autoSlide);
	},

	// add options and events
	Implements : [Options, Events]
});

window.addEvent('domready', function(){
	if ($('gallery1')) {
		var _carusel = new carusel($('gallery1'));
	}
	if ($('gallery2')) {
		var _carusel = new carusel($('gallery2'));
	}
});
