// TransHandler Version 1.0
// José Proença
// 2004-10-25

var TransHandlerID = new Array();
var TransHandlerState = new Array();
var TransHandlerStateLength = new Array();
var TransHandlerLoop = new Array();
var TransHandlerFilterNum =  new Array();
var TransHandlerImageContainer = new Array();
var TransHandlerImageElement = new Array();
var TransHandlerTimeInterval = new Array();
var TransHandlerStartTimeInterval = new Array();
var TransHandlerImageFilePath = new Array();

function TransHandlerGo(TransID, StartState, StateLength, Loop, FilterNum, ImageContainerId, ImageElementId, StartTimeInterval, TimeInterval, FilePath)
{
	var nIdx = 	TransHandlerFindIdx(TransID);
	if (nIdx == null)
	{
		var oImageElement = document.getElementById(ImageElementId);
		if (oImageElement != null)
		{
			var oImageContainer = document.getElementById(ImageContainerId);
			nIdx = TransHandlerID.length;
			TransHandlerID[nIdx] = TransID;
			TransHandlerState[nIdx] = StartState;
			TransHandlerStateLength[nIdx] = StateLength;
			TransHandlerLoop[nIdx] = Loop;
			TransHandlerFilterNum[nIdx] =  FilterNum;
			TransHandlerImageContainer[nIdx] = oImageContainer;
			TransHandlerImageElement[nIdx] = oImageElement;
			TransHandlerTimeInterval[nIdx] = TimeInterval;
			TransHandlerStartTimeInterval[nIdx] = StartTimeInterval;
			TransHandlerImageFilePath[nIdx] = FilePath;
		}
	}

	if (nIdx != null)
	{
		var oImage = TransHandlerImageElement[nIdx];
		// The following trick makes possible to have several simulteneous slideshows with different TransID
		eval("function TransHandlerImagePlay"+nIdx+"() {TransHandlerImagePlay("+nIdx+");};");
		oImage.onload = eval("TransHandlerImagePlay"+nIdx+";");
		if (TransHandlerGoNextState(nIdx))
			window.setTimeout("TransHandlerGoOn("+nIdx+")", TransHandlerStartTimeInterval[nIdx]);
	}
}

function TransHandlerImagePlay(ThIdx)
{
	try
	{
		var oTransContainer = TransHandlerImageContainer[ThIdx];
		if (oTransContainer != null)
			oTransContainer.filters[TransHandlerFilterNum[ThIdx]].Play();
	}
	catch(e)
	{
	}
	if (TransHandlerGoNextState(ThIdx))
		window.setTimeout("TransHandlerGoOn("+ThIdx+")", TransHandlerTimeInterval[ThIdx]);
}

function TransHandlerGoOn(ThIdx)
{
	try
	{
		var oTransContainer = TransHandlerImageContainer[ThIdx];
		if (oTransContainer != null)
			oTransContainer.filters[TransHandlerFilterNum[ThIdx]].Apply();
	}
	catch(e)
	{
	}
	TransHandlerImageElement[ThIdx].src = TransHandlerImageFilePath[ThIdx].replace("#", TransHandlerState[ThIdx]);
}

// advances state returns a boolean indicating if should process next state or not
function TransHandlerGoNextState(ThIdx)
{
	TransHandlerState[ThIdx] =  TransHandlerState[ThIdx] + 1;
	if (TransHandlerState[ThIdx] >= TransHandlerStateLength[ThIdx])
	{
		if (TransHandlerLoop[ThIdx])
		{
			TransHandlerState[ThIdx] = 0;
			return true;
		}
		else
			return false;
	}
	else
		return true;
}

function TransHandlerFindIdx(TransID)
{
	var bFound = false;
	var n = TransHandlerID.length-1;
	while ((n>=0) && !bFound)
	{
		if (TransHandlerID[n] == TransID)
			bFound = true;
		else
			n--;
	}
	if (bFound)
		return n;
	else
		return null;
}

