///////////////////////////////////////////////////////////////////////
//     This fade library was designed by Erik Arvidsson for WebFX    //
//                                                                   //
//     For more info and examples see: http://webfx.eae.net          //
//     or contact Erik at http://webfx.eae.net/contact.html#erik     //
//                                                                   //
//     Feel free to use this code as long as this disclaimer is      //
//     intact.                                                       //
//                                                                   //
//     Last updated: 2000-11-22                                      //
///////////////////////////////////////////////////////////////////////

var fadeSteps = 4;				// Number of steps to loop
var fademsec = 25;				// The time between each step (note that most computer have problem
								// handling to small values due to hardware limitations)

var fadeArray = new Array();	// Needed to keep track of wich elements are animating

//////////////////  fade  ////////////////////////////////////////////////////////////
//                                                                                  //
//   parameter: fadeIn                                                              //
// description: A boolean value. If true the element fades in, otherwise fades out  //
//              The steps and msec are optional. If not provided the default        //
//              values are used                                                     //
//                                                                                  //
//////////////////////////////////////////////////////////////////////////////////////

function fade(el, fadeMode, steps, msec, fn) {
	el = document.getElementById(el);

	if (steps == null) steps = fadeSteps;
	if (msec == null) msec = fademsec;
	
	if (el.fadeIndex == null)
		el.fadeIndex = fadeArray.length;
		fadeArray[el.fadeIndex] = el;
	
	if (el.fadeStepNumber == null) {
		if (el.style.visibility == "hidden")
			el.fadeStepNumber = 0;
		else
			el.fadeStepNumber = steps;
		if (fadeMode=="in") {
			el.style.filter = "Alpha(Opacity=0)";
			el.style.MozOpacity = 0;
		}
		else {
			el.style.filter = "Alpha(Opacity=100)";
			el.style.MozOpacity = 1;
		}
	}
			
	window.setTimeout("repeatFade('" + fadeMode + "'," + el.fadeIndex + "," + steps + "," + msec + ",'" + fn + "')", msec);
}

//////////////////////////////////////////////////////////////////////////////////////
//  Used to iterate the fading

function repeatFade(fadeMode, index, steps, msec, fn) {
	el = fadeArray[index];
	
	c = el.fadeStepNumber;
	if (el.fadeTimer != null)
		window.clearTimeout(el.fadeTimer);
	if ((c == 0) && (fadeMode=="out")) {	//Done fading out!
		el.style.visibility = "hidden";		// If the platform doesn't support filter it will hide anyway
		eval(fn);
		return;
	}
	else if ((c==steps) && (fadeMode=="in")) {	//Done fading in!
		el.style.filter = "";
		el.style.MozOpacity = 1;
		el.style.visibility = "visible";
		eval(fn);
		return;
	}
	else {
		(fadeMode=="in") ? 	c++ : c--;
		el.style.visibility = "visible";
		el.style.filter = "Alpha(Opacity=" + 100*c/steps + ")";
		el.style.MozOpacity = c / steps;
		el.fadeStepNumber = c;
		el.fadeTimer = window.setTimeout("repeatFade('" + fadeMode + "'," + index + "," + steps + "," + msec + ",'" + fn + "')", msec);
	}
}
