/*******************************************************************
2* File : JSFX_LinkFader.js © JavaScript-FX.com
3* Created : 2002/09/05
4* Author : Roy Whittle (Roy@Whittle.com) www.Roy.Whittle.com
5* Purpose : To create a more dynamic a:hover using fading
6* History
7* Date Version Description
8* 2002-09-05 1.0 First version
9***********************************************************************/
/*** Create some global variables ***/
if(!window.JSFX)JSFX=new Object();

var LinkFadeInStep=20;
var LinkFadeOutStep=5;
var LinkEndColor="fe3A01"

var LinkStartColor="C0C0C0";
var LinkFadeRunning=false;

document.onmouseover = theOnOver;
document.onmouseout = theOnOut;
if(document.captureEvents)
 document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);

/***********************************************
26*
27* Function : getColor
28*
29* Parameters : start - the start color (in the form "RRGGBB" e.g. "FF00AC")
30* end - the end color (in the form "RRGGBB" e.g. "FF00AC")
31* percent - the percent (0-100) of the fade between start & end
32*
33* returns : color in the form "#RRGGBB" e.g. "#FA13CE"
34*
35* Description : This is a utility function. Given a start and end color and
36* a percentage fade it returns a color in between the 2 colors
37*
38* Author : www.JavaScript-FX.com
39*
40*************************************************/
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)
 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)
 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();
}
/*******************************************************************
158*
159* Function : LinkFadeAnimation
160*
161* Description : This function is based on the Animate function
162* of animate.js (animated rollovers).
163* Each fade object has a state. This function
164* modifies each object and changes its state.
165*****************************************************************/
JSFX.LinkFadeAnimation = function()
{
 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);
}