/* ----------------------------------------------
    Skript: Hoverlinks mit wechselnden Farben
---------------------------------------------- */
// ~ zu sehen auf http://thedreamersmaze.org

/* ----- Rechtliche Hinweise ----- */
// Urheberin: Anna Kleiner ~ www.netzhexe.de ~
// Dieses Skript ist unter einer Creative Commons-Lizenz lizenziert.
// Es darf für nichtkommerzielle Zwecke verändert, vervielfältigt und
// weitergegeben werden, solange ich als Urheberin genannt bleibe, ein
// Link auf netzhexe.de gegeben ist und darauf basierende Werke ebenfalls
// unter dieser oder einer neueren Version dieser Lizenz verbreitet werden.

// Die Kurzfassung der Lizenz gibt es hier zu lesen:
// http://creativecommons.org/licenses/by-nc/3.0/de/

/* ----- Wie es funktioniert ----- */
// Dieses Skript wechselt für alle Links in einem bestimmten DIV (bzw.
// *nicht* für Links in bestimmten anderen DIVs) in angegebenen Zeitabständen
// die Hoverfarbe (die Farbe, wenn man mit der Maus drauf zeigt).

// Das Skript wird im Kopf der HTML-Datei, deren Links beim Draufzeigen
// die Farbe wechseln sollen, irgendwo in den Meta-Angaben so eingebunden:
//   <script src="hoverlinks.js" type="text/javascript">
// Den Pfad zum Skript entsprechend anpassen.

// Dann muss das body-Tag so aussehen:
//   <body onload="javascript:recolourLinks(); window.setInterval('recolourLinks()', 7000);">
// "7000" ist die Zeit in Millisekunden, nach der die Farbe wechselt.

// Und schließlich müssen in der CSS-Datei (oder im HTML-Kopf) noch die Farben
// definiert sein, etwa so:
/*
  a:hover.colour_1 { color: #ca4040; }
  a:hover.colour_2 { color: #ec9337; }
  a:hover.colour_3 { color: #f4d03a; }
  a:hover.colour_4 { color: #288534; }
  a:hover.colour_5 { color: #326db1; }
  a:hover.colour_6 { color: #9348c1; }
  a:hover.colour_7 { color: #b25591; }
*/
// Das wären jetzt Regenbogenfarben wie auf thedreamersmaze.org, andere Farben lassen sich
// hiermit leicht finden: http://de.selfhtml.org/helferlein/farben.htm


// Bitte beachten:
// ---------------
// - Jeglicher Inhalt muss sich irgendwo in einem DIV mit id befinden
// - Die Farben müssen als Klassen per CSS definiert sein mit dem Namen "colour_" plus Zahl



/* ----- Einstellungen fürs Skript -------------------- */
// Wieviele verschiedene Farben wurden definiert?
colours = 7;

// In welchen Bereichen (DIVs) sollen die Links nicht verändert werden?
divExceptions = new Array("head", "web", "meins", "andere", "foren", "zufall", "foot");
// Beispiel: Im Menü sollen die Links nicht die Farben wechseln. Das Menü ist innerhalb von
// <div id="menu">[Menü]</div> notiert, dann steht in dieser Liste einfach "menu".

// In welchen Tags sollen die Links nicht verändert werden?
tagExceptions = new Array("H2"); // Tags müssen großgeschrieben werden!
/* ---------------------------------------------------- */

// ======== Das Skript! Ab hier erfolgen Änderungen auf eigene Gefahr =========
function checkDivExceptions(varb)
{
    for (j=0;j<divExceptions.length;j++) {
        if (divExceptions[j] == varb) {
            return true;
        }
    }
    return false;
}

function checkTagExceptions(tmp)
{
    for (k=0;k<tagExceptions.length;k++) {
        if (tagExceptions[k] == tmp) {
            return true;
        }
    }
    return false;
}

function checkParent(knoten)
{
    if (checkTagExceptions(knoten.parentNode.tagName) == true) {
        return false;
    }

    // prüfe Elternelemente auf DIVs
    while (knoten.parentNode.tagName != "DIV") {
        knoten = knoten.parentNode;
    }
    id = knoten.parentNode.getAttribute("id");

    if (checkDivExceptions(id) == true) {
        return false;
    } else {
        return true;
    } return true;
}

function startTheThing()
{
    farblinks = new Array();
    c = 0;
    t = Math.random() * colours; // mit einer zufälligen Farbe anfangen
    o = Math.floor(t) + 1;
    for (i=0; i<document.links.length; i++) { // alle Links im Dokument
        if (checkParent(document.links[i])) { // in welchem DIV ist der Link?
            neu = document.createAttribute("class");
            neu.nodeValue = "colour_" + o;
            document.links[i].setAttributeNode(neu);
            farblinks[c] = i; // Nummer des Links im Array speichern
            c++;
        }
    }
}

function recolourLinks()
{
    if (typeof(farblinks) == "undefined") { // wenn Array noch nicht vorhanden
        startTheThing();
    }
    o++;
    if (o > colours) { o = 1; }
    for (i=0; i<farblinks.length; i++) {
        document.links[farblinks[i]].className = "colour_" + o;
    }
}
