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; 
} 