function FerramentaUltimasPosicoes(data) {
    var mSelf = this;

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

    mSelf.FerramentaId = data.FerramentaId;

    mSelf.Template = data.Template;

    mSelf.Nome = data.Nome;

    mSelf.Titulo = data.Titulo;

    mSelf.Ordem = 5;

    mSelf.Icone = data.Icone;

    mSelf.Visivel = true;

    mSelf.Init = function () {
        mSelf.Data().Init();
    };
}

function FerramentaUltimasPosicoesData(data) {
    var mSelf = this;

    mSelf.Init = function () {
    };

    mSelf.PlanejamentoHistorico = ko.observable();

    mSelf.LimparDadosMapa = function () {
        mSelf.PlanejamentoHistorico().Destroy();
        vm.Perspectiva.Estatisticas(null);
        $(".box-estatistica").hide();
        $(".btn-stats").removeClass("stats-grey").addClass("stats-blue");
        vm.Perspectiva.PossuiHistoricoPlotado(false);
    };

    mSelf.Aplicar = function () {
        $(".loading-div").show();
        $.ajax({
            url: "CarregarHistoricoPorMetros?metros=" + mSelf.metros() + "&codigoVeiculo=" + vm.Perspectiva.CodigoVeiculo(),
            dataType: "json",
            type: "GET",
            success: function (data) {
                if (data != null) {
                    data = ko.mapping.fromJS(data);

                    if (data.Lista().length > 0) {

                        mSelf.ListaHistorico = data.Lista();

                        if (mSelf.PlanejamentoHistorico()) {
                            mSelf.LimparDadosMapa();
                            mSelf.PlanejamentoHistorico().PlotarHistorico(data);
                        } else {
                            mSelf.PlanejamentoHistorico(new PlanejamentoHistorico(data, vm.Perspectiva.MapaController));
                        }

                        if (data.Estatisticas.DistanciaTotal < mSelf.metros()) {
                            mSelf.ShowMensagemInformacao("A distância total encontrada é menor do que o solicitado.");
                        }

                        //Preenche o painel de Estatísticas
                        vm.Perspectiva.Estatisticas(data.Estatisticas);

                        vm.Perspectiva.PossuiHistoricoPlotado(true);

                        //Exibe o painel de estatísticas caso esteja oculto
                        if ($(".box-estatistica").is(":hidden")) {
                            $(".box-estatistica").show();
                            $(".btn-stats").removeClass("stats-blue").addClass("stats-grey");
                        }

                    } else {
                        vm.ShowMensagemAlerta("Nenhum registro encontrado!");
                    }
                }
                $(".loading-div").hide();
            },
            error: function () {
                $(".loading-div").hide();
            }
        });
    };

    mSelf.metros = ko.observable(data.ValorInicial());
    mSelf.valorMin = ko.observable(data.ValorMin());
    mSelf.valorMax = ko.observable(data.ValorMax());
}