/*-------------------------------------------------------------------------------*
 Program : validation.js

 Sprache:  javascript ab Browser V4.0

 Funktion: überprüfen von Werten, die in einem Formular eingegeben wurden.

 --------------------------------------------------------------------------------*
 Copyright (c) 2001 Bestview GmbH, Uster
 --------------------------------------------------------------------------------*

 Revisions:

   1.2  - 30.03.2005 / ra

     - Test für checkbox eingebaut.

   1.2  - 18.11.2005 / ra

     - Mehrsprachigkeit eingebaut

   1.2  - 6.11.2003 / ra

     - Schaltjahr in Datumscheck eingebaut.

   1.2  - 24.4.2004 / ra

     - In Email waren ungültige Zeichen erlaubt.

   1.1c - 25.9.2002 / ra

     - Check time

   1.1b - 12.9.2001 / ra

     - Check Email eingebaut

   1.1a - 19.6.2001 / ra

     - intMinMax, wenn eine integerzahl eine vorangestellte 0 hat,
       gibt parseInt 0 zurück. Somit wird erst ein parseFloat gemacht.

   1.1 - 22.05.2001 / ra

     - Integer Feld Reqired integriert

   1.0 - 13.12.1999 / ra
     - Initial release

 --------------------------------------------------------------------------------*/

if (validation_messages) {
} else {
  var validation_messages = new Array() ;
  validation_messages[0]  = "Ungültige Eingabe in " ;
  validation_messages[1]  = ", kein leerer Wert erlaubt!" ;
  validation_messages[2]  = "Emailadresse darf nicht leer sein" ;
  validation_messages[3]  = "Ungültige Emailadresse ";
  validation_messages[4]  = ", Nummer erwartet!" ;
  validation_messages[5]  = "" ;
  validation_messages[6]  = ", Name (A..z,0..9,_,-) erwartet !" ;
  validation_messages[7]  = ", Datumseingabe erforderlich" ;
  validation_messages[8]  = " Format (31.12.1999)" ;
  validation_messages[9]  = "Ungültige Jahresangabe in ";
  validation_messages[10] = "Ungültige Monatsangabe in " ;
  validation_messages[11] = "Ungültiger Tag in " ;
  validation_messages[12] = "Ungültige Zeitangabe in " ;
  validation_messages[13] = " Format hh:nn[:ss]" ;
  validation_messages[14] = "Ungültige Stundenagabe in " ;
  validation_messages[15] = "Ungültige Minutenangabe in " ;
  validation_messages[16] = "Ungültige Sekundenangabe in " ;
  validation_messages[17] = ", Zeiteingabe erforderlich" ;
  validation_messages[18] = "Bitte mindestens einen Eintrag wählen fuer " ;
}

function sayAlert(aInput,aMessage) {
  alert (aMessage) ;
  aInput.focus() ;
  aInput.select() ;
}

/*-------------------------------------------------------------------------------*

  Name       testText

  Funktion   Testet, ob der Wert aus aInput nicht leer ist, ist der
             Wert leer, wird die eingabezeile fokusiert + false
             zurückgegeben.

 --------------------------------------------------------------------------------*/

function testText(aInput,Caption,aRequired) {
  if ( aInput.value == "" && aRequired)
  {
    // "Ungültige Eingabe in "  ", kein leerer Wert erlaubt!"
    alert (validation_messages[0] + Caption+validation_messages[1]) ;
    aInput.focus() ;
    aInput.select() ;
    return false ;
  } else {
    return true ;
  }
}

/*-------------------------------------------------------------------------------*

  Name       testEmail

  Funktion   Testet, ob der Wert aus aInput nicht leer ist, ist der
             Wert leer, wird die eingabezeile fokusiert + false
             zurückgegeben.

 --------------------------------------------------------------------------------*/

function testEmail(aInput,aCaption,aRequired) {
  var a = false;
  var res = false;
  var v = aInput.value;
  if (v == "") {
    if (aRequired) {
      // "Emailadresse darf nicht leer sein"
      alert (validation_messages[2]) ;
      aInput.focus() ;
      aInput.select() ;
      return false ;
    } else {
      return true ;
    }
  } else {
    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(v));
    } else {
      res = (v.search('@') >= 1 &&
             v.lastIndexOf('.') > v.search('@') &&
             v.lastIndexOf('.') >=v.length-5) &&
             v.indexOf(' ') == -1
    }
    if (res) {
      return true ;
    } else {
      // validation_messages[3]
      alert (validation_messages[3]+ aCaption) ;
      aInput.focus() ;
      aInput.select() ;
      return false ;
    }
  }
}

/*-------------------------------------------------------------------------------*

  Name       testCheckboxChecked

  Funktion   Testet, ob die Checkbox gewählt ist, falls mehrere muss mindestens
             eine gewählt sein.

 --------------------------------------------------------------------------------*/

function testCheckboxChecked(aInput,aCaption) {
  oneChecked=false ;
  if (aInput.length) {
    for (i=0;i<aInput.length;i++) {
      e=aInput[i] ;
      if (e.checked) {
        oneChecked=true;
      }
    }
  } else {
    oneChecked=aInput.checked;
  }
  if (!oneChecked) {
    alert(validation_messages[18] + " " + aCaption) ;
  }
  return oneChecked ;
}

/*-------------------------------------------------------------------------------*

  Name       testInt

  Funktion   Testet, ob der Wert aus aInput eine Ganze Zahl ist.

 --------------------------------------------------------------------------------*/

function testInt(aInput,aCaption,aRequired) {
  if ((!aRequired) && (aInput.value == "")) {
    return true ;
  } else {
    if (isNaN(aInput.value) || (parseInt(aInput.value) != parseFloat(aInput.value)))
    {
      // validation_messages[0] validation_messages[4] Nummer erwartet
      alert (validation_messages[0]+aCaption+validation_messages[4]) ;
      aInput.focus() ;
      aInput.select() ;
      return false ;
    } else {
      return true ;
    }
  }
}

function intMinMax(aValue,aMin,aMax) {
  res = false ;
  aValue = parseFloat(aValue) ;
  if (isNaN(aValue) || (parseInt(aValue) != parseFloat(aValue)))
  {
    return "err" ;
  } else {
    i = parseInt(aValue) ;
    if ((i <= aMax) && (i >= aMin)) {
      return i ;
    } else {
      return "err" ;
    }
  }
}

function testIntMaxMin(aInput,aCaption,aMax,aMin,aRequired) {
  res = false ;
  if (isNaN(aInput.value) || (parseInt(aInput.value) != parseFloat(aInput.value)))
  {
    aInput.focus() ;
    aInput.select() ;
    return false ;
  } else {
    return true ;
  }
}

function testFloat(aInput,aCaption,aRequired) {
  // alert(aInput.value+", "+parseInt(aInput.value)+", "+parseFloat(aInput.value)+", "+ (aInput.value.indexOf("."))) ;
  v = aInput.value ;
  if ((!aRequired) && (v == "")) {
    return true ;
  } else {
    if (isNaN(v)) {
      // validation_messages[0] validation_messages[4] Nummer erwartet
      alert (validation_messages[0]+aCaption+validation_messages[4]) ;
      aInput.focus() ;
      aInput.select() ;
      return false ;
    } else {
      return true ;
    }
  }
}

function testVarName(aInput,aCaption) {
  var s = aInput.value ;
  for (var i = 0 ; i < s.length ; i++) {
    if (! (
        (s.charAt(i) >= '0' && s.charAt(i) <= '9') ||
        (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') ||
        (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') ||
        (s.charAt(i) == '-') ||
        (s.charAt(i) == '_')
        )
       )
    {
      // validation_messages[0] validation_messages[6]
      alert (validation_messages[0]+Caption+validation_messages[6]) ;
      aInput.focus() ;
      aInput.select() ;
      return false ;
    }
  }
  return true ;
}

/*-------------------------------------------------------------------------------*

  Name       testDateTime

  Funktion

  Mögliche Datumsformate :

    dd.mm.yy[yy] [hh][:mm][:nn]

 --------------------------------------------------------------------------------*/

function testDateTime(aInput,aCaption,aDateRequired) {
  var error = false;

  var mdc = new Array(31,28,31,30,31,30,31,31,30,31,30,31) ;

  s = aInput.value ;

  if (s == "") {
     if (aDateRequired) {
      // validation_messages[0] validation_messages[7]
       sayAlert (aInput,validation_messages[0]+aCaption+validation_messages[7]) ;
       return false ;
     } else {
       return true ;
     }
  }

  var a = new Array() ;
  a = s.split(" ") ;
  hasTime = a.length > 1 ;

  var d = new Array() ;
  d = a[0].split(".") ;

  if (d.length != 3) {
    // validation_messages[0] validation_messages[8]
    sayAlert (aInput,validation_messages[0]+aCaption + validation_messages[8]) ;
    return false ;
  }

  yy = intMinMax(d[2],0,3000) ;
  if (((yy % 4 == 0) && ((yy % 100!= 0) || (yy % 400 == 0)))) {
    mdc[1] = 29 ;
  }
  mm = intMinMax(d[1],1,12) ;
  dim = mdc[mm-1] ;
  dd = intMinMax(d[0],1,dim) ;

  if (yy == "err") {
    // validation_messages[9] "Ungültige Jahresangabe in "
    sayAlert (aInput,validation_messages[9]+aCaption) ;
    return false ;
  } else if (mm == "err") {
    // validation_messages[10] "Ungültige Monatsangabe in "
    sayAlert (aInput,validation_messages[10]+aCaption) ;
    return false ;
  } else if (dd == "err") {
    // validation_messages[11] "Ungültiger Tag in "
    sayAlert (aInput,validation_messages[11]+aCaption) ;
    return false ;
  } else {
    // Zeitfenster
    if (yy < 80) {
      yy += yy + 1900 ;
    }
  }

  /******************************************************************
   * Zeitangabe in String Prüfen falls vorhanden Format hh:nn[:ss]
   *******************************************************************/
  if (hasTime) {
    t = a[1].split(":") ;
    if (t.length < 2) {
      // validation_messages[12] "Ungültige Zeitangabe in " validation_messages[13] " Format hh:nn[:ss]"
      sayAlert (aInput,validation_messages[12]+aCaption + validation_messages[13]) ;
      return false ;
    }

    hh = intMinMax(t[0],0,23) ;
    mm = intMinMax(t[1],0,59) ;
    ss = 0 ;
    if (t.length > 2) {
      ss = intMinMax(t[2],0,59) ;
    }
    if (hh == "err") {
      // validation_messages[14] "Ungültige Stundenagabe in "
      sayAlert (aInput,validation_messages[14]+aCaption) ;
      return false ;
    } else if (mm == "err") {
      // validation_messages[15] "Ungültige Minutenangabe in "
      sayAlert (aInput,validation_messages[15]+aCaption) ;
      return false ;
    } else if (ss == "err") {
      // validation_messages[16] "Ungültige Sekundenangabe in "
      sayAlert (aInput,validation_messages[16]+aCaption) ;
      return false ;
    }

  }
  return true ;
}

/*-------------------------------------------------------------------------------*

  Name       testTime

  Funktion

  Mögliche Zeitformate :

    [hh][(:| |.)mm][(:| |.)nn]

 --------------------------------------------------------------------------------*/

function testTime(aInput,aCaption,aDateRequired) {

  var error = false;

  s = aInput.value ;

  if (s == "") {
     if (aDateRequired) {
       // validation_messages[0] validation_messages[17] ", Zeiteingabe erforderlich"
       sayAlert (aInput,validation_messages[0]+aCaption+validation_messages[17]) ;
       return false ;
     } else {
       return true ;
     }
  }

  var a = new Array() ;
  s = s.replace(/\./,":") ;
  s = s.replace(/\./,":") ;
  s = s.replace(/ /,":") ;
  s = s.replace(/ /,":") ;

  t = s.split(":") ;
  if (t.length < 1) {
    // validation_messages[12] "Ungültige Zeitangabe in " validation_messages[13] " Format hh:mm[:ss]"
    sayAlert (aInput,validation_messages[12] + aCaption + validation_messages[13]) ;
    return false ;
  }

  hh = intMinMax(t[0],0,23) ;
  mm = intMinMax(t[1],0,59) ;
  ss = 0 ;

  if (t.length > 2) {
    ss = intMinMax(t[2],0,59) ;
  }

  if (hh == "err") {
    // validation_messages[14] "Ungültige Stundenagabe in "
    sayAlert (aInput,validation_messages[14]+aCaption) ;
    return false ;
  } else if (mm == "err") {
    // validation_messages[15] "Ungültige Minutenangabe in "
    sayAlert (aInput,validation_messages[15]+aCaption) ;
    return false ;
  } else if (ss == "err") {
    // validation_messages[16] "Ungültige Sekundenangabe in "
    sayAlert (aInput,validation_messages[16]+aCaption) ;
    return false ;
  }

  return true ;
}


