var rate = 20; 
var obj; 
var act = 0; 
var elmH = 0; 
var elmS = 128; 
var elmV = 255; 
var clrOrg; 
var TimerID; 

if (navigator.appName.indexOf("Microsoft",0) != -1 && parseInt(navigator.appVersion) >= 4) { 
Browser = true; 
} else { 
Browser = false; 
} 

if (Browser) { 
document.onmouseover = doRainbowAnchor; 
document.onmouseout = stopRainbowAnchor; 
} 

function doRainbow() 
{ 
if (Browser && act != 1) { 
act = 1; 
obj = event.srcElement; 
clrOrg = obj.style.color; 
TimerID = setInterval("ChangeColor()",100); 
} 
} 

function stopRainbow() 
{ 
if (Browser && act != 0) { 
obj.style.color = clrOrg; 
clearInterval(TimerID); 
act = 0; 
} 
} 

function doRainbowAnchor() 
{ 
if (Browser && act != 1) { 
obj = event.srcElement; 

//while (obj.tagName != 'A' && obj.tagName != 'BODY') { 
//obj = obj.parentElement; 
//if (obj.tagName == 'A' || obj.tagName == 'BODY') 
//break; 
//} 

if (obj.tagName == 'A' && obj.href != '') { 
act = 1; 
clrOrg = obj.style.color; 
TimerID = setInterval("ChangeColor()",100); 
} 
} 
} 

function stopRainbowAnchor() 
{ 
if (Browser && act != 0) { 
if (obj.tagName == 'A') { 
obj.style.color = clrOrg; 
clearInterval(TimerID); 
act = 0; 
} 
} 
} 

function ChangeColor() 
{ 
obj.style.color = makeColor(); 
} 

function makeColor() 
{ 

if (elmS == 0) { 
elmR = elmV; elmG = elmV; elmB = elmV; 
} 
else { 
t1 = elmV; 
t2 = (255 - elmS) * elmV / 255; 
t3 = elmH % 60; 
t3 = (t1 - t2) * t3 / 60; 

if (elmH < 60) { 
elmR = t1; elmB = t2; elmG = t2 + t3; 
} 
else if (elmH < 120) { 
elmG = t1; elmB = t2; elmR = t1 - t3; 
} 
else if (elmH < 180) { 
elmG = t1; elmR = t2; elmB = t2 + t3; 
} 
else if (elmH < 240) { 
elmB = t1; elmR = t2; elmG = t1 - t3; 
} 
else if (elmH < 300) { 
elmB = t1; elmG = t2; elmR = t2 + t3; 
} 
else if (elmH < 360) { 
elmR = t1; elmG = t2; elmB = t1 - t3; 
} 
else { 
elmR = 0; elmG = 0; elmB = 0; 
} 
} 

elmR = Math.floor(elmR); 
elmG = Math.floor(elmG); 
elmB = Math.floor(elmB); 

clrRGB = '#' + elmR.toString(16) + elmG.toString(16) + elmB.toString(16); 

elmH = elmH + rate; 
if (elmH >= 360) 
elmH = 0; 

return clrRGB; 
} 
