// JavaScript Document
// Dieses Script prueft ein beliebiges Formular auf die Gueltigkeit der eingegebenen Daten.
// Es wird fuer jedes Formular angewendet werden. Es beinhaltet zwei Funktionen.

// In dieser Variable werden die voreingestellten Werte der einzelnen Formularelemente gespeichert.
var elementWerte = new Array(); 
// Hier wird gespeichert, ob die voreingestellten Werte schon gelesen wurden. Ist anfangs natuerlich FALSE
var elementWerteGelesen = false;
// In dieser Variable wird gespeichert, welches Vorzeichen die Namen der Felder haben, die ausgefuellt werden
// muessen. Den Feldern, die nicht unbedingt ausgefuellt werden muessen fehlt dieses Vorzeichen.
var impDef = "IMP";

function checkForm(formularName) {
// Diese Funktion prueft die einzelnen Werte auf Gueltigkeit. Aufgerufen wird diese Funktion mit der
// Uebergabe des Formularnamens. Anschliessend wird eine lokale Variable mit dem JavaScript-Objekt des
// Formulars erstellt (spart Tipperei).

// formularName = document[formularName];
//   formularName = 
// Nur wenn bereits die voreingestellten Werte gelesen wurden kann davon ausgegangen werden, dass Daten eingegeben
// wurden. Wird naemlich das Formular ohne die Eingabe von Daten abgesendet, wurde auf kein Feld geklickt. Die
// Variable ELEMENTWERTEGELESEN wird aber beim ersten Klicken auf ein Feld auf TRUE gesetzt - also ein eindeutiges
// Zeichen fuer die Eingabe von Daten.
// if(elementWerteGelesen) {
// Eine lokale Variable, die nur dann mit einem sinnvollen Wert belegt wird, wenn ein ungueltiger Wert in einem
// Feld gefunden wurde. Anfangs steht diese Variable auf 99 - das ist ein wahlloser Wert. Wichtig ist nur, dass dieser
// Wert mit der Abfrage weiter unten uebereinstimmt.
  jumpTo = 99;
  
// Die Anzahl der Elemente im Formular wird ausgelesen
  anzahlElemente = formularName.elements.length;
// Nun wird in einer Schleife jedes einzelne Element geprueft
  for (i=0; i<anzahlElemente; i++) {
// Spart Tipperei: Der Bezeichner fuer das jeweilige Element wird auf eine Variable gelegt
    elementName = formularName.elements[i];
// Ist das Feld ein wichtiges, so besitzt es ein Vorzeichen (weiter oben definiert). Ist das der Fall,
// werden die Pruefanweisungen ausgefuehrt, ansonsten nicht.
	if(elementName.name.substr(0,impDef.length) == impDef) {
// Handelt es sich bei dem Feld um ein eMail-Feld, so muss sein Name 'email' sein. Es wird geprueft,
// ob sich ein @ und ein Punkt in der Eingabe befinden (noetig fuer eine gueltige eMail-Adresse).
    if( (elementName.name.substr(impDef.length,elementName.name.length) == "image") ||
        (elementName.name.substr(impDef.length,elementName.name.length) == "file") ) {
        if( (formularName[elementName.name.substr(impDef.length,elementName.name.length)+"_old"].value == "") && 
            (elementName.value == "") ) {
          alert("Keine Grafik, bzw. Datei angegeben.");
          jumpTo = i;
		      i=anzahlElemente+1;
        }
    }

// Handelt es sich bei dem Feld um ein eMail-Feld, so muss sein Name 'email' sein. Es wird geprueft,
// ob sich ein @ und ein Punkt in der Eingabe befinden (noetig fuer eine gueltige eMail-Adresse).
    else if( (elementName.name.substr(impDef.length,elementName.name.length) == "email") ||
        (elementName.name.substr(impDef.length,elementName.name.length) == "user_mail")) {
	    if( (elementName.value.indexOf("@")== -1) ||
	        (elementName.value.indexOf(".")== -1) ) {
// Befindet eines der genannten Zeichen nicht in der Eingabe, wird ein ALERT-Fenster geoeffnet, es wird die
// Nummer des Elements gespeichert, damit nach Verlassen der Schleife (durch Setzem des Zaehlers auf einen
// hoeheren Wert als der Grenzwert) dorthin gesprungen werden kann
  		  alert("Bitte eine gültige eMail-Adresse angeben.");
		    jumpTo = i;
		    i=anzahlElemente+1;
	    }
    }
    else if(elementName.name.substr(impDef.length,elementName.name.length) == "password1") {
      if(elementName.value!='') {
        password1=i;
        if(elementName.value.search(/\W/)>-1) {
          alert('Bitte nur Buchstaben und Zahlen verwenden');
  		    jumpTo = i;
  		    i=anzahlElemente+1;
        }  
      } else password1=-1;
    }
    else if(elementName.name.substr(impDef.length,elementName.name.length) == "password2") {
      if((typeof password1)=='undefined') {
        alert('FEHLER IM FORMULAR\n\nPASSWORD1 NICHT VORHANDEN ODER NACH PASSWORD2.');
        jumpTo = i;
        i=anzahlElemente+1;
      } else if(password1>=0) {
        if(elementName.value != formularName.elements[password1].value) {
          alert('Die zweite Passworteingabe unterscheidet sich von der ersten.');
		      jumpTo = i;
		      i=anzahlElemente+1;
        }
      }  
    }
	  else {
// Handelt es sich nicht um ein eMail-Feld wird geprueft, ob nichts in das Feld eingegeben wurde,
// oder ob der Wert, der sich im Feld befindet dem Wert entspricht, der anfangs beim Laden des Formulars drin war.
// (das ist ja in ELEMENTWERTE gespeichert.
	    if( (elementName.value == "") ||
	        (elementName.value == elementWerte[i]) ) {
// Trifft eine der beiden Zustaende ein, so wird wie beim eMail-Feld eine Warnmeldung ausgegeben, die Schleife verlassen
// und die Nummer des Elements gespeichert
		    alert("Fehlerhafte oder falsche Angaben.");
		    jumpTo = i;
		    i=anzahlElemente+1;
	    }
      }
    }
  }
// Wurde ein fehlerhafter Wert gefunden, so wurde die Nummer des Feldes in JUMPTO gespeichert. Ansonsten ist der
// anfangs definierte Wert dort noch drin. Ist also ein anderer Wert gespeichert, so wird der Cursor auf das Feld
// mit den fehlerhaften Daten fokussiert
  if(jumpTo != 99) {
    formularName.elements[jumpTo].focus();
    return false;
  }
  else {
    for (i=0; i<anzahlElemente; i++) {
      elementName = formularName.elements[i];
      if(elementName.name.substr(0,impDef.length) == impDef) {
        elementName.name = elementName.name.substring(impDef.length,elementName.name.length);
      }
    }
    // formularName.submit();
    return true;
  }
// }
// else {
// Wurde das Formular ohne Eingabe von Daten abgeschickt, so gibt es eine Warnmeldung und der Cursor wird auf das erste
// Feld gesetzt.
//   alert("Sie haben vergessen, Daten einzugeben.");
//   formularName.elements[0].focus();
//   return false;
// }
}

function loescheInhalt(elementName) {
// Diese Funktion loescht den voreingestellten Wert von TEXT- und TEXTAREA-Feldern und speichert ausserdem beim ersten
// Aufruf die voreingestellten Inhalte der einzelnen Felder (mittels VALUE-Attribut angegeben). Dazu wird ersteinmal die
// Gesamtanzahl der Elemente des Formulars gespeichert, in welchem sich das Lement befindet, von dem aus diese Funktion
// aufgerufen wurde.
 anzahlElemente = elementName.form.elements.length;
  
  if(!elementWerteGelesen) {
// Nur wenn die Werte noch nicht gelesen wurden, sollen die Werte gespeichert werden.
    for(i=0; i<anzahlElemente; i++) {
// In das Array ELEMENTWERTE werden die einzelnen Elementwerte gespeichert.
      elementWerte[i] = elementName.form.elements[i].value;
    }
// Anschliessend wird ELEMENTWERTEGELESEN auf TRUE gesetzt, damit dieses speichern nicht nocheinmal durchgefuehrt wird
	elementWerteGelesen = true;
  }
  
// Nun soll der voreingestellte Wert im Feld geloescht werden. Um das zu tun, soll aber geprueft werden, ob es sich
// ueberhaupt um ein TEXT- oder TEXTAREA-Feld handelt, und ob sich darin auch noch die voreingestellten Werte befinden.
// Erstmal muss die Nummer des Elements herausgefunden werden, von dem aus diese Funktion aufgerufen wurde. Das ist
// noetig, um den entsprechenden Wert in ELEMENTWERTE auszulesen
    for(i=0; i<anzahlElemente; i++) {
// Jedes Element wird in einer Schleife geprueft, ob sein Name mit dem des aufrufenden Elements uebereinstimmt. Ist
// das der Fall wird diese Nummer in ELEMENTID gespeichert.
      if(elementName.name == elementName.form.elements[i].name) {
	    elementID = i;
		i = anzahlElemente+1;
	  }
    }

// Nur bei TEXT- und TEXTAREA-Feldern sollen die voreingestellten Werte geloescht werden.
  if( (elementName.type == "text") ||
      (elementName.type == "textarea") ){
  
// Nur wenn der Elementinhalt der gleiche wie der voreingestellte Wert ist, soll er geloescht werden. Das verhindert,
// das einmal gemachte Eingaben nicht beim Klick auf das Feld geloescht werden.
	  if(elementName.value == elementWerte[elementID]) {
	     elementName.value = "";
	  }
  }
}

function checkBoxSelect(boxName,formularName) {
// Diese Funktion imitiert eine Checkbox. Die sehen meist ziemlich bloed aus, aber ueber einen verstecktes
// Formularfeld kann das ebenso geloest werden.
// Zunaechst wird estmal wie bei allen buttons die Prueffunktion von oben ausgefuehrt.

  loescheInhalt(document[formularName][boxName]);
  
// Damit das Script auch auf jeder Seite funktioniert, wird erstmal das Verzeichnis des Zunaechst geladenen Bildes
// gelesen. Die beiden Bilder muessen immer CHECK_OFF.GIF und CHECK_ON.GIF heissen. Anschliessend werden zwei neue
// Elemente definiert, die die Daten fuer die Bilder beinhalten. Damit kann JavaScript die Bilder dynamisch austauschen.
  verzeichnis = document[boxName+"IMG"].src.substring(0,document[boxName+"IMG"].src.lastIndexOf("check"));

  checkOff     = new Image();
  checkOff.src = verzeichnis + "check_off.gif";
  checkOn      = new Image();
  checkOn.src  = verzeichnis + "check_on.gif";

  
// Ist das derzeit angezeigte Bild das CHECK_ON-Bild, so setze es auf CHECK_OFF. Ausserdem wird der versteckte Button
// noch auf 'nicht ausgewaehlt' gesetzt. Ansonsten mache das Gegenteil.
// Die Grafik hat uebrigens den namen wie der versteckte Button, nur mit einem IMG am Ende.
  if(document[boxName+"IMG"].src.indexOf(checkOn.src)>-1) {
     document[boxName+"IMG"].src = checkOff.src;
	 document[formularName][boxName].value = "nicht ausgewählt";
	  }
  else {
     document[boxName+"IMG"].src = checkOn.src;
	 document[formularName][boxName].value = "ausgewählt";
  }
// Schon fertig
}
