// generelle Funktionalitaet:
// --------------------------
// fuer die Indikationen 1..n koennen jeweils mit & (ohne
// Space) getrennt sogenannte Anzeigebuchstaben angegeben werden.
// T bedeutet, dass der erklaerende Text angezeigt wird
// R bedeutet, dass das Rezept angezeigt wird.
// S bedeutet, dass die Subindikationen angezeigt werden.
// Besp fuer URL-Argument: ?1=TR&3=TS
// Fuer die erste Indikation werden Text und Rezept angezeigt, 
// fuer dritte Indikation wird nur Text angezeigt. Andere Indikationen
// werden nur genannt. (alles false)

// globale Variablen:
// ------------------

var Tree;        //enthaelt ganzen Baum
var noMinusNds;  //suppress minus nodes when true
var trennvektor; //zeigt an, ob fuehrender blauer Vertikalbalken oder nicht

var CookieArgs; //stores cookie strings for all pages
var PageNumber; //stores number of this pager
var CookiePage; //stores index of current page (-1 = N.A.)
var CookiePosi; //global position in cookie array during traversal
var Cookie="";  //Cookie for current page, created during traversal
var Scroll      //previous Position on this web page
var Histor      //Cookie der Vorgaengerseite
var learnedSomething;

// Dark Spring Green
var isoBlau  = '#339900'; // Rahmen

// Light Orange Yellow
var isoRosa  = '#FFCC66'; // Lexikon

var isoCreme = '#CCFF99'; // Pflanzen

// Pale Dull Spring
var isoGelb  = '#CCFF99'; // Indikationen

// Pale Weak Yellow
var isoRezept = '#FFFFCC';


var isoGruen = '#006600'; // Pflanzenschrift

// var treeColor; // = isoGruen;

var lex='';

// Kostante Werte fuer Anzeigesteurung
// -----------------------------------

var SpaltenZahl = 25;
var iconSize = 25;
var Indikationslaenge = 19;
var Boxlaenge = 19;
var indent = 0; // am Anfang

// Fuer Debug-Ausgabe
// ------------------------------------------------------------

var doc = document; // fuer Ausgabe entweder Debug oder Schirm
//var debug = new Object();
//debug.str = "";
//debug.nl = "\n";
//debug.ttb = "<pre>";
//debug.tte = "</pre>";
//debug.patb = /</g;
//debug.patbr = "[";
//debug.pate = />/g;
//debug.pater = "]";
//debug["write"] = new Function("string", 
//                              "this.str = this.str + string + this.nl;");
//debug.doit = new Function("document.write(this.str);");
//debug.show = new Function("this.str=this.str.replace(this.patb,this.patbr);"+
//                          "this.str=this.str.replace(this.pate,this.pater);"+ 
//                          "document.write(this.ttb);"+
//                          "document.write(this.str);"+
//                          "document.write(this.tte);");

// ------------------------------------------------------------

// globale Management-Funktionen:
// ------------------------------

// Initialisierung:
// Baumfarbe und Baumtiefe werden gesetzt
// muss als aller erstes aufgerufen werden

function init(tiefe) {
  trennvektor = new Array(tiefe); //maximale Tiefe
  for (var i = 0; i < tiefe; i++) {
    trennvektor[i] = false; // kein grauer Strich
  }
}

// Arbeit mit dem Cookie-String, der festlegt, welche Detail-
// informtionen des Baumes angezeigt werden.
// ----------------------------------------------------------------------

function getArgs() {
  var cake="";
  var Cookie = document.cookie;
  //alert("gelesen: "+Cookie);
  if (Cookie != "") {
    var pos = Cookie.indexOf("isocookie=");
    if (pos != -1) {
      var end = Cookie.length;
      cake = Cookie.substring(pos+10,end);
      end = cake.indexOf(';');
      if (end != -1) {
        cake = cake.substring(0,end);
      }
    }
    var pos = Cookie.indexOf("isoscroll=");
    Scroll = 0;
    if (pos != -1) {
      var end = Cookie.length;
      Scroll = Cookie.substring(pos+10,end);
      end = Scroll.indexOf(';');
      if (end != -1) {
        Scroll = Scroll.substring(0,end);
      }
    }
    //alert("Scroll: "+Scroll);
    var pos = Cookie.indexOf("isohistor=");
    Histor = "";
    if (pos != -1) {
      var end = Cookie.length;
      Histor = Cookie.substring(pos+10,end);
      end = Histor.indexOf(';');
      if (end != -1) {
        Histor = Histor.substring(0,end);
      }
    }
    //alert("Histor: "+Histor);
  }
  return cake;
}

function setArgs(loc,reld) {
  var Cookie="isocookie=";
  var insertAnd = false;
  //alert("intend to write my cookie: "+loc);
  if (CookiePage == -1) {
    //there was either no cookie or no entry for this page
    Cookie = Cookie+PageNumber+":"+loc;
    //alert("new page: "+Cookie);
    insertAnd = true;
  }
  //alert("length = "+CookieArgs.length);
  for (var i=0; i<CookieArgs.length;i++) {
    if (insertAnd)
      Cookie = Cookie+"&";
    if (i == CookiePage) {
      CookieArgs[i] = PageNumber+":"+loc;
      Cookie = Cookie+CookieArgs[i];
    } else {
      Cookie = Cookie+CookieArgs[i];
    }
    insertAnd = true;
  }
  //alert(Cookie);
  document.cookie = Cookie;
  document.cookie = "isoscroll="+myOffset();
  //alert("geschrieben: "+document.cookie);
  if (reld) {
    location.reload();
  }
}

function setMyCookie() {
  if (CookiePage >  -1) {
    //alert("PageNumber = "+CookiePage+" myCookie = "+CookieArgs[CookiePage]);
    document.cookie="isohistor="+CookieArgs[CookiePage];
  } else {
    if (Cookie != "") {
      //alert("myCookie = "+Cookie);
      document.cookie="isohistor="+Cookie;
    }
  }
}

// Setzt die Ueberschrift
//----------------------------------------------------------------------

function headline(head) {
  // doc.write("<img src='image/cocura.gif'><br><br>");
  doc.write("<p><h1>"+head+"<hr></h1>");
}

function footer() {
// currently no footer text
// original:
//  doc.write("<hr><center>");
//  doc.write("<A HREF='mailto:info@iso-arznei.de'>");
//  doc.write("<img src='image/adresse2.gif' border='0'></A>");
//  doc.write("</center>");
}

// Klasse Item und deren Anzeige
// ------------------------------------------------------------

function Item(idx, indi, bgcol, color, link, erkl, rzpt, show, subindis) {
  this.idx  = idx;           //Knotennummer
  this.indi = indi;          //Indikation
  this.bgcol = bgcol;        //Backgroundcolor
  this.color = color;        //Schriftfarbe
  this.link = link;          //Verweis: dorthin verzweigen, wenn PLUS gedrueckt
  this.erkl = erkl;          //erklaerender Text
  this.showerkl = false;     //true, wenn Erklaerung angezeigt werden soll
  this.rzpt = rzpt;          //Rezept
  this.showrzpt = false;     //true, wenn Rezept angezeigt werden soll
  this.showsubindis = show;  //true, wenn Unterindikationsliste expandiert werden soll
  this.subindis = subindis;  //Array von Unterindikationen
}

function trennzeile(columns,tr) {
  // abhaengig von Trennvektor wird eine Trennzeile erzeugt
  doc.write("<tr>");
  for (var i = 0; i < columns; i++) {
    if (trennvektor[i]) {
      doc.write("<td background='image/EdgeV.gif' height='1' ");
      doc.write("border='0' align='center'>");
      doc.write("<img src='image/EdgeV-32x4.gif' border='0'></td>");
    } else {
      //doc.write("<td height='1' ");
      doc.write("<td border='0' align='center'>");
      //doc.write("<img src='image/Empty.gif' height='4' border='0'></td>");
      doc.write("<img src='image/Empty.gif' height='1' border='0'></td>");
    }
  }
  if (tr) {
    doc.write("</tr>");
  }
}

function Item_show(isLast) {
  //isLast wird bei der letzten Indikation eines Arrays von Unterindikationen
  //auf true gesetzt, damit der jeweilige "Bottom"-Knoten verwendet 
  //werden kann.

  //Vorgehende Trennzeile
  if (indent == 0) {
    trennvektor[indent] = true;
  } else {
    trennzeile(indent,true);
  }

  // Zeile fuer dieses Item
  trennzeile(indent-1,false);

//  doc.write("<tr>");
//  for (var i = 0; i < indent-1; i++) {
//    if (trennvektor[i]) {
//      doc.write("<td background='image/EdgeV.gif' height='1' ");
//      doc.write("border='0' align='center'>");
//      doc.write("<img src='image/EdgeV-32x4.gif' border='0'></td>");
//    } else {
//      doc.write("<td border='0' align='center'>");
//      //doc.write("<img src='image/Empty.gif' height='4' border='0'></td>");
//      doc.write("<img src='image/Empty.gif' height='1' border='0'></td>");
//      //doc.write("&nbsp;</td>");
//    }
//    //doc.write("<td background='image/EdgeV.gif' border='0' ");
//    //doc.write("align='center'>&nbsp;</td>");
//  }

  //Plus/Minus/Knoten
  if (indent > 0) {
    if ((this.link != "") || (this.subindis.length != 0)) {
      if (this.showsubindis) {
        trennvektor[indent] = true;
        //Minus
        if (isLast) {
	  if (noMinusNds) {
            doc.write("<td>");
            doc.write("<img src='image/NodeNopBottom.gif' ");
          } else {
            doc.write("<td><A HREF='");
            if (this.link != "") {
              doc.write(this.link+"'");
              doc.write(" onClick=\"document.cookie='isoscroll='+myOffset();setMyCookie();return true;\"");
            } else {
              doc.write(location+"'");
              doc.write(" onClick=\"toggleSubs("+this.idx+");return false;\"");
            }
            doc.write(" onMouseOver=\"node"+this.idx);
            doc.write(".src='image/NodeMinusBottomA.gif';return true;\"");
            doc.write(" onMouseOut=\"node"+this.idx);
            doc.write(".src='image/NodeMinusBottom.gif';return true;\">");
            doc.write("<img src='image/NodeMinusBottom.gif' ");
	    trennvektor[indent-1] = false;
          }
        } else {
	  if (noMinusNds) {
            doc.write("<td background='image/EdgeV.gif' border='0' align='center'>");
            doc.write("<img src='image/NodeNop.gif' ");
          } else {
            doc.write("<td background='image/EdgeV.gif' border='0' align='center'>");
            doc.write("<A HREF='");
            if (this.link != "") {
              doc.write(this.link+"'");
              doc.write(" onClick=\"document.cookie='isoscroll='+myOffset();setMyCookie();return true;\"");
            } else {
              doc.write(location+"'");
              doc.write(" onClick=\"toggleSubs("+this.idx+");return false;\"");
            }
            doc.write(" onMouseOver=\"node"+this.idx);
            doc.write(".src='image/NodeMinusA.gif';return true;\"");
            doc.write(" onMouseOut=\"node"+this.idx);
            doc.write(".src='image/NodeMinus.gif';return true;\">");
            doc.write("<img src='image/NodeMinus.gif' ");
	    trennvektor[indent-1] = true;
          }
        }
	if (noMinusNds) {
 	  doc.write("></td>");
        } else {
 	  doc.write("name=node"+this.idx+" border='0' align='center'></td>");
        }
      } else {
        //Plus
        if (isLast) {
          doc.write("<td><A HREF='");
          if (this.link != "") {
            doc.write(this.link+"'");
            doc.write(" onClick=\"document.cookie='isoscroll='+myOffset();setMyCookie();return true;\"");
          } else {
            doc.write(location+"'");
            doc.write(" onClick=\"toggleSubs("+this.idx+");return false;\"");
          }
          doc.write(" onMouseOver=\"node"+this.idx);
          doc.write(".src='image/NodePlusBottomA.gif';return true;\"");
          doc.write(" onMouseOut=\"node"+this.idx);
          doc.write(".src='image/NodePlusBottom.gif';return true;\">");
          doc.write("<img src='image/NodePlusBottom.gif' ");
	  trennvektor[indent-1] = false;
        } else { 
          doc.write("<td background='image/EdgeV.gif' border='0' align='center'>");
          doc.write("<A HREF='");
          if (this.link != "") {
            doc.write(this.link+"'");
            doc.write(" onClick=\"document.cookie='isoscroll='+myOffset();setMyCookie();return true;\"");
          } else {
            doc.write(location+"'");
            doc.write(" onClick=\"toggleSubs("+this.idx+");return false;\"");
          }
          doc.write(" onMouseOver=\"node"+this.idx);
          doc.write(".src='image/NodePlusA.gif';return true;\"");
          doc.write(" onMouseOut=\"node"+this.idx);
          doc.write(".src='image/NodePlus.gif';return true;\">");
          doc.write("<img src='image/NodePlus.gif' ");
	  trennvektor[indent-1] = true;
        }
	doc.write("name=node"+this.idx+" border='0' align='center'></td>");
      }
    } else {
      //Nop
      if (isLast) {
        doc.write("<td><img src='image/NodeNopBottom.gif' ");
        trennvektor[indent-1] = false;
      } else {
        doc.write("<td background='image/EdgeV.gif' border='0' align='center'>");
        doc.write("<img src='image/NodeNop.gif' ");
        trennvektor[indent-1] = true;
      }
      doc.write("border='0' align='center'></td>");
    }
  }

  // Erklaerungsbutton
  if (this.erkl != "") {
    doc.write("<td align='center' bgcolor='"),
    doc.write(this.bgcol);
    doc.write("'>");
    doc.write("<A HREF='"+location);
    if (this.showerkl) {
      doc.write("' onClick=\"toggleErkl("+this.idx+");return false;\"");
      doc.write(" onMouseOver=\"erkl"+this.idx+".src='image/InfoXA.gif';return true;\""+
                " onMouseOut=\"erkl"+this.idx+".src='image/InfoX.gif';return true;\">");
      doc.write("<img src='image/InfoX.gif' border='0' align='center' ");
    } else {
      doc.write("' onClick=\"toggleErkl("+this.idx+");return false;\"");
      doc.write(" onMouseOver=\"erkl"+this.idx+".src='image/InfoA.gif';return true;\""+
                " onMouseOut=\"erkl"+this.idx+".src='image/Info.gif';return true;\">");
      doc.write("<img src='image/Info.gif' border='0' align='center' ");
    }
    doc.write("name=erkl"+this.idx+"></A></td>");
  }

  // Rezeptbutton
  if (this.rzpt != "") {
    doc.write("<td align='center' bgcolor='");
    doc.write(this.bgcol);
    doc.write("'>");
    doc.write("<A HREF='"+location);
    if (this.showrzpt) {
      doc.write("' onClick=\"toggleRzpt("+this.idx+");return false;\"");
      doc.write(" onMouseOver=\"rzpt"+this.idx+".src='image/BlockXA.gif';return true;\""+
                " onMouseOut=\"rzpt"+this.idx+".src='image/BlockX.gif';return true;\">");
      doc.write("<img src='image/BlockX.gif' border='0' align='center' ");
    } else {
      doc.write("' onClick=\"toggleRzpt("+this.idx+");return false;\"");
      doc.write(" onMouseOver=\"rzpt"+this.idx+".src='image/BlockA.gif';return true;\""+
                " onMouseOut=\"rzpt"+this.idx+".src='image/Block.gif';return true;\">");
      doc.write("<img src='image/Block.gif' border='0' align='center' ");
    }
    doc.write("name=rzpt"+this.idx+"></A></td>");
  }
   
  doc.write("<td colspan='"+Indikationslaenge+"' height='");
  doc.write(iconSize+"' bgcolor='");
  doc.write(this.bgcol);
  doc.write("'>");
  doc.write("<font color="+this.color+">");
  doc.write("&nbsp;&nbsp;"+this.indi);
  doc.write("</font>");
  doc.write("</td>");

  //Ausgleich fuer fehlenden Erklaerungsbutton
  if (this.indi == "<strong>Alle Indikationen</strong> (Zum Suchen auf Lupe klicken)") {
    //Ausgleich fuer den fehlenden Erklaerungsbutton
    doc.write("<td align='center' bgcolor='"),
    doc.write(this.bgcol);
    doc.write("'>");
    doc.write("<img src='image/Platzhalter.gif'>");
    doc.write("</td>");
    //Lupe
    doc.write("<td align='center' bgcolor='"),
    doc.write(this.bgcol);
    doc.write("'>");
    doc.write("<A HREF='inditotal.html' onMouseOver=\"lupe.src='image/lupeA.gif';return true;\" onMouseOut=\"lupe.src='image/lupe.gif';return true;\"><img src='image/lupe.gif' name='lupe' border='0' alt='Zum Suchen: Alle Indikationen auf einen Blick'></A>");
    doc.write("</td>");
  } else {
    if (this.erkl == "") {
      doc.write("<td align='center' bgcolor='"),
      doc.write(this.bgcol);
      doc.write("'>");
      doc.write("<img src='image/Platzhalter.gif'>");
      doc.write("</td>");
    }
    //Ausgleich fuer fehlenden Rezeptbutton
    if (this.rzpt == "") {
      doc.write("<td align='center' bgcolor='"),
      doc.write(this.bgcol);
      doc.write("'>");
      doc.write("<img src='image/Platzhalter.gif'>");
      doc.write("</td>");
    }
  }
  doc.write("</tr>");

  //Anzeige Erklaerungsbox, optional
  if (this.showerkl && (this.erkl!="")) {
    trennzeile(indent+1,true);

    doc.write("<tr>");
    //Einrueckung
    for (var i = 0; i < indent; i++) {
      if (trennvektor[i]) {
        doc.write("<td background='image/EdgeV.gif' height='1' ");
        doc.write("border='0' align='center'>");
        doc.write("&nbsp;</td>");
      } else {
        doc.write("<td border='0' align='center'>");
        doc.write("<img src='image/Empty.gif' border='0'></td>");
      }
    }
    if (this.subindis.length != 0) {
      if (trennvektor[indent]) {
        doc.write("<td background='image/EdgeV.gif' height='1' border='0' ");
        doc.write("align='center'>&nbsp;</td>");
	//<img src='image/EdgeV.gif' border='0'></td>");
      } else {
        doc.write("<td border='0' ");
        doc.write("align='center'><img src='image/Empty.gif' border='0'></td>");
      }
    }

    //Erklaerungsbox
    doc.write("<td colspan='");
    if (this.subindis.length == 0) {
      doc.write(Boxlaenge+1);
    } else {
      doc.write(Boxlaenge);
    }
    doc.write("'>");
    doc.write("<table columns='2' cellspacing='0' cellpadding='0'");
    doc.write(" border='0' bgcolor='"+isoRosa+"'>");
    //Ueberschrift Erklaerungsbox
    doc.write("<tr><td width='");
    if (this.subindis.length == 0) {
      doc.write(Boxlaenge*iconSize);
    } else {
      doc.write((Boxlaenge-1)*iconSize);
    }
    doc.write("'><STRONG>");
    doc.write("Erl&auml;uterung/Information:");
    doc.write("</STRONG></td><td>");
    doc.write("<A HREF='"+location);
    doc.write("' onClick=\"toggleErkl("+this.idx+");return false;\"");
    doc.write(" onMouseOver=\"erklbox"+this.idx);
    doc.write(".src='image/CloseA.gif';return true;\"");
    doc.write(" onMouseOut=\"erklbox"+this.idx);
    doc.write(".src='image/Close.gif';return true;\">");
    doc.write("<img src='image/Close.gif' border='0' align='center' ");
    doc.write("name=erklbox"+this.idx+"></A>");
    doc.write("</td></tr>");
    //doc.write("<tr><td colspan='2'><hr></td></tr>");

    //Trennlinie
    doc.write("<tr><td background='image/pixel.gif' colspan='2'>");
    doc.write("<img src='image/pixel.gif'></td></tr>");

    //Eigentliche Erklaerung
    doc.write("<tr><td colspan='2' width='");
    if (this.subindis.length == 0) {
      doc.write((Boxlaenge+1)*iconSize);
    } else {
      doc.write(Boxlaenge*iconSize);
    }
    doc.write("'>");
    doc.write(this.erkl+"</td></tr>");
    doc.write("</table>");
    doc.write("</td></tr>");
  }

  //Anzeige Rezeptbox, optional
  if (this.showrzpt && (this.rzpt!="")) {
    trennzeile(indent+1,true);

    doc.write("<tr>");
    //Einrueckung
    for (var i = 0; i < indent; i++) {
      if (trennvektor[i]) {
        doc.write("<td background='image/EdgeV.gif' height='1' ");
        doc.write("border='0' align='center'>");
        doc.write("&nbsp;</td>");
      } else {
        doc.write("<td border='0' align='center'>");
        doc.write("<img src='image/Empty.gif' border='0'></td>");
      }
    }
    if (this.subindis.length != 0) {
      if (trennvektor[indent]) {
        doc.write("<td background='image/EdgeV.gif' height='1' border='0' ");
	doc.write("align='center'>&nbsp</td>");
	//><img src='image/EdgeV.gif' border='0'></td>");
      } else {
        doc.write("<td border='0' ");
        doc.write("align='center'><img src='image/Empty.gif' border='0'></td>");
      }
    }

    //Rezeptbox
    doc.write("<td colspan='");
    if (this.subindis.length == 0) {
      doc.write(Boxlaenge+1);
    } else {
      doc.write(Boxlaenge);
    }
    doc.write("'>");
    doc.write("<table columns='2' cellspacing='0' cellpadding='0'");
    doc.write(" border='0' bgcolor='" + isoRezept + "'>");
    //Ueberschrift Rezeptbox
    doc.write("<tr><td width='");
    if (this.subindis.length == 0) {
      doc.write((Boxlaenge)*iconSize);
    } else {
      doc.write((Boxlaenge-1)*iconSize);
    }
    doc.write("'><STRONG>");
    doc.write("Rezept:");
    doc.write("</STRONG></td><td>");
    doc.write("<A HREF='"+location);
    doc.write("' onClick=\"toggleRzpt("+this.idx+");return false;\"");
    doc.write(" onMouseOver=\"rzptbox"+this.idx);
    doc.write(".src='image/CloseA.gif';return true;\"");
    doc.write(" onMouseOut=\"rzptbox"+this.idx);
    doc.write(".src='image/Close.gif';return true;\">");
    doc.write("<img src='image/Close.gif' border='0' align='top' ");
    doc.write("name=rzptbox"+this.idx+"></A>");
    doc.write("</td></tr>");
    //doc.write("<tr><td colspan='2'><hr></td></tr>");

    //Trennlinie
    doc.write("<tr><td background='image/pixel.gif' colspan='2'>");
    doc.write("<img src='image/pixel.gif'></td></tr>");

    //Eigentliche Rezept
    doc.write("<tr><td colspan='2' width='");
    if (this.subindis.length == 0) {
      doc.write((Boxlaenge+1)*iconSize);
    } else {
      doc.write(Boxlaenge*iconSize);
    }
    doc.write("'>");
//  doc.write("<A HREF='rzptf.html' ");
//  doc.write("onClick=\"window.open('rzptf.html?");
//  doc.write(this.indi);
//  doc.write("','rzpt','width=370,height=480,resizable=1,");
//  doc.write("scrollbars=1,menubar=1');return false;\" ");
//  doc.write("onMouseOver=\"rzpt.src='image/StiftA.gif';return true;\" ");
//  doc.write("onMouseOut=\"rzpt.src='image/Stift.gif';return true;\">");
//  doc.write("<img name='rzpt' src='image/Stift.gif' border='0'></A>");
    doc.write(this.rzpt+"</td></tr>");
    doc.write("</table>");
    doc.write("</td></tr>");
  }

  if (this.showsubindis) {
    indent++;
    for (var i = 0; i < this.subindis.length; i++) {
      this.subindis[i].show(i==(this.subindis.length-1));
    }
    indent--;
  }
}

function Item_makePage() {
  // Tabellen-Anfang
  doc.write("<table border='0' cellpadding='0' cellspacing='0'");
  doc.write(" columns='"+SpaltenZahl+"'>");

  // Spaltenueberschrift
  doc.write("<tr>");
  for (var i = 0; i < SpaltenZahl; i++) {
    //doc.write("<td width='"+iconSize+"'><font size='-15'>"+i+"&nbsp;</td>");
    doc.write("<td width='"+iconSize+"'><font size='-15'>&nbsp;</td>");
  }
  doc.write("</tr>");

  this.show(false);

  // Tabellen-Ende
  doc.write("</table>");
  noMinusNds = false;
}

// Generate Cookie String from Tree
// Toggle bits in Tree (side effect: create new Cookie string)
// ----------------------------------------------------------------------

function makeCookie() {
  Cookie = "";
  Tree.toggleErkl(0); //there may be no node with idx 0
  setArgs(Cookie,false);  
}

function toggleErkl(idx) {
  Cookie = "";
  Tree.toggleErkl(idx);
  setArgs(Cookie,true);  
}

function toggleRzpt(idx) {
  Cookie = "";
  Tree.toggleRzpt(idx);  
  setArgs(Cookie,true);  
}

function toggleSubs(idx) {
  Cookie = "";
  Tree.toggleSubs(idx);  
  setArgs(Cookie,true);  
}

function Item_toggleErkl(idx) {
  var part="";
  var added = false;
  part=part+this.idx+":";
  if (this.idx == idx) {
    this.showerkl = (!this.showerkl);
  }
  if (this.showerkl && (this.erkl!="")) {
    part=part+"T";
    added = true;
  }
  if (this.showrzpt && (this.rzpt!="")) {
    part=part+"R";
    added = true;
  }
  if (this.showsubindis && (this.subindis.length!=0)) {
    part=part+"S";
    added = true;
  }
  if (added) {
    if (Cookie=="") {
      Cookie=Cookie+part;
    } else {
      Cookie=Cookie+"/"+part;
    }
  }
  for (var i=0;i<this.subindis.length;i++) {
    this.subindis[i].toggleErkl(idx);
  }
}

function Item_toggleRzpt(idx) {
  var part="";
  var added = false;
  part=part+this.idx+":";
  if (this.idx == idx) {
    this.showrzpt = (!this.showrzpt);
  }
  if (this.showerkl && (this.erkl!="")) {
    part=part+"T";
    added = true;
  }
  if (this.showrzpt && (this.rzpt!="")) {
    part=part+"R";
    added = true;
  }
  if (this.showsubindis && (this.subindis.length!=0)) {
    part=part+"S";
    added = true;
  }
  if (added) {
    if (Cookie=="") {
      Cookie=Cookie+part;
    } else {
      Cookie=Cookie+"/"+part;
    }
  }
  for (var i=0;i<this.subindis.length;i++) {
    this.subindis[i].toggleRzpt(idx);
  }
}

function Item_toggleSubs(idx) {
  var part="";
  var added = false;
  var off = false;
  part=part+this.idx+":";
  if ((this.idx == idx) && (this.link == "")) {
    this.showsubindis = (!this.showsubindis);
    off = !this.showsubindis;
  }
  if (this.showerkl && (this.erkl!="")) {
    part=part+"T";
    added = true;
  }
  if (this.showrzpt && (this.rzpt!="")) {
    part=part+"R";
    added = true;
  }
  if (this.showsubindis && (this.subindis.length!=0)) {
    part=part+"S";
    added = true;
  }
  if (added) {
    if (Cookie=="") {
      Cookie=Cookie+part;
    } else {
      Cookie=Cookie+"/"+part;
    }
  }
  for (var i=0;i<this.subindis.length;i++) {
    if (off) {
      this.subindis[i].offAll();
    } else {
      this.subindis[i].toggleSubs(idx);
    }
  }
}

function Item_offAll() {
  this.showerkl     = false;
  this.showrzpt     = false;
  this.showsubindis = false;
  for (var i=0;i<this.subindis.length;i++) {
    this.subindis[i].offAll();
  }
}

// Scrolling
// ----------------------------------------------------------------------

function scrollToLast() {
  //alert("Scroll = "+Scroll);
  if (Scroll > 0) {
    if (navigator.appName == "Netscape") {
      scroll(0, Scroll);
    } else {
      document.body.scrollTop = Scroll;
    }
    document.cookie="isoscroll=0";
  }
}

function myOffset() {
  if (navigator.appName == "Netscape") {
    return window.pageYOffset;
  } else {
    return document.body.scrollTop;
  }
}

// Parse Cookie string and set bits in Tree appropriately
// Cookie format      pagenumer:<pagecookie>&pagenumer:<pagecookie>...
// PageCookie format  itemnumber:TXT/itemnumber:TXT...
// ----------------------------------------------------------------------

function evaluateCookie(Cookie,pageId) {
  CookiePage = -1;
  PageNumber = pageId;
  CookieArgs = new Array();
  if (Cookie != "") {
    CookieArgs = Cookie.split("&");
  }
  // work on cookie for this page
  for (var i = 0; i < CookieArgs.length; i++) {
    //alert("CookieArg = "+CookieArgs[i]);
    var pos = CookieArgs[i].indexOf(':');
    if (pos==-1) continue; //irgendwas ist faul ueberspringen
    var idx = CookieArgs[i].substring(0,pos);
    if (PageNumber==idx) {
      CookiePage = i;
      var myCookie = CookieArgs[i].substring(pos+1,CookieArgs[i].length);
      //alert("cookie for page "+PageNumber+"(idx="+CookiePage+")="+myCookie);
      var args = myCookie.split("/");
      CookiePosi = 0;
      Tree.evaluateCookie(args);
    }
  }
  if (Histor != "") {
    //work on history cookie first
    learnedSomething = false;
    var pos = Histor.indexOf(':');
    Histor = Histor.substring(pos+1,Histor.length);
    var args  = Histor.split("/");
    var idxs  = new Array(args.length);
    var parts = new Array(args.length);
    for (var i = 0; i<args.length; i++) {
      pos = args[i].indexOf(':');
      idxs[i]  = args[i].substring(0,pos);
      parts[i] = args[i].substring(pos+1,args[i].length);
    }
    Tree.evaluateHistory(idxs,parts);
    Histor="";
    document.cookie="isohistor=";
    if (learnedSomething) {
      makeCookie();
    }
  }
}

function Item_evaluateCookie(args) {
  if (CookiePosi == args.length) {
    return;
  }
  var pos = args[CookiePosi].indexOf(':');
  if (pos==-1) return; //irgendwas ist faul
  var idx = args[CookiePosi].substring(0,pos);
  var part = args[CookiePosi];
  //alert("check node "+idx+" with "+part);
  if (this.idx == idx) {
    //default
    this.showerkl = false;
    this.showrzpt = false;
    if (part.indexOf("T") != -1) {
      this.showerkl = true;
    }
    if (part.indexOf("R") != -1) {
      this.showrzpt = true;
    }
    if (this.link == "") {
      this.showsubindis = false;
      if (part.indexOf("S") != -1) {
        this.showsubindis = true;
      }
    }
    CookiePosi++;
  }
  for (var i=0;i<this.subindis.length;i++) {
   this.subindis[i].evaluateCookie(args);
  }
}

function Item_evaluateHistory(idxs,parts) {
  for (var i = 0; i<idxs.length; i++) {
    if (idxs[i] == this.idx) {
      //alert("evalHist("+idxs[i]+", "+parts[i]+")");
      // Erklaerung
      if (this.showerkl) {
	if (parts[i].indexOf('T') == -1) {
          this.showerkl = false;
          learnedSomething = true;
        }  
      } else {
	if (parts[i].indexOf('T') != -1) {
          this.showerkl = true;
          learnedSomething = true;
        }  
      }
      // Rezepte
      if (this.showrzpt) {
	if (parts[i].indexOf('R') == -1) {
          this.showrzpt = false;
          learnedSomething = true;
        }  
      } else {
	if (parts[i].indexOf('R') != -1) {
          this.showrzpt = true;
          learnedSomething = true;
        }  
      }
      // Subindis
      if (this.link == "") {
        if (this.showsubindis) {
	  if (parts[i].indexOf('S') == -1) {
            this.showsubindis = false;
            learnedSomething = true;
          }  
        } else {
	  if (parts[i].indexOf('S') != -1) {
            this.showsubindis = true;
            learnedSomething = true;
          }  
        }
      }
    }
  }
  for (var i=0;i<this.subindis.length;i++) {
   this.subindis[i].evaluateHistory(idxs,parts);
  }
}

// Sonstiges
// ----------------------------------------------------------------------

//function resolvetargets(text) {
//  // ersetzt isotarget('linktext','URL') durch
//  // link, der separates (Lexikon-) Fenster oeffnet.
//  var result=text.replace(/isotarget\('([^']*)','([^']*)'\)/g,"<A HREF='$2' onClick=\"window.open('$2','wndo',"+
//   "'width=370,height=380,resizable=1,scrollbars=1');return false;\""+
//   ">$1</A>");
//  result=result.replace(/isolink\('([^']*)','([^']*)'\)/g,"<A HREF='$2'>$1</A>");
//  return result;
//}

// Inheritance
// ----------------------------------------------------------------------

Item.prototype.makePage        = Item_makePage;
Item.prototype.show            = Item_show;
Item.prototype.toggleErkl      = Item_toggleErkl;
Item.prototype.toggleRzpt      = Item_toggleRzpt;
Item.prototype.toggleSubs      = Item_toggleSubs;
Item.prototype.offAll          = Item_offAll;
Item.prototype.evaluateCookie  = Item_evaluateCookie;
Item.prototype.evaluateHistory = Item_evaluateHistory;

// "rutschendes" Menue
//======================================================================

function setVariables() {
  if (navigator.appName == "Netscape") {
    v  = ".top=";
    h  = ".left=";
    dS = "document.";
    sD = "";
    y  = "window.pageYOffset";
    x  = "window.pageXOffset";
    iW = "window.innerWidth";
    iH = "window.innerHeight";
  } else {
    h  = ".pixelLeft=";
    v  = ".pixelTop=";
    dS = "";
    sD = ".style";
    y  = "document.body.scrollTop";
    x  = "document.body.scrollLeft";
    iW = "document.body.clientWidth";
    iH = "document.body.clientHeight";
  }
  xyz = 500;
  //innerX = eval(iW) - 80;  
  if (navigator.appName == "Netscape") {
    innerX = eval(iW) - 154;  
    menuwidth = 70;
  } else {
    innerX = eval(iW) - 141;  
    menuwidth = 67;
  }
  // innerY = eval(iH) - 100;
  innerY = 10;
  object = "logo";
  checkLocationA();
}

movex  = 0;
movey  = 0;
xdiff  = 0;
ydiff  = 0;
ystart = 0;
xstart = 0;

function checkLocation() {
  yy = eval(y);
  xx = eval(x);
  ydiff = ystart - yy;
  xdiff = xstart - xx;
  if ((ydiff < (-1)) || (ydiff > (1))) movey = Math.round(ydiff/10), ystart -= movey;
  if ((xdiff < (-1)) || (xdiff > (1))) movex = Math.round(xdiff/10), xstart -= movex;
  menushift = 0;
  if (object == "menu") {
    menushift = menuwidth;
  }
  eval(dS + object + sD + v + (ystart + innerY));
  eval(dS + object + sD + h + (xstart + innerX - menushift));
  setTimeout("checkLocation()",10);
}

function checkLocationA() {
  ystart = eval(y);
  xstart = eval(x);
}

function switchLogo(abc) {
  if (abc == "menu") {
    eval(dS + object + sD + v + 0);
    eval(dS + object + sD + h + (-200));
    object = abc;
  } else {
    xyz = setTimeout("delayLogo()", 500);
  }
}

function delayLogo() {
  eval(dS + object + sD + v + 0);
  eval(dS + object + sD + h + (-200));
  object = "logo";
}

var menugifs = new Array(7);
var menuactive;

function initmenu(on){
  menuactive = on;
  if (!menugifs[on]) {
    for (var i = 1; i < 8; i++) {
      menugifs[i] = "image/menuoff.gif";
    }
    menugifs[on] ="image/menuon.gif";
  }
}

var menugifsset = false;
function setmenugifs(idx,item1,item2,item3,item4,item5,item6,item7) {
  if (!menugifsset) {
    item1.src = menugifs[1];
    item2.src = menugifs[2];
    item3.src = menugifs[3];
    item4.src = menugifs[4];
    item5.src = menugifs[5];
    item6.src = menugifs[6];
    item7.src = menugifs[7];
  }
  if (idx != menuactive) {
    eval("item"+idx+".src='image/menusw.gif'");
  }
}

function rstmenugifs(idx,item) {
  if (idx != menuactive) {
    item.src="image/menuoff.gif";
  }
}

function tellVisual()
{
	if( top.frames && top.frames.menuFrame )
		top.frames.menuFrame.visualchange( visual );
}
