$(document).ready(function () {
    // accordion functions

    //var accordion = $("#").accordion();
    var current = 0;
    //validate file name length
    $.validator.addMethod("fileNameLength", function (value, element) {
        if ($(element).attr("type") === "file") {

            // Check if the element has a FileList before checking each file
            if (element.files && element.files.length) {
                for (i = 0; i < element.files.length; i++) {
                    file = element.files[i];
                    if (file.name.length > 256) {
                        return false;
                    }
                }
            }
        }

        // Either return true because we've validated each file, or because the
        // browser does not support element.files and the FileList feature
        return true;
    }, $.validator.format("Please shorten the filename to 30 characters or less."));
    $.validator.addMethod("fileSize", function (value, element) {
        if ($(element).attr("type") === "file") {

            // Check if the element has a FileList before checking each file
            if (element.files && element.files.length) {
                for (i = 0; i < element.files.length; i++) {
                    file = element.files[i];
                    if (file.size > 5242880) {
                        return false;
                    }
                }
            }
        }
        // Either return true because we've validated each file, or because the
        // browser does not support element.files and the FileList feature
        return true;
    }, $.validator.format("The file size must be 5 MB or less."));
    $.validator.addMethod("pageRequired", function (value, element) {
        var $element = $(element);

        function match(index) {
            return current === index && $(element).parents("#sf" + (index + 1)).length;
        }
        if (match(0) || match(1) || match(2) || match(3) || match(4)) {
            return !this.optional(element);
        }
        return "dependency-mismatch";
    }, $.validator.messages.required);

    $.validator.addMethod("vinCaps", function (value, element) {
        return this.optional(element) || /^[0-9,A-Z]*$/.test(value);
    }, "Only uppercase letters and numbers can be used.");

    $.validator.addMethod('selectState', function (value) {
        return (value !== '-');
    }, "Please select a State.");

    $.validator.addMethod("zeroOrMoreI", function (value, element) {
        var limit = 0;
        if (parseInt($("#injuries").val(), 10) > 0) {
            limit = -1;
        }
        if (value > 0)
            $("#injuries-error").hide();
        return this.optional(element) || value > limit;
    }, "Please enter a number not less than 0");

    $.validator.addMethod("zeroOrMoreF", function (value, element) {
        var limit = 0;
        if (parseInt($("#fatalities").val(), 10) > 0) {
            limit = -1;
        }
        if (value > 0)
            $("#fatalities-error").hide();
        return this.optional(element) || value > limit;
    }, "Please enter a number not less than 0");

    $.validator.addMethod("textareaLimit", function (value, element) {
        var limit = 1901;
        var text_length = value.replace(/\n/g, "\r\n").length;
        return this.optional(element) || text_length < limit;
    }, "Please enter no more than 1900 characters");

    $.validator.addMethod("dateBefore", function (value, element) {
        var check = false;
        var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
        if (re.test(value)) {
            var adata = value.split('/');
            var gg = parseInt(adata[1], 10);
            var mm = parseInt(adata[0], 10);
            var aaaa = parseInt(adata[2], 10);
            var xdata = new Date(aaaa, mm - 1, gg);
            if ((xdata.getFullYear() === aaaa) && (xdata.getMonth() === mm - 1) && (xdata.getDate() === gg) && !(xdata > new Date()))
                check = true;
            else
                check = false;
        } else
            check = false;
        return this.optional(element) || check;
    },
            "Must be a valid, non-future date.");


    var v = $('#msform').validate({
        keyup: false,
        focusout: false,
        rules: {
            vin: {required: true},
            searchText: {required: true},
            incidentDesc: {required: true,
                //maxlength: 1900,
                textareaLimit: true,
                minlength: 1},
            incidentDate: {required: true,
                dateBefore: true},
            numOfFatalities: {
                required: {depends: function () {
                        return ($('input[name=injuryYn]:checked').val() === 'Y' && ($("#injuries").is(':blank') || $("#injuries").val() === '0'));
                    }},
                number: true,
                zeroOrMoreI: true},
            numOfInjuries: {
                required: {depends: function () {
                        return ($('input[name=injuryYn]:checked').val() === 'Y' && ($("#fatalities").is(':blank') || $("#fatalities").val() === '0'));
                    }},
                number: true,
                zeroOrMoreF: true},
            speed: {number: true},
            miles: {number: true},
            fname: {required: true},
            lname: {required: true},
            dayPhone: {
                phoneUS: true,
                required: true
            },
            eveningPhone: {
                phoneUS: true
            },
            email: {required: true, 'email': true},
            cemail: {
                equalTo: '#email'
            },
            address: {required: true},
            city: {required: true},
            state: {selectState: true},
            zip: {
                zipcodeUS: true,
                required: true
            },
            selectedComps: {
                required: true,
                minlength: 1
            },
            'files[0]': {
                fileNameLength: true,
                fileSize: true
            },
            'files[1]': {
                fileNameLength: true,
                fileSize: true
            },
            'files[2]': {
                fileNameLength: true,
                fileSize: true
            },
            'files[3]': {
                fileNameLength: true,
                fileSize: true
            },
            'files[4]': {
                fileNameLength: true,
                fileSize: true
            }
        },
        messages: {
            vin: "Please provide a Vin.",
            searchText: "Please provide a Make, Model, and Model Year.",
            incidentDesc: "Please enter no more than 1900 characters.",
            fname: "Please enter your First Name.",
            lname: "Please enter your Last Name.",
            email: "Please enter your Email address.",
            cemail: "Please re-enter your Email address.",
            address: "Please enter your Address.",
            city: "Please enter your City.",
            state: "Please select your State.",
            zip: "Please enter your Zip Code.",
            dayPhone: "Please enter your Phone.",
            selectedComps: "Please select at least one part.",
            numOfFatalities: "If there were fatalities, enter the number here.",
            numOfInjuries: "If there were injuries, enter the number here."
        },
        //removes incorrect added label tag for 508.   
        errorPlacement: function (error, element) {
            //error.appendTo("label[for="+$(element).attr('id')+"]");
            if (element.attr("name") === "selectedComps") {
                error.appendTo($('#e_comps'));
            } else if (element.attr("name") === "incidentDate") {
                error.insertAfter($('.ui-datepicker-trigger'));
            } else if (element.attr("name") === "dayPhone") {
                error.insertAfter($('#dayPhoneExt'));
            } else if (element.attr("name") === "vin") {
                error.insertAfter($('#testVin'));
            } else {
                //error.appendTo( element.parent().next() );
                error.insertAfter(element);
            }
        },
        errorElement: "div",
        onfocusout: false,
        invalidHandler: function (form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                validator.errorList[0].element.focus();
            }
        }
    });


    var tabs = $("#tabs").tabs({
        beforeActivate: function (event, ui) {
            var valid = true;
            var current = $(this).tabs("option", "active");
            var panelId = $("#tabs ul a").eq(current).attr("href");
            var newIndex = ui.newTab.index();
            if (newIndex === (current + 1)) {
                $(panelId).find("input, textarea, select, radio").each(function () {
                    if (!v.element(this) && valid) {
                        valid = false;
                        if (this.className.match(/error/) !== null) {
                            $(this).focus();
                        }
                        $('body').find('.error:first').focus();
                    }
                });
            } else if (newIndex < current) {
            } else {
                valid = false;
            }
            return valid;
        },
        activate: function (event, ui) {
            $("#tabBar").attr('class', $("#tabBar").attr('class').replace(/\btt.*?\b/g, ''));
            $("#h2_text").attr('class', $("#h2_text").attr('class').replace(/\btt.*?\b/g, ''));
            var i = ui.newTab.index();
            $("#tabBar").addClass("tt" + (i + 1));
            $("#h2_text").addClass("tt" + (i + 1));
            return true;
        }
    });

    $(".nexttab").click(function () {
        var i = this.hash.substr(this.hash.length - 1);
        $("#tabs").tabs("option", "active", (i - 1));
        window.location.href.replace(/#.*/, '');
        if ((i === "") && (this.innerHTML.indexOf("Back") === -1)) {
            $("#error-vin").hide();
            if ($('#msform').valid()) {
                $("#tabBar").addClass("none");
                $(".nexttab").addClass("none");
                $(".previewnone").addClass("none");
                $(".previewonly").removeClass("none");
                $(".previewonly").removeClass("hidden");
                $("#submit").removeClass("none");
                $("#optin").removeClass("none");
                $("#optinMfr").removeClass("none");
                $(".showbutton").removeClass("none");
                $("#recaptcha").removeClass("none");
                $("#h2_text").attr('class', $("#h2_text").attr('class').replace(/\btt.*?\b/g, ''));
                $("#h2_text").addClass("tt6");
                $('#tabs').tabs();
                $("#tabs").tabs("destroy");
                var checkedVals = "";
                var compNames = "";
                $("input:checkbox[class*='chk']:checked").each(function () {
                    checkedVals = checkedVals + $(this).val() + ",";
                    compNames = compNames + $(this).parent().text() + ", ";
                    if(checkedVals.includes("Y"))
                    {
                      checkedVals = "";
                      compNames = "";
                    }

                });

                document.getElementById("h_compNames").value = compNames;
                checkForFiles();
            }
        }
        return false;
    });

    //use link to submit form instead of button
    //  $("a[id=submit]").click(function() {
    //       $(this).parents("form").submit();
    //   });

});
