/* Plausibilisierungen */

// E-Mail Adresse auf gülige Syntax prüfen
function istGueltigeEmail(s)
  {
  var a = false;
  var res = false;
  if(typeof(RegExp) == 'function')
    {
    var b = new RegExp('abc');
    if(b.test('abc') == true){a = true;}
    }

  if(a == true)
    {
    reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
                     '(\\@)([a-zA-Z0-9\\-\\.]+)'+
                     '(\\.)([a-zA-Z]{2,4})$');
    res = (reg.test(s));
    }
  else
    {
    res = (s.search('@') >= 1 &&
           s.lastIndexOf('.') > s.search('@') &&
           s.lastIndexOf('.') >= s.length-5)
    }
  return(res);
}

// Funktion um zu prüfen ob eine Variable definiert wurde
isDefined = function(variable){
        return this[variable] === undefined ? false : true;
};

// Datum auf Güligkeit prüfen, erwartet ID des Inputfeldes

function istGueltigesDatum(Datum)
{
      var Tag, Monat, Jahr, Laenge, tageMonat, Ok = true;
      Laenge = Datum.length;

      // alert zur Kontrolle (Länge)
      // alert("Länge ist " + Laenge);
      /*var date = new Date();
      var DiesesJahr = date.getYear();
      var DieserMonat = date.getMonth()+1;
      var DieserTag = date.getDate();
      var Startjahr = 1900;*/

      if (Datum == "") Ok =  false;

      // Eingabeformat ist OK (10 Zeichen) dann Prüfung ob Trennzeichen ein Punkt ist

      if (isNaN(Datum.substring(0,2)) || isNaN(Datum.substring(3,5)) || isNaN(Datum.substring(6,10))) {
                           Ok =  false;
          }
      else if (Laenge==10 && Datum.substring(2,3)=="." && Datum.substring(5,6)==".") {
              Tag = parseInt(Datum.substring(0,2),10);
              Monat = parseInt(Datum.substring(3,5),10);
              Jahr = parseInt(Datum.substring(6,10),10);
      }
      else {
              Datum = "  .  .  ";
                  Ok =  false;
      }

      // TageMonat festlegen, größter Eintrag für den entsprechenden Monat (auch Schaltjahr)
      if (Monat==4 || Monat==6 || Monat==9 || Monat==11) tageMonat=30;
      if (Monat==1 || Monat==3 || Monat==5 || Monat==7 || Monat==8 || Monat==10 || Monat==12) tageMonat=31;
      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) )
      {
      // alert zur Kontrolle Werte
      // alert("Jedes gültige Datum erlaubt. Werte - OK");
      }
      else Ok =  false;
          return Ok;
}

function istGueltigesGebDatum(Datum)
{
      var Tag, Monat, Jahr, Laenge, tageMonat, Ok = true;
      Laenge = Datum.length;

      // alert zur Kontrolle (Länge)
      // alert("Länge ist " + Laenge);
      if (isDefined("AktuelleZeitMillisekunden")) var jetzt = new Date(AktuelleZeitMillisekunden);
      else var jetzt = new Date();
      var DiesesJahr = jetzt.getYear();
      var DieserMonat = jetzt.getMonth()+1;
      var DieserTag = jetzt.getDate();
      var Startjahr = 1900;

//      alert(jetzt.getTime());

      if (Datum == "") Ok =  false;

      // Eingabeformat ist OK (10 Zeichen) dann Prüfung ob Trennzeichen ein Punkt ist

          if (isNaN(Datum.substring(0,2)) || isNaN(Datum.substring(3,5)) || isNaN(Datum.substring(6,10))) {
                           Ok =  false;
          }
      else if (Laenge==10 && Datum.substring(2,3)=="." && Datum.substring(5,6)==".") {
              Tag = parseInt(Datum.substring(0,2),10);
              Monat = parseInt(Datum.substring(3,5),10);
              Jahr = parseInt(Datum.substring(6,10),10);
      }
      else {
              Datum = "  .  .  ";
              Ok =  false;
      }

      // TageMonat festlegen, größter Eintrag für den entsprechenden Monat (auch Schaltjahr)
      if (Monat==4 || Monat==6 || Monat==9 || Monat==11) tageMonat=30;
      if (Monat==1 || Monat==3 || Monat==5 || Monat==7 || Monat==8 || Monat==10 || Monat==12) tageMonat=31;
      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) )
      {
         var damals = new Date();
         var GebJahr = damals.setFullYear(Jahr);
         var GebMonat = damals.setMonth(Monat-1);
         var GebTag = damals.setDate(Tag);
         var diffTage = ((jetzt.getTime() - damals.getTime()) / (60 * 60 * 24 * 1000))+1;
         var diffJahre = diffTage / 365.25;
                // Mindestens 18 Jahre alt
         if (diffJahre < 18) Ok = false;
                // Höchstens 120 Jahre alt
         if (diffJahre > 120) Ok = false;
      }
      else Ok =  false;
      return Ok;
}

function istGueltigesLieferDatum(Datum)
{
      var Tag, Monat, Jahr, Laenge, tageMonat, Ok = true;
      Laenge = Datum.length;

      // alert zur Kontrolle (Länge)
      // alert("Länge ist " + Laenge);
      if (isDefined("AktuelleZeitMillisekunden")) var jetzt = new Date(AktuelleZeitMillisekunden);
      else var jetzt = new Date();
      var DiesesJahr = jetzt.getYear();
      var DieserMonat = jetzt.getMonth()+1;
      var DieserTag = jetzt.getDate();
      var Startjahr = 1900;

//      alert(jetzt.getTime());

      if (Datum == "") Ok =  false;

      // Eingabeformat ist OK (10 Zeichen) dann Prüfung ob Trennzeichen ein Punkt ist

          if (isNaN(Datum.substring(0,2)) || isNaN(Datum.substring(3,5)) || isNaN(Datum.substring(6,10))) {
                           Ok =  false;
          }
      else if (Laenge==10 && Datum.substring(2,3)=="." && Datum.substring(5,6)==".") {
              Tag = parseInt(Datum.substring(0,2),10);
              Monat = parseInt(Datum.substring(3,5),10);
              Jahr = parseInt(Datum.substring(6,10),10);
      }
      else {
              Datum = "  .  .  ";
              Ok =  false;
      }

      // TageMonat festlegen, größter Eintrag für den entsprechenden Monat (auch Schaltjahr)
      if (Monat==4 || Monat==6 || Monat==9 || Monat==11) tageMonat=30;
      if (Monat==1 || Monat==3 || Monat==5 || Monat==7 || Monat==8 || Monat==10 || Monat==12) tageMonat=31;
      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) )
      if (Tag==1 && (Monat >= 1 && Monat <= 12) )
      {
         var termin = new Date();
         var LieferJahr = termin.setFullYear(Jahr);
         var LieferMonat = termin.setMonth(Monat-1);
         var LieferTag = termin.setDate(Tag);
         var diffTage = ((jetzt.getTime() - termin.getTime()) / (60 * 60 * 24 * 1000))+1;
                // Lieferung frühestens in 6 Wochen
         if (Math.abs(diffTage) < (6*7) || diffTage > 0) Ok = false;
      }
      else Ok =  false;
      return Ok;
}

function istGueltigesEinzugsDatum(Datum, TageVergangenheit, TageZukunft)
{
      var Tag, Monat, Jahr, Laenge, tageMonat, Ok = true;
      Laenge = Datum.length;

      // alert zur Kontrolle (Länge)
      // alert("Länge ist " + Laenge);
      if (isDefined("AktuelleZeitMillisekunden")) var jetzt = new Date(AktuelleZeitMillisekunden);
      else var jetzt = new Date();
      var DiesesJahr = jetzt.getYear();
      var DieserMonat = jetzt.getMonth()+1;
      var DieserTag = jetzt.getDate();
      var Startjahr = 1900;

//      alert(jetzt.getTime());

      if (Datum == "") Ok =  false;

      // Eingabeformat ist OK (10 Zeichen) dann Prüfung ob Trennzeichen ein Punkt ist

          if (isNaN(Datum.substring(0,2)) || isNaN(Datum.substring(3,5)) || isNaN(Datum.substring(6,10))) {
                           Ok =  false;
          }
      else if (Laenge==10 && Datum.substring(2,3)=="." && Datum.substring(5,6)==".") {
              Tag = parseInt(Datum.substring(0,2),10);
              Monat = parseInt(Datum.substring(3,5),10);
              Jahr = parseInt(Datum.substring(6,10),10);
      }
      else {
              Datum = "  .  .  ";
              Ok =  false;
      }

      // TageMonat festlegen, größter Eintrag für den entsprechenden Monat (auch Schaltjahr)
      if (Monat==4 || Monat==6 || Monat==9 || Monat==11) tageMonat=30;
      if (Monat==1 || Monat==3 || Monat==5 || Monat==7 || Monat==8 || Monat==10 || Monat==12) tageMonat=31;
      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) )
      {
         var termin = new Date();
         var EinzugsJahr = termin.setFullYear(Jahr);
         var EinzugsMonat = termin.setMonth(Monat-1);
         var EinzugsTag = termin.setDate(Tag);
         var diffTage = ((jetzt.getTime() - termin.getTime()) / (60 * 60 * 24 * 1000))+1;
                // Höchstens n Tage in der Vergangenheit und m Tage in der Zukunft
                 if (diffTage<0){
                         if (Math.abs(diffTage) > (TageZukunft - 1))  Ok = false;
                 } else {
                         if (diffTage > (TageVergangenheit + 1)) Ok = false;
                 }
      }
      else Ok =  false;
      return Ok;
}

function istArray(obj) {
   if (obj.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function PflichtfelderFehler(PflichtfelderNamen) {
        var Feldfehler = new Array();
        var j = 0;
        for (var i = 0; i < PflichtfelderNamen.length; i++) {
                objname = PflichtfelderNamen[i];
                obj = document.getElementsByName(objname);
//                alert (istArray(obj));
                if (istArray(obj)) {
                        wertok = false;
                        for (var k = 0; k < obj.length; k++) {
                                if (obj[k].value != "") wertok = true;
                        }
                        if (!wertok) {
                                Feldfehler[j] = PflichtfelderNamen[i];
                                j++;
                        }
                }
                else {
                        if (obj[0]) {
                                        if (obj[0].value=="") {
                                                Feldfehler[j] = PflichtfelderNamen[i];
                                                j++;
                                        }

                        }
                        else {
                                        alert("Das Feld "+objname+" ist nicht korrekt angelegt!")
                           }
                }
        }
        return Feldfehler;
}

/* Ausgabe einer Zahl in eine Betragsdarstellung wie 1.234,56
        - Trennzeichen und Anzahl der Nachkommastellen werden als Parameter angenommen
*/
function AusgabeBetrag( number,laenge,sep,th_sep ) {

  number = Math.round( number * Math.pow(10, laenge) ) / Math.pow(10, laenge);
  str_number = number+"";
  arr_int = str_number.split(".");
  if(!arr_int[0]) arr_int[0] = "0";
  if(!arr_int[1]) arr_int[1] = "";
  if(arr_int[1].length < laenge){
    nachkomma = arr_int[1];
    for(i=arr_int[1].length+1; i <= laenge; i++){  nachkomma += "0";  }
    arr_int[1] = nachkomma;
  }
  if(th_sep != "" && arr_int[0].length > 3){
    Begriff = arr_int[0];
    arr_int[0] = "";
    for(j = 3; j < Begriff.length ; j+=3){
      Extrakt = Begriff.slice(Begriff.length - j, Begriff.length - j + 3);
      arr_int[0] = th_sep + Extrakt +  arr_int[0] + "";
    }
    str_first = Begriff.substr(0, (Begriff.length % 3 == 0)?3:(Begriff.length % 3));
    arr_int[0] = str_first + arr_int[0];
  }
  return arr_int[0]+sep+arr_int[1];
}

function StringInZahl(Zahl) {
        Zahl = Zahl.replace(/\./g, "");
        Zahl = Zahl.replace(/\,/g, ".");
        return parseFloat(Zahl);
}

function UTF8toISO(str) {
        str = str.replace(/%C3%84/g,"Ä");
    str = str.replace(/%C3%A4/g,"ä");
    str = str.replace(/%C3%9C/g,"Ü");
    str = str.replace(/%C3%BC/g,"ü");
    str = str.replace(/%C3%96/g,"Ö");
    str = str.replace(/%C3%B6/g,"ö");
    str = str.replace(/%C3%9F/g,"ß");
        return str;
}

function alphanumeric(alphane)  {
        var numaric = alphane;
        for(var j=0; j<numaric.length; j++)
                {
                  var alphaa = numaric.charAt(j);
                  var hh = alphaa.charCodeAt(0);
                  if((hh > 47 && hh<58) || (hh > 64 && hh<91) || (hh > 96 && hh<123))
                  {
                  }
                else        {
//                         alert("Your Alpha Numeric Test Failed");
                         return false;
                  }
                 }
// alert("Your Alpha Numeric Test Passed");
 return true;
}

function checkZaehlpunkt(zpbid, plzid, nbtid) {
         if (zpbid != "" && document.getElementById(zpbid)) zpb = document.getElementById(zpbid).value;   else zpb = "";
         if (plzid != "" && document.getElementById(plzid)) plz = document.getElementById(plzid).value;   else plz = "";
         if (nbtid != "" && document.getElementById(nbtid)) nbt = document.getElementById(nbtid).value;   else nbt = "";
         // Leerzeichen entfernen
         zpb = zpb.replace(/ /g, "");
         fehlermeldung = "";
         if (zpb.length==33) {
                  // Trennen der einzelnen Werte
                  land = zpb.substring(0,2);
                  netz = zpb.substring(2,8);
                  plze = zpb.substring(8,13);
                  zpnr = zpb.substring(13,33);
                  // Prüfen des Landes
                  if (land!="DE") fehlermeldung += "Der Ländercode ist nicht korrekt. Erlaubt sind nur Zählpunktbezeichnungen mit dem Ländercode DE!\n";
                  // Prüfen des Netzbetreibers
                  if (nbt!="" && nbt!=netz) fehlermeldung += "Der Netzbetreiber in der Zählpunktbezeichnung stimmt nicht mit dem eingegebenen überein!\n";
                  // Prüfen der PLZ
                  if (plz!="" && plz!=plze) fehlermeldung += "Die Postleitzahl in der Zählpunktbezeichnung stimmt nicht mit der eingegebenen überein!\n";
                  // Prüfen der Zählpunktnummer
                  if (!alphanumeric(zpnr)) fehlermeldung += "Die Zählpunktnummer ist nicht alphanumerisch!\n";
         }
         else fehlermeldung = "Die Zählpunktbezeichnung muss 33-stellig sein!\n";
/*         if (fehlermeldung!="") alert(fehlermeldung);
         else alert(land+" "+netz+" "+plze+" "+zpnr+" ist gültig!");*/
         return fehlermeldung;
}
