function validate(form){
	var reason = "";

	var error = false;
	var day = '';
	var month = '';
	var year = '';
	var x = 0;
	if (!document.getElementsByTagName) return false;
		
	elementsInputs = form.getElementsByTagName("input");
	
	for (var i=0; i < elementsInputs.length; i++){
		if ($(elementsInputs[i]).hasClass("req_empty")){
			if (validateEmpty(elementsInputs[i])){
				error = true;
			}
		}else if ($(elementsInputs[i]).hasClass("req_email")){
			if (validateEmail(elementsInputs[i])){
				error = true;
			}
		}else if (elementsInputs[i].className == "req_mobile"){
			if (validateMobile(elementsInputs[i])){
				error = true;
			}
		}else if ($(elementsInputs[i]).hasClass("req_postcode")){
			if (validatePostcode(elementsInputs[i])){
				error = true;
			}
		}else if ($(elementsInputs[i]).hasClass("req_gebdatum")){
			
			if (elementsInputs[i].name == 'gebdatum_dag'){
				day = elementsInputs[i];
				x = 1;
			}else if (elementsInputs[i].name == 'gebdatum_maand'){
				month = elementsInputs[i];
				x = 2;
			}else if (elementsInputs[i].name == 'gebdatum_jaar'){
				year = elementsInputs[i];
				x = 3;
			}
	
			if (x == 3){
				if (validateGedatum(day, month, year)){
					error = true;
				}
			}

		}else if ($(elementsInputs[i]).hasClass("req_banknumber")){
			if(validateBankAccount(elementsInputs[i])){
				error = true;
			}
		}
	}

	if (error) {
		return false;
	}

	return true;
}

function validateEmpty(fld) {
    var error = false;
  
    if (fld.value.length == 0) {
        $(fld).addClass('error');
        error = true;
    }else{
        $(fld).removeClass('error');
    }
    return error;   
}

function trim(s){
  return s.replace(/^\s+|\s+$/, '');
} 

function validateEmail(fld) {
    var error = false;
    var tfld = trim(fld.value);                       
    var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
    var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ;
    
    if (fld.value == "") {
       	$(fld).addClass('error');
        error = true;
    } else if (!emailFilter.test(tfld)) {    
       	$(fld).addClass('error');
        error = true;
    } else if (fld.value.match(illegalChars)) {
        $(fld).addClass('error');
        error = true;
    } else {
        $(fld).removeClass('error');
    }
    return error;
}

function validateMobile(fld) {
    var error = false;
    var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, '');     

    if (fld.value == "") {
        fld.style.background = '#efc8ca';
    	fld.style.border = 'solid 1px #d40e16';
    	error = true;
    }else if (isNaN(parseInt(stripped))){
        fld.style.background = '#efc8ca';
    	fld.style.border = 'solid 1px #d40e16';
    	error = true;
    }else if (!(stripped.length == 10)){
        fld.style.background = '#efc8ca';
    	fld.style.border = 'solid 1px #d40e16';
    	error = true;
    }if(fld.value.substring(0,2)!="06"){
    	fld.style.background = '#efc8ca';
    	fld.style.border = 'solid 1px #d40e16';
    	error = true;
    }else{
/*    	fld.style.background = '#EBEBEB';
    	fld.style.border = 'solid 1px #717174';*/
    }
    
    return error;
}

function validatePostcode(fld){ 
	
	var error = false;
	var filter = /^[1-9]{1}[0-9]{3}[ ]?[a-z]{2}/i;
	
	if (fld.value == "") {
        jQuery(fld).addClass('error');
    	error = true;
    }if (filter.exec(fld.value) == null){
        jQuery(fld).addClass('error');
    	error = true;
    }else{
        jQuery(fld).removeClass('error');
    }
    
	return error;
} 

function validateGedatum(day, month, year){ 
	var error = false;

	if (isNaN(parseInt(day.value)) || isNaN(parseInt(month.value)) || isNaN(parseInt(year.value))){
		day.style.background = '#efc8ca';
    	day.style.border = 'solid 1px #d40e16';			
    	month.style.background = '#efc8ca';
    	month.style.border = 'solid 1px #d40e16';	    	
    	year.style.background = '#efc8ca';
    	year.style.border = 'solid 1px #d40e16';
		error = true;
	}		
	
	if (day.value < 1 || day.value > 31) {
		day.style.background = '#efc8ca';
    	day.style.border = 'solid 1px #d40e16';			
    	month.style.background = '#efc8ca';
    	month.style.border = 'solid 1px #d40e16';	    	
    	year.style.background = '#efc8ca';
    	year.style.border = 'solid 1px #d40e16';
		error = true;
	}
	
	if (month.value < 1 || month.value > 12) { 
		day.style.background = '#efc8ca';
    	day.style.border = 'solid 1px #d40e16';			
    	month.style.background = '#efc8ca';
    	month.style.border = 'solid 1px #d40e16';	    	
    	year.style.background = '#efc8ca';
    	year.style.border = 'solid 1px #d40e16';
		error = true;
	}

	if ((month.value==4 || month.value==6 || month.value==9 || month.value==11) && day.value==31) {
		day.style.background = '#efc8ca';
    	day.style.border = 'solid 1px #d40e16';			
    	month.style.background = '#efc8ca';
    	month.style.border = 'solid 1px #d40e16';	    	
    	year.style.background = '#efc8ca';
    	year.style.border = 'solid 1px #d40e16';
		error = true;
	}
	
	if (month.value == 2) { 
		var isleap = (year.value % 4 == 0 && (year.value % 100 != 0 || year.value % 400 == 0));
		if (day.value>29 || (day.value==29 && !isleap)) {
			day.style.background = '#efc8ca';
	    	day.style.border = 'solid 1px #d40e16';			
	    	month.style.background = '#efc8ca';
	    	month.style.border = 'solid 1px #d40e16';	    	
	    	year.style.background = '#efc8ca';
	    	year.style.border = 'solid 1px #d40e16';
			error = true;
   		}
	}
	
	return error;
}

function validateBankAccount(fld) {
var error = false;

 // Remove all characters that are not a number.
 cleanValue = fld.value.replace(/\D/g,'');
 
 $('#profilefield_2').val(cleanValue);
 
 // Split into array
 var numbers = cleanValue.split('');
 
 // Length of bank account number
 var nLength = numbers.length;
 
 var sum = 0;
 if (nLength == 9) {
  for (var i = 0; i < 9; i++) {
   sum += (9 - i) * numbers[i];
  }
 }
 // Giro numbers with length of 6 or 7 are allowed, otherwise bank number should match 11-proof.
 if (nLength < 6 || nLength == 8 || sum % 11 != 0 || nLength > 9) {
  error = true;
  $(fld).addClass('error');
  return error;
 };
 // Correct number, return clean value (only numbers)
   $(fld).removeClass('error');
 return error;
}
