/*******************************************************************
* File    : JSFX_LinkFader.js   JavaScript-FX.com
* Created : 2002/09/05
* Author  : Roy Whittle  (Roy@Whittle.com) www.Roy.Whittle.com
* Purpose : To create a more dynamic a:hover using fading
* History
* Date         Version        Description
* 2002-09-05  1.0    First version
* MY MOD: if name=no no draw script!
* upraveno jirí Jansa
***********************************************************************/
/*** Create some global variables ***/
if(!window.JSFX)JSFX=new Object();

var LinkFadeInStep=20;
var LinkFadeOutStep=8;
var LinkEndColor="E84B00"

var LinkStartColor="FFFFFF";
var LinkFadeRunning=false;

var LinkId = escape(document.location);
LinkId=1;
document.onmouseover = theOnOver;
document.onmouseout  = theOnOut;
if(document.captureEvents)
    document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);

/***********************************************
*
* Function    : getColor
*
* Parameters  :  start - the start color (in the form "RRGGBB" e.g. "FF00AC")
*      end - the end color (in the form "RRGGBB" e.g. "FF00AC")
*      percent - the percent (0-100) of the fade between start & end
*
* returns    : color in the form "#RRGGBB" e.g. "#FA13CE"
*
* Description : This is a utility function. Given a start and end color and
*        a percentage fade it returns a color in between the 2 colors
*
* Author    : www.JavaScript-FX.com
*
*************************************************/
function hex2dec(hex){return(parseInt(hex,16));}
function dec2hex(dec){return (dec < 16 ? "0" : "") + dec.toString(16);}
function getColor(start, end, percent)
{

  var r1=hex2dec(start.slice(0,2));
  var g1=hex2dec(start.slice(2,4));
  var b1=hex2dec(start.slice(4,6));

  var r2=hex2dec(end.slice(0,2));
  var g2=hex2dec(end.slice(2,4));
  var b2=hex2dec(end.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));
}
/************************************************/
JSFX.getCurrentElementColor = function(el)
{
  var result = LinkStartColor;

  if (el.currentStyle)
    result = (el.currentStyle.color);
  else if (document.defaultView)
    result = (document.defaultView.getComputedStyle(el,'').getPropertyValue('color'));
  else if(el.style.color) //Opera
    result = el.style.color;

  if(result.charAt(0) == "#")      //color is of type #rrggbb
    result = result.slice(1, 8);
  else if(result.charAt(0) == "r") //color is of type rgb(r, g, b)
  {
    var v1 = result.slice(result.indexOf("(")+1, result.indexOf(")") );
    var v2 = v1.split(",");
    result = (dec2hex(parseInt(v2[0])) + dec2hex(parseInt(v2[1])) + dec2hex(parseInt(v2[2])));
  }

  return result;
}
JSFX.findTagIE = function(el)
{
      while (el && el.tagName != 'A')
            el = el.parentElement;
  return(el);
}
JSFX.findTagNS= function(el)
{
      while (el && el.nodeName != 'A')
            el = el.parentNode;
  return(el);
}
function theOnOver(e)
{
  var lnk;
  if(window.event)
    lnk=JSFX.findTagIE(event.srcElement);
  else
    lnk=JSFX.findTagNS(e.target);

  if(lnk) {
    if (lnk.name=='no') {
    } else {
      JSFX.linkFadeUp(lnk);
    }
  }

}
JSFX.linkFadeUp = function(lnk)
{
  if(lnk.state == null)
  {
    lnk.state = "OFF";
    lnk.index = 0;
    lnk.startColor = JSFX.getCurrentElementColor(lnk);
    lnk.endColor = LinkEndColor;
  }

  if(lnk.state == "OFF")
  {
    lnk.state = "FADE_UP";
    JSFX.startLinkFader();
  }
  else if( lnk.state == "FADE_UP_DOWN"
    || lnk.state == "FADE_DOWN")
  {
    lnk.state = "FADE_UP";
  }

}
function theOnOut(e)
{
  var lnk;
  if(window.event)
    lnk=JSFX.findTagIE(event.srcElement);
  else
    lnk=JSFX.findTagNS(e.target);

  if(lnk) {
    if (lnk.name=='no') {
    } else {
      JSFX.linkFadeDown(lnk);
    }
  }
}
JSFX.linkFadeDown = function(lnk)
{
  if(lnk.state=="ON")
  {
    lnk.state="FADE_DOWN";
    JSFX.startLinkFader();
  }
  else if(lnk.state == "FADE_UP")
  {
    lnk.state="FADE_UP_DOWN";
  }
}
JSFX.startLinkFader = function()
{
  if(!LinkFadeRunning)
    JSFX.LinkFadeAnimation();
}
/*******************************************************************
*
* Function    : LinkFadeAnimation
*
* Description : This function is based on the Animate function
*            of animate.js (animated rollovers).
*            Each fade object has a state. This function
*            modifies each object and changes its state.
*****************************************************************/
JSFX.LinkFadeAnimation = function()
{
  if(LinkId==1)
  {
  LinkFadeRunning = false;
  for(i=0 ; i<document.links.length ; i++)
  {
    var lnk = document.links[i];
    if(lnk.state)
    {
      if(lnk.state == "FADE_UP")
      {
        lnk.index+=LinkFadeInStep;
        if(lnk.index > 100)
          lnk.index = 100;
        lnk.style.color=getColor(lnk.startColor, lnk.endColor, lnk.index);

        if(lnk.index == 100)
          lnk.state="ON";
        else
          LinkFadeRunning = true;
      }
      else if(lnk.state == "FADE_UP_DOWN")
      {
        lnk.index+=LinkFadeOutStep;
        if(lnk.index>100)
          lnk.index = 100;
        lnk.style.color=getColor(lnk.startColor, lnk.endColor, lnk.index);

        if(lnk.index == 100)
          lnk.state="FADE_DOWN";
        LinkFadeRunning = true;
      }
      else if(lnk.state == "FADE_DOWN")
      {
        lnk.index-=LinkFadeOutStep;
        if(lnk.index<0)
          lnk.index = 0;
        lnk.style.color=getColor(lnk.startColor, lnk.endColor, lnk.index);

        if(lnk.index == 0)
          lnk.state="OFF";
        else
          LinkFadeRunning = true;
      }
    }
  }
  }

  /*** Check to see if we need to animate any more frames. ***/
  if(LinkFadeRunning)
    setTimeout("JSFX.LinkFadeAnimation()", 40);
}

