/*
 Formular.js - Formular

 Implementiert die Klasse 'Formular' und stellt sie als Objekt zur Verfügung. Dabei werden den im Array 'Felder'
 deklarierten Formularfeldern die deklarierten Funktionen für die Ereignisbehandlung der Ereignisse 'onFocus', 'onChange'
 und 'onBlur' zugewiesen. Misslingt das Ereignis 'onBlur', wird die deklarierte Fehlermeldung ausgegeben und der
 Eingabefokus in das fehlerhafte Feld gesetzt. Das Ereignis 'onLoad' des Body-Tags muss mit der Methode 'initialisieren'
 reagieren, das Ereignis 'onSubmit' des Form-Tags mit der Methode 'validieren' (return Formular.validieren()). Den
 Funktionen für die Ereignisbehandlung werden die Parameter 'Ereignis', 'Elementindex' und 'Feldindex' zur Verfügung
 gestellt. Der Parameter 'Ereignis' liefert das auslösende Ereignis (onFocus|onChange|onBlur), der Parameter
 'Elementindex' den Index des Formularelementes und der Parameter 'Feldindex' den Index des Arrays 'Felder'. Die
 Ereignisfunktionen müssen die Werte 'true' für gelungen oder 'false' für misslungen liefern. Es können eigene
 Ereignisfunktionen undoder die von der Klasse zur Verfügung gestellten Methoden zur Datenvalidierung verwendet werden.
 Die Methoden zur Datenvalidierung reagieren jedoch nur auf das Ereignis 'onBlur'.

 Formularfelddeklarationen
 - Formular.Felder[in integer Index] = new Array('[Formularfeldname]',[Ereignisfunktion],'[Fehlermeldung]')

 Methoden
 - initialisieren: Formular initialiseren
 - out boolean validieren: Alle Felder des Formulares validieren
 - out boolean istLeer: Feld ist leer
 - out boolean istNichtLeer: Feld ist nicht leer
 - out boolean einWertAusgewaehlt: Eine Option ausgewaehlt (einzeilige Dropdown-Listenfelder ohne Standardwert)
 - out boolean einOderMehrereWerteAusgewaehlt: Ein oder mehrere Optionen ausgewaehlt (mehrzeilge Listenfelder)
 - out boolean enthaeltEMailadresse: Feld enthält E-Mailadresse

 Geschichte
 24.01.1999, MJung, Erstellung
 26.09.2003, MJung, Neue Methode 'einWertAusgewaehlt'

 Copyright 2003 dezember und juli gmbh (Schweiz). Alle Rechte vorbehalten
*/


//Installieren

Formular = new FormularKlasse()


//Konstruktor

function FormularKlasse()
{

 //Eigenschaften
 this.Felder = new Array()

 //Methoden
 this.initialisieren = FormularInitialisieren
 this.validieren = FormularValidieren

 //Methoden zur Datenvalidierung
 this.istLeer = FormularIstLeer
 this.istNichtLeer = FormularIstNichtLeer
 this.einWertAusgewaehlt = FormularEinWertAusgewaehlt
 this.einOderMehrereWerteAusgewaehlt = FormularEinOderMehrereWerteAusgewaehlt
 this.enthaeltEMailadresse = FormularEnthaeltEMailadresse

 //Variablen
 this.AktuellesFeld = ''
 this.onFocusFunktionsvariable = new Array()
 this.onChangeFunktionsvariable = new Array()
 this.onBlurFunktionsvariable = new Array()

 //Private Methoden
 this.sucheFeldindex = FormularSucheFeldindex
 this.onFocus = FormularOnFocus
 this.onChange = FormularOnChange
 this.onBlur = FormularOnBlur
}


//Initialisieren

function FormularInitialisieren()
{

 var Elementindex,Feldindex

 //Ereignissen der angegebenen Feldern Funktionen zuordnen
 for (Elementindex = 0; Elementindex < document.forms[0].elements.length; Elementindex = Elementindex + 1)
 {
  if ((Feldindex = this.sucheFeldindex(document.forms[0].elements[Elementindex].name)) >= 0)
  {
   this.onFocusFunktionsvariable[Feldindex] = new Function('return Formular.onFocus('+Elementindex+','+Feldindex+')')
   document.forms[0].elements[Elementindex].onfocus = this.onFocusFunktionsvariable[Feldindex]
   this.onChangeFunktionsvariable[Feldindex] = new Function('return Formular.onChange('+Elementindex+','+Feldindex+')')
   document.forms[0].elements[Elementindex].onchange = this.onChangeFunktionsvariable[Feldindex]
   this.onBlurFunktionsvariable[Feldindex] = new Function('return Formular.onBlur('+Elementindex+','+Feldindex+')')
   document.forms[0].elements[Elementindex].onblur = this.onBlurFunktionsvariable[Feldindex]
  }
 }
}


//Validieren

function FormularValidieren()
{

 var i

 for (i = 0; i < this.Felder.length; i = i + 1)
 {
  if (this.onBlurFunktionsvariable[i] == null) continue //Mangel 5 umgehen
  if (this.onBlurFunktionsvariable[i]() == false) return false
 }
 return true
}


//Suche Feldindex

function FormularSucheFeldindex(Feldname)
{

 var i

 for (i = 0; i < this.Felder.length; i = i + 1)
  if (this.Felder[i][0] == Feldname) return i
 return -1
}


//OnFocus behandeln

function FormularOnFocus(Elementindex,Feldindex)
{

 if (this.AktuellesFeld == '') this.AktuellesFeld = this.Felder[Feldindex][0]
 if (this.AktuellesFeld != this.Felder[Feldindex][0]) return true
 return this.Felder[Feldindex][1]('onFocus',Elementindex,Feldindex)
}


//OnChange behandeln

function FormularOnChange(Elementindex,Feldindex)
{

 if (this.AktuellesFeld == '') this.AktuellesFeld = this.Felder[Feldindex][0]
 if (this.AktuellesFeld != this.Felder[Feldindex][0]) return true
 return this.Felder[Feldindex][1]('onChange',Elementindex,Feldindex)
}


//OnBlur behandeln

function FormularOnBlur(Elementindex,Feldindex)
{

 if (this.AktuellesFeld == '') this.AktuellesFeld = this.Felder[Feldindex][0]
 if (this.AktuellesFeld != this.Felder[Feldindex][0]) return true
 if (this.Felder[Feldindex][1]('onBlur',Elementindex,Feldindex) == false)
 {
  alert(this.Felder[Feldindex][2])
  document.forms[0].elements[Elementindex].focus()
  return false
 }
 else this.AktuellesFeld = ''
 return true
}


//Datenvalidierungsfunktionen

function FormularIstLeer(Ereignis,Elementindex)
{

 if (Ereignis == 'onBlur' && document.forms[0].elements[Elementindex].value != '') return false
 return true
}


function FormularIstNichtLeer(Ereignis,Elementindex)
{

 if (Ereignis == 'onBlur' && document.forms[0].elements[Elementindex].value == '') return false
 return true
}


function FormularEinWertAusgewaehlt(Ereignis,Elementindex)
{

 var i
 var z = 0

 if (Ereignis == 'onBlur' && document.forms[0].elements[Elementindex].selectedIndex < 1) return false
 return true
}


function FormularEinOderMehrereWerteAusgewaehlt(Ereignis,Elementindex)
{

 var i
 var z = 0

 if (Ereignis == 'onBlur' && document.forms[0].elements[Elementindex].selectedIndex < 0) return false
 return true
}


function FormularEnthaeltEMailadresse(Ereignis,Elementindex)
{

 var EMail = /[a-zA-Z0-9_\.]{2,}@[a-zA-Z0-9-_\.]{3,}\.[a-zA-Z0-9_\.]{2,}/

 if (Ereignis == 'onBlur' && EMail.test(document.forms[0].elements[Elementindex].value) == false) return false
 return true
}
