var objAniTimer = null;
var intAniLastFrameDelay = 2000;
var intAniIndividualFrameDelay = 300;
var intAniNextImg = 0;
var intAniCurrentImg = 0;
var intAniMinImage = 0;
var intAniMaxImage = 0;
var intAniImageArray;
var strAniFailedIndexList = ';';
var strAniDivNamePrefix = 'imageAni';
var strAniDivPageLoadingName = 'divImagePageLoading';
var bAniIndexAsc = true;
var bAniLoop = true;

function animationImageLoadFailed(strIndex)
{
	strAniFailedIndexList += strIndex + ';';
}
function animationInit(intMin, intMax, bAnimateIndexAsc)
{
	// Build list of successfully loaded images for animation
	var intCurrent = 0;
	intAniImageArray = new Array(intMax - intMin + 1);
	for(i = intMin; i <= intMax; i++)
	{	
		if ( strAniFailedIndexList.indexOf(';' + i + ';') == -1 )
		{
			intAniImageArray[intCurrent] = i;
			intCurrent++;
		}
	}

	bAniIndexAsc = bAnimateIndexAsc;
	intAniMinImage = 0;
	intAniMaxImage = --intCurrent;
	intAniNextImg = ( bAniIndexAsc ? intAniMinImage : intAniMaxImage );
	intAniCurrentImg = ( bAniIndexAsc ? intAniMaxImage : intAniMinImage );	
}

function animationPause()
{
	// Allows manual pause
	if ( objAniTimer != null ) clearInterval( objAniTimer );
}
function animationPlay()
{
	// Set individual frame delay
	if ( objAniTimer != null ) clearInterval( objAniTimer );

	try
	{
		document.getElementById(strAniDivNamePrefix).style.display="none";
	}
	catch(e) {}
	objAniTimer = setInterval( 'animationTimerTask()', intAniIndividualFrameDelay );
}
function animationRePlay()
{
	// Pause between loops is over so play if in looping mode
	//if ( bAniLoop ) 
}
function animationStepBackward()
{
	// Step backward one frame
	if ( objAniTimer != null ) clearInterval( objAniTimer );
	animationStepFrame(false);
}
function animationStepForward()
{
	// Step forward one frame
	if ( objAniTimer != null ) clearInterval( objAniTimer );
	animationStepFrame(true);
}
function animationStop()
{
	// Stop timer and reset next image to first
	if ( objAniTimer != null ) clearInterval( objAniTimer );

	var intCurrentImage = intAniCurrentImg;
	intAniNextImg = ( bAniIndexAsc ? intAniMinImage : intAniMaxImage );
	intAniCurrentImg = ( bAniIndexAsc ? intAniMaxImage : intAniMinImage );		
	
	animationMoveNextFrame();
	try
	{
		document.getElementById(strAniDivNamePrefix + intAniImageArray[intCurrentImage]).style.display="none";
	}
	catch(e) {}
}
function animationStepFrame(bForward)
{
	var bMoveFrame = true;
	
	// Check for index boundary if not looping
	if ( bForward )
	{
		bMoveFrame = !( ( (intAniCurrentImg == intAniMaxImage && bAniIndexAsc) || (intAniCurrentImg == intAniMinImage && !bAniIndexAsc) ) && !bAniLoop  );
				
	}
	else
	{
		bMoveFrame = !( ( (intAniCurrentImg == intAniMinImage && bAniIndexAsc) || (intAniCurrentImg == intAniMaxImage && !bAniIndexAsc) ) && !bAniLoop );
		if ( bMoveFrame ) 
		{
			intAniNextImg = ( bAniIndexAsc ? intAniCurrentImg - 1 : intAniCurrentImg + 1 );
		}
	}
	if (intAniNextImg > intAniMaxImage) intAniNextImg = intAniMinImage;
	if (intAniNextImg < intAniMinImage) intAniNextImg = intAniMaxImage;

	if ( bMoveFrame ) animationMoveNextFrame();
}
function animationMoveNextFrame()
{
	var bLastFrame = false;
	
	try
	{
		if (intAniCurrentImg != intAniNextImg)			
		{
			target = document.getElementById(strAniDivNamePrefix + intAniImageArray[intAniNextImg]); 
			source = document.getElementById(strAniDivNamePrefix + intAniImageArray[intAniCurrentImg]);
			target.style.display = "block";
			source.style.display = "none";
			intAniCurrentImg = intAniNextImg;
		}
	}
	catch(e) {}

	if ( bAniIndexAsc )
	{
		intAniNextImg++;
		if ( bLastFrame = (intAniNextImg > intAniMaxImage) ) intAniNextImg = intAniMinImage;
	}
	else
	{
		intAniNextImg--;
		if ( bLastFrame = (intAniNextImg < intAniMinImage) ) intAniNextImg = intAniMaxImage;
	}
	
	return bLastFrame;
}
function animationTimerTask()
{
	if ( animationMoveNextFrame() )
	{
		// Last image so pause intLastFrameDelay seconds. Image doesn't display until
		// function exits so set timer.  Also prevents cpu spike.
		if ( objAniTimer != null ) clearInterval( objAniTimer );
		if ( bAniLoop ) objAniTimer = setInterval( 'animationPlay()', intAniLastFrameDelay - intAniIndividualFrameDelay );
	}
}

