/*------------------ Formulare ------------------*/
/*---- ist das Zeichen eine Zahl? ----*/
function isDigit(ch)
{
  if ((ch >= '0') && (ch <= '9'))
    return true;
  else
    return false;
}
/*---- ist das Zeichen ein Buchstabe? ----*/  
function isAlpha(ch)
{
  if (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')))
    return true;
  else
    return false;
}
/*---- ist das Zeichen alphanumerisch? ----*/  
function isAlnum(ch)
{
  if (isAlpha(ch) || isDigit(ch))
    return true;
  else
    return false;
}
/*--- ist Zeichen aus str2 nicht in str1? ----*/  
function notIn(str1, str2)
{
  var i = 0;
  var j = str2.length;
  for(;i<j;i++)
  {
    var str3 =  str2.charAt(i);
    if(str1.indexOf(str3) != -1)
      return false;
  }
  return true;
}
/*---- ist der Username gültig ----*/
function checkUsername(username, mustBeQuoted)
{
  var i = 0;
  var j = username.length;
  if (username.charAt(0) != '"')
  {
    if ((username.charAt(0) <  ' ') || (username.charAt(0) >  '~')
          || !notIn(mustBeQuoted, username.charAt(0)))
      return false;
    for(i=1;i<j;i++)
    {
      if (((username.charAt(i) < ' ') || (username.charAt(i) >  '~')
            || !notIn (mustBeQuoted, username.charAt(i)))
           && (username.charAt(i-1) != '\\'))
        return false;
    }  
  }
  else
  {
    if (username.charAt(j-1) != '"')
      return false;
    for(i=1;i<j-1;i++)
    {
      if (((username.charAt(i) == '\n') || (username.charAt(i) == '\r')
            || (username.charAt(i) == '\"'))
          && (username.charAt(i-1) != '\\'))
        return false;
    }  
  }
  return true;
}
/*---- ist eine Zifferfolge vorhanden? ----*/  
function checkNr (nr)
{
  var i=0;
  var j=nr.length;

  if(j < 1)
    return false;
  for(;i<j;i++)
    if((nr.charAt(i) < '0') || (nr.charAt(i) > '9'))
      return false;
    return true;
}
/*---- ist die IP-Adresse gültig? ----*/  
function checkIpnr(ipnr)
{
  var iL=0;
  var iC=0;
  var i=0;
  var sNr = "";
  
  for(;i< ipnr.length;i++)
  {
    if (ipnr.charAt(i) == '.')
    {
      if (!iL || (iL> 3) || parseInt(sNr,10) > 255)
        return false;
      iC++;
      iL = 0;
      sNr = "";
      continue;
    }
    if (isDigit (ipnr.charAt(i)))
    {
      iL++;
      sNr = sNr + ipnr.charAt(i);
      continue;
    }
    return false;
  }
  if (parseInt(sNr,10) > 255)
    return false;
  if (((iC==3) && (iL>=1) && (iL<=3)) || ((iC==4) && (!iL)))
    return true;
  else
    return false;
}
/*---- ist der Domain Name gütig? ----*/  
function checkFqdn(fqdn)
{
  var iL=0;
  var iC=0;
  var i=fqdn.length-1;

  if ((fqdn.charAt(0) == '.') || (fqdn.charAt(0) == '-'))
    return false;
  if (fqdn.charAt(i) == '.')
    i=i-1;
  for(;i>=0;i--)
  {
    if (fqdn.charAt(i) == '.')
    {
      if (iL < 2 && iC < 2) 
        return false;
      if (fqdn.charAt(i-1) == '-')
        return false;
      iC++;
      iL = 0;
      continue;
    }
    if (isAlnum (fqdn.charAt(i)))
    {
      iL++;
      continue;
    }
    if (fqdn.charAt(i) == '-')
    {
      if (!iL)
        return false;
      iL++;
      continue;
    }
    return false;
  }
  if (!iC || (iL == 1 && iC < 2) || (!iL && iC==1)) {
    return false;
  }
  return true;
}
/*---- ist der Hostname gütig? ----*/  
function checkHostname(hostname)
{
  if (hostname.charAt(0) == '[')
  {
    if (hostname.charAt(hostname.length-1) != ']')
      return false;
    var ipnr = hostname.substring(1, hostname.length -1);
      return checkIpnr(ipnr);
  }
  if (hostname.charAt(0) == '#')
  {
    var nr = hostname.substring(1, hostname.length);
      return checkNr(nr);
  }
  return checkFqdn(hostname);
}
/*---- ist die E-mail ohne Realname gütig? ----*/
function checkEmailAdr(address)
{
  var status = true;
  var username = "";
  var hostname = "";
  
  if (address.length < 8)
    return false;
  var seperate = address.lastIndexOf("@");
  if (seperate == -1) 
    return false;
  username = address.substring(0, seperate);
  if (! checkUsername(username, "<>()[],;:@\" "))
    return false;
  hostname = address.substring(seperate+1, address.length);
  if (! checkHostname(hostname))
    return false;
  return true;
}
/*---- Email Adresse überprüfen wahr, wenn die E-Mail Adresse als gütig eingestuft 
  wurde, wobei der zweite Parameter festlegt, ob Realname akzeptiert werden oder nicht ----*/
function checkEmail(email, allowFullname)
{
  var existFullname = false;
  var status = true;
  var fullname = "";
  var adress = "";
  if (email.length < 8)
    return false;
  var emailBegin = email.indexOf("<");
  var emailEnd = email.lastIndexOf(">");
  
  if ((emailBegin == -1) && (emailEnd == -1))
    return checkEmailAdr(email);
  if (((emailBegin == -1) && (emailEnd != -1)) 
       || ((emailBegin != -1) && (emailEnd == -1)))
    return false;
   
  adress = email.substring(emailBegin+1, emailEnd);
  if (! checkEmailAdr(adress))
    return false;
  if (email.length == adress.length + 2)
    return true;
  else
    if (! allowFullname)
      return false;
  if (emailEnd == email.length - 1)
  {
    if (emailBegin == 0)
      return true;
    if (email.charAt(emailBegin -1) != ' ')
      return false;
    fullname = email.substring(0, emailBegin-1);
    return checkUsername (fullname, "<>()[],;:@\"");
  }
  return false;
}
function CheckFormName(Formular)
{
  if(Formular.realname.value.length < 3)
  {
    alert("Bitte den Namen überprüfen");
    Formular.realname.focus();
    return false;
  }
  return true;
}
function CheckFormEmail(Formular)
{
  if(Formular.email.value != "")
  {
    if (! checkEmail(Formular.email.value, true))
    {
      alert("Bitte die E-Mail-Adresse überprüfen");
      Formular.email.focus();
      return false;
    }
  }
  return true;
}
/*---- Formular Eingaben prüfen ----*/
function CheckFormular(Formular)
{
  if(CheckFormName(Formular) && CheckAdresse(Formular) && CheckFormEmail(Formular))
  {
    Formular.submit();
  }
}
/*---- Formular Person prüfen 
  Name Pflicht
  Wenn email iO kein Telefon
  Wenn kein email dann Telefon Pflicht
----*/
function CheckPerson(Formular)
{
  if((Formular.email.value == "") && (Formular.telefon.value == ""))
  {
    if(!CheckAdresse(Formular))
    {
      alert("Bitte die Telefon Nr oder\ndie E-Mail-Adresse eingeben");
      return false;
    }
  }
  else
  {
    return CheckFormEmail(Formular);
    if (Formular.telefon.value != "")
    {
      if(Formular.telefon.value.length < 5)
      {
        alert("Bitte die TelefonNr überprüfen");
        Formular.telefon.focus();
        return false;
      }
    }
  }
  return true;
}
/*---- Formular Adresse prüfen ----*/
function CheckAdresse(Formular)
{
  if(Formular.strasse.value.length < 3)
  {
    alert("Bitte die Straße überprüfen");
    Formular.strasse.focus();
    return false;
  }
  if(Formular.plz.value.length < 5)
  {
    alert("Bitte die PLZ überprüfen");
    Formular.plz.focus();
    return false;
  }
  if(Formular.ort.value.length < 3)
  {
    alert("Bitte den Ort überprüfen");
    Formular.ort.focus();
    return false;
  }
  return true;
}
