
var fadeElem = null;
var onFadeFinished = null;
var fadeStart = 0;
var fadeDuration = 500;
var fadeIn = false;

function fade(elem, doFadeIn, onFinished)
{
  if (typeof(elem) == "string")
    fadeElem = document.getElementById(elem);
	else
	  fadeElem = elem;
	if ((doFadeIn && fadeElem.style.visibility == "visible") || (!doFadeIn && fadeElem.style.visibility == "hidden"))
	{
  	if (typeof(onFinished) == "function")
  	  onFinished()
  	else
			eval(onFinished);
	}
	else
	{
  	fadeIn = doFadeIn;
  	fadeStart = new Date();
  	onFadeFinished = onFinished;
    fadeElem.style.visibility = "visible";
  	doFadeStep();
	}
}

function doFadeStep()
{
  var elapsed = new Date().getTime() - fadeStart.getTime();
  if (elapsed < fadeDuration)
	{
	  if (fadeIn)
		{
    	fadeElem.style.opacity = (elapsed / fadeDuration).toPrecision(2);
    	fadeElem.style.filter = "alpha(opacity=" + Math.round(100 * elapsed / fadeDuration) + ")";
		}
		else
		{
    	fadeElem.style.opacity = 1 - (elapsed / fadeDuration).toPrecision(2);
    	fadeElem.style.filter = "alpha(opacity=" + Math.round(100 - 100 * elapsed / fadeDuration) + ")";
		}
  	setTimeout("doFadeStep()", 10);
	}
  else
	{
	  if (fadeIn)
		{
    	fadeElem.style.opacity = "1";
    	fadeElem.style.filter = "alpha(opacity=100)";
		}
		else
      fadeElem.style.visibility = "hidden";
		var s = onFadeFinished;
		onFadeFinished = null;
  	if (typeof(s) == "function")
  	  s()
  	else
			eval(s);
	}
}


