var debug = false ;
//  var debug = (window.location.search.indexOf("debug") > 0) ;
  var trace = new Array() ;

  function relpath(mziel) {
    var bsb_root = "/" ;
	var wohin = bsb_root + mziel ;
	if(mziel.substr(0,1) == "/") wohin = mziel ;
    var ziel  = wohin.split("/") ;
	var hier  = location.pathname.split("/") ;
    var weg   = "" ;
    var i, j ;
	if(debug) alert("wir wollen von\n" + location.pathname + " (" + hier.length + " Stufen) nach\n"
	               + wohin + " (" + ziel.length + " Stufen)") ;
    for(i=0 ; i<ziel.length ; i++) {
    if(ziel[i] != hier[i]) {     // achtung: von hier an unterscheiden sich die beiden Pfade
      if(debug) alert("Wir vergleichen " + ziel[i] + " mit " + hier[i] + " und kriegen ungleich.") ;
      if(weg == "") {
        for(j = i ; j<hier.length-1 ; j++) {
          if(debug) alert("Für den indexteil " + hier[j] + " geben wir ../ dazu.") ;
          weg += "../" ;
        }
      }
      weg += ziel[i] + "/" ;
      if(debug) alert("Wir fügen " + ziel[i] + " an und erhalten " + weg + ".")  ;
    }
  }
  return weg.substr(0,weg.length-1) ;
}


// -----------
  var MP         = new Array() ;          // Menüpunkte
// -----------

  var knoz_src   = new Array() ;          // src für die expand/collapse symbole
      knoz_src["sb1"]    = new Array() ;          // für diejenigen des Bereiches 1
      knoz_src["sb1"][0] = relpath("/infra/graphics/sb_st1_ac.gif") ;
      knoz_src["sb1"][1] = relpath("/infra/graphics/sb_st1_in.gif") ;
      knoz_src["sc1"]    = new Array() ;          // für diejenigen des Bereiches 1
      knoz_src["sc1"][0] = relpath("/infra/graphics/offen_1.gif") ;
      knoz_src["sc1"][1] = relpath("/infra/graphics/oeffnen_1.gif") ;
      knoz_src["sc2"]    = new Array() ;          // für diejenigen des Bereiches 1
      knoz_src["sc2"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["sc2"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["sc3"]    = new Array() ;          // für diejenigen des Bereiches 1
      knoz_src["sc3"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["sc3"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["re1"]    = new Array() ;          // für diejenigen des Bereiches 1
      knoz_src["re1"][0] = relpath("/infra/graphics/offen_1.gif") ;
      knoz_src["re1"][1] = relpath("/infra/graphics/oeffnen_1.gif") ;
      knoz_src["re2"]    = new Array() ;          // für diejenigen des Bereiches 1
      knoz_src["re2"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["re2"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["te1"]    = new Array() ;          // für diejenigen des Bereiches 2
      knoz_src["te1"][0] = relpath("/infra/graphics/offen_1.gif") ;
      knoz_src["te1"][1] = relpath("/infra/graphics/oeffnen_1.gif") ;
      knoz_src["te2"]    = new Array() ;          // für diejenigen des Bereiches 2
      knoz_src["te2"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["te2"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["wi1"]    = new Array() ;          // für diejenigen des Bereiches 2
      knoz_src["wi1"][0] = relpath("/infra/graphics/offen_1.gif") ;
      knoz_src["wi1"][1] = relpath("/infra/graphics/oeffnen_1.gif") ;
      knoz_src["wi2"]    = new Array() ;          // für diejenigen des Bereiches 2
      knoz_src["wi2"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["wi2"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["ed1"]    = new Array() ;          // für diejenigen des Bereiches 4
      knoz_src["ed1"][0] = relpath("/infra/graphics/offen_1.gif") ;
      knoz_src["ed1"][1] = relpath("/infra/graphics/oeffnen_1.gif") ;
      knoz_src["ed2"]    = new Array() ;          // für diejenigen des Bereiches 4
      knoz_src["ed2"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["ed2"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["ed3"]    = new Array() ;          // für diejenigen des Bereiches 4
      knoz_src["ed3"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["ed3"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["ed4"]    = new Array() ;          // für diejenigen des Bereiches 4
      knoz_src["ed4"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["ed4"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["in1"]    = new Array() ;          // für diejenigen des Bereiches 4
      knoz_src["in1"][0] = relpath("/infra/graphics/offen_1.gif") ;
      knoz_src["in1"][1] = relpath("/infra/graphics/oeffnen_1.gif") ;
      knoz_src["in2"]    = new Array() ;          // für diejenigen des Bereiches 4
      knoz_src["in2"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["in2"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
      knoz_src["in3"]    = new Array() ;          // für diejenigen des Bereiches 4
      knoz_src["in3"][0] = relpath("/infra/graphics/offen_2.gif") ;
      knoz_src["in3"][1] = relpath("/infra/graphics/oeffnen_2.gif") ;
	  
	  
  var wo_sind_wir = location.href.substr(location.href.lastIndexOf("/")+1) ;
  if(wo_sind_wir.substr(wo_sind_wir.length-1) == "&") wo_sind_wir = wo_sind_wir.substr(0,wo_sind_wir.length-1) ;

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

function los_gehts() {
  // Diese Funktion ruft die Menü-Initialisierung auf.
  // Dieser "indirekte" Weg kommt hier zum Zug,
  // weil ich dem Event-Handler keine Argumente
  // übergeben kann.
  // los_geht's macht folgendes:
  // 1. "klappasif"   Das Menü soll aufgeKLAPPt werden,
  //                  AS IF - wie wenn man an einer ganz
  //                  bestimmten Stelle wäre.
  //                  Es reicht dazu, im Dokument eine
  //                  <div id="klappasif"> zu hinterlegen,
  //                  die die zu referenzierende Adresse
  //                  enthält.
  // 2. menu_init     Hier wird das ganze Klappmenü
  //                  gebaut und geöffnet
  // 3. cursinit      Wenn eine Seite die JS-Variable
  //                  cursinit mit dem Inhalt
  //                  "formularname.feldname" definiert
  //                  hat, wird der Cursor entsprechend 
  //                  positioniert.
  if(document.getElementById("klappasif")) {
    if(debug) {
	  while(confirm("Wir haben eine Fake-Adresse erhalten: " + document.getElementById("klappasif").firstChild.nodeValue)) ;
	  {}
	}
	wo_sind_wir = location.protocol + "//" + location.host + "/" + relpath(document.getElementById("klappasif").firstChild.nodeValue) ;
	wo_sind_wir = document.getElementById("klappasif").firstChild.nodeValue ;
	if(debug) alert("Wir tun so als wären wir an der Adresse\n" + wo_sind_wir) ;
  }
  menu_init(200,20) ;
  if(typeof cursinit != "undefined") {
    c = cursinit.split(".") ;
    cform = c.shift() ;
    cfeld = c.shift() ;
    document.forms[cform].elements[cfeld].focus() ;
  }
}

function menu_init(gesamtbreite,einrueck) {

  // Menü-Init macht's kurz:
  // Das Menü wird gesucht und durchgelesen.
  // Es entsteht der Array MP (MenüPunkte) mit Objekten des Typs MenuPunkt und folgenden Eigenschaften
  // typ       0 - normaler Hyperlink
  //           1 - Knoten, nicht initialisiert
  //           2 - Knoten, initialisiert
  // status    0 - unsichtbar
  //           1 - sichtbar, für Knoten: geschlossen
  //           2 - geöffneter Knoten
  // id        Id des Menüpunktes
  // level     Level des Menüpunktes

  // (Ein Knoten ist initialisiert, wenn der zugehörige Link zusammen mit einem
  // Expand/Collapse-Symbol in einer DIV steht)

  var i ;
  var levels = new Array(0,0,0,0,0,0,0,0,0,0) ;
  var akt_id = "1." ;
  if(wo_sind_wir.indexOf("debug") > 0) wo_sind_wir = wo_sind_wir.substr(0,wo_sind_wir.indexOf("debug")-1) ;

  // als erstes suchen wir nun mal das Menu.
  var klappmenu = document.getElementById("navigation") ;

  eintraege = 0 ;                                               // Nun verarbeiten wir die Menü-Einträge
  for(i=0 ; i<klappmenu.childNodes.length ; i++) {
    var dieser_node = klappmenu.childNodes[i] ;
    if(dieser_node.nodeType == 1) {                             // keine Textnodes, nur "wirkliche" Elemente
      if(dieser_node.tagName == "A") {                          // nur die Hyperlinks sind interessant
        menuclass = dieser_node.className ;
//        if((menuclass != "") && (menuclass.substr(6,2) != "in")) {                                   // und hier nur die mit einer Class
        if(menuclass != "") {                                   // und hier nur die mit einer Class

          // Das ist nun mal ein Eintrag. Seinen Level entnehmen wir seiner CSS-Class
          eintraege++ ;
          menulevel = menuclass.substr(5,1) ;
          // if(debug) alert("Der Hyperlink " + eintraege + " hat den Text\n" + dieser_node.firstChild.nodeValue
          //               + "\ndie MenuClass " + menuclass + " und den Level " + menulevel) ;
          // leftmarg = dieser_node.offsetLeft ;
          // neumarg = menulevel * einrueck ;
          // dieser_node.style.marginLeft = neumarg + "px" ;       // und weil wir die Einrückung neu berechnen,
          // neuwid = gesamtbreite - neumarg ;                     // verändert sich natürlich auch die Breite
          // dieser_node.style.width = neuwid + "px" ;
          meine_id = "" ;                                       // Wir konstruieren die Id
          for(lvl=1 ; lvl<9 ; lvl++) {                          //   Dazu gehen wir durch alle Levels
            if(lvl > menulevel) levels[lvl] = 0 ;               //   die überschüssigen setzen wir auf 0
            else {                                              //   die unteren verwenden wir.
              if(lvl == menulevel) {
                levels[lvl]++ ;                                 //   den aktuellen zählen wir hoch
              }
              meine_id += levels[lvl] + "." ;
            }
          }
          dieser_node.id = meine_id ;
          MP[eintraege] = new MenuPunkt() ;                     // by default: unsichtbarer Hyperlink
          MP[eintraege].id = meine_id ;
          MP[eintraege].level = menulevel ;
          // MP[eintraege].einrueck = menulevel * einrueck ;

          // if(debug) alert("Id: " + meine_id + ", Breite " + dieser_node.style.width ) ;
          if(menulevel == 1) dieser_node.style.display = "block" ;
if(debug) alert("Um herauszufinden, wo wir sind, vergleichen wir den aktuellen Platz\n" + wo_sind_wir + " mit der href im Menu:\n" + dieser_node.href) ;
//          if(dieser_node.href ==  location.protocol + "//" + location.host + "/" + wo_sind_wir) {
          if(dieser_node.href.substr(dieser_node.href.lastIndexOf("/")+1) == wo_sind_wir) {
            if(menulevel > 1) dieser_node.className = dieser_node.className + "a" ;
            if(debug) alert("Übrigens ist dies der aktuelle Knoten. Er hat also die Id " + meine_id) ;
            akt_id = meine_id ;
          }
        }
      }
    }
  }

  if(debug) {
    var punkte = MP.length - 1 ;
	alert("So, mit der ersten Lesung sind wir schon mal durch."
        + "\n" + punkte + " Menüpunkte haben wir bis hier gezählt."
		+ "\nDer aktuelle Menüpunkt (unsere Seite) ist " + akt_id) ;
  }

  // nun eruieren wir die Knotenpunkte.
  anzKnoten = 0 ;
  dieser_menupunkt = 0 ;
  for(i=1 ; i<MP.length ; i++) {
    if(i<MP.length-1) {                                         // der letzte Punkt KANN kein Knoten sein.
      if(MP[i+1].level > MP[i].level) {                         // wir befinden uns an einem Knotenpunkt
        anzKnoten++ ;
        if(MP[i].level == 1) MP[i].init() ;                     // Level-1-Knoten werden gleich mal initialisiert
        else {
          MP[i].typ    = 1 ;                                    // Knoten, nicht initialisiert
          MP[i].status = 1 ;                                    // und geschlossen
        }
      }
    }
    if(MP[i].id == akt_id) dieser_menupunkt = i ;               // wir merken uns den aktuellen
  }
  if(debug) alert("Unser Menü enthält " + anzKnoten + " Knotenpunkte, die zurzeit alle noch schlafen.") ;

  if(debug) alert("Aktuell sind wir im Menüpunkt " + MP[dieser_menupunkt].id) ;
  MP[dieser_menupunkt].oeffnen() ;
}


function expand_collapse(mew) {

  var i ;

  if(window.event) var wodenn = window.event.srcElement ;
  else var wodenn = mew.target ;
  // der Event stammt also vom Element wodenn.
  // Das kann der Link oder das Image davor sein
  
  if(wodenn.tagName == "A") knoten = wodenn.id ;
  else knoten = wodenn.id.substr(2) ;
  for(i=1 ; i<MP.length ; i++) {
    if(MP[i].id == knoten) {
      if(MP[i].status == 2) MP[i].schliessen() ;
      else MP[i].oeffnen() ;
      break ;
    }
  }
}


function ss_addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
 if (elm.addEventListener){
   elm.addEventListener(evType, fn, useCapture);
   return true;
 } else if (elm.attachEvent){
   var r = elm.attachEvent("on"+evType, fn);
   return r;
 }
}

function vpos(unserElement) {
  var desty = unserElement.offsetTop;
  var thisNode = unserElement;
  while (thisNode.offsetParent &&  
        (thisNode.offsetParent != document.body)) {
    thisNode = thisNode.offsetParent;
    desty += thisNode.offsetTop;
  }
  return desty ;
}

function reladdr(zieladresse) {
  var root  = "/" ;                             // zwecks Portabilität. In der Endfassung ""
  var ziel  = root + zieladresse ;                        // also z.B. "/homepage07/infra" statt "/infra"
  var von   = location.pathname.split("/") ;
  var nach  = ziel.split("/") ;
  var anz   = (von.length > nach.length) ? von.length : nach.length ;
  var linka = "" ;
  var i, j ;
  for(i=0 ; i<anz ; i++) {
    if(von[i] != nach[i]) {
      // hier trennen sich unsere Wege
      for(j=i ; j<von.length-1 ; j++) {
        linka += "../" ;
      }
      for(j=i ; j<nach.length ; j++) {
        linka += nach[j] ;
        if(j < nach.length-1) linka += "/" ;
      }
      break ;
    }
  }
  return linka ;
}

function MenuPunkt(einrueck) {
  // typ       0 - normaler Hyperlink
  //           1 - Knoten, nicht initialisiert
  //           2 - Knoten, initialisiert
  // status    0 - unsichtbar
  //           1 - sichtbar, für Knoten: geschlossen
  //           2 - geöffneter Knoten
  // id        Id des Menüpunktes
  // level     Level des Menüpunktes
  this.typ        = 0 ;
  this.status     = 0 ;
  this.id         = "" ;
  this.level      = 0 ;
  this.einrueck   = einrueck ;
  this.init       = MP_init ;
  this.oeffnen    = MP_auf ;
  this.schliessen = MP_zu ;
  this.anzeig     = MP_anzeig ;
}

function MP_init() {
  // wir sind ein Knotenpunkt, was bis jetzt aber niemand weiss.
  // wir müssen nun zusammen mit einem Expand/Collapse-Symbol
  // in eine DIV gestellt werden
  neues_element = document.createElement("DIV") ;
  neues_element.id = "nd" + this.id ;
  neues_element.style.position = "relative" ;
  // neues_element.style.height   = "20px" ;
  if(debug) neues_element.style.border = "1px red solid" ;
  document.getElementById(this.id).parentNode.insertBefore(neues_element,document.getElementById(this.id)) ;
  if(debug) alert("wir haben vor der Id " + this.id + " eine neue DIV eingefügt") ;

  // und jetzt, nachdem das neue Element da ist,
  // platzieren wir zwei Dinge da hinein:
  // 1. einen expand/collapse Button.
  var exp_col = document.createElement("IMG") ;         // Bild erstellen
  var sfu = document.getElementById(this.id).className.substr(6,2) + this.level ;
  if(debug) alert("wir verwenden die sfu " + sfu);
  exp_col.src = knoz_src[sfu][1] ;                      // mit src natürlich
  exp_col.width = "16" ;
  exp_col.height = "16" ;
  exp_col.style.display = "block" ;
  exp_col.style.position = "absolute" ;
  exp_col.style.top = "2px" ;                               // Positionierung
  newpos = (this.level-1)*20 ;
  if(newpos > 0) newpos -= 20 ;
  exp_col.style.left = newpos + "px" ;                  // Positionierung
  exp_col.id = "ec" + this.id ;                         // identifizierbar
  exp_col.style.zIndex = 10 ;
  ss_addEvent(exp_col, "click", expand_collapse) ;      // mit Event-Handler
  neues_element.appendChild(exp_col) ;
  if(debug) alert("Die neue DIV hat jetzt einen um " + newpos + "px eingerückten expand-Button - (ec" + this.id + ")") ;

  // 2. uns selber
  neues_element.appendChild(document.getElementById(this.id)) ;
  // wenn wir selber keine HREF haben,
  // dann sollten wir onclick gleich reagieren wie das IMG.
  if(document.getElementById(this.id).href == "") {
    if(debug) alert("wir versehen den Menupunkt " + this.id + " mit einem Eventhandler") ;
    ss_addEvent(document.getElementById(this.id), "click", expand_collapse) ;
  }
  if(debug) alert("... und wir selbst sind jetzt auch drin. Übrigens: unser Tag ist \"" + document.getElementById(this.id).tagName + "\" und unsere HREF \"" + document.getElementById(this.id).href + "\"") ;

  this.typ = 2 ;                                        // jetzt sind wir initialisiert
}

function MP_auf() {
  if(debug) alert("Wir sollen also den Knoten " + this.id + " öffnen.") ;
  // für unsere Id - z.B. "1.2.4" mit dem Level 3 bedeutet das:
  // 1. alle mit Id "1.*" und Level 2 öffnen,
  // 2. alle mit Id "1.2.*" und Level 3 öffnen,
  // 3. alle mit Id "1.2.4." und Level 4 öffnen,
  // u.s.w.
  var teil_id, teil_level, i, j, sfu ;
  for(i=1 ; i<=this.level ; i++) {
    teil_id = this.id.substr(0,i*2) ;
    teil_level = i+1 ;
    if(debug) alert("Wir öffnen alle, deren Id mit " + teil_id + " anfängt und die den Level " + teil_level + " haben.") ;
    for(j=1 ; j<=MP.length-1 ; j++) {
      if((MP[j].id.substr(0,i*2) == teil_id) && (MP[j].level == teil_level)) MP[j].anzeig() ;
    }
  }
  // sfu = this.id.substr(0,1) + this.level ;
  if(document.getElementById("ec" + this.id)) {
    sfu = document.getElementById(this.id).className.substr(6,2) + this.level ;
    document.getElementById("ec" + this.id).src = knoz_src[sfu][0] ;
  }
  this.status = 2 ;
}

function MP_anzeig() {
  if(debug) alert("Anzuzeigen ist also der Menüpunkt " + this.id) ;
  if(this.typ == 0) {             // normaler Hyperlink
    document.getElementById(this.id).style.display = "block" ;
  }
  else {
    if(this.typ == 1) {
      this.init() ;
      document.getElementById(this.id).style.display = "block" ;
    }
    document.getElementById("nd" + this.id).style.display = "block" ;
    if(debug) alert("Beim Punkt " + this.id + " handelt es sich um einen weiteren Knoten mit dem Status " + this.status + ".") ;
  }
}

function MP_zu() {
  if(debug) alert("Wir sollen also den Knoten " + this.id + " schliessen.") ;
  // für unsere Id - z.B. "1.2.4" mit dem Level 3 bedeutet das:
  // 3. alle mit Id "1.2.4.**" und Level >3 schliessen,

  var i,j,sfu ;

  for(i=1 ; i<=this.level ; i++) {
    if(debug) alert("Wir schliessen alle, deren Id mit " + this.id + " anfängt und die den Level > " + this.level + " haben.") ;
    for(j=1 ; j<=MP.length-1 ; j++) {
      if((MP[j].id.substr(0,this.id.length) == this.id) && (MP[j].level > this.level)) {
        if(MP[j].typ == 0) document.getElementById(MP[j].id).style.display = "none" ;
        else {
		  trace[0] = "schliessen Menupunkt " + j + " (" + MP[j].id + ", Status " + MP[j].status + ")" ;
          if(MP[j].status == 2) MP[j].schliessen() ;
          if(document.getElementById("nd" + MP[j].id)) document.getElementById("nd" + MP[j].id).style.display = "none" ;
        }
      }
    }
  }
  sfu = document.getElementById(this.id).className.substr(6,2) + this.level ;
  document.getElementById("ec" + this.id).src = knoz_src[sfu][1] ;
  this.status = 1 ;
  if(debug) alert("OK, der Knoten " + this.id + " ist geschlossen.") ;
}


window.onload = los_gehts ;


// ===================================
// Zeigebild für Fotogalerien
// ===================================
var fensterid = null;

function zeige_bild (bildurl, bildbreite, bildhoehe, bildname, bgoption)
{
  screenbreite = screen.width;
  screenhoehe = screen.height;

  bildbreite = bildbreite + 20;
  bildhoehe = bildhoehe + 25;

  if (fensterid)
  {
    fensterid.close ();
  }

  if (screenbreite<bildbreite || screenhoehe<bildhoehe)
  {
    fensterid = window.open ('about:blank', 'JoJoThumb', "dependent=yes,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,copyhistory=no,width=" + (screenbreite-100) + ",height=" + (screenhoehe -100) + ",left=0,top=0");
  }
  else
  {
    xoffset = (screenbreite - bildbreite) / 2;
    yoffset = (screenhoehe - bildhoehe) / 2;
    fensterid = window.open ('about:blank', 'JoJoThumb', "dependent=yes,toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=no,copyhistory=no,width=" + bildbreite + ",height=" + bildhoehe + "," + "left=" + xoffset + ",top=" + yoffset);
  }
 
  fensterid.document.open ();
  fensterid.document.write ('<html><head><title>' + bildname + '</title></head>');
  fensterid.document.write ('<body ' + bgoption + '><a href="javascript:self.close()"><div align="center"><img src="' + bildurl + '" style="border-style:none" alt="Zum Schließen bitte klicken"></div></a></body></html>');
  fensterid.document.close();

  fensterid.focus();
}
