  var eingabenSindKorrekt;
  var message;

  var umlautDef =   "\\u00A6\\u00A8\\u00B4\\u00B8\\u00BC\\u00BD\\u00BE\\u00C0\\u00C1\\u00C2"
                  + "\\u00C3\\u00C4\\u00C5\\u00C6\\u00C7\\u00C8\\u00C9\\u00CA\\u00CB\\u00CC"
                  + "\\u00CD\\u00CE\\u00CF\\u00D0\\u00D1\\u00D2\\u00D3\\u00D4\\u00D5\\u00D6"
                  + "\\u00D7\\u00D8\\u00D9\\u00DA\\u00DB\\u00DC\\u00DD\\u00DE\\u00DF\\u00E0"
                  + "\\u00E0\\u00E1\\u00E2\\u00E3\\u00E4\\u00E5\\u00E6\\u00E7\\u00E8\\u00E9\\u00EA"
                  + "\\u00EB\\u00EC\\u00ED\\u00EE\\u00EF\\u00F0\\u00F1\\u00F2\\u00F3\\u00F4"
                  + "\\u00F5\\u00F6\\u00F7\\u00F8\\u00F9\\u00FA\\u00FB\\u00FC\\u00FD\\u00FE"
                  + "\\u00FF"
  ;

  var lastUTC          = 0;

  var dezimalZahlDef   = "^\\d{1,3}([',']\\d{0,2})?$";
  var stdDef           = "^[a-zA-Z,\\d/\.\\-\& " + umlautDef + "\\u0027\\u0060]*$";
  var kategorieDef     = "^[a-zA-Z,:;\\d/\.\\-\& " + umlautDef + "]*$";
  var plzDef           = "^\\d{5}$";
  
  var vorwahlDef       = "^0\\d{2,4}$";
  var rufnummerDef     = "^\\d{3,16}$";
  var handynummerDef   = "^0\\d{6,16}$";
  
  var hausNrDef        = "^(\\d{1,3}([a-z])?(['-']\\d{1,3}([a-z])?)?)?$";
  var beschreibungsDef = "^[a-zA-Z\\s\\d/,\.!\?\\-\+ " + umlautDef + "\\u0022\\u0026\\u0027\\u0028\\u0029\\u0060\\u003A\\u00B4\\u201C\\u201D\\u201E\\u201F\\u20AC]*$";
  var urlDef           = "^http://([a-zA-Z][a-zA-Z\\d-" + umlautDef + "]*\.){1,2}\.(com|de|info|net|org)(/[a-zA-Z][a-zA-Z-" + umlautDef + "]*)*(/|(\.(htm|html)))?$";

  function istMussFeldKorrekt(zuPruefendeVariable, Beschreibung, regExp){
    message = "";

    if ( zuPruefendeVariable == ""){
      message = unescape(Beschreibung + " ist nicht vorgegeben.");
    }

    if (
         message == ""
      && !isStructureOk(regExp, zuPruefendeVariable)
    ){
      message = unescape(Beschreibung + " hat die falsche Struktur oder enth%E4lt ung%FCltige Zeichen.");
    }

    return message == "";
  }

  function istKannFeldKorrekt(zuPruefendeVariable, Beschreibung, regExp){
    message = "";
    
    if (zuPruefendeVariable != ""){
		  if (!isStructureOk(regExp, zuPruefendeVariable)){
		    message = unescape(Beschreibung + " hat die falsche Struktur oder enth%E4lt ung%FCltige Zeichen.");
		  }
    }

    return message == "";
  }

  function validate(){
    // Zuerst führenden und folgenden Leerzeichen entfernen
    var email                    = trim(document.Erfassen.email.value);
    var veranstaltungstyp        = trim(document.Erfassen.Veranstaltungstyp.value);
    var veranstaltungsName       = trim(document.Erfassen.Veranstaltungsname.value);
    var Veranstalter             = trim(document.Erfassen.Veranstalter.value);
    var stdPreis;
    var erweiterterPreis;
    var zugehoerigekategorie;

    var aktuellesBeginnDatum;
    var aktuelleBeginnStunde;
    var aktuelleBeginnMinute;

    var aktuellesEndeDatum;
    var aktuelleEndeStunde;
    var aktuelleEndeMinute;

    var location                 = trim(document.Erfassen.Location.value);
    var strasse                  = trim(document.Erfassen.Strasse.value);
    var hausnummer               = trim(document.Erfassen.Hausnummer.value);
    var plz                      = trim(document.Erfassen.PLZ.value);
    var ort                      = trim(document.Erfassen.Ort.value);
    
    var vorwahl                  = trim(document.Erfassen.Vorwahl.value);
    var rufnummer                = trim(document.Erfassen.Rufnummer.value);
    var handynummer              = trim(document.Erfassen.Handynummer.value);    
    
    var homepage                 = trim(document.Erfassen.Homepage.value);
    var beschreibung             = trim(document.Erfassen.Beschreibung.value);

    eingabenSindKorrekt = true;

    if ( eingabenSindKorrekt && (!hatMindestLaenge(email, 5) || !isEmail(email)) ){
      alert("Bitte geben Sie eine korrekte e-mail Adresse ein");
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istKannFeldKorrekt(veranstaltungsName, "Das Feld >>Name der Veranstaltung<<", stdDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istMussFeldKorrekt(Veranstalter, "Das Feld >>Veranstalter<<", stdDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    // Preise Prüfen

    if (preisInfo == "ein Preis"){
      stdPreis = trim(document.Erfassen.Preis.value);
      if (eingabenSindKorrekt && stdPreis!="nicht bekannt" && !isStructureOk(dezimalZahlDef, stdPreis)){
        alert(unescape("Bitte geben sie einen g%FCltigen Preis an. (z.B.: 23,56)"));
        eingabenSindKorrekt = false;
      }
    }
    else{
      var anzahlPreise = hoechsteKategorie + 1;
      for (var i = 0; i < anzahlPreise; i++){
        erweiterterPreis     = trim(document.getElementById("Preis[" + i + "]").value);
        zugehoerigekategorie = trim(document.getElementById("Kategorie[" + i + "]").value);

        if (eingabenSindKorrekt && erweiterterPreis == ""){
          alert("Mindestens ein Preis ist nicht vorgegeben !");
          eingabenSindKorrekt = false;
        };

        if (eingabenSindKorrekt && !istMussFeldKorrekt(erweiterterPreis, "Das Preis-Feld mit dem Inhalt '" + erweiterterPreis + "'", dezimalZahlDef)){
          alert(message);
          eingabenSindKorrekt = false;
        };

        if (eingabenSindKorrekt && zugehoerigekategorie == ""){
          alert("Mindestens eine Kategorie ist nicht vorgegeben !");
          eingabenSindKorrekt = false;
        };

        if (eingabenSindKorrekt && !istMussFeldKorrekt(zugehoerigekategorie, "Das Kategorie-Feld mit dem Inhalt '" + zugehoerigekategorie + "'", kategorieDef)){
          alert(message);
          eingabenSindKorrekt = false;
        };
      }
    }

    if (eingabenSindKorrekt){
      var anzahlZeitraeume = zeitraumIndex + 1;
      var endeDatumGegeben;
      var beginnZeitVorgegeben;
      var endeZeitVorgegeben;
      var beginnUTC;
      var endeUTC;
      
      lastUTC              = 0;
      for (var i = 0; i < anzahlZeitraeume; i++){
      	endeDatumGegeben         = false;
      	beginnZeitVorgegeben     = false;
      	endeZeitVorgegeben       = false;
      	
        aktuellesBeginnDatum     = trim(document.getElementById("Beginndatum[" + i + "]").value);
        aktuelleBeginnStunde     = trim(document.getElementById("BeginnStunde[" + i + "]").value);
        aktuelleBeginnMinute     = trim(document.getElementById("BeginnMinute[" + i + "]").value);
        
        if (document.getElementById("Endedatum[" + i + "]") != null){
          aktuellesEndeDatum       = trim(document.getElementById("Endedatum[" + i + "]").value);
          aktuelleEndeStunde       = trim(document.getElementById("EndeStunde[" + i + "]").value);
          aktuelleEndeMinute       = trim(document.getElementById("EndeMinute[" + i + "]").value);
          
          if (aktuellesEndeDatum != ""){
            endeDatumGegeben = true;
          }
          else{
          	alert(unescape(
              "Endedatum ist nicht vorgegeben!"
            ));
            eingabenSindKorrekt = false;
          }
        }

        // Beginndatum und Uhrzeit auf Konsistenz prüfen
        
        if ((aktuellesBeginnDatum == "")){
          alert(unescape(
            "Beginndatum ist nicht vorgegeben!"
          ));
          eingabenSindKorrekt = false;
        }
        
        // Prüfe ob die Uhrzeit vorgegeben ist
        if (eingabenSindKorrekt){
          if (
               (aktuelleBeginnStunde=="--") && (aktuelleBeginnMinute!="--")
            || (aktuelleBeginnStunde!="--") && (aktuelleBeginnMinute=="--")
          ){
          	alert(unescape(
              "Geben sie die Zeit des Beginns der Veranstaltung entweder vollständig oder gar nicht vor !"
            ));
            eingabenSindKorrekt = false;
          }
          else{
          	if ((aktuelleBeginnStunde!="--") && (aktuelleBeginnMinute!="--")){
              beginnZeitVorgegeben = true;
              
              beginnUTC = Date.UTC(
                aktuellesBeginnDatum.substring(6,10),
                aktuellesBeginnDatum.substring(3,5),
                aktuellesBeginnDatum.substring(0,2),
                aktuelleBeginnStunde,
                aktuelleBeginnMinute,
                00
              );	
            }
            else{
              beginnUTC = Date.UTC(
                aktuellesBeginnDatum.substring(6,10),
                aktuellesBeginnDatum.substring(3,5),
                aktuellesBeginnDatum.substring(0,2),
                00,
                00,
                00
              );	
            }
          }
        }

        if (
             eingabenSindKorrekt
          && endeDatumGegeben
        ){
          if (
               (aktuelleEndeStunde=="--") && (aktuelleEndeMinute!="--")
            || (aktuelleEndeStunde!="--") && (aktuelleEndeMinute=="--")
          ){
          	alert(unescape(
              "Geben sie die Zeit des Endes der Veranstaltung entweder vollständig oder gar nicht vor !"
            ));
            eingabenSindKorrekt = false;
          }
          else{
          	if ((aktuelleEndeStunde!="--") && (aktuelleEndeMinute!="--")){
              endeZeitVorgegeben = true;
              
              endeUTC = Date.UTC(
                aktuellesEndeDatum.substring(6,10),
                aktuellesEndeDatum.substring(3,5),
                aktuellesEndeDatum.substring(0,2),
                aktuelleEndeStunde,
                aktuelleEndeMinute,
                00
              );	
            }
            else{
              endeUTC = Date.UTC(
                aktuellesEndeDatum.substring(6,10),
                aktuellesEndeDatum.substring(3,5),
                aktuellesEndeDatum.substring(0,2),
                23,
                59,
                59
              );	
            }
          }
        }
        
        if (
             eingabenSindKorrekt
          && !endeDatumGegeben
        ){
           endeUTC = Date.UTC(
             aktuellesBeginnDatum.substring(6,10),
             aktuellesBeginnDatum.substring(3,5),
             aktuellesBeginnDatum.substring(0,2),
             23,
             59,
             59
           );	
        }
        
        if (
             eingabenSindKorrekt 
          && !beginnZeitVorgegeben && endeZeitVorgegeben
        ){
          alert(unescape(
            "Geben Sie bitte auch die Beginnzeit an, wenn die Endezeit vorgegeben ist !"
          ));
          eingabenSindKorrekt = false;
        }
        
        if (eingabenSindKorrekt && (endeUTC <= beginnUTC)){
          alert(unescape(
              "Der Endezeitpunkt sollte sp%E4ter als der Beginnzeitpunkt sein. Dies ist aber leider nicht der Fall!"
          ));
          eingabenSindKorrekt = false;
        }
       
        if (eingabenSindKorrekt && (beginnUTC <= lastUTC)){
          alert(unescape(
              "Die eingegebenen Zeitr%E4ume sind nicht chronologisch ! Bitte korrigieren !"
          ));
          eingabenSindKorrekt = false;
        }
        else {
          lastUTC = endeUTC;
        }
      }
    };

    if (eingabenSindKorrekt && !istKannFeldKorrekt(location, "Das Feld >>Bekannter Ort<<", stdDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istKannFeldKorrekt(strasse, "Das Feld >>Straße<<", stdDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istKannFeldKorrekt(hausnummer, "Das Feld >>Hausnummer<<", hausNrDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istMussFeldKorrekt(plz, "Das Feld >>PLZ<<", plzDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istMussFeldKorrekt(ort, "Das Feld >>Ort<<", stdDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istKannFeldKorrekt(vorwahl, "Das Feld >>Vorwahl<<", vorwahlDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istKannFeldKorrekt(rufnummer, "Das Feld >>Rufnummer<<", rufnummerDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };
    
    if (eingabenSindKorrekt && (vorwahl != '' && rufnummer == '') || (vorwahl == '' && rufnummer != '')){
      alert('Bitte Vorwahl und Rufnummer eingeben oder beide nicht vorgeben !');
      eingabenSindKorrekt = false;
    }
    
    if (eingabenSindKorrekt && !istKannFeldKorrekt(handynummer, "Das Feld >>Handynummer<<", handynummerDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };
    
    if (eingabenSindKorrekt && homepage != "http://" && !istKannFeldKorrekt(homepage, "Das Feld >>Homepage<<", urlDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    if (eingabenSindKorrekt && !istKannFeldKorrekt(beschreibung, "Das Feld >>Beschreibung<<", beschreibungsDef)){
      alert(message);
      eingabenSindKorrekt = false;
    };

    return eingabenSindKorrekt;
  }

