var Ajax;
if (Ajax && (Ajax != null)) {
	Ajax.Responders.register({
	  onCreate: function() {
        if($('spinner') && Ajax.activeRequestCount>0)
          Effect.Appear('spinner',{duration:0.5,queue:'end'});
	  },
	  onComplete: function() {
        if($('spinner') && Ajax.activeRequestCount==0)
          Effect.Fade('spinner',{duration:0.5,queue:'end'});
	  }
	});
}

$(function (){
		
	// LOGIN FIELDS - copy of original in jquery.custom.js for auth.gsp
	// since the original #loginBox had a style associated with it; so we
	// introduced an additional id 'loginBoxes'. Part of WVDE-8.
	$("#loginBoxes .input input").each(function() {
		if ($(this).val() == 0) {
			$(this).parent(".input").css({ backgroundPosition: "left top" });
		} else {
			$(this).parent(".input").css({ backgroundPosition: "left bottom" });
		};
	});
	$("#loginBoxes .input input").focus(function() {
		$(this).parent(".input").css({ backgroundPosition: "left bottom" });
	});
	$("#loginBoxes .input input").blur(function() {
		if ($(this).val() == 0) {
			$(this).parent(".input").css({ backgroundPosition: "left top" });
		} else {
			$(this).parent(".input").css({ backgroundPosition: "left bottom" });
		};
	});
	
	
	/**
	 * This is an override of the 'remote' validation method included in the jQuery Validation plugin.
	 * The reason for this override is that in certain circumstances the configured message is overwritten 
	 * with a null message, causing the default remote message 'Please fix this field' to be displayed.
	 * 
	 * The cause seems to be that the configured message is overwritten by a previous message, which can be undefined.
	 *   
	 * The issues that describe this behaviour are, among others, WVDE-426 and WVDE-440.
	 */
	if (jQuery.validator) {
		jQuery.validator.addMethod("remote", 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] = {};
			previous.originalMessage = this.settings.messages[element.name].remote;
			// WVDE-426 and WVDE-440: see method description. DO NOT UNCOMMENT!!
			if (previous.message) {
				this.settings.messages[element.name].remote = 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) {
						validator.settings.messages[element.name].remote = previous.originalMessage;
						var valid = response === true;
						if ( valid ) {
							var submitted = validator.formSubmitted;
							validator.prepareElement(element);
							validator.formSubmitted = submitted;
							validator.successList.push(element);
							validator.showErrors();
						} else {
							var errors = {};
							var message = (previous.message = response || validator.defaultMessage( element, "remote" ));
							errors[element.name] = $.isFunction(message) ? message(value) : message;
							validator.showErrors(errors);
						}
						previous.valid = valid;
						validator.stopRequest(element, valid);
					}
				}, param));
				return "pending";
			} else if( this.pending[element.name] ) {
				return "pending";
			}
			return previous.valid;
		});
	}
});



