//function FiltroVeiculoViewModel(data) {

//    var mSelf = this;

//    mSelf.Filtros = data.Filtros;

//    mSelf.TiposVeiculos = data.TiposVeiculos;

//    mSelf.TiposVeiculosObjeto = data.TiposVeiculosObjeto;

//    mSelf.IdentificadoresVeiculos = data.IdentificadoresVeiculos;

//    mSelf.DescricoesVeiculos = data.DescricoesVeiculos;

//    mSelf.PlacasVeiculos = data.PlacasVeiculos;

//    mSelf.IdentificadorLinhas = ko.observableArray(data.Filtros.FiltrosDisponiveis.Linhas());

//    mSelf.NumerosSeriesVeiculos = data.NumerosSeriesVeiculos;

//    mSelf.StatusAvl = data.StatusAvl;

//    mSelf.StatusIgnicao = data.StatusIgnicao;

//    mSelf.CodigosTiposSelecionadosFGrid = ko.observableArray();

//    mSelf.CodigosOperacoesSelecionadosGrid = ko.observableArray();

//    mSelf.CodigosLinhasSelecionadosFGrid = ko.observableArray();

//    mSelf.TipoImgPorcentagem = 80; //Porcentagem default para o resize da imagem.

//    mSelf.CodigosLinhasDeselecionadasFGrid = ko.observableArray();

//    mSelf.FiltroOpcoes = {
//        Tipo: "", Operacao: "", Identificador: "", Descricao: "", Placa: "", NumeroSerie: "", StatusAvl: "", StatusIgnicao: "", DataHora: 0, MaiorQue: 1,
//        FiltrarTipo: false, FiltrarOperacao: false, FiltrarIdentificador: false, FiltrarDescricao: false, FiltrarPlaca: false, FiltrarNumeroSerie: false,
//        FiltrarAvl: false, FiltrarIgnicao: false, FiltrarDataHora: false, FiltrarMaiorQue: false, CodigosLinhas: [], CodigosOperacoes: [], CodigosTipoVeiculo: []
//    };

//    mSelf.selectItemColumnTipoGrid = function (tipo, checkList, evt) {
//       var indexOf = mSelf.CodigosTiposSelecionadosFGrid.indexOf(tipo);

//        if (indexOf > -1) {
//            mSelf.CodigosTiposSelecionadosFGrid.splice(indexOf, 1);
//        }
//        else {
//            if (tipo) {                
//                mSelf.CodigosTiposSelecionadosFGrid.push(tipo);
//            } else {
//                mSelf.CodigosTiposSelecionadosFGrid.removeAll();
//            }
//        }

//        if (evt != null)
//            mSelf.onClickItemFiltro(evt);

//        if (mSelf.CodigosTiposSelecionadosFGrid().length > 0 ) {

//            if (mSelf.CodigosTiposSelecionadosFGrid().length > 1)
//            {
//                $("#imgButtonTipo").hide();
//                $(".tituloButtonTipo").show();
//                $("#tituloListaTipo").html("Múltiplos");
//            }
//            else {
//                $(".tituloButtonTipo").hide();

//                $("#imgButtonTipo")
//                    .attr("src", urlGlobal + "Source/VeiculoImgSourcePorTipo?codigo=" + mSelf.CodigosTiposSelecionadosFGrid()[0]+ "&tipo=2" + "&porcentagem=" +mSelf.TipoImgPorcentagem)
//                    .show();
//            }

//            $("#colunaTipoVeiculosHdn").val(tipo);
//        }
//        else {
//            $("#imgButtonTipo").hide();
//            $("#tituloListaTipo").html("Tipo");
//            $(".tituloButtonTipo").show();

//            $("#colunaTipoVeiculosHdn").val("");
//        }       
//    };

//    mSelf.onClickItemFiltro = function(evt) {
//        evt.stopPropagation();
//        evt.preventDefault();
//    }

//    mSelf.ListaDescricoesLinha = ko.observableArray([]);

//    mSelf.selectItemColumnLinhaGrid = function (linha, descricao, checkList, evt) {

//        var indexOf = mSelf.CodigosLinhasSelecionadosFGrid.indexOf(linha);

//        if (indexOf > -1) {

//            mSelf.CodigosLinhasSelecionadosFGrid.splice(indexOf, 1);
//            mSelf.CodigosLinhasDeselecionadasFGrid.push(linha);

//            mSelf.ListaDescricoesLinha.splice(indexOf, 1);
//        }
//        else {
//            if (linha) {
//                mSelf.CodigosLinhasSelecionadosFGrid.push(linha);
//                mSelf.CodigosLinhasDeselecionadasFGrid.push(linha);

//                mSelf.ListaDescricoesLinha.push(descricao);
//            }
//        }

//        if (mSelf.CodigosLinhasSelecionadosFGrid().length > 0 && linha) {
//            if (mSelf.CodigosLinhasSelecionadosFGrid().length > 1) {
//                $(".tituloButtonLinha").html("Múltiplos");
//            } else {
//                $(".tituloButtonLinha").html(mSelf.ListaDescricoesLinha()[0]);
//            }
//        } else {
//            $(".tituloButtonLinha").html("Linha");
//        }


//        if (evt)
//            mSelf.onClickItemFiltro(evt);
//    };

//    mSelf.selectItemColumnOperacaoGrid = function (operacao, descricao, checkList, evt) {
//        var indexOf = mSelf.CodigosOperacoesSelecionadosGrid.indexOf(operacao);

//        if (indexOf > -1) {
//            mSelf.CodigosOperacoesSelecionadosGrid.splice(indexOf, 1);
//        }
//        else {

//            if (operacao)
//                mSelf.CodigosOperacoesSelecionadosGrid.push(operacao);
//        }

//        if (evt)
//            mSelf.onClickItemFiltro(evt);

//        $(".tituloButtonOperacao").html(descricao);
//    };

//    mSelf.selectItemColumnStatusAvlGrid = function (avl, descricao) {

//        $(".tituloButtonStatusAvl").html(descricao);

//        document.getElementById("colunaStatusAvlVeiculosHdn").value = avl;
//    };

//    mSelf.selectItemColumnStatusIgnicaoGrid = function (ignicao, descricao) {

//        $(".tituloButtonStatusIgnicao").html(descricao);

//        document.getElementById("colunaStatusIgnicaoVeiculosHdn").value = ignicao;
//    };

//    mSelf.selectItemColumnMaiorQue = function (maiorque, descricao) {

//        $(".tituloButtonMaiorQue").html(descricao);

//        document.getElementById("colunaMaiorQueVeiculosHdn").value = maiorque;
//    };

//    mSelf.typeaheadLinha = function (data, evt) {

//        var objetos = [];

//        var itens = mSelf.Filtros.FiltrosDisponiveis.Linhas();

//        var palavras = evt.target.value.split(" ");

//        if (palavras == undefined || palavras.lenght == 0) {

//            for (var i in itens) {

//                var regEx = new RegExp(evt.target.value, 'mi');

//                if (itens[i].Text().match(regEx) != null) {

//                    objetos.push(itens[i]);
//                }
//            }
//        } else {

//            for (var i in itens) {

//                if (itens[i].Text() != null && validaItens(itens[i].Text(), palavras)) {

//                    objetos.push(itens[i]);
//                }
//            }
//        }

//        mSelf.IdentificadorLinhas(objetos);
//    };

//    mSelf.LimparAcionado = ko.observable(false);

//    mSelf.filtraVeiculosGrid = function (arrayVeiculos) {

//        $(".loading-inlog").fadeIn("fast", function () {
//            mSelf.PlotarPlanejamentoFiltroLinhasDeselecionadas();
            
//            var dataHora = document.getElementById("Geral-FiltroDataPosicao").value;
//            var hora = document.getElementById("Geral-FiltroHoraPosicao").value; 

//            if(dataHora != "" && hora != "")
//                dataHora = dataHora.concat("T"+hora);
//            else if(dataHora != "" && hora == "")
//                dataHora = dataHora.concat("T00:00");

//            mSelf.FiltroOpcoes = {

//                Tipo: $("#colunaTipoVeiculosHdn").val(),
//                FiltrarTipo: $("#colunaTipoVeiculosHdn").val() != "",

//                Operacao: $("#colunaOperacaoVeiculosHdn").val(),
//                FiltrarOperacao: $("#colunaOperacaoVeiculosHdn").val() != "",

//                Identificador: $("input[name=txIdentificador]").val(),
//                FiltrarIdentificador: $("input[name=txIdentificador]").val() != "",

//                Descricao: $("input[name=txVeiculo]").val(),
//                FiltrarDescricao: $("input[name=txVeiculo]").val() != "",

//                Placa: $("input[name=txPlaca]").val(),
//                FiltrarPlaca: $("input[name=txPlaca]").val() != "",

//                NumeroSerie: $("input[name=txNumeroSerie]").val(),
//                FiltrarNumeroSerie: $("input[name=txNumeroSerie]").val() != "",

//                StatusAvl: $("#colunaStatusAvlVeiculosHdn").val(),
//                FiltrarAvl: $("#colunaStatusAvlVeiculosHdn").val() != "",

//                StatusIgnicao: $("#colunaStatusIgnicaoVeiculosHdn").val(),
//                FiltrarIgnicao: $("#colunaStatusIgnicaoVeiculosHdn").val() != "",

//                DataHora: new Date(dataHora).getTime(),
//                FiltrarDataHora: !isNaN(new Date(dataHora).getTime()),                

//                MaiorQue: $("#colunaMaiorQueVeiculosHdn").val(),
//                FiltrarMaiorQue: true,

//                CodigosLinhas: mSelf.CodigosLinhasSelecionadosFGrid.slice(0),
//                CodigosOperacoes: mSelf.CodigosOperacoesSelecionadosGrid.slice(0),
//                CodigosTipoVeiculo: mSelf.CodigosTiposSelecionadosFGrid.slice(0)
//            };

//            for (var i in arrayVeiculos) {

//                mSelf.FiltrarVeiculoEventoAtualizacao(arrayVeiculos[i]);
//            }

//            vm.Perspectiva.ControleMapa.RefreshCluster();

//            mSelf.PlotarPlanejamentoFiltroLinhas();

//            gridBuilder();

//            var modulo = vm.GetModulo("GridVeiculosViewModel");
//            if (modulo) {
//                if (mSelf.LimparAcionado()) {
//                    modulo.TotalVeiculos = modulo.Data.Veiculos().length;
//                    modulo.TotalVeiculosMapa = modulo.ItensPlotados;
//                }
//                else {
//                    modulo.TotalVeiculosMapa = vm.Perspectiva.ControleMapa.GetQuantidadeMarkers();
//                    modulo.TotalVeiculos = modulo.TotalVeiculosMapa;
//                }
                                    
//                modulo.AlterarTituloGrid();
//            }

//            mSelf.LimparAcionado(false);

//            $(".loading-inlog").fadeOut();
//        });
//    };

//    mSelf.aplicarFiltroGrid = function (veiculo) {

//        var bool = true;

//        if (mSelf.FiltroOpcoes.FiltrarTipo) {
//            bool &= $.inArray(veiculo.Tipo() + "", mSelf.FiltroOpcoes.CodigosTipoVeiculo) > -1;
//        }

//        if (bool && mSelf.FiltroOpcoes.FiltrarOperacao) {
//            bool &= veiculo.CodigoOperacao() == mSelf.FiltroOpcoes.Operacao;
//        }

//        if (bool && mSelf.FiltroOpcoes.FiltrarIdentificador) {
//            bool &= genericMatcherQuery(veiculo.Identificador(), mSelf.FiltroOpcoes.Identificador);
//        }

//        if (bool && mSelf.FiltroOpcoes.Descricao != "") {
//            bool &= genericMatcherQuery(veiculo.Descricao(), mSelf.FiltroOpcoes.Descricao);
//        }

//        if (bool && mSelf.FiltroOpcoes.Placa != "") {
//            bool &= genericMatcherQuery(veiculo.Placa(), mSelf.FiltroOpcoes.Placa);
//        }

//        if (bool && mSelf.FiltroOpcoes.NumeroSerie != "") {
//            bool &= genericMatcherQuery(veiculo.NumeroSerie(), mSelf.FiltroOpcoes.NumeroSerie);
//        }

//        if (bool && mSelf.FiltroOpcoes.CodigosLinhas.length > 0) {
//            bool &= $.inArray(veiculo.CodigoLinhaAtual() + "", mSelf.FiltroOpcoes.CodigosLinhas) > -1;
//        }

//        if (bool && mSelf.FiltroOpcoes.CodigosOperacoes.length > 0) {
//            bool &= $.inArray(veiculo.CodigoOperacao() + "", mSelf.FiltroOpcoes.CodigosOperacoes) > -1;
//        }

//        if (bool && mSelf.FiltroOpcoes.StatusAvl != "") {
//            bool &= genericMatcherQuery(veiculo.Avl(), mSelf.FiltroOpcoes.StatusAvl);
//        }

//        if (bool && mSelf.FiltroOpcoes.StatusIgnicao != "") {
//            bool &= genericMatcherQuery(veiculo.Ignicao(), mSelf.FiltroOpcoes.StatusIgnicao);
//        }

//        if (mSelf.FiltroOpcoes.FiltrarDataHora) {

//            var data = veiculo.DataHoraTimeStamp();

//            if (parseInt(mSelf.FiltroOpcoes.MaiorQue) == 1) {
//                bool &= data >= mSelf.FiltroOpcoes.DataHora;
//            } else {
//                bool &= data <= mSelf.FiltroOpcoes.DataHora;
//            }
//        }

//        return bool;
//    };

//    mSelf.limparFiltroGrid = function () {

//            mSelf.LimparAcionado(true);

//            $("#gridVeiculos").find(".selecao-filtro-grid-veiculos").each(function () {

//                $(this).trigger({
//                    type: "click",
//                    naoAlinhar: true
//                });
//            });

//            $("input[name=txIdentificador]").val("");

//            $("input[name=txVeiculo]").val("");

//            $("input[name=txPlaca]").val("");

//            $("input[name=txNumeroSerie]").val("");

//            $("input[name=txIdentificadorLinha]").val("");

//            mSelf.IdentificadorLinhas(mSelf.Filtros.FiltrosDisponiveis.Linhas());

//            document.getElementById("Geral-FiltroDataPosicao").value = "";
//            document.getElementById("Geral-FiltroHoraPosicao").value = "";
//            if (mSelf.CodigosLinhasSelecionadosFGrid && mSelf.CodigosLinhasSelecionadosFGrid().length > 0) {

//                ko.utils.arrayForEach(mSelf.CodigosLinhasSelecionadosFGrid(), function (item) {

//                    mSelf.CodigosLinhasDeselecionadasFGrid.push(item);
//                });

//                mSelf.CodigosLinhasSelecionadosFGrid.removeAll();
//                mSelf.ListaDescricoesLinha.removeAll();
//            }

//            mSelf.CodigosOperacoesSelecionadosGrid.removeAll();

//            mSelf.CodigosTiposSelecionadosFGrid.removeAll();

//            gridBuilder();
//    };

//    mSelf.onClickItemFiltro = function (evt) {

//        evt.stopPropagation();

//        evt.preventDefault();
//    };

//    mSelf.FiltrarVeiculoEventoAtualizacao = function (veiculo) {

//        var visualizarVeiculo = mSelf.aplicarFiltroGrid(veiculo);

//        if (veiculo.Visivel() != visualizarVeiculo) {

//            veiculo.Visivel(visualizarVeiculo);

//            if (visualizarVeiculo) {
//                vm.Perspectiva.ControleMapa.ShowMarker(veiculo.Codigo());
//            } else {
//                vm.Perspectiva.ControleMapa.EsconderMarker(veiculo.Codigo());
//            }

//            return true;
//        }
//        return false;
//    };

//    mSelf.PlotarPlanejamentoFiltroLinhas = function (manterPlotagem) {

//        var ferramentaLinhas = vm.GetFerramenta("FerramentaLinhasVeiculos");

//        if (ferramentaLinhas)
//            ferramentaLinhas.Data().AplicarFiltroLinhas(mSelf.CodigosLinhasSelecionadosFGrid());
//    };

//    mSelf.PlotarPlanejamentoFiltroLinhasDeselecionadas = function (manterPlotagem) {

//        var ferramentaLinhas = vm.GetFerramenta("FerramentaLinhasVeiculos");

//        if (ferramentaLinhas)
//            ferramentaLinhas.Data().AplicarFiltroLinhasDeselecionadas(mSelf.CodigosLinhasDeselecionadasFGrid());

//        mSelf.CodigosLinhasDeselecionadasFGrid.removeAll();
//    };

//    mSelf.DataAlteracao = function (data, evt) {

//        var dataHora = evt.target.value;
//        var hora = document.getElementById("Geral-FiltroHoraPosicao").value;

//        if (dataHora != "" && hora == "")
//            document.getElementById("Geral-FiltroHoraPosicao").value = "00:00";
//    };
//}

//function genericMatcher(item) {
//    var itens = this.query.split(" ");
//    var bool = false;
//    for (var i in itens) {
//        bool |= item.toLowerCase().indexOf(itens[i].toLowerCase()) > -1;
//    }
//    return bool;
//}

//function genericMatcherQuery(item, query) {
//    if (item == null || query == null)
//        return false;

//    var itens = query.split(" ");
//    var bool = false;
//    for (var i in itens) {
//        if (itens[i] != "")
//            bool |= item.toLowerCase().indexOf(itens[i].toLowerCase()) > -1;
//    }
//    return bool;
//}

//function validaItens(item, palavras) {
//    var i = 0;
//    var match = true;
//    do {
//        if (item.match(new RegExp(palavras[i], "gi")) == null) {
//            return false;
//        }
//        i++;
//    } while (palavras[i] != null);
//    return true;
//}