// LINK FADER SCRIPT V1.0
// By: Brian Gosselin
// URL: http://www.scriptasylum.com

var cID=0;
var currL=null;
var cntr=0;
var sCol=new Array();
var eCol=new Array();
var cSteps=new Array();
var itStep=15;

function cSet(hexn){
var el=new Array();
for(i=1,n=0;i<7;i+=2,n++)el[n]=parseInt('0x'+hexn.substring(i,i+2));
return el;
}

function calcSteps(el){
for(i=0;i<3;i++)cSteps[i]=Math.round((eCol[i]-sCol[i])/itStep);
}

function getHex(n){
return Math.max(Math.min(sCol[n]+cSteps[n]*cntr,255),0).toString(16);
}

function fadeLink(isH){
if(cntr<itStep){
var R=getHex(0);
var G=getHex(1);
var B=getHex(2);
if(R.length==1)R='0'+R;
if(G.length==1)G='0'+G;
if(B.length==1)B='0'+B;
currL.style.color=('#'+R+G+B);
cntr++;
}else{
clearInterval(cID);
if(isH)currL.style.color=currL.EC;
else currL.style.color=currL.SC;
}}

function linkH(){
if(currL!=null)currL.style.color=currL.SC;
clearInterval(cID);
cntr=1;
sCol=new cSet(this.SC);
eCol=new cSet(this.EC);
calcSteps();
cID=setInterval('fadeLink(true)',this.FSH);
currL=this;
if(typeof this.omv=="function")this.omv();
return true;
}

function linkO(){
clearInterval(cID);
cntr=1;
sCol=new cSet(this.EC);
eCol=new cSet(this.SC);
calcSteps();
cID=setInterval('fadeLink(false)',this.FSO);
if(typeof this.omt=="function")this.omt();
currL=this;
}

function fadeW3CElements(which){
if(document.getElementsByTagName){
var el=document.getElementsByTagName(which);
var pms=new Array();
for(i=0;i<el.length;i++){
if(el[i].getAttribute('parameters')){
pms=el[i].getAttribute('parameters').split('~');
if(pms.length==4){
el[i].SC=pms[0].substr(pms[0].indexOf('#'),7);
el[i].EC=pms[1].substr(pms[1].indexOf('#'),7);
el[i].FSH=Math.ceil(Math.max(20,parseInt(pms[2]))/itStep);
el[i].FSO=Math.ceil(Math.max(20,parseInt(pms[3]))/itStep);
el[i].style.color=el[i].SC;
el[i].omv=el[i].onmouseover;
el[i].onmouseover=linkH;
el[i].omt=el[i].onmouseout;
el[i].onmouseout=linkO;
}}}}}

fadeW3CElements('A');