﻿function getDataTableOpcaoVoo(modo)
{
    if(modo==1)
        return availDS.tables.OpcoesDeVoo;
    else
        return availDS.tables.OpcoesDeVooVolta;
};

function exibirVooPrecosMenor(pos)
{
    if (isNaN(pos) == false)
    {
        var precos = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.PrecosIda : Aereo.FiltroRender.PrecosVolta);
        var auxMenorPreco = precos[Aereo.FiltroRender.MenorPreco] + pos;
        
        var auxMoeda = getMoeda(Aereo.FiltroRender.Moeda);
        

        $('divPrecoInicial').innerHTML = auxMoeda + " " + Math.floor(auxMenorPreco);
    }
};

function exibirVooPrecosMaior(pos)
{
    if (isNaN(pos) == false)
    {
        var precos = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.PrecosIda : Aereo.FiltroRender.PrecosVolta);
        var range = precos[Aereo.FiltroRender.MaiorPreco] - precos[Aereo.FiltroRender.MenorPreco];
        var auxMaiorPreco = precos[Aereo.FiltroRender.MaiorPreco] + (pos - range);
        
        var auxMoeda = getMoeda(Aereo.FiltroRender.Moeda);
       

        $('divPrecoFinal').innerHTML = auxMoeda + " " + Math.ceil(auxMaiorPreco);
    }
};

function filtrarVooPrecosMenor(pos)
{
    if (isNaN(pos) == false)
    {
        var precos = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.PrecosIda : Aereo.FiltroRender.PrecosVolta);
        var filtrarVoos = false;
        
        if (precos[Aereo.FiltroRender.MenorPrecoSelecionado] != precos[Aereo.FiltroRender.MenorPreco] + pos)
        {
            precos[Aereo.FiltroRender.MenorPrecoSelecionado] = precos[Aereo.FiltroRender.MenorPreco] + pos;

            var auxMoeda = getMoeda(Aereo.FiltroRender.Moeda);
            

            $('divPrecoInicial').innerHTML = auxMoeda + " " + Math.floor(precos[Aereo.FiltroRender.MenorPrecoSelecionado]);

            filtrarVoos = true;
        }

        if (filtrarVoos == true)
        {
            ExibeAguardeComThread(function() {return filtrarVooPrecos_background();});
        }
    }
};

function filtrarVooPrecosMaior(pos)
{
    if (isNaN(pos) == false)
    {
        var precos = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.PrecosIda : Aereo.FiltroRender.PrecosVolta);
        var filtrarVoos = false;
        
        var range = precos[Aereo.FiltroRender.MaiorPreco] - precos[Aereo.FiltroRender.MenorPreco];
        if (precos[Aereo.FiltroRender.MaiorPrecoSelecionado] != (precos[Aereo.FiltroRender.MaiorPreco] + (pos - range)))
        {
            precos[Aereo.FiltroRender.MaiorPrecoSelecionado] = precos[Aereo.FiltroRender.MaiorPreco] + (pos - range);

            var auxMoeda = getMoeda(Aereo.FiltroRender.Moeda);
            

            $('divPrecoFinal').innerHTML = auxMoeda + " " + Math.ceil(precos[Aereo.FiltroRender.MaiorPrecoSelecionado]);

            filtrarVoos = true;
        }
        
        if (filtrarVoos == true)
        {
            ExibeAguardeComThread(function() {return filtrarVooPrecos_background();});
        }
    }
};

function filtrarVooPrecos_background()
{
    try
    {
        var precos = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.PrecosIda : Aereo.FiltroRender.PrecosVolta);
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        var menorPreco = parseFloat(precos[Aereo.FiltroRender.MenorPrecoSelecionado]);
        var maiorPreco = parseFloat(precos[Aereo.FiltroRender.MaiorPrecoSelecionado]);
        
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            var tarifaADT = parseFloat(tblOpcao.rows[i]['preco']);
            
            // 0 = somente ida; 1 = ida & volta;
            if ((tarifaADT >= menorPreco && tarifaADT <= maiorPreco))
            {
                if (tblOpcao.rows[i]['filtrarPorPrecos'] == 1)
                {
                    tblOpcao.rows[i]['filtrosAplicados']--;
                }
                tblOpcao.rows[i]['filtrarPorPrecos'] = 0;
            }
            else 
            {
                if (tblOpcao.rows[i]['filtrarPorPrecos'] == 0)
                {
                    tblOpcao.rows[i]['filtrosAplicados']++;
                }
                tblOpcao.rows[i]['filtrarPorPrecos'] = 1;
            }
        }
        
        // atualiza a página atual para exibir a primeira página
        paginaAtual = 1;

        mostraResultadosDisp();
    }
    catch (ex) { }
        
    return true;
};

/////////////////////////////////////////////////////////////////////////////

function exibirVooHorarioIdaMenor(pos)
{
    if (isNaN(pos) == false)
    {
        var horarios = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.HorariosIda : Aereo.FiltroRender.HorariosVolta);
        if ($('rdoHorariosSaida').checked) {
            var auxMenorSaidaIda = horarios[Aereo.FiltroRender.MenorSaidaIda].addMinutes(pos);
            $('divHorarioInicial').innerHTML = auxMenorSaidaIda.toString("HH").capitalize() + "h" + auxMenorSaidaIda.toString("mm");   
        } else if ($('rdoHorariosChegada').checked) {
            var auxMenorChegadaIda = horarios[Aereo.FiltroRender.MenorChegadaIda].addMinutes(pos);
            $('divHorarioInicial').innerHTML = auxMenorChegadaIda.toString("HH").capitalize() + "h" + auxMenorChegadaIda.toString("mm");   
        }
    }
};

function exibirVooHorarioIdaMaior(pos)
{
    if (isNaN(pos) == false)
    {
        var horarios = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.HorariosIda : Aereo.FiltroRender.HorariosVolta);
        if ($('rdoHorariosSaida').checked) {
            var range = Date.diff(horarios[Aereo.FiltroRender.MenorSaidaIda], horarios[Aereo.FiltroRender.MaiorSaidaIda], "mm");
            var auxMaiorSaidaIda = horarios[Aereo.FiltroRender.MaiorSaidaIda].addMinutes(pos - range);
            $('divHorarioFinal').innerHTML = auxMaiorSaidaIda.toString("HH").capitalize() + "h" + auxMaiorSaidaIda.toString("mm");
        } else if ($('rdoHorariosChegada').checked) {
            var range = Date.diff(horarios[Aereo.FiltroRender.MenorChegadaIda], horarios[Aereo.FiltroRender.MaiorChegadaIda], "mm");
            var auxMaiorChegadaIda = horarios[Aereo.FiltroRender.MaiorChegadaIda].addMinutes(pos - range);
            $('divHorarioFinal').innerHTML = auxMaiorChegadaIda.toString("HH").capitalize() + "h" + auxMaiorChegadaIda.toString("mm");
        }
    }
};

function filtrarVooHorarioIdaMenor(pos)
{
    if (isNaN(pos) == false)
    {
        var horarios = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.HorariosIda : Aereo.FiltroRender.HorariosVolta);
        var filtrarVoos = false;
        
        if ($('rdoHorariosSaida').checked) {
            if (horarios[Aereo.FiltroRender.MenorSaidaIdaSelecionada].compare(horarios[Aereo.FiltroRender.MenorSaidaIda].addMinutes(pos)) != 0)
            {
                filtrarVoos = true;
                horarios[Aereo.FiltroRender.MenorSaidaIdaSelecionada] = horarios[Aereo.FiltroRender.MenorSaidaIda].addMinutes(pos);
                $('divHorarioInicial').innerHTML = horarios[Aereo.FiltroRender.MenorSaidaIdaSelecionada].toString("HH").capitalize() + "h" + horarios[Aereo.FiltroRender.MenorSaidaIdaSelecionada].toString("mm");
            }
        } else if ($('rdoHorariosChegada').checked) {
            if (horarios[Aereo.FiltroRender.MenorChegadaIdaSelecionada].compare(horarios[Aereo.FiltroRender.MenorChegadaIda].addMinutes(pos)) != 0)
            {
                filtrarVoos = true;
                horarios[Aereo.FiltroRender.MenorChegadaIdaSelecionada] = horarios[Aereo.FiltroRender.MenorChegadaIda].addMinutes(pos);
                $('divHorarioInicial').innerHTML = horarios[Aereo.FiltroRender.MenorChegadaIdaSelecionada].toString("HH").capitalize() + "h" + horarios[Aereo.FiltroRender.MenorChegadaIdaSelecionada].toString("mm");
            }
        }

        if (filtrarVoos == true)
        {
            ExibeAguardeComThread(function() {return filtrarVooHorario();});
        }
    }
};

function filtrarVooHorarioIdaMaior(pos)
{
    if (isNaN(pos) == false)
    {
        var horarios = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.HorariosIda : Aereo.FiltroRender.HorariosVolta);
        var filtrarVoos = false;
       
        if ($('rdoHorariosSaida').checked) {
            var range = Date.diff(horarios[Aereo.FiltroRender.MenorSaidaIda], horarios[Aereo.FiltroRender.MaiorSaidaIda], "mm");
            if (horarios[Aereo.FiltroRender.MaiorSaidaIdaSelecionada].compare(horarios[Aereo.FiltroRender.MaiorSaidaIda].addMinutes(pos - range)) != 0)
            {
                filtrarVoos = true;
                horarios[Aereo.FiltroRender.MaiorSaidaIdaSelecionada] = horarios[Aereo.FiltroRender.MaiorSaidaIda].addMinutes(pos - range);
                $('divHorarioFinal').innerHTML = horarios[Aereo.FiltroRender.MaiorSaidaIdaSelecionada].toString("HH").capitalize() + "h" + horarios[Aereo.FiltroRender.MaiorSaidaIdaSelecionada].toString("mm");
            }
        } else if ($('rdoHorariosChegada').checked) {
            var range = Date.diff(horarios[Aereo.FiltroRender.MenorChegadaIda], horarios[Aereo.FiltroRender.MaiorChegadaIda], "mm");
            if (horarios[Aereo.FiltroRender.MaiorChegadaIdaSelecionada].compare(horarios[Aereo.FiltroRender.MaiorChegadaIda].addMinutes(pos - range)) != 0)
            {
                filtrarVoos = true;
                horarios[Aereo.FiltroRender.MaiorChegadaIdaSelecionada] = horarios[Aereo.FiltroRender.MaiorChegadaIda].addMinutes(pos - range);
                $('divHorarioFinal').innerHTML = horarios[Aereo.FiltroRender.MaiorChegadaIdaSelecionada].toString("HH").capitalize() + "h" + horarios[Aereo.FiltroRender.MaiorChegadaIdaSelecionada].toString("mm");
            }
        }
        if (filtrarVoos == true)
        {
            ExibeAguardeComThread(function() {return filtrarVooHorario();});
        }
    }
};

function filtrarVooHorario()
{
    try
    {
        var horarios = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.HorariosIda : Aereo.FiltroRender.HorariosVolta);
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            // 0 = somente ida; 1 = ida & volta;
            if (tblOpcao.rows[i]['dataSaida'] >= (horarios[Aereo.FiltroRender.MenorSaidaIdaSelecionada]) && 
                 tblOpcao.rows[i]['dataSaida'] <= (horarios[Aereo.FiltroRender.MaiorSaidaIdaSelecionada]) &&
                 tblOpcao.rows[i]['dataChegada'] >= (horarios[Aereo.FiltroRender.MenorChegadaIdaSelecionada]) &&
                 tblOpcao.rows[i]['dataChegada'] <= (horarios[Aereo.FiltroRender.MaiorChegadaIdaSelecionada])) 
            {
                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 exibirVooDuracaoMenor(pos)
{
    if (isNaN(pos) == false)
    {
        var duracao = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.DuracaoIda : Aereo.FiltroRender.DuracaoVolta);
        var auxMenorDuracao = duracao[Aereo.FiltroRender.MenorDuracao] + (pos / 100);
        
        var horas = parseInt(auxMenorDuracao, 10);
        if (horas < 10)
        {
            horas = "0" + horas;
        }
        var minutos = Math.floor((auxMenorDuracao - horas) * 60);
        if (minutos < 10)
        {
            minutos = "0" + minutos;
        }

        $('divDuracaoInicial').innerHTML = horas + "h" + minutos;
    }
}

function exibirVooDuracaoMaior(pos)
{
    if (isNaN(pos) == false)
    {
        var duracao = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.DuracaoIda : Aereo.FiltroRender.DuracaoVolta);
        var range = duracao[Aereo.FiltroRender.MaiorDuracao] - duracao[Aereo.FiltroRender.MenorDuracao];
        var auxMaiorDuracao = duracao[Aereo.FiltroRender.MaiorDuracao] + ((pos / 100) - range);
        
        var horas = parseInt(auxMaiorDuracao, 10);
        if (horas < 10)
        {
            horas = "0" + horas;
        }
        var minutos = Math.floor((auxMaiorDuracao - horas) * 60);
        if (minutos < 10)
        {
            minutos = "0" + minutos;
        }

        $('divDuracaoFinal').innerHTML = horas + "h" + minutos;
    }
}

function filtrarVooDuracaoMenor(pos)
{
    if (isNaN(pos) == false)
    {
        var duracao = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.DuracaoIda : Aereo.FiltroRender.DuracaoVolta);
        var filtrarVoos = false;
        
        if (duracao[Aereo.FiltroRender.MenorDuracaoSelecionada] != (duracao[Aereo.FiltroRender.MenorDuracao] + (pos / 100)))
        {
            duracao[Aereo.FiltroRender.MenorDuracaoSelecionada] = duracao[Aereo.FiltroRender.MenorDuracao] + (pos / 100);

            var horas = parseInt(duracao[Aereo.FiltroRender.MenorDuracaoSelecionada], 10);
            if (horas < 10)
            {
                horas = "0" + horas;
            }
            var minutos = Math.floor((duracao[Aereo.FiltroRender.MenorDuracaoSelecionada] - horas) * 60);
            if (minutos < 10)
            {
                minutos = "0" + minutos;
            }

            $('divDuracaoInicial').innerHTML = horas + "h" + minutos;
            
            filtrarVoos = true;
        }
        
        if (filtrarVoos == true)
        {
            ExibeAguardeComThread(function() {return filtrarVooDuracao_background();});
        }
    }
}

function filtrarVooDuracaoMaior(pos)
{
    if (isNaN(pos) == false)
    {
        var duracao = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.DuracaoIda : Aereo.FiltroRender.DuracaoVolta);
        var filtrarVoos = false;
        
        var range = duracao[Aereo.FiltroRender.MaiorDuracao] - duracao[Aereo.FiltroRender.MenorDuracao];
        if (duracao[Aereo.FiltroRender.MaiorDuracaoSelecionada] != (duracao[Aereo.FiltroRender.MaiorDuracao] + ((pos / 100) - range)))
        {
            duracao[Aereo.FiltroRender.MaiorDuracaoSelecionada] = duracao[Aereo.FiltroRender.MaiorDuracao] + ((pos / 100) - range);

            var horas = parseInt(duracao[Aereo.FiltroRender.MaiorDuracaoSelecionada], 10);
            if (horas < 10)
            {
                horas = "0" + horas;
            }
            var minutos = Math.floor((duracao[Aereo.FiltroRender.MaiorDuracaoSelecionada] - horas) * 60);
            if (minutos < 10)
            {
                minutos = "0" + minutos;
            }

            $('divDuracaoFinal').innerHTML = horas + "h" + minutos;
            
            filtrarVoos = true;
        }
        
        if (filtrarVoos == true)
        {
            ExibeAguardeComThread(function() {return filtrarVooDuracao_background();});
        }
    }
}

function filtrarVooDuracao_background()
{
    try
    {
        var duracao = (Aereo.Disponibilidade.Modo == 1 ? Aereo.FiltroRender.DuracaoIda : Aereo.FiltroRender.DuracaoVolta);
        var tblOpcao = getDataTableOpcaoVoo(Aereo.Disponibilidade.Modo);
        
        var menorDuracao = parseFloat(duracao[Aereo.FiltroRender.MenorDuracaoSelecionada].toFixed(2));
        var maiorDuracao = parseFloat(duracao[Aereo.FiltroRender.MaiorDuracaoSelecionada].toFixed(2));

        for (var i = 0; i < tblOpcao.rows.count(); i++)
        {
            var _duracaoIda = parseFloat(tblOpcao.rows[i]['duracao'].toFixed(2));
            //var duracaoVolta = parseFloat(tblOpcao.rows[i]['duracaoVolta'].toFixed(2));
            
            // 0 = somente ida; 1 = ida & volta;
            if ((_duracaoIda >= menorDuracao && _duracaoIda <= maiorDuracao))
            {
                if (tblOpcao.rows[i]['filtrarPorDuracao'] == 1)
                {
                    tblOpcao.rows[i]['filtrosAplicados']--;
                }
                tblOpcao.rows[i]['filtrarPorDuracao'] = 0;
            }
            else 
            {
                if (tblOpcao.rows[i]['filtrarPorDuracao'] == 0)
                {
                    tblOpcao.rows[i]['filtrosAplicados']++;
                }
                tblOpcao.rows[i]['filtrarPorDuracao'] = 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];
    
    // 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

    // colocar aqui o limpafiltros
        
    // 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;
        //alert(tarifasJaSelecionadas);
        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) == "PWEB1") && (itTarifas.row.companhia == "WH")) || ((itTarifas.row.baseTarifaria.mid(1,5) == "PWEB2") && (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;
                }
                
//                if ( ((itTarifas.row.baseTarifaria.mid(4,1) == "1") && (itTarifas.row.companhia = "G3")) ) //"2" significa round-trip
//                {
//                    alert(itTarifas.row.baseTarifaria);
//                }
//                
            }
        }
    }        
        
    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);
        
        //debugger;
           
        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)        
            
            //debugger 
            //if ( itTarifas.row.idaVoltaMesmoAeroporto == true || itTarifas.row.ow_rt == 1)
            //"2" significa round-trip - A GOL EXIGE IDA E VOLTA PELO MESMO AEROPORTO, 
            //PARA A AZUL NÃO FOI NECESSÁRIO FILTRAR POR AEROPORTO PORQUE ELA TRABALHA COM SOMENTE 1 AEROPORTO POR CIDADE
            // A WEBJET EXIGE IDA E VOLTA PELO MESMO AEROPORTO
            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(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,4) != '') && (itTarifas.row.companhia == "WH")) 
               )
            {
                RoundTripIda = '1'; 
                //debugger;
                // 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);
                                }
                            }    
                        }
                    }
                }
            }
            
            //itTarifas.dt.rows[134].baseTarifaria
            
            
            
            // 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,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,4) != '') && (itTarifas.row.companhia == "WH")) 
              )
            {
                RoundTripIda = '1'; 
                
               /* Alterado por Rosimeire para aplicar o filtro antes de renderizar o resultado */
               somenteVooCompanhia_background(itTarifas.row.companhia, false);
               
               //montaMelhorPrecoReduzidaPorCia(tpl.Disponibilidade.MelhorPreco, (Aereo.Disponibilidade.Modo-1), itTarifas.row.companhia, Aereo.LayoutGeral.MelhorPrecoPagAtual);

               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

//                    (itTarifas.row.ow_rt == 1) || 
//                    ((itTarifas.row.baseTarifaria.mid(4,1) == "2") && (itTarifas.row.companhia == "G3")) || 
//                    (itTarifas.row.ow_rt == 1) || 
//                    ((itTarifas.row.baseTarifaria.mid(5,1) == "2") && (itTarifas.row.companhia == "G3")) 


            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) == "PWEB1") && (itTarifas.row.companhia == "WH")) || 
                    ((itTarifas.row.baseTarifaria.mid(1,5) == "PWEB2") && (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']++;
                }
                else{
                    if (tblOpcao.rows[i]['filtrarPorAeroportos'] == 1){
                        tblOpcao.rows[i]['filtrosAplicados']--;
                    }
                    tblOpcao.rows[i]['filtrarPorAeroportos']--;
                }
            }
        }
        
        // 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)
{
    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++)
        {
            var numParadasTotal = parseFloat(tblOpcao.rows[i]['numParadasTotal']);
            
            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;
}




