
function validateForm(button) {
  var result;

  result = checkRequiredProductFields(button);

  if (result) {
    result = checkRequiredFields();
  };
  
  if (result) {
	  return checkMailFields();
  }
  else {
	  return false;
  };
};

function checkDeliverOption() {
  // ueberpruefe, ob Lieferoption gesetzt wurde
  if (   document.getElementById("deliver_option_1").checked != true
      && document.getElementById("deliver_option_2").checked != true
      && document.getElementById("deliver_option_3").checked != true ) {
    return "Lieferoption";
  };
    
  return "";
};

function checkRequiredProductFields(button) {
  var errors = "";
  
  if ( button == "add" ) {
    // pruefe nur letzten artikel
    errors += checkLastArticle();
    if (errors != "") {
      alert("Die folgenden Felder müssen noch korrekt ausgefüllt werden,\nbevor eine Bestellung hinzugefügt werden kann:\n\n" + errors);
      return false;
    }
    else {
      return true;
    }; 
  }
  else if ( button == "next" ) {
    // pruefe alle artikel
    return checkAllArticles();
  }
  else {
    errors = "Anzahl\n";
  }
  
	if ( productFields[0] == '' ) {
	  errors = "";
	};
	
	for(i=0;i<productFields.length;i++) {
	  if (document.getElementById(productFields[i])) {
	    if (   document.getElementById(productFields[i]).value != ""
	        && document.getElementById(productFields[i]).value != 0
	        && isDigit(document.getElementById(productFields[i]).value)) {
	      errors = "";
	    };
	  };
	};

  if ( button != "publications" ) {
    errors += checkDeliverOption();
  };
  
  if (errors != "") {
    alert("Die folgenden Felder müssen noch korrekt ausgefüllt werden,\nbevor das Formular gesendet werden kann:\n\n" + errors);
    return false;
  }
  else {
    return true;
  }; 
};

function checkRequiredFields() {
  var errors = "";

  for(i=0;i<requiredFields.length;i++) {
	  if (document.getElementById(requiredFields[i])) {
      if (document.getElementById(requiredFields[i]).value == "") {
        if ( requiredFields[i] == "EMail"){
          errors += "E-Mail\n";
        }
        else {
          errors += requiredFields[i] + "\n";
        };
      };
		};
  };
	
  if (errors != "") {
    alert("Die folgenden Felder müssen noch ausgefüllt werden,\nbevor das Formular gesendet werden kann:\n\n" + errors);
    return false;
  }
  else {
	return true;
  }; 
}

function checkMailFields() {
  var errors = "";

  for(i=0;i<emailFields.length;i++) {
	  if (document.getElementById(emailFields[i]) && document.getElementById(emailFields[i]).value != "") {
	    if (!checkEmail(document.getElementById(emailFields[i]).value, true)) {
        if ( emailFields[i] == "EMail"){
          errors += "E-Mail\n";
        }
        else {
          errors += emailFields[i] + "\n";
        };
	    };
	  };
  };
  
  if (errors != "") {
    alert("Bitte prüfen Sie den Inhalt folgender E-Mail-Felder:\n\n" + errors);
    return false;
  }
  else {
	return true;
  }; 
}

var allready_confirmed = false;

 function isDigit( ch )
  {
    if ( (ch >= '0') && (ch <= '9') )
      return true;
    else
      return false;
  }


  function isAlpha( ch )
  {
    if ( ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) )
      return true;
    else
      return false;
  }


  function isAlnum( ch )
  {
    if ( isAlpha( ch ) || isDigit( ch ) )
      return true;
    else
      return false;
  }


  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;
  }


  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;
  }


  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;
  }


  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;
  }


  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;

  }


  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 );
  }


  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;
  }


  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 checkAllArticles() {
  var errors = "";
  for ( j = 0; j < planFields.length-1; ++j ) {
	  if (document.getElementById(planFields[j])) {
	    if (document.getElementById(planFields[j]).value == "") {
	      errors += "Bebauungsplan Nr.\n";
	      var count = "Anzahl\n";
	      if ( productFields[0] == '' ) {
	        count = "";
	      };
	
	      var option_count = (productFields.length/planFields.length);
	
	      for( i=option_count*j; i<option_count*j+option_count; i++ ) {
	        if (document.getElementById(productFields[i])) {
	          if (   document.getElementById(productFields[i]).value != ""
	              && document.getElementById(productFields[i]).value != 0) {
	            count = "";
	          };
	        };
	      };
	    
	      errors += count; 
	    }
	    else {
	      errors = "Anzahl\n";
	
	      if ( productFields[0] == '' ) {
	        errors = "";
	      };
	
	      var option_count = (productFields.length/planFields.length);
	      for( i=option_count*j; i<option_count*j+option_count; i++ ) {
	        if (document.getElementById(productFields[i])) {
	          if (   document.getElementById(productFields[i]).value != ""
	              && document.getElementById(productFields[i]).value != 0) {
	            errors = "";
	          };
	        };
	      };
	
	    };
	  };
  };
  
  if ( planFields.length == 1 ) {
    errors += checkLastArticle();
  }
  
  errors += checkDeliverOption();
    
	if (errors != "") {
	  alert("Die folgenden Felder müssen noch korrekt ausgefüllt werden,\nbevor eine Bestellung hinzugefügt werden kann:\n\n" + errors);
	  return false;
	}
	else {
	  return true;
	}; 
}

function checkLastArticle() {
  var j = planFields.length-1;
  var errors = "";
  
  if (document.getElementById(planFields[j])) {
    if (document.getElementById(planFields[j]).value == "") {
      errors += "Bebauungsplan Nr.\n";
      var count = "Anzahl\n";

      if ( productFields[0] == '' ) {
        count = "";
      };

      var option_count = (productFields.length/planFields.length);

      for( i=option_count*j; i<option_count*j+option_count; i++ ) {
        if (document.getElementById(productFields[i])) {
          if (   document.getElementById(productFields[i]).value != ""
              && document.getElementById(productFields[i]).value != 0) {
            count = "";
          };
        };
      };
    
      errors += count; 
    }
    else {
      errors = "Anzahl\n";

      if ( productFields[0] == '' ) {
        errors = "";
      };

      var option_count = (productFields.length/planFields.length);
      for( i=option_count*j; i<option_count*j+option_count; i++ ) {
        if (document.getElementById(productFields[i])) {
          if (   document.getElementById(productFields[i]).value != ""
              && document.getElementById(productFields[i]).value != 0) {
            errors = "";
          };
        };
      };

    };
  };
  
  return errors;  
}

