﻿// JScript File
var urlRedir = "";

function CheckOut(iSourceRank,i,codOpcaoMP,pos)
{
    /*
        É necessário que o redirect seja feito por uma chamada direta deste método. Caso contrário, o pop-up poderá ser bloqueado.
     */
//    var aguardandoCheckOut = true;
//    
//    // Exibir aguarde com thread 
//    ExibeAguardeComThread("Redirecionando para o site...", function() {while (aguardandoCheckOut) {}; return true;}, true);
//    
//    aguardandoCheckOut = false;
    
    var pr = QueryString("pr");
    if (pr == null || pr == "")
    {
        // Buscar pr que se encontra na session 
        var res = Resultado.GetCodParceiro();
        if (!res.error)
        {
            pr = res.value;
        }
    }

     var iad = QueryString("iad");
    
    var site_origem = QueryString("site_origem");
    if (site_origem == null || site_origem == "")
    {
        site_origem = definirSiteOrigem(document.referrer);
    }
    



    // finaliza o checkout
    CheckOut_cont_background(iSourceRank, i, codOpcaoMP, pr, site_origem,iad,pos);
}

function CheckOut_cont_background(iSourceRank, i, codOpcaoMP, pr, site_origem,iad,pos)
{
    try
    {

        if (codOpcaoMP == null)
            var codOpcaoMP = ds.tables.MaisOpcoes.rows[0]["codOpcaoMP"];

        var iterator = ds.tables.OpcoesMP.getIterator('codOpcaoMP');
        iterator.findByKey(codOpcaoMP);

        var posVoo = iterator.row.indicePrimeiroVoo - 1;
        var opcaoMP_Voo = ((posVoo > -1 && posVoo < ds.tables.OpcoesMP_Voos.rows.count()) ? ds.tables.OpcoesMP_Voos.rows[posVoo] : null);
        var voo = null;
        if (opcaoMP_Voo != null) 
        {
            // se já sinalizou a linha do vôo, então, busca essa linha na tabela de vôos
            if (opcaoMP_Voo.indiceVoo != null && opcaoMP_Voo.indiceVoo != "" && opcaoMP_Voo.indicePrimeiroVoo > 0) 
            {
                voo = ds.tables.Voos.rows[opcaoMP_Voo.indiceVoo - 1];
            }
            else // caso contrário, encontra a linha do vôo
            {
                iteratorVoosOpcoesMP.findByKey(opcaoMP_Voo.codVoo);
                if (iteratorVoosOpcoesMP.count() > 0) 
                {
                    voo = iteratorVoosOpcoesMP.row;
                }
            }
        }
        
        
        var codBusca = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["codBusca"] : 0);
        var triptype = QueryString("idaVolta");
        var airline = voo.companhia;
        var departureDate = QueryString("dataida");
        var arrivalDate = QueryString("datavolta");
        var adultPassenger = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["numADT"] : 0);
        var infantPassenger = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["numINF"] : 0);
        var childPassenger = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["numCHD"] : 0);
        var departureAirport = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["iataOrigem"] : 0);
        var arrivalAirport = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["iataDestino"] : 0);

        var parametros = "&triptype=" + triptype + "&airline=" + airline + "&departureDate=" + departureDate + "&arrivalDate=" + arrivalDate;
        parametros += "&adultPassenger=" + adultPassenger + "&infantPassenger=" + infantPassenger + "&childPassenger=" + childPassenger + "&departureAirport=" + departureAirport + "&arrivalAirport=" + arrivalAirport ;
      
        var XMLOpcaoMPSelecionada = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["XMLOpcaoMPSelecionada"] : false);
        
        var codOpcaoSelecionada = GravaDadosOpcaoMP(codOpcaoMP);
        if (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0)
        {
            ds.tables.Busca.rows[0]["XMLOpcaoMPSelecionada"] = true;
        }
        
        // link de checkout
        /*
            -- MODELO --
            http://compare.buscapeviagens.com.br/redirect_prod?id=9640&prod_id=0&emp_id=<id_emp>&xlk=<link>
            9640 significa a categoria de Viagens no BuscaPé;
            0 significa que será feito checkout da empresa e não de uma oferta de nosso banco de dados;
            <id_emp> é o ID da empresa no BuscaPé, passado no XML de integração;
            <link> é a URL para a qual o usuário será redirecionado após o checkout;
            Esta URL DEVE ser iniciada pelo protocolo (http ou https usualmente) e 
            deve ser enviada na forma codificada para parâmetros da URL;
            Também DEVE ter como domínio o domínio da URL da home da empresa passado no XML de integração;
        */
        
        var link = "";
        var cpc = "";
        var EncodedCPC = "";
        var cn = "";
        
        
        if (iSourceRank > -1 && i > -1)
        {
            var id_emp = sourcesRanking[iSourceRank][i][1];
            link = sourcesRanking[iSourceRank][i][2];
            cn = $server.GetCN();
            EncodedCPC = $server.EncodeCPC(sourcesRanking[iSourceRank][i][8], cn.value);
            cpc = sourcesRanking[iSourceRank][i][8].replace(',','.');
            parametros
            
            if (link.indexOf("http://") == -1)
            {
                link = "http://" + link;
            }
            
            if(link.split('http://')[1].indexOf('/') < 0)
            {
                link += "/";
            }
            
            // insere o código da busca na url da empresa para que a mesma possa buscar no WS do BuscaTrip o XML com a opção selecionada
            if (link.indexOf("?") == -1)
            {
                link = link + "?btid=" + codBusca + parametros;
            }
            else
            {
                link = link + "&btid=" + codBusca + parametros;
            }
            
            if (id_emp == null || id_emp == -1)
            {
                urlRedir = link;
            }
            else
            {
            if (id_emp == null || id_emp == -1)
            {
                urlRedir = link;
            }
            else
            {
                link = escape(link);
                
                urlRedir = "http://compare.buscapeviagens.com.br/redirect_prod?";
                urlRedir += "id=9640&prod_id=0";
                urlRedir += "&emp_id=" + id_emp;
                urlRedir += "&qwk=" + EncodedCPC.value;
                
                 // Incluir o parametro pos apenas se o mesmo existir
                if (pos != null && pos != "")
                {
                    urlRedir += "&pos=" + pos; 
                }
                
                // Incluir o parametro pr apenas se o mesmo existir
                if (pr != null && pr != "")
                {
                    urlRedir += "&pr=" + pr; 
                }

                // Incluir o parametro site-origem apenad se o mesmo existir
                if(site_origem != null && site_origem != "")
                {
                    urlRedir += "&site_origem=" + site_origem; 
                }
                if(iad != null && iad != "")
                {
                    urlRedir += "&iad=" + iad; 
                }
                else
                {
                     urlRedir += "&iad=0"; 
                }
                urlRedir += "&xlk=" + link;
                
                var ip = $server.GetIPUser(true);
                
                // ip do host da requisição, ano, mês, dia do mês, hora, min, segundo
                var iduser = $server.GetUserID();
                var chave =  $server.GetChave();
                // Gerar parametro vz
                var retornoVZ = $server.GerarParamVZ
                (
                    ip.value, 
                    iduser.value, 
                    "0",                // id do produto
                    id_emp,             // id da empresa
                    "9640",             // id da categoria
                    site_origem,        // site origem
                    cpc,                // cpc
                    link,               // xlk
                    cn.value
                );
                
                urlRedir += "&cn=" + cn.value;
                urlRedir += "&nc=" + iduser.value.toString();
//                urlRedir += "&chave=" + chave.value.toString();
                urlRedir += "&vz=" + (retornoVZ.value != "" && retornoVZ.value != null ? retornoVZ.value : "");
            }
	}
        }
        else
        {
            link = "http://www.clickviagem.com.br/AereoGalileo/TarifadaNac.aspx?btid=" + codBusca;
            urlRedir = link;
        }

        // Gravar checkOut e direcionar para nova página
        $server.InsereCheckOut(codBusca, id_emp, link); 
        openNewWindow(urlRedir);
    }
    catch (ex) { } 
    return true;
}

function GravaDadosOpcaoMP(codOpcaoMP)
{
    var codOpcaoSelecionada = 0;
    try
    {
        var codBusca = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["codBusca"] : 0);

        var voos = new Array();

        if(codOpcaoMP == null)
            var codOpcaoMP = ds.tables.MaisOpcoes.rows[0]["codOpcaoMP"];
        
        var iterator = ds.tables.OpcoesMP.getIterator('codOpcaoMP');
        iterator.findByKey(codOpcaoMP);
        
        var posVoo = iterator.row.indicePrimeiroVoo - 1;
        var opcaoMP_Voo = ((posVoo > -1 && posVoo < ds.tables.OpcoesMP_Voos.rows.count())?ds.tables.OpcoesMP_Voos.rows[posVoo]:null);
        var voo = null;
        if (opcaoMP_Voo != null)
        {
            // se já sinalizou a linha do vôo, então, busca essa linha na tabela de vôos
            if (opcaoMP_Voo.indiceVoo != null && opcaoMP_Voo.indiceVoo != "" && opcaoMP_Voo.indicePrimeiroVoo > 0)
            {
                voo = ds.tables.Voos.rows[opcaoMP_Voo.indiceVoo - 1];
            }
            else // caso contrário, encontra a linha do vôo
            {
                iteratorVoosOpcoesMP.findByKey(opcaoMP_Voo.codVoo);
                if (iteratorVoosOpcoesMP.count() > 0)
                {
                    voo = iteratorVoosOpcoesMP.row;
                    opcaoMP_Voo.indiceVoo = iteratorVoosOpcoesMP._indexList[iteratorVoosOpcoesMP.index] + 1;
                }
            }
        }
                                
        for (var iTrecho = 0; iTrecho <= (ds.tables.Trechos.rows.count() == 1 ? 0 : 1); iTrecho++)
        {
            var primeiroVoo = true;
            while (opcaoMP_Voo != null && 
                   opcaoMP_Voo.codOpcaoMP == iterator.row.codOpcaoMP && 
                   opcaoMP_Voo.codTrecho == ds.tables.Trechos.rows[iTrecho].codTrecho && 
                   voo != null)
            {          
                var numeroDePassageiros = 1;
                var codAba = 1;
                var strAnagrama = "";
                voos[voos.length]=[voo.origem, voo.destino, voo.dataHoraSaida, voo.numero, voo.companhia, voo.classe, numeroDePassageiros, voo.baseTarifariaReferencia, iterator.row.sourceCode, ds.tables.Trechos.rows[iTrecho].codTrecho, codAba, strAnagrama, opcaoMP_Voo.freeText, voo.freeText, voo.dataHoraChegada, voo.codEquipamento, voo.numParadas];
                            
                posVoo++;
                opcaoMP_Voo = ((posVoo > -1 && posVoo < ds.tables.OpcoesMP_Voos.rows.count())?ds.tables.OpcoesMP_Voos.rows[posVoo]:null);
                voo = null;
                if (opcaoMP_Voo != null)
                {
                    // se já sinalizou a linha do vôo, então, busca essa linha na tabela de vôos
                    if (opcaoMP_Voo.indiceVoo != null && opcaoMP_Voo.indiceVoo != "" && opcaoMP_Voo.indicePrimeiroVoo > 0)
                    {
                        voo = ds.tables.Voos.rows[opcaoMP_Voo.indiceVoo - 1];
                    }
                    else // caso contrário, encontra a linha do vôo
                    {
                        iteratorVoosOpcoesMP.findByKey(opcaoMP_Voo.codVoo);
                        if (iteratorVoosOpcoesMP.count() > 0)
                        {
                            voo = iteratorVoosOpcoesMP.row;
                            opcaoMP_Voo.indiceVoo = iteratorVoosOpcoesMP._indexList[iteratorVoosOpcoesMP.index] + 1;
                        }
                    }
                }
            }
        }
        
        iterator.dispose();

        // Preencher esses valores com queryString. ( Limitar <= 6  se usuário informar 
        // valor maior que 6 ou menor que 1 forçar 6)
        var numADT = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["numADT"] : 0);
        var numCHD = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["numCHD"] : 0);
        var numINF = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["numINF"] : 0);

        var res = $server.GravaDadosOpcaoMP(codBusca, voos, numADT, numCHD, numINF); 
        if (res.error == null)
        {
            codOpcaoSelecionada = res.value;
        }
    }
    catch (ex) { } 
    
    return codOpcaoSelecionada;
}

function GravaDadosOpcaoMP_callback(res){}

function definirSiteOrigem(strReferrer)
{
    /***** Códigos à serem retornados **********************
        Origem home BuscaPé: 0
        Origem nenhuma (usuário entra direto no link): NULL
        Origem www.google.: 1195883
        Origem cade.search.: 1202388
        Origem search.yahoo.: 1195884
        Origem search.msn.: 1195885
        Origem buscar.uol.com: 1202382
        Origem buscador.terra.: 1202384
        Origem farejador-[0-9].ig.: 1202386
        Outra origem: 0
    ********************************************************/

    var ht = new Hashtable();
    ht.add('www.google', '1195883');
    ht.add('cade.search', '1202388');
    ht.add('search.yahoo', '1195884');
    ht.add('search.msn', '1195885');
    ht.add('buscar.uol.com', '1202382');
    ht.add('buscador.terra', '1202384');
    ht.add('farejador-0.ig', '1202386');
    ht.add('farejador-1.ig', '1202386');
    ht.add('farejador-2.ig', '1202386');
    ht.add('farejador-3.ig', '1202386');
    ht.add('farejador-4.ig', '1202386');
    ht.add('farejador-5.ig', '1202386');
    ht.add('farejador-6.ig', '1202386');
    ht.add('farejador-7.ig', '1202386');
    ht.add('farejador-8.ig', '1202386');
    ht.add('farejador-9.ig', '1202386');

    // Analisar se o site de origem coincide com algum dos sites definito no HashTable,
    // e se coindirem, retornar o código para ser adicionado à url
    var ret = "0";
    for(var i = 0; i < ht.keys.length; i++)
    {
        if(strReferrer != "" && ht.keys[i].indexOf(strReferrer) >= 0)
        {
            ret = ht.values[i].toString();
            break;
        }
    }
    
    if(ret == "0" || ret == null)
    {
        // Buscar site_origem que se encontra na session 
        var res = $server.GetSiteOrigem();
        if (!res.error)
        {
            ret = res.value;
        }
    }
    
    return ret;
}

function CheckOutLinkPatrocinado(idLinkPatrocinado, url, codOpcaoMP)
{
    var codOpcaoSelecionada = GravaDadosOpcaoMP(codOpcaoMP);

    // insere o código da busca na url da empresa para que a mesma possa buscar no WS do BuscaTrip o XML com a opção selecionada
    var codBusca = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["codBusca"] : 0);
    if (url.indexOf("?") == -1)
    {
        url = url + "?btid=" + codBusca;
    }
    else
    {
        url = url + "&btid=" + codBusca;
    }

    // Gravar checkout no banco
    var codBusca = (ds.tables.Busca != null && ds.tables.Busca.rows.count() > 0 ? ds.tables.Busca.rows[0]["codBusca"] : 0);
    var id_emp = "";
    $server.InsereCheckOutLinksPatrocinados(codBusca, id_emp, idLinkPatrocinado);
    document.getElementById('frmCheckOutLinkPatrocinado').method = "post";
    document.getElementById('frmCheckOutLinkPatrocinado').action = url;
    document.getElementById('frmCheckOutLinkPatrocinado').submit();
}

