function FiltroTarefaViewModel(filtro, gridInlog) {

    var mSelf = this;
    mSelf.FiltroInlog = null;
    mSelf.Functions = null;

    mSelf.Filtrado = ko.observable(false);

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

        filtro["PeriodoTarefa"].DataItemPersonalizado = ItemFitroPeriodoTarefa;
        filtro["PeriodoTarefaFim"].DataItemPersonalizado = ItemFitroPeriodoFimTarefa;

        mSelf.FiltroInlog = new FiltroInlog(filtro, "filtroTarefas", gridInlog, mSelf.Functions);
        vm.Perspectiva.FiltroTarefas(mSelf.FiltroInlog);
        mSelf.FiltroInlog.Init();
    };

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

        if (lstColunaSelecao.length == 0) {
            vm.ShowMensagemAlerta("Não há resultados para a pesquisa solicitada!");
            $(".loading-div").fadeOut();
            return;
        }

        mSelf.Filtrado(true);
        if (lstColunaSelecao.indexOf("PeriodoTarefa") > -1) {
            mSelf.FiltroInlog.Itens["PeriodoTarefa"]
                .EventoFiltrar(gridInlog, mSelf.FiltroInlog, mSelf.Functions);
        } else if (lstColunaSelecao.indexOf("PeriodoTarefaFim") > -1) {
            mSelf.FiltroInlog.Itens["PeriodoTarefaFim"]
                .EventoFiltrar(gridInlog, mSelf.FiltroInlog, mSelf.Functions);
        } else {
            if (mSelf.FiltroInlog.VerificarFiltro(lstColunaSelecao)) {
                mSelf.FiltroInlog.FiltrarOld();

                vm.Perspectiva.QtdTarefas("(" + gridInlog.DataFiltrado().length + "/" + gridInlog.Data().length + ")");
            } else {
                vm.ShowMensagemAlerta("Não há resultados para a pesquisa solicitada!");
                $(".loading-div").fadeOut();

                mSelf.Filtrado(false);
            }
        }
        $(".content-sidebar-menu").hide();
        $(".sidebar-box-content").css("display", "none");
        $(".sidebar-left-arrow").css("display", "none");
        $(".sidebar-btn-active").toggleClass("span sidebar-btn-active", false);
    };

    mSelf.Limpar = function () {
        mSelf.FiltroInlog.LimparOld();
        vm.Perspectiva.QtdTarefas("(" + gridInlog.Data().length + ")");

        mSelf.Filtrado(false);
    };

    mSelf.Init();
}

function ItemFitroPeriodoTarefa() {
    var mSelf = this;
    mSelf.DataInicial = ko.observable();
    mSelf.DataFinal = ko.observable();
    mSelf.HoraInicial = ko.observable("00:00");
    mSelf.HoraFinal = ko.observable("00:00");

    mSelf.EventoLimpar = function () {
        mSelf.DataInicial("");
        mSelf.DataFinal("");
        mSelf.HoraInicial("00:00");
        mSelf.HoraFinal("00:00");
    };

    mSelf.EventoFiltrar = function (gridInlog, filtroInlog, funcions) {
        var dataInicial = mSelf.HoraInicial() ? mSelf.DataInicial() + "T" + mSelf.HoraInicial() : mSelf.DataInicial();
        var dataFinal = mSelf.HoraFinal() ? mSelf.DataFinal() + "T" + mSelf.HoraFinal() : mSelf.DataFinal();

        if (!mSelf.DataFinal() || !mSelf.DataInicial()) {
            vm.ShowMensagemErro("Favor preencher a Data Inicial e a Data Final.");
            $(".loading-div").fadeOut();
        } else if (dataInicial >= dataFinal) {
            vm.ShowMensagemAlerta("A Data Final deve ser maior que a Data Inicial.");
            $(".loading-div").fadeOut();
        } else {
            $.getJSON(urlGlobal + "DemandaTarefa/Tarefa/CarregarGridTarefaPorData?dataInicial=" + dataInicial + "&dataFinal=" + dataFinal, function (data) {
                if (data) {
                    gridInlog.AtualizarDataBase(ko.mapping.fromJS(data.Data.Data));
                    filtroInlog.AtualizarItens(ko.mapping.fromJS(data.Filtro.ItensFiltro));
                    $("[type=reset]").click();
                    filtroInlog.RegistrarFiltroDDS();

                    vm.Perspectiva.QtdTarefas("(" + gridInlog.Data().length + ")");
                } else {
                    vm.ShowMensagemAlerta("Não há resultados para a pesquisa solicitada!");
                }
                $(".loading-div").fadeOut();
            });
        }


    }

    return mSelf;
}

function ItemFitroPeriodoFimTarefa() {
    var mSelf = this;
    mSelf.DataInicial = ko.observable();
    mSelf.DataFinal = ko.observable();
    mSelf.HoraInicial = ko.observable("00:00");
    mSelf.HoraFinal = ko.observable("00:00");

    mSelf.EventoLimpar = function () {
        mSelf.DataInicial("");
        mSelf.DataFinal("");
        mSelf.HoraInicial("00:00");
        mSelf.HoraFinal("00:00");
    };

    mSelf.EventoFiltrar = function (gridInlog, filtroInlog, funcions) {
        var dataInicial = mSelf.HoraInicial() ? mSelf.DataInicial() + "T" + mSelf.HoraInicial() : mSelf.DataInicial();
        var dataFinal = mSelf.HoraFinal() ? mSelf.DataFinal() + "T" + mSelf.HoraFinal() : mSelf.DataFinal();

        if (!mSelf.DataFinal() || !mSelf.DataInicial()) {
            vm.ShowMensagemErro("Favor preencher a Data Inicial e a Data Final.");

        } else if (dataInicial >= dataFinal) {
            vm.ShowMensagemAlerta("A Data Final deve ser maior que a Data Inicial.");

        } else {
            $.getJSON(urlGlobal + "DemandaTarefa/Tarefa/CarregarGridTarefaPorDataFim?dataInicial=" + dataInicial + "&dataFinal=" + dataFinal, function (data) {
                if (data) {
                    gridInlog.AtualizarDataBase(ko.mapping.fromJS(data.Data.Data));
                    filtroInlog.AtualizarItens(ko.mapping.fromJS(data.Filtro.ItensFiltro));
                    $("[type=reset]").click();
                    filtroInlog.RegistrarFiltroDDS();

                    vm.Perspectiva.QtdTarefas("(" + gridInlog.Data().length + ")");
                } else {
                    vm.ShowMensagemAlerta("Não há resultados para a pesquisa solicitada!");
                }
            });
        }

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

    }

    return mSelf;
}