/*
* Function to check forms that have mandatory fields.
* Usage: <FORM name="formName" action="actionUrl.php" method="POST" onSubmit="checkForm(new Array("fieldName1","fieldName2"),new Array("type1","type2"))">
*
* Version: 13 April 2010
*/

function checkForm(myForm, fields, types){
  
  var result = true;
  var isEmpty = false;
  var invalidEmail = false;
  var invalidPhoneNumber = false;
  var invalidZipCode = false;
  var notANumber = false;
  var selectIsEmpty = false;
  var notInitial = false;
  var errordisplay = false;
  var checkboxNotChecked = false;
  var invalidBankAccountNumber = false;
     
  for (i=0; i<fields.length; i++){
    switch(types[i]){
      case '':
        if(!checkNotEmpty(myForm[fields[i]])){result=false;isEmpty=true;}
      break;
      case null:
        if(!checkNotEmpty(myForm[fields[i]])){result=false;isEmpty=true;}
      break;
      case 'notEmpty':
        if(!checkNotEmpty(myForm[fields[i]])){result=false;isEmpty=true;}
      break;
      case 'selectNotEmpty':
        if(!checkSelectNotEmpty(myForm[fields[i]])){result=false;selectIsEmpty=true;}
      break;
      case 'email':
        if(!validateEmail(myForm[fields[i]])){result=false;invalidEmail=true;}
      break;
      case 'phoneNumber':
        if(!validatePhoneNumber(myForm[fields[i]])){result=false;invalidPhoneNumber=true;}
      break;
      case 'zipCode':
        if(!validateZipCode(myForm[fields[i]])){result=false;invalidZipCode=true;}
      break;
      case 'onlyNumbers':
        if(!validateOnlyNumber(myForm[fields[i]])){result=false;notANumber=true;}
      break;
      case 'checkbox':
        if(!checkboxChecked(myForm[fields[i]])){result=false; checkboxNotChecked=true;}
      break;
      case 'bankAccountNumber':
        if(!validateBankAccountNumber(myForm[fields[i]])){result=false; invalidBankAccountNumber=true;}
    }
  }
  
  msg = "";
  
  if(isEmpty){
    msg += "U heeft niet alle verplichte velden ingevuld.\n";
    errordisplay = true;
  }
  if(selectIsEmpty){
  	msg += "\n - U dient een keuze te maken uit de lijst.";
  	errordisplay = true;
  }
  if(invalidEmail){
   msg += "\n - U heeft geen geldig e-mailadres ingevuld.";
   errordisplay = true;
  }
  if(invalidPhoneNumber){
   msg += "\n - U heeft geen geldig telefoonnummer ingevuld.";
   errordisplay = true;
  }
  if(invalidZipCode){
   msg += "\n - U heeft geen geldige postcode ingevuld.";
   errordisplay = true;
  }
  if(invalidBankAccountNumber){
   msg +=  "\n - U heeft geen geldig rekeningnummer ingevuld.";
   errordisplay = true;
  }
  if(notANumber){
   msg +=  "\n - De rode velden mogen alleen cijfers bevatten.";
   errordisplay = true;
  }  
  if(checkboxNotChecked){
    msg +=  "\n - U dient te machtigen om verder te gaan.";
    errordisplay = true;
  }
  
  if (errordisplay == true) {
   	alert(msg);
   	msg = "";
  }
  return result;
}

function checkNotEmpty(myObject){
  if(myObject.value==""){
      myObject.focus();
      myObject.style.backgroundColor="#99CCFF";
      return false;
  }
  myObject.style.backgroundColor="";
  return true;
}

function checkboxChecked(myObject){
  if(!myObject.checked){
      myObject.focus();
      myObject.style.backgroundColor="#99CCFF";
      return false;
  }
  myObject.style.backgroundColor="";
  return true;
}

function checkSelectNotEmpty(myObject){
  if(myObject.options[myObject.selectedIndex].value==""){
    myObject.focus();
    myObject.style.backgroundColor="#99CCFF";
    return false;
  }
  myObject.style.backgroundColor="";
  return true;
}

function validateEmail(myObject){
  email = myObject.value.replace(/^\s+|\s+|\s+$/g, "");
  
  if(!email.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)) {
    myObject.style.backgroundColor="#99CCFF";
    myObject.focus();
    return false;
  }
  
  myObject.style.backgroundColor="";
  return true;
}

function validatePhoneNumber(myObject){
  phonenumber = myObject.value.replace(/^\s+|\s+|-+|\(|\)|\s+$/g, "");
    
  if(!phonenumber.match(/^[0-9]+$/) || phonenumber.length != 10) {
    myObject.style.backgroundColor="#99CCFF";
    myObject.focus();
    return false;
  }
  myObject.style.backgroundColor="";
  return true;
}

function validateZipCode(myObject) {
  zipcode = myObject.value.replace(/^\s+|\s+|\s+$/g, "");
  
  if(!zipcode.match(/\d\d\d\d[a-z|A-Z][a-z|A-Z]/)) {
      myObject.style.backgroundColor="#99CCFF";
      myObject.focus();
      return false;
  }
  myObject.style.backgroundColor="";
  return true;
}

function validateOnlyNumber(myObject){
  if(!myObject.value.match(/^[0-9]+$/)){
    myObject.style.backgroundColor="#FF6633";
    myObject.focus();
    return false;
  }
  myObject.style.backgroundColor="";
  return true;
}

function validateBankAccountNumber(myObject) {
  var number = myObject.value.replace(/^[0\s]+|\s+|\.+/g, "");
  
  if(document.getElementById('rekening_type_bank').checked == true) {
    if(number.length < 9 || number.length > 10) {
      myObject.style.backgroundColor="#FF6633";
      myObject.focus();
      return false;
    }
    
    if(number.length < 10) {
      var number_prefix = '';
      var gap_length = 10 - number.length;
      
      for(var i = 0; i < gap_length; i++) {
        number_prefix += '0';
      };
      
      number = number_prefix + number;
    }
    
    var total =  parseInt(number.substring(0,1)) * 1 +
                  parseInt(number.substring(1,2)) * 2 +
                  parseInt(number.substring(2,3)) * 3 +
                  parseInt(number.substring(3,4)) * 4 +
                  parseInt(number.substring(4,5)) * 5 +
                  parseInt(number.substring(5,6)) * 6 +
                  parseInt(number.substring(6,7)) * 7 +
                  parseInt(number.substring(7,8)) * 8 +
                  parseInt(number.substring(8,9)) * 9 +
                  parseInt(number.substring(9,10)) * 10;
    
    var quotient = total / 11;
    
    if((quotient % 1) == 0 && quotient > 0) {
      myObject.style.backgroundColor="";
      return true;
    } else {
      myObject.style.backgroundColor="#FF6633";
      myObject.focus();
      return false;
    }
  } else {
    if(number.length > 7) {
      myObject.style.backgroundColor="#FF6633";
      myObject.focus();
      return false;
    }
  }
  
  myObject.style.backgroundColor="";
  return true;
}