//* SlideShow Functions *//

//global slideshow object
var slideShow = {	"clock" : null,
					"fade" : true,
					"count" : 1,
					"selectedSlideId" : 0,
					"selectedSlideNavId" : 0,
					"transitioning" : false,
					"hoveringSlideNavId" : 0,
					"stoppedHovering" : false }

//wrapper function for the swapfade call.
function transitionSlide(newSlideId, newSlideNavId)
{
	var selectedSlide = document.getElementById(slideShow.selectedSlideId);
	var newSlide = document.getElementById(newSlideId);
	
	if ((selectedSlide != null) && (newSlide != null) && (slideShow.selectedSlideId != newSlideId))
	{
		if (!slideShow.transitioning)
		{
			slideShow.transitioning = true;
			document.getElementById(slideShow.selectedSlideNavId).className = "";
			document.getElementById(newSlideNavId).className = "SelectedNavItem";
			
			try
			{
				document.getElementById(slideShow.selectedSlideId + "_navlink").className = "";
				document.getElementById(newSlideId + "_navlink").className = "SelectedNavLink";
			}
			catch (e){}
			
			slideShow.selectedSlideNavId = newSlideNavId;
			swapfade(newSlideId);
		}
	}
}

//wrapper function for the swapfade call.
function transitionSlideNoFade(newSlideId, newSlideNavId)
{
	var selectedSlide = document.getElementById(slideShow.selectedSlideId);
	var newSlide = document.getElementById(newSlideId);
	
	if ((selectedSlide != null) && (newSlide != null) && (slideShow.selectedSlideId != newSlideId))
	{
		if (!slideShow.transitioning)
		{
			slideShow.transitioning = true;
			document.getElementById(slideShow.selectedSlideNavId).className = "";
			document.getElementById(newSlideNavId).className = "SelectedNavItem";
			
			try
			{
				document.getElementById(slideShow.selectedSlideId + "_navlink").className = "";
				document.getElementById(newSlideId + "_navlink").className = "SelectedNavLink";
			}
			catch (e){}
			
			slideShow.selectedSlideNavId = newSlideNavId;
			swap(newSlideId);
		}
	}
}

function delayHomeSlideTransition(slideNavId, newSlideId)
{
	if ((slideNavId == slideShow.hoveringSlideNavId) && (slideShow.stoppedHovering == false))
	{
		if(slideShow.transitioning)
		{
			setInterval("delayHomeSlideTransition('" + slideNavId + "', '" + newSlideId + "')", 500);
			delayHomeSlideTransition(slideNavId, newSlideId)
		}
		else
		{
			slideShow.hoveringSlideNavId = 0;
			transitionSlide(newSlideId, slideNavId);
		}
	}
}

function noDelayHomeSlideTransition(slideNavId, newSlideId)
{
	if ((slideNavId == slideShow.hoveringSlideNavId) && (slideShow.stoppedHovering == false))
	{
		if(slideShow.transitioning)
		{
			//setInterval("delayHomeSlideTransition('" + slideNavId + "', '" + newSlideId + "')", 500);
			delayHomeSlideTransition(slideNavId, newSlideId)
		}
		else
		{
			slideShow.hoveringSlideNavId = 0;
			transitionSlideNoFade(newSlideId, slideNavId);
		}
	}
}

function slideNavOver(slideNavId)
{
	if (slideNavId != slideShow.selectedSlideNavId)
	{
		document.getElementById(slideNavId).className = "SelectedNavItem";
		
		if (arguments[1] != null)
		{
			document.getElementById(slideNavId).className = "SelectedNavItem";
			document.getElementById(slideNavId).style.cursor = "default";
			slideShow.stoppedHovering = false;
			slideShow.hoveringSlideNavId = slideNavId;
			window.setTimeout("delayHomeSlideTransition('" + slideNavId + "', '" + arguments[1] + "')", 250);
		}
		else
		{
			document.getElementById(slideNavId).style.cursor = "pointer";
		}
	}
	else
	{
		document.getElementById(slideNavId).style.cursor = "default";
	}
}

function slideNavOverNoFade(slideNavId)
{
	if (slideNavId != slideShow.selectedSlideNavId)
	{
		document.getElementById(slideNavId).className = "SelectedNavItem";
		
		if (arguments[1] != null)
		{
			document.getElementById(slideNavId).className = "SelectedNavItem";
			document.getElementById(slideNavId).style.cursor = "default";
			slideShow.stoppedHovering = false;
			slideShow.hoveringSlideNavId = slideNavId;
			//window.setTimeout("delayHomeSlideTransition('" + slideNavId + "', '" + arguments[1] + "')", 250);
			noDelayHomeSlideTransition(slideNavId, arguments[1]);
		}
		else
		{
			document.getElementById(slideNavId).style.cursor = "pointer";
		}
	}
	else
	{
		document.getElementById(slideNavId).style.cursor = "default";
	}
}

function slideNavOut(slideNavId)
{
	slideShow.stoppedHovering = true;
	if (slideNavId != slideShow.selectedSlideNavId)
	{
		document.getElementById(slideNavId).className = "";
	}
}

//swap setup function
function swap()
{
	slideShow.newSlide = document.getElementById(arguments[0]);
	slideShow.selectedSlide = document.getElementById(slideShow.selectedSlideId);
	
	slideShow.selectedSlideId = arguments[0];
	
	//swap the div layers
	slideShow.newSlide.className = "SelectedSlide";

	slideShow.transitioning = false;

	slideShow.selectedSlide.className = "DeselectSlide";
};


//swapfade setup function
function swapfade()
{
slideShow.clock = null;

	//if the timer is not already going
	if(slideShow.clock == null)
	{
		slideShow.newSlide = document.getElementById(arguments[0]);
		slideShow.selectedSlide = document.getElementById(slideShow.selectedSlideId);
		
		//store the supported form of opacity
		if(typeof slideShow.newSlide.style.opacity != "undefined")
		{
			slideShow.type = "w3c";
		}
		else if(typeof slideShow.newSlide.style.MozOpacity != "undefined")
		{
			slideShow.type = "moz";
		}
		else if(typeof slideShow.newSlide.style.KhtmlOpacity != "undefined")
		{
			slideShow.type = "khtml";
		}
		else if(typeof slideShow.newSlide.style.filter != "undefined")
		{
			slideShow.type = "ie";
		}
		else
		{
			slideShow.type = "none";
		}
		

		//if any kind of opacity is supported
		if(slideShow.type != "none")
		{
			//copy and convert fade duration argument 
			//the duration specifies the whole transition
			//but the swapfade is two distinct transitions
			slideShow.length = parseInt(1, 10) * 250;
			
			
			//create fade resolution argument as 20 steps per transition
			//again, split for the two distrinct transitions
			slideShow.resolution = parseInt(1, 10) * 10;
			
			//start the timer
			slideShow.clock = setInterval("slideShow.swapfade()", slideShow.length/slideShow.resolution);
			slideShow.selectedSlideId = arguments[0];
		}
		
		//otherwise if opacity is not supported
		else
		{
			slideShow.selectedSlideId = arguments[0];
			
			//swap the div layers
			slideShow.newSlide.className = "SelectedSlide";
			slideShow.selectedSlide.className = "";
			slideShow.transitioning = false;
	}
			//slideShow.selectedSlide.className = "DeselectSlide";
	 } 
};

//swapfade timer function
slideShow.swapfade = function()
{
	//increase or reduce the counter on an exponential scale
	slideShow.count = (slideShow.fade) ? slideShow.count * 0.9 : (slideShow.count * (1/0.9)); 
	
	//choose which slide to fade
	slideShow.fadingSlide = (slideShow.fade) ? slideShow.selectedSlide : slideShow.newSlide;
	
	//if the counter has reached the bottom
	if(slideShow.count < (1 / slideShow.resolution))
	{
		//clear the timer
		clearInterval(slideShow.clock);
		slideShow.clock = null;

		//do the div layer swap
		slideShow.selectedSlide.className = "";
		slideShow.newSlide.className = "SelectedSlide";

		//reverse the fade direction flag
		slideShow.fade = false;
		
		//restart the timer
		slideShow.clock = setInterval("slideShow.swapfade()", slideShow.length/slideShow.resolution);

	}
	
	//if the counter has reached the top
	if(slideShow.count > (1 - (1 / slideShow.resolution)))
	{
		//clear the timer
		clearInterval(slideShow.clock);
		slideShow.clock = null;

		//reset the fade direction flag
		slideShow.fade = true;
		
		//reset the counter
		slideShow.count = 1;
		
		slideShow.transitioning = false;
	}

	//set new opacity value on element
	//using whatever method is supported
	switch(slideShow.type)
	{
		case "ie" :
			slideShow.newSlide.style.filter = "alpha(opacity=" + Math.ceil(slideShow.count * 100) + ")";
			slideShow.selectedSlide.style.filter = "alpha(opacity=" + Math.ceil(slideShow.count * 100) + ")";
			break;
			
		case "khtml" :
			slideShow.newSlide.style.KhtmlOpacity = slideShow.count;
			slideShow.selectedSlide.style.KhtmlOpacity = slideShow.count;
			break;
			
		case "moz" : 
			//restrict max opacity to prevent a visual popping effect in firefox
			slideShow.newSlide.style.MozOpacity = (slideShow.count == 1 ? 0.9999999 : slideShow.count);
			slideShow.selectedSlide.style.MozOpacity = (slideShow.count == 1 ? 0.9999999 : slideShow.count);
			break;
			
		default : 
			//restrict max opacity to prevent a visual popping effect in firefox
			slideShow.newSlide.style.opacity = (slideShow.count == 1 ? 0.9999999 : slideShow.count);
			slideShow.selectedSlide.style.opacity = (slideShow.count == 1 ? 0.9999999 : slideShow.count);
	}
};