// Set defaults.
$.validator.setDefaults({
    errorElement: 'span',
    errorClass: 'validateInvalid',
    errorPlacement: function(label, element) {
        var message = $('<div/>').addClass('validateInvalidMessage').appendTo('body').hide();
        label.mouseover(function() {
            var offset = label.offset();
            message.css({ top: offset.top + 'px', left: offset.left + 20 + 'px' }).html($(this).html()).show();
        }).mouseout(function() {
            message.hide();
        }).wrap('<span/>').parent().css({ position: 'relative', 'vertical-align': 'top' }).insertAfter(element);
    }
    /*,
    success: function(label) {
    label.addClass('validateValid');
    label.html('&nbsp;');
    }
    */
});

// Wrap the attributeRules method to catch 'validate=""' rules.
(function($) {
    var fAttributeRules = $.validator.attributeRules;
    $.validator.attributeRules = function(element) {
        var rules = {};
        var value = $(element).attr('validate');

        if (value) {
            value = $.trim(value);
            if (value.indexOf('{') != 0)
                value = '{' + value + '}';
            value = eval('(' + value + ')');
            $.extend(rules, value);
        }

        $.extend(rules, fAttributeRules(element));
        return rules;
    }
})(jQuery);

// Additional validation methods.
$.validator.addMethod("dateDK", function(value, element) { 
	return this.optional(element) || /^(?:0?[1-9]|[12]\d|3[01])-(?:0?[1-9]|1[0-2])-\d\d(\d\d)?$/.test(value); 
}, "Indtast en gyldig dato.");
$.validator.addMethod("numberDK", function(value, element) { 
	return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value) || /[\*]+/.test(value);
}, "Indtast et tal.");
$.validator.addMethod("integer", function(value, element) { 
	return this.optional(element) || /^-?\d+$/.test(value) || /[\*]+/.test(value);
}, "Indtast et heltal.");
$.validator.addMethod("phone", function(value, element) { 
	return this.optional(element) || /^\+?[\d ]+$/.test(value);
}, "Indtast et gyldigt telefonnummer.");

// Create some global settings (sets).
var chkReqString  = { required: true };
var chkReqString2 = { required: true, minlength: 2 };
var chkReqString3 = { required: true, minlength: 3 };
var chkReqString4 = { required: true, minlength: 4 };
var chkReqString5 = { required: true, minlength: 5 };
var chkReqNumber  = { required: true, numberDK: true };
var chkReqInteger = { required: true, integer: true };
var chkReqDate    = { required: true, dateDK: true };
var chkReqPhone   = { required: true, phone: true };
var chkReqEmail   = { required: true, email: true };

var chkString2 = { minlength: 2 };
var chkString3 = { minlength: 3 };
var chkString4 = { minlength: 4 };
var chkString5 = { minlength: 5 };
var chkNumber  = { numberDK: true };
var chkInteger = { integer: true };
var chkDate    = { dateDK: true };
var chkPhone   = { phone: true };
var chkEmail   = { email: true };
var chkMimePicture   = { accept: 'gif|jpg|png' };

