$(function() {

    // adding js class for styling with accessibility in mind
    $('body').addClass('js');

    // form field label styling on focus
    $("form :input").focus(function() {
        $("label[for='" + this.id + "']").parent().addClass("is-focused");
    }).blur(function() {
        $("label").parent().removeClass("is-focused");
    });

    $('.status.message.submission-error').addClass("is-hidden");

    toggleSubmitButton(true);

    $('#survey-form').on('submit', function() {
      /* validate required fields */

        var $inputs = $('#survey-form :input');

        $('.status.message.submission-error .message-copy').empty();

        var cancel_submit = false;

        $inputs.each(function() {
            /* see if it is a required field and - if so - make sure user presented all information */
            if (typeof $(this).attr("required") !== typeof undefined) {
                var val = $(this).val();
                if (typeof(val) === "string") {
                    if (val.trim().length === 0) {
                        var field_label = $(this).parent().find("label");
                        $(this).parent().addClass('field-error');
                        $('.status.message.submission-error .message-copy').append("<li class='error-item'>"+field_label.text()+"</li>");
                        cancel_submit = true;
                    }
                } else if (typeof(val) === "object") {
                    /* for SELECT statements */
                    if (val === null || val.length === 0 || val[0] === "") {
                        var field_label = $(this).parent().find("label");
                        $(this).parent().addClass('field-error');
                        $('.status.message.submission-error .message-copy').append("<li class='error-item'>"+field_label.text()+"</li>");
                        cancel_submit = true;
                    }
                }
            }
        });

        if (cancel_submit) {
          $('.status.message.submission-error').
            removeClass("is-hidden").
            focus();
          $("html, body").animate({ scrollTop: 0 }, "fast");
          return false;
        }

        toggleSubmitButton(false);
    });

    $('#survey-form').on('ajax:error', function() {
        toggleSubmitButton(true);
    });

    $('#survey-form').on('ajax:success', function(event, json, xhr) {
        var url = json.redirect_url;
        location.href = url;
    });

    $('#survey-form').on('ajax:error', function(event, jqXHR, textStatus) {
        toggleSubmitButton(true);
        json = $.parseJSON(jqXHR.responseText);
        $('.status.message.submission-error').addClass('is-shown').focus();
        $('.status.message.submission-error .message-copy').
            html(gettext("There has been an error processing your survey.")).
            stop().
            css("display", "block");
    });
});

function toggleSubmitButton(enable) {
    var $submitButton = $('form .form-actions #submit');

    if(enable) {
        $submitButton.
            removeClass('is-disabled').
            attr('aria-disabled', false).
            removeProp('disabled');
    }
    else {
        $submitButton.
            addClass('is-disabled').
            attr('aria-disabled', true).
            prop('disabled', true);
    }
}
