// 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 = 'featurelink';
var gstrRotatorCurrentLinkClassName = 'featurelink-current';
var gstrRotatorInfoObjectClassNameExtension = '-info';
var gstrRotatorInfoClassName = 'featureinfo';
var gstrRotatorCurrentInfoClassName = 'featureinfo-current';

function RotatorSetObjectClass(strElementId,strClassName) {
	objElement = document.getElementById(strElementId);
	if (objElement) {
		objElement.className = strClassName;
	}
}

// Change the rotator link styles in this function if needed
function RotatorHighlightLink(intCurrentElement) {

	// Set the class for all links and info
	for (var i=0; i < arrRotatorElements.length; i++) {
		RotatorSetObjectClass(arrRotatorElements[i] + gstrRotatorLinkObjectClassNameExtension,gstrRotatorLinkClassName);
		RotatorSetObjectClass(arrRotatorElements[i] + gstrRotatorInfoObjectClassNameExtension,gstrRotatorInfoClassName);
	}
	
	// Set the class for the current link and info
	RotatorSetObjectClass(arrRotatorElements[intCurrentElement] + gstrRotatorLinkObjectClassNameExtension,gstrRotatorCurrentLinkClassName);
	RotatorSetObjectClass(arrRotatorElements[intCurrentElement] + gstrRotatorInfoObjectClassNameExtension,gstrRotatorCurrentInfoClassName);
}

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) {

		RotatorHighlightLink(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);

		RotatorHighlightLink(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);
	}
}


// ########################################################
// ##
// ##  Custom Civic Video Functions
// ##
// ########################################################

gblnCurrentMonthFirstClick = true;
gblnLastMonthFirstClick = true;
gblnComingSoonFirstClick = true;

function StartCurrentMonth() {
    
	layerToggleDisplay('top10thismonth','block');
	layerToggleDisplay('top10lastmonth','none');
	layerToggleDisplay('top10nextmonth','none');
	layerToggleDisplay('CurrentMonthControls','block');
	layerToggleDisplay('LastMonthControls','none');
	layerToggleDisplay('NextMonthControls','none');
	
	RotatorAddNumberedElements('features-CurrentMonth-');

	if (gblnCurrentMonthFirstClick) {
		setTimeout('RotatorRotateElement(0)',1);
		gblnCurrentMonthFirstClick = false;
	} 
}

function StartLastMonth() {
   
	layerToggleDisplay('top10lastmonth','block');
	layerToggleDisplay('top10thismonth','none');
	layerToggleDisplay('top10nextmonth','none');
	layerToggleDisplay('LastMonthControls','block');
	layerToggleDisplay('CurrentMonthControls','none');
	layerToggleDisplay('NextMonthControls','none');
   
	RotatorAddNumberedElements('features-LastMonth-');
	
	if (gblnLastMonthFirstClick) {
		RotatorSwitchElement(0,'');
		gblnLastMonthFirstClick = false;
	}
}

function StartNextMonth() {
	
	layerToggleDisplay('top10nextmonth','block');
	layerToggleDisplay('top10thismonth','none');
	layerToggleDisplay('top10lastmonth','none');
	layerToggleDisplay('LastMonthControls','none');
	layerToggleDisplay('CurrentMonthControls','none');
	layerToggleDisplay('NextMonthControls','block');

	RotatorAddNumberedElements('features-NextMonth-');

	if (gblnComingSoonFirstClick) {
		RotatorSwitchElement(0,'');
		gblnComingSoonFirstClick = false;
	}
}

function RotatorAddNumberedElements(strElementIdPrefix,intElementId) {
	if (!intElementId) {
		intElementId = 0;
	}
	strElementId = strElementIdPrefix + intElementId;
	if (document.getElementById(strElementId)) {
		arrRotatorElements[intElementId] = strElementId;
		intElementId++;
		RotatorAddNumberedElements(strElementIdPrefix,intElementId);
	}
}

