$.fn.ketchup.messages = {
  'required':     'This field is required.',
  'minlength':    'This field must have a minimal length of $arg1.',
  'maxlength':    'This field must have a maximal length of $arg1.',
  'rangelength':  'This field must have a length between $arg1 and $arg2.',
  'min':          'Must be at least $arg1.',
  'max':          'Can not be greater than $arg1.',
  'range':        'Must be between $arg1 and $arg2.',
  'number':       'Must be a number.',
  'digits':       'Must be digits.',
  'email':        'Must be a valid email.',
  'url':          'Must be a valid URL.',
  'username':     'Must be a valid username.',
  'uszip':        'Must be a valid zip code.',
  'match':        'Must match the corresponding field.',
  'date':         'Must be a valid date.',
  'minselect':    'Select at least $arg1 checkboxes.',
  'maxselect':    'Select not more than $arg1 checkboxes.',
  'rangeselect':  'Select between $arg1 and $arg2 checkboxes.'
};

// New formatting for messages
$(function() {
  var lastZIndex = 10;
  $('#aspnetForm').ketchup({
    errorContainer: $('<div class="ketchup-error-container"><ol></ol><span>X</span></div>'),
    initialPositionContainer: function(errorContainer, field) {
      if (field.is(':radio, :checkbox')) {
        errorContainer.addClass('ketchup-error-optionlist-container');
        if($('input[name="'+field.attr('name')+'"]').index(field) > 0) {
          errorContainer.remove();
        }
      }
      errorContainer.hover(
        function() {
          field.addClass('highlight');
        },
        function() {
          field.removeClass('highlight');
        }
      );
    },
    positionContainer: function(errorContainer, field) {
      var pos = field.position();
      var left = pos.left + field.width();
      var top = pos.top;
      
      // Handle special cases
      if (/^communication(?:USMail|Email)$/.test(field.attr('name'))) {
        left += 80;
        top -= 3;
      }
      if (/^inputTermsAgree$/.test(field.attr('name'))) {
        left -= 39;
        top -= 3;
      }
      
      errorContainer.css({
        left: left,
        top: top
      });
    },
    showContainer: function(errorContainer) {
      errorContainer.show().prev('input:not(:radio, :checkbox), select, textarea').addClass('error');
      errorContainer.hover(
        // MouseOver action
        function() {
          errorContainer.css({ zIndex: (++lastZIndex) }).find('ol').show();
        },
        // MouseOut action
        function() {
          setTimeout(
            function() {
              errorContainer.find('ol').hide();
            },
            1500);
          }
        );
    },
    hideContainer: function(errorContainer) {
      errorContainer.hide().prev('input, select, textarea').removeClass('error');
    }
  });
});

