
$( document ).ready(function(){
    function checkForm(obj){

        canSubmit = true;
    
        if($(obj).find(".requiredMissing").length > 0){
            canSubmit = false;
        }


        if($(obj).find(".requiredPassword").length > 0){
            canSubmit = false;
        }


        if(canSubmit){
            $(obj).find("input[type='submit']").removeAttr('disabled');
        }else{
            $(obj).find("input[type='submit']").attr('disabled','disabled');
        }

        return canSubmit;

    }


    function checkTab(obj){

        canSubmit = true;

        if($(obj).find(".requiredMissing").length > 0){
            canSubmit = false;
        }


        if($(obj).find(".requiredPassword").length > 0){
            canSubmit = false;
        }

        if($(obj).find(".tooLong").length > 0){
            canSubmit = false;
        }


        id = $(obj).attr('id');

        tab = $(obj).parent().parent().find('a[href="#'+id+'"]' );

        if(canSubmit){
            tab.parent().removeClass('tabFailedValidation');
        }else{
            tab.parent().addClass('tabFailedValidation');
        }


    }

    //validation
    $('form').each(function(ind,obj){

        $('form').submit(function(e){

            $(obj).find('input , textarea').each(function(ind,inputObj){

                $(inputObj).keyup();
            });

            if( ! checkForm($(this) ))  {
                e.preventDefault();
            }


        });

        $(obj).find('input.required , textarea.required').each(function(ind,obj){

            if($(obj).val().trim() == ""){

                $(obj).addClass('requiredMissing');
            }

            function check(){

                if($(this).val().trim() == ""){
                    $(this).addClass('requiredMissing style');
                }else{
                    $(this).removeClass('requiredMissing style');
                }

                checkForm($(this).closest('form'));
                checkTab($(this).closest('.tab-pane'));

            }

            $(obj).keydown(check);
            $(obj).keyup(check);
            $(obj).change(check);
        });

        $(obj).find('input.maxlengthCheck , textarea.maxlengthCheck').each(function(ind,obj){



            function check(obj){

                obj.parent().find('.maxlengthDisplay').html(obj.val().length);

                if (obj.val().length > obj.attr('maxlength')){
                    obj.addClass('tooLong');
                }else{
                    obj.removeClass('tooLong');
                }

                checkForm($(obj).closest('form'));
                checkTab($(obj).closest('.tab-pane'));
            }


            $(obj).keyup(function(){check($(this))});
            $(obj).keydown(function(){check($(this))});

            check($(obj));



        });


        $(obj).find('input.passwordVerify').each(function(ind,passwordObj){

            function check(){

                pairName     = $(passwordObj).data('pairinput');
                pairedObject = $("#"+pairName);

                passwordSpan = $(passwordObj).parent().parent().find('div.passwordResult');
                passwordWarning = $(passwordObj).parent().parent().find('div.passwordWarning');

                if(!passwordSpan){
                    passwordSpan = $(passwordObj).parent().find('div');
                }

                errors = "";


                if($(this).val() != pairedObject.val()){

                    errors += "Passwords do not match <br >";
                }

                password = $(this).val();

                passwordLen = password.length

                if(passwordLen == 0){



                }else if(passwordLen < 8){
                    errors += "Password is not long enough<br >";
                }

                fields = [];

                $(this).closest('form').find('input').each(function(i,obj){

                    if( $(obj).hasClass('passwordVerify')  ||
                        $(obj).hasClass('passwordVerify') 
                    ){
                        return ;

                    }

                    if($(obj).val() == 'N' || $(obj).val() == 'Y'){
                        return;
                    }

                    if($(obj).attr('type') == 'submit'){
                        return;
                    }

                    if($(obj).attr('name') == 'csrf'){
                        return;
                    }


                    if($(obj).val() != ''){
                        fields.push($(obj).val());
                    }
                });

                result = zxcvbn(password,fields);


                meter = $(this).closest('.form-group ').find(".password-strength-meter")


                $(meter).attr('value', result.score);

                warnings = "";


                if(result.score < 3 && passwordLen > 0){

                   // $(meter).css('background', 'red');

                    errors += "Password is not complicated enough<br/>"

                    if(result.feedback.warning){
                        warnings += result.feedback.warning + '<br>';
                    }


                    for(i =0; i<result.feedback.suggestions.length; i++){
                        console.log( result.feedback.suggestions[i]);

                        warnings += result.feedback.suggestions[i] + '<br>';
                    }

                }else if (result.score == 3){
                   // $(meter).css('background', 'yellow');
                }else if (result.score == 4){
                   // $(meter).css('background', 'green');
                }


                if(warnings == ""){
                    passwordWarning.removeClass('alert alert-warning');

                    passwordWarning.html('');
                }else{
                    passwordWarning.addClass('alert alert-warning');

                    passwordWarning.html(warnings);
                }

                
                

                if(errors == ""){
                    passwordSpan.removeClass('alert alert-danger');


                    $(this).removeClass('requiredPassword');
                    pairedObject.removeClass('requiredPassword');


                    passwordSpan.html("");

                }else{
                    passwordSpan.addClass('alert alert-danger');

                    $(this).addClass('requiredPassword');
                    pairedObject.addClass('requiredPassword');

                    passwordSpan.html(errors);
                }


                



                checkForm($(this).closest('form'));
                checkTab($(this).closest('.tab-pane'));



            }

            $(passwordObj).keydown(check);
            $(passwordObj).keyup(check);



        });


        checkForm(obj)

        $(obj).find('.tab-pane').each(function(i,obj){
            checkTab($(obj));
        });


    });
});