jQuery.validator.addMethod("phoneUS", function (phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, "");
    return this.optional(element) || phone_number.length >= 5 && phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

jQuery.validator.addMethod('phoneUK', function (phone_number, element) {
    phone_number = phone_number.replace(" ", "");
    return this.optional(element) || phone_number.length > 9 && (phone_number.match(/^(\(?(0|\+?44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/) || phone_number.match(/^((0|\+?44)7(5|6|7|8|9){1}\d{2}\s?\d{6})$/));
}, 'Please specify a valid phone number');

jQuery.validator.addMethod("phoneAU", function (phone_number, element) {
    phone_number = phone_number.split(' ').join('');
	//var re = new RegExp("(^1300\d{6}$)|(^1800|1900|1902\d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13\d{4}$)|(^04\d{2,3}\d{6}$)");
    //alert(re);
	return this.optional(element) || phone_number.length >= 5 && phone_number.match(/(^1300\d{6}$)|(^1800|1900|1902\d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13\d{4}$)|(^04\d{2,3}\d{6}$)/);
}, "Please specify a valid phone number");

jQuery.validator.addMethod("phone", function (phone_number, element) {
    phone_number = phone_number.replace(/[\s()+-]|ext\.?/gi, "");
	return this.optional(element) || phone_number.length >= 5 && phone_number.match(/\d{6,}/);
}, "Please specify a valid phone number");


jQuery.validator.addMethod("postCode", function (post_code, element) {
    post_code = post_code.replace(/\s+/g, "");
    return this.optional(element) || post_code.length < 8 && post_code.length > 4 && post_code.match(/^[a-zA-Z]{1,2}[0-9]{1,3}([a-zA-Z]{1}[0-9]{1})*[a-zA-Z]{2}$/);
}, "Please specify a valid post/zip code");

jQuery.validator.addMethod("minWord", function (value, element, param) {
    var words = value.split(/\s/gi);
    var result = this.optional(element) || words.length >= param;
	/* Don't be too picky */
	if ($(element).attr("minword") == "true") return true; 
	if (!result) $(element).attr("minword", "true");
    return result;
}, "Please type more words");

jQuery.validator.addMethod("maxWord", function (value, element, param) {
    var words = value.split(/\s/gi);
    return this.optional(element) || words.length <= param;
}, "Please type less words");

jQuery.validator.addMethod("regExp", function (value, element, regexp) {
    var re = new RegExp(regexp);
    return this.optional(element) || value.match(re);
}, "Please check your input.");

jQuery.validator.addMethod("matchTwo", function (value, element, param) {
	if (param[0]==param[1]) return true;
	else return false;
}, "Please check your input.");

jQuery.validator.addMethod("fullUrl", function(val, elem) {
	if (val.length == 0) { return true; }
	if(!/^(https?|ftp):\/\//i.test(val)) { val = 'http://'+val; $(elem).val(val);  }
     return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:)*@)?(((\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})|[!\$&amp;'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&amp;'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(val);
}, "Please enter a valid URL");


// Force invalid response
jQuery.validator.addMethod("makeInvalid", function (value, element, param) {
    return false;
}, "Please check your input.");

function makeInvalid(field, flag, message)
{
    if (flag == true)
    {
        $(field).rules("add", {
            makeInvalid: "null",
            messages: {
                makeInvalid: message
            }
        });
    }
    else
        $(field).rules("remove", "makeInvalid");
    
    $(field).valid();
    
}
