var loop = false;
var timers = [];
var timersCreated = 0;
var fadeOutTimers = [];

function beginFade(mainImageId, numberOfAlternateImages) {
    if (numberOfAlternateImages < 1) {
        return true;
    }
    loop = true;
    crossFade(mainImageId, 0, 1, numberOfAlternateImages);
    return true;
}

function stopFade(mainImageId, numberOfAlternateImages) {
    if (numberOfAlternateImages < 1) {
        return true;
    }
    loop = false;
    for (var i = 0; i < timers.length; i++) {
        clearTimeout(timers[i]);
    }
    timersCreated = 0;
    setOpacity(100, mainImageId + "-0");
    for (i = 1; i <= numberOfAlternateImages; i++) {
        var style = document.getElementById(mainImageId + "-" + i).style;
        style.display = "none";
    }
    return true;
}


function crossFade(mainImageId, imgNumOut, imgNumIn, numberOfAlternateImages) {
    var speed = 10;
    var timer = 0;
    var fadeOut = 100;
    var fadeIn = 0;

    var objToFadeOut = mainImageId + "-" + imgNumOut;
    var objToFadeIn  = mainImageId + "-" + imgNumIn;

    while(loop && fadeOut >= 0) {
        timers[timersCreated++] = setTimeout("setOpacity(" + fadeOut + ",'" + objToFadeOut + "')", (speed * timer));
        fadeIn = 100 - fadeOut;
        timers[timersCreated++] = setTimeout("setOpacity(" + fadeIn + ",'" + objToFadeIn + "')", (speed * timer));
        fadeOut--;
        timer++;
    }

    if (loop) {
        var imgOut = (imgNumOut + 1 <= numberOfAlternateImages) ? imgNumOut + 1 : 0;
        var imgIn  = (imgNumIn + 1 <= numberOfAlternateImages) ? imgNumIn + 1 : 0;
        timers[timersCreated++] = setTimeout("crossFade('" + mainImageId + "', "
                 + imgOut + ", " + imgIn + ", " + numberOfAlternateImages + ")", 3000);
    }
}


function setOpacity(value, obj) {
    var object = document.getElementById(obj).style;
    object.opacity = (value / 100);
    object.display = "block";
    object.Mozopacity = (value / 100);
    object.Khtmlopacity = (value / 100);
    object.filter = "alpha(opacity=" + value + ")";
}
