/* ***************************************************************************
  Navigation.js

  Projekt Calvinianum, http://www.calvinianum.de

  (C) 1999-2003 Carsten Linke

  Mit diesem Skript wird eine Navigationsleiste angezeigt.

  Funktionsaufe:

    vor Begin des Seiteninhalts: NavigationAnfang()
    nach Ende des Seiteninhalts: NavigationEnde()

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


/* Datentyp Menue
     Feld 1: Menügruppe
     Feld 2: Verschachtelungstiefe (vgl. Feld 4)
     Feld 3: in der Navigationsleiste angezeigter Name
     Feld 4: Pfad zur Einstiegsdatei */

function Typ_Menue(Gruppe, Tiefe, Name, Pfad)
{
  this.Gruppe = Gruppe;
  this.Tiefe  = Tiefe;
  this.Name   = Name;
  this.Pfad   = Pfad;
}


/* Verweisfeld für Aufnahme der Meta-Tags "link rel" vorbereiten.
     Feld 1: Link (Attribut href)
     Feld 2: Titel (Attribut title) */

function Typ_Link(Link, Titel)
{
  this.Link  = Link;
  this.Titel = Titel;
}

var Links = new Array(6);
for (var i = 0; i < 6; i++) Links[i] = new Typ_Link("", "");


/* Die folgende Funktion wird von der HTML-Seite aufgerufen, bevor der
   eigentliche Seiteninhalt gelesen wird. Im Browser wird eine unsichtbare
   Tabelle angelegt; die linke Spalte enthält eine Navigationsleiste, die
   rechte nimmt später den Seiteninhalt auf.

   Am Ende der HTML-Seite muß die Funktion NavigationEnde() (s. u.) aufgerufen
   werden, um die Tabelle ordnungsgemäß abzuschließen. */

function NavigationAnfang()
{
  /* Menü- und Verzeichnisbaum deklarieren */

  var Menuebaum = new Array();
  Menuebaum[0] = new Typ_Menue(0, 0, "Calvinianum", "/Willkommen.html");
  Menuebaum[1] = new Typ_Menue(1, 1, "Joh. Calvin", "/Calvin/index.html");
  Menuebaum[2] = new Typ_Menue(2, 1, "Bekenntnisse", "/Bekenntnis/index.html");
  Menuebaum[3] = new Typ_Menue(2, 2, "Niederländisches Glaubensbekenntnis", "/Bekenntnis/NGB/index.html");
  Menuebaum[4] = new Typ_Menue(2, 2, "Heidelberger Katechismus", "/Bekenntnis/HK/index.html");
  Menuebaum[5] = new Typ_Menue(2, 2, "Dordrechter Lehrsätze", "/Bekenntnis/DL/index.html");
  Menuebaum[6] = new Typ_Menue(3, 1, "Artikel", "/Artikel/index.html");
  Menuebaum[7] = new Typ_Menue(3, 2, "Fünf Punkte", "/Artikel/5_Punkte/index.html");
  Menuebaum[8] = new Typ_Menue(4, 1, "Predigten", "/Predigten/index.html");
  Menuebaum[9] = new Typ_Menue(5, 1, "Psalmen", "/Psalmen/index.html");

  /* Pfadangabe aus URI der Seite ermitteln */

  var Pfad = window.location.pathname;

  with (Pfad)
  {
    /* Pfadtrenner ermitteln (/ oder \) */

    var Pos1 = lastIndexOf("/");
    var Pos2 = lastIndexOf("\\");
    var Pfadtrenner = (Pos2 > Pos1) ? "\\" : "/";

    /* Führenden Schrägstrich entfernen sowie bei Bedarf Schrägstrich am Ende
       des Pfades ergänzen */

    Pfad = substring(1, length);
    if ((substring(length - 5, 5) != ".html") && (substring(length - 1, 1) != Pfadtrenner)) Pfad += Pfadtrenner;

    /* Pfad auftrennen; Elemente werden in einem Feld gespeichert */

    var Pfadelemente = split(Pfadtrenner);
  }

  /* Letzten Unterordner des Pfades ermitteln */

  var LetzterUnterordner = Pfadelemente[Pfadelemente.length - 2];

  /* Durch Vergleich zwischen Pfad und Menübaum den aktuellen Menüpunkt
     ermitteln */

  var GewaehlterMenuepunkt = 0;
  var GewaehlterHauptmenuepunkt = 0;
  for (i = 0; i < Menuebaum.length; i++)
  {
    var O = Menuebaum[i].Pfad.split("/");
    if (O[O.length - 2] == LetzterUnterordner)
    {
      GewaehlterMenuepunkt = i;
      GewaehlterHauptmenuepunkt = Menuebaum[i].Gruppe;
    }
  }

  /* Relativen Rückwärtspfad zur Startseite setzen */

  var Rueckpfad = "";
  for (i = 0; i < Menuebaum[GewaehlterMenuepunkt].Tiefe; i++)
    Rueckpfad += "../";

  with (document)
  {
    /* Seitenrand auf 0 setzen; die Ränder werden später über die Tabelle
       festgelegt */

    with (getElementsByTagName("body")[0].style)
    {
      // background = "#FFFFFF url(" + Rueckpfad + "Hintergrund.gif) repeat-y";
      margin = 0;
    }

    /* Tabellenanfang schreiben */

    write("<table cellspacing=\"0\" cellpadding=\"0\"");
    write("<colgroup>");
    write("<col width=\"155\">");
    write("<col width=\"*\">");
    write("</colgroup>");
    write("<tr style=\"vertical-align: top\">");
    write("<td id=\"Navig\">");

    write("<p><img src=\"" + Rueckpfad + "Calvinianum_Navig.gif\" width=\"130\" height=\"128\" alt=\"Calvinianum\"></p>");

    /* Alle Menüpunkte laut Menübaum schreiben */

    for (i = 0; i < Menuebaum.length; i++)
    {
      /* Die Formatvorlage eines Menüpunkts ist abhängig von der
         Verschachtelungstiefe */

      if (Menuebaum[i].Tiefe > 1) Format = "1";
      else Format = "0";

      /* Der gerade ausgewählte Menüpunkt wird besonders hervorgehoben */

      if (i == GewaehlterMenuepunkt)
      {
        Format += "\" id=\"gewaehlt";
        Rahmenfarbe = "#FFFFFF";
      }
      else Rahmenfarbe = "#FFCC33";

      /* Laut Formatvorlage werden untergeordnete Menüpunkte versteckt. Nur die
         zum gerade gewählten Menüpunkt gehörenden Einträge werden angezeigt.
         */

      if (Menuebaum[i].Gruppe == GewaehlterHauptmenuepunkt) Format += "\" style=\"display: block";

      /* führenden Schrägstrich aus Pfad entfernen */

      P = Menuebaum[i].Pfad;
      P = P.substring(1, P.length);

      /* Menüpunkt schreiben */

      write("<p class=\"Navig" + Format + "\" onmouseover=\"this.style.borderColor='" + Rahmenfarbe + "'\" onmouseout=\"this.style.borderColor='#990000'\">" + Menuebaum[i].Name.link(Rueckpfad + P) + "</p>");
    }

    /* Erste Tabellenspalte abschließen */

    write("</td>");

     /* Im folgenden werden die Meta-Tags der HTML-Seite nach Verweiseinträgen
        durchsucht. Diese werden für die Anzeige weiterer Navigationshilfen
        benötigt und daher in das ganz oben definierte Feld eingetragen. */

    var L = getElementsByTagName("link");
    for (i = 0; i < L.length; i++) with (L[i])
    {
      switch (getAttribute("rel"))
      {
        case "start":
          Links[0] = new Typ_Link(getAttribute("href"), getAttribute("title"));
          break;
        case "chapter":
          Links[1] = new Typ_Link(getAttribute("href"), getAttribute("title"));
          break;
        case "section":
          Links[2] = new Typ_Link(getAttribute("href"), getAttribute("title"));
          break;
        case "subsection":
          Links[3] = new Typ_Link(getAttribute("href"), getAttribute("title"));
          break;
        case "prev":
          Links[4] = new Typ_Link(getAttribute("href"), "&larr;&nbsp;" + getAttribute("title"));
          break;
        case "next":
          Links[5] = new Typ_Link(getAttribute("href"), getAttribute("title") + "&nbsp;&rarr;");
          break;
      }
    }

    /* Beginn des Hauptfensters */

    write("<td id=\"Haupt\">");

    /* Wenn erforderlich, schreibe Verweise auf übergeordnete Seiten */

    if (Links[0].Link != "")
    {
      write("<p class=\"Wegweiser\">");
      write(Links[0].Titel.link(Links[0].Link));
      for (i = 1; i <= 3; i++) if (Links[i].Link != "") write(" &rarr; " + Links[i].Titel.link(Links[i].Link));
      write("</p>");
    }
  }
}


/* Diese Funktion schreibt noch einige Navigationshilfen und beendet
   anschließend die in NavigationAnfang() begonnene Tabelle. Die Funktion wird
   am Ende der HTML-Seite aufgerufen. */

function NavigationEnde()
{
  with (document)
  {
    /* Wenn erforderlich, schreibe Vorgänger-Nachfolger-Verweise */

    if ((Links[4].Link != "") || (Links[5].Link != ""))
    {
      write("<table class=\"Wegweiser\">");
      write("<colgroup><col span=\"2\" width=\"50%\"></colgroup><tr>");
      write("<td id=\"WegZurueck\">");
      if (Links[4].Link != "") write("<a href=\"" + Links[4].Link + "\" title=\"zurückblättern\">" + Links[4].Titel + "</a>");
      write("</td>");
      write("<td id=\"WegVor\">");
      if (Links[5].Link != "") write("<a href=\"" + Links[5].Link + "\" title=\"vorblättern\">" + Links[5].Titel + "</a>");
      write("</td>");
      write("</tr></table>");
    }

    /* Schreibe Autorinformationen */

    write("<address>");
    write("&copy; 1999&ndash;2004 Carsten Linke<br>");
    write("<a href=\"http://www.calvinianum.de/\">http://www.calvinianum.de</a><br>");
    write("<a href=\"mailto&#x3A;webmaster&#x40;calvinianum.de\">webmaster&#x40;calvinianum.de</a>");
    write("</address>");

    /* Ende des Hauptfensters und der gesamten Formatierungstabelle */

    write("</td>");
    write("</tr>");
    write("</table>");
  }
}