/**
 * @requires jquery.validate.js
 * @author ZhangHuihua@msn.com
 */
(function($){
	//Letters, numbers, spaces or underscores only please
	$.validator.addMethod("alphanumeric", function(value, element) {
		return this.optional(element) || /^[A-Za-z0-9_ ]+$/i.test(value);
	}, "Invalid data");  
	//Letters only please
	$.validator.addMethod("lettersonly", function(value, element) {
		return this.optional(element) || /^[a-z]+$/i.test(value);
	}, "Invalid data"); 
	
	$.validator.addMethod("phone", function(v, element) {
	    v = v.replace(/\s+/g, ""); 
		return this.optional(element) || v.match(/^[0-9 \(\)]{7,30}$/);
	}, "Please enter a valid phone number");
	
	$.validator.addMethod("postcode", function(v, element) {
	    v = v.replace(/\s+/g, ""); 
		return this.optional(element) || v.match(/^[0-9 A-Za-z]{5,20}$/);
	}, "Please enter a valid post code");
	$.validator.addMethod("currency", function(v, element){
		v = v.replace(/\s+/g, ""); 
		return this.optional(element) || v.match(/^(0|([1-9]{1}\d*))(\.\d{1,2})?$/);
	}, "Please enter decimal only, ex: #0.00");

	$.validator.addClassRules({
		required: {required: true},
		email: {email: true},
		number: {number: true},
		digits: {digits: true},
		date: {date: true},
		
		alphanumeric: { alphanumeric: true },
		lettersonly: { lettersonly: true },
		phone: { phone: true },
		postcode: {postcode: true}
	});
	
	$.extend($.validator.messages, {
		required: "This is a required field.",
		email: "Please enter a valid email address.",
		date: "Please enter a valid date.",
		number: "Please enter decimal only.",
		digits: "Please enter integer only",
		maxlength: $.validator.format("Please enter no more than {0} characters."),
		minlength: $.validator.format("Please enter at least {0} characters."),
		currency: "Please enter decimal only, ex: #0.00"
	});
})(jQuery);
