/************************************************************************//* Rainbow Links Version 1.03 (2003.9.20)                               *//* Script updated by Dynamicdrive.com for IE6                           *//* Copyright (C) 1999-2001 TAKANASHI Mizuki                             *//* takanasi@hamal.freemail.ne.jp                                        *//*----------------------------------------------------------------------*//* Read it somehow even if my English text is a little wrong! ;-)       *//*                                                                      *//* Usage:                                                               *//*  Insert '<script src="rainbow.js"></script>' into the BODY section,  *//*  right after the BODY tag itself, before anything else.              *//*  You don't need to add "onMouseover" and "onMouseout" attributes!!   *//*                                                                      *//*  If you'd like to add effect to other texts(not link texts), then    *//*  add 'onmouseover="doRainbow(this);"' and                            *//*  'onmouseout="stopRainbow();"' to the target tags.                   *//*                                                                      *//* This Script works with IE4,Netscape6,Mozilla browser and above only, *//* but no error occurs on other browsers.                               *//************************************************************************/////////////////////////////////////////////////////////////////////// Settingvar rate = 20;  // Increase amount(The degree of the transmutation)////////////////////////////////////////////////////////////////////// Main routineif (document.getElementById)window.onerror=new Function("return true")var objActive;  // The object which event occured invar act = 0;    // Flag during the actionvar elmH = 0;   // Huevar elmS = 128; // Saturationvar elmV = 255; // Valuevar clrOrg;     // A color before the changevar TimerID;    // Timer IDif (document.all) {    document.onmouseover = doRainbowAnchor;    document.onmouseout = stopRainbowAnchor;}else if (document.getElementById) {    document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);    document.onmouseover = Mozilla_doRainbowAnchor;    document.onmouseout = Mozilla_stopRainbowAnchor;}//=============================================================================// doRainbow//  This function begins to change a color.//=============================================================================function doRainbow(obj){    if (act == 0) {        act = 1;        if (obj)            objActive = obj;        else            objActive = event.srcElement;        clrOrg = objActive.style.color;        TimerID = setInterval("ChangeColor()",100);    }}//=============================================================================// stopRainbow//  This function stops to change a color.//=============================================================================function stopRainbow(){    if (act) {        objActive.style.color = clrOrg;        clearInterval(TimerID);        act = 0;    }}//=============================================================================// doRainbowAnchor//  This function begins to change a color. (of a anchor, automatically)//=============================================================================function doRainbowAnchor(){    if (act == 0) {        var 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 != '') {            objActive = obj;            act = 1;            clrOrg = objActive.style.color;            TimerID = setInterval("ChangeColor()",100);        }    }}//=============================================================================// stopRainbowAnchor//  This function stops to change a color. (of a anchor, automatically)//=============================================================================function stopRainbowAnchor(){    if (act) {        if (objActive.tagName == 'A') {            objActive.style.color = clrOrg;            clearInterval(TimerID);            act = 0;        }    }}//=============================================================================// Mozilla_doRainbowAnchor(for Netscape6 and Mozilla browser)//  This function begins to change a color. (of a anchor, automatically)//=============================================================================function Mozilla_doRainbowAnchor(e){    if (act == 0) {        obj = e.target;        while (obj.nodeName != 'A' && obj.nodeName != 'BODY') {            obj = obj.parentNode;            if (obj.nodeName == 'A' || obj.nodeName == 'BODY')                break;        }        if (obj.nodeName == 'A' && obj.href != '') {            objActive = obj;            act = 1;            clrOrg = obj.style.color;            TimerID = setInterval("ChangeColor()",100);        }    }}//=============================================================================// Mozilla_stopRainbowAnchor(for Netscape6 and Mozilla browser)//  This function stops to change a color. (of a anchor, automatically)//=============================================================================function Mozilla_stopRainbowAnchor(e){    if (act) {        if (objActive.nodeName == 'A') {            objActive.style.color = clrOrg;            clearInterval(TimerID);            act = 0;        }    }}//=============================================================================// Change Color//  This function changes a color actually.//=============================================================================function ChangeColor(){    objActive.style.color = makeColor();}//=============================================================================// makeColor//  This function makes rainbow colors.//=============================================================================function makeColor(){    // Don't you think Color Gamut to look like Rainbow?    // HSVtoRGB    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).toString(16);    elmG = Math.floor(elmG).toString(16);    elmB = Math.floor(elmB).toString(16);    if (elmR.length == 1)    elmR = "0" + elmR;    if (elmG.length == 1)    elmG = "0" + elmG;    if (elmB.length == 1)    elmB = "0" + elmB;    elmH = elmH + rate;    if (elmH >= 360)        elmH = 0;    return '#' + elmR + elmG + elmB;}
