/******************************************************************************
 *
 * jQuery functions for the plone.app.discussion comment viewlet and form.
 *
 ******************************************************************************/
/* global require */

if(require === undefined){
    require = function(reqs, torun){  // jshint ignore:line
        'use strict';
        return torun(window.jQuery);
    };
}

require([  // jshint ignore:line
    'jquery'
], function ($) {
    'use strict';
    // This unnamed function allows us to use $ inside of a block of code
    // without permanently overwriting $.
    // http://docs.jquery.com/Using_jQuery_with_Other_Libraries

    /* Disable a control panel setting */
    $.disableSettings = function (settings) {
        $.each(settings, function (intIndex, setting) {
            setting.addClass('unclickable');
            var setting_field = $(setting).find('input,select');
            setting_field.attr('disabled', 'disabled');
        });
    };

    /* Enable a control panel setting */
    $.enableSettings = function (settings) {
        $.each(settings, function (intIndex, setting) {
            setting.removeClass('unclickable');
            var setting_field = $(setting).find('input,select');
            setting_field.removeAttr('disabled');
        });
    };

    /* Update settings */
    $.updateSettings = function () {

        var globally_enabled = $('#content').hasClass('globally_enabled');
        var moderation_custom = $('#content').hasClass('moderation_custom');
        var invalid_mail_setup = $('#content').hasClass('invalid_mail_setup');

        /* If commenting is globally disabled, disable all settings. */
        if (globally_enabled === true) {
            $.enableSettings([
                $('#formfield-form-widgets-anonymous_comments'),
                $('#formfield-form-widgets-moderation_enabled'),
                $('#formfield-form-widgets-edit_comment_enabled'),
                $('#formfield-form-widgets-delete_own_comment_enabled'),
                $('#formfield-form-widgets-text_transform'),
                $('#formfield-form-widgets-captcha'),
                $('#formfield-form-widgets-show_commenter_image'),
                $('#formfield-form-widgets-moderator_notification_enabled'),
                $('#formfield-form-widgets-moderator_email'),
                $('#formfield-form-widgets-user_notification_enabled')
            ]);
        }
        else {
            $.disableSettings([
                $('#formfield-form-widgets-anonymous_comments'),
                $('#formfield-form-widgets-moderation_enabled'),
                $('#formfield-form-widgets-edit_comment_enabled'),
                $('#formfield-form-widgets-delete_own_comment_enabled'),
                $('#formfield-form-widgets-text_transform'),
                $('#formfield-form-widgets-captcha'),
                $('#formfield-form-widgets-show_commenter_image'),
                $('#formfield-form-widgets-moderator_notification_enabled'),
                $('#formfield-form-widgets-moderator_email'),
                $('#formfield-form-widgets-user_notification_enabled')
            ]);
        }

        /* If the mail setup is invalid, disable the mail settings. */
        if (invalid_mail_setup === true) {
            $.disableSettings([
                $('#formfield-form-widgets-moderator_notification_enabled'),
                $('#formfield-form-widgets-moderator_email'),
                $('#formfield-form-widgets-user_notification_enabled')
            ]);
        }
        else {
            /* Enable mail setup only if discussion is enabled. */
            if (globally_enabled === true) {
                $.enableSettings([
                    $('#formfield-form-widgets-moderator_notification_enabled'),
                    $('#formfield-form-widgets-moderator_email'),
                    $('#formfield-form-widgets-user_notification_enabled')
                ]);
            }
        }

        /* If a custom workflow for comments is enabled, disable the moderation
           switch. */
        if (moderation_custom === true) {
            $.disableSettings([
                $('#formfield-form-widgets-moderation_enabled')
            ]);
        }
    };
    //#JSCOVERAGE_IF 0

    /**************************************************************************
     * Window Load Function: Executes when complete page is fully loaded,
     * including all frames,
     **************************************************************************/
    $(document).ready(function () {

        // Update settings on page load
        $.updateSettings();

        // Set #content class and update settings afterwards
        $('#form-widgets-globally_enabled-0').on('change', function(){
            if (this.checked) {
                $('#content').addClass('globally_enabled');
            }
            else {
                $('#content').removeClass('globally_enabled');
            }
            $.updateSettings();
        });

        /**********************************************************************
         * Remove the disabled attribute from all form elements before
         * submitting the form. Otherwise the z3c.form will raise errors on
         * the required attributes.
         **********************************************************************/
        $('form#DiscussionSettingsEditForm').bind('submit', function () {
            $(this).find('input,select').removeAttr('disabled');
        });

    });

    //#JSCOVERAGE_ENDIF

});
