// 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);
	}
}
