/* ------------------------------------------------------------
//        Copyright 1997 Stefan Mintert
//
// This code may be used for private, non-profit use.
// This copyright notice must not be changed!
// Dieser Code darf zu privaten, nicht auf Gewinn ausgerichteten
// Zwecke verwendet werden. Dieser Copyright-Vermerk darf nicht
// verändert werden!
// ------------------------------------------------------------ */

// Schnittstelle
//         smMenueEintrag()
//        smMenueAusgeben()
//        submenueVerstecken()
//        submenueZeigen()
// Folgende globale Variablen können nach dem Laden dieser Datei
// geändert werden.

// Trennzeichen zwischen den Menü-Leveln; Bsp: "Kapitel/Abschnitt/..."
var smMenueTrennzeichen = "/";

// Die folgenden Variablen enthalten den HTML-Text für die
// Markierungen für aufgeklappte und zugeklappte Submenüs
// sowie für den Einschub bei Einträgen, die nicht
// aufgeklappt werden. Falls hier Bilder verwendet werden,
// sollten sie alle die gleiche Größe besitzen.
var smMenueAufgeklappt        = "<img border=0 src=auf.gif>"
var smMenueZugeklappt        = "<img border=0 src=zu.gif>"
var einschub        = "<img border=0 src=12x15.gif>"
var smStandort = "Home"

// Folgende Variablen bestimmen das Aussehen des Menüdokumentes
// und sollten an das Aussehen des anderen Frames
// angepasst werden.
var smMenueHTMLKOPF = "<HTML><HEAD><TITLE>Men&uuml;</TITLE></HEAD><BODY bgcolor=white><H1>Menü</H1>"
var smMenueHTMLFUSS = "</BODY></HTML>"
var smStandortHTMLKOPF = "<HTML><HEAD><TITLE>Standortzeile</TITLE></HEAD><BODY bgcolor=white><H1>Menü</H1>"
var smStandortHTMLFUSS = "</BODY></HTML>"

/* ---------------------------------------------------------
// Alles weitere sind Interna
// --------------------------------------------------------- */

// Globales Menue-Objekt
smMenue = new Array();

/* ---------------------------------------------------------
// function smMenueEintrag(pfad,url)
// Erzeugt einen Menüeintrag mit
//     pfad == "level1/level2/level3/.../levelN"
// und url ist ein URL der Seite, die beim Anklicken
// von 'levelN' geladen wird.
// ACHTUNG: level1 bis levelN-1 müssen bereits existieren!
// --------------------------------------------------------- */
function smMenueEintrag(pfad,url)
{
        // lokale Variablen
        var bezeichnung,status,vorgaenger = "";

        // evtl führende und abschließende Slashes von pfad entfernen:
        if (pfad.charAt(0) == smMenueTrennzeichen)
                pfad = pfad.substring(1,pfad.length);
        if (pfad.charAt(pfad.length-1) == smMenueTrennzeichen)
                pfad = pfad.substring(0,pfad.length-1);

        var letztesTrennzeichen = pfad.lastIndexOf(smMenueTrennzeichen);
        if (letztesTrennzeichen <= 0) // top-level menueeintrag
        {
                bezeichnung = pfad;
                versteckt   = true;
                vorgaenger  = "";        // kein vorgaenger, da top-level
        }
        else
        {
                bezeichnung = pfad.substring(letztesTrennzeichen+1,pfad.length);
                versteckt   = true;
                vorgaenger  = pfad.substring(0,letztesTrennzeichen);
        }


        InternErzeugeMenueEintrag(smMenue,pfad,pfad,url,bezeichnung,versteckt,vorgaenger);

}


/* ---------------------------------------------------------
// function InternErzeugeMenueEintrag(menueObjekt,rest,pfad,url,bezeichnung,versteckt,vorgaenger)
// Interne Fkt. für einen Menü-Eintrag.
// Parameter:
// - menueObjekt: der Objektbezeichner der Menüebene; falls
//        ein Top-Level eintragt gemacht wird, ist
//        menueObjekt == smMenue (globale Variable),
//        sonst menueObjekt == smMenue[l1].sub[l2]...sub
// - rest: ist der Rest des ursprünglichen Pfades; falls rest
//        keine Trennzeichen mehr enthält, ist rest == bezeichnung
// - pfad: der volle Pfad des Menüeintrages
// - url: s.o.
// - bezeichnung: Der letzte Teil des Pfades, also der
//        eigentliche Eintrag im Menü
// - versteckt: Boolescher Wert
// - vorgaenger: pfad ohne bezeichnung
// --------------------------------------------------------- */
function InternErzeugeMenueEintrag(menueObjekt,rest,pfad,url,bezeichnung,versteckt,vorgaenger)
{
        if (rest.indexOf(smMenueTrennzeichen) == -1)
                menueObjekt[rest] = new InternMenueEintrag(pfad,url,bezeichnung,versteckt,vorgaenger);
        else
        {
                var menueLevel = rest.substring(0,rest.indexOf(smMenueTrennzeichen));
                var neuerRest  = rest.substring(rest.indexOf(smMenueTrennzeichen)+1,rest.length);
                InternErzeugeMenueEintrag(menueObjekt[menueLevel].sub,neuerRest,pfad,url,bezeichnung,versteckt,vorgaenger);
        }
}

/* ---------------------------------------------------------
// function InternMenueEintrag(pfad,url,bezeichnung,versteckt,vorgaenger)
// Interner Objekt-Konstruktor
// --------------------------------------------------------- */
function InternMenueEintrag(pfad,url,bezeichnung,versteckt,vorgaenger)
{
        this.pfad         = pfad;
        this.url        = url;
        this.bez        = bezeichnung;
        this.hidden        = versteckt;
        this.parent        = vorgaenger;
        this.sub        = new Array();
}

/* ---------------------------------------------------------
// function InternNaechstenLevelAusgeben(M,indent)
// Interne Ausgabefunktion für einen Menülevel.
// Parameter:
// - M: Menüobjekt
// - indent: Integer, der die Einrücktiefe angibt
// --------------------------------------------------------- */
function InternNaechstenLevelAusgeben(M,indent)
{
        var indentString = "";
        var first = 0;

        first = indent;
        if (first == 0)
        {
                self.baum.document.writeln("<BR>")
        }

        for (i in M) // for (i=0; i < M.length; i++)
        {
                indentString = "";
                for (j = indent; j > 0; j--)
                     indentString += einschub+" ";
                //self.baum.document.writeln(indentString,M[i].pfad,M[i].url,M[i].bez,M[i].hidden,M[i].parent);

                var statuswechsel=einschub+" ";

                var laenge=0;
                for (j in M[i].sub)
                        ++laenge;         // sollte eigentlich gleich M[i].sub.length sein, ist es aber nicht!?
                if (laenge > 0)         // => es gibt submenue-eintrage
                  if (! M[i].hidden)        // nicht versteckt
                  {
                        statuswechsel =  "<a href=\"javascript:parent.submenueVerstecken('"+M[i].pfad+"');";
                        statuswechsel += "parent.smMenueAusgeben();\">"+smMenueAufgeklappt;
                  }
                  else
                  {
                        statuswechsel =  "<a href=\"javascript:parent.submenueZeigen('"+M[i].pfad+"');";
                        statuswechsel += "parent.smMenueAusgeben();\">"+smMenueZugeklappt;
                  }


                if (M[i].url != "")
                {
                        var anchorStart = "<a target=baumausgabe href='"+M[i].url+"' onClick=\"parent.SetStandort('"+M[i].pfad+"')\">";
                        var anchorEnd = "</a>";
                }
                else
                {
                        var anchorStart = "<FONT color=#FFFFFF> ";
                        var anchorEnd = "</FONT></a>";
                }


                self.baum.document.writeln(indentString,statuswechsel,anchorStart,M[i].bez,anchorEnd,"<BR>");

                if (laenge > 0 && (! M[i].hidden)) // zu 'laenge' s.o.
                        InternNaechstenLevelAusgeben(M[i].sub,indent+1);

                if (first == 0)
                {
                        self.baum.document.writeln("<BR>")
                }
        }

}

/* ---------------------------------------------------------
// function smMenueAusgeben()
// Ausgabefunktion für das gesamte Menü.
// Arbeitet mit globalem Objekt smMenue
// --------------------------------------------------------- */
function smMenueAusgeben()
{
        self.baum.document.open();
        self.baum.document.writeln(smMenueHTMLKOPF);
        InternNaechstenLevelAusgeben(smMenue,0);
        self.baum.document.writeln(smMenueHTMLFUSS);
        self.baum.document.close();

        smStandortAusgeben();

}

/* ---------------------------------------------------------
// function InternVerstecken(menueObjekt,restpfad,zustand)
// Interne Funktion zum Setzten der hidden-Eigenschaft.
// --------------------------------------------------------- */
function InternVerstecken(menueObjekt,restpfad,zustand)
{
        if (restpfad.indexOf(smMenueTrennzeichen) == -1)
                menueObjekt[restpfad].hidden = zustand;
        else
        {
                var menueLevel = restpfad.substring(0,restpfad.indexOf(smMenueTrennzeichen));
                var neuerRest  = restpfad.substring(restpfad.indexOf(smMenueTrennzeichen)+1,restpfad.length);
                InternVerstecken(menueObjekt[menueLevel].sub,neuerRest,zustand);
        }
}


/* ---------------------------------------------------------
// submenueVerstecken(pfad)
// Versteckt ein Submenü, das über den vollen Pfad
// spezifiziert wird.
// Analog: function submenueZeigen(pfad)
// --------------------------------------------------------- */
function submenueVerstecken(pfad)
{
        InternVerstecken(smMenue,pfad,true);
        //smMenueAusgeben();
}
function submenueZeigen(pfad)
{
        InternVerstecken(smMenue,pfad,false);
        //smMenueAusgeben();
}

/* ---------------------------------------------------------
// function smStandortAusgeben()
// Ausgabefunktion für den aktuellen Standort
// --------------------------------------------------------- */
function smStandortAusgeben()
{
        self.standort.document.open();
        self.standort.document.writeln(smStandortHTMLKOPF);
        self.standort.document.writeln(smStandort);
        self.standort.document.writeln(smStandortHTMLFUSS);
        self.standort.document.close();
}

/* ---------------------------------------------------------
// function SetStandort()
// Standortvariable setzen und ausgeben
// --------------------------------------------------------- */
function SetStandort(standort)
{
        smStandort = standort;
        smStandortAusgeben();
        return true;
}
