
function Slideshow(){
	var ltr = null;
	var idx = -1;
	var items = [];
	var me = this;
	var $root;
	var previousIndex = -1;
	var build = function(){
		$root = $(me.target);
		$root.empty().addClass('slideshow');
		
		items = [];
		for(var i=0; i < me.data.length; i++){
			var $item = $(me.itemRenderer(i,me.data[i]));
			$item.attr('_index',i);
			$item.fadeOut(0);
			$item.appendTo($root);
			items.push($item);
		}
	}
	
	this.start = function(){
		Slideshow.init();
		idx = -1;
		me.index = -1;
		build();
		me.next();
	}
	
	var _render = function(){
		
		var _transitionTime = me.transitionTime;
		var _interval = me.interval;
		
		if(me.data[me.index].transitionTime)
			_transitionTime = me.data[me.index].transitionTime;
		if(me.data[me.index].interval)
			_interval = me.data[me.index].interval;
		
		if(previousIndex>=0 && previousIndex != me.index && me.style == Slideshow.Styles.Normal){
			$(items[previousIndex]).removeClass('slideshow-item-selected').fadeOut(_transitionTime);
		}
		if(me.index >= 0 && me.index < items.length){
			$(items[me.index]).addClass('slideshow-item-selected').fadeIn(_transitionTime,function(){
				ltr = setTimeout(me.next, _interval)
				if(previousIndex>=0 && previousIndex != me.index){
					$(items[previousIndex]).removeClass('slideshow-item-selected').fadeOut(0);
				}
			});
		}
		idx = me.index;
	}
	
	this.moveTo = function(newIndex){
		clearTimeout(ltr);
		if(items.length < 1){
			alert('Slideshow/moveTo : no items given');
			return;
		}
		previousIndex = idx = me.index;
		
		me.index = newIndex;
		me.index%= items.length;
		if(me.index < 0 ) me.index ++;
		
		_render();
	}
	
	this.next = function(){
		clearTimeout(ltr);
		if(items.length < 1){
			alert('Slideshow/next : no items given');
			return;
		}
		previousIndex = idx = me.index;
		
		me.index = idx +1;
		me.index%= items.length;
		
		_render();
	}
	
	this.previous = function(){
		clearTimeout(ltr);
		if(items.length < 1){
			alert('Slideshow/previous : no items given');
			return;
		}
		previousIndex = idx = me.index;
		
		me.index = idx -1;
		if(me.index >= 0) me.index += items.length;
		
		_render();
	}
	this.itemRenderer = function(i,dataRow){
	
		var $item = $('<div class="slideshow-item"><img src="'+dataRow.image+'" border="0" /></div>');
		return $item;
	}
}
Slideshow.init = function(){
	if(Slideshow.init.__initialized) return;
	Slideshow.init.__initialized = true;
	
	$('head').append('<style>.slideshow-item{ position:absolute; z-index:1; display:none; width:100%; height:100%;}.slideshow-item-selected{z-index:2;}.slideshow-clickable{cursor:pointer;}</style>');
}
Slideshow.Styles= {
	Normal : 0,
	Cross : 1
};
Slideshow.prototype.target = "#swf_banner";
Slideshow.prototype.images = [];
Slideshow.prototype.index = -1;
Slideshow.prototype.transitionTime = 4000;
Slideshow.prototype.interval = 16000;
Slideshow.prototype.next = function(){}
Slideshow.prototype.previous = function(){}
Slideshow.prototype.start = function(){}
Slideshow.prototype.style = Slideshow.Styles.Cross;
