var ShoutSecurityBrowser = window.ShoutSecurityBrowser =
{
    $securityBrowser:null,

    init: function($securityBrowser)
    {
        var self = this;

        this.$securityBrowser = jQuery($securityBrowser);
        this.$securityBrowser.find('.sui-select_all').click(
            function()
            {
                self.selectAll(this);
            }
        );

        this.$securityBrowser.find('input[type="checkbox"]:not(.sui-select_all)').click(
            function()
            {
                self.selectCheckbox(this);
            }
        );

        this.$securityBrowser.find('input[type="radio"]:not(.sui-select_all)').click(
            function()
            {
                self.selectRadio(this);
            }
        );
    },

    selectAll: function($selectElement)
    {
        $selectElement = jQuery($selectElement);
        if($selectElement.attr('checked') == true)
        {
            jQuery($selectElement).closest('.security_chooser-block').find('input[type="checkbox"]').attr({checked:true});
        }
        else
        {
            jQuery($selectElement).closest('.security_chooser-block').find('input[type="checkbox"]').attr({checked:false});
        }

        this.$securityBrowser.find('input[type="radio"]').attr({checked:false});
    },

    selectCheckbox: function($selectElement)
    {
        $parentElement = jQuery($selectElement).closest('.security_chooser-block');

        if( $parentElement.find('ul input:checked').length == $parentElement.find('ul input[type="checkbox"]').length )
        {
            $parentElement.find('.sui-select_all').attr({checked:true});
        }
        else
        {
            $parentElement.find('.sui-select_all').attr({checked:false});
        }

        this.$securityBrowser.find('input[type="radio"]').attr({checked:false});
    },

    selectRadio: function($selectElement)
    {
        this.$securityBrowser.find('input[type="checkbox"]:checked').attr({checked:false});
    },

    changeSecurity: function(taskId, adminId, $securityField, $buttonField)
    {

        var self = this;

        // XXX Needs to use SecurityBrowser
        var searchObj =
        {
            module :'Core',
            submodule :'SecurityBrowser',
            mode : 'drawBrowser',
            taskId: taskId,
            adminId: adminId,
            action: Shout.configuration.action
        };

        $securityField = jQuery($securityField);
        $buttonField = jQuery($buttonField);

        if( !$securityField.val() || parseInt( $securityField.val() ) )
        {
            var last_task = $securityField.val();

            searchObj.last_task = last_task;


        }
        else
        {

            var last_task = jQuery.evalJSON($securityField.val());

            searchObj = jQuery.extend(searchObj,
                    Shout.flattenFields(last_task, 'actionParams')
            );
        }

        jQuery.get(
            'admindex.php',
            searchObj,
            function(data)
            {
                window.$elementData = $elementData = jQuery(data);
                $elementData.filter('script,style,link').appendTo('body');
                $elementData.filter('div').dialog({
                        modal:true,
                        width:500,
                        bgiframe:true,
                        title: 'Security Chooser',
                        buttons: {
                            'Cancel': function()
                            {
                                jQuery(this).dialog('close');
                                jQuery(this).remove();
                            },
                            'Okay': function()
                            {
                                var securityVal = self.parseSecurity( jQuery(this) );

                                $securityField.val(  securityVal );

                                $buttonField.trigger('onBrowseConfirm',jQuery.evalJSON(securityVal) );

                                jQuery(this).dialog('close');
                                jQuery(this).remove();
                            }

                        }
                });

                ShoutSecurityBrowser.init($elementData.filter('.security_chooser-body'));

            }
        );
    },

    parseSecurity: function($securityElement)
    {
        // This function expects the security_chooser form.
        $securityElement = jQuery($securityElement);


        var resultData = jQuery.evalJSON( $securityElement.find('input[name="last_task"]').val() );

        // This is the structure our processor expects.
        var resultObj =
        {
            groups:{},
            last_task: resultData,
            member_level:{}
        };


        var $selectedGroups = $securityElement.find('input[type="checkbox"]:checked').not('.sui-select_all');

        // If we have selected groups, we don't have any member levels selected.
        if($selectedGroups.length)
        {
            $selectedGroups.each(function()
            {
                var groupObject = jQuery.evalJSON( jQuery(this).val() );

                var label = [];

                if(groupObject && groupObject.id)
                {
                    resultObj.groups[groupObject.id] = groupObject;
                    label.push('<li>'+groupObject.name+'</li>');
                }

            });
        }
        else
        {
            var securityVal = $securityElement.find('input[type="radio"]:checked').val()

            if(securityVal != 0)
            {
                var taskObject = jQuery.evalJSON( securityVal );

                resultObj.member_level = taskObject.id;
            }
            else
            {
                // Special case for public, which is just '0'.
                resultObj.member_level = 0;
            }
        }

        return jQuery.toJSON(resultObj);

    },

    drawFieldLabels: function(data, $field)
    {
        var self = this;

        var $field = jQuery($field);

        var result = [];

        var params = data;

        var searchObj =
        {
            module :'Core',
            submodule :'SecurityBrowser',
            mode : 'drawFieldLabels',
            action: Shout.configuration.action
        };

        searchObj = jQuery.extend(searchObj, Shout.flattenFields(params,'actionParams') );

        jQuery.post(
            Shout.configuration.location,
            searchObj,
            function(data)
            {
                $field.html(jQuery(data).filter('.sui-field-summary').html());
            },'html'
        );
    }
};
