// dutch housenumber
jQuery.validator.addMethod("houseNumber", function(value, element, params) {
	return this.optional(element) || /^\d+ *-* *([a-z]|\d)*$/i.test(value);
}, "Vul alstublieft een geldig huisnummer in.");

// dutch zipcode
jQuery.validator.addMethod("zipcodeNL", function(value, element, params) {
	return this.optional(element) || /^\d{4} ?[a-z]{2}$/i.test(value);
}, "Vul alstublieft een geldige postcode in. (1234 AB)");

// dutch date
jQuery.validator.addMethod("dateNL", function(value, element, params) {
	return this.optional(element) || /^\d\d?\-\d\d?\-\d\d\d?\d?$/.test(value);
}, "Vul alstublieft een geldige datum in. (dd-mm-jjjj)");

// dutch fax number
jQuery.validator.addMethod("faxNL", function(value, element, params) {
	return this.optional(element) || /^(0|\+)[^a-z]{3,18}$/i.test(value);
}, "Vul alstublieft een geldig faxnummer in.");

// dutch phone number
jQuery.validator.addMethod("phoneNL", function(value, element, params) {
	return this.optional(element) || /^(0|\+)[^a-z]{3,18}$/i.test(value);
}, "Vul alstublieft een geldig telefoonnummer in.");

// dutch timeformat
jQuery.validator.addMethod("hourMinute", function(value, element, params) {
	return this.optional(element) || /^\d{2}:\d{2}$/i.test(value);
}, "Vul alstublieft een geldige tijd in. (uu:mm)");

// only allow text and punctuation
jQuery.validator.addMethod("textOnly", function(value, element) {
	return this.optional(element) || /^[a-z-.,()'\"\s]+$/i.test(value); //'
}, "Alleen letters en leestekens alstublieft"); 

// price 
jQuery.validator.addMethod("price", function(value, element) {
	return this.optional(element) || /^\d*(.|,)(\d{2}|-)$/i.test(value); //'
}, "Alleen letters en leestekens alstublieft");

// emptyUrl extends url
jQuery.validator.addMethod("emptyUrl", function(value, element) {
	return this.optional(element) || /(^http:\/\/$|^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?)$/i.test(element.value);
}, 'Vul alstublieft een geldige URL in.');

// link the validators to classnames
jQuery.validator.addClassRules({
	houseNumber: 	{ houseNumber: true },
	zipcodeNL: 		{ zipcodeNL: true },
	dateNL: 		{ dateNL: true },
	faxNL: 			{ faxNL: true },
	phoneNL: 		{ phoneNL: true },
	textOnly: 		{ textOnly: true },
	hourMinute: 	{ hourMinute: true },
	price: 			{ price: true },
	emptyUrl: 		{ emptyUrl: true }
});
