if(!window.JSFX)
	JSFX=new Object();
JSFX.FadeElemMinOpacity = 50;
JSFX.FadeElemAutoUp	 = 20;
JSFX.FadeElemAutoDown   = 5;
JSFX.FadeElemSavedOver  = null;
JSFX.FadeElemSavedOut   = null;
JSFX.FadeElemIdIndex   = 0;
document.write('<STYLE TYPE="text/css">.elemFader{ position:relative; filter:alpha(opacity='+JSFX.FadeElemMinOpacity+'); -moz-opacity:'+JSFX.FadeElemMinOpacity/101+'}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader1{ position:relative; filter:alpha(opacity=10); -moz-opacity:0.1}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader2{ position:relative; filter:alpha(opacity=20); -moz-opacity:0.2}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader3{ position:relative; filter:alpha(opacity=30); -moz-opacity:0.3}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader4{ position:relative; filter:alpha(opacity=40); -moz-opacity:0.4}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader5{ position:relative; filter:alpha(opacity=50); -moz-opacity:0.5}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader6{ position:relative; filter:alpha(opacity=60); -moz-opacity:0.6}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader7{ position:relative; filter:alpha(opacity=70); -moz-opacity:0.7}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader8{ position:relative; filter:alpha(opacity=80); -moz-opacity:0.8}</STYLE>');
document.write('<STYLE TYPE="text/css">.elemFader9{ position:relative; filter:alpha(opacity=90); -moz-opacity:0.9}</STYLE>');
/*******************************************************************
*
* Function    : actionOnMouseOver
*
* Description : Called automatically whenever an element in the
*			document is "mousedOver". It checks to see if the
*			element has the className == "elemFader" and if so
*			starts fading up the element.
*
*****************************************************************/
JSFX.fadeElem_actionOnMouseOver = function(e)
{
	srcElement=e ? e.target : event.srcElement;
	if(srcElement.className && srcElement.className.indexOf("elemFader") != -1)
		JSFX.fadeUp(srcElement);
	/*** If the document already had an onMouseOver handler, call it ***/
	if(JSFX.FadeElemSavedOver != null)
		JSFX.FadeElemSavedOver(e);
}
/*******************************************************************
*
* Function    : actionOnMouseOut
*
* Description : Called automatically whenever an element in the
*			document is "mousedOut". It checks to see if the
*			element has the className == "elemFader" and if so
*			starts fading down the element.
*
*****************************************************************/
JSFX.fadeElem_actionOnMouseOut = function(e)
{
	srcElement=e ? e.target : event.srcElement;
	if(srcElement.className && srcElement.className.indexOf("elemFader") != -1)
		JSFX.fadeDown(srcElement);
	/*** If the document already had an onMouseOut handler, call it ***/
	if(JSFX.FadeElemSavedOut != null)
		JSFX.FadeElemSavedOut(e);
}
/*******************************************************************
*
* Function    :	fadeElemAuto
*
* Parameters  :	minOpacity	- Minimum opacity to fade down to.
*			stepUp	- fade up speed 	- larger = faster.
*			stepDown 	- fade down speed	- larger = faster.
*
* Description :	Saves the documents original mousOver/Out handlers
*			and installs the actionMouseOver/Out handlers
*			of JSFX.fadeElem
*
*****************************************************************/
JSFX.fadeElemAuto = function(minOpacity, stepUp, stepDown)
{
	if(minOpacity)
		JSFX.FadeElemMinOpacity = minOpacity;
	if(stepUp)
		JSFX.FadeElemAutoUp	= stepUp;
	if(stepDown)
		JSFX.FadeElemAutoDown	= stepDown;
	/*** Save the original document mouseOver/Out events ***/
	JSFX.FadeElemSavedOver = document.onmouseover;
	JSFX.FadeElemSavedOut  = document.onmouseout;
	document.onmouseover	= JSFX.fadeElem_actionOnMouseOver ;
	document.onmouseout	= JSFX.fadeElem_actionOnMouseOut ;
}
/*******************************************************************
*
* Function    : fadeUpElem
*
* Description : Finds the elem in the document and calls JSFX.fadeUp
*
*****************************************************************/
JSFX.fadeUpElem = function(elemName, step)
{
	if(document.layers || window.opera)
		return;
	elem = document.getElementById(elemName);
	if(elem)
		JSFX.fadeUp(elem, step);
}
/*******************************************************************
*
* Function    : fadeUp
*
* Description : This function is based on the turn_on() function
*		      of animate2.js (animated rollovers from www.roy.whittle.com).
*		      Each fading elem object is given a state. 
*			OnMouseOver the state is switched depending on the current state.
*			Current state -> Switch to
*			===========================
*			null		->	OFF.
*			OFF		->	FADE_UP
*			FADE_DOWN	->	FADE_UP
*			FADE_UP_DOWN->	FADE_UP
*****************************************************************/
JSFX.fadeUp = function(elem, step)
{
	if(elem)
	{
		if(!step) step=JSFX.FadeElemAutoUp;
		if(elem.fade == null)
		{
			elem.fade = new Object();
			elem.fade.state	 = "OFF";
			elem.fade.upStep	 = step;
			elem.fade.downStep  = step;
			elem.fade.minOpacity  = JSFX.FadeElemMinOpacity;
			elem.fade.index = elem.fade.minOpacity;
			elem.animate=JSFX.FadeElemAnimation;
			elem.fadeId="JSFX_FadeElem" + JSFX.FadeElemIdIndex++;
			window[elem.fadeId] = elem;
			if(elem.filters)
				elem.fade.minOpacity = elem.filters.alpha.opacity;
			else
				elem.fade.minOpacity = document.defaultView.getComputedStyle(elem,'').getPropertyValue('-moz-opacity') * 100;
		}
		if(elem.fade.state == "OFF")
		{
			elem.fade.upStep  = step;
			elem.fade.state = "FADE_UP";
			elem.animate();
		}
		else if( elem.fade.state == "FADE_UP_DOWN"
			|| elem.fade.state == "FADE_DOWN")
		{
			elem.fade.upStep  = step;
			elem.fade.state = "FADE_UP";
		}
	}
}
/*******************************************************************
*
* Function    : fadeDownElem
*
* Description : Finds the elem in the document and calls JSFX.fadeDown
*
*****************************************************************/
JSFX.fadeDownElem = function(elemName, step)
{
	if(document.layers || window.opera)
		return;
	elem = document.getElementById(elemName);
	if(elem)
		JSFX.fadeDown(elem, step);
}
/*******************************************************************
*
* Function    : fadeDown
*
* Description : This function is based on the turn_off function
*		      of animate2.js (animated rollovers from www.roy.whittle.com).
*		      Each zoom object is given a state. 
*			OnMouseOut the state is switched depending on the current state.
*			Current state -> Switch to
*			===========================
*			ON		->	FADE_DOWN.
*			FADE_UP	->	FADE_UP_DOWN.
*****************************************************************/
JSFX.fadeDown = function(elem, step)
{
	if(elem)
	{
		if(!step) step=JSFX.FadeElemAutoDown;
		if(elem.fade.state=="ON")
		{
			elem.fade.downStep  = step;
			elem.fade.state="FADE_DOWN";
			elem.animate();
		}
		else if(elem.fade.state == "FADE_UP")
		{
			elem.fade.downStep  = step;
			elem.fade.state="FADE_UP_DOWN";
		}
	}
}
/*******************************************************************
*
* Function    : FadeElemAnimation
*
* Description : This function is based on the Animate function
*		    of animate2.js (animated rollovers from www.roy.whittle.com).
*		    Each object has a state. This function
*		    modifies each object and (possibly) changes its state.
*****************************************************************/
JSFX.FadeImageAnimation = function()
{
	JSFX.FadeElemRunning = false;
	for(i=0 ; i<document.elems.length ; i++)
	{
		var elem = document.elems[i];
		if(elem.fade)
		{
			if(elem.fade.state == "FADE_UP")
			{
				elem.fade.index+=elem.fade.upStep;
				if(elem.fade.index > 100)
					elem.fade.index = 100;
				if(elem.filters)
					elem.filters.alpha.opacity = elem.fade.index;
				else
					elem.style.MozOpacity = elem.fade.index/101;
				if(elem.fade.index == 100)
					elem.fade.state="ON";
				else
					JSFX.FadeElemRunning = true;
			}
			else if(elem.fade.state == "FADE_UP_DOWN")
			{
				elem.fade.index+=elem.fade.upStep;
				if(elem.fade.index > 100)
					elem.fade.index = 100;
				if(elem.filters)
					elem.filters.alpha.opacity = elem.fade.index;
				else
					elem.style.MozOpacity = elem.fade.index/101;
				if(elem.fade.index == 100)
					elem.fade.state="FADE_DOWN";
				JSFX.FadeElemRunning = true;
			}
			else if(elem.fade.state == "FADE_DOWN")
			{
				elem.fade.index-=elem.fade.downStep;
				if(elem.fade.index < elem.fade.minOpacity)
					elem.fade.index = elem.fade.minOpacity;
				if(elem.filters)
					elem.filters.alpha.opacity = elem.fade.index;
				else
					elem.style.MozOpacity = elem.fade.index/101;
				if(elem.fade.index == elem.fade.minOpacity)
					elem.fade.state="OFF";
				else
					JSFX.FadeElemRunning = true;
			}
		}
	}
	/*** Check to see if we need to animate any more frames. ***/
	if(JSFX.FadeElemRunning)
		setTimeout("JSFX.FadeElemAnimation()", 40);
}
/*******************************************************************
*
* Function    : FadeElemAnimation
*
* Description : This function is based on the Animate function
*		    of animate2.js (animated rollovers from www.roy.whittle.com).
*		    Each object has a state. This function
*		    modifies each object and (possibly) changes its state.
*****************************************************************/
JSFX.FadeElemAnimation = function()
{
	var fadeElemRunning = false;
	var elem = this;
	if(elem.fade)
	{
		if(elem.fade.state == "FADE_UP")
		{
			elem.fade.index+=elem.fade.upStep;
			if(elem.fade.index > 100)
				elem.fade.index = 100;
			if(elem.filters)
				elem.filters.alpha.opacity = elem.fade.index;
			else
				elem.style.MozOpacity = elem.fade.index/101;
			if(elem.fade.index == 100)
				elem.fade.state="ON";
			else
				fadeElemRunning = true;
		}
		else if(elem.fade.state == "FADE_UP_DOWN")
		{
			elem.fade.index+=elem.fade.upStep;
			if(elem.fade.index > 100)
				elem.fade.index = 100;
			if(elem.filters)
				elem.filters.alpha.opacity = elem.fade.index;
			else
				elem.style.MozOpacity = elem.fade.index/101;
			if(elem.fade.index == 100)
				elem.fade.state="FADE_DOWN";
			fadeElemRunning = true;
		}
		else if(elem.fade.state == "FADE_DOWN")
		{
			elem.fade.index-=elem.fade.downStep;
			if(elem.fade.index < elem.fade.minOpacity)
				elem.fade.index = elem.fade.minOpacity;
			if(elem.filters)
				elem.filters.alpha.opacity = elem.fade.index;
			else
				elem.style.MozOpacity = elem.fade.index/101;
			if(elem.fade.index == elem.fade.minOpacity)
				elem.fade.state="OFF";
			else
				fadeElemRunning = true;
		}
	}
	/*** Check to see if we need to animate any more frames. ***/
	if(fadeElemRunning)
		setTimeout("window['"+elem.fadeId+"'].animate()", 40);
}