

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

*

* Diese Library enthält Funktionen zur Überprüfung von Formularen.

*

* Date: 05.08.02

* Author: Wolfgang Gruel (wolfgang.gruel@web.de)

* Version: 0.2

* Änderungshistory:

*

*

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



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

*

* Globale Variablen....

*

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



// User wird über den Fehler informiert. Focus springt auf das fehlerhafte Feld

// User benachrichtigen

// Flag ändern, wenn benutzer nicht benachrichtigt werden soll



var notifyUser = true;



// globalErrrorMessageType: Typ der Fehlermeldung:

//       - alert: zeigt ein Alertfenster mit der Fehlermeldung an

//       - doc: schreibt die Felermeldung ins Dokument

//       - bei allen anderen passiert nichts

//

// Folgende Zeilen ändern, wenn andere Wünsche bestehen.



globalErrrorMessageType = "alert";

// globalErrrorMessageType = "doc";

// globalErrrorMessageType = "null";





// Variable zur Steuerung der Fehlermedlungen

// Soll der Benutzer detaillierte Fehlermeldungen über

// die Fehler bei der Eingabe seiner Mailadresse erhalten?



var errorDetails = false;



// wenn nicht, wird die Standardfehlermeldung gesetzt



var stdErrorMsg = "Bitte geben Sie eine gültige E-Mailadresse ein.";







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

*

* showErrorMsg(msg, type) zeigt eine Fehlermeldung an.

*                  msg: Fehlermeldung

*                  type: Typ der Fehlermeldung:

*                        - alert: zeigt ein Alertfenster mit der Fehlermeldung an

*                        - doc: schreibt die Felermeldung ins Dokument

*                        - bei allen anderen passiert nichts

*

*                   globalType: type kann auch global gesetzt werden.

*                         --> einheitliche Fehlerbehandlung

*                         default: alert

*

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



function showErrorMsg(msg, type){

                 if(type == "alert"){

                        alert(msg);

                 }

                 else if(type == "doc"){

                        document.write(msg);

                 }

                 else{

                          //nichts

                 }

}





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

*

* showErrorMessage(msg) zeigt eine Fehlermeldung

* vom Typ globalErrrorMessageType an.

*                  msg: Fehlermeldung

*

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



function showErrorMessage(msg){

         showErrorMsg(msg, globalErrrorMessageType)

}



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

*

* Zeigt eine Fehlermeldung an und springt zum entsprechenden Eingabefeld

*

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



function errorInField(fieldName, msg){

         // Fehlermeldung ausgeben, wenn das Flag notifyUser = true ist.

         if(notifyUser){

                showErrorMessage(msg);

                // ... und den Focus auf das Feld setzen

                fieldName.select();

                fieldName.focus();

                }

}





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

*

* checkt, dass der Inhalt eines Textfelds (fieldName)

* max. decallowed Nachkommastellen hat....

*

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



function checkDecimals(fieldName, fieldValue, decallowed) {



// Wenn fieldValue keine Zahl ist ....

if (isNaN(fieldValue) || fieldValue == "") {

        // ... Fehler ausgeben

        errorInField(fieldName, "Keine gültige Eingabe")

        return false;

}

else {

        // alles hinter dem Komma extrahieren und in dectext schreiben...

        if (fieldValue.indexOf('.') == -1) fieldValue += ".";

        dectext = fieldValue.substring(fieldValue.indexOf('.')+1, fieldValue.length);



        // wenn die Anzahl der Nachkommastellen größer als erlaubt ist ....

        if (dectext.length > decallowed)

        {

                errorInField(fieldName, "Bitte geben Sie eine Zahl mit maximal " + decallowed + " Nachkommastellen ein.")

                // außerdem false zurückgeben

                return false;

       }

       else {

                //erfolgreich --> zurückgeben

                return true;

      }

   }

}





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

*

* checkt, ob ein Feld ein bestimmtes Zeichen enthält

*

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



function containsChar(fieldName, c){

        if (fieldName.value.indexOf(c) > -1) {

                return true;

        }

        else {

                return false;

        }

}



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

*

* checkEMail() überprüft, ob eine angegebener String syntaktisch eine eMail

* Adresse (user@host.domain) sein kann....

*         false: keine gültige Mailadresse

*         true:  gültige Mailadresse

*

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

/*

// hier eine einfache Methode....



function checkEmail(fieldName) {



        // erst mal schauen, ob in dem Feld überhaupt was drin steht....

        if (fieldName.value && !fieldName.value == " "){

                        // EMailadresse darf keine "illegalen" Zeichen enthalten und muss die Form

                        // user@host.domain haben.

                        if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(fieldName.value)){

                                return true;

                        }

        }

        errorInField(fieldName, "Bitte geben Sie eine gültige E-Mailadresse ein.")

        // ... ausserdem false zurückgeben

        return false;



}

*/



// und hier die komplizierte....



function checkEmail(fieldName) {



                // überprüfen, ob im Mailfeld überhaupt was drinsteht..

                if(textfieldIsEmpty(fieldName)){

                                          showEMailError(fieldName, "Bitte geben Sie eine E-Mailadresse ein.")

                      return false;

                }

                var mailadress = fieldName.value;

                // Überprüfen, ob es sich um eine Top Level Domain handelt?

                // 0 = nein

                // 1 = ja



                var checkTLD=1;



                // Liste bekannter TLDs. Unbedingt ergänzen, wenn die INAA mal wieder

                // auf die Idee kommt, neue TLDs zu veröffentlichen....



                var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;



                // ist die die Mailadresse im Format user@domain?



                var emailPat=/^(.+)@(.+)$/;



                // Sonderzeichen ( ) < > @ , ; : \ " . [ ]  sind nicht erlaubt....



                var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";



                // Erlaubte Zeichen (= Alle Zeichen, ausser den verbotenen Zeichen



                var validChars="\[^\\s" + specialChars + "\]";



                // eine Reihe von aufeinanderfolgenden gültigen Zeichen



                var atom=validChars + '+';



                // ein "Wort" in einem Username.....



                var word="(" + atom + ")";



                // Struktur des Usernamens.....



                var userPat=new RegExp("^" + word + "(\\." + word + ")*$");





                // Jetzt geht die Adressprüfung los....



                // zuerst einmal die Emailadresse aufspalten und in einem

                // Array speichern, der alle Fundstellen von emailPat enthält....



                var matchArray=mailadress.match(emailPat);



                // Der Array ist leer --> offesichtich passt die Eingabe nicht zum

                // user@domain-Schema....



                if (matchArray==null) {

                                showEMailError(fieldName, "E-Mailadresse entspricht nicht dem Format user@host.domain. Überprüfen Sie, ob alle @ und . eingetragen sind.")

                                return false;

                }

                // der Teil vor dem @ ist der User....



                var user=matchArray[1];



                // der Teil danach die Domain...



                var domain=matchArray[2];



                // Sind auch nur ASCII-Werte verwendet worden?



                for (i=0; i<user.length; i++) {

                                if (user.charCodeAt(i)>127) {

                                showEMailError(fieldName, "Der Username enthält ungültige Zeichen.")

                                return false;

                   }

                }

                for (i=0; i<domain.length; i++) {

                                if (domain.charCodeAt(i)>127) {

                                     showEMailError(fieldName, "Der Domainname enthält ungültige Zeichen.")

                                     return false;

                                }

                }



                // Schauen, ob der User auch den oben angegebenen Kriterien entspricht



                if (user.match(userPat)==null) {

                                showEMailError(fieldName, "Der Username ist ungültig.")

                                return false;

                }



                // Domain gültig?



                var atomPat=new RegExp("^" + atom + "$");

                var domainArray=domain.split(".");

                var len=domainArray.length;



                // jeden Teil der Domain (getrennt durch Punkte) nach ungültigen

                // Zeichen durchsuchen....



                for (i=0;i<len;i++) {

                                if (domainArray[i].search(atomPat)==-1) {

                                showEMailError(fieldName, "Der Domainname ist ungültig.")

                                return false;

                   }

                }



                // Domain Name sieht gültig aus.... Aber hat er auch eine gültige

                // Endung???

                if (checkTLD && domainArray[domainArray.length-1].length!=2 && domainArray[domainArray.length-1].search(knownDomsPat)==-1) {

                                showEMailError(fieldName, "Die Top-Level-Domain-Angabe Ihrer Mailadresse ist nicht gültig.")

                                return false;

                }



                // Länge der TLD-Angabe > 2 Zeichen?



                if (len<2) {

                                showEMailError(fieldName, "Ihre Mailadresse enthält keinen Hostnamen.")

                                return false;

                }



                // So. Wenn das alles erfüllt ist, sollte es eigentlich eine gültige EMailadresse sein....

                return true;

}



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

*

*  Steuerung der EMail-Fehlermeldung:

*            Dem User kann angezeigt werden, was an seiner Mailadresse falsch ist

*              (Voraussetzung: Flag muss true sein und globalErrrorMessageType muss

*               so gesetzt werden, dass etwas angezeigt wird.....

*             Ansonsten wird eine Standardfehlermeldung ausgegeben.

*

*

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



function showEMailError(fieldName, msg){



                if(errorDetails){

                         errorInField(fieldName, msg);

                }

                else{

                         errorInField(fieldName, stdErrorMsg);

                }

}



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

*

*        checkTextfield(fieldName) überprüft, ob in fieldName was drin steht und

*                gibt eine Standardfehlermeldung aus.

*         false: feld ist leer

*         true:  es steht was drin....

*

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



// hier eine einfache Methode....



function checkTextfield(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie einen Text ein.")

                        return false;

                }

}





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

*

*        checkTextfield(fieldName) überprüft, ob in fieldName was drin steht und

*                gibt die Fehlermeldung errorMsg aus

*         false: feld ist leer

*         true:  es steht was drin....

*

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





function checkTextfield(fieldName, errorMsg) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, errorMsg)

                        return false;

                }

}







function checkVorname(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie Ihren Vornamen ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}



function checkNachname(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie Ihren Nachnamen ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}



function checkStrasse(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie Ihre Straße ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}



function checkHausnummer(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie Ihre Hausnummer ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}


function checkAlter(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie Ihr Alter an.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}



function checkOrt(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie Ihren Wohnort ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}





function checkTelefon(fieldName){



         // Feld darf nicht leer sein.



         if(textfieldIsEmpty(fieldName)){

            errorInField(fieldName, "Bitte geben Sie eine Telefonnummer ein.");

            return false;

         }

         for (var i = 0; i < fieldName.value.length; i++){

             if(fieldName.value.charAt(i).match(/[0-9\(\)\s-\/]/g) == null){

                errorInField(fieldName, "Bitte geben Sie eine gültige Telefonnummer ein.");

                return false;

             }

         }

         return true;

}





function checkNachricht(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie eine Nachricht ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}


function checkLoesung1(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie ein Lösungssatz ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}

function checkLoesung2(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie einen Lösungssatz ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}

function checkLoesung3(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie einen Lösungssatz ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}

function checkLoesung4(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie einen Lösungssatz ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}


function checkSend(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie Ihren Namen ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}

function checkRec(fieldName) {



                if (!textfieldIsEmpty(fieldName)){

                        return true;

                }

                else {

                        errorInField(fieldName, "Bitte geben Sie einen Empfänger ein.")

                        // ... ausserdem false zurückgeben

                        return false;

                }

}

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

*

* textfieldIsEmpty(fieldName) überprüft, ob ein Textfeld leer ist

*         true: Textfeld ist leer

*         false: Textfeld ist nicht leer

*

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



function textfieldIsEmpty(fieldName){



        if (!fieldName.value || fieldName.value == " "){

                        return true;

        }

        else{

            return false;

        }



}



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

*

* checkBLZ(fieldName) überprüft, ob eine Eingabe eine syntaktisch korrekte BLZ

* sein kann

*         false: keine gültige BLZ

*         true:  gültige BLZ

*

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



function checkBLZ(fieldName){



         // Feld darf nicht leer sein.



         if(textfieldIsEmpty(fieldName)){

            errorInField(fieldName, "Bitte geben Sie eine BLZ ein.");

            return false;

         }



         // muss eine Nummer sein



         if(isNaN(fieldName.value) == true){

            errorInField(fieldName, "Bitte geben Sie eine gültige BLZ ein.");

            return false;

         }



         // und achtstellig sein

         if(numberOfSymbols(fieldName) != 8){

            errorInField(fieldName, "Bitte geben Sie eine gültige BLZ ein.");

            return false;

         }

         // wenn das alles richtig ist, handelt es sich wenigstens syntaktisch um eine

         // korrekte BLZ



         return true;

}



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

*

* checkPLZ(fieldName) überprüft, ob eine Eingabe eine syntaktisch korrekte PLZ

* sein kann

*         false: keine gültige PLZ

*         true:  gültige PLZ

*

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



function checkPLZ(fieldName){



         // Feld darf nicht leer sein.



         if(textfieldIsEmpty(fieldName)){

            errorInField(fieldName, "Bitte geben Sie eine PLZ ein.");

            return false;

         }



         // muss eine Nummer sein



         if(isNaN(fieldName.value) == true){

            errorInField(fieldName, "Bitte geben Sie eine gültige PLZ ein.");

            return false;

         }



         // und fünfstellig sein

         if(numberOfSymbols(fieldName) != 5){

            errorInField(fieldName, "Bitte geben Sie eine gültige PLZ ein.");

            return false;

         }

         // wenn das alles richtig ist, handelt es sich wenigstens syntaktisch um eine

         // korrekte BLZ



         return true;

}





function checkGirokonto(fieldName){



         // Feld darf nicht leer sein.



         if(textfieldIsEmpty(fieldName)){

            errorInField(fieldName, "Bitte geben Sie Ihre Girokonto Nr. ein.");

            return false;

         }



         // muss eine Nummer sein



         if(isNaN(fieldName.value) == true){

            errorInField(fieldName, "Bitte geben Sie eine gültige Girokonto Nr. ein.");

            return false;

         }



         // wenn das alles richtig ist, handelt es sich wenigstens syntaktisch um eine

         // korrekte KontoNr



         return true;

}



function checkKontonummer(fieldName){



         // Feld darf nicht leer sein.



         if(textfieldIsEmpty(fieldName)){

            errorInField(fieldName, "Bitte geben Sie die Nummer des Gutschriftkontos ein.");

            return false;

         }



         // muss eine Nummer sein



         if(isNaN(fieldName.value) == true){

            errorInField(fieldName, "Bitte geben Sie eine gültige Kontonummer ein.");

            return false;

         }



         return true;



}



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

*

*   numberOfSymbols(fieldName) gibt die Anzahl der Zeichen des Strings zurück,

*   der sich im Feld mit Namen fieldName befindet.

*

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



function numberOfSymbols(fieldName){

         if(!textfieldIsEmpty(fieldName)){

               return (fieldName.value.length);

         }

         else{

              return null;

         }

}



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

*

*   isChecked(fieldName) überprüft, ob die Checkbox fieldName angekreuzt ist.

*             die Checkbox muss allerdings genau angegeben werden nach der Form:

*             document.forms[#].elements[#]. --> muss ein Element des Arrays sein.

*          Return:

*             true, wenn das Element angekreutzt ist

*             false, wenn nicht.

*

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



function isChecked(fieldName){

                if (fieldName.checked == true) {

                    return true;

                }

                else {

                    return false();

                }

}









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

*

*   checkCheckbox(fieldName)

*

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



function checkCheckbox(fieldName){

                if (isChecked(fieldName)) {

                    return true;

                }

                else {

                                        errorInField(fieldName, "Bitte akzeptieren Sie die Bedingungen zu PS Lossparen");

                    return false();

                }

}









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

*

*   getValuesOfCheckboxes(cbField). Kopiert die Werte der angekreuzten Checkboxen

*                      in ein Array

*

*           Return: Array mit den Werten der angekreutzten Checkboxen.

*

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



function getValuesOfCheckboxes(cbField){



         myArray = new Array();

         // alle Checkboxen des Checkboxfeldes durchgehen

         var total = 0;

         var max = cbField.length;

         for (var i = 0; i < max; i++) {

                       // ausgewählt?

                       if (eval("cbField["+i+"].checked")) {

                               // --> in den Array kopieren.

                               myArray[i] = cbField[i].value;

                       }

         }

         return myArray;

}



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

*

*   setValuesOfCheckboxes(cbField, value). Selektiert/Unselektiert alle

*                         Checkboxen im cbField

*            value: 0 --> Unselektieren

*                   1 --> Selektieren

*

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



function setValuesOfCheckboxes(cbField, value){

         var max = cbField.length;

         for (var i = 0; i < max; i++) {

              // wenn value == 1 --> alle markieren

              if (value == "1"){

                  if (!eval("cbField["+i+"].checked")) {

                      cbField[i].checked = true;

                  }

              }

              // ansonsten alle unselektieren

              else{

                  if (eval("cbField["+i+"].checked")) {

                      cbField[i].checked = false;

                  }

              }

         }

}



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

*

*   getValueOfRadiobuttons(rbField).

*

*           Return: Wert der selektierten Option

*                   Wenn kein Wert ausgewählt ist, ist der Rückgabewert null

*

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



function getValueOfRadiobuttons(rbField){



         var max = rbField.length;

         for (var i = 0; i < max; i++) {

                       // ausgewählt?

                       if (eval("rbField["+i+"].checked")) {

                           return rbField[i].value;

                       }

         }

         return null;

}
