
// 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=../../Grafiken/Minus.gif>"
var smMenueZugeklappt  = "<img border=0 src=../../Grafiken/Plus.gif>"
var smMenueEinschub  = "<img border=0 src=../../Grafiken/14x14.gif>"

// Folgende Variablen bestimmen das Aussehen des Menüdokumentes
// und sollten an das Aussehen des anderen Frames
// angepasst werden.
var smMenueHTMLKOPF = ''

var smMenueHTMLFUSS = "</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 = "";
  var ebene=0;
  var pos;

  //Menüebene ermitteln
  for(pos=0;pos<=pfad.length;++pos)
  {
    if (pfad.substr(pos,1)=="/")
    {
      ++ebene;
    }
  }

  // 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,pfad,url,bezeichnung,versteckt,vorgaenger,ebene);

}


/* ---------------------------------------------------------
// 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,ganzerpfad,url,bezeichnung,versteckt,vorgaenger,ebene)
{
  if (rest.indexOf(smMenueTrennzeichen) == -1)
    menueObjekt[rest] = new InternMenueEintrag(pfad,ganzerpfad,url,bezeichnung,versteckt,vorgaenger,ebene);
  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,ganzerpfad,url,bezeichnung,versteckt,vorgaenger,ebene);
  }
}

/* ---------------------------------------------------------
// function InternMenueEintrag(pfad,url,bezeichnung,versteckt,vorgaenger)
// Interner Objekt-Konstruktor
// --------------------------------------------------------- */
function InternMenueEintrag(pfad,ganzerpfad,url,bezeichnung,versteckt,vorgaenger,ebene)
{
  this.ganzerpfad = ganzerpfad;
  this.pfad   = pfad;
  this.url  = url;
  this.bez  = bezeichnung;
  this.hidden  = versteckt;
  this.parent  = vorgaenger;
  this.ebene = ebene;
  this.sub  = new Array();
}

/* ---------------------------------------------------------
// function InternNaechstenLevelAusgeben(M,indent,EintragNummer)
// Interne Ausgabefunktion für einen Menülevel.
// Parameter:
// - M: Menüobjekt
// - indent: Integer, der die Einrücktiefe angibt
// - EintragNummer: der Eintrag mit der Nummer 1 wird auf aktiv gesetzt
// --------------------------------------------------------- */
function InternNaechstenLevelAusgeben(M,indent,EintragNummer)
{
  var indentString = "";
  for (i in M) // for (i=0; i < M.length; i++)
  {
    indentString = "";
    for (j = indent; j > 0; j--)
         indentString += smMenueEinschub+" ";
    //self.baum.document.writeln(indentString,M[i].pfad,M[i].url,M[i].bez,M[i].hidden,M[i].parent);

    var statuswechsel=smMenueEinschub+" ";

    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
      {
	    if (navigator.appName=="Netscape" && navigator.appVersion.substring(0,1)<5) {
          statuswechsel =  "<a href='' onclick=\"javascript:parent.submenueVerstecken(decodeURI('"+M[i].pfad+"'));";
          statuswechsel += "parent.smMenueAusgeben();\">"+smMenueAufgeklappt+"</a> ";
		} else {
          statuswechsel =  "<a href=\"javascript:parent.submenueVerstecken(decodeURI('"+M[i].pfad+"'));";
          statuswechsel += "parent.smMenueAusgeben();\">"+smMenueAufgeklappt+"</a> ";
		}
      }
      else
      {
        statuswechsel =  "<a href=\"javascript:parent.submenueZeigen(decodeURI('"+M[i].pfad+"'));";
        statuswechsel += "parent.smMenueAusgeben();\">"+smMenueZugeklappt+"</a> ";
      }

    if (M[i].url != "")
    {
      if (EintragNummer==1)
        var anchorStart = "<a name=\""+M[i].ganzerpfad+"\" class=\"aktiv"+(M[i].ebene+1)+"\"  href=\""+M[i].url+"\" target=\"Leitsatz\" onclick=\"Javascript: parent.MenuepunktAktivieren('"+M[i].ganzerpfad+ "')\">";
      else
        var anchorStart = "<a name=\""+M[i].ganzerpfad+"\" class=\"inaktiv"+(M[i].ebene+1)+"\"  href=\""+M[i].url+"\" target=\"Leitsatz\" onclick=\"Javascript: parent.MenuepunktAktivieren('"+M[i].ganzerpfad+ "')\">";
    } else {
      var anchorStart = "";
    }
    var anchorEnd = "</a>";

    EintragNummer+=1;
    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,EintragNummer);
  }
}

/* ---------------------------------------------------------
// 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,1);

  self.baum.document.writeln(smMenueHTMLFUSS);
  self.baum.document.close();

  MenuepunktAktivieren(self.logo.document.forms[0].elements[0].value);
}

/* ---------------------------------------------------------
// 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)
{
 var Ergebnis

 //das Menü darf nur zugeklappt werden, wenn nicht einer seiner
 //Einträge aktiv ist
 if (document.all) {
   Ergebnis = self.logo.menue.aktivermenuepunkt.value.search(pfad);
 } else {
   Ergebnis = self.logo.document.forms[0].elements[0].value.search(pfad);
 }

 if(Ergebnis == -1 || self.logo.document.forms[0].elements[0].value==pfad)
    InternVerstecken(smMenue,pfad,true);
  //smMenueAusgeben();
}

function submenueZeigen(pfad)
{
  InternVerstecken(smMenue,pfad,false);
  //smMenueAusgeben();
}

function MenuepunktAktivieren(Linkname)
{
  if (document.all) {
    MenuepunktAktivierenIE(Linkname);
  } else {
    MenuepunktAktivierenNS(Linkname);
  }
}
function MenuepunktAktivierenNS(Linkname) {
  self.logo.document.forms[0].elements[0].value = Linkname;
  for (i=1;i<=self.baum.document.links.length;++i)
  {
    //erstmal alle Menüpunkte inaktiv schalten...
    if(self.baum.document.links[i-1].className=="aktiv1")
    {
      self.baum.document.links[i-1].className="inaktiv1";
    }
    if(self.baum.document.links[i-1].className=="aktiv2")
    {
      self.baum.document.links[i-1].className="inaktiv2";
    }
    if(self.baum.document.links[i-1].className=="aktiv3")
    {
      self.baum.document.links[i-1].className="inaktiv3";
    }
    if(self.baum.document.links[i-1].className=="aktiv4")
    {
      self.baum.document.links[i-1].className="inaktiv4";
    }
  }
  //...um dann den zu aktivieren, der geklickt wurde
  if(self.baum.document.links[Linkname].className=="inaktiv1")
  {
    self.baum.document.links[Linkname].className = "aktiv1";
  }
  if(self.baum.document.links[Linkname].className=="inaktiv2")
  {
    self.baum.document.links[Linkname].className = "aktiv2";
  }
  if(self.baum.document.links[Linkname].className=="inaktiv3")
  {
    self.baum.document.links[Linkname].className = "aktiv3";
  }
  if(self.baum.document.links[Linkname].className=="inaktiv4")
  {
    self.baum.document.links[Linkname].className = "aktiv4";
  }
}

function MenuepunktAktivierenIE(Linkname) {
  self.logo.document.forms[0].elements[0].value = Linkname;

  for (i=1;i<=self.baum.document.links.length;++i)
  {
    //erstmal alle Menüpunkte inaktiv schalten...
    if(self.baum.document.links[i-1].className=="aktiv1")
    {
      self.baum.document.links[i-1].className="inaktiv1";
    }
    if(self.baum.document.links[i-1].className=="aktiv2")
    {
      self.baum.document.links[i-1].className="inaktiv2";
    }
    if(self.baum.document.links[i-1].className=="aktiv3")
    {
      self.baum.document.links[i-1].className="inaktiv3";
    }
    if(self.baum.document.links[i-1].className=="aktiv4")
    {
      self.baum.document.links[i-1].className="inaktiv4";
    }
  }
  //...um dann den zu aktivieren, der geklickt wurde
  if(self.baum.document.all[Linkname].className=="inaktiv1")
  {
    self.baum.document.all[Linkname].className = "aktiv1";
  }
  if(self.baum.document.all[Linkname].className=="inaktiv2")
  {
    self.baum.document.all[Linkname].className = "aktiv2";
  }
  if(self.baum.document.all[Linkname].className=="inaktiv3")
  {
    self.baum.document.all[Linkname].className = "aktiv3";
  }
  if(self.baum.document.all[Linkname].className=="inaktiv4")
  {
    self.baum.document.all[Linkname].className = "aktiv4";
  }
}
