/**
*    Scripts para validação de cartão de crédito via ajax.
*/
var validacaoCartao = false;
var validaOpcoesPagamento = false;
var elementoGlobal;

function callGetTiposPagamento() {
   //Pagamento.getTiposPagamentoCartao_ajax(loadTiposPagamento);
   //linha acima comentada para o merge linha abaixo inserida
   OpcoesPagamento.getTiposPagamentoCartao_ajax(loadOpcoesCartaoCreditoCheque);
}

function callValidaCartao(tipoCartao, numeroCartao) {
    tipoCartao 	 = $("codigoTipoCartao").value;
    numeroCartao = $("numeroCartao").value;
    if (tipoCartao != "" && numeroCartao != "") {
	Pagamento.validaCartaoDeCredito_ajax(tipoCartao, numeroCartao, validacaoCartaoReply);
    } else if (numeroCartao == "") {
	$("cartaoMsg").innerHTML = "Preencha o número do cartão.";
    }
}

function validacaoCartaoReply(retorno) {
    if (retorno == "S") {
	validacaoCartao = true;
	$("cartaoMsg").innerHTML = "Número do cartão validado.";
    } else {
	$("cartaoMsg").innerHTML = "Número inválido.";
	validacaoCartao = false;
    }
}

function imprimirOrcamento() {
    if (validaOpcoesPagamento) {
	myRef = window.open('../geraorcamento', 'mywin', 'left=20,top=20,width=800,height=600,toolbar=0,resizable=0,scrollbars=1');
    } else {
	alert("Selecione a forma de pagamento para gerar o orçamento.");
    }
}

/**
*   Prototypes para a primeira página do processo de compra.
*/
var aptoIndex = 1;
var maxApto   = 4;
var maxCHD    = 3;

var ApartamentoClass = Class.create();
        
//definição da classe de prototipo.
ApartamentoClass.prototype = {
   initialize: function() {
     this.idadesCriancas = ['', '', ''];
   },
   //id do apto
   setId: function(id) {
        this.id = id;
   },
   
   //quantidade de adultos
   setNrAdultos: function(nrAdultos) {
        this.nrAdultos = nrAdultos;
   },
   
   //quantidade de adultos
   getNrAdultos: function() {
        return this.nrAdultos;
   },
   //quantidade de crianças
   setNrCriancas: function(nrCriancas) {
        this.nrCriancas = nrCriancas;
   },
   //quantidade de crianças
   getNrCriancas: function() {
        return this.nrCriancas;
   },
   
   //idade da criança de indice passado
   setIdadeCrianca: function(idCrianca, idade) {
        this.idadesCriancas[idCrianca] = idade;
   },
   //idade da criança de indice passado
   getIdadeCrianca: function(idCrianca) {
        return this.idadesCriancas[idCrianca];
   },
   
   showMessage: function(ajaxResponse) {
      alert(this.id);
   }
};	

//prototype para mensagens de validação
var MensagemClass = Class.create();
        
//definição da classe de prototipo.
MensagemClass.prototype = {
   initialize: function(msg) {
        if (msg == "" || msg == null) {
            alert("id incorreto para mensagem="+msg);
            return false;
        }
        
        this.msg = msg;
        this.ul = document.createElement('ul');
        //limpa o objeto para não acumular mensagens.
        if (this.msg.hasChildNodes()) {
            node = msg.firstChild;
            msg.removeChild(node);
        }
        this.msg.appendChild(this.ul);
   },
   
   addMessage: function(string) {
        message = document.createTextNode(string);
        li = document.createElement('li');
        li.appendChild(message);
        this.ul.appendChild(li);
   },
   
   endMessage: function() {
        //this.msg.appendChild(this.ul);
   }
}

//now, let's instantiate and use one object
var apto1 = new ApartamentoClass();
var apto2 = new ApartamentoClass();
var apto3 = new ApartamentoClass();
var apto4 = new ApartamentoClass();
//array dos aptos
var arrayaptos = [apto1, apto2, apto3, apto4];


//quantidade máxima de apartamentos.
var qtdAptos = 1;
var aptoAtual = arrayaptos[0];

//seleciona quantos apartamentos serão utilizados.
function setQtdAptos(qtd) {    
    qtdAptos = qtd;
    //enableQuantidades();
    $('frmApartamento:nrAptos').value = qtd;    
    showLinha(parseInt(qtd));    
}

function showLinha(js_max_linha){ 
  
  for (i=1; i <= js_max_linha; i++){   
    $("LnApto" + i).style.display = '';
  }  
  
  for (cApto = (js_max_linha + 1); cApto <= maxApto; cApto++){
    $("LnApto" + cApto).style.display = 'none';    
    resetApto(cApto);
  }    
}

function resetApto(js_nr_apto_reset){
  $("d_nr_adulto"  + js_nr_apto_reset).selectedIndex = 0;
  $("d_nr_crianca" + js_nr_apto_reset).selectedIndex = 0;
  $("d_idade1_"    + js_nr_apto_reset).selectedIndex = 0;
  $("d_idade2_"    + js_nr_apto_reset).selectedIndex = 0;
  $("d_idade3_"    + js_nr_apto_reset).selectedIndex = 0;
  setNrCriancas("", js_nr_apto_reset);
  setNrAdultos("", js_nr_apto_reset);
}


/*
function showCasa(js_max_casa){
  for (i=1; i <= js_max_casa; i++){    
    $("casa" + i).style.display = '';
  }
  
  for (i = (js_max_casa + 1); i <= maxApto; i++){
    $("casa" + i).style.display = 'none';
  }  
}
*/

//muda de apartamento.
function setAptoId(id) {
    aptoIndex = id;
    resetFields();
    aptoAtual = arrayaptos[aptoIndex-1];
    //loadFields();
    //$('order').innerHTML = id
    /*
    for (i = 1; i <= maxApto; i++){
      if (i == id){
        $("casa" + i).src = "../resources/images/apto_ativo.gif"
      }
      else{
        $("casa" + i).src = "../resources/images/apto_inativo.gif"
      }
    }
    */
}

//navegação entre apartamentos
function nextApto() {
    index = aptoIndex;
    if (index < qtdAptos) {
        index++;
        setAptoId(index);
    }            
    $('order').innerHTML = index;
}

//navegação entre apartamentos
function previousApto() {
    index = aptoIndex;
    if (index > 1) {
        index--;
        setAptoId(index);
    }
    $('order').innerHTML = index;
}

//limpa os valores dos selects
function resetFields() {
   //var arrayIdades = $('d_idade1', 'd_idade2', 'd_idade3', 'd_idade4', 'd_idade5', 'd_idade6');  
/*
   $('d_nr_adulto').options[0].selected = true;
   $('d_nr_crianca').options[0].selected = true;
    for (i = 0; i < maxCHD; i++) {
        arrayIdades[i].options[0].selected = true;
    }
*/    
}
//carrega os valores pre-carregados do apto atual no select.
//também carrega os valores após a validação do jsf.
function loadFields() {
    //var arrayIdades = $('d_idade1', 'd_idade2', 'd_idade3', 'd_idade4', 'd_idade5', 'd_idade6');  
    //adultos = aptoAtual.getNrAdultos();
    //criancas = aptoAtual.getNrCriancas();
    //setNrCriancas(criancas, 1);
    //setNrAdultos(adultos, aptoIndex);
    //$('d_nr_adulto').value = adultos;
    //$('d_nr_crianca').value = criancas;
    /*
    for (i = 0; i < maxCHD; i++) {
        arrayIdades[i].value = aptoAtual.getIdadeCrianca(i);
    }
    */
}

//alteração dos valores de apartamentos.
/*
function setNrAdultos(qtd) {
    if (qtd == null || qtd == "") {
        return false;
    }
    aptoAtual.setNrAdultos(qtd);
    $('nr_adulto'+aptoIndex).value = aptoAtual.getNrAdultos();
    $('frmApartamento:nrAdulto'+aptoIndex).value = aptoAtual.getNrAdultos();
 
}
*/
function setNrAdultos(qtd, nr_apto){
  setAptoId(nr_apto);  
  aptoAtual.setNrAdultos(qtd);
  $('frmApartamento:nrAdulto'+aptoIndex).value = aptoAtual.getNrAdultos();
}


//altera os selects de idades
function setNrCriancas(qtd, nr_apto) {
    setAptoId(nr_apto);    
    var nr_apto_aux = 1;    
    if (parseInt(nr_apto) > 0 ){
      nr_apto_aux = parseInt(nr_apto);
    }
    var arrayIdades = $('d_idade1_' + nr_apto_aux, 'd_idade2_' + nr_apto_aux, 'd_idade3_' + nr_apto_aux, 'd_idade4_' + nr_apto_aux, 'd_idade5_' + nr_apto_aux, 'd_idade6_' + nr_apto_aux);  
    if (qtd == null || qtd == "") {
        for (i = 0; i < maxCHD; i++) {
            arrayIdades[i].disabled = true;
        }
        return false;
    }
    aptoAtual.setNrCriancas(qtd);
    
    $('frmApartamento:nr_crianca'+aptoIndex).value = aptoAtual.getNrCriancas();
    
    //habilita os necessários
    if (qtd >= 1) {
        for (i = 0; i < qtd; i++) {
            arrayIdades[i].disabled = false;
        }
    //desabilita todos os selects
    } else {
        for (i = 0; i < maxCHD; i++) {
            arrayIdades[i][nr_apto_aux].disabled = true;
        }
    }
    
    //desabilita selects não utilizados
    if (qtd < maxCHD) {
        for (i = (maxCHD-1); i >= qtd; i--) {
            arrayIdades[i].disabled = true;
        }
    //habilita todos os selects
    } else {
        for (i = 0; i < maxCHD; i++) {
            arrayIdades[i].disabled = false;
        }
    }
    
}

//habilita os selects de idades
function enableIdades() {
/*    var arrayIdades = $('d_idade1_' + nr_apto, 'd_idade2_' + nr_apto, 'd_idade3_' + nr_apto, 'd_idade4_' + nr_apto, 'd_idade5_' + nr_apto, 'd_idade6_' + nr_apto);  
    for (i = 0; i < maxCHD; i++) {
        arrayIdades[i].disabled = true;
    }
*/    
}

//habilita os selects de quantidades de adultos e crianças
function enableQuantidades() {
//    $('d_nr_adulto').disabled = false;
//    $('d_nr_crianca').disabled = false;
}

//atualiza idade da criança selecionada
function setIdadeCrianca(idade, idcrianca, nr_apto) {
    setAptoId(nr_apto);
    $('frmApartamento:nr_idade'+idcrianca+'_'+aptoIndex).value = idade;
    aptoAtual.setIdadeCrianca(idcrianca-1, idade);
}
        
//validação dos campos do form via javascript.
//form de apartamentalização, primeiro do processo de compra.
function validateFormApartamentalizacao() {
    //Foi atribuido o valor ao campo de origem porque o campo "selecaoCodigoCidadeOrigem"
    //nao pode ser acessado pelo request    
    qtdAptos = $('frmApartamento:nrAptos').value;    
    //$('dataSaida').value = document.demoForm.dateField.value;
   
    var msg = $('msgerro');
    var ul = document.createElement('ul');
    //limpa o objeto para não acumular mensagens.
    if (msg.hasChildNodes()) {
        node = msg.firstChild;
        msg.removeChild(node);
    }
   
    var valid = true;
    if (qtdAptos == "0") {
        message = document.createTextNode('Selecione quantos apartamentos deseja.');
        inner = document.createElement('li');
        inner.appendChild(message);
        ul.appendChild(inner);
        valid = false;
    } else {
        //valida as quantidades de adultos nos apartamentos.
        for (i = 1; i <= qtdAptos; i++) {
            qtdAdultos = $('frmApartamento:nrAdulto'+i).value;
            if (qtdAdultos == '') {
                qtdAdultos = 0;
            }

            if (qtdAdultos == 0) {
                message = document.createTextNode('Selecione a quantidade de adultos no apartamento '+i+' .');
                inner = document.createElement('li');
                inner.appendChild(message);
                ul.appendChild(inner);
                valid = false;
            }
            
            //validação das idades das crianças
            qtdCriancas = $('frmApartamento:nr_crianca'+i).value;
            if (qtdCriancas == '') {
                qtdCriancas = 0;
            }
            
            if (qtdCriancas != 0) {
                //validação das idades das crianças
                for (j = 1; j <= qtdCriancas; j++) {
                    idade = $('frmApartamento:nr_idade'+j+'_'+i).value;
                    if (idade == "") {
                        message = document.createTextNode('Selecione a idade da criança '+j+' no apartamento '+i+'.');
                        inner = document.createElement('li');
                        inner.appendChild(message);
                        ul.appendChild(inner);
                        valid = false;
                    }
                }
            }
            
            total = parseInt(qtdAdultos) + parseInt(qtdCriancas);
            //validação da quantidade máxima de pessoas por apartamento.
            //por regra de negócio, no máximo 4
            if (total > 4) {
                message = document.createTextNode('No apartamento '+i+' existem mais que 4 pessoas. A quantidade máxima por apartamento é 4.');
                inner = document.createElement('li');
                inner.appendChild(message);
                ul.appendChild(inner);
                valid = false;
            }
        }
    }   
    if ($('codigoPais').value == '' || $('codigoEstado').value == '' || $('codigoCidadeOrigem').value == ''){
      message = document.createTextNode('Selecione o local de origem!');
      inner = document.createElement('li');
      inner.appendChild(message);
      ul.appendChild(inner);
      valid = false;
    }
    if($('dataSaida').value == ''){
      message = document.createTextNode('Selecione a data de saída!');
      inner = document.createElement('li');
      inner.appendChild(message);
      ul.appendChild(inner);
      valid = false;
    }        
    msg.appendChild(ul);    
    return valid;
}

function ocultaMenorPreco(){  
    if($('trMenorPreco') != undefined){
        $('trMenorPreco').style.display = 'none';
        $('lblSaida').innerText = 'Datas de saída';
    }
}

function exibeMenorPreco(){
    if($('trMenorPreco') != undefined){
        $('trMenorPreco').style.display = '';
        $('lblSaida').innerText = 'Outras Saídas';
    }    
}

String.prototype.trim = function()
{
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

/*******************************************************************************
* Prototypes para a segunda página do processo de compra, 
* Opções de Pagamento.
*******************************************************************************/
//validação dos formulários
function validateFormPassageiros(validaFormaPagamento) {

    var qtdAptos = $('frmApartamento:nrAptos').value;
    var valid = true;
    
	if(validaFormaPagamento == true){
	    //validação de gravação de forma de pagamento.
	    var mensagem = new MensagemClass($('msgerroFormaPgto'));
	    //if ($('codigoPlano').value == "-1") {
	    if ($('codigoPlano').value == "") {
	        mensagem.addMessage('Escolha uma forma de pagamento.');
	        mensagem.endMessage();
	        valid = false;
	    } else {
	        valid = true;
	    }
	}
    
    
    //itera sobre cada apartamento.
    for (i = 1; i <= qtdAptos; i++) {
    
        qtdAdultos = $('qtdAdultos'+i).value;
        qtdCriancas = $('qtdCriancas'+i).value;
        
        //VALIDAÇÃO DOS FORMULÁRIOS DE ADULTOS
        for (j = 1; j <= qtdAdultos;j++) {
            //mensagem de validação.
            var mensagem = new MensagemClass($('msgerroAdulto'+i+'_'+j));

            //validação do nome do adulto em um apartamento i
            if ($('adultoNome'+i+'_'+j).value.trim() == "" ) {
               mensagem.addMessage('Preencha o campo nome.');
               valid = false;
            }
            
            //validação do sobrenome
            if ($('adultoSobrenome'+i+'_'+j).value.trim() == "" ) {
                mensagem.addMessage('Preencha o campo Último nome.');
                valid = false;
            }
            
            //validação do sobrenome
            if ($('adultoSexo'+i+'_'+j).value.trim() == "" ) {
                mensagem.addMessage('Preencha o campo sexo.');
                valid = false;
            }
            
            //validação da data de nascimento            
            if ($('adultoNascimento'+i+'_'+j).value.trim() == "" || !doDate($('adultoNascimento'+i+'_'+j).value, 4)) {
                mensagem.addMessage('O campo Nascimento não é válido.');
                valid = false;
            }
            
            //Faz critica de campos de roteiros rodoaereos, maritimos e rodoviarios
            if ($('codigoProduto').value == '3' || $('codigoProduto').value == '7' || $('codigoProduto').value == '8'){
                
                //validação da tipo de documento
                if ($('adultoTipoDoc'+i+'_'+j).value.trim() == "" ) {
                    mensagem.addMessage('Selecione o Tipo de Documento.');
                    valid = false;
                }
            
                //validação do orgao
                if ($('adultoOrgao'+i+'_'+j).value.trim() == "" ) {
                    mensagem.addMessage('Preencha o campo Orgão.');
                    valid = false;
                }
            
                //validação do documento
                if ($('adultoDocumento'+i+'_'+j).value.trim() == "" ) {
                    mensagem.addMessage('Preencha o campo Documento.');
                    valid = false;
                }
            
                //validação da UF
                if ($('adultoUF'+i+'_'+j).value.trim() == "" ) {
                    mensagem.addMessage('Preencha o campo UF.');
                    valid = false;
                }

                if ($('tipoRoteiro').value.trim() == 'roteiroMaritimo'){
                    //validação do turno
                    if ($('adultoTurno'+i+'_'+j).value.trim() == "" ) {
                        mensagem.addMessage('Preencha o Turno de Refeições.');
                        valid = false;
                    }
                }
            }
                
            mensagem.endMessage();
        }

        //VALIDAÇÃO DOS FORMULÁRIOS DE CRIANÇAS
        if (qtdCriancas != "" && qtdCriancas != "0") {
            for (j = 1; j <= qtdCriancas;j++) {
                //mensagem de validação.
                var mensagemCrianca = new MensagemClass($('msgerroCrianca'+i+'_'+j));
                
                //validação do nome do adulto em um apartamento i
                if ($('criancaNome'+i+'_'+j).value.trim() == "" ) {
                   mensagemCrianca.addMessage('Preencha o campo nome.');
                   valid = false;
                }
                
                //validação do sobrenome
                if ($('criancaSobrenome'+i+'_'+j).value.trim() == "" ) {
                    mensagemCrianca.addMessage('Preencha o campo Último nome.');
                    valid = false;
                }
                
                //validação do sobrenome
                if ($('criancaSexo'+i+'_'+j).value.trim() == "" ) {
                    mensagemCrianca.addMessage('Preencha o campo sexo.');
                    valid = false;
                }
                
                //validação da data de nascimento            
                if ($('criancaNascimento'+i+'_'+j).value.trim() == "" || !doDate($('criancaNascimento'+i+'_'+j).value, 4)) {
                    mensagemCrianca.addMessage('O campo Nascimento não é válido.');
                    valid = false;
                }
                //Faz critica de campos de roteiros rodoaereos, maritimos e rodoviarios
                if ($('codigoProduto').value == '3' || $('codigoProduto').value == '7' || $('codigoProduto').value == '8'){
                    
                    //validação da tipo de documento
                    if ($('criancaTipoDoc'+i+'_'+j).value.trim() == "" ) {
                        mensagemCrianca.addMessage('Selecione o Tipo de Documento.');
                        valid = false;
                    }
                
                    //validação do orgao
                    if ($('criancaOrgao'+i+'_'+j).value.trim() == "" ) {
                        mensagemCrianca.addMessage('Preencha o campo Orgão.');
                        valid = false;
                    }
                
                    //validação do documento
                    if ($('criancaDocumento'+i+'_'+j).value.trim() == "" ) {
                        mensagemCrianca.addMessage('Preencha o campo Documento.');
                        valid = false;
                    }
                
                    //validação da UF
                    if ($('criancaUF'+i+'_'+j).value.trim() == "" ) {
                        mensagemCrianca.addMessage('Preencha o campo UF.');
                        valid = false;
                    }
                    if ($('tipoRoteiro').value == 'maritimo'){
                        //validação do turno
                        if ($('criancaTurno'+i+'_'+j).value.trim() == "" ) {
                            mensagem.addMessage('Preencha o Turno de Refeições.');
                            valid = false;
                        }
                    }
                }
                
                mensagemCrianca.endMessage();
            }
        }
    }    
    return valid;
}

function setOrigem(js_origem){
    var arr_origem = js_origem.split("||");
    $('codigoCidadeOrigem').value = js_origem;//arr_origem[0];  
    $('codigoEstado').value = arr_origem[1];
    $('codigoPais').value = arr_origem[2];
}

function alteraDataSaida(data){
  if (data == "selecione"){
    $("dataSaida").value = "";
  }
  else{
    $("dataSaida").value = data;
  }
  try{
    $("selectMenorPreco").selectedIndex = 0;
  }catch(e){}  
}  

function carregaCidadeEmbarque(js_origem){   
   var arr_origem = js_origem.split("||");
   var js_aux_origem = arr_origem[0] + "||" +  arr_origem[1] + "||" + arr_origem[2];
   var js_total  = arr_origem[3];
   setOrigem(js_aux_origem);
   alteraDatasMenorPreco(js_aux_origem);
   
   for (i = $("selDataSaida").length; i>=0; i--){
     $("selDataSaida").options[i] = null;
   }
   
    var js_item_data = js_aux_origem + "-" + i;
   
    var o = document.createElement ("option");
    o.setAttribute ("value", "");
    var t = document.createTextNode ("selecione");
    o.appendChild (t);
    document.getElementById("selDataSaida").appendChild (o);
       
   
   for(i=1; i <= js_total; i++){
     var js_item_data = js_aux_origem + "-" + i;
    var s = document.createElement ("option");
    s.setAttribute ("value", $(js_item_data).value);
    var r = document.createTextNode ($(js_item_data).value);
    s.appendChild (r);
    document.getElementById("selDataSaida").appendChild (s);

   }
   $("dataSaida").value = "";
}   

/**
* Grava a forma de pagamento escolhida atravÃ©s de uma chamada AJAX.
*/
//function callGravaFormaPgto(jsCodigoPlano, jsCodigoFiliacao, jsCodigoOperacao, jsIndiceSelecionado) {
function callGravaFormaPgto(element, jsCodigoPlano, jsCodigoOperacao, jsCodigoSimulacao, jsIndiceSelecionado) {
	elementoGlobal = element;
	loadTotalPlano(jsCodigoPlano);
	try {
        $("codigoPlano").value = jsCodigoPlano;
        OpcoesPagamento.gravaFormaPgtoAjax(jsCodigoPlano, jsCodigoOperacao, jsCodigoSimulacao, retornoCallGravaFormaPgto);
    	validaOpcoesPagamento = true;
    } catch (e) {
        $("codigoPlano").value = "0";
    }
}

function retornoCallGravaFormaPgto(retorno){
	if (retorno == -1){
		elementoGlobal.checked = false;
		validaOpcoesPagamento = false;
		$("codigoPlano").value = "";
		alert('Erro, tente novamente mais tarde!');
	}
}

/**
*Exibir os totais por seleção de Plano
*Alan Jonnes
*/
function loadTotalPlano(jsCodigoPlano){
	
	document.getElementById("valorTotal").innerHTML = FormataStringParaValor(parseFloat($("totalParcela" + jsCodigoPlano).value)); 
	document.getElementById("divTotalDestaque").style.display = "block";
	document.getElementById("divTotalDestaque").innerHTML = "<span class='cvc07'> Valor da viagem: R$" + FormataStringParaValor(parseFloat($("totalParcela" + jsCodigoPlano).value)) + "</span>";
	return;
}


/**
* Mostrar ou esconder a "pop-up" de outras opções de pagamento e as bandeiras
* de cartões de crédito.
*/
function abreMPagto() {
    $("divMFormasPagtoGeralRight").style.display = "block";
}

/**
* Esconder a "pop-up" de outras opções de pagamento e mostrar qual foi a forma
* escolhida.
*/
function fechaMPagto() {
    $("divMFormasPagtoGeralRight").style.display = "none";
}

/**
* Executa o método que retorna os planos de pagamento através de uma chamada AJAX.
*
* É acionado por uma opção de Cartão de Crédito ou pela opção de Cheque, indicada
* aqui pelo parâmetro jsCodigoFiliacao:
*    != 5 -> Cartão de Crédito
*    =  5 -> Cheque
*/
var posicaoSelecionada;
//function callListarPlanos(jsCodigoFiliacao, posicao) {
//Linha acima comentada para o merge inserida a linha abaixo
function callListarPlanos(operacaoId, posicao) {
    posicaoSelecionada = posicao;
    // "Pop-up" de outras opções de pagamento
    
	abreMPagto();
    //$("divOpcoesPgtoGeral").innerHTML = '<h3>AGUARDE...</h3>';
    //OpcoesPagamento.listarPlanosAjax(jsCodigoFiliacao, false, loadOpcoesPagamentoGeral);
    //Linha acima comentada para o merge inserida linha abaixo
    
    OpcoesPagamento.listarPlanosAjax(operacaoId, modalidade.id, modalidade.codigoSimulacao, false, loadOpcoesPagamentoGeral);
    
}

/**
* Monta as opções de pagamento geral.
* Estrutura do VO retornado através de uma chamada AJAX.
* codigoPlano, codigoContador, numeroParcelas, descricaoWEB, 
* descricaoTipoPagto, descricaoOrigemPagto, codigoFiliacao, 
* codigoOperacao, valorEntrada, valorParcela, valorTotal
*/
function loadOpcoesPagamentoGeral(planos) {
	
	var parcelas = $("divOpcoesPgtoGeral");    
    var html = "";
    if(planos != null && planos.length > 0 ) {
        for (i = 0; i < planos.length; i++) {
            plano = planos[i];
            html += "<input type='radio' onclick='callGravaFormaPgto(this, " + plano.planoId + "," + plano.codigoOperacao + "," + plano.codigoSimulacao + "," + i + ");' value='" + plano.planoId  + "' " + 
                    " class='botaoOK' name='parcelaCalculada' id='parcelaCalculada' />";
            var descricao = "<span class='cvc02'> " + plano.quantidadeParcelas +"x "+ 
                    "<strong> R$" + FormataStringParaValor( plano.valorParcela ) + " </strong> </span>" + 
                    "<span class='cvc01'>" + plano.resumo + "</span> <br/>" ;
            html += descricao;
            
            var hiddenQtdParcelas = '<input type="hidden" value="'  + plano.quantidadeParcelas + "x" + '"' + 
                        ' name="qtdParcelas' + plano.planoId  +  '"' + ' id="qtdParcelas' + plano.planoId +  '" />';            
            
            var hiddenValorParcela = '<input type="hidden" value="'  + FormataStringParaValor( plano.valorParcela ) +  '"' + 
                        ' name="valorParcela' + plano.planoId  +  '"' + ' id="valorParcela' + plano.planoId +  '" />';
            
            var hiddenResumoParcela = '<input type="hidden" value="'  + plano.resumo +  '"' + 
                        ' name="resumoParcela' + plano.planoId  +  '"' + ' id="resumoParcela' + plano.planoId +  '" />';
            var hiddenTotalParcela = '<input type="hidden" value="'  + plano.valorTotal +  '"' + 
                        ' name="totalParcela' + plano.planoId  +  '"' + ' id="totalParcela' + plano.planoId +  '" />';            
            
            //campos ocultos  
            html += hiddenQtdParcelas;
            html += hiddenValorParcela;
            html += hiddenResumoParcela;
            html += hiddenTotalParcela;
        }
    }else {
        $("totalPlanos").innerHTML = "";
        html += "<p>";
        html += "<span class='cvc01'>" + "Nï¿½o foram encontrados planos. Tente novamente mais tarde."+ "</span>";                 
        html += "</p> ";        
    }
    parcelas.innerHTML = html;
	
    operacao = listaCartoes[posicaoSelecionada];
    var textoBandeira = "";
    
    if(posicaoSelecionada >= listaCartoes.length){//Cheque
        textoBandeira = "<div class='divPequenaLeft'><img src='../resources/images/ico_pagCheque.gif' alt='Cheque' >";
        textoBandeira += "<p class='cvc08' align='center'><strong class='cvc02'>Cheque</strong></p>";
    }else{
        textoBandeira += "<div class='divPequenaLeft'><img src='"+ retornarCaminhoBandeiraAPartirDaFiliacao( operacao.id ) +"' alt='"+operacao.descricao+"' >";
        textoBandeira += "<p class='cvc08' align='center'><strong class='cvc02'>"+capInit(operacao.descricao, true, true, false)+"</strong></p>";
    }
    
    $("divPagamentoSelecionado").innerHTML = textoBandeira;
    
	return;
	//--------------------------------------------------------------------------------
    var innerHTML = '';
    if(posicaoSelecionada >= listaCartoes.length){//Cheque
        innerHTML += "<div class='divPequenaLeft'><img src='../resources/images/ico_pagCheque.gif' alt='Cheque' >";
        innerHTML += "<p class='cvc08' align='center'><strong class='cvc02'>Cheque</strong></p>";
    }else{
        innerHTML += "<div class='divPequenaLeft'><img src='"+listaCartoes[posicaoSelecionada].descricaoIcone+"' alt='"+listaCartoes[posicaoSelecionada].descricaoFiliacao+"' >";
        innerHTML += "<p class='cvc08' align='center'><strong class='cvc02'>"+listaCartoes[posicaoSelecionada].descricaoFiliacao+"</strong></p>";
    }
    innerHTML += "</div>";
    $("divPagamentoSelecionado").innerHTML = innerHTML;

    innerHTML = '';
    for (i = 0; i < listaFormas.length; i++) {
        innerHTML += ' <input id="plano" name="plano" class="botaoOK"';
        innerHTML += ' type="radio" onclick="callGravaFormaPgto(this, '+listaFormas[i].codigoPlano+','+listaFormas[i].codigoFiliacao+','+listaFormas[i].codigoOperacao+','+i+');">';
        innerHTML += ' <span id="descricaoEscolhidaGeral'+i+'" name="descricaoEscolhidaGeral'+i+'" class="cvc02">'+(listaFormas[i].numeroParcelas).replace(' ','')+'X';
        innerHTML += ' <strong>'+(listaFormas[i].valorParcela).replace(' ','')+'</strong>';
        innerHTML += (listaFormas[i].valorEntrada != "0" && listaFormas[i].valorEntrada != "0,00"? ' + <strong>'+listaFormas[i].valorEntrada+'</strong> Entrada ' : '');
        innerHTML += ' </span>';
        innerHTML += ' <span id="descricaoEscolhidaGeralObs'+i+'" name="descricaoEscolhidaGeralObs'+i+'"  class="cvc01">('+ listaFormas[i].descricaoWEB + ')</span>';
        innerHTML += ' <input id="valorTotalGeral'+i+'" name="valorTotalGeral'+i+'" type="hidden" value="'+listaFormas[i].valorTotal+'"/>';
        innerHTML += '<br/>';
    }
    if (listaFormas.length == 0) {
        innerHTML = '<br/><span class="cvc02">Planos não encontrados</span><br/>'
    }
    $("divOpcoesPgtoGeral").innerHTML = innerHTML;
}

/**
* Callback para a carga de tipos de pagamento:
*   -> Chamado por: callGetTiposPagamento()
*   -> Delega para: loadOpcoesCartaoCreditoCheque()
*/
function loadTiposPagamento(listBeans) {
	// Carrega o tipo de pagamento Cartão de Crédito e cheque no final
	loadOpcoesCartaoCreditoCheque(listBeans);
}

/**
* Executa o método que retorna os tipos de pagamentos através de uma chamada AJAX.
*
* [CARTÃO DE CRÉDITO]
*/
function loadOpcoesCartaoCreditoCheque(listBeans) {
    var jsCodigoFiliacao = 0;
    $("formasPagamento").innerHTML = buildOpcoesCartaoCreditoHTML(listBeans);
}

/**
* Constroi o HTML que será inserido na div de forma de pagamento.
*
* [CARTÃO DE CRÉDITO]
*/
var listaCartoes;
var modalidade;
function buildOpcoesCartaoCreditoHTML(listBeans) {

	operacoes = listBeans;
	listaCartoes = listBeans;
    var innerHTML = "<input type='hidden' name='codigoTipoCartao' id='codigoTipoCartao'/>";
    if(operacoes != null && operacoes.length > 0){
        modalidade = operacoes[0].modalidade;
        for (i = 0; i < operacoes.length; i++) {



            operacao = operacoes[i];
            innerHTML += "<p>";
            innerHTML += "<input type='radio' name='codigoOperacao' id='codigoOperacao' onclick='callListarPlanos(this.value, "+i+" );' value='"+operacao.id+"'>  ";
            innerHTML += "<img src='"+ retornarCaminhoBandeiraAPartirDaFiliacao( operacao.id ) +"' width='30' height='19' alt='"+operacao.descricao+"'/>";
            innerHTML += "<span class='cvc01'>" +" "+ capInit(operacao.descricao, true, true, false)  + "</span>";
        
        
            innerHTML += "</p> ";
        
            if(operacao.id == 5402){
            	innerHTML += "<p>";
            	innerHTML += "<input type='radio' name='codigoOperacao' id='codigoOperacao' onclick='callListarPlanos(this.value, "+i+" );' value='"+operacao.id+"'>  ";
            	innerHTML += "<img src='"+ retornarCaminhoBandeiraAPartirDaFiliacao( 'diners' ) +"' width='30' height='19' alt='"+ 'Diners' +"'/>";
            	innerHTML += "<span class='cvc01'>" +" "+ 'Diners'  + "</span>";                
            	innerHTML += "</p> ";        
            }


        }

        //radio button de cheque
        /*
        if ($("parceiro").value != "true") {    
    	    innerHTML += "<p>";
    	    innerHTML += "<input type='radio' name='codigoOperacao' id='codigoOperacao' onclick='callListarPlanos(this.value, -1);' value='-1'>  ";
    	    innerHTML += "<img src='../resources/images/cheque.gif' class='botaoOK' alt='Cheque'/>";
    	    innerHTML += "<span class='cvc01'>  Cheque</span>";
    	    innerHTML += "</p>";
        }
        */
    } else {
    	innerHTML += "<p>";
    	innerHTML += "<span class='cvc01'>" + "Nï¿½o foram encontrados planos. Tente novamente mais tarde."+ "</span>";                 
    	innerHTML += "</p> ";                 
     
    }
    
    return innerHTML;
    
    
//    listaCartoes = listBeans
//    for (i = 0; i < listBeans.length; i++) {
//        tipoPagamento = listBeans[i];
//        jsName = "codigoTipoCartao";
//        jsId = "codigoTipoCartao" + tipoPagamento.codigoFiliacao;
//
//        innerHTML += "<p>";
//        innerHTML += "<input type='radio' name='"+jsName+"' id='"+jsId+"' onclick='callListarPlanos("+tipoPagamento.codigoFiliacao+","+i+");' value="+tipoPagamento.codigoFiliacao+">  ";
//        innerHTML += "<img src='"+tipoPagamento.descricaoIcone+"' class='botaoOK' alt='"+tipoPagamento.descricaoFiliacao+"'/>";
//        innerHTML += "<span class='cvc01'>  "+tipoPagamento.descricaoFiliacao+"</span>";
//        innerHTML += "</p>";
//    }
//    jsName = "codigoTipoCartao";
//    jsId = "codigoTipoCartao" + tipoPagamento.codigoFiliacao;
//
//    //radio button de cheque
//    if ($("parceiro").value != "true") {    
//	    innerHTML += "<p>";
//	    innerHTML += "<input type='radio' name='"+jsName+"' id='"+jsId+"' onclick='callListarPlanos(5,"+listBeans.length+");' value="+tipoPagamento.codigoFiliacao+">  ";
//	    innerHTML += "<img src='../resources/images/cheque.gif' class='botaoOK' alt='Cheque'/>";
//	    innerHTML += "<span class='cvc01'>  Cheque</span>";
//	    innerHTML += "</p>";
//    }


//
//    return innerHTML;
}

/**
*  Mostra os tipos de pagamento disponíveis: Cartão de Crédito ou Cheque.
*/
function mostrarTiposPagamento() {
    // O default mostrado é cartão de crédito.
    callGetTiposPagamento();
}

/**
* Monta o total da viagem.
*/
function loadResumoViagem(jsIndiceSelecionado) {
	//var innerHTML = $("descricaoEscolhidaGeral"+jsIndiceSelecionado).innerHTML;
	//var innerHTMLObs = $("descricaoEscolhidaGeralObs"+jsIndiceSelecionado).innerHTML;
	//$("valorTotal").innerHTML = '<strong>' + $("valorTotalGeral"+jsIndiceSelecionado).value + '</strong>';
	innerTotalDestaque = '<strong>' + $("valorTotalGeral"+jsIndiceSelecionado).value;
	if($("saldoPar").value != ""){
		
		innerTotalDestaque = innerTotalDestaque + "<br> + " + $('valorFormatadoPar').value;
	}
	$("valorTotal").innerHTML = innerTotalDestaque + '</strong>';

	innerTotalDestaque = '<span class="cvc07">Valor da viagem: <strong>R$' + $("valorTotalGeral"+jsIndiceSelecionado).value;
	$("divTotalDestaque").innerHTML = '<span class="cvc07">Valor da viagem: <strong>R$' + $("valorTotalGeral"+jsIndiceSelecionado).value + '</strong></span>'
	if($("saldoPar").value != ""){
		innerTotalDestaque = innerTotalDestaque + "<br> + " + $('valorFormatadoPar').value;
	}
	$("divTotalDestaque").innerHTML = innerTotalDestaque + '</strong></span>';
	
	$("divOpcoesPagamento").innerHTML = '<span class="cvc02">' + innerHTML + '</span><span class="cvc01"> ' + innerHTMLObs + '</span>';
}

/*******************************************************************************
* Prototypes para a segunda página do processo de compra, 
* opções de pagamento.
*******************************************************************************/

/**
 *  De acordo com o cï¿½digo da filiaï¿½ï¿½o devolve o caminho da imagem do cartï¿½o.
 *
 */
function retornarCaminhoBandeiraAPartirDaFiliacao(filiacao){
    var src = "";
    //AMEX
    if(filiacao == 5401){
        src="/site/resources/images/cartao_amex.jpg";
    } 
    //VISA
    else if (filiacao == 5404) {
        src="/site/resources/images/cartao_visa.jpg";    
    }
    
    //HIPERCARD
    else if (filiacao == 5405) {
        src="/site/resources/images/cartao_hipercard.jpg";
    }
    //MASTER
    else if (filiacao == 5402) {
        src="/site/resources/images/cartao_master.jpg";
    } 
    
    else  {
            src="/site/resources/images/cartao_inter.jpg";
    }
    
   return src;
}

function atualizaCodigoFiliacao(codigoOperacao, cartao, posicao) {
    
    $("divMFormasPagtoGeralRight").style.display = "block";    
    $("pagamento").style.display = "none";
    
    //"limpa campos"
    $("cartaoMsg").innerHTML = "<span>&nbsp;</span>";
    if($("numeroCartao") != undefined ){
        $("numeroCartao").value = "";
    }
    $("codigoSeguranca").value = "";
    $("mesVencimentoCartao").value = "";
    $("anoVencimentoCartao").value = ""; 
    /**
     * Default declaro ter lido - solicitada via SD202083
     */
    $("presentearForm:contratolido").checked = true;    
    $("totalPlanos").innerHTML    = "<strong> </strong>";
    
    
    $("codigoTipoCartao").value = cartao;    
    var novoRecibo = { codigoContratante : reciboGerado.codigoContratante,
                   codigoModalidade :  reciboGerado.codigoModalidade, 
                   codigoOperacao : codigoOperacao, 
                   codigoPlanoFinan : reciboGerado.codigoPlanoFinan,
                   codigoReserva : reciboGerado.codigoReserva,
                   codigoSistemaVenda : reciboGerado.codigoSistemaVenda,
                   filialCvc :  reciboGerado.filialCvc,
                   codigoPessoa : reciboGerado.codigoPessoa,
                   id : reciboGerado.id
    
    };
    
    reciboGerado = novoRecibo;
        
    ListaPresentePresentear.retornarPlanosListaPresenteAjax(reciboGerado, loadOpcoesPlanos);
      
    
    //muda a bandeira do cartao na div de planos        
    $("cartaoSelecionadoPlanos").innerHTML = '<img alt="" src="' +  retornarCaminhoBandeiraAPartirDaFiliacao(cartao)  +  '" />';         
}

/** SCRIPTS UTILIZADOS NA MONTAGEM DOS COMBOS DE DATA E CIDADE DE ORIGEM NA 
 * TELA DE DETALHES DE DESTINO
 */
/**
 *  consulta lista de cidades
 */
 function carregaCidades(codigoDestinoBase){	 
	 DetalhesDestino.consultaCidadesEmbarque_ajax(codigoDestinoBase, montarComboCidades);
 }
 
 /***
  * Pega o retorno da lista de cidades e o combo
  * @param cidades
  * @return
  */
 function montarComboCidades(cidades){
	 
	 var inner = "";
	 var innerHtmlHideen = "";
	 
	 inner += '<select name="selLocalSaida"' ; 
	 inner += 'onchange="carregaCidadeEmbarque(this.value);">' ;
	 inner += '<option>Selecione</option>';
	 	 
	 //looping para cada cidade
	 var i =0;
	 while (i < cidades.length){
		 var cidade = cidades[i]; 
		 inner += '<option value=' +   cidade.codigoCidade + '||' +  
		 		  cidade.codigoEstado + '||'+   cidade.codigoPais  +  '||' + 
		 		  cidade.datas.length + '>' +  cidade.nomeCidade.toUpperCase()  + '</option>';
		 
		 innerHtmlHideen += montaHtmlHidden(cidade);
		 i++;
	 }
	 inner += '</select>';
	$("divCidadeEmbarque").innerHTML = inner;
	$("divSaidasHidden").innerHTML   = innerHtmlHideen; 	 
 }	
 
 function montaHtmlHidden(cidade){
	 var iHtml = " ";
	 var j = 0;
	 var i =0;
	 while(i < cidade.datas.length ){
		 j = i + 1;
		 iHtml += '<input type="hidden" id="' + cidade.codigoCidade + '||' ;
		 iHtml += cidade.codigoEstado + '||' + cidade.codigoPais  ;
		 iHtml += '-' + j + '"' + ' value="' + cidade.datas[i].dataSaida +'" />  ';
		 i++;
	 }
	 return iHtml;
 }
 
 
 /**
  * Funcao que pega dois elementos HTML (formasPagamento e divOpcoesPgtoGeral)
  * e verifica se os dois elementos existem algum elemento (HTML input, radio)
  * está checkado caso algum dos elementos HTML (formasPagamento e divOpcoesPgtoGeral)
  * não tenho o input radio checkado então retorna false, se existir nos dois elementos
  * retorna true
  */
 function validaCartaoCreditoMigracao(){
	 retorno = true;
	 if (!verificaElementosRadioCheckado("formasPagamento") || 
	     !verificaElementosRadioCheckado("divOpcoesPgtoGeral")){
		 var mensagem = new MensagemClass($('msgerroFormaPgto'));
		 mensagem.addMessage('Escolha uma forma de pagamento.');
	     mensagem.endMessage();
		 retorno = false;
	 }
	 return retorno;    
 }
 
 /**
  * Funcao que faz a validação de um elemento HTML
  * dentro deste elemento é verificado se existe algum objeto HTML
  * é input, radio e está checkado. Caso existe essas 3 verificações retorna true
  * senão retorna false.
  * @param nomeElemento é o nome do elemento que será verificado.
  * 
  */
 function verificaElementosRadioCheckado(nomeElemento){
	 if (document.getElementById(nomeElemento) != null && 
		document.getElementById(nomeElemento).getElementsByTagName("input") != null){
		 ele = document.getElementById(nomeElemento);
		 inputs = ele.getElementsByTagName("input");
		 for (i=0; i < inputs.length; i++) {
				elemento = inputs[i];
				if (elemento.getAttribute("type") == "radio" & elemento.checked){
					return true;
				}
			}
	 }
	 return false;
 }
 
