//Timeout variables
	var slideTimeout;
	var fadeInTimeout;
	var fadeOutTimeout;

//Number of message divs on the page
	var numOfSlides = 4;

//Timing variables
	//milliseconds to display each message before showing the next
	var slideSpeed = 4850;
	//milliseconds to wait between opacity changes
	var opacityDelay = 50;
	//percentage points to step by on opacity changes
	var opacityStep = 7;

//"Index" of next message div to show; default to 1 for first load
var nextSlideToShow = 1;

//Whether or not this is the first execution of the loop or not
var firstLoad = true;

//Find out if the user-agent is IE6 and store it
var usingIE6 = (navigator.userAgent.toLowerCase().indexOf('msie 6') != -1) && (navigator.userAgent.toLowerCase().indexOf('msie 7') == -1);

function setOpacity(obj, opacity) {
	opacity = (opacity == 100) ? 99.999 : opacity;
	//IE/Win
		if (!usingIE6) {
			obj.style.filter = "alpha(opacity:" + opacity + ")";
		}
	//Safari<1.2, Konqueror
		obj.style.KHTMLOpacity = opacity / 100;
	//Older Mozilla and Firefox
		obj.style.MozOpacity = opacity / 100;
	//Safari 1.2, newer Firefox and Mozilla, CSS3
		obj.style.opacity = opacity / 100;
}


function fadeIn(objId, opacity) {
	if (document.getElementById) {
		obj = document.getElementById(objId);
		if (opacity <= 100) {
			setOpacity(obj, opacity);
			opacity += opacityStep;
			fadeInTimeout = setTimeout("fadeIn('" + objId + "'," + opacity + ")", opacityDelay);
		}
	}
}


function fadeOut(objId, opacity) {
	if (document.getElementById) {
		obj = document.getElementById(objId);
		if (opacity > (Math.abs(opacityStep) * -1) - 1) {
			setOpacity(obj, opacity);
			opacity -= opacityStep;
			fadeOutTimeout = setTimeout("fadeOut('" + objId + "'," + opacity + ")", opacityDelay);
		}
		else {
			obj.style.display = 'none';
			setOpacity(obj, 0);
		}
	}
}


function setActiveSlideLink(what) {
	for (var i = 1; i <= numOfSlides; i++) {
		if (i != what) {
			document.getElementById('slideLink' + i).style.border = '1px solid #CCCCCC';
			document.getElementById('slideLink' + i).style.margin = '2px';
		}
		else {
			document.getElementById('slideLink' + i).style.border = '3px solid #5180FA';
			document.getElementById('slideLink' + i).style.margin = '0px';
		}
	}
}


function getActiveSlideDivIndex() {
	for (var i = 1; i <= numOfSlides; i++) {
		if (document.getElementById('slide' + i).style.display == 'block') {
			return i;
		}
	}
	return 1;
}


function changeSlideDiv(showDiv, loop) {
	
	if (typeof showDiv == 'undefined') showDiv = nextSlideToShow;
	if (typeof loop == 'undefined') loop = true;
	
	setActiveSlideLink(showDiv);
	var currentSlideDivShowing = getActiveSlideDivIndex();
	
	//this block runs when the user clicks a message link
	if (!loop) {
		clearTimeout(slideTimeout);
		clearTimeout(fadeInTimeout);
		clearTimeout(fadeOutTimeout);
		//hide all divs that are not involved with this execution
		for (i = 1; i <= numOfSlides; i++) {
			if (i != showDiv) {
				document.getElementById('slide' + i).style.display = 'none';
				document.getElementById('slide' + i).style.zIndex = 0;
				setOpacity(document.getElementById('slide' + i), 0);
			}
		}
		document.getElementById('slide' + showDiv).style.display = 'block';
		document.getElementById('slide' + showDiv).style.zIndex = (numOfSlides * 10);
		setOpacity(document.getElementById('slide' + showDiv), 100);
	}
	
	//this block runs when the user has done nothing
	else {
		
		//this block should be the very first block to execute upon page load
		if (firstLoad) {
			document.getElementById('slide' + showDiv).style.display = 'block';
			document.getElementById('slide' + showDiv).style.zIndex = (numOfSlides * 10);
			firstLoad = false;
			nextSlideToShow = 2;
			slideTimeout = setTimeout("changeSlideDiv()", slideSpeed);
			/*
				We need to prevent (opacityDelay * (100 / opacityStep)) from being greater than slideSpeed 
				or else we could have unpredictable results on the user's screen. Also, we want slideSpeed 
				to be how long the message is displayed at 100% opacity, instead of how long we wait before 
				changing what is displayed, so we will increment slideSpeed by (opacityDelay * (100 / opacityStep)) 
				now that the firstLoad is over.
			*/
			slideSpeed = Math.round(slideSpeed + (opacityDelay * (100 / opacityStep)));
		}
		
		//this block should run every n seconds if it is not the first load
		else {
			
			//hide all divs that are not involved with this execution
			for (i = 1; i <= numOfSlides; i++) {
				if ((i != currentSlideDivShowing) && (i != showDiv)) {
					document.getElementById('slide' + i).style.display = 'none';
					document.getElementById('slide' + i).style.zIndex = 0;
					setOpacity(document.getElementById('slide' + i), 0);
				}
			}
			
			//put the div to show (showDiv) on top with 0% opacity
			document.getElementById('slide' + showDiv).style.display = 'block';
			document.getElementById('slide' + showDiv).style.zIndex = (numOfSlides * 10);
			setOpacity(document.getElementById('slide' + showDiv), 0);
			
			//put the div to hide (currentMessageDivShowing) underneath with 100% opacity
			document.getElementById('slide' + currentSlideDivShowing).style.display = 'block';
			document.getElementById('slide' + currentSlideDivShowing).style.zIndex = (numOfSlides * 10) - 10;
			setOpacity(document.getElementById('slide' + currentSlideDivShowing), 100);
			
			//fade in the div to show (showDiv) and fade out the div to hide (currentMessageDivShowing)
			//performing fadeIn and fadeOut simultaneously gives us smoother transitions between text and images
			if (!usingIE6) {
				fadeIn('slide' + showDiv, 0);
				fadeOut('slide' + currentSlideDivShowing, 100);
			}
			else {
				document.getElementById('slide' + showDiv).style.display = 'block';
				document.getElementById('slide' + showDiv).style.zIndex = (numOfSlides * 10);
				document.getElementById('slide' + currentSlideDivShowing).style.display = 'none';
			}
			
			if (showDiv + 1 > numOfSlides) {
				nextSlideToShow = 1;
			}
			else {
				nextSlideToShow = ++showDiv;
			}
			
			slideTimeout = setTimeout("changeSlideDiv()", slideSpeed);
			
		}
		
	}
	
}
