/* -----

   ----- */

var initdone = false;

function init () {

    if ( document.getElementById ) {
        var schubladen = dom_suche_kinder (
                document.getElementById("hauptnavigation"), "div", "class=schublade", true );
        for ( var x in schubladen ) {
            var schublade = schubladen[x];
            var kinder = dom_suche_kinder( schublade, "a", "class=ebene2", true ).length;
            var tiefe = 20 * kinder + 9;
            new edis_schublade( schublade, tiefe );
            //
            var sc = dom_suche_ahn( schublade, "div", "class=schub-container" );
            sc.style.height = tiefe+"px";
        }
    }
    initdone = true;
}


edis_schublade.register = new Array();
edis_schublade.ani_dauer = 400;
edis_schublade.ani_intervall = 10;
edis_schublade.verzoegerung = 1000;
edis_schublade.orientierung = "top";

/**
 *
 */
function edis_schublade ( obj, tiefe ) {
    if ( document.getElementById ) {
        this.id = obj.id;
        this.obj = obj;
        this.container = dom_suche_ahn( obj, "div", "class=schub-container" );
        this.offen = false;            //
        this.aktiv = false;            //
        this.start_zeit = 0;           //
        this.schieben_timer = false;   //
        this.schliessen_timer = false; //

        this.tiefe = tiefe;
        this.richtung = (edis_schublade.orientierung=="top"||edis_schublade.orientierung=="left") ? "-" : "+";
        this.start_pos = (this.richtung=="+") ? tiefe : -1 * tiefe;    //
        this.ziel_pos = 0;            //
        this.geschwindigkeit = (this.ziel_pos - this.start_pos) / edis_schublade.ani_dauer / edis_schublade.ani_dauer;

        this.obj.onmouseover = new Function("edis_schublade.oeffnen('" + this.id + "')");
        this.obj.onmouseout = new Function("edis_schublade.schliessen('" + this.id + "')");

        edis_schublade.register[this.id] = this;
        this.beende_schieben(false);
    }
}

/**
 *
 */
edis_schublade.oeffnen = function (id) {
    if (!initdone) return;
    var schublade = edis_schublade.register[id];
    schublade.aktiv = true;
    //
    for ( var si in edis_schublade.register ) {
        if (id!=si) {
            edis_schublade.jetzt_schliessen(si);
        }
    }
    //
    if (schublade.schliessen_timer) {
        schublade.schliessen_timer = window.clearTimeout(schublade.schliessen_timer);
    }
    //
    if (!schublade.offen && !schublade.schieben_timer) {
        schublade.starte_schieben(true);
    }
}

/**
 *
 */
edis_schublade.schliessen = function (id) {
    if (!initdone) return;
    var schublade = edis_schublade.register[id];
    //
    if (schublade.schliessen_timer) {
        window.clearTimeout(schublade.schliessen_timer);
    }
    schublade.schliessen_timer = window.setTimeout("edis_schublade.jetzt_schliessen('"+id+"')", edis_schublade.verzoegerung);
}

/**
 *
 */
edis_schublade.jetzt_schliessen = function (id) {
    var schublade = edis_schublade.register[id];
    schublade.aktiv = false;
    if (schublade.schliessen_timer) {
        window.clearTimeout(schublade.schliessen_timer);
    }
    schublade.schliessen_timer = 0;
    //
    if (schublade.offen && !schublade.schieben_timer) {
        schublade.starte_schieben(false);
    }
}



/**
 *
 */
edis_schublade.prototype.starte_schieben = function (oeffnen) {
    this.offen = oeffnen;
    if (oeffnen) {
        this.set_sichtbarkeit(true);
    }
    this.start_zeit = (new Date()).getTime();
    this.schieben_timer = window.setInterval("edis_schublade.register['"+this.id+"'].bewege()", edis_schublade.ani_intervall);
}

/**
 *
 */
edis_schublade.prototype.bewege = function () {
    var fortschritt = (new Date()).getTime() - this.start_zeit;
    if (fortschritt > edis_schublade.ani_dauer) {
        this.beende_schieben();
    } else {
        var d = Math.round(Math.pow(edis_schublade.ani_dauer-fortschritt, 2) * this.geschwindigkeit);
        if (this.offen) {
            d = -d;
        } else if (this.richtung == "-") {
            d = -1 * this.tiefe + d;
        } else {
            d = this.tiefe + d;
        }
        this.bewege_nach(d);
    }
}

/**
 *
 */
edis_schublade.prototype.beende_schieben = function (oeffnen) {
    this.schieben_timer = window.clearTimeout(this.schieben_timer);
    this.bewege_nach(this.offen ? this.ziel_pos : this.start_pos);
    if (!this.offen) {
        this.set_sichtbarkeit(false);
    }
    if ((this.offen && !this.aktiv) || (!this.offen && this.aktiv)) {
        this.starte_schieben(this.aktiv);
    }
}

/**
 *
 */
edis_schublade.prototype.bewege_nach = function (pos) {
    this.obj.style[edis_schublade.orientierung] = pos + "px";
}

/**
 *
 */
edis_schublade.prototype.set_sichtbarkeit = function (sichtbar) {
    this.container.style.visibility = (sichtbar) ? "visible" : "hidden";
}