//Installieren
Sprache = "D"
Datenbank = new DatenbankKlasse()


//Konstruktor
function DatenbankKlasse()
{

 //Eigenschaften
 this.Tabellenfelder = new Array()
 this.Datensatz = new Array()
 this.Spaltentrennzeichen = "$"
 this.Zeilentrennzeichen = "#"

 //Methoden
 this.erzeugeTabelle = DatenbankErzeugeTabelle
 this.oeffneTabelle = DatenbankOeffneTabelle
 this.schliesseTabelle = DatenbankSchliesseTabelle
 this.zeigeTabelle = DatenbankZeigeTabelle
 this.erzeugeDatensatz = DatenbankErzeugeDatensatz
 this.loescheDatensatz = DatenbankLoescheDatensatz
 this.liesDatensatz = DatenbankLiesDatensatz
 this.schreibeDatensatz = DatenbankSchreibeDatensatz

 //Variablen
 this.Tabelle = new Array()
 this.NameOffeneTabelle = ""
 this.AnzFreieDatensaetze = 0

 //Text
 this.Text = new Array()
 this.Text[0] = new Array()
 this.Text[0]["D"] = "Eintrag"
 this.Text[0]["E"] = "Item"
 this.Text[1] = new Array()
 this.Text[1]["D"] = "l&ouml;schen"
 this.Text[1]["E"] = "delete"
}


//Erzeuge Tabelle
function DatenbankErzeugeTabelle(Name)
{

 var Spalte
 var Tabellendaten=""

 //Tabellenfelder definieren
 this.Tabelle[0] = new Array()
 for (Spalte=0;Spalte<this.Tabellenfelder.length;Spalte=Spalte+1)
  this.Tabelle[0][Spalte] = this.Tabellenfelder[Spalte]

 //Neue Tabelle anlegen
 Cookie.schreibeElement(Name,this.Tabellenfelder.join(this.Spaltentrennzeichen))

 //Abschluss
 this.NameOffeneTabelle = Name
 this.AnzFreieDatensaetze = 0
 return true
}


//Öffne Tabelle
function DatenbankOeffneTabelle(Name)
{

 var Startposition,Position,Endposition
 var Tabellenzeile,Zeile,Spalte

 //Tabellendaten einlesen
 if (Cookie.liesElement(Name) == false) return false

 //Erste Tabellenzeile bestimmen
 Endposition = Cookie.ElementWert.indexOf(this.Zeilentrennzeichen,0)
 if (Endposition == -1)
  Tabellenzeile = Cookie.ElementWert.substr(Startposition)
 else
  Tabellenzeile = Cookie.ElementWert.substring(Startposition,Endposition)

 //Tabellenfelder bestimmen
 this.Tabelle[0] = new Array()
 Position = 0
 Spalte = 0
 while ((Endposition = Tabellenzeile.indexOf(this.Spaltentrennzeichen,Position)) != -1)
 {
  this.Tabelle[0][Spalte] = Tabellenzeile.substring(Position,Endposition)
  Spalte = Spalte + 1
  Position = Endposition + 1
 }
 this.Tabelle[0][Spalte] = Tabellenzeile.substr(Position)

 //Tabellendaten bestimmen
 Startposition = 0
 Zeile = 1
 while ((Startposition = Cookie.ElementWert.indexOf(this.Zeilentrennzeichen,Startposition)) != -1)
 {

  //Tabellenzeile einlesen
  Startposition = Startposition + 1
  Endposition = Cookie.ElementWert.indexOf(this.Zeilentrennzeichen,Startposition)
  if (Endposition == -1)
   Tabellenzeile = Cookie.ElementWert.substr(Startposition)
  else
   Tabellenzeile = Cookie.ElementWert.substring(Startposition,Endposition)

  //Werte bestimmen
  this.Tabelle[Zeile] = new Array()
  Position = 0
  Spalte = 0
  while ((Endposition = Tabellenzeile.indexOf(this.Spaltentrennzeichen,Position)) != -1)
  {
   this.Tabelle[Zeile][Spalte] = Tabellenzeile.substring(Position,Endposition)
   Spalte = Spalte + 1
   Position = Endposition + 1
  }
  this.Tabelle[Zeile][Spalte] = Tabellenzeile.substr(Position)
  Zeile = Zeile + 1
 }

 //Tabellenfelder initialisieren und erster Datensatz lesen
 if (this.liesDatensatz(0) == false) return false
 for (Spalte=0;Spalte<this.Datensatz.length;Spalte=Spalte+1)
  this.Tabellenfelder[Spalte] = this.Datensatz[Spalte]
 this.liesDatensatz(1)

 //Abschluss
 this.NameOffeneTabelle = Name
 this.AnzFreieDatensaetze = 0
 return true
}


//Schliesse Tabelle
function DatenbankSchliesseTabelle()
{

 var Zeile
 var Tabellendaten=""

 for (Zeile=0;this.liesDatensatz(Zeile)==true;Zeile=Zeile+1)
  Tabellendaten = Tabellendaten + this.Datensatz.join(this.Spaltentrennzeichen) + this.Zeilentrennzeichen
 Cookie.schreibeElement(this.NameOffeneTabelle,Tabellendaten.substring(0,Tabellendaten.length-1))
 this.NameOffeneTabelle = ""
 return true
}


//Zeige Tabelle
function DatenbankZeigeTabelle(Bearbeitung,Totalspalte)
{

 var Zeile,Spalte,Total=0.0

 //Tabelle einleiten
 document.write('<table border=0 cellpadding=0 cellspacing=0>')

 //Spaltenüberschriften anzeigen
 document.write('<tr class=DatenbankSpaltenueberschrift><td width=10>&nbsp;</td>')
 for (Spalte=0;Spalte<this.Tabellenfelder.length;Spalte=Spalte+1)
  if (isNaN(this.Datensatz[Spalte]))
   document.write('<td><b>'+this.Tabellenfelder[Spalte]+'</b></td><td width=10>&nbsp;</td>')
  else
   document.write('<td align=right><b>'+this.Tabellenfelder[Spalte]+'</b></td><td width=10>&nbsp;</td>')
 if (Bearbeitung != null) document.write('<td><b>'+this.Text[0][Sprache]+'</b></td><td width=10>&nbsp;</td>')
 document.write('</tr>')

 //Zeilen anzeigen
 for (Zeile=1;this.liesDatensatz(Zeile)==true;Zeile=Zeile+1)
 {
  if (Math.round(Zeile/2)*2 == Zeile)
   document.write('<tr class=DatenbankZeileFarbig><td width=10>&nbsp;</td>')
  else
   document.write('<tr><td width=10>&nbsp;</td>')
  for (Spalte=0;Spalte<this.Datensatz.length;Spalte=Spalte+1)
  {
   if (isNaN(this.Datensatz[Spalte]))
    document.write('<td>')
   else
    document.write('<td align=right>')
   if (this.Datensatz[Spalte] == "")
    document.write('&nbsp;</td><td>&nbsp;</td>')
   else
    document.write(this.Datensatz[Spalte]+'</td><td>&nbsp;</td>')
  }
  if (Bearbeitung != null && Bearbeitung.indexOf("Loeschen") != -1) document.write('<td><a href=JavaScript:Datenbank.loescheDatensatz('+Zeile+');Datenbank.schliesseTabelle();location.reload()>'+this.Text[1][Sprache]+'</a></td><td>&nbsp;</td>')
  if (Totalspalte >= 0) Total = Total + parseFloat(this.Datensatz[Totalspalte])
  document.write('</tr>')
 }

 //Totalspalte anzeigen
 if (Totalspalte >= 0)
 {
  Total = "" + Math.round(Total * 100) / 100
  if (Total.indexOf(".",0) == -1) Total = Total + ".00"
  else if (Total.length - Total.indexOf(".",0) == 2) Total = Total + "0"
  else if (Total.length - Total.indexOf(".",0) > 3) Total = Total.substring(0,Total.indexOf(".",0)+3)
  document.write('<tr class=DatenbankTotalzeile><td width=10>&nbsp;</td>')
  for (Spalte=0;Spalte<this.Datensatz.length;Spalte=Spalte+1)
   if (Spalte == Totalspalte)
    document.write('<td align=right><b>'+Total+'</b></td><td width=10>&nbsp;</td>')
   else
    document.write('<td>&nbsp;</td><td width=10>&nbsp;</td>')
  if (Bearbeitung != null) document.write('<td>&nbsp;</td><td>&nbsp;</td>')
  document.write('</tr>')
 }

 //Tabelle abschliessen
 document.write('</table>')
}


//Erzeuge Datensatz
function DatenbankErzeugeDatensatz()
{

 var Spalte

 if (this.AnzFreieDatensaetze == 0) this.Tabelle[this.Tabelle.length] = new Array()
 for (Spalte=0;Spalte<this.Datensatz.length;Spalte=Spalte+1)
  if (this.AnzFreieDatensaetze == 0)
   this.Tabelle[this.Tabelle.length-1][Spalte] = this.Datensatz[Spalte]
  else
   this.Tabelle[this.Tabelle.length-this.AnzFreieDatensaetze][Spalte] = this.Datensatz[Spalte]
 if (this.AnzFreieDatensaetze > 0) this.AnzFreieDatensaetze = this.AnzFreieDatensaetze - 1
 return true
}


//Lösche Datensatz
function DatenbankLoescheDatensatz(Index)
{

 var Zeile,Spalte

 for (Zeile=Index+1;Zeile<this.Tabelle.length;Zeile=Zeile+1)
  for (Spalte=0;Spalte<this.Tabelle[Zeile].length;Spalte=Spalte+1)
   this.Tabelle[Zeile-1][Spalte] = this.Tabelle[Zeile][Spalte]
 this.AnzFreieDatensaetze = this.AnzFreieDatensaetze + 1
 return true
}


//Lies Datensatz
function DatenbankLiesDatensatz(Index)
{

 var Spalte

 if (Index >= this.Tabelle.length - this.AnzFreieDatensaetze) return false
 for (Spalte=0;Spalte<this.Tabelle[Index].length;Spalte=Spalte+1)
  this.Datensatz[Spalte] = this.Tabelle[Index][Spalte]
 return true
}


//Schreibe Datensatz
function DatenbankSchreibeDatensatz(Index)
{

 var Spalte

 for (Spalte=0;Spalte<this.Datensatz.length;Spalte=Spalte+1)
  this.Tabelle[Index][Spalte] = this.Datensatz[Spalte]
 return true
}
