
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 : customInterval,
					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'})
		}
	}
);


