var Slideshow = new Class({
	Implements:Options,
	options: {
		transitionSpeed:1000,
		timerSpeed:7000,
		startSlide:0,
		indicatorSpeed:500
	},
	initialize: function(el,options){
		this.setOptions(options);
		this.instance = el;
		this.elements = this.options.elements;
		for(var i = 0; i < this.elements.length;i++){
			this.elements[i].setOpacity(0);
		}
		this.indicator = options.indicator;
		this.elements[0].setOpacity(1);
		this.startDelay();
		this.currentSlide = this.options.startSlide;
		this.position = this.instance.getPosition();
		this.info = options.info;
		
		for(var i = 0;i < this.info.length;i++){
			this.info[i].setOpacity(0);	
		}
		this.info[0].setOpacity(1);
		this.wrapper = options.wrapper;
		this.title = options.title;
		this.noAction = options.noAction;
		
		this.noAction.addEvent('mouseenter', this.stopDelay.bind(this));
		this.noAction.addEvent('mouseleave', this.startDelay.bind(this));
		this.wrapper.addEvent('mouseenter',this.titleSlideIn.bind(this));
		this.wrapper.addEvent('mouseleave',this.titleSlideOut.bind(this));
		this.indicator.addEvent('click', this.changeSlideClick.bindWithEvent(this));

	},
	changeSlide: function(num){
		var slideHolders = [];
		this.positionSlides(this.elements[this.currentSlide]);
		
		if(this.currentSlide == 0){
			slideHolders[0] = this.elements[0];
			slideHolders[1] = this.elements[1];
			var upNum = 1;
			var downNum = 0;
		} 
		if(this.currentSlide == 1){
			slideHolders[0] = this.elements[1];
			slideHolders[1] = this.elements[2];
			var upNum = 2;
			var downNum = 1;
		}
		if(this.currentSlide == 2){
			slideHolders[0] = this.elements[2];
			slideHolders[1] = this.elements[0];
			var upNum = 0;
			var downNum = 2;
		}
		this.indicatorUp(upNum);
		this.indicatorDown(downNum);
		this.fadeTitlesOut(this.info[downNum]);
		this.fadeTitlesIn(this.info[upNum]);
				
		this.fade = new Fx.Elements(slideHolders,{
			link:'chain',
			duration:this.options.transitionSpeed,
			onComplete:function(){
				
			}.bind(this)
			
		});
		
		this.fade.start({
			0 : {
				'opacity':0
			},
			
			1 : {
				'opacity':1
			} 
		
		});
		if(++this.currentSlide == this.elements.length) this.currentSlide = 0;
		
	},
	startDelay: function(){
		this.delayFunction = this.changeSlide.periodical(this.options.timerSpeed,this);	
	},
	stopDelay: function(){
		$clear(this.delayFunction);
	},
	fadeTitlesOut:function(el){
		new Fx.Morph(el,{duration:400,onComplete:function(){
			el.addClass('hide');	
		}.bind(this)}).start({'opacity':0});
	},
	fadeTitlesIn:function(el){
		//console.log('in '+num);
		if(el.hasClass('hide')) el.removeClass('hide');
		new Fx.Morph(el,{duration:400}).start({'opacity':1.0});
	},
	titleSlideIn: function(e){	
		$clear(this.delayFunction);
		if(e.target.id == this.noAction.id){
			return false;
		}
		this.title.href = this.info[this.currentSlide].getElements('h1 a')[0].href;
		var titlePos = this.title.getStyle('top').toInt();
		this.slideAnimation = new Fx.Morph(this.title,{duration:200});
		this.slideAnimation.cancel();
		this.slideAnimation.start({'top':240});
	},
	titleSlideOut: function(){
		this.slideNum = this.currentSlide + 1;
		this.startDelay();
		if(this.slideAnimation){
			this.slideAnimation.cancel();
			this.slideAnimation.start({'top':412});
		}	
	},
	
	indicatorUp: function(num){
		//margin-top:20 is down
		//margin-top:10 is up
		//console.log(num);
		//this.indicator[num].addClass('highlight');
		//this.indicator[num].setStyle('background-color':'#59D100');
		new Fx.Morph(this.indicator[num],{duration:this.options.indicatorSpeed,onComplete:function(){
			this.indicator[num].addClass('highlight');	
		}.bind(this)}).start({
			'margin-top':10,
			'background-color':'#59D100'
		});	
	},
	indicatorDown: function(num){
		//console.log(num);
		//this.indicator[num].removeClass('highlight');
		new Fx.Morph(this.indicator[num],{duration:this.options.indicatorSpeed,onComplete:function(){
			this.indicator[num].removeClass('highlight');
		}.bind(this)}).start({
			'margin-top':20,
			'background-color':'#333333'
		});
	},
	positionSlides: function(el){
		el.setStyles({
			'position':'absolute',
			'top':0,
			'left':0
		});
	},
	getCurrentSlide: function(){
		for(var i = 0; i<this.indicator.length;i++){
			if(this.indicator[i].hasClass('highlight')) var current = i;
			break;
		}
		return current;
	},
	changeSlideClick: function(e){
		e.stop();
		this.stopDelay();
		if(e.target.hasClass('highlight')) return false;
		//this.currentSlide = this.getCurrentSlide();
		//console.log(this.currentSlide);
		//this.indicator[this.currentSlide].removeClass('highlight');
		for(var i = 0; i < this.indicator.length;i++){
			if(e.target == this.indicator[i]){
				var goToNum = i;
				break;
			}
		}
		
		this.indicator[i].addClass('highlight');
		this.positionSlides(this.elements[this.currentSlide]);
		this.positionSlides(this.elements[i]);
		//console.log("current slide "+this.currentSlide);
		//console.log("slide to switch to "+i);
		
		var slideHolders = [];
		//var upNum = i;
		//var downNum = this.currentSlide;
		//this.indicator[i].addClass('highlight');
		this.indicatorUp(i);
		this.indicatorDown(this.currentSlide);
		this.fadeTitlesOut(this.info[this.currentSlide]);
		this.fadeTitlesIn(this.info[i]);
		
		slideHolders[0] = this.elements[this.currentSlide];
		slideHolders[1] = this.elements[i];
		
		this.fade = new Fx.Elements(slideHolders,{
			duration:this.options.transitionSpeed,
			onComplete:function(){
				this.currentSlide = i;
			}.bind(this)
		});
		
		this.fade.start({
			0 :{
				'opacity':0
			
			},
			1:{
				'opacity':1	
			}
		});
		
			
	}
});