/* ***************************************************************************
  Psalm.js

  Projekt Calvinianum, http://www.calvinianum.de

  (C) 1999-2003 Carsten Linke

  Dieses Skript stellt ein Notenblatt mit Melodie und Text dar.

*************************************************************************** */

/* Definition eines Objekttyps mit vier Einträgen:
   1. die Tonart des Liedes
   2. die Notenwerte
   3. der Text
   4. der/die zugehörige(n) Bibelvers(e) */

function Notenblatt (Tonart, Notenzeilen, Textzeilen, Vers)
{
  this.Tonart = Tonart;
  this.Notenzeilen = Notenzeilen;
  this.Textzeilen = Textzeilen;
  this.Vers = Vers;
}

/* Deklaration einer Objektvariablen zur Verwendung auf der HTML-Seite und im Skript */

var NB = new Notenblatt

/* Diese Funktion wird von der HTML-Datei aufgerufen. */

function ZeigeNotenblatt (NB)
{

  /* Variablendeklaration */

  var ZeilenZaehler;
  var AnzahlZeilen = NB.Notenzeilen.length - 1;
  var Position;
  var Noten;
  var N;
  var AnzahlPositionen;
  var PauseAmEnde;
  var Silben;
  var S;
  var PsalmNr;
  var VersVerweis;
  var u = document.URL;

  /* Eine Tabelle wird angelegt */

  document.writeln("<table class=\"Noten\" cellspacing=\"0\" cellpadding=\"0\">");

  /* Die Notenwerte liegen als Feld vor; jedes Feldelement enthält die Notenwerte
     einer Zeile. Die Zeilen werden einer Schleife durchlaufen. */

  for (ZeilenZaehler = 1; ZeilenZaehler <= AnzahlZeilen; ZeilenZaehler++)
  {

    /* Für jede Notenzeile wird eine Tabellenzeile angelegt */

    with (document)
    {
      writeln("<tr style=\"background: url('Noten/Linien.gif') top repeat-x\">");

      /* Der Notenschlüssel und die Vorzeichen werden dargestellt. Die
         Tonarten C-Dur und a-moll besitzen keine Vorzeichen. */

      if (ZeilenZaehler == 1)
        writeln("<td style=\"text-align: left\"><img src=\"Noten/Schluessel.gif\" width=\"25\" height=\"51\"></td>");
      else
        writeln("<td></td>");

      write("<td>");
      if (NB.Tonart != "C_a")
        write("<img src=\"Noten/Tonart_", NB.Tonart, ".gif\" height=\"51\">");
      write("<img src=\"../nichts.gif\" width=\"18\" height=\"0\">");
      writeln("</td>");

      /* Jede Note und die zugehörige Textsilbe werden in einer Spalte
         dargestellt. Da die Länge der Zeilen variiert, wird für jede Zeile
         eine eigene Tabelle angelegt. Sie besitzt zwei Zeilen, die erste für
         die Noten, die zweite für den Text. */

      writeln("<td><table cellspacing=\"0\" cellpadding=\"0\"><tr>");

      /* Die Noten in einer Zeile sind durch Leerzeichen voneinander getrennt.
         Die Zeile wird zerlegt, und die Noten werden in einem Feld
         gespeichert. */

      Noten = NB.Notenzeilen[ZeilenZaehler].split(" ");
      AnzahlPositionen = Noten.length - 1;
      if (Noten[AnzahlPositionen].charAt(0) == "P")
      {
        AnzahlPositionen--;
        PauseAmEnde = true;
      }
      else PauseAmEnde = false;

      Silben = NB.Textzeilen[ZeilenZaehler].split(" ");

      /* Das Feld mit den Noten der aktuellen Zeile wird durchlaufen */

      for (Position = 0; Position <= AnzahlPositionen; Position++)
      {
        N = Noten[Position];

        /* Die innere Tabelle wird gefüllt. Jeder Ton wird in einer eigenen
           Spalte dargestellt. */

        write("<td>");

        /* Der aktuelle Ton kann "leer" sein (else-Zweig). Dadurch wird die Darstellung
           eines Zwischenraums in der Zeile bewirkt. */

        if (N != "")
        {
          /* Das Notenzeichen wird dargestellt. */

          write("<img src=\"Noten/", N, ".gif\" width=\"18\" height=\"51\">");
        }
        else write("<img src=\"../nichts.gif\" width=\"9\" height=\"0\">");
      }
      writeln("</td></tr>");

      writeln("<tr style=\"vertical-align: bottom\">");

      for (AktuelleSilbe = 0; AktuelleSilbe <= AnzahlPositionen; AktuelleSilbe++)
      {
        S = Silben[AktuelleSilbe];
        if (AktuelleSilbe > 0)
          if (Silben[AktuelleSilbe - 1].indexOf("-") == -1)
            S = "&nbsp;" + S;

        S = S.replace(/\[/, "<span class=\"Kpt\">");
        S = S.replace(/\]/, "</span>");

        write("<td>", S, "</td>");
      }

      writeln("</tr></table></td>");

      /* In der dritte Spalte der äußeren Tabelle werden gegebenenfalls ein
         Pausenzeichen sowie ein Abstand dargestellt. */

      if (ZeilenZaehler < AnzahlZeilen)
      {
        write("<td>");
        if (PauseAmEnde)
          write("<img src=\"Noten/", Noten[AnzahlPositionen + 1], ".gif\" width=\"18\" height=\"51\">");
        write("<img src=\"../nichts.gif\" width=\"18\" height=\"0\">");
        write("</td>");
      }

      /* Am Ende der letzten Zeile werden der Schlußstrich und der Versverweis
         dargestellt. Hierfür wird noch die Nummer des Psalms ermittelt.
         Außerdem müssen Buchstaben aus dem Versverweis entfernt werden, da
         diese nicht ausgewertet werden können (z. B. aus "1b-2" wird "1-2"
         gemacht). */

      else
      {
        write("<td style=\"text-align: right\">");
        write("<img src=\"Noten/Ende.gif\" width=\"7\" height=\"51\"><br>");

        u = u.substring(u.lastIndexOf("Ps_") + 3, u.length - 5);
        u = u.replace(/\D+/, "");
        PsalmNr = u.replace(/^0+/, "");

        VersVerweis = NB.Vers.replace(/[ab]/, "");
        VersVerweis = VersVerweis.replace(/[ab]/, "");
        NB.Vers = NB.Vers.replace(/-/, "&ndash;");

        write("<span class=\"Vers\"><a href=\"javascript:zeige('Ps ", PsalmNr, ",", VersVerweis, "')\">V. ", NB.Vers, "</a></span>");
        write("</td>");
      }
      writeln("</tr>");
    }
  }
  document.writeln("</table><p></p>");
}