// *************************************************************
// klappmenu
//
// Dieses JavaScript formatiert Menü-Einträge als Klappmenu
// und steuert auch ihr Verhalten.
// Es kann frei verwendet und auch weiter verbreitet werden
// (aber seid so fair, mich als Urheber nicht zu verleugnen)
// Andreas Fischer / info@homepapa.ch
//
// Funktionsweise:
//
// Nötig sind
//
// 1. CSS Definitionen:
//
//    A) Für das ganze Menu, z.B.
//
//       #klappmenu { position: relative }
//       #klappmenu a { display: block }
//
//       Die Id (im Beispiel "klappmenu") kann frei gewählt werden.
//       Die angegebenen Style Properties sind das Minimum, weitere wie z.B. Hintergrundsfarben
//       etc. sind natürlich auch möglich. Bei Bedarf geht natürlich auch absolute Positionierung.
//
//    B) für jede Menüstufe, z.B. 
//
//       .menu1 { width: 120px; height: 24px; border: 1px solid black; margin: 0px 0px 0px 0px   }
//       .menu2 { width: 200px; height: 24px; border: 1px solid black; margin: 0px 0px 0px 121px }
//       .menu3 { width: 300px; height: 24px; border: 1px solid black; margin: 0px 0px 0px 322px }
//
//       Der generische Class-Name (im Beispiel "menu") kann frei gewählt werden.
//       Mit den Style Properties können die Menü-Einträge ziemlich frei gestaltet werden.
//       Die einzige Einschränkung ist zur Zeit die, dass der Menü-Text in den mit width und height
//       gemachten Ausmassen Platz haben sollte.
//       Die Einrückung der Menüstufen von links nach rechts wird über den letzten Margin-Wert gesteuert.
//
//       Ein zweiter solcher Set von Menü-Classes kann definiert werden, um die Menü-Einträge
//       anlässlich MouseOver anders darzustellen.
//
// 2. HTML-Text:
//
//    A) Das Menü
//
//       Das Menü sieht etwa so aus:
//
//       <div id="klappmenu">
//       <p class="menu1">Text</p>
//       <a class="menu2" href="m1.html">Link1</a> 
//       <a class="menu2" href="m2.html">Link2</a>
//       <a class="menu1">Text 2</a>
//       ...
//       </div>
//
//       Dank den Style-Definitionen erscheint jeder Link auf einer eigenen Zeile und ist
//       entsprechend seiner Class eingerückt. Ohne Einsatz dieses JavaScripts ist das Menü
//       vielleicht etwas umfangreich, aber voll funktionsfähig, sauber strukturiert und auch
//       von Robotern interpretierbar (Suchmaschinen etc).
//       Ob für Struktureinträge (die selber keine Links sind) <p> oder <a> verwendet wird,
//       ist letztlich egal. Die Darstellung von <a>-Elementen ohne href wird von den Browsern
//       nicht einheitlich gehandhabt und die Stylesheet-Spezifikationen kommen daher auch nicht
//       immer voll zum Zuge. Es empfiehlt sich, anstelle der Hover-Angaben für Links eine
//       zweite Class zu definieren.
//
//    B) Initialisierung
//       An geeigneter Stelle (z.B. OnLoad) sollte dieses JavaScript aufgerufen werden, z.B so:
//
//       <body onload="klappmenu('klappmenu','menu','pfeil.gif')">
//
//       Dabei ist
//       'klappmenu'  die Id der Menu-DIV          (vgl 1.A)
//       'menu'       der generische Class-Name    (vgl 1.B)
//                    Hier könnten auch zwei Namen angegeben werden, z.B. "menu1,menu2"
//                    Der erste gilt für den Normalfall, der zweite für Einträge, die
//                    aktiv sind (Maus drüber oder Teil des aktuellen Pfades)
//       'pfeil.gif'  die Referenz auf einen Fortsetzungspfeil. Dieser wird rechts in einem
//                    Menüeintrag eingeblendet, wenn der Eintrag weitere Unter-Einträge hat.
//                    Dieses Argument kann auch leer sein ('')

//       ich mach das hier so:
//       wenn das nicht durch die "seite_wird_updated"-Variable verhindert wird,
//       rufen wir ON LOAD die Funktion klappmenu_start() auf, die die Initialisierung erledigt.
var seite_wird_updated ;

//
// 3. Hintergrund:
//
// Bei der Initialisierung liest das JavaScript das ganze Menü durch und verändert an jedem
// Menü-Eintrag dreierlei:
// - die vertikale Position wird neu berechnet
// - die Anzeige untergeordneter Menü-Einträge wird unterdrückt
// - der Eintrag erhält einen Event-Handler zugewiesen, der bei MouseOver und MouseOut die neuen
//   Anzeigeverhältnisse herstellt.
//
// Bonus-Track:
// Mit dem Aufruf "klappswitch('xxx')" kann das Menü sein Aussehen schlagartig ändern,
// wenn mit dem generischen Namen 'xxx' (also z.B. als stufe1, stufe2 etc) ein weiteres
// Set von CSS-Classen bereit steht. Dasselbe Menü kann so auf verschiedene Arten
// dargestellt werden.
// Auch hier können zwei Sets von Klassen angegeben werden, einer für den Normalfall und
// einer für aktive Menü-Einträge.
//
// 4. Juni 2004 - Andreas Fischer
// ********************************************************************************************


// ********************************************************************************************
// einige global verfügbare Variablen
//
var lvl      = new Array() ;                    // assoziative Arrays, aus denen für den Eintrag
var vpos     = new Array() ;                    // "n.n.n." der Level und die vertikale Position
var mhoehe   = new Array() ;                    // errechnete Höhe jedes Menü-Eintrags
                                                // ersichtlich sind.
var mpfad    = new Array(0,0,0,0,0,0,0,0,0,0) ; // wird beim Aufbau der Pfad-Nummerierung gebraucht
var genam1   = "" ;                             // hält den generischen Class-Namen zur Verfügung
var genam2   = "" ;                             // dasselbe für den aktivierten Status (Mouseover)
var mename   = "" ;                             // hält den Namen der MenüDiv zur Verfügung
var idsep    = "-" ;                            // Separatorzeichen für die Id (z.B. 1-, 1-1-, 1-2-1-)
var offpend  = false ;                          // Zwei Variablen zum Handling des Ausblendens
var pendent  = null ;                           // wenn der Mauspfeil wegbewegt wird

var vkorr    = new Array(0,0,0,10,17) ;         // vertikale Korrektur für die Menülevels
var bkorr    = new Array() ;                    // Breite-Korrekturen

var debug = (window.location.search.indexOf("debug") > 0) ;

// ********************************************************************************************


function klappmenu(mname,gname,higrubi,hoehe) {

  // für den Aufruf dieser Funktion geben wir folgende Argumente an:
  // - die Id des ganzen Menus
  // - den generischen Class-Namen der Menü-Einträge, also z.B. "stufe" für "stufe1", "stufe2" u.s.w.
  //   Hier können - getrennt mit Kommas - auch zwei Klassen angegeben werden. Dann wird die zweite
  //   Klasse bei MouseOver verwendet, und so lange das Item Teil des aktiven Menus ist.
  // - die zu verwendende "src"-Angabe für den Fortsetzungspfeil
  // - eine oder mehrere Menü-Höhen

  // Zuerst übernehmen wir aus den Argumenten, was so anfällt:
  var kpos = gname.indexOf(',') ;                               // Komma-Position bestimmen
  if(kpos > 0) {                                                // wenn's eines hat,
    genam1 = gname.substr(0,kpos) ;                             // bewahren wir die beiden Klassen
    genam2 = gname.substr(++kpos) ;                             // getrennt auf,
  }																// im andern Fall
  else genam1 = gname ;                                         // halt eben nur die erste.
  mename = mname ;                                              // den brauchen wir andernorts wieder


  // finden wir uns in diesem Menü?
  are_we = "" ;
  we_are = location.href.substr(location.href.lastIndexOf("/")+1) ;

  // Nun positionieren wir uns auf das Menü.
  var ganzesmenu = document.getElementById(mename) ;
  // Das haben wir gefunden.
  /* Wir gehen nun alle Links durch und bestimmen ihre vertikalen Positionen.                                         */
  /* Daraus können wir dann ihre jeweilige Höhe berechnen.                                                            */
  /* Natürlich interessieren uns nur Links, deren Name mit [gname] anfängt.                                           */
  aktv = absv(ganzesmenu) ;                                              /* Zu Beginn stehen wir auf Höhe 0           */
  prev_id = "" ;                                                         /* und kennen noch keine Vorgänger-Id.       */
  gnl = genam1.length ;                                                  /* Länge des generischen Namens              */

  for(i=0 ; i< ganzesmenu.childNodes.length ; i++) {                     /* alle Kinder (= Links) durchsuchen         */
    dieseskind = ganzesmenu.childNodes[i] ;                              /* nächsten Link aufsuchen                   */
    if(dieseskind.className) {                                           /* hat der überhaupt eine Class?             */
      if(dieseskind.className.substr(0,gnl) == genam1) {                 /* falls ja, ist es eine der unsrigen?       */
        dieserlevel = dieseskind.className.substr(gnl,1) ;               /* falls ja, enthält sie den Level.          */

        menupfad = "i" ;                                                 /* Wir setzen den Identifier zusammen:       */
        mpfad[dieserlevel]++ ;                                           /* auf unserer Stufe eins dazuzählen         */
        for(mi=1 ; mi <= 9 ; mi++) {                                     /* alle Stufen durchgehen                    */
          if(mi <= dieserlevel) menupfad += mpfad[mi] + idsep ;	         /* "unsere" zusammenhängen                   */
          else mpfad[mi] = 0 ;                                           /* die darüberliegenden auf 0 stellen        */
        }
        dieseskind.id = menupfad ;                                       /* unser Eintrag kriegt ne Id                */
        lvl[menupfad] = dieserlevel ;                                    /* und wir merken uns seinen Level           */
        dieseskind.style.display = "block" ;                             /* und wir stellen seine Anzeige sicher      */
        if(dieseskind.href.substr(dieseskind.href.lastIndexOf("/")+1) == we_are) {
          are_we = menupfad ;                                   	// und ob es das aktuelle ist.
        }
        if(debug) debug = confirm("wir verarbeiten Menu " + menupfad + "\n("
                                + dieseskind.firstChild.nodeValue + ")") ;
        vertikale_position = absv(dieseskind) ;                          /* wir ermitteln die aktuelle Position.      */
        if(prev_id != "") {                                              /* wenn wir nicht ganz am Anfang sind,       */
          mhoehe[prev_id] = vertikale_position - aktv ;                  /* können wir die Höhe des vorhergegangenen  */
                                                                         /* Elements berechnen und speichern.         */
          if(debug) debug = confirm("Nachdem wir nun auf der Position " + vertikale_position + " sind"
                                  + "\nund vorher auf der Position " + aktv + " waren,"
                                  + "\nhat das vorangegangene Element \"" + prev_id + "\""
                                  + "\noffensichtlich die Höhe " + mhoehe[prev_id] + "px.") ;
        }
        mhoehe[menupfad] = 0 ;                                           /* wird vom nächsten Element korrigiert      */
        prev_id = menupfad ;
        aktv = vertikale_position ;
      }
    }
  }
  /* So: Jetzt hat jedes Element eine eindeutige Id, die auch die Menüstruktur widerspiegelt.                         */
  /* Ausserdem ist in jedem Element (ausser im allerletzten) auch noch die Höhe des Elements gespeichert,             */
  /* was wir im Folgenden für die Neuberechnung der Positionen brauchen.                                              */
  /* Wir starten nun zum zweiten Loop: Diesmal geht's nicht ums Berechnen, sondern ums Positionieren.                 */

  debug = (window.location.search.indexOf("debug") > 0) ;

  ganzesmenu = document.getElementById(mename) ;                         /* wieder von vorn anfangen                  */
  vorherlevel = 0 ;                                                      /* jetzt machen wir Level-Vergleiche         */
  for(i=0 ; i< ganzesmenu.childNodes.length ; i++) {                     /* alle Kinder (= Links) durchsuchen         */
    dieseskind = ganzesmenu.childNodes[i] ;                              /* nächsten Link aufsuchen                   */
    if(dieseskind.className) {                                           /* hat der überhaupt eine Class?             */
      if(dieseskind.className.substr(0,gnl) == genam1) {                 /* falls ja, ist es eine der unsrigen?       */
        dieserlevel = dieseskind.className.substr(gnl,1) ;               /* falls ja, enthält sie den Level.          */
        menupfad = dieseskind.id ;                                       /* die haben wir ja oben zusammengestellt    */
        if(debug) debug = confirm("Wir positionieren das Menü " + menupfad) ;

        // Falls dieses Item jemals erscheint - wo wird es dann angezeigt?
        // Nun, das hängt von seinem Level ab:
        // - hat es einen höheren Level als das vorangegangene Item, dann ist es das erste in
        //   einem neuen Unterlevel und hat daher die selbe Höhe (steht einfach weiter rechts).
        //   Wobei wir allerdings beim allerersten Item eine Sonderbehandlung machen müssen.
        // - andernfalls gehen wir vom letzten bekannten Item des selben Levels aus
        //   und positionieren das neue Item darunter.

        if(dieserlevel > vorherlevel) {                         	     /* neues Menu aufklappen                     */
          if(vorherlevel == 0) {                                	     /* das allererste Item!                      */
            vpos[menupfad] = 30 ;                                	     /* ... hat eine fixe Position                */
          }
          else {
            /* Wir haben einen neuen Unterlevel aufgeklappt.                                                          */
            /* Dessen erstes Menu erscheint auf der selben Höhe wie das übergeordnete Menü.                           */
            uebergeordnet = " " + menupfad.substr(0,menupfad.length-1) ;			/* bis zum vorletzten             */
            uebergeordnet = menupfad.substr(0,uebergeordnet.lastIndexOf(idsep)) ;	/* Separator                      */
            vpos[menupfad] = vpos[uebergeordnet] + vkorr[dieserlevel] ;
            if(debug) debug = confirm(menupfad + " ist ein neuer Unterlevel zu " + uebergeordnet
                                   + " und erhält dessen vertikale Position " + vpos[menupfad]) ;
          }
        }
        else {
          // wir bleiben im selben Menu oder gehen sogar einen Level zurück.
            /* wir bleiben im selben Level. Für die vertikale Position suchen wir zunächst das vorhergehende Element  */
            /* dieses Levels: die letzte Zahl im Index um eins reduzieren                                             */
            workpath = menupfad.substr(0,menupfad.length-1) ;			/* Pfad ohne den "dangling" Separator         */
            ppos = workpath.lastIndexOf(idsep) ;                        /* Position des letzten Separators            */
            if(ppos < 0) {                                              /* es hat gar keinen mehr ...                 */
              workpath = parseInt(workpath.substr(1)) ;                 /* -> dann sind wir im Toplevel               */
              workpath = "i" + --workpath + idsep ;                     /*    und können den Vorgänger konstruieren   */
            }
            else {                                                      /* Wenn wir aber einen qualifizierten haben,  */
              vorh = workpath.substr(ppos+1) ;                          /* -> dann nehmen wir den letzten Qualifier,  */
              vorh-- ;                                                  /*    reduzieren ihn um eins                  */
              workpath = workpath.substr(0,ppos)+idsep+vorh+idsep ;     /*    und konstruieren die Id so              */
            }
          /* Na endlich. Workpath enthält nun die Id, auf die wir uns beziehen, um unseren Menüteil zu positionieren. */
          vpos[menupfad] = vpos[workpath] + mhoehe[workpath] - 2 ;      /* und das ist dann letztlich ganz einfach.   */
          if(debug) debug = confirm("Pos. " + vpos[workpath] + ": " + workpath + " - " + document.getElementById(workpath).firstChild.nodeValue + "\n"
                                  + "Höhe: " + mhoehe[workpath] + "\n"
                                  + "Pos. " + vpos[menupfad] + ": " + menupfad + " - " + document.getElementById(menupfad).firstChild.nodeValue) ;
        }

        // Breitenkorrektur:
        // Grundsätzlich gibt das Stylesheet die Breite vor.
        // Aber der dritte Level kann im Abschnitt 2 schmal und im Abschnitt 3 breit sein.
        // Wir sehen daher nach, ob für den übergeordneten Level eine Korrekturbreite besteht.
        ueber_level = dieseskind.id.substr(0,dieseskind.id.lastIndexOf(idsep)) ;
        ueber_level = ueber_level.substr(0,ueber_level.lastIndexOf(idsep)) ;
        if(bkorr[ueber_level]) {
          dieseskind.style.width = bkorr[ueber_level] + "px" ;
        }
        // sollen wir das ganze nun anzeigen oder nicht?
        if(dieserlevel > 1) {														// falls der grösser als 1 ist
          dieseskind.style.display = "none" ;										// wird der Menüpunkt ausgeblendet
        }

        // gibt's von hier aus noch Untermenus?
        weiche = false ;
        if(dieseskind.tagName == "P") weiche = true ;								// <p> macht nur bei Weichen Sinn
        else {
          if(dieseskind.tagName == "A") {											// <a> kann auch ne Weiche sein,
            if(dieseskind.href == "") weiche = true ;								// wenn's selber nirgendwohin führt.
          }
        }
        if(weiche == true && higrubi != "" && dieserlevel > 1) {
          dieseskind.style.backgroundImage = "url(" + higrubi + ")" ;
          dieseskind.style.backgroundPosition = "right center" ;
          dieseskind.style.backgroundRepeat = "no-repeat" ;
        }

        // Der Event-Handler:
        // Wir installieren ihn auch für normale Links, da er auch fürs Ausblenden von
        // Stufen zuständig ist, die "von früher her" weiter rechts noch sichtbar sein könnten
        dieseskind.onmouseover = klappon ;
        dieseskind.onmouseout  = klappoff ;

        // Letzte Massnahmen
        dieseskind.style.position = "absolute" ;                // damit wir positionieren können
        dieseskind.style.top = vpos[menupfad] + "px" ;          // damit klar ist, wo
        if(mhoehe[menupfad] > 0) dieseskind.style.height = mhoehe[menupfad] + "px" ;
        dieseskind.style.zIndex = dieserlevel ;                 // Überlappungen müssen korrekt sein

        vorherlevel = dieserlevel ;                             // für den nächsten Durchgang
      }
    }
  }
  
  if(are_we != "") {
    bc_t = "" ;                                                 // breadcrumb Text
    bc_i = "" ;                                                 // breadcrumb Ids
    bc_a = are_we.split("-") ;                                  // breadcrumb Array
    for(i=0 ; i<bc_a.length-1 ; i++) {
      bc_i += bc_a[i] + "-" ;                                   // kumulative Id bauen
      bc_t += " " + String.fromCharCode(187) + " " + document.getElementById(bc_i).firstChild.nodeValue ;
    }
    document.getElementById("bct").firstChild.nodeValue = bc_t ;
  }
}



function klappon(mew) {
  // Diese Funktion wird aufgerufen, wenn wir ein Menü-Item betreten (mouseOver).
  // Sie ist für das Ein- und Ausklappen der Menüfunktionen zuständig.
  // Wie aber finden wir heraus, welche Menüzeile wir betreten haben?
  // Der Event-Handler liefert uns das richtige Objekt (Browserspezifisch)
  // und das haben wir dann als wodenn zur Verfügung.
  if(mew) { 
    // alert("target") ; 
    var wodenn = mew.target ;
  }
  else    var wodenn = window.event.srcElement ;
  // Sollte ein genereller Löschauftrag (von klappoff) bestehen,
  // dann widerrufen wir den hiermit.
  if(offpend == true) {
    window.clearTimeout(pendent) ;								// fagott it
  }
  offpend = false ;												// nix mehr zu löschen

  // Das aktuelle Menü wird ja schon angezeigt (sonst wäre der mouseOver ja gar nicht möglich gewesen).
  // Wenn eine alternativ-Class angegeben worden ist, müssten wir diese nun zur Geltung bringen.
  gnl1 = genam1.length ;
  gnl2 = genam2.length ;
  if(genam2 != "") {
      if(wodenn.className.substr(0,gnl2) != genam2) {
      wodenn.className = genam2 + wodenn.className.substr(gnl1,1) ;
    }
  }

  // Was müssen wir nun anzeigen? z.B. für "i1-2-2-"
  // - auf Level 1: alle
  // - auf Level 2: alle, die mit "i1-" anfangen.
  // - auf Level 3: alle, die mit "i1-2-" anfangen.
  // - auf Level 4: alle, die mit "i1-2-2-" anfangen.
  // - noch höhere Level ausblenden.

  ganzesmenu = document.getElementById(mename) ;
  for(i=0 ; i< ganzesmenu.childNodes.length ; i++) {            // alle Kinder durchsuchen
    dieseskind = ganzesmenu.childNodes[i] ;                     // nächstes Kind aufsuchen
    if(dieseskind.className) {                                  // hat's überhaupt eine Class?
      dieserlevel = 0 ;                                         // falls ja, interessiert es uns natürlich.
      if(dieseskind.className.substr(0,gnl1) == genam1) {       // gehört es zu unserer Class?
        dieserlevel = dieseskind.className.substr(gnl1,1) ;	    // falls ja, enthält sie den Level
      }
      else {                                                    // falls nein,
        if(gnl2 > 0) {                                          // haben wir vielleicht noch eine zweite
          if(dieseskind.className.substr(0,gnl2) == genam2) {   // Class, der es angehören könnte,
            dieserlevel = dieseskind.className.substr(gnl2,1) ;	// und die ebenfalls den Level enthält.
          }
        }
      }
      if(dieserlevel > 0) {                                     // Wenn wir einen Level haben, fahren wir fort.
        if(gnl2 > 0) {                                          // Wenn wir mit mehreren Classen operieren
          if(dieseskind.id == wodenn.id.substr(0,dieseskind.id.length)) {
            dieseskind.className = genam2 + dieserlevel ;
          }
          else {
            dieseskind.className = genam1 + dieserlevel ;
          }
        }
        if(dieserlevel > 1) {                                   // für Level 1 tun wir eh nix
          targlvl = lvl[wodenn.id] ;
          targlvl++ ;
          if(dieserlevel > targlvl) {                           // und zu hohe Levels...
            dieseskind.style.display = "none" ;                 // blenden wir eh aus.
          }
          else {                                                // alle andern Menüzeilen müssen
            inx = 0 ;                                           // mit unserem Pfad übereinstimmen
            for(ix=1 ; ix<dieserlevel ; ix++) {                 // (z.B. "i1-2-" kann angezeigt
              inx = wodenn.id.indexOf('-',inx) + 1 ;            // werden, wenn wir "i1-2-2-" sind.
            }
            targpath = wodenn.id.substr(0,inx) ;                // so weit muss es übereinstimmen
            if(dieseskind.id.substr(0,targpath.length) == targpath) {
              dieseskind.style.display = "block" ;
            }
            else dieseskind.style.display = "none" ;
          }
        }
      }
    }
  }
}


function klappoff() {
  // Wenn wir die Menü-DIV verlassen, dann sollte das Menü zusammenklappen.
  // Dummerweise wird das Betreten einer Menüzeile auch als Verlassen der DIV aufgefasst.
  // Darum löschen wir hier nicht sofort, sondern geben nur einen Löschauftrag mit zeitlicher
  // Verzögerung. Der wird aber beim Betreten eines Menüs sofort widerrufen.

  if(offpend == true) {                                 // das wurde schonmal verlangt
    window.clearTimeout(pendent) ;                      // fagott it
  }
  pendent = window.setTimeout("klappoffoff()",500) ;		// in einer halben Sekunde löschen
  offpend = true ;                                      // ... ist bestellt
}


function klappoffoff() {
  // Hier wird nun tatsächlich alles eingeklappt.
  // So weit kommt's nur, wenn der Menü-Bereich verlassen wird und innerhalb
  // einer halben Sekunde kein neues Menü betreten wird.

  if(offpend == false) return ;                                 // der Auftrag wurde widerrufen.

  ganzesmenu = document.getElementById(mename) ;
  gnl1 = genam1.length ;
  gnl2 = genam2.length ;
  for(i=0 ; i< ganzesmenu.childNodes.length ; i++) {            // alle Kinder durchsuchen
    dieseskind = ganzesmenu.childNodes[i] ;                     // nächstes Kind aufsuchen
    if(dieseskind.className) {                                  // hat's überhaupt eine Class?
      dieserlevel = 0 ;                                         // ja, das sehen wir uns näher an.
      if(dieseskind.className.substr(0,gnl1) == genam1) {       // falls ja, ist es eine der unsrigen?
        dieserlevel = dieseskind.className.substr(gnl1,1) ;     // falls ja, enthält sie den Level
      }
      if(dieseskind.className.substr(0,gnl2) == genam2 && gnl2 > 0) {
        dieserlevel = dieseskind.className.substr(gnl2,1) ;
        dieseskind.className = genam1 + dieserlevel ;
      }

      if(dieserlevel > 1) dieseskind.style.display = "none" ;   // alles oberhalb Level 1 ausblenden
    }
  }
}


function klappswitch(tostil) {
  // Hier kann der ganze Menustil gewendet werden, indem einfach die Generic
  // Class ausgetauscht wird.

  kpos = tostil.indexOf(',') ;								// hat man da zwei Klassen angegeben?
  if(kpos > 0) {
    tostil1 = tostil.substr(0,kpos) ;
    tostil2 = tostil.substr(++kpos) ;
  }
  else {
    tostil1 = tostil ;
    tostil2 = "" ;
  }

  ganzesmenu = document.getElementById(mename) ;
  gnl1 = genam1.length ;
  gnl2 = genam2.length ;
  for(i=0 ; i< ganzesmenu.childNodes.length ; i++) {		// alle Kinder durchsuchen
    dieseskind = ganzesmenu.childNodes[i] ;					// nächstes Kind aufsuchen
    if(dieseskind.className) {								// hat's überhaupt eine Class?
      if(dieseskind.className.substr(0,gnl1) == genam1) {	// ersetze genam1 durch tostil1
        dieseskind.className = tostil1 + dieseskind.className.substr(gnl1,1) ;
      }
      else {
        if(gnl2 > 0) {										// ersetze genam2 durch tostil1 (!)
          if(dieseskind.className.substr(0,gnl2) == genam2) {
            dieseskind.className = tostil1 + dieseskind.className.substr(gnl2,1) ;
          }
        }
      }
    }
  }
  genam1 = tostil1 ;
  genam2 = tostil2 ;
}

// =================
// Klappmenu starten
// =================
function klappmenu_start() {
  klappmenu('klappmenu','levl,leva','infra/rarrow.gif',25,25) ;
}

if(seite_wird_updated) {
  if(seite_wird_updated != true) {
    window.onload = klappmenu_start ;
  }
}
else {
  window.onload = klappmenu_start ;
}

function absv(elem) {
 var destx = elem.offsetLeft;  
 var desty = elem.offsetTop;
 var thisNode = elem;
 if(debug) protokoll = "Vertikale Position von \"" + elem.id + "\": offsetTop ist " + desty ;
 while (thisNode.offsetParent &&  
       (thisNode.offsetParent != document.body)) {
   thisNode = thisNode.offsetParent;
   destx += thisNode.offsetLeft;
   desty += thisNode.offsetTop;
   if(debug) protokoll += "\ndazu vom Parent: " + thisNode.offsetTop ;
 }
 if(debug) alert(protokoll + "\nErmittelte Position: " + desty) ;
 return desty ;
}

