function FormValidatorField(formID, elementID, isRequired, functions){
	var formID;
	var elementID;
	var isRequired;
	var functions;

	this.formID = formID;
	this.elementID = elementID;
	this.isRequired = isRequired;
	this.functions = functions;

	this.validate = function(){
		var element = document.getElementById(this.elementID);
		var result = true;

		if (element){			
			for(var i in this.functions){				
				eval("result = this." + this.functions[i] + "(" + this.isRequired + ");");
				if (result == false){
					break;
				}
			}
		}

		return result;
	}

	this.isNotEmpty = function(isRequired){
		var element = document.getElementById(this.elementID);

		if (element){
			var value = element.value;
			if (typeof value == "string"){
				if (value.trim() == "" && isRequired){
					alert("U heeft '" + formGenerator.getElementName(this.elementID) + "' niet ingevuld");
					return false;
				}
			}
		}

		return true;
	}

	this.isValidEmail = function(isRequired){
		var element = document.getElementById(this.elementID);
		var result = true;
		if (element){
			var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			var value = element.value;
			if (typeof value == "string"){

				var filterTest = filter.test(value.trim());

				if (isRequired){
					if (!filterTest){
						result = false;
					}
				} else {
					if (value.trim() != "" && !filterTest){
						result = false;						
					}
				}
				
				if (!result){
					alert("U heeft geen geldig emailadres ingevuld voor '" + formGenerator.getElementName(this.elementID) + "'");
					return false;				
				}
			}
		}

		return result;
	}

	this.isValidPostalNL = function(isRequired){
		return true;
	}

	this.isValidNumber = function(isRequired){
		var element = document.getElementById(this.elementID);
		var result = true;
		if (element){
			var filter  = /^\d+$/;
			var value = element.value;
			if (typeof value == "string"){

				var filterTest = filter.test(value.trim());

				if (isRequired){
					if (!filterTest){
						result = false;
					}
				} else {
					if (value.trim() != "" && !filterTest){
						result = false;						
					}
				}
				
				if (!result){
					alert("U heeft geen geldig getal ingevuld voor '" + formGenerator.getElementName(this.elementID) + "'");
					return false;				
				}
			}
		}

		return result;
	}
}

var formValidator = new function (){
	this.forms = new Array();
	this.formID = "";

	this.switchForm = function(formID){
		var found = false;
		for(i in this.forms){
			if (this.forms[i] == formID){
				found = true;
			}
		}
		if (found == false){
			this.forms.push(formID);
		}

		this.formID = formID;
	}


	this.validateFields = new Array();
	this.addValidationField = function(elementID, isRequired, functions){
		this.validateFields.push( new FormValidatorField(this.formID, elementID, isRequired, functions) );
	}

	this.validate = function(formID){
		for (var i in this.validateFields){
			if ( (this.validateFields[i].formID == formID) ){
				var validationResult = this.validateFields[i].validate();
				if (validationResult == false){
					formGenerator.showMissingRequired(this.validateFields[i].elementID);
					return false;
				}
			}
		}

		return true;
	}
}