(function ($) {
	//window.console && window.console.log('$.validator: ' + $.validator);
	if ($.validator) {
		$.extend($.validator.methods, {
			compareto: function (value, element, params) {
				//window.console && window.console.log('compareto.value: ' + value);
				//window.console && window.console.log('compareto.element: ' + element);
				//window.console && window.console.log('compareto.params: ' + params);
				//window.console && window.console.log('$(\'#\'+params).val(): ' + $('#'+params).val());
				return value === $('#' + params).val();
			},
			triggervalidationon: function (value, element, params) {
				$('#' + params).trigger('focusout');
				return true;
			},
			date: function (value, element) {
				if (this.optional(element)) {
					return true;
				}
				return (function isValidDate(date_string, format) {
					var days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
					var year, month, day, date_parts = null;
					var rtrn = false;
					var decisionTree = {
						'm/d/y': {
							're': /^(\d{1,2})[.\/-](\d{1,2})[.\/-](\d{2}|\d{4})$/,
							'month': 1,
							'day': 2,
							year: 3
						},
						'mm/dd/yy': {
							're': /^(\d{1,2})[.\/-](\d{1,2})[.\/-](\d{2})$/,
							'month': 1,
							'day': 2,
							year: 3
						},
						'mm/dd/yyyy': {
							're': /^(\d{1,2})[.\/-](\d{1,2})[.\/-](\d{4})$/,
							'month': 1,
							'day': 2,
							year: 3
						},
						'y/m/d': {
							're': /^(\d{2}|\d{4})[.\/-](\d{1,2})[.\/-](\d{1,2})$/,
							'month': 2,
							'day': 3,
							year: 1
						},
						'yy/mm/dd': {
							're': /^(\d{1,2})[.\/-](\d{1,2})[.\/-](\d{1,2})$/,
							'month': 2,
							'day': 3,
							year: 1
						},
						'yyyy/mm/dd': {
							're': /^(\d{4})[.\/-](\d{1,2})[.\/-](\d{1,2})$/,
							'month': 2,
							'day': 3,
							year: 1
						}
					};
					var test = decisionTree[format];
					if (test) {
						date_parts = date_string.match(test.re);
						if (date_parts) {
							year = date_parts[test.year];
							month = date_parts[test.month];
							day = date_parts[test.day];
							test = (month == 2 && isLeapYear() && 29 || days[parseInt(month, 10)] || 0);
							rtrn = 1 <= day && day <= test;
						}
					}

					function isLeapYear() {
						return (year % 4 != 0 ? false : (year % 100 != 0 ? true : (year % 1000 != 0 ? false : true)));
					};
					return rtrn;
				})(value, 'm/d/y');
			}
		});
		if ($.validator.unobtrusive) {
			//window.console && window.console.log('validator.unobtrusive');
			$.validator.unobtrusive.adapters.add('compareto', ['comparetoid'], function (options) {
				options.rules['compareto'] = options.params.comparetoid;
				if (options.message) options.messages["compareto"] = options.message;
			});
			$.validator.unobtrusive.adapters.add('triggervalidationon', ['triggervalidationid'], function (options) {
				options.rules['triggervalidation'] = options.params.triggervalidationid;
				if (options.message) options.messages["triggervalidation"] = options.message;
			});
			$.validator.unobtrusive.adapters.addBool('date');
			$.validator.unobtrusive.adapters.add("checkboxmust", function (options) {
				if (options.element.tagName.toUpperCase() == "INPUT" && options.element.type.toUpperCase() == "CHECKBOX") {
					options.rules["required"] = true;
					if (options.message) {
						options.messages["required"] = options.message;
					}
				}
			});
		}
	};
	$(function () {
		$('.RequestPlatinumUpgrade').bind('click', function (e) {
			if (!confirm('Are you sure you want to request Platinum Membership?')) { e.preventDefault(); };
		});
		$('.quick-links').bind('change', function (e) {
			location.href = $(this).val();
		});
	});
})(jQuery);
