var SlideShow = new Class({
	Implements: [Options, Events],
	options: {
		slides: [],
		current: null,
		waitTime: 8000,
		fxTime: 800
	},
	initialize: function(options){
		var self = this;
		this.setOptions(options);
		
		this.createArray( $$('#banner .slide') );
		
		//this.options.slides[0].wrap.fade('in');
		
		this.ShowNextSlide();
		
		this.ShowNextSlide.periodical(this.options.waitTime, this);
		
		//this.showSlide( this.options.slides[2] );
		//this.randomSlide.periodical(this.options.waitTime, this);
	},
	
	CurrentSlide: null,
	
	ShowNextSlide: function(){
		var delay = 500;
		if( this.CurrentSlide == null )
		{
			this.CurrentSlide = 0;
			var delay = 0;
		}
		else
		{
			this.options.slides[this.CurrentSlide].image.fade('out');
			this.options.slides[this.CurrentSlide].title.fade('out');
			this.options.slides[this.CurrentSlide].text.fade('out');
			
			this.CurrentSlide++;
			
			if( this.options.slides.length < (this.CurrentSlide+1) )
				this.CurrentSlide = 0;
		}
		
		(function(){
			this.options.slides[this.CurrentSlide].image.fade('in');
			(function(){
				this.options.slides[this.CurrentSlide].title.fade('in');
				this.options.slides[this.CurrentSlide].text.fade('in');
			}).bind(this).delay(delay);
		}).bind(this).delay(delay);
		
		
		this.startCountdown();
	},
	
	randomSlide: function(){
		var array = this.options.slides.filter(function(item, index){
			return item != this.options.current;
		},this);
		
		this.showSlide( array.getRandom() );
	},
	hideSlide: function(slide){
		
		slide.imageFxOut.start({
			'opacity': 0
		});
		
		(function(){
			slide.titleFxOut.start({
				'right': [0,40],
				'opacity': 0
			});
			
			slide.textFxOut.start({
				'right': [0,40],
				'opacity': 0
			});
		}).bind(this).delay((this.options.fxTime*1));
	},
	showSlide: function(slide){
		
		if( this.options.current != null )
			this.hideSlide( this.options.current );
		
		if( slide.imageFxIn == null)
		{
			slide.imageFxIn = new Fx.Morph( slide.image, { 'duration': (this.options.fxTime*1), 'link': 'cancel', 'transition': Fx.Transitions.Quad.easeInOut } );
			slide.imageFxOut = new Fx.Morph( slide.image, { 'duration': (this.options.fxTime*1), 'link': 'cancel', 'transition': Fx.Transitions.Quad.easeInOut } );
		}
		
		if( slide.titleFxIn == null )
		{
			slide.titleFxIn = new Fx.Morph( slide.title, { 'duration': (this.options.fxTime*1), 'link': 'cancel', 'transition': Fx.Transitions.Expo.easeOut } );
			slide.titleFxOut = new Fx.Morph( slide.title, { 'duration': (this.options.fxTime*0.5), 'link': 'cancel', 'transition': Fx.Transitions.Quad.easeIn } );
		}
		
		if( slide.textFxIn == null )
		{
			slide.textFxIn = new Fx.Morph( slide.text, { 'duration': (this.options.fxTime*1), 'link': 'cancel', 'transition': Fx.Transitions.Expo.easeOut } );
			slide.textFxOut = new Fx.Morph( slide.text, { 'duration': (this.options.fxTime*0.5), 'link': 'cancel', 'transition': Fx.Transitions.Quad.easeIn } );
		}
		
		if( this.options.current == null )
		{
			slide.image.setStyle('opacity', 1);
			slide.title.setStyle('opacity', 1);
			slide.text.setStyle('opacity', 1);
		}
		else
		{
		
			(function(){
			
				(function(){
					slide.imageFxIn.start({
						'opacity': 1
					});
				}).bind(this).delay((this.options.fxTime*1));
				
				(function(){
					slide.titleFxIn.start({
						'right': [-120,0],
						'opacity': 1
					});
					
					slide.textFxIn.start({
						'right': [-120,0],
						'opacity': 1
					});
				}).bind(this).delay((this.options.fxTime*0));
			
			}).bind(this).delay((this.options.fxTime*1.5));
			
			
		}
		
		this.startCountdown();
		this.options.current = slide;
		
		
	},
	startCountdown: function(){
		var all = $('count').getChildren();
		
		var count = [];
		count[1] = $('count').getChildren('.count-0');
		count[2] = $('count').getChildren('.count-1');
		count[3] = $('count').getChildren('.count-2');
		count[0] = $('count').getChildren('.count-3');
		
		var secs = this.options.waitTime;
		var foo = (this.options.waitTime / 4);
		foo = foo.round();
		
		function countdown()
		{
			secs -= foo;
			
			all.fade('out');
			count[(((secs / foo).round()))].fade('in');
			
			if( secs <= 0 )
				timer = $clear(timer);
		}
		
		var timer = countdown.periodical(foo);
	},
	createArray: function(slides){
		var i = 0;
		
		slides.each(function(slide){
			var image = slide.getChildren('.image');
			var headline = slide.getChildren('.title');
			var text = slide.getChildren('.text');
			
			$$(image,headline,text).setStyle('opacity', 0);
			slide.setStyle('opacity', 1);
			
			this.options.slides[i] = {
				'wrap': slide,
				'image': image[0],
				'title': headline[0],
				'text': text[0]
			}
			
			if( !Browser.Engine.trident )
				Cufon.replace( headline[0] );
			
			i++;
			
		}, this);
		
	}
});
