$.extend($.validator, {
  defaults: function() {
    $.extend($.validator.defaults, {onShowError: function() {}});
  }(),
  prototype: function() {
    var oldShowErrors = $.validator.prototype.showErrors;
    $.extend($.validator.prototype, {showErrors: function() {
      oldShowErrors.apply(this, arguments);
	  this.settings.onShowError.apply(this);
    }});
  }()
});

function validateWithMessages(form, messages) {
	var globalError=$('<p class="validationError">Sorry&hellip; there\'s some kind of problem with this form.</p>');
	var displayGlobalError = function(display) {
	  if(display) {
		if(form.find('.validationError').length == 0) {
          globalError.insertBefore(form);
		}
	  }
	  else {
	    globalError.remove();
	  }
	};
	form.validate({
		focusInvalid: false,
		messages: messages,
		onShowError: function() {
			if(this.numberOfInvalids() == 0) {
			  displayGlobalError(false);
			}
			else {
			  displayGlobalError(true);
			}
        }
	});
	form.find(".submit").click(function() {
		if(!form.valid()) {
			displayGlobalError(true);
			$.scrollTo(globalError);
		}
	});
}