function ListaAplicativosInlogViewModel(data) {

    var mSelf = this;

    mSelf.ModuloId = data.ModuloId;

    mSelf.Template = data.Template;

    mSelf.Data = ko.observable(new ListaAplicativosInlogDataViewModel(data.Data));

    mSelf.Init = function () {

    };

    mSelf.Ordem = 3;
}

function ListaAplicativosInlogDataViewModel(data) {

    var mSelf = this;

    mSelf.Aplicativos = data;

    mSelf.TextoFiltroAplicativos = ko.observable("");

    mSelf.AplicativoSelecionado;

    mSelf.ViewModelAplicativoSelecionado;

    mSelf.PermitirBloquearAplicativo = function (data, evt) {

        abrirDialogModal({
            resizable: false,
            height: 190,
            modal: true,
            buttons: {
                "Sim": function () {
                    mSelf.SalvarPermitirBloquearAplicativo(data);
                },
                "Não": function () {
                    $(this).dialog("close");
                }
            }
        },
            "Bloquear/Desbloquear aplicativo",
            "Confirma o " + (data.PermitirTodosUsuarios() == "T" ? "bloqueio" : "desbloqueio") + " do aplicativo " + data.Nome() + "?");
    };

    mSelf.SalvarPermitirBloquearAplicativo = function (aplicativo) {

        $("#dialog-confirm").dialog("close");

        var parmsPermitirAplicativosTodosUsuarios = { codigoAplicativo: aplicativo.Codigo(), permitirTodosUsuarios: aplicativo.PermitirTodosUsuarios() == "T" ? false : true };

        $(".loading-inlog").fadeIn("fast", function () {

            $.ajax({
                url: urlGlobal + "Autenticador/Autenticador/PermitirAcessoAplicativosTodosUsuarios",
                dataType: "json",
                type: "POST",
                data: parmsPermitirAplicativosTodosUsuarios,
                beforeSend: function () {

                },
                error: function (jqXHR, textStatus, errorThrown) {
                },
                success: function (retorno) {

                    if (retorno.Sucesso) {

                        if (aplicativo.PermitirTodosUsuarios() == "T")
                            aplicativo.PermitirTodosUsuarios("F");
                        else
                            aplicativo.PermitirTodosUsuarios("T");
                    }
                    else
                        vm.ShowMensagemAlerta("Erro ao dar permissão do aplicativo para todos os usuários!");
                },
                complete: function () {

                    $(".loading-inlog").fadeOut();
                }
            }).done(function () {


            }).fail(function (obj, type) {
                if (type === "parsererror") window.document.write(obj.responseText);
            });
        });
    };

    mSelf.ListaAplicativosFiltrados = ko.computed({

        read: function () {

            if (mSelf.TextoFiltroAplicativos() != "") {

                var filtro = [];

                ko.utils.arrayForEach(mSelf.Aplicativos(), function (aplicativo) {

                    if (aplicativo.Nome().toLowerCase().indexOf(mSelf.TextoFiltroAplicativos().toLowerCase()) > -1)
                        filtro.push(aplicativo);
                });

                return filtro;
            }

            return mSelf.Aplicativos();
        },
        owner: mSelf
    });

    mSelf.FiltrarAplicativos = function (data, evt) {

        if (evt.target.value)
            mSelf.TextoFiltroAplicativos(evt.target.value);
        else
            mSelf.TextoFiltroAplicativos("");
    };

    mSelf.ConfirmarExclusaoAplicativo = function (data, evt) {

        if ($('a[href="#cadastro_aplicativo"]').length && data.Codigo() == mSelf.CodigoAplicativoEdicao()) {
            abrirDialogModal(null, "Excluir aplicativo", "O aplicativo selecionado está em edição.");
        } else {
            abrirDialogModal({
                resizable: false,
                height: 190,
                modal: true,
                buttons: [{
                        text: "Sim",
                        "class": 'botaoSim',
                        click: function(){
                                mSelf.ExcluirAplicativo(data);
                            }
                        },
                        {
                            text: "Não",
                            "class": 'botaoNao',
                            click: function(){
                                $(this).dialog("close");
                            }
                        }]
            },
            "Excluir aplicativo",
            "Confirma a exclusão do aplicativo " + data.Nome() + "?");
        }
    };

    mSelf.ExcluirAplicativo = function (aplicativo) {

        $("#dialog-confirm").dialog("close");

        var parmsExcluirAplicativo = { codigoAplicativo: aplicativo.Codigo() };

        $(".loading-inlog").fadeIn("fast", function () {

            $.ajax({
                url: urlGlobal + "Autenticador/Autenticador/RemoverAplicativo",
                dataType: "json",
                type: "POST",
                data: parmsExcluirAplicativo,
                beforeSend: function () {

                },
                error: function (jqXHR, textStatus, errorThrown) {
                },
                success: function (retorno) {

                    if (retorno.Sucesso) {

                        mSelf.Aplicativos.remove(aplicativo);

                        var modulo = vm.GetModulo("ListaAplicativosUsuarioViewModel");

                        if (modulo)
                            modulo.RemoverAplicativoLista(aplicativo);
                    }
                    else
                        vm.ShowMensagemAlerta("Erro ao tentar excluir o aplicativo!");
                },
                complete: function () {

                    $(".loading-inlog").fadeOut();
                }
            }).done(function () {

            }).fail(function (obj, type) {
                if (type === "parsererror") window.document.write(obj.responseText);
            });
        });
    };

    mSelf.AbrirCadastroEdicaoAplicativo = function (edicao, data, evt) {
        
        //verifica se existe uma guia de edição aberta
        if ($('a[href="#cadastro_aplicativo"]').length) {

            var aplicativoAntigo = mSelf.AplicativoSelecionado;
            var aplicavo = mSelf.ViewModelAplicativoSelecionado.Data().GetAplicativo();

            //verifica se o aplicativo que está em edição é o mesmo que foi selecionado
            if (data.Codigo != undefined && data.Codigo() == mSelf.CodigoAplicativoEdicao()) {

                activeTabChange($('a[href="#cadastro_aplicativo"]').parent('li'));

            } else if (JSON.stringify(aplicavo) != JSON.stringify(aplicativoAntigo)) {

                abrirDialogModal(null, "Editar aplicativo", "Já existe um aplicativo em edição.");
                activeTabChange($('a[href="#cadastro_aplicativo"]').parent('li'));

            } else {

                mSelf.NovaGriaEdicao(edicao, data);
                activeTabChange($('a[href="#cadastro_aplicativo"]').parent('li'));
            }

        } else {

            mSelf.NovaGriaEdicao(edicao, data);

        }
    };

    mSelf.NovaGriaEdicao = function (edicao, data) {

        mSelf.ViewModelAplicativoSelecionado = vm.GetFerramenta("FerramentaCadastroEdicaoAplicativo");
        var textotitulo = mSelf.ViewModelAplicativoSelecionado.TituloNovo();
        var iconetitulo = mSelf.ViewModelAplicativoSelecionado.IconCss();
        if (edicao) {

            mSelf.AplicativoSelecionado = mSelf.FormataAplicativoSelecionado(data);

            textotitulo = mSelf.ViewModelAplicativoSelecionado.TituloEdicao();
            iconetitulo = "glyphicon glyphicon-pencil";
            mSelf.ViewModelAplicativoSelecionado.Data().App(data);//passa o objeto app
            mSelf.CodigoAplicativoEdicao(data.Codigo());
        }
        else {
            mSelf.ViewModelAplicativoSelecionado.Data().App(null);
            mSelf.CodigoAplicativoEdicao("");
        }

        mSelf.ViewModelAplicativoSelecionado.TituloH3(textotitulo);

        mSelf.ViewModelAplicativoSelecionado.Data().Init();
        newTab(mSelf.ViewModelAplicativoSelecionado.IdDiv(), textotitulo, iconetitulo, $('a[href="#aplicativosInlog"]').parent('li'));

        //if (data.Codigo != undefined && data.Codigo() > 0)
        //    mSelf.UltimoAplicativoSelecionado(data);

    }

    mSelf.FormataAplicativoSelecionado = function (data) {
        var aplicativo = {

            'Codigo': data.Codigo()
            , 'Apagado': data.Apagado()
            , 'PermitirTodosUsuarios': data.PermitirTodosUsuarios()
            , 'NomeAplicativo': data.Nome()
            , 'IconeAplicativo': data.Icone()
            , 'CorAplicativo': data.Cor()
            , 'UrlAplicativo': data.Url()
            , 'Autenticador': data.Autenticador() == "F" ? false : true
            , 'CopiaCor': data.Cor()
            , 'CopiaIcone': data.Icone()

        };

        return aplicativo;
    };

    mSelf.UltimoAplicativoSelecionado = function (aplicativo) {

        ko.utils.arrayForEach(mSelf.Aplicativos(), function (app) {

            app.ItemSelecionado(false);
        });

        aplicativo.ItemSelecionado(true);
    };

    mSelf.CodigoAplicativoEdicao = ko.observable();

    mSelf.GetAplicativo = function (codigoApp) {
        return ko.utils.arrayFirst(mSelf.Aplicativos(), function (app) {
            return app.Codigo() == codigoApp
        });
    };
}

