var SlideShow = new Class({
	Implements: Options,
	options: {
		delay: 3000,
		loop_start: 0,
		slide_elements: '#slideshow_header .slide'
	},
	initialize: function(options) {
		this.setOptions(options);
		this.current_header = 0;
		this.previous_header = -1;
		this.header_timer = null;
		this.header_playing = true;
		this.slides = $$(this.options.slide_elements);
	},
	show_header: function(index)
	{
		if (this.slides.length <= index) index = this.options.loop_start;
		if(this.current_header == index) return;
		var slide_element=this.slides[index];
		if (this.previous_header >= 0) this.slides[this.previous_header].setStyles({'display': 'none', 'z-index': 0});
		if (this.current_header >= 0) this.slides[this.current_header].setStyle('z-index', 2);
		$$('#welcome_header .button').each(function(el){
			el.removeClass('selected');
		});
		
		slide_element.setStyle('display', 'block');
		
		if (this.current_header == -1) {
			slide_element.setStyle('z-index', 1);
			slide_element.fade('hide');
			slide_element.fade('in');
		} else {
			slide_element.set('opacity', 1);
			slide_element.setStyle('z-index', 1);
			this.slides[this.current_header].get('tween').start('opacity', 0).chain(
				function() {
					this.slides[this.current_header].setStyle('z-index', 3);
				}.bind(this)
			);
		}
		
		if ($('header-button-'+index)) $('header-button-'+index).addClass('selected');
		this.previous_header = this.current_header;
		this.current_header = index;
		
		clearTimeout(this.header_timer);
		opt = slide_element.retrieve('options');
		if (slide_element.retrieve('loaded', false)) this.header_timer = setTimeout(this.advance_header.bind(this), $chk(opt.delay)?opt.delay:this.options.delay);
		else {
			slide_element.store("imgs", (slide_element.tagName == "img")?new Elements([slide_element]):slide_element.getElements('img'));
			slide_element.store('slideshow', this).addEvent('checknow', function(){
				imgs = this.retrieve('imgs');
				for(i=0; i<imgs.length; i++) { if (!imgs[i].readyState == "complete") return false; } //return
				
				this.store('loaded', true);
				var ss = this.retrieve('slideshow');
				opt = slide_element.retrieve('options');
				ss.header_timer = setTimeout(ss.advance_header.bind(ss), $chk(opt.delay)?opt.delay:ss.options.delay);
				imgs.removeEvents('load');
				this.removeEvents('checknow');
			});
			slide_element.retrieve('imgs').addEvent('load', function(){
				this.fireEvent('checknow');
			}.bind(slide_element));
			
			if(slide_element.retrieve('options', JSON.decode(slide_element.get('rel'))) == null)
				slide_element.store('options', {});
			slide_element.fireEvent('checknow');
		}
		
	},

	play_pause: function() {
		this.header_playing = !this.header_playing;
		this.advance_header();
		if(this.header_playing) $('play_pause_button').removeClass("paused");
		else $('play_pause_button').addClass("paused");
	},

	advance_header: function()
	{
		if (!this.header_playing) return;
		this.show_header(this.current_header + 1);
	},
	
	start: function() {
		this.show_header(this.current_header--);	
	}
});
