﻿function getDataTableOpcaoVoo(modo)
{
    if(modo==1)
        return availDS.tables.OpcoesDeVoo;
    else
        return availDS.tables.OpcoesDeVooVolta;
};


/////////////////////////////////////////////////////////////////////////////

function filtrarVooHorarioIdaMenor(HorarioSaidaManha, HorarioChegadaManha, HorarioSaidaTarde, HorarioChegadaTarde, HorarioSaidaNoite, HorarioChegadaNoite)
{
    ExibeAguardeComThread(function() {return filtrarVooHorario(HorarioSaidaManha, HorarioChegadaManha, HorarioSaidaTarde, HorarioChegadaTarde, HorarioSaidaNoite, HorarioChegadaNoite);});
};


//function filtrarVooHorario(HorarioSaidaInicial, HorarioSaidaFinal, HorarioChegadaInicial, HorarioChegadaFinal)
function filtrarVooHorario(HorarioSaidaManha, HorarioChegadaManha, HorarioSaidaTarde, HorarioChegadaTarde, HorarioSaidaNoite, HorarioChegadaNoite)
{
                        

    try
    {
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        
        
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {

            var Str = '';
            var tot = 0;
            
            if($('hourfilter1').checked) 
            {
               Str += "(('" + tblOpcao.rows[i]['dataSaida'].toString('HH:mm:ss') + "' >= '" + HorarioSaidaManha + "') && ('" + tblOpcao.rows[i]['dataChegada'].toString('HH:mm:ss') + "' <= '" + HorarioChegadaManha + "'))";
               tot++;
            }
           
            if($('hourfilter2').checked) 
            {
                if (tot > 0)
                {
                    Str += " || (('" + tblOpcao.rows[i]['dataSaida'].toString('HH:mm:ss') + "' >= '" + HorarioSaidaTarde + "') && ('" + tblOpcao.rows[i]['dataChegada'].toString('HH:mm:ss') + "' <= '" + HorarioChegadaTarde + "'))";
                }            
                else 
                {
                    Str += "(('" + tblOpcao.rows[i]['dataSaida'].toString('HH:mm:ss') + "' >= '" + HorarioSaidaTarde + "') && ('" + tblOpcao.rows[i]['dataChegada'].toString('HH:mm:ss') + "' <= '" + HorarioChegadaTarde + "'))";
                }            
                
                tot++; 
            }

            if($('hourfilter3').checked) 
            {
                if (tot > 0)
                {
                   Str += " || (('" + tblOpcao.rows[i]['dataSaida'].toString('HH:mm:ss') + "' >= '" + HorarioSaidaNoite + "') && ('" + tblOpcao.rows[i]['dataChegada'].toString('HH:mm:ss') + "' <= '" + HorarioChegadaNoite + "'))";
                }           
                else
                {
                   Str += "(('" + tblOpcao.rows[i]['dataSaida'].toString('HH:mm:ss') + "' >= '" + HorarioSaidaNoite + "') && ('" + tblOpcao.rows[i]['dataChegada'].toString('HH:mm:ss') + "' <= '" + HorarioChegadaNoite + "'))";
                }          
            }            
                
            
            // 0 = somente ida; 1 = ida & volta;
            if ( 
                   eval(Str)
               )
            {
                if (tblOpcao.rows[i]['filtrarPorDatas'] == 1)
                {
                    tblOpcao.rows[i]['filtrosAplicados']--;
                }
                tblOpcao.rows[i]['filtrarPorDatas'] = 0;
            }
            else 
            {
                if (tblOpcao.rows[i]['filtrarPorDatas'] == 0)
                {
                    tblOpcao.rows[i]['filtrosAplicados']++;
                }
                tblOpcao.rows[i]['filtrarPorDatas'] = 1;
            }
        }
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;

        mostraResultadosDisp();
    }
    catch (ex) { }
        
    return true;
};
function mostraResultadosDisp()
{
    Aereo.Disponibilidade.pageIndex = 1;
    var res = montaVoosDisponibilidade(Aereo.Disponibilidade.Modo, Aereo.Disponibilidade.pageIndex, Aereo.Disponibilidade.pageSize);
    Aereo.Disponibilidade.mostraResultado(res);
};
function limparFiltrosVoos()
{
    var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
    
    // preenche os filtros
    //renderFiltros(true);

    // limpa o filtro de paradas
    /*for (var i = 0; i < paradas.length; i++)
    {
        paradas[i] = false;
    }*/
    var itParadas = availDS.tables.Paradas.getIterator("ida_volta");
    itParadas.findByKey((Aereo.Disponibilidade.Modo-1));
    for(itParadas.moveFirst(); itParadas.hasNext(); itParadas.moveNext())
    {   
        itParadas.row.filtro = false;
    }
    itParadas.dispose();
    
    // limpa o filtros de cias aéreas
    var itCias = availDS.tables.Cias.getIterator("ida_volta");
    itCias.findByKey((Aereo.Disponibilidade.Modo-1));
    for(itCias.moveFirst(); itCias.hasNext(); itCias.moveNext())
    {  
        itCias.row.filtro = false;
    }
    itCias.dispose();
    /*for (var i = 0; i < ciasAereas.length; i++)
    {
        ciasAereas[i][1] = false;    
    }*/
        
    //limpa os filtros de aeroportos
    var itAeroportos = availDS.tables.Aeroportos.getIterator("ida_volta");
    itAeroportos.findByKey((Aereo.Disponibilidade.Modo-1));
    for(itAeroportos.moveFirst(); itAeroportos.hasNext(); itAeroportos.moveNext())
    {   
        itAeroportos.row.filtro = false;
    }
    /*for (var i = 0; i < aeroportos.length; i++)
    {
        aeroportos[i][1] = false;    
    }*/
    
    var horarios = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.HorariosIda : Aereo.FiltroRender.HorariosVolta); 
        
    // limpa os horário selecionados
    horarios[Aereo.FiltroRender.MenorSaidaIdaSelecionada] = horarios[Aereo.FiltroRender.MenorSaidaIda];
    horarios[Aereo.FiltroRender.MaiorSaidaIdaSelecionada] = horarios[Aereo.FiltroRender.MaiorSaidaIda];
    //horarios[idxMenorChegadaIdaSelecionada] = horarios[idxMenorChegadaIda];
    //horarios[idxMaiorChegadaIdaSelecionada] = horarios[idxMaiorChegadaIda];
    
    //horarios[idxMenorSaidaVoltaSelecionada] = horarios[idxMenorSaidaVolta];
    //horarios[idxMaiorSaidaVoltaSelecionada] = horarios[idxMaiorSaidaVolta];
    //horarios[idxMenorChegadaVoltaSelecionada] = horarios[idxMenorChegadaVolta];
    //horarios[idxMaiorChegadaVoltaSelecionada] = horarios[idxMaiorChegadaVolta];
    
//    comentado temporariamente rosimeire
//    // limpa a duração selecionada
//    var duracao = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.DuracaoIda : Aereo.FiltroRender.DuracaoVolta); 
//    
//    duracao[Aereo.FiltroRender.MenorDuracaoSelecionada] = duracao[Aereo.FiltroRender.MenorDuracao];
//    duracao[Aereo.FiltroRender.MaiorDuracaoSelecionada] = duracao[Aereo.FiltroRender.MaiorDuracao];

//    var precos = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.PrecosIda : Aereo.FiltroRender.PrecosVolta);
//    // limpa os preços selecionados

//    precos[Aereo.FiltroRender.MenorPrecoSelecionado] = precos[Aereo.FiltroRender.MenorPreco];
//    precos[Aereo.FiltroRender.MaiorPrecoSelecionado] = precos[Aereo.FiltroRender.MaiorPreco];
//    
    // limpa todos os filtros das opções MP
    for (var i = 0; i < tblOpcao.rows.count(); i++)
    {
        //debugger;
        
        
        // limpa o número de filtros aplicados 
        tblOpcao.rows[i]['filtrosAplicados'] = 0;
        
        // opções excluídas
        tblOpcao.rows[i]['exibirOpcao'] = true;
        // paradas
        tblOpcao.rows[i]['filtrarPorParadas'] = 0;
        // horários
        tblOpcao.rows[i]['filtrarPorDatas'] = 0;
        // cias aéreas
        tblOpcao.rows[i]['filtrarPorCias'] = 0;
        // aeroportos
        tblOpcao.rows[i]['filtrarPorAeroportos'] = 0;
        // duração
        tblOpcao.rows[i]['filtrarPorDuracao'] = 0;
        // preços
        tblOpcao.rows[i]['filtrarPorPrecos'] = 0;
        // por tarifas        
        tblOpcao.rows[i]['filtrarPorTarifa'] = 0;
    }
};

function eliminaBasesTarifarias(codOpcaoVoo, IataOrigemIda, CiaOrigemIda)
{
    //debugger

    // inicializa os iterators 
    var itOpcoesDeVoos_Tarifas, itTarifas, itOpcoesDeVoos;

    // Tarifas das opções de vôos
    itOpcoesDeVoos_Tarifas = availDS.tables["OpcoesDeVoos_Tarifas"].getIterator('codOpcaoDeVoo');
    // Tarifas
    itTarifas = availDS.tables["Tarifas"].getIterator('codTarifa');
    // Opcoes de voos
    itOpcoesDeVoos = availDS.tables["OpcoesDeVooVolta"].getIterator('codOpcaoDeVoo');

    itOpcoesDeVoos_Tarifas.findByKey(codOpcaoVoo);
    if(itOpcoesDeVoos_Tarifas.count() > 0)
    {
        var codTarifaMenorValorOW = 0;
        var codTarifaMenorValorRT = 0;

        // Varre todas as tarifas para pegar a menor tarifa
        for(itOpcoesDeVoos_Tarifas.moveFirst(); itOpcoesDeVoos_Tarifas.hasNext(); itOpcoesDeVoos_Tarifas.moveNext())
        {
            if(itOpcoesDeVoos_Tarifas.row.menorValorRT)
            {
                codTarifaMenorValorOW = itOpcoesDeVoos_Tarifas.row.codTarifaMenorValorOW;
                codTarifaMenorValorRT = itOpcoesDeVoos_Tarifas.row.codTarifaMenorValorRT;
                break ;
            }
        }
        
        if(codTarifaMenorValorOW != 0)
            itTarifas.findByKey(codTarifaMenorValorOW);
        else
            itTarifas.findByKey(codTarifaMenorValorRT);
        
        //debugger;
        /*
        for(itTarifas.moveFirst(); itTarifas.hasNext(); itTarifas.moveNext())
        {
            // Se Gol one-way ou qualquer cia então exclui todas as bases XXX2XX OU XXXX2XX do resultado
            // Se Azul one-way ou qualquer cia então exclui todas as bases X2XXXX OU XX2XXX do resultado
            if (RoundTripIda == '0')
            {
                //debugger;
                if ( ((itTarifas.row.baseTarifaria.mid(4,1) == "2") && (itTarifas.row.companhia == "G3")) || ((itTarifas.row.baseTarifaria.mid(5,1) == "2") && (itTarifas.row.companhia == "G3")) || ((itTarifas.row.baseTarifaria.mid(2,1) == "2") && (itTarifas.row.companhia == "AD")) || ((itTarifas.row.baseTarifaria.mid(3,1) == "2") && (itTarifas.row.companhia == "AD")) || ((itTarifas.row.baseTarifaria.mid(1,4) == "PWEB") && (itTarifas.row.companhia == "WH"))  
                || ((itTarifas.row.baseTarifaria.mid(1,5) == "PWEB2") && (itTarifas.row.companhia == "WH")) || ((itTarifas.row.baseTarifaria.mid(1,4) == "VJET") && (itTarifas.row.companhia == "WH")) ) //"2" significa round-trip
                {
                    //debugger;
                    
                    if ( tarifasJaSelecionadas.indexOf(itTarifas.row.baseTarifaria, 0) < 0 )
                    {
                        //debugger;
                        
                        tarifasJaSelecionadas += itTarifas.row.baseTarifaria + ',' ; 
                        somenteTarifa_backgroundNew(itTarifas.row.baseTarifaria, itTarifas.row.sourceCode);
                    }

                    break;
                }
            }
        }
        */
    }        
        
    itOpcoesDeVoos_Tarifas.dispose();
    itTarifas.dispose();
};

// Filtra os voos de acordo com as regras da tarifa do voo de ida escolhido
function somenteVooRegraTarifa(codOpcaoVoo)
{
    //debugger
    
    // inicializa os iterators 
    var itOpcoesDeVoos_Tarifas, itTarifas, itOpcoesDeVoos;
   

    // Tarifas das opções de vôos
    itOpcoesDeVoos_Tarifas = availDS.tables["OpcoesDeVoos_Tarifas"].getIterator('codOpcaoDeVoo');
    // Tarifas
    itTarifas = availDS.tables["Tarifas"].getIterator('codTarifa');
    // Opcoes de voos
    itOpcoesDeVoos = availDS.tables["OpcoesDeVoo"].getIterator('codOpcaoDeVoo');

    itOpcoesDeVoos_Tarifas.findByKey(codOpcaoVoo);
    if(itOpcoesDeVoos_Tarifas.count() > 0)
    {
        var codTarifaMenorValorOW = 0;
        var codTarifaMenorValorRT = 0;

        // Varre todas as tarifas para pegar a menor tarifa
        for(itOpcoesDeVoos_Tarifas.moveFirst(); itOpcoesDeVoos_Tarifas.hasNext(); itOpcoesDeVoos_Tarifas.moveNext())
        {
            if(itOpcoesDeVoos_Tarifas.row.menorValorRT)
            {
                codTarifaMenorValorOW = itOpcoesDeVoos_Tarifas.row.codTarifaMenorValorOW;
                codTarifaMenorValorRT = itOpcoesDeVoos_Tarifas.row.codTarifaMenorValorRT;
                break ;
            }
        }
        
        if(codTarifaMenorValorOW != 0)
            itTarifas.findByKey(codTarifaMenorValorOW);
        else
            itTarifas.findByKey(codTarifaMenorValorRT);
        
        for(itTarifas.moveFirst(); itTarifas.hasNext(); itTarifas.moveNext())
        {
             // Alterado por Rosimeire 2009-07-08 para FILTRAR VOOS QUE EXIGEM IDA E VOLTA PELO MESMO AEROPORTO (GOL / AZUL / WEBJET)        
            
            //"2" significa round-trip - 
            // SOMENTE A WEBJET EXIGE IDA E VOLTA PELO MESMO AEROPORTO
            if ( 
                    ((itTarifas.row.baseTarifaria.mid(1,5).trim() == "PWEB") && (itTarifas.row.companhia == "WH")) || 
                    ((itTarifas.row.baseTarifaria.mid(1,5).trim() == "PWEB2") && (itTarifas.row.companhia == "WH")) ||
                    ((itTarifas.row.baseTarifaria.mid(1,4).trim() == "VJET") && (itTarifas.row.companhia == "WH")) 
               )
            {
                RoundTripIda = '1'; 

                // filtra a opcao de voo
                itOpcoesDeVoos.findByKey(codOpcaoVoo);

                iatasAeroportos = ''; 
                if(itOpcoesDeVoos.dt.rows.count() > 0)
                {
                    for (j = 0; j < itOpcoesDeVoos.dt.rows.count(); j++)
                    {
                        if (itOpcoesDeVoos.row.escolha)
                        {
                            // exclui (filtra) todos os aeroportos <> do aeroporto da opcao escolhida 
                            // o filtro de aeroportos funciona da seguinte maneira: se mando filtrar a primeira vez, ele exclui o aeroporto
                            // dos resultados, se mando filtrar de novo então insere o aeroporto nos resultados
                            // por este motivo mandei filtrar (uma única vez) todos os aeroportos cuja iata ((do aeroporto) seja diferente da iata de origem do voo
                            if (itOpcoesDeVoos.row.iataOrigem != itOpcoesDeVoos.dt.rows[j].iataOrigem) 
                            {
                                if ( iatasAeroportos.indexOf(itOpcoesDeVoos.dt.rows[j].iataOrigem, 0) < 0 )
                                {
                                    iatasAeroportos += itOpcoesDeVoos.dt.rows[j].iataOrigem + ',' ; 
                                    filtraVooAeroporto_background(itOpcoesDeVoos.dt.rows[j].iataOrigem);
                                }
                            }    
                        }
                    }
                }
            }
            
            // Filtra todos os voos que exigem ida e volta pela mesma cia (permiteCiasDiferentes == false) 
            // ou que exigem round trip (ow_rt == 1) 
            // ou vôos da Gol que exigem round trip (itTarifas.row.baseTarifaria.mid(4,1) == "2") && (itTarifas.row.companhia = "G3")
            // ou vôos da Azul que exigem round trip ((itTarifas.row.baseTarifaria.mid(4,1) == "2") && (itTarifas.row.companhia = "G3")) || ((itTarifas.row.baseTarifaria.mid(2,1) == "2") && (itTarifas.row.companhia = "AD")) || ((itTarifas.row.baseTarifaria.mid(3,1) == "2") && (itTarifas.row.companhia = "AD")) 
            // ou vôos da WebJet que exigem round trip ((itTarifas.row.baseTarifaria.mid(1,4) == "PWEB") && (itTarifas.row.companhia == "WH")) || ((itTarifas.row.baseTarifaria.mid(1,5) == "PWEB1") && (itTarifas.row.companhia == "WH")) || ((itTarifas.row.baseTarifaria.mid(1,5) == "PWEB2") && (itTarifas.row.companhia == "WH")) ((itTarifas.row.baseTarifaria.mid(1,1) == "X") && (itTarifas.row.companhia == "WH")) ((itTarifas.row.baseTarifaria.mid(1,1) == "Y") && (itTarifas.row.companhia == "WH")) ((itTarifas.row.baseTarifaria.mid(1,1) == "Z") && (itTarifas.row.companhia == "WH")) 
            if(     
                    (itTarifas.row.permiteCiasDiferentes == false) || (itTarifas.row.ow_rt == 1) || 
                    ((itTarifas.row.baseTarifaria.mid(4,1) == "2") && (itTarifas.row.companhia == "G3")) || 
                    ((itTarifas.row.baseTarifaria.mid(5,1) == "2") && (itTarifas.row.companhia == "G3")) || 
                    ((itTarifas.row.baseTarifaria.mid(2,1) == "2") && (itTarifas.row.companhia == "AD")) || 
                    ((itTarifas.row.baseTarifaria.mid(3,1) == "2") && (itTarifas.row.companhia == "AD")) || 
                    ((itTarifas.row.baseTarifaria.mid(1,5).trim() == "PWEB") && (itTarifas.row.companhia == "WH")) || 
                    ((itTarifas.row.baseTarifaria.mid(1,5).trim() == "PWEB2") && (itTarifas.row.companhia == "WH")) ||
                    ((itTarifas.row.baseTarifaria.mid(1,4).trim() == "VJET") && (itTarifas.row.companhia == "WH"))
              )
            {
                RoundTripIda = '1'; 
                
               /* aplicar o filtro antes de renderizar o resultado */
               somenteVooCompanhia_background(itTarifas.row.companhia, false);

               break;
            }
            
            // A Gol exige ida e volta pelo mesmo aeroporto em algumas tarifas (round-trip)
            // A Azul só trabalha com um aeroporto por cidade, então não há necessidade de ter a mesma base no retorno (somente mesma cia)
            // A WebJet exige ida e volta pelo mesmo aeroporto
            /*
            if ( 
                    (itTarifas.row.ow_rt == 1) || 
                    ((itTarifas.row.baseTarifaria.mid(4,1) == "2") && (itTarifas.row.companhia == "G3")) || 
                    ((itTarifas.row.baseTarifaria.mid(5,1) == "2") && (itTarifas.row.companhia == "G3")) ||
                    ((itTarifas.row.baseTarifaria.mid(1,4) == "PWEB") && (itTarifas.row.companhia == "WH")) || 
                    ((itTarifas.row.baseTarifaria.mid(1,5) == "PWEB2") && (itTarifas.row.companhia == "WH")) ||
                    ((itTarifas.row.baseTarifaria.mid(1,4) == "VJET") && (itTarifas.row.companhia == "WH"))
               )
            {
               somenteTarifa(itTarifas.row.baseTarifaria, itTarifas.row.sourceCode);
               
               break;
            }
            */
        }
    }        
        
    itOpcoesDeVoos_Tarifas.dispose();
    itTarifas.dispose();
};

function ExibirTodosVoos()
{
    ExibeAguardeComThread(function() {return ExibirTodosVoos_background();});
};

function ExibirTodosVoos_background()
{
    try
    {
        limparFiltrosVoos();
        Aereo.FiltroVoo.init();
        mostraResultadosDisp();
    }
    catch (ex) { }
        
    return true;
};

function filtraVooCompanhia(indexCia)
{   
    ExibeAguardeComThread(function(){return filtraVooCompanhia_background(indexCia);});
};

function filtraVooCompanhia_background(indexCia)
{           

    try 
    {
        //ciasAereas[indexCia][1] = !ciasAereas[indexCia][1];
        //Acha a companhia Aerea
        var stateFiltro;
        var itCias = availDS.tables.Cias.getIterator("companhia");
        itCias.findByKey(indexCia);
        for(itCias.moveFirst(); itCias.hasNext(); itCias.moveNext())
        {   
            if(itCias.row.ida_volta == (Aereo.Disponibilidade.Modo-1))
            {
                stateFiltro = itCias.row.filtro = !itCias.row.filtro;
            }
        }
        itCias.dispose();
        
        //================================================================
        
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            if (tblOpcao.rows[i]['ciaPrincipal'] == indexCia){
                if (stateFiltro == true){
                    if (tblOpcao.rows[i]['filtrarPorCias'] == 0){
                        tblOpcao.rows[i]['filtrosAplicados']++;
                    }
                    tblOpcao.rows[i]['filtrarPorCias']++;
                }
                else{
                    if (tblOpcao.rows[i]['filtrarPorCias'] == 1){
                        tblOpcao.rows[i]['filtrosAplicados']--;
                    }
                    tblOpcao.rows[i]['filtrarPorCias']--;
                }
            }
        }
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;
        
        mostraResultadosDisp();
    }
    catch (ex) { }
        
    return true;
};

function filtraVooAeroporto(indexAeroporto)
{
    ExibeAguardeComThread(function() {return filtraVooAeroporto_background(indexAeroporto);});
};

function filtraVooAeroporto_background(indexAeroporto)
{
    //debugger 
    try 
    {
        //aeroportos[indexAeroporto][1] = !aeroportos[indexAeroporto][1];
        var stateFiltro;
        var itAeroportos = availDS.tables.Aeroportos.getIterator("iata");
        itAeroportos.findByKey(indexAeroporto);
        //debugger;
        for(itAeroportos.moveFirst(); itAeroportos.hasNext(); itAeroportos.moveNext())
        {   
            if(itAeroportos.row.ida_volta == (Aereo.Disponibilidade.Modo-1))
            {
                stateFiltro = itAeroportos.row.filtro = !itAeroportos.row.filtro;
            }
        }
        itAeroportos.dispose();
        
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        var filtrarOpcao = false;

        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            switch (indexAeroporto)
            {
                case tblOpcao.rows[i]['iataOrigem']:
                    filtrarOpcao = true;
                    break;
                case tblOpcao.rows[i]['iataDestino']:
                    filtrarOpcao = true;
                    break;
                /*case tblOpcao.rows[i]['iataOrigemVolta']:
                    filtrarOpcao = true;
                    break;
                case tblOpcao.rows[i]['iataDestinoVolta']:
                    filtrarOpcao = true;
                    break;*/
                default:
                    filtrarOpcao = false;
                    break;
            }
            
            if (filtrarOpcao == true)
            {
                if (stateFiltro == true)
                {
                    if (tblOpcao.rows[i]['filtrarPorAeroportos'] == 0)
                    {
                        tblOpcao.rows[i]['filtrosAplicados']++;
                    }
                    //tblOpcao.rows[i]['filtrarPorAeroportos']++;
                    tblOpcao.rows[i]['filtrarPorAeroportos'] = 1;
                }
                else
                {
                    if (tblOpcao.rows[i]['filtrarPorAeroportos'] == 1)
                    {
                        tblOpcao.rows[i]['filtrosAplicados']--;
                    }
                    
                    //tblOpcao.rows[i]['filtrarPorAeroportos']--;
                    tblOpcao.rows[i]['filtrarPorAeroportos'] = 0;
                }
            }
        }
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;

       mostraResultadosDisp();
    }
    catch (ex) { }
    
    return true;
};

function filtraVooParada(numParadas)
{
    ExibeAguardeComThread(function() {return filtraVooParada_background(numParadas);});
};
function filtraVooParada_background(numParadas)
{

    //debugger;
    try
    {
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        
       // paradas[numParadas] = !paradas[numParadas];
       var stateFiltro;
       var itParadas = availDS.tables.Paradas.getIterator("numParadas");
       itParadas.findByKey(numParadas);
       for(itParadas.moveFirst(); itParadas.hasNext(); itParadas.moveNext())
       {   
            if(itParadas.row.ida_volta == (Aereo.Disponibilidade.Modo-1))
            {
                stateFiltro = itParadas.row.filtro = !itParadas.row.filtro;
            }
       }
        // indica se deve filtrar qualquer opção com o número de paradas maior ou igual ao selecionado
        //var filtrarDemaisOpcoes = false;
        
        // se for o último elemento de paradas na lista de filtros, filtra qualquer opção com o número de paradas maior ou igual ao selecionado
        //if (numParadas == (paradas.length - 1))
        //{
          //  filtrarDemaisOpcoes = true;
        //}
        
        itParadas.dispose();
        
        //var numParadasAux = parseFloat(numParadas);
        
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            //debugger;

            var numParadasTotal = parseFloat(tblOpcao.rows[i]['numParadasTotal']);
            //var numEscalas = parseFloat(tblOpcao.rows[i]['escalas']);
                                               
            var itVoos = availDS.tables["Voos"].getIterator('codOpcaoDeVoo');
            itVoos.findByKey(tblOpcao.rows[i].codOpcaoDeVoo);
            
            if (numParadas == numParadasTotal) 
            {
                
                if (stateFiltro == true)
                {
                    if (tblOpcao.rows[i]['filtrarPorParadas'] == 0)
                    {
                        tblOpcao.rows[i]['filtrosAplicados']++;
                        
                    }
                    
                    tblOpcao.rows[i]['filtrarPorParadas']++;
                }
                else
                {
                
                    if (tblOpcao.rows[i]['filtrarPorParadas'] == 1)
                    {
                        tblOpcao.rows[i]['filtrosAplicados']--;
                        
                    }
                    
                    tblOpcao.rows[i]['filtrarPorParadas']--;
                }
            }
        }
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;

        mostraResultadosDisp();
    }
    catch (ex) { }
        
    return true;
};

function somenteVooCompanhia(indexCia)
{           
    //ExibeAguardeComThread(function() {return somenteVooCompanhia_background(indexCia);});
    
    /* Alterado por Rosimeire para indicar se deve ou não mostrar os resultados após a aplicação de filtro */
    ExibeAguardeComThread(function() {return somenteVooCompanhia_background(indexCia, true);});
};

/* Alterado por Rosimeire para indicar se deve ou não mostrar os resultados após a aplicação de filtro */
function somenteVooCompanhia_background(indexCia, mostrarResultados)
{
    listaCiasSelecionadas.length = 0;

    //debugger; 
   
    try
    {
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
    
        var chkCiasAereas = document.getElementsByName("chkCiaAerea");

        // Limpo todos os checkboxes e depois seto corretamente
        for (var i = 0; i < chkCiasAereas.length; i++)
        {
            chkCiasAereas[i].checked = false;
        }

        for (var i = 0; i < chkCiasAereas.length; i++)
        {
            if (chkCiasAereas[i].value != indexCia)
            {
                chkCiasAereas[i].checked = false;
            }
            else
            {
                chkCiasAereas[i].checked = true;
                //debugger;

               if (listaCiasSelecionadas.contains(chkCiasAereas[i].value) == false) 
               {                        
                   listaCiasSelecionadas[listaCiasSelecionadas.length] = chkCiasAereas[i].value;
               }
            }
        }
        
        var itCias = availDS.tables.Cias.getIterator("ida_volta");
        itCias.findByKey((Aereo.Disponibilidade.Modo-1));
        for(itCias.moveFirst(); itCias.hasNext(); itCias.moveNext())
        {  
            if(itCias.row.companhia == indexCia)
            {
                itCias.row.filtro = false;
            }else{
                itCias.row.filtro = true;
            }
        }
        itCias.dispose();
        
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {

            if (tblOpcao.rows[i]['ciaPrincipal'].indexOf(indexCia) > -1)
            {
                if (tblOpcao.rows[i]['filtrarPorCias'] == 1)
                {
                    tblOpcao.rows[i]['filtrosAplicados']--;
                }
                tblOpcao.rows[i]['filtrarPorCias'] = 0;
            }
            else
            {
                if (tblOpcao.rows[i]['filtrarPorCias'] == 0)
                {
                    tblOpcao.rows[i]['filtrosAplicados']++;
                }
                tblOpcao.rows[i]['filtrarPorCias'] = 1;
            }
        }
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;
        
        if (mostrarResultados == true)
        {
            listaCiasSelecionadas.length = 0;
            
            //Ordena por preco
            tblOpcao.sort('preco');

            mostraResultadosDisp();
        }
         
    }
    catch (ex) { }
        
    return true;
};

function somenteTarifa(indexTarifa, indexSourceCode)
{           
    ExibeAguardeComThread(function() {return somenteTarifa_background(indexTarifa, indexSourceCode);});
};

function somenteTarifa_background(indexTarifa, indexSourceCode)
{
    //debugger;

    try 
    {
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        var itBasesTarifarias = availDS.tables.OpcoesDeVoos_Tarifas.getIterator("baseTarifaria");

        itBasesTarifarias.findByKey(indexTarifa);

        var codigosDeOpcoes = "";
        for(itBasesTarifarias.moveFirst(); itBasesTarifarias.hasNext(); itBasesTarifarias.moveNext())
        {  
            codigosDeOpcoes += itBasesTarifarias.row.codOpcaoDeVoo + ";";
        }
        
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            if ( (codigosDeOpcoes.indexOf(tblOpcao.rows[i]['codOpcaoDeVoo']) == -1) || (tblOpcao.rows[i]['sourceCode'] == indexSourceCode))
            {
                //alert(codigosDeOpcoes);
                if (tblOpcao.rows[i]['filtrarPorTarifa'] == 0)
                {
                    tblOpcao.rows[i]['filtrosAplicados']++;
                }
                tblOpcao.rows[i]['filtrarPorTarifa']= 1 ;
            }
            else
            {
                if (tblOpcao.rows[i]['filtrarPorTarifa'] == 1)
                {
                    tblOpcao.rows[i]['filtrosAplicados']--;
                }
                tblOpcao.rows[i]['filtrarPorTarifa']= 0;
            
            }
        }   
        
        
        itBasesTarifarias.dispose();
   
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;

        //Ordena por preco
        tblOpcao.sort('preco');

        mostraResultadosDisp();

    }

    catch (ex) { }
        
    return true;
};

function somenteTarifa_backgroundNew(indexTarifa, indexSourceCode)
{
    //debugger;

    try 
    {
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        var itBasesTarifarias = availDS.tables.OpcoesDeVoos_Tarifas.getIterator("baseTarifaria");

        itBasesTarifarias.findByKey(indexTarifa);

        //var codigosDeOpcoes = "";
        for(itBasesTarifarias.moveFirst(); itBasesTarifarias.hasNext(); itBasesTarifarias.moveNext())
        {  
            codigosDeOpcoesNew += itBasesTarifarias.row.codOpcaoDeVoo + ";";
        }
        
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            //if ( !((codigosDeOpcoesNew.indexOf(tblOpcao.rows[i]['codOpcaoDeVoo']) == -1) || (tblOpcao.rows[i]['sourceCode'] != indexSourceCode)) )
            //if ( (codigosDeOpcoesNew.indexOf(tblOpcao.rows[i]['codOpcaoDeVoo']) >= 0) && (tblOpcao.rows[i]['sourceCode'] == indexSourceCode) )
            if ( (codigosDeOpcoesNew.indexOf(tblOpcao.rows[i]['codOpcaoDeVoo']) >= 0) )
            {
                //alert(codigosDeOpcoesNew);
                if (tblOpcao.rows[i]['filtrarPorTarifa'] == 0)
                {
                    tblOpcao.rows[i]['filtrosAplicados']++;
                }
                tblOpcao.rows[i]['filtrarPorTarifa']= 1 ;
            }
            else
            {
                if (tblOpcao.rows[i]['filtrarPorTarifa'] == 1)
                {
                    tblOpcao.rows[i]['filtrosAplicados']--;
                }
                tblOpcao.rows[i]['filtrarPorTarifa']= 0;
            
            }
        }   
        //debugger
        
        
        itBasesTarifarias.dispose();
   
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;

    }

    catch (ex) { }
        
    return true;
};

