﻿//==================================================================
//
// Disponibilidade(Disponibilidade.js)
// Criado por: Danilo Araujo
// Info: Classe que contém os métodos e propriedades responsaveis para os Resultados dos Voos
//
//==================================================================
//Enum com valor correspondente
var Modo = {
    Ida:1,
    Volta:2
};

var iatasAeroportos = ''; 
var tarifasJaSelecionadas = '';
var RoundTripIda = '0';
var codigosDeOpcoesNew;
        


//====================================

Aereo.Disponibilidade = 
{
    pageIndex:1,
    pageSize:150,
    qtdePag:0,
    Modo:Modo.Ida,
    ultimoOrdenacao: [['preco','dataSaida'],['preco','dataSaida']],
    codOpcaoVooEmail:null,
    
    Selecionado:
    {
        Ida:false,
        Volta:false
    },
    //Retorna a disponibilidade
    getDisponibilidade: function()
    {
        //debugger;
        
         //Cache dos Voos selecionados
        _Disponibilidade.GetDisponibilidade($('dadosPesquisa_geral').value, Aereo.Disponibilidade.callbacks.getDisponibilidade);
        
    },
   //===========================================================================================//
    //Atualiza todos os Dados para Ida e Volta
    atualizaDados:function()
    {
        //Aereo.LayoutGeral.ParseTopo2();
        //Muda o Titulo
        //Aereo.LayoutGeral.ParseTituloVoo();
        Aereo.LayoutGeral.ParseFiltro(false);
        Aereo.LayoutGeral.ParseMelhoresPrecos(true);
    },
    //============================================================================================//
    //Mostra os detalhes de um Voo
    mostraDetalhes: function(codOpcaoVoo,pinado)
    {
        var complemento = (pinado ? 'Pinada' : '');
        var pin = (pinado ? ' pin' : '');
        if($('divDetalhes_'+complemento+codOpcaoVoo).style.display == 'none')
           $('divDetalhes_'+complemento+codOpcaoVoo).innerHTML = montaDetalhes(codOpcaoVoo, Aereo.Disponibilidade.Modo);
        
        $('divDetalhes_'+complemento+codOpcaoVoo).style.display = ($('divDetalhes_'+complemento+codOpcaoVoo).style.display == 'block' ? 'none' : 'block');
        $('opcoesVoos_tr_'+complemento+codOpcaoVoo).style.display = ($('opcoesVoos_tr_'+complemento+codOpcaoVoo).style.display == 'block' ? 'none' : 'block');
    },
    //============================================================================================//
    //Mostra o html da Disponibilidade
    mostraDisponibilidade: function(Ordenacao)
    {
        //debugger;
        //Tirar a imagem de carregando Inicio
        Aereo.stopCarregando();

        var resultado = montaVoosDisponibilidade(Aereo.Disponibilidade.Modo, Aereo.Disponibilidade.pageIndex, Aereo.Disponibilidade.pageSize);
        //Verifica se nao e retornado nenhum voo
        
        if(availDS)
        {
            if(availDS.tables[getDataTableTrecho(Aereo.Disponibilidade.Modo)].rows.count() > 0)
            {
            
                //Aplica as regras da tarifa a partir do voo de ida                 
                // O que deve ser feito no site é identificar a tarifa do vôo selecionado pelo
                //usuário na ida. Se essa tarifa sinalizar que não permite combinação com vôos
                //de outras cias (permiteCiasDiferentes = false) então deve-se filtrar a lista
                //de vôos da volta para mostrar apenas vôos da mesma cia aérea que a do vôo da ida.
                // Rosimeire 
                //debugger
                iatasAeroportos = ''; 
                tarifasJaSelecionadas = '';
                RoundTripIda = '0';
                 /// ROSIMEIRE*
                    listaCiasSelecionadas.length = 0 ;
                    
                if (Aereo.Disponibilidade.Modo == 2) //volta
                {
                    //debugger;
                    var tbOpcaoVoo = getDataTableTrecho(1); // verifica o voo escolhido na ida 
                    var itOpcaoVoo = availDS.tables[tbOpcaoVoo].getIterator('escolha');
                    
                    limparFiltrosVoos();
                                        
                    codigosDeOpcoesNew = '';
        
                    
                    itOpcaoVoo.findByKey(true);
                    for(itOpcaoVoo.moveFirst(); itOpcaoVoo.hasNext(); itOpcaoVoo.moveNext())
                    {
                        //debugger;
                        somenteVooRegraTarifa(itOpcaoVoo.row.codOpcaoDeVoo);
                        break;
                    }
                    itOpcaoVoo.dispose();
                    
                    // Pega a lista de regras tarifárias por cia para identificar quais bases exigem ida e volta pelo mesmo aeroporto
                    /// VOLTAR AQUI NESSE CÓDIGO ///
                    
                    
                    
                    // Se não houve filtro por aeroportos então verifica as tarifas de volta para ver se algum 
                    // voo exige ida e volta pelo mesmo aeroporto
                    if (iatasAeroportos.length == 0)
                    {
                        // filtra os voos de volta que não obedecem a regra da tarifa
                        var tbOpcaoVooVolta = getDataTableTrecho(2); // verifica os voos de volta
                        var itOpcaoVooVolta = availDS.tables[tbOpcaoVooVolta].getIterator('codOpcaoDeVoo');
                                            
                        for (j = 0; j < itOpcaoVooVolta.dt.rows.count(); j++)
                        {
                            //debugger;
                            eliminaBasesTarifarias(itOpcaoVooVolta.dt.rows[j].codOpcaoDeVoo, itOpcaoVoo.row.iataOrigem, itOpcaoVoo.row.ciaPrincipal)
                        }
                        itOpcaoVooVolta.dispose();
                    }
                }
              
                if(!Ordenacao){
                    Aereo.Disponibilidade.atualizaDados();
                }
                
                /*
                    Alterado por Rosimeire para somente montar o resultado após a aplicação dos filtros
                */
                //debugger;
                var resultado = montaVoosDisponibilidade(Aereo.Disponibilidade.Modo, Aereo.Disponibilidade.pageIndex, Aereo.Disponibilidade.pageSize);    
                //debugger;
                Aereo.Disponibilidade.mostraResultado(resultado)            
            }
        }
    },
    //==================================================================================================//
    mostraDetalhesSelecionado: function(codOpcaoVoo)
    {
        $('divDetalhesVoosSelecionados_'+codOpcaoVoo).style.display = ($('divDetalhesVoosSelecionados_'+codOpcaoVoo).style.display == 'block' ? 'none' : 'block');
        $('divVoosSelecionados_'+codOpcaoVoo).style.display = ($('divVoosSelecionados_'+codOpcaoVoo).style.display == 'block' ? 'none' : 'block');
    },
    //==================================================================================================//
    //Seleciona uma opcao de um Voo
    selecionaOpcaoVoo: function(codOpcaoDeVoo)
    {
        //debugger;
        
        if (Aereo.Disponibilidade.Modo == 2) //volta
        {
            var tbOpcaoVoo = getDataTableTrecho(1); // verifica o voo escolhido na ida 
            var itOpcaoVoo = availDS.tables[tbOpcaoVoo].getIterator('escolha');
            var dataVooIda; 
            var dataVooVolta; 

            // pega o voo selecionado na ida
            itOpcaoVoo.findByKey(true);
            for(itOpcaoVoo.moveFirst(); itOpcaoVoo.hasNext(); itOpcaoVoo.moveNext())
            {
                dataVooIda = itOpcaoVoo.row.dataChegada;
                
                break;
            }
            
////////             if ( itTarifas.row.idaVoltaMesmoAeroporto == true || itTarifas.row.ow_rt == 1)
            itOpcaoVoo.dispose();
                
            // pega o voo selecionado na volta    
            tbOpcaoVoo = getDataTableTrecho(2); // verifica o voo escolhido na volta 
            itOpcaoVoo = availDS.tables[tbOpcaoVoo].getIterator('codOpcaoDeVoo');
            itOpcaoVoo.findByKey(codOpcaoDeVoo);
            for(itOpcaoVoo.moveFirst(); itOpcaoVoo.hasNext(); itOpcaoVoo.moveNext())
            {
                dataVooVolta = itOpcaoVoo.row.dataSaida;
                break 
            }
            itOpcaoVoo.dispose();
            
            // a data de chegada (ida) não pode ser superior a data de ida (volta)
            if (dataVooIda.addHours(3) >= dataVooVolta) 
            {
                alert('Atenção: A escolha de seu vôo de ida foi feita para horário que impossibilita o regresso na mesma data. Favor rever horários.');
                return;
            }
          
        }
        
   
        $(tpl.geral.idVoosSelecionados).innerHTML = marcaSelecaoOpcaoVoo(Aereo.Disponibilidade.Modo,codOpcaoDeVoo);
        //Troca a opcao de voo
        if(Aereo.Disponibilidade.Modo == 1)
        {
            //Rosimeire
            $('btnVolta').disabled = false;
            Aereo.Disponibilidade.Selecionado.Ida = true;
        }
        else
        {
            Aereo.Disponibilidade.Selecionado.Volta = true;
        }
        
//        if(VoosSomenteIda() == false){
//            if (Aereo.Disponibilidade.Selecionado.Ida == false || Aereo.Disponibilidade.Selecionado.Volta == false){
//                Aereo.Disponibilidade.trocaNumeroTrecho((Aereo.Disponibilidade.Modo == 1 ? 2 : 1));
//            }
//            else
//            {
//                Aereo.Disponibilidade.exibeSelecionados();
//            }
//            //$('precoTotal').innerHTML = montaTotalSelecaoVoos();
//        }
        Aereo.Disponibilidade.exibeSelecionados();
        
        
    },
    //==================================================================================================//
    //retira selecao uma opcao de um Voo
    retiraSelecaoOpcaoVoo: function(codTrecho)
    {
        //debugger;
        
        ///////////////////   
        $(tpl.geral.idVoosSelecionados).innerHTML = desmarcaSelecaoOpcaoVoo(codTrecho);
        
        //Troca a opcao de voo
        if(Aereo.Disponibilidade.Modo == 1)
        {
            // Limpa o array de todas as cias selecionadas
            listaCiasSelecionadas.length = 0;
            
            Aereo.Disponibilidade.Selecionado.Ida = false;

            // Se excluiu o voo selecionado na ida  *********** Rosimeire
            //apaga o voo selecionado na volta, limpa todos os filtros, esconde o div com o "clique aqui para selecionar a volta", desabilita a aba de volta
            $('btnVolta').disabled = true;
            // desmarca o trecho de volta (2) 
            $(tpl.geral.idVoosSelecionados).innerHTML = desmarcaSelecaoOpcaoVoo(2);
            
            // esconde o div que exibe a mensagem "clique aqui para selecionar o vôo de volta"
            if($('table_2'))
                $('table_2').style.display = 'none';
                
            // Exibe todos os vôos sem filtro    
            Aereo.FiltroVoo.exibirTodosVoos();

            // Seleciona a aba de ida
            $('btnIda').className = 'selected';
            $('btnVolta').className = '';

           // mexer aqui depois: Leandro Lopes
            //if(VoosSomenteIda())
            //{
            //   $('divVoosSelecionados_[codOpcaoVoo]').style.display = "none";
            //}
        }
        else
        {
            // Se excluiu o voo selecionado na ida  *********** Rosimeire
            //apaga o voo selecionado na volta, limpa todos os filtros, esconde o div com o "clique aqui para selecionar a volta", desabilita a aba de volta
            if (codTrecho == 1)
            {
                // Limpa o array de todas as cias selecionadas
                listaCiasSelecionadas.length = 0;
                
                $('btnVolta').disabled = true;
                // desmarca o trecho de volta (2) 
                $(tpl.geral.idVoosSelecionados).innerHTML = desmarcaSelecaoOpcaoVoo(2);
                
                // esconde o div que exibe a mensagem "clique aqui para selecionar o vôo de volta"
                if ($('table_2'))
                    $('table_2').style.display = 'none';
                    
                // Exibe todos os vôos sem filtro    
                Aereo.FiltroVoo.exibirTodosVoos();
                
                // Seleciona a aba de ida
                $('btnIda').className = 'selected';
                $('btnVolta').className = '';
            }   
            else
            {
                $('btnVolta').disabled = false;
                
                // Seleciona a aba de volta
                $('btnIda').className = $('btnIda').className = '';
                $('btnVolta').className = $('btnVolta').className = 'selected';
            }
            
            Aereo.Disponibilidade.Selecionado.Volta = false;
        }
            
    },
    //==================================================================================================//
    exibeSelecionados: function()
    {
            $(tpl.geral.idResultadoVoo).style.display = 'none';
            $(tpl.geral.idFiltro).style.display = 'none';
            $(tpl.geral.idMelhorPreco).style.display = 'none';
            $(tpl.geral.idVoosSelecionados).style.display = 'block';
            $('btnIda').className = $('btnIda').className = '';
            $('btnVolta').className = $('btnVolta').className = '';            
    },
    //=================================================================================================//    
    pinarOpcaoVoo:function(codOpcaoDeVoo, incluir_remover)
    {
        ExibeAguardeComThread(function()
            {
                if(incluir_remover==0)
                    setaOpcaoPinada(Aereo.Disponibilidade.Modo,codOpcaoDeVoo);
                else
                    retiraOpcaoPinada(Aereo.Disponibilidade.Modo,codOpcaoDeVoo);
                 
                Aereo.Disponibilidade.mostraDisponibilidade(true);
                
                return true;
            });
    },
    //============================================================================================//
    //Monta a paginacao
    montaPaginacao: function(resultsCount)
    {
       var qtdePag = 0;
       qtdePag = resultsCount/Aereo.Disponibilidade.pageSize;
       qtdePag = Math.ceil(qtdePag);
       Aereo.Disponibilidade.qtdePag = qtdePag;
       return montaPaginacao(qtdePag);
    },
    //Muda pagina dos Resultados de voos
    mudarPagina: function (pagina)
    {
        Aereo.Disponibilidade.pageIndex = pagina;
        Aereo.Disponibilidade.mostraDisponibilidade(false,true);
    },
    //Descarta uma opcao de voo
    descartarVoo: function(codOpcaoVoo)
    {
        marcaVoo(Aereo.Disponibilidade.Modo,codOpcaoVoo);
        Aereo.Disponibilidade.mostraDisponibilidade();
    },
    //============================================================================================//
    //Ordena um resultado de um voo
    ordenaVoo: function(coluna,coluna2)
    {
        Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][0] = coluna;
        Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][1] = coluna2;
        ExibeAguardeComThread(function()
            {
                ordenaResultadoAirAvail(coluna,coluna2,Aereo.Disponibilidade.Modo);
                Aereo.Disponibilidade.mostraDisponibilidade(true); 
                return true;
            }
        );
    },
    //============================================================================================//
    mostraResultado:function(res)
    {
        res[3] = Aereo.Disponibilidade.montaPaginacao(res[2]);
        $(tpl.geral.idResultadoVoo).innerHTML = res[0] + res[3];
        //$('_idTotalParcial').innerHTML = res[2];
        //$('_idTotal').innerHTML = res[1];
    },
    //=============================================================================================//
    //Troca de Ida pra Volta e vice-versa
    trocaNumeroTrecho:function(num)
    {
                
         ExibeAguardeComThread(function()
           {
                //Troca a Aba
                //debugger;
                           
                if($(tpl.geral.idResultadoVoo).style.display == 'none')
                {
                    $(tpl.geral.idResultadoVoo).style.display = 'block';
                    $(tpl.geral.idFiltro).style.display = 'block';
                    $(tpl.geral.idMelhorPreco).style.display = 'block';
                    $(tpl.geral.idVoosSelecionados).style.display = 'none';
                }
                
                if(Aereo.Disponibilidade.Modo != num)
                {
                    if(num == Modo.Ida)
                    {
                        // Se excluiu o voo selecionado na ida  *********** Rosimeire
                        //apaga o voo selecionado na volta, limpa todos os filtros, esconde o div com o "clique aqui para selecionar a volta", desabilita a aba de volta
                        $('btnVolta').disabled = true;
                        // desmarca o trecho de volta (2) 
                        $(tpl.geral.idVoosSelecionados).innerHTML = desmarcaSelecaoOpcaoVoo(2);
                        
                        // esconde o div que exibe a mensagem "clique aqui para selecionar o vôo de volta"
                        if ($('table_2'))
                            $('table_2').style.display = 'none';
                            
                        // Exibe todos os vôos sem filtro    
                        //Aereo.FiltroVoo.exibirTodosVoos();
                        limparFiltrosVoos();
                        // Limpa a matriz de cias selecionadas    
                        listaCiasSelecionadas.length = 0; 
                        
                        $('btnIda').className = 'selected';
                        $('btnVolta').className = '';
                    }
                    else
                    {
                        // Rosimeire
                        // habilita a aba de volta
                        $('btnVolta').enabled = true;
                        
                        $('btnIda').className = $('btnIda').className = '';
                        $('btnVolta').className = $('btnVolta').className = 'selected';
                    }
                    
                                        
                    Aereo.Disponibilidade.Modo = num;
                    limpaOrdenacaoAvailDs();
                    ordenaResultadoAirAvail(Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][0],Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][1],Aereo.Disponibilidade.Modo,true);
                    Aereo.Disponibilidade.mostraDisponibilidade();
                }
                else
                {
                    if(num == Modo.Ida)
                    {
                        // Se excluiu o voo selecionado na ida  *********** Rosimeire
                        //apaga o voo selecionado na volta, limpa todos os filtros, esconde o div com o "clique aqui para selecionar a volta", desabilita a aba de volta
                        $('btnVolta').disabled = true;
                        // desmarca o trecho de volta (2) 
                        $(tpl.geral.idVoosSelecionados).innerHTML = desmarcaSelecaoOpcaoVoo(2);
                        
                        // esconde o div que exibe a mensagem "clique aqui para selecionar o vôo de volta"
                        if ($('table_2'))
                            $('table_2').style.display = 'none';
                            
                        // Exibe todos os vôos sem filtro    
                        //Aereo.FiltroVoo.exibirTodosVoos();
                        limparFiltrosVoos();
                        // Limpa a matriz de cias selecionadas    
                        listaCiasSelecionadas.length = 0; 
                        
                        // Seleciona a aba de ida
                        $('btnIda').className = 'selected';
                        $('btnVolta').className = '';
                    }
                }
                return true;
             }
         );   
         
         
    },
    //Metodos de callbacks
    callbacks: {    
        getDisponibilidade: function(res)
        {
            //debugger;
            if(res.error == null)
            {
                availDS = res.value;
               
                ordenaResultadoAirAvail(Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][0],Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][1],Aereo.Disponibilidade.Modo);
                Aereo.Disponibilidade.mostraDisponibilidade(false);
                //Aereo.LayoutGeral.ParseVoosSelecionados();
            }
            else
            {
                // Inicio tratamento de erros
                alert('Não foram encontrados voos com os critérios informados. Por favor refaça a busca.' + '\n\n' + res.error.message);
                window.location = 'javascript:history.go(-1)';
                //res.error.message);
                // Fim tratamento de erros
            }
            
            // insere o trace da busca
            $("divTrace").innerHTML += "<a href='" + _Disponibilidade.GetURLTraceVTP().value + "'>Trace</a>";
            // mostra banner
            if(res.value.tables.OpcoesDeVooVolta.rows.count() > 0)
            {
                $('sinalizaBannerVolta').style.display = 'block';
            }
        }
    }
};

function getRdVXLSoIda()
{
}

