// This function requires fadomatic.js to be loaded.

// These globals must be set for the fader functions to work
var gblnRotatorEnabled = true;
var gblnRotatorRestarting = false;
var gobjFader;

// Rotator Configurations
var gintRotatorTimer = 8500;
var gintRotatorNextOffset = 1500;
var gintRotatorRestartTimer = 20000; // MUST be longer than gintRotatorTimer to avoid nasty flickering
var gintRotatorFadeSpeed = 1.85;
var gintRotatorSwitchFadeOutSpeed = 50;
var gintRotatorSwitchFadeInSpeed = 10;
var gintRotatorSwitchNextOffset = 100;
var gstrRotatorLinkObjectClassNameExtension = '-Link';
var gstrRotatorLinkClassName = 'rotatorLink';
var gstrRotatorCurrentLinkClassName = 'rotatorLinkCurrent';

// Change the rotator link styles in this function if needed
function RotatorHighlighLink(intCurrentElement) {

    // Set the class for all links
    for (var i=0; i < arrRotatorElements.length; i++) {
        strLinkID = arrRotatorElements[i] + gstrRotatorLinkObjectClassNameExtension;
        objLink = document.getElementById(strLinkID);
        if (objLink) {
            objLink.className = gstrRotatorLinkClassName;
        }
    }
    
    // Set the class for the current linki
    strCurrentLinkID = arrRotatorElements[intCurrentElement] + gstrRotatorLinkObjectClassNameExtension;
    objCurrentLink = document.getElementById(strCurrentLinkID);
    if (objCurrentLink) {
        objCurrentLink.className = gstrRotatorCurrentLinkClassName;
    }
}

function RotatorRotateElement(intCurrentElement) {
    
    // Start with a random element if none was specified
    if (isNaN(intCurrentElement) || intCurrentElement < 0 || intCurrentElement > arrRotatorElements.length-1) { // -1 important because arrays start at 0;
        intCurrentElement = Math.floor(Math.random() * (arrRotatorElements.length)); 
    }

    if (!gintRotatorTimer || !gintRotatorNextOffset || !gintRotatorFadeSpeed || !arrRotatorElements || arrRotatorElements.length == 0) {
        gblnRotatorEnabled = false;
    } else {
        intShowNextTimer = gintRotatorTimer + gintRotatorNextOffset;
    }

    if (gblnRotatorEnabled) {
        
        RotatorHighlighLink(intCurrentElement);
        
        objFadeElement = document.getElementById(arrRotatorElements[intCurrentElement]);
        objFadeElement.style.display = 'block';
        gobjFader = new Fadomatic(objFadeElement,gintRotatorFadeSpeed,0);
        gobjFader.fadeIn();

        setTimeout('RotatorHideElement(' + intCurrentElement + ')',gintRotatorTimer);

        intCurrentElement++;

        if (intCurrentElement == arrRotatorElements.length) {
            intCurrentElement = 0;
        }

        setTimeout('RotatorRotateElement(' + intCurrentElement + ')',intShowNextTimer);
    }
}

function RotatorHideElement(intCurrentElement,intSpeed) {
    if (gblnRotatorEnabled) {
        if (!intSpeed) {
            if (gintRotatorFadeSpeed) {
                intSpeed = gintRotatorFadeSpeed;
            } else {
                intSpeed = 100; // Immediate
            }
        }

        objFadeElement = document.getElementById(arrRotatorElements[intCurrentElement]);
        gobjFader = new Fadomatic(objFadeElement,intSpeed);
        gobjFader.fadeOut();
    }
}

function RotatorSwitchElement(intCurrentElement,strBrowse) {
    if (gintRotatorSwitchFadeOutSpeed && gintRotatorSwitchFadeInSpeed && gintRotatorSwitchNextOffset) {
        intCurrentElement = eval(intCurrentElement);
        gblnRotatorEnabled = true;
        
        if (!strBrowse) {
            gobjFader.haltFade();
            
            intNextElement = intCurrentElement;

            // Hide all elements
            for (var i=0; i < arrRotatorElements.length; i++) {
                objFadeElement = document.getElementById(arrRotatorElements[i]);
                objFadeElement =  new Fadomatic(objFadeElement,gintRotatorSwitchFadeInSpeed,0);
                objFadeElement.hide();
            }
        } else {
            gobjFader.haltFade();
            RotatorHideElement(intCurrentElement,gintRotatorSwitchFadeOutSpeed);
            
            if (strBrowse == 'previous') {
                intNextElement = intCurrentElement - 1;
            } else {
                intNextElement = intCurrentElement + 1;
            } 
            
            if (intNextElement == arrRotatorElements.length) {
                intNextElement = 0;
            } else if (intNextElement < 0) {
                intNextElement = arrRotatorElements.length - 1;
            }
        } 

        objFadeElement = document.getElementById(arrRotatorElements[intNextElement]);
        objFadeElement.style.display = 'block';
        gobjFader = new Fadomatic(objFadeElement,gintRotatorSwitchFadeInSpeed,0);
        setTimeout('gobjFader.fadeIn()',gintRotatorSwitchNextOffset);

        RotatorHighlighLink(intNextElement);

        gblnRotatorEnabled = false;

        if (gintRotatorRestartTimer && gblnRotatorRestarting) {
            setTimeout('RotatorRestart(' + intNextElement + ')',gintRotatorRestartTimer);
        }
    }
}

function RotatorRestart(intCurrentElement) {
    gblnRotatorRestarting = true;
    if (gintRotatorNextOffset) {
        gblnRotatorEnabled = true;

        RotatorHideElement(intCurrentElement);

        intCurrentElement = intCurrentElement + 1;
        if (intCurrentElement == arrRotatorElements.length) {
            intCurrentElement = 0;
        }
        setTimeout('RotatorRotateElement(intCurrentElement,true)',gintRotatorNextOffset);
    }
}

