﻿/*
Die Funktion chkKontaktForm überprüft das Kontaktformular ob alle nötigen Felder ausgefüllt wurden und die Werte soweit möglich valid sind.
 */
function chkKontaktForm() {

  //Variabeln
  var fehlMussFelder;
  var feldFocus;

  //Initialisierungen
  fehlMussFelder="Bitte füllen sie mindestens die folgenden Felder aus:\n"
  feldFocus=false;


  //Gültigkeit der Felder EMail und Telefon überprüfen.
  if( (!emailCheck(document.emailform.eMail.value)) && (document.emailform.eMail.value!="") ) {
     alert("Bitte geben Sie eine gültige e-Mail Adresse ein.");
     document.emailform.eMail.focus();
     return false;
  }
  if( (!telefonCheck(document.emailform.Telefon.value)) && (document.emailform.Telefon.value!="") ) {
     alert("Bitte geben Sie eine gültige Telefonnummer ein.");
     document.emailform.Telefon.focus();
     return false;
  }

  /*
  Zuerst aller Felder ermitteln die einen Wert brauchen, und bei Bedarf diese ausgeben.
  */
  if (document.emailform.Name.value == "") {
    fehlMussFelder+="- Name\n"
    document.emailform.Name.focus();
    feldFocus=true;
  }
  if ((document.emailform.eMail.value == "")&&(document.emailform.Telefon.value == "")) {
    fehlMussFelder+="- e-Mail oder Telefon\n";
    if (!feldFocus) {
       if (document.emailform.eMail.value == "")
          document.emailform.eMail.focus();
       else
       	  document.emailform.Telefon.focus();
       feldFocus=true;
    }
  }
  if (document.emailform.Bemerkung.value == "") {
    fehlMussFelder+="- Bemerkungen\n";
    if (!feldFocus) {
       document.emailform.Bemerkung.focus();
       feldFocus=true;
    }
  }

  if(feldFocus) {
     alert(fehlMussFelder);
     return false;
  } else {
     return true;
  }

}

function chkTermineForm() {

  //Variabeln
  var fehlMussFelder;
  var feldFocus;

  //Initialisierungen
  fehlMussFelder="Bitte füllen sie mindestens die folgenden Felder aus:\n"
  feldFocus=false;


  //Gültigkeit der Felder EMail, Telefon, Veranstaltungsdatum und Fax überprüfen.
  if( (!emailCheck(document.emailform.eMail.value)) && (document.emailform.eMail.value!="") ) {
     alert("Bitte geben Sie eine gültige e-Mail Adresse ein.");
     document.emailform.eMail.focus();
     return false;
  }
  if( (!telefonCheck(document.emailform.Telefon.value)) && (document.emailform.Telefon.value!="") ) {
     alert("Bitte geben Sie eine gültige Telefonnummer ein.");
     document.emailform.Telefon.focus();
     return false;
  }
  if( (!telefonCheck(document.emailform.Fax.value)) && (document.emailform.Fax.value!="") ) {
     alert("Bitte geben Sie eine gültige Faxfonnummer ein.");
     document.emailform.Fax.focus();
     return false;
  }
  if( (!PruefeDatum(document.emailform.Veranstaltungsdatum.value)) && (document.emailform.Veranstaltungsdatum.value!="") ) {
     alert("Bitte geben Sie eine gültiges Veranstaltungsdatum ein.");
     document.emailform.Veranstaltungsdatum.focus();
     return false;
  }

  /*
  Zuerst aller Felder ermitteln die einen Wert brauchen, und bei Bedarf diese ausgeben.
  */
  if ((document.emailform.VeranstalterName.value == "")&&(document.emailform.Name.value == "")) {
    fehlMussFelder+="- Name des Veranstalters oder Name\n";
    if (!feldFocus) {
       if (document.emailform.VeranstalterName.value == "")
          document.emailform.VeranstalterName.focus();
       else
       	  document.emailform.Name.focus();
       feldFocus=true;
    }
  }
  if ((document.emailform.eMail.value == "")&&(document.emailform.Telefon.value == "")&&(document.emailform.Fax.value == "")) {
    fehlMussFelder+="- Telefonnummer, Fax oder e-Mail\n";
    if (!feldFocus) {
       if (document.emailform.eMail.value == "")
          document.emailform.eMail.focus();
       else if (document.emailform.Telefon.value == "")
       	  document.emailform.Telefon.focus();
       else
       	  document.emailform.Fax.focus();
       feldFocus=true;
    }
  }

  if (document.emailform.Veranstaltungsdatum.value == "") {
    fehlMussFelder+="- Datum der Veranstaltung\n"
    document.emailform.Veranstaltungsdatum.focus();
    feldFocus=true;
  }

  if(feldFocus) {
     alert(fehlMussFelder);
     return false;
  } else {
     return true;
  }

return true;

}

//Prüft eine Telefonnummer auf Gültigkeit >=10Zeichen und Zeichen >ASC127 und keine Buchstaben
function telefonCheck (telefonStr) {

   //Variabeln
   var i;

   //Instanzierungen
   i=0

   //Zuerst alle Leerzeichen ersetzen
   telefonStr=telefonStr.replace(/\s/g, "");

   //Länge von mindesten 10 Zeichen prüfen
   if(telefonStr.length<10)
      return false;

   //Nur Zeichen mit ASCII-Code < 127 zulassen
   for (i=0; i<telefonStr.length; i++) {
      if (telefonStr.charCodeAt(i)>127)
         return false;
   }

   //Nur Zeichen mit ASCII-Code zulassen die NICHT zwischen 65-90 und 97-122 sind.
   for (i=0; i<telefonStr.length; i++) {
      if ( ((telefonStr.charCodeAt(i)>=65) && (telefonStr.charCodeAt(i)<=90)) || ((telefonStr.charCodeAt(i)>=97) && (telefonStr.charCodeAt(i)<=122)) )
         return false;
   }

   return true;

}

//Original:  Sandeep V. Tamhankar  -->
//mod:  Wilhelm Jansen -->
function emailCheck (emailStr) {

   // Test country oder TLD.  1 für testen, 0 nicht testen
   var checkTLD=1;

   // TLDs Liste
   var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

   // user@domain format
   var emailPat=/^(.+)@(.+)$/;

   // Liste zeichen ( ) < > @ , ; : \ " . [ ]
   var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";

   // in Anführungszeichen? (dann sind special charakters erlaubt)
   var quotedUser="(\"[^\"]*\")";

   // domains mit IP addressen
   var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
   var matchArray=emailStr.match(emailPat);

   if (matchArray==null) {
      // test Anzahl der @
      //alert("Email-addresse incorrect (prüfen Sie @ und Punkte)");
      return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];

   // test gültige ASCII characters (0-127).
   for (i=0; i<user.length; i++) {
      if (user.charCodeAt(i)>127) {
         //alert("Username hat ungültige Zeichen !");
         return false;
      }
   }
   for (i=0; i<domain.length; i++) {
      if (domain.charCodeAt(i)>127) {
      //alert("Domainname hat ungültige Zeichen !");
      return false;
      }
   }

   if (user.match(userPat)==null) {
     // user nicht OK
     alert("Username ist ungültig !");
     return false;
   }

   // IP addresse OK ?
   var IPArray=domain.match(ipDomainPat);
   if (IPArray!=null) {
      // es handelt sich um eine IP-Adresse
      for (var i=1;i<=4;i++) {
         if (IPArray[i]>255) {
            //alert("Empfänger IP-Adresse is ungültig !");
	    return false;
         }
      }
      return true;
   }

   // Domain ist ein "symbolic name",  gültig ?
   var atomPat=new RegExp("^" + atom + "$");
   var domArr=domain.split(".");
   var len=domArr.length;
   for (i=0;i<len;i++) {
      if (domArr[i].search(atomPat)==-1) {
         //alert("Domainname ist ungültig !");
         return false;
      }
   }

   //domain name valid, testen bekannte top-level domain hostname vorangestellt ?
   if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
      //alert("Email Adresse muss mit bekannter Domain (TLD) oder 2 Zeichen enden !");
      return false;
   }

   // hostname vorangestellt ?
   if (len<2) {
      //alert("hostname fehlt!");
      return false;
   }

   // hier angekommen ist alles OK
   return true;
}

function PruefeDatum(Eingabe) {

      var fehlMeld="";
      var Laenge = 0;
      var Tag, Monat, Jahr, tageMonat, DiesesJahr = "";

      Laenge = Eingabe.length;
      if (Laenge==10 && Eingabe.substring(2,3)=="." && Eingabe.substring(5,6)==".") {
         Tag=parseInt(Eingabe.substring(0,2),10);
         Monat=parseInt(Eingabe.substring(3,5),10);
         Jahr=parseInt(Eingabe.substring(6,10),10);
      } else {
	  return false;
      }

      // Tage für Monate festlegen, größter Eintrag für den entsprechenden Monat (auch Schaltjahr)
      if (Monat==4 || Monat==6 || Monat==9 || Monat==11) {
         tageMonat=30;
      } else if (Monat==1 || Monat==3 || Monat==5 || Monat==7 || Monat==8 || Monat==10 || Monat==12) {
      tageMonat=31;
      } else if(Monat==2 && Jahr%4==0 && Jahr%100!=0 || Jahr%400==0) {
      tageMonat=29;
      } else if(Monat==2 && Jahr%4!=0 || Jahr%100==0 && Jahr%400!=0) {
      tageMonat=28;
      }

      if ((Tag>=1 && Tag<=tageMonat) && (Monat>=1 && Monat<=12) && (Jahr >= DiesesJahr) ) {
         if (Jahr < DiesesJahr) {
	    return false;
	 }
      }
      return true;

}

function ModifyDate(Eingabe) {

	var Tag, Monat, Jahr;
	var parts;

	parts=Eingabe.value.split(".");
	Tag=parts[0];
	Monat=parts[1];
	Jahr=parts[2];

	if ((Tag == null)||(Monat == null)||(Jahr==null)) return;

	if (Tag.length<2) {
		Tag="0"+Tag;
	}
	if (Monat.length<2) {
		Monat="0"+Monat;
	}
	if (Jahr.length<4) {
		if (Jahr.length==3) {Jahr="2"+Jahr}
		if (Jahr.length==2) {Jahr="20"+Jahr}
		if (Jahr.length==1) {Jahr="200"+Jahr}
	}
	Eingabe.value=Tag+"."+Monat+"."+Jahr;
}
