var GruposUsuarioController = ControllerBase.extend({    
   
    framework: 'knockout',

    ajax: function () {

        return {
            url: '/Usuario/_Grupos',
            type: 'post',
            cache: false
        };
    },
    
    antesBinding: function () {

        this.appendToModel({ name: 'possuiGrupoSelecionado', value: false });
        this.appendToModel({ name: 'grupoSelecionado' });
        this.appendToModel({ name: 'elementoSelecionado' });
    },
    
    expandirGrupo: function (model) {

        model.expandido(!model.expandido());

        if (!model.expandido()) return;

        if (model.Grupos && model.Grupos() && model.Grupos().length > 0) return;

        global.ajax({
            url: '/Usuario/ListarGrupos',
            type: 'post',
            data: {
                codigoUsuario: model.Codigo()
            },
            success: function (data) {
                var arr = ko.mapping.fromJS(data)();
                model.Grupos(arr);
            }
        });

    },
    
    selecionarGrupo: function(model, el) {
        this.model.grupoSelecionado(model);
        this.model.possuiGrupoSelecionado(true);
        
        if (this.model.elementoSelecionado()) {
            $(this.model.elementoSelecionado()).css('color', '');
        }

        this.model.elementoSelecionado(el.target);
        $(this.model.elementoSelecionado()).css('color', '#2a6496');
    },
    
    editarGrupo: function(model) {

        this.model.grupoSelecionado(model);
        this.editar();

    },
    
    editar: function () {
        
        if (!this.model.grupoSelecionado()) {
            return;
        }

        this.editarUsuarioController = this.showView({
            region: {
                name: 'editarUsuarioRegion',
                selector: '#editar-usuario-region'
            },
            controller: {
                type: EditarUsuarioController,
                args: {
                    codigoUsuario: this.model.grupoSelecionado().Codigo(),
                    sairEdicaoCallback: $.proxy(this.sairEdicao, this)
                }
            }
        });
    },
    
    sairEdicao: function () {

        this.editarUsuarioController.hide();
        this.show();
    },

});