function FiltroConfiguracaoViewModel(filtro, config) {
    var mSelf = this;
    mSelf.FiltroInlog = null;
    mSelf.Configuracoes = config;

    mSelf.Init = function () {
        mSelf.Functions = new FiltroInlogOverrideFuncions();
        mSelf.Functions.Filtrar = mSelf.Filtrar;
        mSelf.Functions.Limpar = mSelf.Limpar;

        mSelf.FiltroInlog = new FiltroInlog(filtro, "filtroConfiguracoes", null, mSelf.Functions);
        vm.Perspectiva.FiltroConfiguracoes(mSelf.FiltroInlog);
        mSelf.FiltroInlog.Init();
    };

    mSelf.Filtrar = function () {
        var lstColunaSelecao = mSelf.FiltroInlog.RecuperaFiltrosSelecionados();

        ko.utils.arrayForEach(mSelf.Configuracoes.ListaAplicacoes(), function (item) {
            item.Visivel(false);
        });

        var resultado = mSelf.Configuracoes.ListaAplicacoes();

        ko.utils.arrayForEach(lstColunaSelecao, function (itemFiltro) {
            var tiposSelecionados = ko.utils.arrayFilter(mSelf.FiltroInlog.Itens[itemFiltro].ListaItensFiltro(), function (item) {
                return item.Selecionado() === true;
            });
            var tipos = ko.utils.arrayMap(tiposSelecionados, function (item) { return item["Item"].toString() });

            resultado = mSelf.AplicarFiltro(resultado, itemFiltro, tipos);
        });

        ko.utils.arrayForEach(resultado, function (item) {
            item.Visivel(true);
        });

        if (resultado.length == 0) {
            var cmp = $("div[class^='item'] input[type='text']");
            $(".alerta-filtragem").slideUp();

            if (cmp.val() == "") {
                $(".sidebar-box-content, .sidebar-left-arrow").hide();
                $(".alerta-filtragem").slideDown().delay(5000).slideUp();
            }
        }

        mSelf.AtualizarContexto();
        mSelf.RegistrarScripts();

        $(".loading-div").fadeOut();
    };

    mSelf.AplicarFiltro = function (resultado, itemFiltro, tipos) {
        resultado = ko.utils.arrayFilter(resultado, function (item) {
            return $.inArray(item[itemFiltro](), tipos) > -1
        });

        if (resultado != null)
            return resultado;
    };

    mSelf.AtualizarContexto = function () {
        ko.utils.arrayForEach(Object.keys(mSelf.FiltroInlog.Itens), function (i) {
            if (i != "__ko_mapping__") {
                var item = mSelf.FiltroInlog.Itens[i];
                if (item.TipoFiltro() == 0) {
                    var values = ko.utils.arrayMap(mSelf.Configuracoes.ListaAplicacoes(), function (coluna) {
                        if (coluna.Visivel())
                            return coluna[item.Nome()]().toString();
                    });

                    var linhas = ko.utils.arrayFilter(item.ListaItensFiltro(), function (iList) {
                        return values.indexOf(iList.Item) == -1;
                    });
                    ko.utils.arrayForEach(linhas, function (iList) {
                        iList.Visivel(false);
                    });
                }
            }
        });
    };

    mSelf.Limpar = function () {
        mSelf.FiltroInlog.CarregarItensFiltro(true);

        ko.utils.arrayForEach(mSelf.Configuracoes.ListaAplicacoes(), function (item) {
            item.Visivel(true);
        });

        mSelf.RegistrarScripts();
        $(".loading-div").fadeOut();
    };

    mSelf.RegistrarScripts = function () {
        RegistrarScriptsConfiguracoes();
        $(".order-by").on("click", function (e) {
            mSelf.Configuracoes.OrdenarListas(this, e);
        });
    };

    mSelf.Init();
}