/*
 Menue.js - Menü

 Implementiert die Klasse 'Menue' und stellt sie als Objekt zur Verfügung. Die Klasse erlaubt die
 Implementation von textbasierten, hierarchischen Menüs. Die Menüs müssen lediglich deklariert werden, die
 Einbettung erfolgt zur Laufzeit. Es können mehrere einzelne Menüs deklariert werden. Bei Bedarf können die
 entsprechenden Menüdateien eingebunden und der Name des Variablenfeldes der Methode 'einbetten' übergeben
 werden. Die Einbettung der Menüelemente erfolgt mit Div-Tags, die Hyperlinks mit A-Tags. Dadurch kann das
 Erscheinungsbild der Menüelemente, der Links und des Hover-Effekts mit Formatvorlagen individuell
 definiert werden.
 Die Menüdeklaration besteht aus einem Variablenfeld von Menüs, welche durch einen im Variablenfeld
 eindeutigen Namen identifiziert werden. Ein einzelnes Menü besteht wiederum aus einem Variablenfeld von
 Menüelementen. Ein Menüelement wird durch den Menüelementnamen, die Beschriftung und die URL beschrieben.
 Die Verknüpfung eines Menüelementes mit einem untergeordneten Menü erfolgt durch gleiche Namen (Menü-
 elementname gleich Menüname des Untermenüs).
 Mit dem Pfad in der Form '{[Menüname]/}..{[Menüelementname]}' werden die relativen URLs berechnet und zur
 Orientierung im Menü hervorgehoben. Um Wechsel in Bereiche zu ermöglichen, die nicht im Pfad liegen, kann
 der relative Pfad zur Bibliothek angegeben werden.
 Mit der Methode 'Inhaltsverzeichnis' kann das Inhaltsverzeichnis erzeugt werden. Dabei kann mit dem 
 Parameter 'AbMenue' der Name des Menüs, ab dem das Verzeichnis erstellt werden soll, angegeben werden.
 Somit können auch Inhaltsverzeichnisse eines Bereiches erzeugt werden.
 Benutzt die Formatvorlagendatei 'Menue.css'.

 Menüdeklarationen
 - [Menüs] = new Array()
   [Menüs]['[Menüname]'] = new Array({'[Menüelementname]¦[Beschriftung]¦[URL]',}..)

 Methoden
 - einbetten(in string Name, in string Pfad{, in string Bibliothek}): Menü einbetten
 - Inhaltsverzeichnis(in string Name, in string AbMenue{, in string Bibliothek}): Inhaltsverzeichnis erzeugen

 Mängel
 Navigator 4 unterstützt kein Hover

 Geschichte
 30.05.2000, MJung, Erstellung
 28.12.2001, MJung, Aktualisierung Internet Explorer 5 und 6, Navigator 4 und 6

 Copyright 2003 dezember und juli gmbh (Schweiz). Alle Rechte vorbehalten
*/


//Installieren

Menue = new MenueKlasse()


//Konstruktor

function MenueKlasse()
{

 //Methoden
 this.einbetten = MenueEinbetten
 this.Inhaltsverzeichnis = MenueInhaltsverzeichnis

 //Variablen
 this.Tiefe //Tiefe der hierarchischen Eingliederung
 this.Stufe //Stufe der rekursiven Einbettung
 this.AktuelleFormatvorlage

 //Private Methoden
 this.einbetten1 = MenueEinbetten1
 this.HoverEin = MenueHoverEin
 this.HoverAus = MenueHoverAus
 this.Inhaltsverzeichnis1 = MenueInhaltsverzeichnis1
}


//Einbetten

function MenueEinbetten(Name,Pfad,Bibliothek)
{

 this.Tiefe = Pfad.split('/').length - 1
 this.Stufe = 0
 document.write('<div class=Menue>')
 this.einbetten1(Name,Pfad,Bibliothek)
 document.write('</div>')
}

function MenueEinbetten1(Name,Pfad,Bibliothek)
{

 var Menue = eval(Name)
 var Stationen = Pfad.split('/')
 var Elemente,Identifikation,Klasse
 var i,j

 //Alle Menüelemente der ersten Station im Pfad abarbeiten
 for (i = 0; i < Menue[Stationen[0]].length; i = i + 1)
 {

  //Elemente bestimmen
  Elemente = Menue[Stationen[0]][i].split('¦')

  //URL anpassen
  for (j = 0; j < this.Tiefe-this.Stufe-1; j = j + 1)
   Elemente[2] = '../' + Elemente[2]
  if (Bibliothek != null) Elemente[2] = Bibliothek + Elemente[2]

  //Identifikation und Klasse bestimmen
  Identifikation = 'Menue' + Name + Elemente[0]
  Klasse = 'MenueElement'
  if (Elemente[0] == Stationen[1]) Klasse = Klasse + 'Hervorgehoben'

  //Menüelement einbetten
  document.write('<div id='+Identifikation+' class='+Klasse+'><a href='+Elemente[2]+' onMouseOver=Menue.HoverEin(\''+Identifikation+'\') onMouseOut=Menue.HoverAus(\''+Identifikation+'\')>'+Elemente[1]+'</a></div>')

  //Falls Untermenü vorhanden und nächste Station im Pfad, Untermenü einbetten
  if (Menue[Elemente[0]] != null && Elemente[0] == Stationen[1])
  {
   this.Stufe = this.Stufe + 1
   document.write('<div class=Menue'+this.Stufe+'>')
   this.einbetten1(Name,Pfad.substring(Pfad.indexOf('/')+1,Pfad.length))
   document.write('</div>')
   this.Stufe = this.Stufe - 1
  }
 }
}


//Hover ein

function MenueHoverEin(Identitikation)
{

 if (document.layers) return
 this.AktuelleFormatvorlage = document.getElementById(Identitikation).className
 document.getElementById(Identitikation).className = 'MenueElementHover'
}


//Hover aus

function MenueHoverAus(Identitikation)
{

 if (document.layers) return
 document.getElementById(Identitikation).className = this.AktuelleFormatvorlage
}


//Inhaltsverzeichnis erzeugen

function MenueInhaltsverzeichnis(Name,AbMenue,Bibliothek)
{

 this.Stufe = 0
 if (Bibliothek == null) Bibliothek = ''
 this.Inhaltsverzeichnis1(Name,AbMenue,'',Bibliothek)
}

function MenueInhaltsverzeichnis1(Name,AbMenue,Pfad,Bibliothek)
{

 var Menue = eval(Name)
 var Elemente
 var i,j

 //Alle Menüelemente ab dem angegebenen Untermenue abarbeiten
 for (i = 0; i < Menue[AbMenue].length; i = i + 1)
 {

  //Elemente bestimmen
  Elemente = Menue[AbMenue][i].split('¦')

  //Verzeichniseintrag für Menüelement erzeugen
  document.write('<div class=MenueInhaltsverzeichnis'+this.Stufe+'><a href="'+Bibliothek+Pfad+Elemente[2]+'">'+Elemente[1]+'</a></div>')

  //Falls Untermenü vorhanden, Verzeichniseinträge für Untermenü erzeugen
  if (Menue[Elemente[0]] != null)
  {
   this.Stufe = this.Stufe + 1
   if (Elemente[2].indexOf('/') == -1)
    this.Inhaltsverzeichnis1(Name,Elemente[0],Pfad+Elemente[2]+'/',Bibliothek)
   else
    this.Inhaltsverzeichnis1(Name,Elemente[0],Pfad+Elemente[2].substring(0,Elemente[2].indexOf('/'))+'/',Bibliothek)
   this.Stufe = this.Stufe - 1
  }
 }
}

