﻿//==================================================================
//
// 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;
var idRequest;
var result = false;

//====================================
Aereo.Disponibilidade = 
{
    pageIndex:1,
    pageSize: 150,
    qtdePag:0,
    Modo:Modo.Ida,
    ultimoOrdenacao: [['preco','dataSaida'],['preco','dataSaida'],['preco','dataSaida']],
    codOpcaoVooEmail:null,
    
    Selecionado:
    {
        Ida:false,
        Volta:false
    },
    //Retorna a disponibilidade
    getDisponibilidade: function()
    {  
    
        var variaveis = location.search.split("?");
        var quebra = variaveis[1].split("=");
        var idRequest = quebra[0];               
        
        if(idRequest == "idRequest")
        {      
            var idRequestNumber = quebra[1].split("&")[0];                   
            SiteGeral.GetDataSetByRequestId(idRequestNumber, Aereo.Disponibilidade.callbacks.getDisponibilidade);                
        } 
        else
        { 
            _Disponibilidade.GetDisponibilidade($('dadosPesquisa_geral').value, Aereo.Disponibilidade.callbacks.getDisponibilidade);                                    
        }             
        
    },
   //===========================================================================================//
    //Atualiza todos os Dados para Ida e Volta
    atualizaDados:function()
    {
        Aereo.LayoutGeral.ParseOrder();
        Aereo.LayoutGeral.ParseTitulo();
        Aereo.LayoutGeral.ParseMotorBusca();
        //Aereo.LayoutGeral.ParseMelhoresPrecos(true);
//        Aereo.LayoutGeral.ParseFiltro(false);
        Aereo.LayoutGeral.ParseBottom();
    },
    //============================================================================================//
    //Mostra os detalhes de um Voo
    mostraDetalhes: function(codOpcaoVoo)
    {
        if($('divDetalhes_'+codOpcaoVoo).style.display == 'none')
           $('divDetalhes_'+codOpcaoVoo).innerHTML = montaDetalhes(codOpcaoVoo, Aereo.Disponibilidade.Modo);
        
        $('divDetalhes_'+codOpcaoVoo).style.display = ($('divDetalhes_'+codOpcaoVoo).style.display == 'block' ? 'none' : 'block');
        //$('opcoesVoos_tr_'+codOpcaoVoo).style.display = ($('opcoesVoos_tr_'+codOpcaoVoo).style.display == 'block' ? 'none' : 'block');
    },
    //============================================================================================//
    //Mostra o html da Disponibilidade
    mostraDisponibilidade: function(Ordenacao)
    {
        //debugger;
        //Tirar a imagem de carregando Inicio
        Aereo.stopCarregando();

        //Verifica se nao e retornado nenhum voo
        //debugger;
        
        
        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 ;
                    
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                //                                                                                                                                                                //
                // REGRAS PARA VALIDACAO DE FILTROS POR CIA / REGRA TARIFARIA / AEROPORTO          //
                //                                                                                                                                                                //
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
              
              
                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                // VOLTA //
                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                if (Aereo.Disponibilidade.Modo == 2) 
                {
                    //debugger;
                    var tbOpcaoVoo = getDataTableTrecho(1); // verifica o voo escolhido na ida 
                    var itOpcaoVoo = availDS.tables[tbOpcaoVoo].getIterator('escolha');
                    
                    limparFiltrosVoos();
                                        
                    codigosDeOpcoesNew = '';
                    
                    itOpcaoVoo.findByKey(true);
                    
                    if (itOpcaoVoo.row != null) // Se foi selecionado algum voo na ida 
                    {
                        for(itOpcaoVoo.moveFirst(); itOpcaoVoo.hasNext(); itOpcaoVoo.moveNext())
                        {
                            //debugger;
                            somenteVooRegraTarifa(itOpcaoVoo.row.codOpcaoDeVoo);
                            break;
                        }
                        
                        // Pega a lista de regras tarifárias por cia para identificar quais bases exigem ida e volta pelo mesmo aeroporto
                        
                        // 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');
//                        
//                            if (itOpcaoVoo.row != null)
//                            {                        
//                                for (j = 0; j < itOpcaoVooVolta.dt.rows.count(); j++)
//                                {
//                                    eliminaBasesTarifarias(itOpcaoVooVolta.dt.rows[j].codOpcaoDeVoo, itOpcaoVoo.row.iataOrigem, itOpcaoVoo.row.ciaPrincipal)
//                                }
//                            }                            
//                            itOpcaoVooVolta.dispose();
//                        }
                    }    
                    
                    itOpcaoVoo.dispose();
                }
                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                // IDA //
                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                else
                {
                    var tbOpcaoVoo = getDataTableTrecho(2); // verifica o voo escolhido na volta
                    var itOpcaoVoo = availDS.tables[tbOpcaoVoo].getIterator('escolha');
                    
                    limparFiltrosVoos();
                                        
                    codigosDeOpcoesNew = '';
                    
                    itOpcaoVoo.findByKey(true);
                    if (itOpcaoVoo.row != null)
                    {
                        for(itOpcaoVoo.moveFirst(); itOpcaoVoo.hasNext(); itOpcaoVoo.moveNext())
                        {
                            // somente se foi selecionado um voo na volta é que vai validar os voos de ida
                            somenteVooRegraTarifa(itOpcaoVoo.row.codOpcaoDeVoo);
                            break;
                        }
                        
                        // Pega a lista de regras tarifárias por cia para identificar quais bases exigem ida e volta pelo mesmo aeroporto
                        
                        // Se não houve filtro por aeroportos então verifica as tarifas de ida 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 tbOpcaoVooIda = getDataTableTrecho(1); // verifica os voos de ida
//                            var itOpcaoVooIda = availDS.tables[tbOpcaoVooIda].getIterator('codOpcaoDeVoo');
//                        
//                            if (itOpcaoVoo.row != null)
//                            {                        
//                                for (j = 0; j < itOpcaoVooIda.dt.rows.count(); j++)
//                                {
//                                    eliminaBasesTarifarias(itOpcaoVooIda.dt.rows[j].codOpcaoDeVoo, itOpcaoVoo.row.iataOrigem, itOpcaoVoo.row.ciaPrincipal)
//                                }
//                            }                            
//                            itOpcaoVooIda.dispose();
//                        }
                    }
                    itOpcaoVoo.dispose();
                }
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                //                                                                                                                                                                //
                // FIM REGRAS PARA VALIDACAO DE FILTROS POR CIA / REGRA TARIFARIA / AEROPORTO    //
                //                                                                                                                                                                //
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
              
                Aereo.LayoutGeral.ParseMelhoresPrecos(true);
                Aereo.LayoutGeral.ParseFiltro(false);              
              
                if(!Ordenacao)
                {
                    Aereo.Disponibilidade.atualizaDados();
                }
                
                /*
                    Alterado por Rosimeire para montar o resultado somente 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');
        $('divDetalhesSelecionado_'+codOpcaoVoo).style.display = ($('divDetalhesSelecionado_'+codOpcaoVoo).style.display == 'block' ? 'none' : 'block');
        
        if($('divDetalhesSelecionado_'+codOpcaoVoo).style.display == 'none')
        {
            $('verFecharDetalhesSelecionado_'+codOpcaoVoo).innerHTML = "Ver Detalhes do Vôo";
        }
        else
        {
            $('verFecharDetalhesSelecionado_'+codOpcaoVoo).innerHTML = "Fechar Detalhes do Vôo";
        }
    },
    //==================================================================================================//
    //Seleciona uma opcao de um Voo
    selecionaOpcaoVoo: function(codOpcaoDeVoo)
    {
        //debugger;
        $(tpl.Disponibilidade.geral.idMelhorPreco).style.display = 'none' ; 
        $(tpl.Disponibilidade.geral.idFiltro).style.display = 'none' ; 
        
        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;
            }
            
            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.Disponibilidade.geral.idVoosSelecionados).innerHTML = marcaSelecaoOpcaoVoo(Aereo.Disponibilidade.Modo,codOpcaoDeVoo);
        
        if (!VoosSomenteIda()) 
        {
            if(document.getElementById("chosen_flight_back_way") != null && document.getElementById("chosen_flight_back_way").style.display == "")
            {
                if(document.getElementById("chosen_flight_back_way_button") != null)
                {
                    document.getElementById("chosen_flight_back_way_button").style.display="none";
                }  
            }
            
            chooseLabel();    
            
            
            $(tpl.Disponibilidade.geral.idVoosSelecionados).style.display = '';
        }
                
        //Troca a opcao de voo
        if(Aereo.Disponibilidade.Modo == 1)
        {
            //$('btnVolta').disabled = false;
            Aereo.Disponibilidade.Selecionado.Ida = true;
        }
        else
        {
            Aereo.Disponibilidade.Selecionado.Volta = true;
        }
        
        //Aereo.Disponibilidade.exibeSelecionados();
        
        if (VoosSomenteIda()) 
        {
            confirmarVoosEscolhidos(false);
        }
    },
    //==================================================================================================//
    //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.Disponibilidade.geral.idResultadoVoo).style.display = 'none';
            $(tpl.Disponibilidade.geral.idFiltro).style.display = 'none';
            $(tpl.Disponibilidade.geral.idMelhorPreco).style.display = 'none';
            $(tpl.Disponibilidade.geral.idVoosSelecionados).style.display = '';
    },
    //============================================================================================//
    //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);
        Aereo.Disponibilidade.mostraDisponibilidade(false);
    },
    //Descarta uma opcao de voo
    descartarVoo: function(codOpcaoVoo)
    {
        marcaVoo(Aereo.Disponibilidade.Modo,codOpcaoVoo);
        Aereo.Disponibilidade.mostraDisponibilidade(false);
    },
    //============================================================================================//
    //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, false);
                Aereo.Disponibilidade.mostraDisponibilidade(true); 
                return true;
            }
        );
    },
    //============================================================================================//
    mostraResultado:function(res)
    {
        // comentei temporariamente
        //res[3] = Aereo.Disponibilidade.montaPaginacao(res[2]);

        $('divItens').innerHTML = res[0];
        $('divAbas').innerHTML = res[1];
        
        // Se estou renderizando a ida entao escondo a aba de volta
        if(Aereo.Disponibilidade.Modo == Modo.Ida)
        {
            //tabHideFlightBackWayResults('flight_back_way_results');
            tabShowFlightFirstWayResults('flight_first_way_results');
            activeTabFirstWay('tab_first_way');
            unactiveTabBackWay('tab_back_way'); 
        }
        else
        {
            //tabHideFlightFirstWayResults('flight_first_way_results');
            //tabShowFlightBackWayResults('flight_back_way_results');
            activeTabBackWay('tab_back_way');
            unactiveTabFirstWay('tab_first_way');
        }
    },
        
    //=============================================================================================//
    //Troca de Ida pra Volta e vice-versa
    trocaNumeroTrecho:function(num)
    {
        //debugger;    
        ExibeAguardeComThread(function()
        {
            //Troca a Aba
            if($(tpl.Disponibilidade.geral.idResultadoVoo).style.display == 'none')
            {
                $(tpl.Disponibilidade.geral.idResultadoVoo).style.display = 'block';
                $(tpl.Disponibilidade.geral.idFiltro).style.display = 'block';
                $(tpl.Disponibilidade.geral.idMelhorPreco).style.display = 'block';
                $(tpl.Disponibilidade.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

                    // desmarca o trecho de volta (2) 
                    //$(tpl.geral.Disponibilidade.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    
                    limparFiltrosVoos();

                    // Limpa a matriz de cias selecionadas    
                    listaCiasSelecionadas.length = 0; 

                    // Seleciona a aba de ida
                    activeTabFirstWay('tab_first_way');
                    unactiveTabBackWay('tab_back_way');
                    //$('flight_total').style.display = ($('flight_total').style.display == 'block' ? 'none' : 'block');
                }
                else
                {
                    // Rosimeire
                    // habilita a aba de volta
                    activeTabBackWay('tab_back_way');
                    unactiveTabFirstWay('tab_first_way');                        
                    //$('flight_total').style.display = ($('flight_total').style.display == 'block' ? 'none' : 'block');
                }

                //debugger; 
                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(true);
            }
            else
            {
                //debugger; 

                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 

                    // desmarca o trecho de volta (2) (comentado temporariamente)
                    //$(tpl.Disponibilidade.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 (comentado temporariamente)   
                    //limparFiltrosVoos();
                    */ 
                    
                    // Limpa a matriz de cias selecionadas    
                    listaCiasSelecionadas.length = 0; 
                        
                    // Seleciona a aba de ida
                    activeTabFirstWay('tab_first_way');
                    unactiveTabBackWay('tab_back_way');
                }
            }
            return true;
        } );   
    },  
    //=============================================================================================//       
    //Metodos de callbacks
    callbacks: {    
        getDisponibilidade: function(res)
        {
            //debugger;
            if(res.error == null || res.error == undefined)
            {
                availDS = res.value;
                var ds;
           
                ordenaResultadoAirAvail(Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][0],Aereo.Disponibilidade.ultimoOrdenacao[Aereo.Disponibilidade.Modo-1][1],Aereo.Disponibilidade.Modo, true);
                Aereo.Disponibilidade.mostraDisponibilidade(false);  
                // insere o trace da busca
                $("divTrace").innerHTML += res.value.tables.Tempos.rows[0].sessionToken;                             
            }
            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)';
                // Fim tratamento de erros
            }
            
            
            
            // mostra banner (esse banner é dispensável por enquanto)
//            if (res.value != null)
//            {
//                if(res.value.tables.OpcoesDeVooVolta.rows.count() > 0)
//                {
//                    $('sinalizaBannerVolta').style.display = 'block';
//                }
//            }    
        }      
        
    }    
};


