﻿(function($) {

    // override required method
    $.validator.addMethod("required", function(value, element, param) {
        // check if dependency is met
        if (!this.depend(param, element))
            return "dependency-mismatch";
        switch (element.nodeName.toLowerCase()) {
            case 'select':
                var options = $("option:selected", element);
                return options.length > 0 && (element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
            case 'input':
                if (this.checkable(element))
                    return this.getLength(value, element) > 0;
            default:
                return ($.trim(value).length > 0 && value.indexOf('vul a.u.b uw') < 0);
        }
    }, "!");

    $.validator.addMethod("email", function(value, element, param) {
        var reg = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
        return this.optional(element) || reg.test(value);
    }, "!");

    // override hightlight & unhighlight & onfocusin & onkeyup
    $.validator.setDefaults({
        ignore: ".ignore",

        highlight: function(element, errorClass) {
            if ($(element).hasClass("ignore")) {
                return;
            }

            var $element = $(element);
            var $container = $element.closest("tr");

            var labelName = $container.children("td.form-name").text().toLowerCase().replace("*", "").replace(/  /g, "").replace("uw ", "");
            labelName = $.trim(labelName);

            $container.addClass(errorClass);
            $element.addClass(errorClass);

            if ($.trim($element.val()) == "") {
                $element.val($.format("vul a.u.b uw {0} in", labelName));
            }
        },
        unhighlight: function(element, errorClass) {
            var $element = $(element);
            var $container = $element.closest("tr");

            $element.removeClass(errorClass);
            if ($element.siblings("input.error").length <= 0) {
                $container.removeClass(errorClass);
            }
        },
        onfocusin: function(element) {
            var $element = $(element);
            if ($element.hasClass("error") && $element.val().indexOf("vul a.u.b uw") >= 0) {
                $element.val("");
            }
        },
        onkeyup: function(element) { // use Tab (key) remove the required text
        },
        errorPlacement: function($label, $element) {
            if (!$element.is(":radio")) {
                $label.insertAfter($element);
            }
        }
    });

})(jQuery);
