/******************************************************************************
 *
 * jQuery functions for the plone.app.discussion comment viewlet and form.
 *
 ******************************************************************************/
(function ($) {
    // 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 anonymous_comments = $("#content").hasClass("anonymous_comments");
        var moderation_enabled = $("#content").hasClass("moderation_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-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-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,
     **************************************************************************/
    $(window).load(function () {
    
        // Update settings on page load
        $.updateSettings();
        
        // Set #content class and update settings afterwards
        $("input,select").live("change", function (e) {
            var id = $(this).attr("id");
            if (id === "form-widgets-globally_enabled-0") {
                if ($(this).attr("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 (e) {
            $(this).find("input,select").removeAttr('disabled');
        });
        
    });

    //#JSCOVERAGE_ENDIF

}(jQuery));
