/*
 (c) 2007 Werbewelt Interactive
 Stand:		04.05.07
 Author:		Erik Lembke
 */
// Globale Liste von Animatoren
var aryAnimators = new Array();

/*
 *********************
 * Überblendfunktion *
 *********************
 Name		Typ			Beschreibung
 ------------------------------------
 objEvent	Object		Event-Objekt, welches vom Listener übergeben wird
 objParams	Object		Parameter des Ziel-Elements (HTML-Objekt und Aktion)
 */
function FadeThisLink(objEvent, objParams){
	
    // Auslesen des zugehörigen Animators aus der globalen Liste
    var myAnim = aryAnimators[objParams.child].anim;
    // Setzen der Parameter und Attribute zur gewählten Aktion
    var objData = aryAnimators[objParams.child][objParams.action];
    // Zuweisen des "Animations"-Partners
    var objPartner = aryAnimators[objParams.child].partner;
    // Prüfen des "Animations"-Partners
    if (objPartner != null) {
        if (objPartner.id.length > 0) {
            if (aryAnimators[objPartner.id] != undefined) {
                if (objEvent != null) {
                    // Aufruf des "Animations"-Partners (NULL um eine Rekursion zu unterbinden)
                    FadeThisLink(null, {
                        child: objPartner.id,
                        action: objParams.action
                    });
                }
            }
        }
    }
    
    // Prüfen ob der Animator aktuell arbeitet
    if (myAnim.isAnimated()) {
        // Stoppen des arbeitenden Animators
        myAnim.stop();
    }
    
    // Übernahme der Parameter und Attribute in den Animator
    myAnim.method = objData.method;
    myAnim.duration = objData.duration;
    myAnim.attributes = objData.attributes;
	
    // Starten des Animators
    myAnim.animate();
}


/*
 ***********************************************
 * Registrierung der Mouse-Events für Elemente *
 ***********************************************
 Name				Typ			Beschreibung
 --------------------------------------------
 objChild			Object		Ziel-Element (HTML-Objekt)
 bolListenParent	Boolean		Gibt an ob das übergeordnete Element überwacht werden soll
 */
function RegisterListeners(objChild, bolListenParent){
    // Definieren des "überwachten" Elements, falls das übergeordnete übernommen werden soll
    var objPointer;
    if (bolListenParent) {
        objPointer = objChild.parentNode;
    }
    else {
        objPointer = objChild;
    }
    
    // Hinzufügen der Listener zur YUI DOM für die Events "mouseOver" und "mouseOut" mit den jeweiligen Aktionen
    YAHOO.util.Event.addListener(objPointer, "mouseover", FadeThisLink, {
        child: objChild.id,
        action: "fade_this_in"
    });
    YAHOO.util.Event.addListener(objPointer, "mouseout", FadeThisLink, {
        child: objChild.id,
        action: "fade_this_out"
    });
    
    // Registrierte Elemente werden in Ausgangszustand versetzt
    FadeThisLink(null, {
        child: objChild.id,
        action: "fade_this_out"
    });
}


/*
 ************************************************************************
 * Prüfen und automatische Generierung von eindeutigen IDs für Elemente *
 ************************************************************************
 Name			Typ			Beschreibung
 ----------------------------------------
 objTarget		Object		Ziel-Element (HTML-Objekt)
 */
function CheckID(objTarget){
    // Prüfen ob ID bereits gesetzt wurde
    if (objTarget.id.length == 0) {
        // Generierung der eindeutigen ID
        return YAHOO.util.Event.generateId(objTarget);
    }
    else {
        // Rückgabe der existierenden ID
        return objTarget.id;
    }
}

/*
 ************************************************************************************
 * Hauptfunktion: Initalisierung der Animatoren und Registrierung der HTML-Elemente *
 ************************************************************************************
 */
WWIA_fader_init = function(){

    // Alle DIV layer ermitteln
    var aryLayers = document.getElementsByTagName("div");
    
    var c1;
    // Dursuchen aller erfassten DIV layer
    for (c1 = 0; c1 < aryLayers.length; c1++) {
        var objDiv = aryLayers[c1];
        
        
        
        // Weiche für DIV layer anhand des Klassennamens
        switch (objDiv.className.toLowerCase()) {
            case "wwia_fader_dark": // "Schatten" >> MouseOver Schatten und die Beschreibung in wwia_fader_desc fadet mit
                try {
                    // Automatische ID vergeben f�r DIV layer
                    objDiv.id = CheckID(objDiv);
                    var objPartner = null;
                    
                    var c2;
                    
                    // Durchsuchen aller Unterelemente nach der "Beschreibung" (desc)
                    for (c2 = 0; c2 < objDiv.parentNode.parentNode.childNodes.length; c2++) {
                        var objNode = objDiv.parentNode.parentNode.childNodes[c2];
                        try {
                            // Prüfen ob Element ein DIV layer ist
                            if (objNode.nodeName.toLowerCase() == "div") {
                                // Prüfen des Klassennamens
                                if (objNode.className != undefined) {
                                    if (objNode.className.toLowerCase() == "wwia_fader_desc") {
                                        // Prüfung bzw. Vergabe der ID
                                        objNode.id = CheckID(objNode);
                                        // Zuweisung als "Animations"-Partner
                                        objPartner = objNode;
                                        break;
                                    }
                                }
                            }
                        } 
                        catch (ex) {
                            alert(ex.name + ": " + ex.message);
                        }
                    }
                    
                    // Erstellen des Animators, zuweisen der Attribute und des "Animations"-Partner
                    aryAnimators[objDiv.id] = {
                        anim: new YAHOO.util.Anim(objDiv),
                        fade_this_in: objParam_FadeIn_dark,
                        fade_this_out: objParam_FadeOut_dark,
                        partner: objPartner
                    };
                    
                    // Registrieren der Mouse-Events
                    RegisterListeners(objDiv, true);
                } 
                catch (ex) {
                    alert(ex.name + ": " + ex.message);
                }
                break;
            case "wwia_fader_desc": // Beschreibung >> MouseOver Beschreibung und der Schatten in wwia_fader_dark fadet mit
                try {
                    // Prüfung bzw. Vergabe der ID f�r DIV layer
                    objDiv.id = CheckID(objDiv);
                    var objPartner = null;
                    var c7;
                    
                    // Durchsuchen aller Unterelemente nach dem Container (box) in dem das Bild und der Schatten drin sind 
                    for (c7 = 0; c7 < objDiv.parentNode.childNodes.length; c7++) {
                        var objParentNode = objDiv.parentNode.childNodes[c7];
                        try {
                            // Prüfen ob Element ein DIV layer ist
                            if (objParentNode.nodeName.toLowerCase() == "div") {
                                // Prüfen des Klassennamens
                                if (objParentNode.className != undefined) {
                                    if (objParentNode.className.toLowerCase() == "wwia_fader_box") {
                                    
                                        var c8;
                                        // Durchsuchen aller Unterelemente nach dem Schatten (dark)
                                        for (c8 = 0; c8 < objParentNode.childNodes.length; c8++) {
                                            var objNode = objParentNode.childNodes[c8];
                                            //Prüfen ob Element ein DIV layer ist
                                            if (objNode.nodeName.toLowerCase() == "div") {
                                                //Prüfen des Klassennamens
                                                if (objNode.className != undefined) {
                                                    if (objNode.className.toLowerCase() == "wwia_fader_dark") {
                                                        // Prüfung bzw. Vergabe der ID
                                                        objNode.id = CheckID(objNode);
                                                        // Zuweisung als "Animations"-Partner
                                                        objPartner = objNode;
                                                        break;
                                                    }
                                                }
                                                
                                            }
                                        }
                                    }
                                }
                            }
                        } 
                        catch (ex) {
                            alert(ex.name + ": " + ex.message);
                        }
                    }
                    // Erstellen des Animators, zuweisen der Attribute und des "Animations"-Partner
                    aryAnimators[objDiv.id] = {
                        anim: new YAHOO.util.ColorLinkAnim(objDiv),
                        fade_this_in: objParam_FadeIn_links,
                        fade_this_out: objParam_FadeOut_links,
                        partner: objPartner
                    };
                    // Registrieren der Mouse-Events
                    RegisterListeners(objDiv, false);
                } 
                catch (ex) {
                    alert(ex.name + ": " + ex.message);
                }
                break;
        }
    }
    
    /*
     ******************************************************************************
     * Zuweisen der Farben zu den Links (durch verschiedene Classnames definiert) *
     ******************************************************************************
     */
    //Suche aller Links
    
    //Diese Schleife wird nur für die Blogseite benötigt. Hier wird das Div mit dem aktiven Link gesucht und dem Link eine Class zugewiessen, damit diese unten erkannt werden kann..
    var aryDivs = document.getElementsByTagName("div");
    var d = 0;
    //Überprüfung aller Divs auf ihren Classname
    for (d = 0; d < aryDivs.length; d++) {
        var objDivs = aryDivs[d];
        var objDivsClass = objDivs.className;
        if (objDivsClass == "news-catmenu-ACT") {
            var objAnc = objDivs.firstChild;
            objAnc.className = "news-catmenu-ACT";
        }
    }
    
    var aryLinks = document.getElementsByTagName("a");
    var c = 0;
    //Überprüfung aller Links auf ihren Classname
    for (c = 0; c < aryLinks.length; c++) {
        var objLinks = aryLinks[c];
        var objLinksClass = objLinks.className;
        var objAnc = aryLinks[c];
        BereichNaviLinkColor();
    }
    
    function BereichNaviLinkColor(){
        try {
            // Prüfung bzw. Vergabe der ID für ANCHOR
            objAnc.id = CheckID(objAnc);
            
            // Erstellen des Animators für Relations, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if (objLinksClass == "relLink") {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeInRel_links,
                    fade_this_out: objParam_FadeOutRel_links,
                    partner: null
                };
            };
            // Erstellen des Animators für Interactive, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if (objLinksClass == "intLink") {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeInInt_links,
                    fade_this_out: objParam_FadeOutInt_links,
                    partner: null
                };
            };
            // Erstellen des Animators für Campaign, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if (objLinksClass == "campLink") {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeInCamp_links,
                    fade_this_out: objParam_FadeOutCamp_links,
                    partner: null
                };
            };
            // Erstellen des Animators für die Basislinks, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if (objLinksClass == "basic") {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeInBasic_links,
                    fade_this_out: objParam_FadeOutBasic_links,
                    partner: null
                };
            };
            // Erstellen des Animators für die aktiven Links, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if (objLinksClass == "activeLink") {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeInActive_links,
                    fade_this_out: objParam_FadeOutActive_links,
                    partner: null
                };
            };
            // Erstellen des Animators für die aktiven Links, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if (objLinksClass == "jobLinks") {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeInActive_links,
                    fade_this_out: objParam_FadeOutActive_links,
                    partner: null
                };
            };
            // Erstellen des Animators für die aktiven Links im Blog, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if (objLinksClass == "news-catmenu-ACT") {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeInActive_links,
                    fade_this_out: objParam_FadeOutActive_links,
                    partner: null
                };
            };
            // Erstellen des Animators für nicht definierte Links, zuweisen der Attribute ohne "Animations"-Partner (NULL)
            if ((objLinksClass != "jobLinks") && (objLinksClass != "campLink") && (objLinksClass != "intLink") && (objLinksClass != "relLink") && (objLinksClass != "basic") && (objLinksClass != "activeLink") && (objLinksClass != "news-catmenu-ACT")) {
                var myAnim = aryAnimators[objAnc.id] = {
                    anim: new YAHOO.util.ColorLinkAnim(objAnc),
                    fade_this_in: objParam_FadeIn_links,
                    fade_this_out: objParam_FadeOut_links,
                    partner: null
                };
            };
            // Registrieren der Mouse-Events
            RegisterListeners(objAnc, false);
        } 
        catch (ex) {
            alert(ex.name + ": " + ex.message);
        }
    }
    
};
