SlideshowPlayer = Class.create({
	initialize: function(element, options){
		Object.extend(this, pH8.Mixin.needsSource);
		Object.extend(this, pH8.Mixin.needsTemplates);
		this.element = $(element);
		this.options = options || {};
		this.delegate = this.options.delegate || {};
		
		this.element.down('#imageholder').setStyle({
			display: 'block'
		});

		this.waitForSource(this.delegate, this.onSourceReady.bind(this));
		
	},
	onReady: function(){
		if(!this.isStarted){
			this.start();
		}
	},
	start: function(){
		document.observe('slideshowplayer:refreshdata',this.refresh.bindAsEventListener(this));
		document.observe('slideshowplayer:hidedata',this.hideData.bindAsEventListener(this));
		this.isStarted = true;
		this.refresh();
	},
	stop: function(){
		document.stopObserving('slideshowplayer:hidedata');
		document.stopOserving('slideshowplayer:refreshdata');
	},
	refresh: function(){
		if(this.delegate && this.delegate.needNewDisplayData){
			var data = this.delegate.needNewDisplayData();
		}
		
		this.element.down('#imageholder img').writeAttribute('src', data.url);
		setTimeout(function(){
			this.showData();
		}.bind(this),this.options.delayPlayerInSeconds * 1000);
	},
	showData: function(){
		//do fade in
		Effect.Appear(this.element.down('#imageholder'),{
			afterFinish: function(){
				this.interval = setTimeout(this.hideData.bind(this), (this.options.refreshAfterSeconds * 1000));
				document.fire('slideshowplayer:showdata')
			}.bind(this)
		});
	},
	hideData: function(){
		clearTimeout(this.interval);
		Effect.Fade(this.element.down('#imageholder'),{
			afterFinish: function(){
				document.fire('slideshowplayer:refreshdata');
			}.bind(this)
		});
		//do fade out
	},
	onSourceReady: function(){
		this.sourceReady = true;
		this.onReady();
	}
});