var imgPlay = 0;
var imgCachedImage = new Image();
var imgNoImage = new Image();
var imgTimer;
var imgFailTimer;
var imgRetryTimer;

var imgImagePauseAct = new Image();
var imgImagePauseEna = new Image();
var imgImagePlayAct = new Image();
var imgImagePlayEna = new Image();

var imgCounter = 0;
var imgSessionId = 0;
var imgInterval = 1000;
var imgHaveControls = 1;

var imgUserBrowserIsIE = 0;
var imgUserBrowserUsingCache = 1; // if 0, try to circulate image urls.
var imgTimeRequested;

var imgLastImageUrl;

function img_initialize(a_lastimageurl, a_interval, a_havecontrols)
{
    imgLastImageUrl = a_lastimageurl;
    imgInterval = a_interval;
    imgHaveControls = a_havecontrols;

    // these two are used first...
    imgImagePauseAct.src = "pics/pause_act.gif";
    imgImagePlayEna.src = "pics/play_ena.gif";

    imgNoImage.src = "pics/noimage.gif";
    imgImagePauseEna.src = "pics/pause_ena.gif";
    imgImagePlayAct.src = "pics/play_act.gif";

    imgSessionId = (new Date()).getTime();

    if(navigator.appName.indexOf("Microsoft") != -1)
    {
	imgUserBrowserIsIE = 1;
    }
    
    imgTimer = setTimeout("img_start_update()", 100);
}

function img_deinitialize()
{
    clearTimeout(imgFailTimer);
    clearTimeout(imgRetryTimer);
    clearTimeout(imgTimer);
    img_pause_update();
}

function img_showcached()
{
    var lFromCache = 0;
    var tn = (new Date()).getTime();

    clearTimeout(imgFailTimer);

    if(!imgUserBrowserUsingCache && tn - imgTimeRequested < 100)
	{
	    //alert("image came from browser cache...");
	    imgUserBrowserUsingCache = 1;
	    lFromCache = 1;
	}

    if(imgPlay && !lFromCache) { document.images['stillimage'].src = imgCachedImage.src; }
    imgCachedImage.onload = null;
    imgCachedImage.onerror = null;
    imgCachedImage.onabort = null;
    imgCachedImage.src = null;

    if(imgPlay)
	{
	    imgTimer = setTimeout("img_cachenext()", imgInterval);
	}
}

function img_loadfailed()
{
    clearTimeout(imgFailTimer);

    img_pause_update();

    document.images['stillimage'].src = imgNoImage.src;
    
    // Retry loading after a few seconds
    imgRetryTimer = setTimeout("img_start_update()", 5000);
}

function img_cachenext()
{
    imgFailTimer = setTimeout("img_loadfailed()", 5000);

    imgCachedImage.onload  = img_showcached;
    imgCachedImage.onerror = img_loadfailed;
    imgCachedImage.onabort = img_pause_update;

    imgTimeRequested = (new Date()).getTime();

    imgCounter++;
    
    if(imgUserBrowserIsIE && !imgUserBrowserUsingCache)
	{
	    // IE wants to store all the images to file cache...
	    imgCachedImage.src = imgLastImageUrl + '?x=' + imgCounter % 16 + '&s=' + imgSessionId;
	}
    else
	{
	    // Other browsers might use cached images...
	    imgCachedImage.src = imgLastImageUrl + '?x=' + imgCounter + '&s=' + imgSessionId;
	}
    
}


function img_start_update()
{
    imgPlay = 1;
    clearTimeout(imgFailTimer);
    clearTimeout(imgRetryTimer);

    if(imgHaveControls)
	{
	    document.getElementById('imgButtonPause').disabled = 0;
	    document.getElementById('imgButtonPauseImage').src = imgImagePauseEna.src;

	    document.getElementById('imgButtonPlay').disabled = 1;
	    document.getElementById('imgButtonPlayImage').src = imgImagePlayAct.src;
	}

    imgTimer = setTimeout("img_cachenext()", 200);
}

function img_pause_update()
{
    imgPlay = 0;
    clearTimeout(imgFailTimer);
    clearTimeout(imgRetryTimer);
    clearTimeout(imgTimer);

    imgCachedImage.onload = null;
    imgCachedImage.onerror = null;
    imgCachedImage.onabort = null;
    imgCachedImage.src = null;

    if(imgHaveControls)
	{
	    document.getElementById('imgButtonPause').disabled = 1;
	    document.getElementById('imgButtonPauseImage').src = imgImagePauseAct.src;

	    document.getElementById('imgButtonPlay').disabled = 0;
	    document.getElementById('imgButtonPlayImage').src = imgImagePlayEna.src;
	}
}

//
// Local Variables:
//  c-file-style: "gnu"
//  mode: java
// End:
