(function($) {

jQuery.validator.addMethod("remoteadv", 
	function(value, element, param) {
		if ( this.optional(element) )
			return "dependency-mismatch";
		
		var previous = this.previousValue(element);
		
		if (!this.settings.messages[element.name] )
			this.settings.messages[element.name] = {};
		this.settings.messages[element.name].remoteadv = typeof previous.message == "function" ? previous.message(value) : previous.message;
		
		param = typeof param == "string" && {url:param} || param;
		
		if ( previous.old !== value ) {
			previous.old = value;
			var validator = this;
			this.startRequest(element);
			var data = {};
			data[element.name] = value;
			$.ajax($.extend(true, {
				url: param,
				mode: "abort",
				port: "validate" + element.name,
				dataType: "json",
				data: data,
				success: function(response) {
					if ( response.ok ) {
						var submitted = validator.formSubmitted;
						validator.prepareElement(element);
						validator.formSubmitted = submitted;
						validator.successList.push(element);
						validator.showErrors();
					} else {
						var errors = {};
						// errors[element.name] =  response.message;
						errors[element.name] =  response.message || validator.defaultMessage( element, "remoteadv" );
						validator.showErrors(errors);
					}
					previous.valid = response.ok;
					previous.message = response.message;
					validator.stopRequest(element, response.ok);
				}
			}, param));
			return "pending";
		}
		// Waiting for the previous ajax response
		else if( this.pending[element.name] ) {
			return "pending";
		}
		//alert(previous.message);
		return previous.valid;
	},
	"");

})(jQuery);