function CMBslideshow()
{
	this.timeouts   = Array();
	this.images     = Array();
	this.preloads   = Array();
	this.delays     = Array();
	this.imgIndexes = Array();
	this.imgSizes   = Array();
	this.opacities  = Array();
	this.running    = Array();
}

CMBslideshow.prototype.preload = function(containerID,images)
{
	// Initialize container variables.
	this.running[containerID]    = true;
	this.imgIndexes[containerID] = 0;
	this.images[containerID]     = images;
	this.preloads[containerID]   = Array();
	this.opacities[containerID]  = 1.0;
	// Preload images.
	for(var i=0;i<this.images[containerID].length;i++)
	{
		this.preloads[containerID][i] = new Image();
		this.preloads[containerID][i].src =
		this.images[containerID][i];
	}
}

CMBslideshow.prototype.launch = function(containerID,delay)
{
	if (delay != null)
	{
		this.delays[containerID] = delay;
	}
	this.next(containerID);
}

CMBslideshow.prototype.stop = function(containerID)
{
	this.running[containerID]  = false;
	//this.timeouts[containerID] = null;
}

CMBslideshow.prototype.refresh = function(containerID)
{
	var container,images,imgBuffer,dblBuffer;
	
	container = document.getElementById(containerID);
	images = container.getElementsByTagName("img");
	imgBuffer = images[1];
	dblBuffer = images[0];
	
	this.imgIndexes[containerID]++;
	if (this.imgIndexes[containerID] >= this.images[containerID].length)
	{
		this.imgIndexes[containerID] = 0;
	}
	
	dblBuffer.src =
	this.images[containerID][this.imgIndexes[containerID]];
	
	this.transition(containerID);
}

CMBslideshow.prototype.next = function(containerID)
{
	if (this.running[containerID] == true)
	{
		var nextRefresh = "";
		nextRefresh += "CMBslideshow.refresh";
		nextRefresh += "('" + containerID + "')";
		this.timeouts[containerID] = window.setTimeout(nextRefresh,
		                                               this.delays[containerID]);
	}
}

CMBslideshow.prototype.transition = function(containerID)
{
	var container,images,imgBuffer,dblBuffer;
	
	container = document.getElementById(containerID);
	
	images = container.getElementsByTagName("img");
	imgBuffer = images[1];
	dblBuffer = images[0];
	
	this.opacities[containerID] = this.opacities[containerID] - 0.05;
		
	this.setOpacity(imgBuffer,this.opacities[containerID]);
	
	if (this.opacities[containerID] > 0)
	{
		var nextRefresh = "";
		nextRefresh += "CMBslideshow.transition";
		nextRefresh += "('" + containerID + "')";
		this.timeouts[containerID] = window.setTimeout(nextRefresh,50);
	}
	else
	{		
		this.opacities[containerID] = 1.0;
		imgBuffer.src =
		this.images[containerID][this.imgIndexes[containerID]];
		this.next(containerID);
	}
}

CMBslideshow.prototype.setOpacity = function(container,value)
{
	container.style.opacity = value;
	container.style.filter  = "alpha(opacity=" + Math.round(value*100) + ")";
}

CMBslideshow = new CMBslideshow();

/* ---- Refresher function called by framework ----------------- */
function receiveLoadedSlideShow(aResponse,aContainer)
{
	var aContent = decodeXmlResponse(aResponse,"content");
	var containerID = aContainer.id;
		
	if (aContent.length > 0)
	{
		var relaunch = false;
		if (CMBslideshow.running[containerID] == false)
		{
			relaunch = true;
		}
		CMBslideshow.stop(containerID);
		
		images = aContainer.getElementsByTagName("img");
		imgBuffer = images[1];
		dblBuffer = images[0];
				
		bContent = "";
		aOffset  = 0;
		aIndex   = 0;
		new_images = Array();
		while (aContent.indexOf(";",aOffset) != -1)
		{
			aBase   = aOffset;
			aOffset = aContent.indexOf(";",aOffset);
			new_images[aIndex] = aContent.substring(aBase,aOffset);
			aOffset++;
			aIndex++;
		}

		imgBuffer.src = new_images[0];
		dblBuffer.src = new_images[0];
		CMBslideshow.setOpacity(imgBuffer,1.0);

		if (relaunch == true)
		{
			CMBslideshow.preload(containerID,new_images);
			CMBslideshow.launch(containerID);		
		}
		else
		{
			CMBslideshow.preload(containerID,new_images);
		}

		aContainer.style.visibility = 'visible';
	}
	else
	{
		aContainer.style.visibility = 'hidden';
		CMBslideshow.stop(containerID);
	}
}