

function SlideShow()
{
	this.running = false;
	this.imgId = 0;
	this.imgObj = null;
	this.oriThumbUrl = "";
	this.thumbUrl = "";
	// total thumbs
	this.numThumbs = 0;
	this.thumbs = new Array();
	this.map = null;
	this.counter = 0;
	this.map = new Array();
	// thumbs in this slide show
	this.numSlideThumbs = 0;
	this.previewImg = "";
	this.complete0 = 0;

	this.setPreviewImage = function(preview) {
			this.previewImg = preview;
	}
	
	this.preloadAllThumbs = function(originalCounter)
	{
		// i index of the slided thumb
		
		for (var i = 0; i < this.numSlideThumbs; ++i)
			this.thumbs[i] = new Image();
			
		this.loadThumb(0,originalCounter);
		
		
		for (var i = 1; originalCounter == this.counter && this.running && i < this.numSlideThumbs; ++i) {
			setTimeout(
				(function(obj, n,originalCounter)
					{ 
						return function () {
							obj.loadThumb(n,originalCounter) 
						} 
					}
				)(this, i,originalCounter), i * 250);
		}
		

	}

	this.loadThumb = function(n,originalCounter)
	{
		

		if (this.running) {
			// stop recurtion
			if(originalCounter != this.counter) {
				//alert("stop preload : "+this.counter+"_"+originalCounter);
				return;
			}
			this.thumbs[n].src = this.getThumbUrl(n);
		}
	}

	this.getThumbUrl = function(n)
	{
		// convert
		var thumb_id = ""+this.map[n];
		// fill
		while(thumb_id.length < this.complete0 ) {
			thumb_id = "0"+thumb_id;
		}
		
		return (this.thumbUrlBefore + thumb_id + this.thumbUrlAfter);
	}

	this.animate = function(n, id, originalCounter)
	{
		// stop recurtion
		if(originalCounter != this.counter) {
			return;
		}
		
		if (this.running && id == this.imgId)
		{
			if (this.thumbs[n].complete)
			{
       	//var next = (n + 1 == this.numThumbs ? 0 : n + 1);
				var next = n + 1;
				
				// break recursion
				if(next == this.numSlideThumbs) {
					this.end();
					return ;
				}
				
				if (!this.thumbs[n].height)
				{
					this.animate(next, id, originalCounter);
					return ;
				}
				this.imgObj.src = this.thumbs[n].src;
				setTimeout(
					(
						function(obj, n, id, originalCounter)
						{ 
							return function () { 
								obj.animate(n, id, originalCounter) 
							} 
						}
					)(this, next, id, originalCounter), 1000);
			}
			else
			{
				setTimeout(
					(
						function(obj, n, id, originalCounter)
						{ 
							return function () { 
								obj.animate(n, id, originalCounter) 
							} 
						}
					)(this, n, id, originalCounter), 25);
			}
   		}
	}

	this.stop = function()
	{
		this.running = false;
		this.imgId = 0;
    this.imgObj.src = this.oriThumbUrl;
	}

	this.start = function(img,url_before,url_after,nb_thumbs)
	{
		
		if (!this.running)
		{
			this.running = true;
			
			this.counter++;
			
			this.imgId = 0;
			this.numThumbs = nb_thumbs;
			
			this.imgObj = img;
			this.oriThumbUrl = this.imgObj.src;
			
			this.thumbUrlBefore = url_before;
			this.thumbUrlAfter = url_after;
			
			var temp = Array(nb_thumbs);
			for(var i = 0; i < nb_thumbs; i++) 
			{
				temp[i] = i+1;
			}
			
			this.map = new Array();
		
			var i = 0;
			var avg = 6;
			var ecart_type = 2; 
			var index = 0;
			var iter = 0;
			
			// while there is data
			while(temp.length > 0) {
				index = avg-ecart_type+Math.round((ecart_type * 2) * Math.random())+index;
				if(index >= temp.length) {
					break;
				}
				this.map.push(temp[index]);
				temp.splice(index,1);
				iter++;
			}
			
			this.numSlideThumbs = iter;
			//document.getElementById("name").innerHTML = this.map;
			if(this.numSlideThumbs > 0){
				this.preloadAllThumbs(this.counter);
				this.animate(0, this.imgId, this.counter);
			} else {
				this.end();
			}
		}
	}
	
	this.end = function(n) {
		this.imgObj.src = this.previewImg;
	}
	
	this.completeBy0 = function(n) {
		this.complete0 = n;
	}
}


