var PesquisarFuncionalidadeController = ControllerBase.extend({    
   

    framework: 'knockout',

    ajax: function () {

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

        this.appendToModel({ name: 'possuiFuncionalidadeSelecionada', value: false });
        this.appendToModel({ name: 'funcionalidadeSelecionada' });
        this.appendToModel({ name: 'elementoSelecionado' });

    },
    
    expandir: function (model) {

        if (!model.expandido) {
            model.expandido = ko.observable(false);
        }

        model.expandido(!model.expandido());
    },
    
    expandirFuncionalidade: function (model) {

        this.expandir(model);

        if (!model.expandido()) {
            return;
        }
        
        if (model.carregado && model.carregado()) {
            return;
        }

        global.ajax({
            url: '/Usuario/ListarFuncionalidades',
            type: 'post',
            data: {
                codigoModulo: model.Codigo()
            },
            success: function (data) {

                var arr = ko.mapping.fromJS(data)();
                model.Funcionalidades(arr);
                
                if (!model.carregado) {
                    model.carregado = ko.observable(true);
                } else {
                    model.carregado(true);
                }

            }
        });

    },
    
    selecionarFuncionalidade: function (model, el) {
        
        if (this.model.funcionalidadeSelecionada() && this.model.funcionalidadeSelecionada().Codigo() == model.Codigo()) {
            this.model.funcionalidadeSelecionada(undefined);
            this.model.possuiFuncionalidadeSelecionada(false);
            if (this.model.elementoSelecionado()) {
                $(this.model.elementoSelecionado()).css('color', '');
            }
            return;
        }

        this.model.elementoSelecionado(el.target);
        $(this.model.elementoSelecionado()).css('color', '#2a6496');
        this.model.funcionalidadeSelecionada(model);
        this.model.possuiFuncionalidadeSelecionada(true);
    },
    
    editar: function(model) {
        
        if (!this.model.funcionalidadeSelecionada()) {
            return;
        }

        this.editarPermissoesFuncionalidadeController = this.showView({
            region: {
                name: 'editarPermissoesFuncionalidadeRegion',
                selector: '#editar-permissoes-funcionalidade-region'
            },
            controller: {
                type: EditarPermissoesFuncionalidadeController,
                args: {
                    codigo: this.model.funcionalidadeSelecionada().Codigo(),
                    sairEdicaoCallback: $.proxy(this.sairEdicao, this)
                }
            }
        });

    },
    
    sairEdicao: function () {

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

});