﻿/*************************************************************************************************************************************************/
/*                                                             RENDER DE FILTROS                                                                 */
/*************************************************************************************************************************************************/
function renderFiltros(apenasReiniciarFiltro)
{
    renderFiltroParadas(apenasReiniciarFiltro);
    renderFiltroHorarios(apenasReiniciarFiltro);
    renderFiltroCiasAereas(apenasReiniciarFiltro);
    renderFiltroAeroportos(apenasReiniciarFiltro);
    renderFiltroDuracao(apenasReiniciarFiltro);
    renderFiltroPrecos(apenasReiniciarFiltro);
}

function restauraFiltroParadas()
{
    var listaCheckBoxes = document.getElementsByName("chkParadas");
    for (var i = 0; i < listaCheckBoxes.length; i++)
    {
        listaCheckBoxes[i].checked = !paradas[i];
    }
}

function MarcarParadas(value)
{
    var listaCheckBoxes = document.getElementsByName("chkParadas");
    for (var i = 0; i < listaCheckBoxes.length; i++)
    {
        if(listaCheckBoxes[i].value == value)
        {
            listaCheckBoxes[i].checked = !listaCheckBoxes[i].checked;
            break;
        }
    }
    
    filtraVooParada(value);
}

function MarcarTodasParadas()
{
    var listaCheckBoxes = document.getElementsByName("chkParadas");
    var bool  = true;
    var str = "";
    
    if($('linkMarcaTodasParadas').innerHTML == "Marcar Todas")
    {
        $('linkMarcaTodasParadas').innerHTML = "Desmarcar Todas";
        bool = true;
    }
    else    
    {
        $('linkMarcaTodasParadas').innerHTML = "Marcar Todas";
        bool = false;
    }
    
    for (var i = 0; i < listaCheckBoxes.length; i++)
    {
        listaCheckBoxes[i].checked = bool;
        filtraVooParada(listaCheckBoxes[i].value);        
    }
}


function renderFiltroParadas(apenasReiniciarFiltro)
{
    var filtroParadas = templates.FiltroParadas;
    filtroParadas.paradas = "";
    filtroParadas.divParadas = "divParadas";
    filtroParadas.imgMinimizaDivParadas = "imgMinimizaDivParadas";
    filtroParadas.minimizaDivParadas = "javascript:minimiza_expande_div('divParadas','imgMinimizaDivParadas');";
    
    var linhaFiltroParadas = templates.LinhaFiltroParadas;

    for (var i = 0; i < ds.tables.Paradas.rows.count() && i <= 2; i++)
    {
        // inclui na lista de filtros de paradas
        // (false indica que os vôos com esse nº de paradas não devem ser filtrados, isto é, devem ser exibidos)
        paradas[ds.tables.Paradas.rows[i]["numParadas"]] = false;

        linhaFiltroParadas.numParadas = ds.tables.Paradas.rows[i]["numParadas"];
        linhaFiltroParadas.linkFiltraParadas = "javascript:filtraVooParada(" + ds.tables.Paradas.rows[i]["numParadas"] + ")";
        
        // Marca a checkbox selecionada a partir do click no link de paradas
        linhaFiltroParadas.linkFiltraParadasLabel = "javascript:MarcarParadas(" + ds.tables.Paradas.rows[i]["numParadas"] + ")";
        
        linhaFiltroParadas.selecionado = "";
        switch (ds.tables.Paradas.rows[i]["numParadas"])
        {
            case 0:
                linhaFiltroParadas.descricao = "Sem paradas";
                break;
            case 1:
                linhaFiltroParadas.descricao = "1 parada";
                break;
            default:
                linhaFiltroParadas.descricao = "2 paradas";
                break;
        }
        if (i == ds.tables.Paradas.rows.count() - 1 || ds.tables.Paradas.rows[i]["numParadas"] == 2)
        {
            if (ds.tables.Paradas.rows[i]["numParadas"] > 0)
            {
                linhaFiltroParadas.descricao += " ou mais";
            }
            linhaFiltroParadas.selecionado = "CHECKED";
        }
       
        filtroParadas.paradas += linhaFiltroParadas.getHtml();
        filtroParadas.linkMarcaTodasParadas = "Desmarcar Todas";
        
        if (ds.tables.Paradas.rows[i]["numParadas"] == 2)
        {
            break;
        }
    }
    
    // preenche as demais posições da lista para evitar problema de posição nula no .copy() dessa lista
    for (var i = 0; i < paradas.length; i++)
    {
        if (paradas[i] == null || paradas[i] != false)
        {
            paradas[i] = false;
        }
    }

    $('divFiltroParadas').innerHTML = filtroParadas.getHtml();  
}

function renderFiltroHorarios(apenasReiniciarFiltro)
{
    var filtroHorarios = templates.FiltroHorarios;
    filtroHorarios.horarios = "";
    filtroHorarios.divHorarios = "divHorarios";
    filtroHorarios.imgMinimizaDivHorarios = "imgMinimizaDivHorarios";
    filtroHorarios.minimizaDivHorarios = "javascript:minimiza_expande_div('divHorarios','imgMinimizaDivHorarios');";
    
    try
    {
        expande_div('divHorarios','imgMinimizaDivHorarios');
    }
    catch (ex) { } 
    
    var linhaFiltroHorarios = templates.LinhaFiltroHorarios;
    
    linhaFiltroHorarios.separador = "";
    if (navigator.appName != "Microsoft Internet Explorer")
    {
       linhaFiltroHorarios.separador = "&nbsp;";
    }

    var slider = templates.Slider;
    
    // por definição, não é possível buscar vôos com data de saída inferior ao dia atual
    horarios[idxMenorSaidaIda] = ds.tables.Horarios.rows[0]["menorDataSaidaIda"];
    horarios[idxMaiorSaidaIda] = ds.tables.Horarios.rows[0]["maiorDataSaidaIda"];
    horarios[idxMenorChegadaIda] = ds.tables.Horarios.rows[0]["menorDataChegadaIda"];
    horarios[idxMaiorChegadaIda] = ds.tables.Horarios.rows[0]["maiorDataChegadaIda"];
    
    var data = Date.parse(horarios[idxMenorSaidaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
    var minutos = Date.diff(data, horarios[idxMenorSaidaIda], "mm");
    if (minutos > 30)
    {
        horarios[idxMenorSaidaIda] = Date.parse(horarios[idxMenorSaidaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
    }
    else
    {
        horarios[idxMenorSaidaIda] = Date.parse(horarios[idxMenorSaidaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
    }
    
    data = Date.parse(horarios[idxMaiorSaidaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
    minutos = Date.diff(data, horarios[idxMaiorSaidaIda], "mm");
    if (minutos > 30)
    {
        horarios[idxMaiorSaidaIda] = Date.parse(horarios[idxMaiorSaidaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addHours(1);
    }
    else
    {
        horarios[idxMaiorSaidaIda] = Date.parse(horarios[idxMaiorSaidaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
    }
    
    data = Date.parse(horarios[idxMenorChegadaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
    minutos = Date.diff(data, horarios[idxMenorChegadaIda], "mm");
    if (minutos > 30)
    {
        horarios[idxMenorChegadaIda] = Date.parse(horarios[idxMenorChegadaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
    }
    else
    {
        horarios[idxMenorChegadaIda] = Date.parse(horarios[idxMenorChegadaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
    }
    
    data = Date.parse(horarios[idxMaiorChegadaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
    minutos = Date.diff(data, horarios[idxMaiorChegadaIda], "mm");
    if (minutos > 30)
    {
        horarios[idxMaiorChegadaIda] = Date.parse(horarios[idxMaiorChegadaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addHours(1);
    }
    else
    {
        horarios[idxMaiorChegadaIda] = Date.parse(horarios[idxMaiorChegadaIda].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
    }
    
    // 0 = somente ida; 1 = ida & volta;
    if (ds.tables.Trechos.rows.count() > 1)
    {
        horarios[idxMenorSaidaVolta] = ds.tables.Horarios.rows[0]["menorDataSaidaVolta"];
        horarios[idxMaiorSaidaVolta] = ds.tables.Horarios.rows[0]["maiorDataSaidaVolta"];
        horarios[idxMenorChegadaVolta] = ds.tables.Horarios.rows[0]["menorDataChegadaVolta"];
        horarios[idxMaiorChegadaVolta] = ds.tables.Horarios.rows[0]["maiorDataChegadaVolta"];

        data = Date.parse(horarios[idxMenorSaidaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
        minutos = Date.diff(data, horarios[idxMenorSaidaVolta], "mm");
        if (minutos > 30)
        {
            horarios[idxMenorSaidaVolta] = Date.parse(horarios[idxMenorSaidaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
        }
        else
        {
            horarios[idxMenorSaidaVolta] = Date.parse(horarios[idxMenorSaidaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
        }
        
        data = Date.parse(horarios[idxMaiorSaidaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
        minutos = Date.diff(data, horarios[idxMaiorSaidaVolta], "mm");
        if (minutos > 30)
        {
            horarios[idxMaiorSaidaVolta] = Date.parse(horarios[idxMaiorSaidaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addHours(1);
        }
        else
        {
            horarios[idxMaiorSaidaVolta] = Date.parse(horarios[idxMaiorSaidaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
        }
        
        data = Date.parse(horarios[idxMenorChegadaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
        minutos = Date.diff(data, horarios[idxMenorChegadaVolta], "mm");
        if (minutos > 30)
        {
            horarios[idxMenorChegadaVolta] = Date.parse(horarios[idxMenorChegadaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
        }
        else
        {
            horarios[idxMenorChegadaVolta] = Date.parse(horarios[idxMenorChegadaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
        }
        
        data = Date.parse(horarios[idxMaiorChegadaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss');
        minutos = Date.diff(data, horarios[idxMaiorChegadaVolta], "mm");
        if (minutos > 30)
        {
            horarios[idxMaiorChegadaVolta] = Date.parse(horarios[idxMaiorChegadaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addHours(1);
        }
        else
        {
            horarios[idxMaiorChegadaVolta] = Date.parse(horarios[idxMaiorChegadaVolta].toString("ddMMyyyyHH0000"), 'ddMMyyyyHHmmss').addMinutes(30);
        }
    }
    else
    {
        horarios[idxMenorSaidaVolta] = Date.parse('01013000000000', 'ddMMyyyyHHmmss');
        horarios[idxMaiorSaidaVolta] = Date.now();
        horarios[idxMenorChegadaVolta] = Date.parse('01013000000000', 'ddMMyyyyHHmmss');
        horarios[idxMaiorChegadaVolta] = Date.now();
    }
    
    // atualiza os horário selecionados
    horarios[idxMenorSaidaIdaSelecionada] = horarios[idxMenorSaidaIda];
    horarios[idxMaiorSaidaIdaSelecionada] = horarios[idxMaiorSaidaIda];
    horarios[idxMenorChegadaIdaSelecionada] = horarios[idxMenorChegadaIda];
    horarios[idxMaiorChegadaIdaSelecionada] = horarios[idxMaiorChegadaIda];
    
    horarios[idxMenorSaidaVoltaSelecionada] = horarios[idxMenorSaidaVolta];
    horarios[idxMaiorSaidaVoltaSelecionada] = horarios[idxMaiorSaidaVolta];
    horarios[idxMenorChegadaVoltaSelecionada] = horarios[idxMenorChegadaVolta];
    horarios[idxMaiorChegadaVoltaSelecionada] = horarios[idxMaiorChegadaVolta];
    
    // determina a orientação de valores (menor para maior ou maior para menor) do slider de horários da ida
    sliderIdaMenorValor = new Array(2);
    sliderIdaMenorValor[0] = true;
    sliderIdaMenorValor[1] = true;
    
    // determina a orientação de valores (menor para maior ou maior para menor) do slider de horários da volta
    sliderVoltaMenorValor = new Array(2);
    sliderVoltaMenorValor[0] = true;
    sliderVoltaMenorValor[1] = true;
    
    // verifica se deve renderizar o slider ou apenas reiniciá-lo
    if (apenasReiniciarFiltro == false)
    {
        linhaFiltroHorarios.ida_volta = "Ida";
        linhaFiltroHorarios.linkFiltraSaida = "javascript:filtraVooSaidaIda()";
        linhaFiltroHorarios.linkFiltraChegada = "javascript:filtraVooChegadaIda()";
        linhaFiltroHorarios.saidaSelecionada = "CHECKED";
        linhaFiltroHorarios.chegadaSelecionada = "";
        
        slider.idHorarioInicial = "lblHorarioIdaInicial";
        slider.horarioInicial = horarios[idxMenorSaidaIda].toString("ddd HH").capitalize() + "h" + horarios[idxMenorSaidaIda].toString("mm");
        slider.idHorarioFinal = "lblHorarioIdaFinal";
        slider.horarioFinal = horarios[idxMaiorSaidaIda].toString("ddd HH").capitalize() + "h" + horarios[idxMaiorSaidaIda].toString("mm");
        
        slider.idSlider = "divSliderIda";
        slider.idBotaoSlider = "divBotaoSliderIda";
        slider.idBotaoSlider2 = "divBotaoSliderIda2";
        
        linhaFiltroHorarios.slider = slider.getHtml();
        
        filtroHorarios.horarios += linhaFiltroHorarios.getHtml();
        
        // 0 = somente ida; 1 = ida & volta;
        if (ds.tables.Trechos.rows.count() > 1)
        {
            linhaFiltroHorarios.ida_volta = "Volta";
            linhaFiltroHorarios.linkFiltraSaida = "javascript:filtraVooSaidaVolta()";
            linhaFiltroHorarios.linkFiltraChegada = "javascript:filtraVooChegadaVolta()";
            linhaFiltroHorarios.saidaSelecionada = "CHECKED";
            linhaFiltroHorarios.chegadaSelecionada = "";
        
            slider.idHorarioInicial = "lblHorarioVoltaInicial";
            slider.horarioInicial = horarios[idxMenorSaidaVolta].toString("ddd HH").capitalize() + "h" + horarios[idxMenorSaidaVolta].toString("mm");
            slider.idHorarioFinal = "lblHorarioVoltaFinal";
            slider.horarioFinal = horarios[idxMaiorSaidaVolta].toString("ddd HH").capitalize() + "h" + horarios[idxMaiorSaidaVolta].toString("mm");
            
            slider.idSlider = "divSliderVolta";
            slider.idBotaoSlider = "divBotaoSliderVolta";
            slider.idBotaoSlider2 = "divBotaoSliderVolta2";
            
            linhaFiltroHorarios.slider = slider.getHtml();
            
            filtroHorarios.horarios += "<BR/>" + linhaFiltroHorarios.getHtml();
        }
        
        $('divFiltroHorarios').innerHTML = filtroHorarios.getHtml();  
        
        sliderHorarioIda = new Slider($('divSliderIda'), $('divBotaoSliderIda'), moveDirection.horizontal, $('divBotaoSliderIda2'));
        var maxRange = Date.diff(horarios[idxMenorSaidaIda], horarios[idxMaiorSaidaIda], "mm");
        sliderHorarioIda.setRange(0, maxRange, 15);
        sliderHorarioIda.setPosition2(maxRange);
        sliderHorarioIda.onMove = exibirVooHorarioIdaMenor;
        sliderHorarioIda.onMove2 = exibirVooHorarioIdaMaior;
        sliderHorarioIda.onMoveStop = filtrarVooHorarioIdaMenor;
        sliderHorarioIda.onMoveStop2 = filtrarVooHorarioIdaMaior;
        
        // 0 = somente ida; 1 = ida & volta;
        if (ds.tables.Trechos.rows.count() > 1)
        {
            sliderHorarioVolta = new Slider($('divSliderVolta'), $('divBotaoSliderVolta'), moveDirection.horizontal, $('divBotaoSliderVolta2'));
            maxRange = Date.diff(horarios[idxMenorSaidaVolta], horarios[idxMaiorSaidaVolta], "mm");
            sliderHorarioVolta.setRange(0, maxRange, 15);
            sliderHorarioVolta.setPosition2(maxRange);
            sliderHorarioVolta.onMove = exibirVooHorarioVoltaMenor;
            sliderHorarioVolta.onMove2 = exibirVooHorarioVoltaMaior;
            sliderHorarioVolta.onMoveStop = filtrarVooHorarioVoltaMenor;
            sliderHorarioVolta.onMoveStop2 = filtrarVooHorarioVoltaMaior;
        }
    }
    else
    {
        document.getElementsByName('chkHorariosIda')[0].checked = true;
        
        $('lblHorarioIdaInicial').innerHTML = horarios[idxMenorSaidaIda].toString("ddd HH").capitalize() + "h" + horarios[idxMenorSaidaIda].toString("mm");
        $('lblHorarioIdaFinal').innerHTML = horarios[idxMaiorSaidaIda].toString("ddd HH").capitalize() + "h" + horarios[idxMaiorSaidaIda].toString("mm");
        
        // 0 = somente ida; 1 = ida & volta;
        if (ds.tables.Trechos.rows.count() > 1)
        {
            document.getElementsByName('chkHorariosVolta')[0].checked = true;
            
            $('lblHorarioVoltaInicial').innerHTML = horarios[idxMenorSaidaVolta].toString("ddd HH").capitalize() + "h" + horarios[idxMenorSaidaVolta].toString("mm");
            $('lblHorarioVoltaFinal').innerHTML = horarios[idxMaiorSaidaVolta].toString("ddd HH").capitalize() + "h" + horarios[idxMaiorSaidaVolta].toString("mm");
        }

        var maxRange = Date.diff(horarios[idxMenorSaidaIda], horarios[idxMaiorSaidaIda], "mm");
        sliderHorarioIda.setRange(0, maxRange, 15);
        sliderHorarioIda.setPosition(0);
        sliderHorarioIda.setPosition2(maxRange);
        
        // 0 = somente ida; 1 = ida & volta;
        if (ds.tables.Trechos.rows.count() > 1)
        {
            maxRange = Date.diff(horarios[idxMenorSaidaVolta], horarios[idxMaiorSaidaVolta], "mm");
            sliderHorarioVolta.setRange(0, maxRange, 15);
            sliderHorarioVolta.setPosition(0);
            sliderHorarioVolta.setPosition2(maxRange);
        }
    }
}

function restauraFiltroCiasAereas()
{
    var listaCheckBoxes = document.getElementsByName("chkCiaAerea");
    for (var i = 0; i < listaCheckBoxes.length; i++)
    {
        listaCheckBoxes[i].checked = !ciasAereas[i][1];
    }
}

function renderFiltroCiasAereas(apenasReiniciarFiltro)
{
    var filtroCiasAereas = templates.FiltroCompanhias;
    filtroCiasAereas.ciasAereas = "";
    filtroCiasAereas.divCias = "divCias";
    filtroCiasAereas.imgMinimizaDivCias = "imgMinimizaDivCias";
    filtroCiasAereas.minimizaDivCias = "javascript:minimiza_expande_div('divCias','imgMinimizaDivCias');";
     
    var linhaFiltroCiasAereas = templates.LinhaFiltroCompanhias;
    
    var ciasExibidas = "";
    
    // reinicia a lista de cias
    ciasAereas = new Array();
    
    for (var i = 0; i < ds.tables.Cias.rows.count(); i++)
    {
        // caso a cia seja principal
        if (ds.tables.Cias.rows[i]["principal"] == true || ds.tables.Cias.rows[i]["principal"] == "true")
        {
            // caso a cia ainda não tenha sido exibida
            if (ciasExibidas.indexOf(ds.tables.Cias.rows[i]["companhia"]) == -1)
            {
                // inclui na lista de filtros de cias aereas
                // (false indica que os vôos com essa cia aerea não devem ser filtrados, isto é, devem ser exibidos)
                var filtro = new Array();
                filtro[0] = ds.tables.Cias.rows[i]["companhia"];
                filtro[1] = false;
                ciasAereas[ciasAereas.length] = filtro;
                
                linhaFiltroCiasAereas.ciaAerea = "'" + ds.tables.Cias.rows[i]["companhia"] + "'";
                linhaFiltroCiasAereas.linkFiltraCiaAerea = "javascript:filtraVooCompanhia(" + (ciasAereas.length - 1) + ")";
                
                linhaFiltroCiasAereas.nomeCiaAerea = "";
                if (ds.tables.Cias.rows[i]["nomeCia"] != null)
                {
                    linhaFiltroCiasAereas.nomeCiaAerea = Trim(ds.tables.Cias.rows[i]["nomeCia"]);
                }
                while (linhaFiltroCiasAereas.nomeCiaAerea.indexOf(" ") > -1)
                {
                    linhaFiltroCiasAereas.nomeCiaAerea = linhaFiltroCiasAereas.nomeCiaAerea.replace(" ", "&nbsp;");
                }

                linhaFiltroCiasAereas.imagemCia = "'background: url(LogosCias/" + $('txtSite').value + "/" + ds.tables.Cias.rows[i]["imagem"] + ") no-repeat;'";

                linhaFiltroCiasAereas.linkSomenteCiaAerea = "javascript:somenteVooCompanhia(" + (ciasAereas.length - 1) + ")";
		linhaFiltroCiasAereas.textoSomenteCiaAerea = linhaFiltroCiasAereas.nomeCiaAerea;


                if (ds.tables.Cias.rows[i]["imagem"] == null || ds.tables.Cias.rows[i]["imagem"] == "")
                {
//                    linhaFiltroCiasAereas.imagemCia2 = "";
//                    linhaFiltroCiasAereas.estiloImagemCia2 = "'display:none;border:0;'";
//                    linhaFiltroCiasAereas.textoSomenteCiaAerea = linhaFiltroCiasAereas.nomeCiaAerea;
                }
                else
                {
//                    linhaFiltroCiasAereas.imagemCia2 = "'LogosCias/" + $('txtSite').value + "/" + ds.tables.Cias.rows[i]["imagem"] + "'";
//                    linhaFiltroCiasAereas.estiloImagemCia2 = "'display:inline;border:0;width:50px;height:40px;'";
//                    linhaFiltroCiasAereas.textoSomenteCiaAerea = "";
                }
                linhaFiltroCiasAereas.menorValor = Trim("R$ " + ds.tables.Cias.rows[i]["menorPreco"].formatNumber(2, true));

                filtroCiasAereas.ciasAereas += linhaFiltroCiasAereas.getHtml();

                // marca que a cia foi exibida
                ciasExibidas += ds.tables.Cias.rows[i]["companhia"] + ";";
            }
        }
    }

    $('divFiltroCompanhias').innerHTML = filtroCiasAereas.getHtml();  
}

function restauraFiltroAeroportos()
{
    try
    {
        $("chkIdaVoltaMesmoAeroporto").checked = voosMesmoAeroporto;
    } 
    catch (ex) { } 

    var listaCheckBoxes = document.getElementsByName("chkAeroporto");
    for (var i = 0; i < listaCheckBoxes.length; i++)
    {
        for (var j = 0; j < aeroportos.length; j++)
        {
            if (listaCheckBoxes[i].value == aeroportos[j][0])
            {
                listaCheckBoxes[i].checked = !aeroportos[j][1];
            }
        }
    }
}

function MarcaMesmoAeroporto()
{
    $('chkIdaVoltaMesmoAeroporto').checked = !$('chkIdaVoltaMesmoAeroporto').checked;
    filtraVooMesmoAeroporto();
}

function MarcaFiltroAeroportos(value)
{
    var listaCheckBoxes = document.getElementsByName("chkAeroporto");
    for (var i = 0; i < listaCheckBoxes.length; i++)
    {
        if(listaCheckBoxes[i].value == value)
        {
            listaCheckBoxes[i].checked = !listaCheckBoxes[i].checked;
            break;
        }
    }
    
    filtraVooAeroporto(value);
}

function renderFiltroAeroportos(apenasReiniciarFiltro)
{
    var filtroAeroportos = templates.FiltroAeroportos;
    filtroAeroportos.AeroportosAereas = "";
    filtroAeroportos.divAeroportos = "divAeroportos";
    filtroAeroportos.imgMinimizaDivAeroportos = "imgMinimizaDivAeroportos";
    filtroAeroportos.minimizaDivAeroportos = "javascript:minimiza_expande_div('divAeroportos','imgMinimizaDivAeroportos');";
    
    $('divFiltroAeroportos').innerHTML = filtroAeroportos.getHtml();  
     
    // determina se exibe a opção de ir e voltar no mesmo aeroporto se for um resultado de ida e volta
    if (ds.tables.Trechos.rows.count() > 1)
    {
        var filtroMesmoAeroporto = templates.FiltroMesmoAeroporto; 
        filtroMesmoAeroporto.linkFiltraMesmoAeroporto = "javascript:filtraVooMesmoAeroporto();";
        filtroMesmoAeroporto.LinkMesmoAeroporto = "javascript:MarcaMesmoAeroporto();";

        $('divFiltroMesmoAeroporto').innerHTML = filtroMesmoAeroporto.getHtml();
    }
    
    var filtroAeroportosOrigem = "";
    var filtroAeroportosDestino = "";
    
    var linhaFiltroAeroportos = templates.LinhaFiltroAeroportosNivel2;
    
    // identifica os pontos de origem e destino da busca
    var iataOrigem = ds.tables.Trechos.rows[0].origem;
    var iataDestino = "";
    if (ds.tables.Trechos.rows.count() > 1)
    {
        iataDestino = ds.tables.Trechos.rows[1].origem;
    }
    else
    {
        iataDestino = ds.tables.Trechos.rows[0].destino;
    }
    
    // filtra os aerportos de origem e destino 
    var origem_destino = -1;
    
    var listaAeroportosOrigem = new Array();
    var sbAeroportosOrigem = new StringBuilder();
    
    var listaAeroportosDestino = new Array();
    var sbAeroportosDestino = new StringBuilder();
    
    // reinicia a lista de aeroportos
    aeroportos = new Array();
    
    for (var i = 0; i < ds.tables.Aeroportos.rows.count(); i++)
    {
        origem_destino = ds.tables.Aeroportos.rows[i]["origem_destino"];
        
        if (origem_destino > -1)
        {
            // inclui na lista de filtros de aeroportos
            // (false indica que os vôos com esse aeroporto não devem ser filtrados, isto é, devem ser exibidos)
            var filtro = new Array();
            filtro[0] = ds.tables.Aeroportos.rows[i]["iata"];
            filtro[1] = false;
            aeroportos[aeroportos.length] = filtro;

            linhaFiltroAeroportos.iata = ds.tables.Aeroportos.rows[i]["iata"];
            linhaFiltroAeroportos.chkValue = (aeroportos.length - 1);
            linhaFiltroAeroportos.linkFiltraAeroporto = "javascript:filtraVooAeroporto(" + (aeroportos.length - 1) + ")";
            linhaFiltroAeroportos.LinkFiltroAeroportos = "javascript:MarcaFiltroAeroportos(" + (aeroportos.length - 1) + ")";
            linhaFiltroAeroportos.nomeAeroporto = ds.tables.Aeroportos.rows[i]["nome"];
            
            var filtroAeroportos = templates.LinhaFiltroAeroportosNivel1;
            filtroAeroportos.cidade = "";
            filtroAeroportos.aeroportos = "";

            switch (origem_destino)
            {
                case 0:
                    if (listaAeroportosOrigem.contains(ds.tables.Aeroportos.rows[i]["iataCidade"]) == false)
                    {
                        listaAeroportosOrigem[listaAeroportosOrigem.length] = ds.tables.Aeroportos.rows[i]["iataCidade"];
                        
                        filtroAeroportos.cidade = ds.tables.Aeroportos.rows[i]["cidade"] + ", " + ds.tables.Aeroportos.rows[i]["pais"];
                        filtroAeroportos.aeroportos = linhaFiltroAeroportos.getHtml();

                        filtroAeroportosOrigem = filtroAeroportos.getHtml();
                        
                        sbAeroportosOrigem.append(filtroAeroportos.getHtml());
                    }
                    else
                    {
                        sbAeroportosOrigem.append(linhaFiltroAeroportos.getHtml());
                    }
                    
                    break;
                case 1:
                    if (listaAeroportosDestino.contains(ds.tables.Aeroportos.rows[i]["iataCidade"]) == false)
                    {
                        listaAeroportosDestino[listaAeroportosDestino.length] = ds.tables.Aeroportos.rows[i]["iataCidade"];
                        
                        filtroAeroportos.cidade = ds.tables.Aeroportos.rows[i]["cidade"] + ", " + ds.tables.Aeroportos.rows[i]["pais"];
                        filtroAeroportos.aeroportos = linhaFiltroAeroportos.getHtml();
                        
                        filtroAeroportosDestino = filtroAeroportos.getHtml();

                        sbAeroportosDestino.append(filtroAeroportos.getHtml());
                    }
                    else
                    {
                        sbAeroportosDestino.append(linhaFiltroAeroportos.getHtml());
                    }
                    
                    break;
            }
        }
    } 

    $('divListaAeroportos').innerHTML = sbAeroportosOrigem.toString();  
    if (iataDestino != "")
    {
        $('divListaAeroportos').innerHTML += "<BR/>" + sbAeroportosDestino.toString();  
    }
}

function renderFiltroDuracao(apenasReiniciarFiltro)
{
    var filtroDuracao = templates.FiltroDuracao;
    filtroDuracao.duracao = "";
    filtroDuracao.divDuracao = "divDuracao";
    filtroDuracao.imgMinimizaDivDuracao = "imgMinimizaDivDuracao";
    filtroDuracao.minimizaDivDuracao = "javascript:minimiza_expande_div('divDuracao','imgMinimizaDivDuracao');";
    
    var linhaFiltroDuracao = templates.LinhaFiltroDuracao;

    var slider = templates.Slider;
    
    duracao[idxMenorDuracao] = Math.floor(ds.tables.Duracao.rows[0]["menorDuracao"]);
    duracao[idxMaiorDuracao] = Math.ceil(ds.tables.Duracao.rows[0]["maiorDuracao"]);
    
    // atualiza a duração selecionada
    duracao[idxMenorDuracaoSelecionada] = duracao[idxMenorDuracao];
    duracao[idxMaiorDuracaoSelecionada] = duracao[idxMaiorDuracao];
    
    // determina a orientação de valores (menor para maior ou maior para menor) do slider de duração
    sliderDuracaoMenorValor = true;
    
    // verifica se deve renderizar o slider ou apenas reiniciá-lo
    if (apenasReiniciarFiltro == false)
    {
        slider.idHorarioInicial = "lblDuracaoInicial";
        var horas = parseInt(duracao[idxMenorDuracao], 10);
        if (horas < 10)
        {
            horas = "0" + horas;
        }
        var minutos = Math.floor((duracao[idxMenorDuracao] - horas) * 60);
        if (minutos < 10)
        {
            minutos = "0" + minutos;
        }
        slider.horarioInicial = horas + "h" + minutos;
        
        slider.idHorarioFinal = "lblDuracaoFinal";
        horas = parseInt(duracao[idxMaiorDuracao], 10);
        if (horas < 10)
        {
            horas = "0" + horas;
        }
        minutos = Math.floor((duracao[idxMaiorDuracao] - horas) * 60);
        if (minutos < 10)
        {
            minutos = "0" + minutos;
        }
        slider.horarioFinal = horas + "h" + minutos;
        
        slider.idSlider = "divSliderDuracao";
        slider.idBotaoSlider = "divBotaoSliderDuracao";
        slider.idBotaoSlider2 = "divBotaoSliderDuracao2";
        
        linhaFiltroDuracao.slider = slider.getHtml();
        
        filtroDuracao.duracao += linhaFiltroDuracao.getHtml();
        
        $('divFiltroDuracao').innerHTML = filtroDuracao.getHtml();  

        var width = "0%";
        
/*        
        if (navigator.userAgent.toLowerCase().indexOf("firefox") != -1)
        {// Firefox
            width = "80%";
        }
        else
        { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
            width = "95%";
        }     

        $('divSliderContainerDuracao').style.width = width;
*/

        sliderDuracao = new Slider($('divSliderDuracao'), $('divBotaoSliderDuracao'), moveDirection.horizontal, $('divBotaoSliderDuracao2'));
        var diferenca = (duracao[idxMaiorDuracao] - duracao[idxMenorDuracao]) * 100;
        sliderDuracao.setRange(0, diferenca, 8); 
        sliderDuracao.setPosition2(diferenca);
        sliderDuracao.onMove = exibirVooDuracaoMenor;
        sliderDuracao.onMove2 = exibirVooDuracaoMaior;
        sliderDuracao.onMoveStop = filtrarVooDuracaoMenor;
        sliderDuracao.onMoveStop2 = filtrarVooDuracaoMaior;
    }
    else
    {
        var horas = parseInt(duracao[idxMenorDuracao], 10);
        if (horas < 10)
        {
            horas = "0" + horas;
        }
        var minutos = Math.floor((duracao[idxMenorDuracao] - horas) * 60);
        if (minutos < 10)
        {
            minutos = "0" + minutos;
        }
        
        $('lblDuracaoInicial').innerHTML = horas + "h" + minutos;
        
        horas = parseInt(duracao[idxMaiorDuracao], 10);
        if (horas < 10)
        {
            horas = "0" + horas;
        }
        minutos = Math.floor((duracao[idxMaiorDuracao] - horas) * 60);
        if (minutos < 10)
        {
            minutos = "0" + minutos;
        }
        
        $('lblDuracaoFinal').innerHTML = horas + "h" + minutos;
        
        var diferenca = (duracao[idxMaiorDuracao] - duracao[idxMenorDuracao]) * 100;
        sliderDuracao.setPosition(0);
        sliderDuracao.setPosition2(diferenca);
    }
}

function renderFiltroPrecos(apenasReiniciarFiltro)
{
    var filtroPrecos = templates.FiltroPrecos;
    filtroPrecos.precos = "";
    filtroPrecos.divPrecos = "divPrecos";
    filtroPrecos.imgMinimizaDivPrecos = "imgMinimizaDivPrecos";
    filtroPrecos.minimizaDivPrecos = "javascript:minimiza_expande_div('divPrecos','imgMinimizaDivPrecos');";
    
    var linhaFiltroPrecos = templates.LinhaFiltroPrecos;

    var slider = templates.Slider;
    
    moeda = "";
    precos[idxMenorPreco] = 1000000;
    precos[idxMaiorPreco] = 0;
    for (var i = 0; i < ds.tables.Cias.rows.count(); i++)
    {
        if (moeda == "" || (moeda == ds.tables.Cias.rows[i]["moeda"] && parseFloat(precos[idxMenorPreco]) > parseFloat(ds.tables.Cias.rows[i]["menorPreco"])))
        {
            moeda = ds.tables.Cias.rows[i]["moeda"];
            precos[idxMenorPreco] = ds.tables.Cias.rows[i]["menorPreco"];
        }
        if (moeda == "" || (moeda == ds.tables.Cias.rows[i]["moeda"] && parseFloat(precos[idxMaiorPreco]) < parseFloat(ds.tables.Cias.rows[i]["maiorPreco"])))
        {
            moeda = ds.tables.Cias.rows[i]["moeda"];
            precos[idxMaiorPreco] = ds.tables.Cias.rows[i]["maiorPreco"];
        }
    }
    
    precos[idxMenorPreco] = Math.floor(precos[idxMenorPreco]);
    precos[idxMaiorPreco] = Math.ceil(precos[idxMaiorPreco]);
    
    // caso os preços sejam iguais, para garantir o funcionamento do slider duplo, que deve ter valores inicial e final diferentes,
    // soma 1 ao valor final
    if (precos[idxMenorPreco] == precos[idxMaiorPreco])
    {
        precos[idxMaiorPreco] += 1;
    }
    
    // atualiza os preços selecionados
    precos[idxMenorPrecoSelecionado] = precos[idxMenorPreco];
    precos[idxMaiorPrecoSelecionado] = precos[idxMaiorPreco];
    
    // verifica se deve renderizar o slider ou apenas reiniciá-lo
    if (apenasReiniciarFiltro == false)
    {
        slider.idHorarioInicial = "lblPrecoInicial";
        var auxMoeda = "";
        switch (moeda)
        {
            case "BRL":
                auxMoeda = "R$";
                break;
            default:
                auxMoeda = moeda;
                break;
        }

        slider.horarioInicial = auxMoeda + " " + precos[idxMenorPreco].formatNumber(2, true);
        
        slider.idHorarioFinal = "lblPrecoFinal";
        slider.horarioFinal = auxMoeda + " " + precos[idxMaiorPreco].formatNumber(2, true);
        
        slider.idSlider = "divSliderPrecos";
        slider.idBotaoSlider = "divBotaoSliderPrecos";
        slider.idBotaoSlider2 = "divBotaoSliderPrecos2";
        
        linhaFiltroPrecos.slider = slider.getHtml();
        
        filtroPrecos.precos += linhaFiltroPrecos.getHtml();
        
        $('divFiltroPrecos').innerHTML = filtroPrecos.getHtml();  

/*
        var width = "0%";
        
        if (navigator.userAgent.toLowerCase().indexOf("firefox") != -1)
        {// Firefox
            width = "80%";
        }
        else
        { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
            width = "80%";
        }     

        $('divSliderContainerPrecos').style.width = width;
*/        

        sliderPrecos = new Slider($('divSliderPrecos'), $('divBotaoSliderPrecos'), moveDirection.horizontal, $('divBotaoSliderPrecos2'));
        var diferenca = precos[idxMaiorPreco] - precos[idxMenorPreco];
        sliderPrecos.setRange(0, diferenca, 1);
        sliderPrecos.setPosition2(diferenca);
        sliderPrecos.onMove = exibirVooPrecosMenor;
        sliderPrecos.onMove2 = exibirVooPrecosMaior;
        sliderPrecos.onMoveStop = filtrarVooPrecosMenor;
        sliderPrecos.onMoveStop2 = filtrarVooPrecosMaior;
    }
    else
    {
        var auxMoeda = "";
        switch (moeda)
        {
            case "BRL":
                auxMoeda = "R$";
                break;
            default:
                auxMoeda = moeda;
                break;
        }

        $('lblPrecoInicial').innerHTML = auxMoeda + " " + precos[idxMenorPreco];
        
        $('lblPrecoFinal').innerHTML = auxMoeda + " " + precos[idxMaiorPreco];
        
        var diferenca = precos[idxMaiorPreco] - precos[idxMenorPreco];
        sliderPrecos.setPosition(0);
        sliderPrecos.setPosition2(diferenca);
    }
}

// altera a exibição (minimiza ou expande) da div
function minimiza_expande_div(nomeDiv, nomeImg)
{
    if ($(nomeDiv).style.display == "none")
    {
        $(nomeDiv).style.display = "block";
        $(nomeImg).src = "images/BuscaPe/menos_6.gif";
    }
    else
    {
        $(nomeDiv).style.display = "none";
        $(nomeImg).src = "images/BuscaPe/mais_6.gif";
    }
}

// minimiza a div
function minimiza_div(nomeDiv, nomeImg)
{
    $(nomeDiv).style.display = "none";
    $(nomeImg).src = "images/BuscaPe/mais_6.gif";
}

// expande a div
function expande_div(nomeDiv, nomeImg)
{
    $(nomeDiv).style.display = "block";
    $(nomeImg).src = "images/BuscaPe/menos_6.gif";
}

// minimiza todos os filtros
function minimiza_filtros()
{
    minimiza_div('divParadas','imgMinimizaDivParadas');
    minimiza_div('divHorarios','imgMinimizaDivHorarios');
    minimiza_div('divCias','imgMinimizaDivCias');
    minimiza_div('divAeroportos','imgMinimizaDivAeroportos');
    minimiza_div('divDuracao','imgMinimizaDivDuracao');
    minimiza_div('divPrecos','imgMinimizaDivPrecos');
}

// expande todos os filtros
function expande_filtros()
{
    expande_div('divParadas','imgMinimizaDivParadas');
    expande_div('divHorarios','imgMinimizaDivHorarios');
    expande_div('divCias','imgMinimizaDivCias');
    expande_div('divAeroportos','imgMinimizaDivAeroportos');
    expande_div('divDuracao','imgMinimizaDivDuracao');
    expande_div('divPrecos','imgMinimizaDivPrecos');
}

// retorna o estado dos filtros
function busca_estado_filtros()
{
    var filtros_img_estados = new Array();
    var estado = new Array();
    
    filtros_img_estados[filtros_img_estados.length] = new Array();
    filtros_img_estados[filtros_img_estados.length - 1][0] = 'divParadas';
    filtros_img_estados[filtros_img_estados.length - 1][1] = 'imgMinimizaDivParadas';
    filtros_img_estados[filtros_img_estados.length - 1][2] = ($('divParadas').style.display == "none" ? 'min' : 'exp');
    
    filtros_img_estados[filtros_img_estados.length] = new Array();
    filtros_img_estados[filtros_img_estados.length - 1][0] = 'divHorarios';
    filtros_img_estados[filtros_img_estados.length - 1][1] = 'imgMinimizaDivHorarios';
    filtros_img_estados[filtros_img_estados.length - 1][2] = ($('divHorarios').style.display == "none" ? 'min' : 'exp');

    filtros_img_estados[filtros_img_estados.length] = new Array();
    filtros_img_estados[filtros_img_estados.length - 1][0] = 'divCias';
    filtros_img_estados[filtros_img_estados.length - 1][1] = 'imgMinimizaDivCias';
    filtros_img_estados[filtros_img_estados.length - 1][2] = ($('divCias').style.display == "none" ? 'min' : 'exp');

    filtros_img_estados[filtros_img_estados.length] = new Array();
    filtros_img_estados[filtros_img_estados.length - 1][0] = 'divAeroportos';
    filtros_img_estados[filtros_img_estados.length - 1][1] = 'imgMinimizaDivAeroportos';
    filtros_img_estados[filtros_img_estados.length - 1][2] = ($('divAeroportos').style.display == "none" ? 'min' : 'exp');

    filtros_img_estados[filtros_img_estados.length] = new Array();
    filtros_img_estados[filtros_img_estados.length - 1][0] = 'divDuracao';
    filtros_img_estados[filtros_img_estados.length - 1][1] = 'imgMinimizaDivDuracao';
    filtros_img_estados[filtros_img_estados.length - 1][2] = ($('divDuracao').style.display == "none" ? 'min' : 'exp');

    filtros_img_estados[filtros_img_estados.length] = new Array();
    filtros_img_estados[filtros_img_estados.length - 1][0] = 'divPrecos';
    filtros_img_estados[filtros_img_estados.length - 1][1] = 'imgMinimizaDivPrecos';
    filtros_img_estados[filtros_img_estados.length - 1][2] = ($('divPrecos').style.display == "none" ? 'min' : 'exp');

    return filtros_img_estados;
}

// restaura o estado dos filtros
function restaura_filtros(filtros_img_estados)
{
    for (var i = 0; i < filtros_img_estados.length; i++)
    {
        if (filtros_img_estados[i][2] == "min")
        {
            minimiza_div(filtros_img_estados[i][0],filtros_img_estados[i][1]);
        }
        else
        {
            expande_div(filtros_img_estados[i][0],filtros_img_estados[i][1]);
        }
    }
}