var inStep = 25;
var outStep = 15;
var frameDelay = 50;
var startColor = "414141";
var endColor = "A5A5A5";
var fullFade = true;
var fadeRunning = false;
var fadeObj;

function hex2dec(hex)
{
 return(parseInt(hex,16));
}


function dec2hex(dec)
{
 return (dec < 16 ? "0" : "") + dec.toString(16);
}


function getColor(percent)
{
 var r1 = hex2dec(startColor.slice(0,2));
 var g1 = hex2dec(startColor.slice(2,4));
 var b1 = hex2dec(startColor.slice(4,6));
 var r2 = hex2dec(endColor.slice(0,2));
 var g2 = hex2dec(endColor.slice(2,4));
 var b2 = hex2dec(endColor.slice(4,6));
 var pc = percent/100;
 var r = Math.floor(r1 + (pc*(r2 - r1)) + .5);
 var g = Math.floor(g1 + (pc*(g2 - g1)) + .5);
 var b = Math.floor(b1 + (pc*(b2 - b1)) + .5);
 return("#" + dec2hex(r) + dec2hex(g) + dec2hex(b));
}


function FadeIn(th)
{
 fadeObj = th;
 if (fadeObj.state == null)
  {
   fadeObj.state = "OFF";
   fadeObj.index = 0;
  }
 if (fadeObj.state == "OFF")
  {
   fadeObj.state = "IN";
   if(!fadeRunning)
    {
     DoFadeAnimation();
    }
  }
 else if(fadeObj.state == "OUT" || fadeObj.state == "IN_OUT")
  {
   fadeObj.state = "IN";
  }
}


function FadeOut(th)
{
 fadeObj = th;
 if(fadeObj.state == "ON")
  {
   fadeObj.state = "OUT";
   if(!fadeRunning)
    {
     DoFadeAnimation();
    }
  }
 else if(fadeObj.state == "IN")
  {
   if (fullFade)
    {
     fadeObj.state="IN_OUT";
    }
   else
    {
     fadeObj.state="OUT";
    }
  }
}


function DoFadeAnimation()
{ fadeRunning = false; if (fadeObj.state)
  {   if (fadeObj.state == "IN")
    {
     fadeObj.index += inStep;
     if(fadeObj.index > 100)
      {
       fadeObj.index = 100;
      }
     fadeObj.style.color = getColor(fadeObj.index);
     if(fadeObj.index == 100)
      {
       fadeObj.state = "ON";
      }
     else
      {
       fadeRunning = true;
      }
    }
   else if (fullFade && fadeObj.state == "IN_OUT")
    {
     fadeObj.index += inStep;
     if(fadeObj.index > 100)
      {
       fadeObj.index = 100;
      }
     fadeObj.style.color=getColor(fadeObj.index);
     if(fadeObj.index == 100)
      {
       fadeObj.state="OUT";
      }
     fadeRunning = true;
    }
   else if (fadeObj.state == "OUT")
    {
     fadeObj.index -= outStep;
     if(fadeObj.index < 0)
      {
       fadeObj.index = 0;
      }
     fadeObj.style.color=getColor(fadeObj.index);
     if(fadeObj.index == 0)
      {
       fadeObj.state = "OFF";
      }
     else
      {
       fadeRunning = true;
      }
    }
  }
 if(fadeRunning)
  {
   setTimeout("DoFadeAnimation()", frameDelay);
  }
}