try
{
	$.validator.addMethod("dob", function(value, elem, param)
	{
		var today = new Date();
		var d1 = new Date(value);
		var d2 = new Date(today.getFullYear()-12, today.getMonth(), today.getDay());
		if(null != d1 && typeof(d1) != 'undefined')
		{
			if(d1.getTime() > d2.getTime())
			{
				$(elem).val('');
				return false;
			}
			else
			{
				return true;
			}
		}
		return true;
	}, "Birth date is too recent.");
}
catch(ex)
{}

jQuery.validator.addMethod("greaterThan", function(value, element, params)
{
	// 3757: End Date vs Start Date validation now occurs on a hidden field, which means the visibility check needs to be tweaked
	// Added a MustValidate class to our hidden inputs to avoid skipping hidden fields requiring validation
	if(!$(element).is(":visible") && !$(element).hasClass("MustValidate")) {
		return true;
	}

	//
	// Date tests...
	//
	var dateToTest = new Date(value);
	var compareDate = new Date($(params).val());

	// 3981: correct validation to allow for compareDate not being set
	if (!/Invalid|NaN/.test(dateToTest) && !/Invalid|NaN/.test(compareDate))
	{
	    return dateToTest > compareDate;
	}
	else
	{
		return true; // we were expecting dates, but didn't get 2 valid dates for comparison... so rely on other formatting/requirement validation to catch that...
	}

	//
	// Numeric tests...
	// 3757: removed - no longer relevant
	//
	// return isNaN(value) && isNaN($(params).val())
	//     || (Number(value) > Number($(params).val()));

}, "Start date must be earlier than End date.");

jQuery.validator.addClassRules("requiredWhenShown", {requiredWhenShown:true});

jQuery.validator.addMethod("requiredWhenShown", function(value, element)
{
	if($(element).is(":visible"))
	{
		if ($(element).prop("type") == 'radio')
		{
			var radioName=$(element).attr('name');
			return $('input[name="' + radioName +  '"]').is(":checked");
		}
		else
		{
			return $(element).val() != ""; //$.validator.methods.required.call(value, element);
		}
	}
	else
	{
		return true;
	}
}, "Required");
jQuery.validator.addMethod(
	/* The value you can use inside the object in the validator. */
	"regex",

	/* The function that tests a given string against a given regEx. */
	function(value, element, regexp)  {
		/* Check if the value is truthy (avoid null.constructor) & if it's not a RegEx. */
		if (regexp && regexp.constructor != RegExp) {
		/* Create a new regular expression using the regex argument. */
		regexp = new RegExp(regexp);
		}

		/* Check whether the argument is global and, if so set its last index to 0. */
		else if (regexp.global) regexp.lastIndex = 0;

		/* Return whether the element is optional or the result of the validation. */
		return this.optional(element) || regexp.test(value);
	}
	, "Please enter the correct value" // can override in messages in html
);