var SlidesTransitions = new Class({
	Implements: Options,
	options: {
		slidesSelector: '.slidesClass',
		buttonsClass: 'slidesButtons',
		slideDuration: 5000,
		transitionDuration: 2000,
		pauseOnHover: false
	},
	initialize: function(options){
		this.setOptions(options);
		this.slides = $$(this.options.slidesSelector);
		if($type(this.slides) == 'array' && this.slides.length > 0) {
			this.currentSlide = 0;
			this.initButtons();
			this.initEffects();
			this.start();
		}        
	},
	initButtons: function() {
		var numOfSlides = this.slides.length;
		var obj = this;
		
		var ul = new Element('ul', { 'class': this.options.buttonsClass });
		for(var i = 0; i < numOfSlides; i++) {
			var li = new Element('li');
			var a = new Element('a', { 'rel':i });
			a.set('href', document.location);
			a.set('text', i + 1);
			a.addEvent('click', function(e){
				e.stop();
				obj.stop();
				obj.transition(parseInt(this.get('rel')));
			});
			li.adopt(a);
			ul.adopt(li);
		}
		this.buttons = ul;
		ul.inject(this.slides[numOfSlides - 1].getParent(), 'after');
	},
	initEffects: function() {
		var obj = this;

		this.slides.setStyle('opacity', 0.0);
		this.slides[this.currentSlide].setStyle('opacity', 1.0);
		this.buttons.getElements('li')[this.currentSlide].addClass('active');
		this.slides.set('tween', {
			duration: obj.options.transitionDuration,
			link:'cancel'
		});

		if(this.options.pauseOnHover) {
			this.slides.addEvents({
				'mouseenter': function(){
					obj.stop();
				},
				'mouseleave': function(){
					obj.start();
				}
			});
		}
	},
	start: function() {
		var _nextSlide = (this.currentSlide + 1 >= this.slides.length ) ? 0 : this.currentSlide + 1;
		this.transitionTimer = this.transition.delay(this.options.slideDuration, this, parseInt(_nextSlide));
	},
	stop: function() {
		clearTimeout(this.transitionTimer);
		this.transitionTimer = -1;
	},
	transition: function(nextSlide) {
		this.stop();
		
		this.slides[this.currentSlide].tween('opacity', 0.0);
		this.slides[this.currentSlide].getElement('div.slogan').setStyle('opacity', 0.0);
		
		this.buttons.getElements('li')[this.currentSlide].removeClass('active');

		this.slides[nextSlide].tween('opacity', 1.0);
		this.slides[nextSlide].getElement('div.slogan').setStyle('opacity', 1.0);
		this.buttons.getElements('li')[nextSlide].addClass('active');
		this.currentSlide = nextSlide;
		this.start();
	}
});
