
var SlideShow = new Class({
    initialize: function(container, options) {
        this.container = $(container);
        if (!this.container.hasClass('hasSlideShow')) {
            this.container.addClass('hasSlideShow');
            this.slides = [];
            this.buttons = [];
            this.setOptions({
                onRotate: Class.empty,
                onStop: Class.empty,
                onAutoPlay: Class.empty,
                onShowSlide: Class.empty,
                slidesSelector: ".slide",
                buttonsSelector: ".slidebutton",
                slideInterval: 5000,
                transitionDuration: 700,
                startIndex: 0,
                buttonOnClass: "selected",
                buttonOffClass: "off",
                rotateAction: "none",
                rotateActionDuration: 200,
                autoplay: true
            }, options);
            this.slides = $(container).getElements(this.options.slidesSelector);
            this.buttons = $(container).getElements(this.options.buttonsSelector);
            this.createFx();
            this.showSlide(this.options.startIndex);
            if (this.options.autoplay) this.autoplay();
            if (this.options.rotateAction != 'none') this.setupAction(this.options.rotateAction);
            return this;
        }
        else
            return false;
    },
    setupAction: function(action) {
        this.buttons.each(
				function(el, idx) {
				    $(el).addEvent(
						action,
						function() {
						    this.slideFx.setOptions(this.slideFx.options, { duration: this.options.rotateActionDuration });
						    if (this.currentSlide != idx) this.showSlide(idx);
						    this.stop();
						} .bind(this)
					)
				},
				this
			);
    },
    createFx: function() {
        this.slideFx = new Fx.Elements(this.slides, { duration: this.options.transitionDuration });
        this.slides.each(function(slide) { slide.setStyle('opacity', 0) });
    },
    showSlide: function(slideIndex) {
        var action = {};
        this.slides.each(
				function(slide, index) {
				    if (index == slideIndex && index != this.currentSlide) {
				        $(this.buttons[index]).removeClass(this.options.buttonOffClass).addClass(this.options.buttonOnClass);
				        
				        action[index.toString()] = { opacity: 1
				        };
				    }
				    else {
				        $(this.buttons[index]).removeClass(this.options.buttonOnClass).addClass(this.options.buttonOffClass);
				        
				        action[index.toString()] = {
				            opacity: 0
				        };
				    }
				},
				this
			);
        this.fireEvent('onShowSlide', slideIndex);
        this.currentSlide = slideIndex;
        this.slideFx.start(action);
    },
    autoplay: function() {
        this.createFx();
        this.slideshowInt = this.rotate.periodical(this.options.slideInterval, this);
        this.fireEvent('onAutoPlay');
    },
    stop: function() {
        clearInterval(this.slideshowInt);
        this.fireEvent('onStop');
    },
    rotate: function() {
        current = this.currentSlide;
        next = (current + 1 >= this.slides.length) ? 0 : current + 1;
        this.showSlide(next);
        this.fireEvent('onRotate');
    },
    show: function() {
    $(this.options.slideShowContainer).setStyle('visibility', 'visible');
        if (!$(this.options.slideShowContainer).visible()) {
            $(this.options.slideShowContainer).show();
        }
    },
    hide: function() {
    $(this.options.slideShowContainer).setStyle('visibility', 'hidden');
    }
}
);
SlideShow.implement(new Options);
SlideShow.implement(new Events);

var slideshow = null;
window.onDomReady(
	function(){
		if($('SlideShow'))
		{
			slideshow = new SlideShow($('SlideShow'),{rotateAction:'mouseover'})
		}
	}
);


