/**
 * validatie.js
 *
 * @author Zimon
 * @version 1.00
 * @copyright Van der Let & Partners Identity 2007
 *
 */
//var om de alertmessage op te bouwen
var alertMessage = '';


//submitfunctie
function submitForm(formID) {
  //init();
  if(ValidateForm(formID)) {
    var form = document.getElementById("letsForm"+formID);
    form.submit();
  }
  else {

    alert(alertMessage);
    alertMessage = "";
  }
}

// validatiefunctie loopt alle velden bijlangs en valideert deze
// 1. functie die in het de validate-tag staat
// 2. min & max lenght van velden
// 3. verplichte velden
function ValidateForm(formID) {

  var form = document.getElementById("letsForm"+formID);
  var nrElements = form.length;
  var valid = true;
  
  // array om bij te houden welke checkboxen en radio's al gevalideerd zijn
  var checkedBoxes = new Array();
  
  // voor het aanpassen van de kleurtjes
  var modifiedBoxes = new Array();

  for(var i=0; i<nrElements; i++) {

    var validate = form[i].getAttribute('validate');
    var fieldID = form[i].id;
    var Type    = form[i].type;
    var value   = form[i].value;
    


    if(fieldID!='') {

      //validatiearray opzoeken
      validateArr = new Array();
      for(var j = 0; j<validateElem.length; j++) {

          if(validateElem[j][0]==fieldID) {

            validateArr = validateElem[j];
          }
      }
      //als gevonden, dan valideren
      if(validateArr.length>0) {

        var required  = validateArr[1];
        var minlength = validateArr[2];
        var maxlength = validateArr[3];
        var mailField = validateArr[4];

        var elemValid = true;

        //opgegeven validatiefunctie controleren
        if(validate!=null && validate!='') {
          var checkvalid = eval(validate + '("' + form[i].value + '")');

          if (checkvalid==false) {
            //bijbehorende bericht bepalen
            for(var k=0; k<validateMsg.length; k++) {

              if(validateMsg[k][0]==validate) {

                var fieldname = document.getElementById("label"+fieldID).innerHTML;
                alertMessage += fieldname + ': ' + validateMsg[k][1]+'\n';
              }
            }
          }
          elemValid = checkvalid;
        }

        // required controleren

        if(elemValid==true && (required != 0 && value=="")) {

          elemValid = false;
          for(var k=0; k<validateMsg.length; k++) {

            if(validateMsg[k][0]=='requiredError') {

              var fieldname = document.getElementById("label"+fieldID).innerHTML;
              alertMessage += fieldname + ': ' + validateMsg[k][1]+'\n';
            }
          }
        }

        // Controleer checkbox
        if (Type == 'checkbox' && form[i].checked==false && required != 0) {
          
          
          // eerst controleren of deze checkbox niet al gecontroleerd is
          
          if(!in_array(form[i].name, checkedBoxes)) {
            checkedBoxes.push(form[i].name);
            
            // alle checkboxen naleopen en controleren of er eentje geset is
            var checkboxes = document.getElementsByName(form[i].name);
            //elemValid = t; 
            
            elemValid = false;
            
            for(var boxnr=0 ; boxnr<checkboxes.length; boxnr++ )  {
              
              if(checkboxes[boxnr].type=='checkbox') {

                if(checkboxes[boxnr].checked == true ) {

                  elemValid = true;  
                }
              }
            }
            
            if(!elemValid) {
              
              elemValid = false;
              for(var k=0; k<validateMsg.length; k++) {
    
                if(validateMsg[k][0]=='requiredError') {
    
                  var fieldname = document.getElementById("label"+fieldID).innerHTML;
                  alertMessage += fieldname + ': ' + validateMsg[k][1]+'\n';
                }
              }
            }
          }
        }
        
        // Controleer checkbox

        if (Type == 'radio' && required != 0) {
          
          
          // eerst controleren of deze checkbox niet al gecontroleerd is
          
          if(!in_array(form[i].name, checkedBoxes)) {
            checkedBoxes.push(form[i].name);
            
            // alle checkboxen naleopen en controleren of er eentje geset is
            var radioboxes = document.getElementsByName(form[i].name);
            //elemValid = t; 
            
            elemValid = false;
            
            for(var boxnr=0 ; boxnr<radioboxes.length; boxnr++ )  {
              
              if(radioboxes[boxnr].type=='radio') {

                if(radioboxes[boxnr].checked == true ) {

                  elemValid = true;  
                }
              }
            }
            
            if(!elemValid) {
              
              elemValid = false;
              for(var k=0; k<validateMsg.length; k++) {
    
                if(validateMsg[k][0]=='requiredError') {
    
                  var fieldname = document.getElementById("label"+fieldID).innerHTML;
                  alertMessage += fieldname + ': ' + validateMsg[k][1]+'\n';
                }
              }
            }
          }
        }        

        // alleen minlength
        if(elemValid==true && (minlength>0 && minlength!=null && (value.length < minlength))) {
          elemValid = false;

          for(var k=0; k<validateMsg.length; k++) {

            if(validateMsg[k][0]=='minCharsError') {

              var tmpMessage = validateMsg[k][1].replace("%maxaantal", maxlength);
              tmpMessage = tmpMessage.replace("%minaantal", minlength);

              var fieldname = document.getElementById("label"+fieldID).innerHTML;
              alertMessage += fieldname + ': ' + tmpMessage+'\n';
            }
          }
        }

        // alleen maxlength
        if(elemValid==true && (maxlength>0 && maxlength!=null && (value.length > maxlength))) {
          elemValid = false;

          for(var k=0; k<validateMsg.length; k++) {

            if(validateMsg[k][0]=='maxCharsError') {

              var tmpMessage = validateMsg[k][1].replace("%maxaantal", maxlength);
              tmpMessage = tmpMessage.replace("%minaantal", minlength);

              var fieldname = document.getElementById("label"+fieldID).innerHTML;
              alertMessage += fieldname + ': ' + tmpMessage+'\n';
            }
          }
        }

        //max en min length als deze allebei geset zijn
        if(elemValid==true && ((minlength>0 && minlength!=null && (value.length < minlength)) && (maxlength>0 && maxlength!=null && (value.length > maxlength)))) {

          elemValid = false;

          for(var k=0; k<validateMsg.length; k++) {

            if(validateMsg[k][0]=='nrCharsError') {

              var tmpMessage = validateMsg[k][1].replace("%maxaantal", maxlength);
              tmpMessage = tmpMessage.replace("%minaantal", minlength);

              var fieldname = document.getElementById("label"+fieldID).innerHTML;
              alertMessage += fieldname + ': ' + tmpMessage+'\n';
            }
          }
        }

        if(mailField && elemValid==true && !Validate_Email(value)) {

          elemValid = false;

          //bijbehorende bericht bepalen
          for(var k=0; k<validateMsg.length; k++) {

            if(validateMsg[k][0]=="Validate_Email") {

              var fieldname = document.getElementById("label"+fieldID).innerHTML;
              alertMessage += fieldname + ': ' + validateMsg[k][1]+'\n';
            }
          }
        }



        if(elemValid == false && !in_array(form[i].name, modifiedBoxes)) {

          modifiedBoxes.push(form[i].name);
          
          //hier iets doen met het element
          var tempstring = form[i].className;
          var strLen = tempstring.length;

          //controleren of het veld al niet een error class heeft
          if(strLen<6 || tempstring.substring(strLen-6)!='_error') {

            if(form[i].type!='checkbox' && form[i].type!='radio' ) {
              
              form[i].className = form[i].className + '_error';
            }
            else {
              
              var radioboxes = document.getElementsByName(form[i].name);
              //elemValid = t; 
              for(var boxnr=0 ; boxnr<radioboxes.length; boxnr++ )  {
                
                if(radioboxes[boxnr].type=='radio' || radioboxes[boxnr].type=='checkbox') {
                  
                  radioboxes[boxnr].className = radioboxes[boxnr].className+'_error';
                }
              }
            }
              
          }
          valid = elemValid;
        }
        else if(!in_array(form[i].name, modifiedBoxes)){
          
          modifiedBoxes.push(form[i].name);  
          
          if(form[i].type!='checkbox' && form[i].type!='radio' ) {
            
            form[i].className = form[i].className.replace('_error', "");  
          }
          else {
            var radioboxes = document.getElementsByName(form[i].name);
            //elemValid = t; 
            for(var boxnr=0 ; boxnr<radioboxes.length; boxnr++ )  {
              
              if(radioboxes[boxnr].type=='radio' || radioboxes[boxnr].type=='checkbox') {

                radioboxes[boxnr].className = radioboxes[boxnr].className.replace('_error', "");
              }
            }         
          }
          

        }

      }
    }

  }

  return valid;
}


function in_array(stringToSearch, arrayToSearch) {
  
  for (s = 0; s < arrayToSearch.length; s++) {
    thisEntry = arrayToSearch[s].toString();
    
    if (thisEntry == stringToSearch) {
       return true;
    }
  }
  return false;
}



/************************* Validatiefuncties ***********************/
//deze mag niet verwijderd worden, omdat deze voor de het e-mailveld gebruikt wordt
function Validate_Email(value) {

  var emailRe = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/;
  var result = emailRe.test(value);

  return result;
}


//controleer of er alleen numerieke waarden in een string zitten
function Validate_Numeric(value) {

  var RE = /^\d*$/;
  var result = RE.test(value);

  return result;
}

function Validate_Date(value) {

  //array met de dagen per maand
  var daysPerMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31);

  var dateArray = value.split("-");

  if(dateArray.length==3) {

    if (dateArray[0].length==2 && dateArray[1].length==2 && dateArray[2].length==4) {

      if(dateArray[0] <= daysPerMonth[dateArray[1]-1]) {
        return true;
      }
      else {
        return false
      }
    }
    else {
      return false;
    }
  }
  else {
    return false;
  }
}

function Validate_ElfProef(value) {
	// verwijder alle tekens die geen cijfers zijn
	value=value.replace(/\D/g,"");

	aantal_tekens=value.length;
	var som=0;
	// loop door de 9 cijfers met de 11 proef formule
	for (i=1; i<10; i++) {

	  getal=value.charAt(i-1);
		som+=getal*(10-i);
	}
	// geef resultaat van check terug
	if (som % 11==0 && aantal_tekens==9) {

		return true;
	}
	else {

		return false;
	}
}

function validate_imgExtension(value) {

  var regExp = /^([a-zA-Z].*|[1-9].*)\.(jpg|JPG|jpeg|JPEG|gif|GIF|bmp|BMP|png|PNG)$/;

  return regExp.test(value);

}

function validate_docExtension(value) {

  var regExp = /^([a-zA-Z].*|[1-9].*)\.(doc|DOC|pdf|PDF|rtf|RTF|txt|TXT|docx|DOCX)$/;

  return regExp.test(value);
}
