var melding = "";
var lastPassedField = "";
var PostedForm = "";

function validate(thisForm){

		PostedForm = thisForm;
		lastPassedField = "Just a string that doesn\'t match any field\'s name-attribute";

		// check every element is this form, if it's not a nameless button

		for (var i=0; i < PostedForm.length; i++) {
			if( (PostedForm.elements[i].type != "submit") &&
				(PostedForm.elements[i].type != "hidden")) {

				//skip elements with the same name (eg: radiobuttons and checkboxes)
				if(PostedForm.elements[i].name != lastPassedField && PostedForm.elements[i].disabled!=true) {
					checkField(PostedForm.elements[i]);
					
					// an error alerts the user
					if (melding != "") {
						alert(melding);
						melding = "";
						return (false);
					}
					// remember the name of the lasted passed field
					lastPassedField = PostedForm.elements[i].name;
				}
			}
		}
}

function checkField(field) {
	// get type and errormessages of this field
	getElementInfo(field.name);

	// execute the right validation for each element
	switch(element_type) {
			case "numeric":
				isNumber(field, required_field, minimum_value, maximum_value);
				break;
			case "text":
				isFilled(field, required_field);
				break;
			case "password":
				isFilled(field, required_field);
				break;
			case "radio":
				isRadiod(field, required_field, minimum_value, maximum_value);
				break;
			case "email":
				isEmail(field, required_field);
				break;
			case "checkbox":
				isChecked(field, required_field, minimum_value, maximum_value);
				break;
			case "textarea":
				isFilledArea(field, required_field);
				break;
			case "postal":
				isPostal(field, required_field);
				break;
			case "phonenumber":
				isPhonenumber(field, required_field);
				break;
			case "banknummer":
				isBankRekening(field, required_field);
				break;
	}
}

function isFilled(field,required) {
		if (required && field.value == "") {
			melding = empty_message;
			eval("document." +PostedForm.name + "." + field.name+".focus()");
		}
}

function isFilledArea(field,required) {
	var bool = (eval("document." +PostedForm.name + "." + field.name +".value") == "");
		if (required && bool) {
			melding = empty_message;
			eval("document." +PostedForm.name + "." + field.name+".focus()");
		}
}

function isNumber(field, required, minValue, maxValue) {
        if (required)        {
                isFilled(field,required);
        }

        if (!(field.value==""))        {
                var charpos = field.value.search("[^0-9]");
                if(field.value.length > 0 && charpos >= 0) {
                        melding = invalid_message;
						eval("document." +PostedForm.name + "." + field.name+".select()");
                }
                else {
                        if ((!(maxValue=="")) && (field.value > eval(maxValue))) {
                                melding = maxValue_message;
								eval("document." +PostedForm.name + "." + field.name+".select()");
                        }
                        if ((!(minValue=="")) && (field.value < eval(minValue))) {
                                melding = minValue_message;
								eval("document." +PostedForm.name + "." + field.name+".select()");
                        }
                }
        }
}

function isEmail(field, required) {
        if (required)        {
                isFilled(field,required);
        }

	    if (!(field.value=="")) {
			var RegExp1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|( )|(\%|\$|\!|\\|\/|\#|\^|\&|\*|\(|\)|\+|\=|\;|\:|\'|\"|\,|\<|\>|\?)/; // ongeldig
			var RegExp2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // geldig

			if(!((!RegExp1.test(field.value) && RegExp2.test(field.value)))) {
	            melding = invalid_message;
				eval("document." +PostedForm.name + "." + field.name+".select()");
            }
		}
}

function isBankRekening(field, required) {
	if (required) {
		isFilled(field,required);
    }

	var rekeningnummer = field.value;
	
	if(rekeningnummer.length != "9") {
		if(rekeningnummer.substr(0,1)!="P") {
			melding = "Plaats a.u.b. een \'P\' voor het gironummer";
			eval("document." +PostedForm.name + "." + field.name +".select()");
		} else {
			var charpos = rekeningnummer.search("[^0-9]");
			if(rekeningnummer.length > 0 && charpos >= 1) {
			melding = "Voer alleen cijfers in bij het rekeningnummer";
			eval("document." +PostedForm.name + "." + field.name +".select()");
			}
		}
	} else {
		var getal = 0;
		var totaal = 0;
		for(var counter=0; counter < rekeningnummer.length; counter++) {
			getal = rekeningnummer.substr(counter,1);
			totaal = totaal + (getal * (rekeningnummer.length-counter));
		}

		var rest = (totaal % 11);

		if(rest!=0) {
			melding = invalid_message;
			eval("document." +PostedForm.name + "." + field.name +".select()");
		}
	}
}

function isChecked(field, required, minValue, maxValue) {
		if(required) {

			var checkboxSelected = false;
			var cnt = 0;
			var posities = new Array();
			var index = 0;

			for (var i=0; i < PostedForm.length; i++) {
				if((PostedForm.elements[i].name==field.name)&&(PostedForm.elements[i].type=="checkbox")) {
					posities[index] = i;
					index += 1;
				}
			}

			for (var i=0;  i < posities.length;  i++) {
				positie = posities[i];
				if(PostedForm.elements[positie].checked) {
					checkboxSelected = true;
					cnt += 1;
				}
			}

			if (!checkboxSelected) {
				melding = empty_message;
			}

			if ((!(minValue=="")) && (cnt <= (eval(minValue)-1))) {
				melding = minValue_message;
			}

            if ((!(maxValue=="")) && (cnt >= (eval(maxValue)+1))) {
				melding = maxValue_message;
			}
		}
}

function isRadiod(field, required, minValue, maxValue) {
		if(required) {

			var checkboxSelected = false;
			var cnt = 0;
			var posities = new Array();
			var index = 0;

			for (var i=0; i < PostedForm.length; i++) {
				if((PostedForm.elements[i].name==field.name)&&(PostedForm.elements[i].type=="radio")) {
					posities[index] = i;
					index += 1;
				}
			}

			for (var i=0;  i < posities.length;  i++) {
				positie = posities[i];
				if(PostedForm.elements[positie].checked) {
					checkboxSelected = true;
					cnt += 1;
				}
			}

			if (!checkboxSelected) {
				melding = empty_message;
			}

			if ((!(minValue=="")) && (cnt <= (eval(minValue)-1))) {
				melding = minValue_message;
			}

            if ((!(maxValue=="")) && (cnt >= (eval(maxValue)+1))) {
				melding = maxValue_message;
			}
		}
}

function isDate(date,fieldname,future) {
	// format: 20020505;
	var err = 0;
	var leap = 0;

	var today = new Date()
	var month = today.getMonth()+1
	var year = today.getYear()
	var day = today.getDate()
	if(day<10) day = "0" + day
	if(month<10) month= "0" + month 
	if(year<1000) year+=1900
	today = "" + year + month + day;


	y = date.substring(0,4);
	m = date.substring(4,6);
	d = date.substring(6,8);

	if (y == 0) {
      err = 20;
   }

   if ((m < 1) || (m > 12)) {
      err = 21;
   }

   if (d < 1 || d > 31) {
     err = 22;
   }

   if ((y % 4 == 0) || (y % 100 == 0) || (y % 400 == 0)) {
      leap = 1;
   }
	   
   if ((m == "02") && (leap == 1) && (d > "29")) {
      err = 23;
   }
   if ((m == "02") && (leap != 1) && (d > "28")) {
      err = 24;
   }

   if ((d > "31") && ((m == "01") || (m == "03") || (m == "05") || (m == "07") || (m == "08") || (m == "10") || (m == "12"))) {
      err = 25;
   }
   if ((d > "30") && ((m == "04") || (m == "06") || (m == "09") || (m == "11"))) {
      err = 26;
   }
	
   if (err > 0) {
		return "Deze datum (" + fieldname + ") is ongeldig";
   } else {
	   if(future) {
		   if(date < today) {
		 		return "Deze datum (" + fieldname + ") moet in de toekomst liggen";
		   } else {
				return true;	   
		   }
	   } else {
			return true;	   
	   }
   }
}

function isPostal(field, required) {
	    if (required) {
                isFilled(field,required);
        }

		if (!(field.value==""))        {

						var val = field.value.replace(" ","");
						var charpos = (val.substring(0,4)).search("[^0-9]");
						var kars = val.substring(6,4);
						var numpos = kars.search("[^a-zA-Z]") ;
						if(numpos >= 0 || charpos>= 0) {
								melding = invalid_message;
								eval("document." +PostedForm.name + "." + field.name+".select()");
						}
						if(val.length!="6") {
								melding = "Een postcode bestaat uit 4 cijfers en 2 letters";
								eval("document." +PostedForm.name + "." + field.name+".select()");
						}
		}
}

function isPhonenumber(field, required) {
	    if (required) {
                isFilled(field,required);
        }

		if (!(field.value==""))        {

						var val = field.value.replace(" ","");
						val = val.replace("-","");
						var charpos = (val.substring(0,10)).search("[^0-9]");
						if(charpos>= 0) {
								melding = invalid_message;
								eval("document." +PostedForm.name + "." + field.name+".select()");
						}
						if(val.length!="10") {
								melding = "Een telefoonnummer bestaat uit 10 cijfers";
								eval("document." +PostedForm.name + "." + field.name+".select()");
						}
		}
}

