  var AusgabeFrame = "TextFrame";
  var DataFolder = "global/";

  var OhneLink= "CLASS=NoLink"
  var MitLink = "CLASS=ShowLink"

function BuildTree() {
  TreeData = new Collection();
  TreeData.Add(new Root(0, "start/text.html", "Startseite", "Ars Martialis - Die Seite f&uuml;r Kampfsport und Kampfkunst", "punkt1.gif"));
  TreeData.Add(new Entry(0, "start/suche.html", "VOLLTEXTSUCHE", "Google sucht in ArsMartialis", "", ""));
  TreeData.Add(new Category(1, "", "Kampf - wissenschaftlich", "", 0, "", ""));

  TreeData.Add(new Category(12, "", "Fachbeiträge", "", 1, "", ""));

  TreeData.Add(new Entry(12, "faq/bodenkampf.html", "Bodenkampf in der Selbstverteidigung?", "", "", ""));
  TreeData.Add(new Entry(12, "diss/index.html", "Struktur der Kampfsportarten", "Die Zusammensetzung und der Aufbau der Stile", "", ""));
  TreeData.Add(new Entry(12, "faq/beststil.html", "Bester Kämpfer, bester Stil?", "Bester Kämpfer, bester Stil?", "", ""));
  TreeData.Add(new Entry(12, "faq/schieber.html", "Kraft oder Können?", "Erfolg durch Training oder Kraft?", "", ""));
  TreeData.Add(new Entry(12, "faq/theorie.html", "Können oder Kennen?", "Theorie vs. Praxis", "", ""));
  TreeData.Add(new Entry(12, "patent/patent.html", "Schlagkraft-Patent", "Patentschrift: Verfahren zur Bestimmung des k&ouml;rperlichen Trainingszustandes einer Person", "", ""));
  TreeData.Add(new Entry(12, "spektrum/karate.html", "Die Physik des Karateschlages", "Artikel aus der Zeitschrift Spektrum der Wissenschaften", "", ""));
  TreeData.Add(new Entry(12, "buch/mechanik/dissertation.html", "Der Weg zur Dissertation", "Dissertation an der Deutschen Sporthochschule", "", ""));

  TreeData.Add(new Category(13, "", "Meine Bücher über Kampfsport", "", 1, "", ""));

  TreeData.Add(new Entry(13, "buch/kaempferin/index.html", "Die Kämpferin", "Der boshafte Roman", "", ""));

  TreeData.Add(new Category(131, "buch/mechanik/index.html", "Mechanik und Struktur ...", "", 13, "", ""));
  TreeData.Add(new Entry(131, "buch/mechanik/index.html", "Volltextsuche, Errata, Info", "Dissertation an der Deutschen Sporthochschule", "", ""));
  TreeData.Add(new Entry(131, "buch/mechanik/einfuehrung.html", "Darum geht es", "Dissertation an der Deutschen Sporthochschule", "", ""));
  TreeData.Add(new Entry(131, "buch/mechanik/rezension1.html", "Artikel", "Beitrag in der Kampfkunst International", "", ""));
  TreeData.Add(new Entry(131, "buch/mechanik/rezensionen.html", "Rezensionen", "Dissertation an der Deutschen Sporthochschule", "", ""));
  TreeData.Add(new Entry(131, "buch/mechanik/inhalt.html", "Inhaltsverzeichnis", "Dissertation an der Deutschen Sporthochschule", "", ""));

  TreeData.Add(new Entry(0, "technik/prinzip4.html", "4 Prinzipien des WT", "Die 4 Prinzipien des Wing Tsun", "", ""));

  TreeData.Add(new Category(11, "", "Damaszener Stahl", "", 0, "", ""));
  TreeData.Add(new Entry(11, "technik/damast/damast3.html", "Bilder", "Beispiele Damaszener Schmiedekunst", "", ""));
  TreeData.Add(new Entry(11, "technik/damast/damast2.html", "Wootz - geschmiedeter Stahl", "Wiederentdeckung eines Prizips", "", ""));
  TreeData.Add(new Entry(11, "technik/damast/damast1.html", "Gefalteter Stahl", "Technik und Geschichte des Waffenstahls", "", ""));

  TreeData.Add(new Category(2, "", "Körper und Kampf", "", 0, "", ""));
  TreeData.Add(new Entry(2, "physio/fettweg.html", "Abnehmen durch Sport?", "Schlank und fit mit Kampfsport", "", ""));
  TreeData.Add(new Entry(2, "physio/endorphin.html", "Endorphine: Opium des Körpers", "Eigendoping", "", ""));
  TreeData.Add(new Entry(2, "technik/laenge/laenge.html", "Gr&ouml;&szlig;e und Reichweiten", "Anthropometrie: K&ouml;rpergr&ouml;&szlig;e und Reichweiten", "", ""));
  TreeData.Add(new Entry(2, "technik/reaktion/reaktion.html", "Reaktionszeiten", "Reaktionszeiten auf optische, akustische und taktile Reize", "", ""));
  TreeData.Add(new Entry(2, "faq/m_anteil.html", "Masseverteilung", "Anthropometrie: Masseverteilung im K&ouml;rper", "", ""));
  TreeData.Add(new Entry(2, "faq/masse.html", "Gr&ouml;&szlig;e und Gewicht", "Anthropometrie: K&ouml;rpergr&ouml;&szlig;e und -gewichte", "", ""));
//  TreeData.Add(new Entry(2, "faq/osmose.html", "Mit destilliertem Wasser fit?", "Destilliertes Wasser und Osmose", "", ""));
  TreeData.Add(new Category(3, "", "FAQ", "FAQ", 0, "", ""));
  TreeData.Add(new Entry(3, "faq/start_faq.html", "Übersicht", "Kampfsport-FAQs - &Uuml;berblick", "", ""));
  TreeData.Add(new Entry(3, "faq/journalistenfragen.html", "FAQ für Journalisten", "Info für Funk und Fernsehen", "", "neu.gif"));
  TreeData.Add(new Entry(3, "faq/faq01.html", "Allgemeines", "Kampfsport-FAQ 1: Allgemeines", "", ""));
  TreeData.Add(new Entry(3, "faq/faq02.html", "Physik und Kampf", "Kampfsport-FAQ 2: Physik und Kampfsport", "", ""));

  TreeData.Add(new Category(4, "", "Themen für Ausbilder", "Tipps für Ausbilder und Schulleiter", 0, "", ""));
  TreeData.Add(new Entry(4, "ausbilder/freie_software.html", "Software für die Schule", "Geld sparen mit freier Software", "", ""));
  TreeData.Add(new Entry(4, "geld/zins.html", "Beitragsgestaltung", "Jahresbeitrag statt Monatsbeitrag", "", ""));
  TreeData.Add(new Entry(4, "geld/rechner.html", "JavaScript-Zinsrechner", "Beitr&auml;ge: Der JavaScript-Zinsrechner", "", ""));
  TreeData.Add(new Entry(4, "geld/mathe.html", "Berechnungsformeln", "Beitr&auml;ge: Herleitung der Berechnungsformeln", "", ""));

  TreeData.Add(new Category(7, "", "Literatur", "Literatur zu Kampfsport und Kampfkunst", 0, "", ""));
  TreeData.Add(new Entry(7, "literatur/literatur.html", "Übersicht", "Literatur zu Kampfsport und Kampfkunst", "", ""));
  TreeData.Add(new Entry(7, "literatur/damast.html", "Damaszener Stahl", "Literatur zu Damaszener St&auml;hlen", "", ""));
  TreeData.Add(new Entry(7, "literatur/stile.html", "Technik und Stile", "Literatur zur Technik und zu Stilen im Kampfsport/Kampfkunst", "", ""));
  TreeData.Add(new Entry(7, "literatur/psychologie.html", "Psychologie im Kampf", "Literatur zur Psychologie im Kampf", "", ""));
  TreeData.Add(new Entry(7, "literatur/sonst.html", "Allgemeines zum Kampf", "Allgemeine Literatur zu Kampfsport und Kampfkunst", "", ""));
  TreeData.Add(new Entry(7, "literatur/schrott.html", "Vorsicht Schund", "Literatur, vor der gewarnt wird", "", ""));
  TreeData.Add(new Entry(7, "literatur/medizin.html", "Sport und Gesundheit", "Literatur zu Sport und Gesundheit", "", ""));
  TreeData.Add(new Entry(7, "literatur/physik.html", "Physik im Sport", "Literatur zur Physik im Sport", "", ""));
  TreeData.Add(new Entry(7, "literatur/spowissenschaft.html", "Sportwissenschaft", "Literatur zur Sportwissenschaft", "", ""));

  TreeData.Add(new Category(8, "", "Recht", "Ausz&uuml;ge aus dem deutschen Recht", 0, "", ""));
  TreeData.Add(new Entry(8, "recht/notwehr.html", "Notwehrrecht", "Ausz&uuml;ge aus dem deutschen Notwehrrecht", "", ""));
  TreeData.Add(new Entry(8, "recht/waffen.html", "Waffengesetz", "Ausz&uuml;ge aus dem deutschen Waffengesetz", "", ""));

  TreeData.Add(new Category(9, "", "Vorsicht Falle", "Quatsch im Kampfsport", 0, "", ""));
  TreeData.Add(new Entry(9, "warnung/titelanrede.html", "Korrekte Anreden: Herr Sigung", "Titel und Anreden im Kampfsport", "", ""));
  TreeData.Add(new Entry(9, "warnung/drachen.html", "Das Drachen-Magazin", "Leseproben aus dem Drachen-Magazin", "", ""));
  TreeData.Add(new Entry(9, "warnung/hayes.html", "Ninjutsu &aacute; la Hayes", "Ninjutsu &aacute; la Hayes", "", ""));
  TreeData.Add(new Entry(9, "warnung/maerchen.html", "M&auml;rchen", "M&auml;rchen &uuml;ber Kampfsport", "", ""));

  TreeData.Add(new Category(6, "", "Quack-Su Do", "Kampfkunst vom feinsten", 0, "", ""));
  TreeData.Add(new Entry(6, "humor/quacksudo/quack.html", "Der Stil", "Quack-Su Do - Die genialste Selbstverteidigung", "", ""));
  TreeData.Add(new Entry(6, "humor/quacksudo/technik.html", "Technikserie", "Technikserie mit Quack-Su Do-Obergro&szlig;meister Ralf Pfeifer", "", ""));

  TreeData.Add(new Category(10, "", "Nicht ganz ernst gemeint", "", 0, "", ""));
  TreeData.Add(new Entry(10, "humor/krampf.html", "Die K(r)ampf Collection", "Der Bauchladen im Web", "", ""));
  TreeData.Add(new Entry(10, "humor/testament.html", "Testamentsvordruck", "Sicherheit bei Fahrten zum Training", "", ""));
  TreeData.Add(new Entry(10, "humor/zeitung.html", "Redaktions-Infos", "Allgemeine Redaktions-Infos der VOODO-MARTIAL", "", ""));
  TreeData.Add(new Entry(0, "start/impress.html", "Impressum", "Technische Informationen und Impressum", "", ""));
  TreeData.Add(new Entry(0, "start/download.html", "Download", "Download", "", ""));
  TreeData.Add(new Entry(0, "extern.html", "Externe Links", "Externe Links", "", ""));
}

function PaintTree()
{
  var TreeFrame = self.frames["TreeFrame"];
  output = TreeFrame.window.document;
  output.open("text/html");
  output.write("<HTML><HEAD>\n");
  output.write("<LINK REL=STYLESHEET HREF=\"" + DataFolder + "treeview.css\" TYPE=\"text/css\">\n");
  output.write("</HEAD>\n<BODY>\n<NOBR>");

  var DestFrame = (TreeData[1].ziel == "")? AusgabeFrame : TreeData[1].ziel;
  var image = DataFolder + ((TreeData[1].icon == "")? "category_expanded.gif" : TreeData[1].icon);

  var TempText = "<A HREF=\"" + TreeData[1].url + "\" TARGET=\"" + DestFrame + "\" onMouseOver=\"javascript:window.status='" + TreeData[1].rootstat
  output.write(TempText + "'; return true;\"><IMG SRC=\"" + image + "\" ALIGN=TOP BORDER=0 ALT=\"" + TreeData[1].rootstat + "\"></A>");
  output.write("&nbsp;");
  output.write(TempText + "'; return true;\"><B>" + TreeData[1].text + "</B></A><BR>\n");
  PaintCategory("0","");
  output.write("</NOBR>\n");
  output.write("<P>&nbsp;</P><P ALIGN=CENTER>Zu meinen Büchern:</P><P ALIGN=CENTER></NOBR>\n");
  output.write("<A HREF=\"buch/mechanik/index.html\" TARGET=\"TextFrame\"><IMG SRC=\"buch/mechanik/mechanik60h.jpg\" WIDTH=42 HEIGHT=60 ALT=\"Hier geht's zum Buch 'Mechanik und Struktur der Kampfsportarten'\" BORDER=0></A>\n");
  output.write("<A HREF=\"buch/kaempferin/index.html\" TARGET=\"TextFrame\"><IMG SRC=\"buch/kaempferin/kaempferin60h.jpg\" WIDTH=38 HEIGHT=60 ALT=\"Hier geht's zum Buch 'Die Kämpferin'\" BORDER=0></A></P>\n");
  output.write("<HR NOSHADE><P ALIGN=CENTER>Besuchen Sie auch<P ALIGN=CENTER><BIG><A HREF=\"http://www.ArsTechnica.de\" TARGET=\"_BLANK\">www.ArsTechnica.de</A></BIG><P ALIGN=CENTER>meine Seite f&uuml;r Technik und Computer</P>")
//  output.write("<P></P><HR NOSHADE><P ALIGN=CENTER><A HREF=\"http://de.wikipedia.org\" TARGET=\"_BLANK\"><IMG SRC=\"start/wikipedia.png\" WIDTH=125 HEIGHT=125 BORDER=0 ALT=\"Wikipedia Startseite\"></A></P>")
  output.write("</BODY>\n</HTML>");
  output.close();

  window.status="www.ArsMartialis.com"
}

function PaintCategory(startEintrag, zweigEintrag)
{
//  VerzAuf = 'Kategorie erweitern'
//  VerzZu  = 'Kategorie reduzieren'

  var next = new Collection();
  var nIndex = 1;

  while (nIndex<=TreeData.size)
  {
    if ((TreeData[nIndex].Type == "category") || (TreeData[nIndex].Type == "entry"))
      if (TreeData[nIndex].Prev == startEintrag)
        next.Add(TreeData[nIndex]);
    nIndex++;
  }

  nIndex = 1;

  while (nIndex <= next.size)
  {
    output.write(zweigEintrag);

    if (next[nIndex].Type == "entry")
    {
      // Wurde ein spezielles Icon für die Verzweigung gewählt?
      var bildBezeichnung = DataFolder + ((next[nIndex].icon == "")? "entry.gif" : next[nIndex].icon);

      // Ausgabe in ZielFrame
      var DestFrame = ((next[nIndex].ziel == "")? "TextFrame" : next[nIndex].ziel)

      // Letzter Zweig - T oder L-Darstellung
      if (nIndex!= next.size)
        output.write("<IMG SRC=\"" + DataFolder + "branch.gif\" WIDTH=19 HEIGHT=16 ALIGN=TOP>")
      else
        output.write("<IMG SRC=\"" + DataFolder + "branch_last.gif\" WIDTH=19 HEIGHT=16 ALIGN=TOP>")

      var linkstat = (next[nIndex].linkstat == "")? next[nIndex].url : next[nIndex].linkstat

      output.write("<A HREF=\"" + next[nIndex].url + "\" TARGET=\"" + DestFrame + "\" onMouseOver=\"window.status='" + linkstat + "'; return true\"><IMG SRC=\"" + bildBezeichnung + "\" WIDTH=16 HEIGHT=16 ALIGN=TOP BORDER=0 ALT=\"" + linkstat + "\"></A>")
      output.write("&nbsp;")
      output.write("<A HREF=\"" + next[nIndex].url + "\" TARGET=\"" + DestFrame + "\" onMouseOver=\"window.status='" + linkstat + "'; return true\">" + next[nIndex].text + "</A><BR>\n")
    }
    else
    {
       VerzAuf = next[nIndex].status // 'Kategorie erweitern'
       VerzZu  = next[nIndex].status // 'Kategorie reduzieren'

      var neuerZweig = zweigEintrag;
      var iconZu = (next[nIndex].iconZu == "")? "category_collapsed.gif" : next[nIndex].iconZu
      var iconOffen = (next[nIndex].iconOffen == "")? "category_expanded.gif" : next[nIndex].iconOffen

      var LinkStyle = next[nIndex].url == ""? OhneLink : MitLink

      if (nIndex!=next.size)
        if (next[nIndex].offen == 0)
        {
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',1)\" onMouseOver=\"window.status='" + VerzAuf + "'; return true\"><IMG SRC=\"" + DataFolder + "plus.gif\" WIDTH=19 HEIGHT=16 ALT=\"" + VerzAuf + "\" ALIGN=TOP BORDER=0>")
          output.write("<IMG SRC=\"" + DataFolder + iconZu + "\" WIDTH=16 HEIGHT=16 ALT=\"" + VerzAuf + "\" ALIGN=TOP BORDER=0></A>");
          output.write("&nbsp;");
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',1)\" onMouseOver=\"window.status='" + VerzAuf + "'; return true\" " + LinkStyle + " >")
          output.write(next[nIndex].text + "</A><BR>\n")
        }
        else
        {
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',0)\" onMouseOver=\"window.status='" + VerzZu + "'; return true\"><IMG SRC=\"" + DataFolder + "minus.gif\" WIDTH=19 HEIGHT=16 ALT=\"" + VerzZu + "\" ALIGN=TOP BORDER=0>");
          output.write("<IMG SRC=\"" + DataFolder + iconOffen + "\" WIDTH=16 HEIGHT=16 ALT=\"" + VerzZu + "\" ALIGN=TOP BORDER=0></A>");
          output.write("&nbsp;");
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',0)\" onMouseOver=\"window.status='" + VerzZu + "'; return true\" " + LinkStyle + " >");
          output.write(next[nIndex].text + "</A><BR>\n");
          neuerZweig = neuerZweig + "<IMG SRC=\"" + DataFolder + "line.gif\" WIDTH=19 HEIGHT=16 ALIGN=TOP>";
          PaintCategory(next[nIndex].name, neuerZweig)
        }
      else
        if (next[nIndex].offen == 0)
        {
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',1)\" onMouseOver=\"window.status='" + VerzAuf + "'; return true\">");
          output.write("<IMG SRC=\"" + DataFolder + "plus_last.gif\" WIDTH=19 HEIGHT=16 ALT=\"" + VerzAuf + "\" ALIGN=TOP BORDER=0>")
          output.write("<IMG SRC=\"" + DataFolder + iconZu + "\" WIDTH=16 HEIGHT=16 ALT=\"" + VerzAuf + "\" ALIGN=TOP BORDER=0></A>");
          output.write("&nbsp;");
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',1)\" onMouseOver=\"window.status='" + VerzAuf + "'; return true\" " + LinkStyle + " >");
          output.write(next[nIndex].text + "<BR></A>\n")
        }
        else
        {
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',0)\" onMouseOver=\"window.status='" + VerzZu + "'; return true\">");
          output.write("<IMG SRC=\"" + DataFolder + "minus_last.gif\" WIDTH=19 HEIGHT=16 ALT=\"" + VerzZu + "\" ALIGN=TOP BORDER=0>");
          output.write("<IMG SRC=\"" + DataFolder + iconOffen + "\" WIDTH=16 HEIGHT=16 ALT=\"" + VerzZu + "\" ALIGN=TOP BORDER=0></A>");
          output.write("&nbsp;");
          output.write("<A HREF=\"javascript:parent.ExpandCollapse('" + next[nIndex].name + "',0)\" onMouseOver=\"window.status='" + VerzZu + "'; return true\" " + LinkStyle + " >");
          output.write(next[nIndex].text + "</A><BR>\n");
          neuerZweig = neuerZweig + "<IMG SRC=\"" + DataFolder + "space.gif\" WIDTH=19 HEIGHT=16 ALIGN=TOP>";
          PaintCategory(next[nIndex].name,neuerZweig)
        }
    }
  nIndex++;
  }
}

function ExpandCollapse(name, status)
{
  var nIndex = 0;
  while (++nIndex <= TreeData.size)
  {
    if ((TreeData[nIndex].Type == "root") || (TreeData[nIndex].Type == "category"))
      if (TreeData[nIndex].name == name) { break; }
  }

  TreeData[nIndex].offen = status;
  timeOutname = setTimeout("PaintTree()", 100);
  if ((status==1) && (TreeData[nIndex].url!= ''))
    { frames["TextFrame"].location.href=TreeData[nIndex].url; }
}

function Collection()
{
  this.size = 0;
  this.Add  = Add;
  return this;
}

function Add(object) { this[++this.size] = object; }

function Root(ID, url, Titel, StatusText, icon)
{
  this.name        = ID; // ID
  this.url         = url;  // URL
  this.text        = Titel; // Titel
  this.rootstat    = StatusText; // StatusText
  this.ziel        = "";
  this.icon        = icon; // icon
  this.Type        = "root";
  return this;
}

function Category(ID, url, Titel, StatusText, Prev, iconZu, iconOffen)
{
  this.name         = ID; // ID
  this.url          = url; // URL
  this.text         = Titel;  // Titel
  this.status       = StatusText;
  this.Prev         = Prev; // ID der vorherigen 'Category'
  this.iconZu       = iconZu;
  this.iconOffen    = iconOffen;
  this.Type         = "category";
  this.offen        = 0;
  return this;
}

function Entry(ID, url, Titel, StatusText, ziel, icon)
{
  this.Prev        = ID;   // ID - Eintrag hängt an 'Category.name'
  this.url         = url;    // URL
  this.text        = Titel;   // Titel
  this.linkstat    = StatusText;  // StatusText
  this.ziel        = ziel;  // Zielframe, z.B. '_blank'
  this.icon        = icon;
  this.Type        = "entry";
  return this;
}