$(document).ready(function() {

    jQuery.validator.addMethod("password", function(value, element) {
        var result = this.optional(element) || value.length >= 6 && /\d/.test(value) && /[a-z]/i.test(value);
        if (!result) {
            element.value = "";
            var validator = this;
            setTimeout(function() {
                validator.blockFocusCleanup = true;
                element.focus();
                validator.blockFocusCleanup = false;
            }, 1);
        }
        return result;
    }, "Your password must be at least 6 characters long and contain at least one number and one character.");

    // a custom method making the default value for companyurl ("http://") invalid, without displaying the "invalid url" message
    jQuery.validator.addMethod("defaultInvalid", function(value, element) {
        return value != element.defaultValue;
    }, "");

    jQuery.validator.addMethod("billingRequired", function(value, element) {
        if ($("#bill_to_co").is(":checked"))
            return $(element).parents(".subTable").length;
        return !this.optional(element);
    }, "");

    jQuery.validator.messages.required = "";
    $("form").validate({
        invalidHandler: function(e, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                        ? 'Alanlardan 1 tanesini boş veya hatalı girdiniz.'
                        : 'Alanlardan ' + errors + ' tanesini boş veya hatalı girdiniz.';
                $("div.error span").html(message);
                $("div.error").show();
            } else {
                $("div.error").hide();
            }
        },
        rules: {
            name: {
                required: true,
                minlength: 2
            },
            me_name: {
                required: true,
                minlength:2
            },
            me_lastname: {
                required: true,
                minlength:2
            },
            me_meslek: {
                required: true,
                minlength:4
            },
            txtMessage: {
                required: true,
                minlength: 20
            },
            zdname: {
                required: true,
                minlength: 2
            },
            zdcomments: {
                required: true,
                minlength: 20
            },
            email: {
                required: true

            },
            zdemail: {
                required: true

            },
            me_mail: {
                required: true

            },
            me_yil:{
                required: true

            },
            me_egitim:{
                required: true

            }
        },
        messages: {
            name     :{
                required: "Lütfen isminizi giriniz. ",
                minlength:"Lütfen en az 2 karakter giriniz."
            },
            me_name     :{
                required: "Lütfen isminizi giriniz. ",
                minlength:"Lütfen en az 2 karakter giriniz."
            },
            me_lastname     :{
                required: "Lütfen soyisminizi giriniz. ",
                minlength:"Lütfen en az 2 karakter giriniz."
            },
            me_meslek     :{
                required: "Lütfen mesleğinizi giriniz. ",
                minlength:"Lütfen en az 4 karakter giriniz."
            },
            txtMessage     :{
                required: "Lütfen mesajınızı giriniz.",
                minlength:"Lütfen en az 20 karakter giriniz."

            },
            zdname     :{
                required: "Lütfen isminizi giriniz. ",
                minlength:"Lütfen en az 2 karakter giriniz."
            },
            zdcomments     :{
                required: "Lütfen mesajınızı giriniz.",
                minlength:"Lütfen en az 20 karakter giriniz."

            },
            password2: {
                required: " ",
                equalTo: "Please enter the same password as above"
            },
            email: {
                required: "Lütfen Emalinizi giriniz ",
                email: "Geçerli bir email giriniz."
            },
            zdemail: {
                required: "Lütfen Emalinizi giriniz ",
                email: "Geçerli bir email giriniz."
            },
            me_mail: {
                required: "Lütfen Emalinizi giriniz ",
                email: "Geçerli bir email giriniz."
            },
            me_yil:{
                required: "Lütfen bir seçim yapınız. "

            },
            me_egitim:{
                required: "Lütfen bir seçim yapınız. "

            }
        }

    });

    $(".resize").vjustify();
    $("div.buttonSubmit").hoverClass("buttonSubmitHover");

    if ($.browser.safari) {
        $("body").addClass("safari");
    }

    $("input.phone").mask("(999) 999-9999");
    $("input.zipcode").mask("99999");
    var creditcard = $("#creditcard").mask("9999 9999 9999 9999");

    $("#cc_type").change(
            function() {
                switch ($(this).val()) {
                    case 'amex':
                        creditcard.unmask().mask("9999 999999 99999");
                        break;
                    default:
                        creditcard.unmask().mask("9999 9999 9999 9999");
                        break;
                }
            }
    );

    // toggle optional billing address
    var subTableDiv = $("div.subTableDiv");
    var toggleCheck = $("input.toggleCheck");
    toggleCheck.is(":checked")
            ? subTableDiv.hide()
            : subTableDiv.show();
    $("input.toggleCheck").click(function() {
        if (this.checked == true) {
            subTableDiv.slideUp("medium");
            $("form").valid();
        } else {
            subTableDiv.slideDown("medium");
        }
    });


});

$.fn.vjustify = function() {
    var maxHeight = 0;
    $(".resize").css("height", "auto");
    this.each(function() {
        if (this.offsetHeight > maxHeight) {
            maxHeight = this.offsetHeight;
        }
    });
    this.each(function() {
        $(this).height(maxHeight);
        if (this.offsetHeight > maxHeight) {
            $(this).height((maxHeight - (this.offsetHeight - maxHeight)));
        }
    });
};

$.fn.hoverClass = function(classname) {
    return this.hover(function() {
                $(this).addClass(classname);
            }, function() {
                $(this).removeClass(classname);
            });
};
