﻿var globalCodOpPgto = 0;
var titularCC = '';
var cpfCC = '';
var numeroCC = '';
var codSeguranca = '';
var validadeCC = '';
var sourceHotelName = '';
var ccCode = '';
var codCoeficiente = 0;
var totalHospVoucher = '';
var totalAereoVoucher = '';
var totalGeralVoucher = '';
var codHistoricoClearSale;
var agenciaVoucher = '';
var telefoneVoucher = '';
var emailVoucher = '';
var operadoraVoucher = '';
this.CiaAerea = '';
this.CodEmpresaPortlet = '';

var AereoHotel = Type.classCreate();
var TotalPax = Type.classCreate();
TotalPax.prototype = {
    initialize: function() {
        this.adts1 = 0;
        this.adts2 = 0;
        this.adts3 = 0;
        this.adts4 = 0;
        this.chds1 = 0;
        this.chds2 = 0;
        this.chds3 = 0;
        this.chds4 = 0;
    }
};

AereoHotel.prototype = {
    initialize: function() {
        this.AfterDoReservationCBHotel = false;
        this.StatusReservationHotel = false;
        this.StatusReservationAereo = false;
        this.StatusCancellationHotel = false;
        this.StatusCancellationAereo = false;
        this.HotelAcceptPaymentCheckout = false;
        this.HotelAcceptPaymentCartao = false;
        this.HotelTrip;
        this.HotelTripResult;
        this.AereoDs;
        this.TokenAereo;
        this.LocTripAereo;
        this.ValorTotal;
        this.ValorAereo;
        this.ValorHotel;
        this.SrcIframeAereo;
        this.SrcIframeHotel;
        this.dtPrazoHotel;
        this.dtPrazoAereo;
    }
};

function jDadosAereo()
{
    this.dataIda;
    this.dataVolta;
    this.iataOrigem;
    this.iataDestino;
    this.classe;
    this.numVoo;
    this.ciaAerea;
    this.nome;
    this.sobrenome;
    this.idade;
    this.tipo;
}
 
function jControllerAereoHotel(){
    var This = this;
    This.aereoHotel = new AereoHotel();
    This.totalPax = new TotalPax();
    var tpl;
    var txtValores = '';
    var codPedidoVB; //-- CodPedido do VaiBrasil
    var dadosAereo = null;
    
    var msgHotelNaoEncontrado = '<div id="errorMessage" style="text-align:center; color:#000; width:auto; padding-top:40px;">';
    msgHotelNaoEncontrado = msgHotelNaoEncontrado + '<img src="http://novovb.vaibrasil.com.br/images/atencao.jpg" alt="Atenção" />';
    msgHotelNaoEncontrado = msgHotelNaoEncontrado + '<p style="font-size:16px; font-weight:bold; margin-top:5px;">Desculpe-nos, não há disponibilidade para esta data ou destino.</p>';
    msgHotelNaoEncontrado = msgHotelNaoEncontrado + '<p style="font-size:15px; margin-top:10px;">Por favor, informe uma outra data ou novo destino e faça uma nova pesquisa.</p></div>';

    var render = {
    	/*topo: function(tgA, tgH){
    	//var args = decodeURIComponent('idaVolta=true&APTorigem=S%C3%A3o+Paulo+%2F+SP%2C+Brasil+-+Todos+aeroportos+%28SAO%29&origem=SAO&APTdestino=Rio+de+Janeiro+%2F+RJ%2C+Brasil+-+Todos+aeroportos+%28RIO%29&destino=RIO&classe=&cias=&dataida=10%2F02%2F2010&datavolta=20%2F02%2F2010&destLocation=sao+paulo%2C+brasil&destCode=4953&checkin=10%2F02%2F2010&checkout=20%2F02%2F2010&totquartos=1&adts1=1&chds1=0&adts2=0&chds2=0&adts3=0&chds3=0&adts4=0&chds4=0&ageschds=');
    	//var args2 = decodeURIComponent('idaVolta=true&APTorigem=S%C3%A3o+Paulo+%2F+SP%2C+Brasil+-+Todos+aeroportos+%28SAO%29&origem=SAO&APTdestino=Rio+de+Janeiro+%2F+RJ%2C+Brasil+-+Todos+aeroportos+%28RIO%29&destino=RIO&classe=&cias=&dataida=10%2F02%2F2010&datavolta=20%2F02%2F2010&destLocation=sao+paulo%2C+brasil&destCode=4953&checkin=10%2F02%2F2010&checkout=20%2F02%2F2010&totquartos=1&adts1=1&chds1=0&adts2=0&chds2=0&adts3=0&chds3=0&adts4=0&chds4=0&ageschds=');
            
    	This.exec.loadTemplate();
            
    	var args = decodeURIComponent(window.location.search.substring(1) + '&ageschds=0');
    	var args2 = decodeURIComponent(window.location.search.substring(1) + '&ageschds=0');
            
    	args = replaceAll(args, "+", " ");
                        
    	tpl.topoAereoHotel.origem = QueryString_SetQS(args, 'APTorigem').split("-")[0];
    	tpl.topoAereoHotel.destino = QueryString_SetQS(args, 'APTdestino').split("-")[0];
    	tpl.topoAereoHotel.dataSaida = QueryString_SetQS(args, 'dataida');
    	tpl.topoAereoHotel.dataVolta = QueryString_SetQS(args, 'datavolta');
    	tpl.topoAereoHotel.qtdQuartos = QueryString_SetQS(args, 'totquartos');
                  
    	args = replaceAll(args, "/", "");
            
    	tgA += '&' + args;
    	tgH += '&' + args2;
            
    	This.aereoHotel.SrcIframeAereo = tgA;
    	This.aereoHotel.SrcIframeHotel = tgH;
            
    	//$('iframeAereo').src = tgA;
    	//$('iframeHotel').src = tgH;
            
    	This.goTo.passo(1);
            
    	return tpl.topoAereoHotel.getHtml();
    	},*/
    	topo: function(tgA, tgH, args) {
    		//var args = decodeURIComponent('idaVolta=true&APTorigem=S%C3%A3o+Paulo+%2F+SP%2C+Brasil+-+Todos+aeroportos+%28SAO%29&origem=SAO&APTdestino=Rio+de+Janeiro+%2F+RJ%2C+Brasil+-+Todos+aeroportos+%28RIO%29&destino=RIO&classe=&cias=&dataida=10%2F02%2F2010&datavolta=20%2F02%2F2010&destLocation=sao+paulo%2C+brasil&destCode=4953&checkin=10%2F02%2F2010&checkout=20%2F02%2F2010&totquartos=1&adts1=1&chds1=0&adts2=0&chds2=0&adts3=0&chds3=0&adts4=0&chds4=0&ageschds=');
    		//var args2 = decodeURIComponent('idaVolta=true&APTorigem=S%C3%A3o+Paulo+%2F+SP%2C+Brasil+-+Todos+aeroportos+%28SAO%29&origem=SAO&APTdestino=Rio+de+Janeiro+%2F+RJ%2C+Brasil+-+Todos+aeroportos+%28RIO%29&destino=RIO&classe=&cias=&dataida=10%2F02%2F2010&datavolta=20%2F02%2F2010&destLocation=sao+paulo%2C+brasil&destCode=4953&checkin=10%2F02%2F2010&checkout=20%2F02%2F2010&totquartos=1&adts1=1&chds1=0&adts2=0&chds2=0&adts3=0&chds3=0&adts4=0&chds4=0&ageschds=');

    		This.exec.loadTemplate();

    		var args1 = decodeURIComponent(args + '&ageschds=0');
    		var args2 = decodeURIComponent(args + '&ageschds=0');

    		args1 = replaceAll(args1, "+", " ");

    		tpl.topoAereoHotel.origem = QueryString_SetQS(args1, 'APTorigem').split("-")[0];
    		tpl.topoAereoHotel.destino = QueryString_SetQS(args1, 'APTdestino').split("-")[0];
    		tpl.topoAereoHotel.dataSaida = QueryString_SetQS(args1, 'dataida');
    		tpl.topoAereoHotel.dataVolta = QueryString_SetQS(args1, 'datavolta');
    		tpl.topoAereoHotel.qtdQuartos = QueryString_SetQS(args1, 'totquartos');

    		args1 = replaceAll(args1, "/", "");

    		tgA += '&' + args1;
    		tgH += '&' + args2;

    		This.aereoHotel.SrcIframeAereo = tgA;
    		This.aereoHotel.SrcIframeHotel = tgH;

    		//$('iframeAereo').src = tgA;
    		//$('iframeHotel').src = tgH;

    		This.goTo.passo(1);

    		return tpl.topoAereoHotel.getHtml();
    	},

    	agencias: function() {
    		AgenciaPacote = new jAgenciaPacote();

    		// tratando o código da operadora que está vindo dos "portlets".
    		var codOperadoraPortlet = window.iframeHotel.getOperadoraLogada().value;
    		var dtOperadora = clDetalhesPacote.getDadosEmpresaB2B(codOperadoraPortlet).value;

    		if (dtOperadora != null && dtOperadora.rows.count() > 0) {
    			var codOperadora = dtOperadora.rows[0].CodEmpresa;
    			AgenciaPacote.goTo.mainAereoHotel(codOperadora);
    		} else {
    			// something wrong here...
    		};
    	},

    	passo: function(i) {
    		for (var j = 1; j < 6; j++) {
    			if (i == j) {
    				eval("tpl.passo.bold" + j.toString() + " = 'bold'");
    				eval("tpl.passo.color" + j.toString() + " = '#FFFFFF'");
    			}
    			else {
    				eval("tpl.passo.bold" + j.toString() + " = 'bold'");
    				eval("tpl.passo.color" + j.toString() + " = '#666666'");
    			};

    			if (i == 6)
    				eval("tpl.passo.i = 'final'");
    			else
    				eval("tpl.passo.i = '" + i + "'");

    		};
    		return tpl.passo.getHtml();
    	},
    	
    	prazoCancelamentoCheckin: function() {

    		var prazoCanc = 0, temPrazo = false, ret = [];

    		//-- Verifica qual prazo de cancelamento é menor
    		if (This.aereoHotel.dtPrazoAereo != undefined) {
    			for (var i = 0; i < This.aereoHotel.dtPrazoAereo.rows.length; i++) {
    				if (This.aereoHotel.dtPrazoAereo.rows[0].prazo > prazoCanc) {
    					prazoCanc = parseInt(This.aereoHotel.dtPrazoAereo.rows[0].prazo);
    				};
    				temPrazo = true;
    			};
    		};

    		//-- Pega o menor cancelamento entre o Aereo e o Hotel
    		if (This.aereoHotel.dtPrazoHotel != undefined) {
    			if (This.aereoHotel.dtPrazoHotel.rows.length > 0) {
    				if (This.aereoHotel.dtPrazoHotel.rows[0].prazo < prazoCanc) {
    					prazoCanc = This.aereoHotel.dtPrazoHotel.rows[0].prazo;
    				};
    				temPrazo = true;
    			};
    		};

    		//-- Prazo de Cancelamento e Checkin
    		if (temPrazo) {
    			ret[0] = This.aereoHotel.dtPrazoHotel.rows[0].prazo + "&nbsp;dia(s)";
    			ret[1] = This.aereoHotel.dtPrazoHotel.rows[0].prazoCheckin + "&nbsp;h";
    		}
    		else {
    			ret[0] = "Prazo de cancelamento não definido.";
    			ret[1] = "Prazo de checkin não definido.";
    		};

    		return ret;
    	},

    	// render.fillPayment()
    	fillPayment: function() {
    		if (This.aereoHotel.HotelAcceptPaymentCartao) {
    			if ($('htPaymentType2AMERICANEXPRESS'))
    				window.iframeHotel.document.getElementById('htPaymentType2AMERICANEXPRESS').checked = $('htPaymentType2AMERICANEXPRESS').checked;

    			if ($('htPaymentType2MASTERCARD'))
    				window.iframeHotel.document.getElementById('htPaymentType2MASTERCARD').checked = $('htPaymentType2MASTERCARD').checked;

    			if ($('htPaymentType2VISA'))
    				window.iframeHotel.document.getElementById('htPaymentType2VISA').checked = $('htPaymentType2VISA').checked;


    			window.iframeHotel.document.getElementById('htPmtCard_cardHolderName2').value = $get('htPmtCard_cardHolderName2');

    			//-- Valida CPF
    			if (!$get("htPmtCard_CPF").replace(".", "").replace(".", "").replace("-", "").isCPF()) {
    				alert('CPF inválido.');
    				return false;
    			};

    			/* REFACTORING NESSA VALIDAÇÃO*/
    			// validar CC para VISA
    			if ($get('htPmtCard_cardNumber2').replace(".", "").replace(".", "").replace(".", "").isVisa()) {
    				window.iframeHotel.document.getElementById('htPmtCard_cardNumber2').value = $get('htPmtCard_cardNumber2');
    			} else {
    				if (!$get('htPmtCard_cardNumber2').replace(".", "").replace(".", "").replace(".", "").isMasterCard()) {
    					alert('Cartão de Crédito inválido.');
    					return false;
    				};
    			};

    			window.iframeHotel.document.getElementById('htPmtCard_cardSecurity2').value = $get('htPmtCard_cardSecurity2');
    			window.iframeHotel.document.getElementById('htPmtCard_ExpireMonth2').value = $get('htPmtCard_ExpireMonth2');
    			window.iframeHotel.document.getElementById('htPmtCard_ExpireYear2').value = $get('htPmtCard_ExpireYear2');
    		}
    		return true;
    	},
    	
    	fillPaxAereo: function() {
    	    var iAgeADT = 0;
			var iAgeCHD = 0;
			var iAgeINF = 0;
			
    		for (var i = 0; i < This.aereoHotel.HotelTrip.roomStays.length; i++) {
    			
    			for (var j = 0; j < This.aereoHotel.HotelTrip.roomStays[i].paxes.length; j++) {
    				var sAge = '';

    				if (This.aereoHotel.HotelTrip.roomStays[i].paxes[j].ageCode == 1) {
    					sAge = 'ADT';
    					try {
    						window.iframeAereo.document.getElementById('txtNome_' + sAge + '_' + (iAgeADT)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].name;
    						window.iframeAereo.document.getElementById('txtSobrenome_' + sAge + '_' + (iAgeADT)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].surname;
    						window.iframeAereo.document.getElementById('txtIdade_' + sAge + '_' + (iAgeADT)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].age;
    						window.iframeAereo.document.getElementById('selSexo_' + sAge + '_' + (iAgeADT)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].sexo;
    					} catch (e) { };
    					iAgeADT++;
    				} else if (This.aereoHotel.HotelTrip.roomStays[i].paxes[j].ageCode == 2) {
    					sAge = 'CHD';
    					try {
    						window.iframeAereo.document.getElementById('txtNome_' + sAge + '_' + (iAgeCHD)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].name;
    						window.iframeAereo.document.getElementById('txtSobrenome_' + sAge + '_' + (iAgeCHD)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].surname;
    						window.iframeAereo.document.getElementById('selSexo_' + sAge + '_' + (iAgeCHD)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].sexo;
    						window.iframeAereo.document.getElementById('txtIdade_' + sAge + '_' + (iAgeCHD)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].age;
    					} catch (e) { };
    					iAgeCHD++;
    				} else {
    					sAge = 'INF';
    					try {
    						window.iframeAereo.document.getElementById('txtNome_' + sAge + '_' + (iAgeINF)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].name;
    						window.iframeAereo.document.getElementById('txtSobrenome_' + sAge + '_' + (iAgeINF)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].surname;
    						window.iframeAereo.document.getElementById('selSexo_' + sAge + '_' + (iAgeINF)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].sexo;
    						window.iframeAereo.document.getElementById('txtIdade_' + sAge + '_' + (iAgeINF)).value = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].age;
    					} catch (e) { };
	   					iAgeINF++;
    				}
    			};
    		}
    		return true;
    	},
    	
    	renderPaxes: function() {
    		var sb = new StringBuilder();

    		for (var i = 0; i < This.aereoHotel.HotelTrip.roomStays.length; i++) {
    			for (var j = 0; j < This.aereoHotel.HotelTrip.roomStays[i].paxes.length; j++) {
    				try {
    					if (This.aereoHotel.HotelTrip.roomStays[i].paxes[j].ageCode == 1)
    						tpl.paxes.tipoPax = 'Adulto';
    					else if (This.aereoHotel.HotelTrip.roomStays[i].paxes[j].ageCode == 2)
    						tpl.paxes.tipoPax = 'Criança';
    					else
    						tpl.paxes.tipoPax = 'Infantil';

    					tpl.paxes.nome = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].name;
    					//tpl.paxes.idade = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].age;
    					tpl.paxes.sobrenome = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].surname;
    					//tpl.paxes.sexo = This.aereoHotel.HotelTrip.roomStays[i].paxes[j].sexo.toString() == '1' ? 'Masculino' : 'Feminino';

    					sb.append(tpl.paxes.getHtml());
    				}
    				catch (e) {
    				}
    			};
    		};
    		return sb.toString();
    	}
    };
    
    var startEnv = {
        showLoading: function(){
            $('startEventLoadingAH').style.visibility = 'visible';
        },
        hideLoading: function(){
            $('startEventLoadingAH').style.visibility = 'hidden';
        },
		setSrcIframeAereo: function() {
		    startEnv.fillTotalPax(This.aereoHotel.SrcIframeAereo);
			$('iframeAereo').src = This.aereoHotel.SrcIframeAereo;
		},
		setSrcIframeHotel: function() {
            $('iframeHotel').src = This.aereoHotel.SrcIframeHotel;
		},
		fillTotalPax: function(qs) {
		    This.totalPax.adts1 = QueryString_SetQS(qs, 'adts1');
            This.totalPax.adts2 = QueryString_SetQS(qs, 'adts2');
            This.totalPax.adts3 = QueryString_SetQS(qs, 'adts3');
            This.totalPax.adts4 = QueryString_SetQS(qs, 'adts4');
            This.totalPax.chds1 = QueryString_SetQS(qs, 'chds1');
            This.totalPax.chds2 = QueryString_SetQS(qs, 'chds2');
            This.totalPax.chds3 = QueryString_SetQS(qs, 'chds3');
            This.totalPax.chds4 = QueryString_SetQS(qs, 'chds4');
		},
        drawRoomsMail: function(avResult) {

            //debugger;
            var sbRooms = new StringBuilder();
            var tmpRo = tpl.email_room;

            var tabRoomOptions = avResult.tables.RoomOptions;

            var tabRoomPaxes = avResult.tables.RoomPaxes;
            var itRoomPaxes = tabRoomPaxes.getIterator("codRoomOption");


            var tabRoomPolicies = avResult.tables.RoomPolicies;
            var itRoomPolicies = tabRoomPolicies.getIterator("codRoomOption");

            var tabRoomType = avResult.tables.RoomTypes;
            var itRoomType = tabRoomType.getIterator("codRoomType");

            var _locVTP = avResult.tables.HotelTrip.rows[0].LOCTrip;
            var resultHotelBets = clDetalhesPedido.getDadosHotelBetsPolicy_Reservation_PedidoHotel(_locVTP).value;

            for (var r = 0; r < tabRoomOptions.rows.length; r++) {
                var rowRo = tabRoomOptions.rows[r];
                tmpRo.clearItems();
                tmpRo.roomNumber = (r + 1);

                var sbPx = new StringBuilder();
                itRoomPaxes.findByKey(rowRo.codRoomOption);


                for (itRoomPaxes.moveFirst(); itRoomPaxes.hasNext(); itRoomPaxes.moveNext()) {
//                    if (r > 0 || sbPx.toString() != "") {
//                        // sbPx.append("| ");
//                        sbPx.append("<br />");
//                    }
                    sbPx.appendFormat('{0}', itRoomPaxes.row.FirstName + ' ' + itRoomPaxes.row.LastName, "<br /><br />");
                }

                tmpRo.roomPaxes = sbPx.toString();

                itRoomType.findByKey(rowRo.codRoomType);

                tmpRo.roomResume = itRoomPaxes.row.RoomType;
                tmpRo.roomDescription = itRoomType.row.RoomDescription;

                tmpRo.roomServices = "Reserva de Hotel";

                //-- se o resultado for igual a zero nao é hotelbets entao nao completa os dados extras!!!
                if (resultHotelBets.tables.Table.rows.count() == 0) {
                    tmpRo.dadosExtra = '';
                }
                else {
                    var sbHotelBets = new StringBuilder();
                    sbHotelBets.append('<table cellpadding="1" cellspacing="1" style="font-family:Arial, Helvetica, sans-serif; font-size: 12px; color:#000000;">');
                    sbHotelBets.append('<tr><td valign="top"><strong>BOOKING REFERENCE: </strong>');
                    sbHotelBets.append(resultHotelBets.tables.Table1.rows[r].BookReference);
                    sbHotelBets.append('</td></tr><tr><td valign="top"><strong>YOUR REFERENCE: </strong>');
                    sbHotelBets.append(resultHotelBets.tables.Table1.rows[r].YourReference);
                    sbHotelBets.append('</td></tr><tr><td valign="top"><strong>Remarks: </strong>');
                    sbHotelBets.append(resultHotelBets.tables.Table.rows[r].policyText);
                    sbHotelBets.append('</td></tr><tr><td valign="top">Payable through ');
                    sbHotelBets.append(resultHotelBets.tables.Table1.rows[r].Supplier);
                    sbHotelBets.append(' acting as agent for the service operating company, details of which can be provided upon request. VAT: ');
                    sbHotelBets.append(resultHotelBets.tables.Table1.rows[r].VAT);
                    sbHotelBets.append(' Reference: ');
                    sbHotelBets.append(resultHotelBets.tables.Table1.rows[r].YourReference);
                    sbHotelBets.append('</td></tr></table>');
                    tmpRo.dadosExtra = sbHotelBets.toString();
                };

                sbRooms.append(tmpRo.getHtml());
            }
            return sbRooms.toString();
        }
    };

    this.exec = {
        setDadosAereoPgto: function(pDadosA) {
            dadosAereo = new jDadosAereo();
            dadosAereo.dataIda = pDadosA.dataIda;
            dadosAereo.dataVolta = pDadosA.dataVolta;
            dadosAereo.iataOrigem = pDadosA.iataOrigem;
            dadosAereo.iataDestino = pDadosA.iataDestino;
            dadosAereo.classe = pDadosA.classe;
            dadosAereo.numVoo = pDadosA.numVoo;
            dadosAereo.ciaAerea = pDadosA.ciaAerea;
            dadosAereo.nome = pDadosA.nome;
            dadosAereo.sobrenome = pDadosA.sobrenome;
            dadosAereo.idade = pDadosA.idade;
            dadosAereo.tipo = pDadosA.tipo;
        },
        loadTemplate: function() {
            tpl = new Template("AereoHotel");
        },
        logAlertsMsg: function(text) {
            try {
                clDetalhesPedido.saveLogAlerts(text);
            }
            catch (e) {
            };
        },
        renderTopo: function(tgA, tgH, args) {
            $html(ctrlRefs.divTopoAereoHotel(), render.topo(tgA, tgH, args));

            // Inicia o IFrame do Aereo
            startEnv.setSrcIframeAereo();

            if ($queryString('areaAgente') == 'true') {
                document.body.style.background = '#FFFFFF';
                $('centroTopoPeq').style.display = 'none';
            };
        },
        renderCarrinhoAereo: function() {
            var sb = new StringBuilder();
            sb.append(window.iframeAereo.document.getElementById('carrinho').innerHTML);
            sb.replace('<th></th>', '');

            $html($('divCarrinhoAereo'), '<br><div style="width:99%; text-align:left;">' + sb.toString() + '</div>');
        },
        persistController: function() {
            try {
                clDetalhesPedido.persistController(controller.toXml());
            }
            catch (e) {
            };
        },
        sendVouncher: function(htmlAg) {
            var sb = new StringBuilder();

            tpl.email.numberOfTransact = This.aereoHotel.HotelTripResult.tables.HotelTrip.rows[0].LOCTrip;
            tpl.email.locHotel = This.aereoHotel.LocTripAereo.value;
            tpl.email.innerPassenger = render.renderPaxes();
            tpl.email.hotelName = This.aereoHotel.HotelTrip.hotel.refName;
            tpl.email.hotelDescription = This.aereoHotel.HotelTripResult.tables.HotelReferences.rows[0].shortDescription;
            tpl.email.checkin = This.aereoHotel.HotelTrip.checkin.toString('dd/MM/yyyy');
            tpl.email.checkout = This.aereoHotel.HotelTrip.checkout.toString('dd/MM/yyyy');
            tpl.email.roomNumber = This.aereoHotel.HotelTrip.roomStays.length;

            tpl.email.htRooms = startEnv.drawRoomsMail(This.aereoHotel.HotelTripResult);

            if (PubLogin.getSession('Nome') != "") {
                tpl.email.nomeResponsavel = PubLogin.getSession('Nome');
            }
            else {
                tpl.email.nomeResponsavel = "Não informado";
            };

            if (PubLogin.getSession('Email') != "") {
                tpl.email.emailResponsavel = PubLogin.getSession('Email');
            }
            else {
                tpl.email.emailResponsavel = "Não informado";
            };

            if (PubLogin.getSession('TelefoneResidencial') != "") {
                tpl.email.foneResponsavel = PubLogin.getSession('TelefoneResidencial');
            }
            else {
                tpl.email.foneResponsavel = "Não informado";
            };

            if (PubLogin.getSession('TelefoneCelular') != "") {
                tpl.email.celularResponsavel = PubLogin.getSession('TelefoneCelular');
            }
            else {
                tpl.email.celularResponsavel = "Não informado";
            };


            var totPax = 0;
            for (var i = 0; i < This.aereoHotel.HotelTrip.roomStays.length; i++) {
                for (var j = 0; j < This.aereoHotel.HotelTrip.roomStays[i].paxes.length; j++) {
                    totPax++;
                }
            };
            tpl.email.paxResume = totPax;

            var voos = new StringBuilder();
            voos.append($('carrinho_ctn44_voucher').innerHTML);
            tpl.email.innerFlightSelected = voos.toString();

            //-- Prazo cancelamento
            var prazoCancCheckin = render.prazoCancelamentoCheckin();
            tpl.email.prazoCancelamento = prazoCancCheckin[0];
            tpl.email.prazoCheckin = prazoCancCheckin[1];


            // variaveis globais
            //tpl.email.totalHospedagem = totalHospVoucher;
            //tpl.email.totalAereo = totalAereoVoucher;
            //tpl.email.totalGeral = totalGeralVoucher;
            tpl.email.valores = txtValores;


            tpl.email.nomeAgencia = agenciaVoucher;
            tpl.email.telefoneAgencia = telefoneVoucher;
            tpl.email.emailAgencia = emailVoucher;
            tpl.email.operadora = operadoraVoucher;


            tpl.email.observacoes = '';

            //-- Encoder conteudo email
            Encoder.EncodeType = "numerical";
            Encoder.EncodeType = "entity";
            var encoded = Encoder.htmlEncode(tpl.email.getHtml());

            var emails = [];

            try {
                //-- B2C
                emails.push(PubLogin.getSession('Email')); //-- Email do usuário logado
                //emails.push(clDetalhesPedido.getEmailEmpresa(DetalhesPacote.codOperadoraPacote).value); //-- Email da Operadora
            }
            catch (e) {
                //-- Area do Agente
                var dtUserB2B = parent.Usuarios.pesquisar(parent.jsVbB2B.codUsuario, 0, "", true, 0).value; //int codUsuario, int codEmpresa, string email, bool ativo,int pNivelAcesso
                emails.push(dtUserB2B.rows[0].Email);
            }

            //-- Pega os e-mails das agencias envolvidas            
            try {
                var agencias = AgenciaPacote.exec.getAgenciasSelecionadas();

                for (var i = 0; i < agencias.length; i++)
                    emails.push(clDetalhesPedido.getEmailEmpresa(agencias[i]).value);
            }
            catch (e) {
                var codEmpresaB2B = parent.jsVbB2B.codEmpresa;
                var dtDadosAgencia = parent.Empresas.listar(codEmpresaB2B).value;
                emails.push(dtDadosAgencia.rows[0].EmailRecebimentoPedidos);
            };

            // ENVIA EMAIL            
            try {
                //-- B2C
                clDetalhesPedido.enviarEmail(encoded, emails, "AH");
            }
            catch (e) {
                //-- B2B - Area Agente
                parent.AreaAgente.enviarEmail(encoded, emails, "AH");
            };
        },
        setDtPrazoHotel: function(pDtPrazoHotel) {
            This.aereoHotel.dtPrazoHotel = pDtPrazoHotel;
        },
        setDtPrazoAereo: function(pDtPrazoAereo) {
            This.aereoHotel.dtPrazoAereo = pDtPrazoAereo;
        },
        setTelaAcaoSession: function(pNomeTela) {
            try {
                clLogin.setTelaAcaoSession(pNomeTela);
            }
            catch (e) { };
        }
    };

    this.reservation = {
        pagamentoPopup: function(pCodPedido) {
            codPedidoVB = pCodPedido;
            This.reservation.doReservationAereo();
        },
        doValidation: function() {
            var msgError = 'Por favor, você deve informar os seguintes dados abaixo para continuar: \n';
            var error = false;

            if ($queryString("areaAgente") != "true") {
                if (!AgenciaPacote.exec.isAgenciaSelecionada()) {
                    msgError += '- Selecione uma Agência.\n';
                    error = true;
                };
            };

            if ($get('htPmtCard_cardHolderName2') == '') {
                msgError += '- Nome impresso no Cartão.\n';
                error = true;
            }

            if ($get('htPmtCard_cardNumber2') == '') {
                msgError += '- Número do Cartão.\n';
                error = true;
            }

            //-- Cod Segurança
            if ($get('htPmtCard_cardSecurity2') == "") {
                msgError += ('- Informe o código de segurança do cartão');
                error = true;
            };

            //-- cpf
            if ($get('htPmtCard_CPF') == "") {
                msgError += ('- Informe o CPF do usuário');
                error = true;
            }
            else {
                if (!$get('htPmtCard_CPF').isCPF()) {
                    msgError += ('- CPF do usuário incorreto');
                    error = true;
                };
            };

            //-- Valida Validade Cartão
            var mesCartao = parseInt($get('htPmtCard_ExpireMonth2'));
            var anoCartao = parseInt($get('htPmtCard_ExpireYear2'));
            var ano = new Date().toString("dd/MM/yyyy");
            var mesAtual = parseInt(ano.toString().split("/")[1]);
            var anoAtual = parseInt(ano.toString().split("/")[2]);

            if (anoCartao <= anoAtual) {
                if (mesCartao < mesAtual) {
                    msgError += ("- Validade do Cartão Inválida");
                    error = true;
                };
            };

            //            if ($('htPmtCard_ExpireMonth2').selectedIndex == 0) {
            //                msgError += '- Validade Mês.\n';
            //                error = true;
            //            }

            //            if ($('htPmtCard_ExpireYear2').selectedIndex == 0) {
            //                msgError += '- Validade Ano.\n';
            //                error = true;
            //            }

            if (error) {
                try {
                    $('startEventLoadingAH').style.display = 'none';
                } catch (e) { };

                alert(msgError);
                return false;
            };

            return true;
        },

        doReservationHotel: function() {
            if (This.aereoHotel.StatusReservationAereo) {
                window.iframeHotel.doReservationHotel();
            }
            else {
                This.reservation.doFinishReservation();
            }
        },
        doReservationAereo: function() {
            startEnv.showLoading();
            window.iframeAereo.doReservationAereo();
        },
        //**********************************************
        doReservation: function() {
            window.scroll(0, 0);
            //startEnv.showLoading();

            if (!render.fillPaxAereo()) {
                return false;
            };

            /*
            if (!render.fillPayment()) {
            try {
            $('startEventLoadingAH').style.display = 'none';
            } catch (e) { };
            return false;
            };*/

            /*
            if (!This.reservation.doValidation()) {
            return false;
            };*/

            //-- Comment by Wagner Vieira 19/01/2010 - CELAR SALE DESATIVADO
            //if (!This.reservation.doClearSale())
            //return false;

            //if (ccCode != '') {
            //----------------- >>>>>>>>> CLER SALE <<<<<<<<<< ---------------//
            //    var statusClearSale = VTPInterface.verificaStatusClearSale("false", parseFloat(controller.aereoHotel.ValorTotal).formatNumber(2, true).replace('.', ''),
            //        $get('htPmtCard_CPF'), ccCode, $get('htPmtCard_cardNumber2'), $get('htPmtCard_cardHolderName2')).value;

            //    codHistoricoClearSale = VTPInterface.gravaDadosClearSale("PedidoAereoHotelB2C", statusClearSale).value;	    
            //--------------------------------------------------------------------------------------//
            //}; 


            //--Pagamentos--//
            try {
                titularCC = $get('htPmtCard_cardHolderName2');
                cpfCC = $get('htPmtCard_CPF');
                numeroCC = $get('htPmtCard_cardNumber2');
                codSeguranca = $get('htPmtCard_cardSecurity2');
                validadeCC = new Date(parseInt($get('htPmtCard_ExpireYear2')), parseInt($get('htPmtCard_ExpireMonth2')) - 1, 1, 23, 59, 59, 0);
                validadeCC = validadeCC.addMonths(1).addDays(-1);
            } catch (e) {
                globalCodOpPgto = 0;
                titularCC = '';
                cpfCC = '';
                numeroCC = '';
                codSeguranca = '';
                validadeCC = '';
            };

            //This.reservation.doReservationAereo(); //-- Comment by Wagner - 19/10/2010 - Nova Estrutura Pgto

            //debugger;
            /*************** NOVA ESTRUTURA PAGAMENTO ****************/
            var codOperadoraPortlet = window.iframeHotel.getOperadoraLogada().value;
            var dtOperadora = clDetalhesPacote.getDadosEmpresaB2B(codOperadoraPortlet).value;

            var codOperadoraVB;
            if (dtOperadora != null && dtOperadora.rows.count() > 0)
                codOperadoraVB = dtOperadora.rows[0].CodEmpresa;

            var hashPgto = clDetalhesPedido.getUrlPgtoAH_VB(PubLogin.getSession('codUsuario'), controller.aereoHotel.ValorTotal.toString().replace(".", ",")
			                                                , codOperadoraVB, codPedidoVB, dadosAereo).value;
            openModalDialog(hashPgto, "");
        },
        doClearSale: function() {
            //********************* Envia consulta ao Clear Sale -  by Jorge Aires ********************--//
            //  STATUS retornado:
            //              BAIXO   - 0
            //              MÉDIO   - 1
            //              ALTO    - 2
            //              CRÍTICO - 3 
            //              ERRO    - 4
            //              ERRO DADOS DE ENDEREÇO INCOMPLETO - 5
            //  PARÂMETRO DE ENTRADA:
            //              string Reanalise - Flag que indica se é novo ou já existe - FALSE = Novo
            //              int CodPedido - Código do Pedido Atual - Se ainda não existir deve ser "0"
            //              string TotalAmount - Valor Total
            //              string CPF - CPF Obrigatório
            //              string ccTipo - Sigla do cartão de crédito => VI - Visa; MC - MasterCard
            //              string ccNumero - Númeto do Cartão de crédito
            //              string ccNome - Nome no cartão
            //              int ccExpMes - Mês de validade
            //              int ccExcAno - Ano de validade    

            if ($get('htPmtCard_cardNumber2').isMasterCard()) {
                ccCode = "MC";
            }
            else {
                if ($get('htPmtCard_cardNumber2').isVisa()) {
                    ccCode = "VI"
                }
                else {
                    alert('Cartão de Crédito inválido.');
                    return false;
                };
            };


            This.exec.setTelaAcaoSession("ClearSale AH - B2C");
            //return true;
            var statusClearSale = VTPInterface.RequestClearSaleV2(
            //window.iframeAereo.getCodOperadoraAereo().CodEmpresa,
                window.iframeHotel.getOperadoraLogada().value,
                "false",
                0,
                controller.aereoHotel.ValorTotal,
                $get('htPmtCard_CPF'),
                ccCode,
                $get('htPmtCard_cardNumber2'),
                $get('htPmtCard_cardHolderName2'),
                $get('htPmtCard_ExpireMonth2'),
                $get('htPmtCard_ExpireYear2')
            ).value;

            //--- Considera APROVADO que tiver no mínimo ALTO
            if (statusClearSale <= 2) {
                return true;
            }
            else {
                //--- Trata as respostas de erro do Clear Sale
                if (statusClearSale == 3 || statusClearSale == 4) {
                    alert('Seu pedido não foi aprovado! Por favor, atualize seus dados cadastrais ou informe outro cartão de crédito.');
                };

                if (statusClearSale == 5) {
                    alert('Seu pedido não foi aprovado! Por favor, atualize seus dados cadastrais antes de realizar uma nova compra.');
                };

                return false;
            };
        },
        getTripAereo: function() {
            return This.aereoHotel.AereoDs;
        },
        doCancelReservation: function() {
            try {
                // CANCELANDO HOTEL
                window.iframeHotel.doCancellation();

                // CANCELANDO AEREO
                window.iframeAereo.doCancellation();
            }
            catch (e) {

            }

            This.goTo.msgError();
        },
        doFinishReservation: function() {

            // verifica os status das reservas de hotel e de aereo e segue com o fluxo...
            if (This.aereoHotel.StatusReservationAereo &&
            This.aereoHotel.StatusReservationHotel &&
            This.aereoHotel.AfterDoReservationCBHotel) {
                // RESERVA DE HOTEL E DE AEREO CONCLUIDO
                // EMAILS ENVIADOS INDIVIDUALMENTE - RESOLVER
                // SALVAR PEDIDO NA TELA DE PAGAMENTO

                try {

                    // Valida Retorno do Hotel
                    var successHotel = false;
                    try {
                        for (var i = 0; i < This.aereoHotel.HotelTripResult.tables.CommStatistics.rows.length; i++) {
                            successHotel = new Boolean(This.aereoHotel.HotelTripResult.tables.CommStatistics.rows[i].Success);
                        };
                    }
                    catch (e) {
                        successHotel = false;
                    }

                    // Get Hotel LOCTrip
                    var hLOCTrip = null;
                    try {
                        for (var i = 0; i < This.aereoHotel.HotelTripResult.tables.HotelTrip.rows.length; i++) {
                            if (This.aereoHotel.HotelTripResult.tables.HotelTrip.rows[i].ReservationID)
                                hLOCTrip = This.aereoHotel.HotelTripResult.tables.HotelTrip.rows[i].LOCTrip;
                        };
                    }
                    catch (e) {
                        hLOCTrip = null;
                    }

                    try {

                        var codEmpresaAgencia, codUsuario, origemPedido, codOperadora;
                        //codOperadora = window.iframeAereo.getCodOperadoraAereo().CodEmpresa;
                        //codOperadora = window.iframeHotel.getOperadoraLogada().value; // Update by Wagner 26/04/2010

                        if (AgenciaPacote == null) {
                            AgenciaPacote = new jAgenciaPacote();
                        };

                        // tratando o código da operadora que está vindo dos "portlets".
                        var codOperadoraPortlet = window.iframeHotel.getOperadoraLogada().value;
                        var dtOperadora = clDetalhesPacote.getDadosEmpresaB2B(codOperadoraPortlet).value;

                        if (dtOperadora != null && dtOperadora.rows.count() > 0) {
                            var codOperadora = dtOperadora.rows[0].CodEmpresa;
                        } else {
                            // something wrong here...
                        };

                        if ($queryString("areaAgente") == "true") {
                            //-- Area Agente
                            codEmpresaAgencia = parent.jsVbB2b.codEmpresa;
                            codUsuario = parent.jsVbB2b.codUsuario;
                            origemPedido = 3; // Area Agente

                            This.exec.setTelaAcaoSession("Inserir Pedido AH - B2C");
                            parent.AreaAgente.inserirPedidoAereoHotelv3(
    							0, /* CodPedidoAereo_Hotel */
                                codOperadora, /* CodEmpresaOperadora */
                                codEmpresaAgencia, /* CodEmpresaAgencia */
                                codUsuario, /* CodUsuario */
                                0, /* CodPedidoMSPHotel */
                                0, /* CodPedidoMSPAereo */
                                controller.aereoHotel.HotelTripResult.tables.HotelTrip.rows[0].LOCTrip, /* LocVTPHotel */
                                controller.aereoHotel.LocTripAereo.value, /* LocVTPAereo */
                                controller.aereoHotel.ValorTotal, /* ValorTotal */
                                controller.aereoHotel.ValorHotel, /* ValorHotel */
                                controller.aereoHotel.ValorAereo, /* ValorAereo */
                                origemPedido, /* OrigemPedido */
                                "", /* IATAOrigem */
                                "", /* IATADestino */
                                "", /* DataPartida */
                                "", /* DataChegada */
                                "", /* LocCia */
                                "", /* Classe */
                                "", /* NumLugares */
                                "", /* CiaAerea */
                                controller.aereoHotel.HotelTripResult.tables.HotelTrip.rows[0].ReservationID, /* LocSource */
                                "", /* NomeSource */
                                "", /* CodHotel */
                                "", /* NomeHotel */
                                "", /* Checkin */
                                "", /* Checkout */
                                numeroCC,                                         //string NumeroCC, 
                                codSeguranca,                                       //int codCC, 
                                titularCC,                                        //string TitularCC, 
                                cpfCC,                                            //string CPFCC, 
                                validadeCC                                       //DateTime ValidadeCC,
                            );
                        } else {
                            //-- B2C
                            codEmpresaAgencia = AgenciaPacote.exec.getAgenciasSelecionadas()[0], /* CodEmpresaAgencia */
                            codUsuario = parseInt(PubLogin.getSession('codUsuario'));
                            origemPedido = 1; // B2C

                            var destCode = window.iframeHotel.$queryString("destCode");

                            var destLocation = window.iframeHotel.$queryString("destLocation");
                            destLocation = destLocation.toString().replace('%2C', ',');
                            destLocation = destLocation.toString().replace(/%\d[A-Z0-9]/g, ' ');
                            destLocation = destLocation.toString().replace(/\+/g, ' ');

                            This.exec.setTelaAcaoSession("Inserir Pedido AH - B2C");
                            var ret = clDetalhesPedido.inserirPedidoAereoHotelv3(
                                codPedidoVB, /* CodPedidoAereo_Hotel */
                                codOperadora, /* CodEmpresaOperadora */
                                (codEmpresaAgencia > 0 ? codEmpresaAgencia : codOperadora), /* CodEmpresaAgencia */
                                codUsuario, /* CodUsuario */
                                0, /* CodPedidoMSPHotel */
                                0, /* CodPedidoMSPAereo */
                                controller.aereoHotel.HotelTripResult.tables.HotelTrip.rows[0].LOCTrip, /* LocVTPHotel */
                                controller.aereoHotel.LocTripAereo.value, /* LocVTPAereo */
                                controller.aereoHotel.ValorTotal, /* ValorTotal */
                                controller.aereoHotel.ValorHotel, /* ValorHotel */
                                controller.aereoHotel.ValorAereo, /* ValorAereo */
                                origemPedido, /* OrigemPedido */
                                "", /* IATAOrigem */
                                "", /* IATADestino */
                                "", /* DataPartida */
                                "", /* DataChegada */
                                "", /* LocCia */
                                "", /* Classe */
                                "", /* NumLugares */
                                "", /* CiaAerea */
                                controller.aereoHotel.HotelTripResult.tables.HotelTrip.rows[0].ReservationID, /* LocSource */
                                "", /* NomeSource */
                                "", /* CodHotel */
                                "", /* NomeHotel */
                                "", /* Checkin */
                                "", /* Checkout */
                                numeroCC,                                           //string NumeroCC,
                                codSeguranca,                                      //int codCC, 
                                titularCC,                                        //string TitularCC, 
                                cpfCC,                                            //string CPFCC, 
                                validadeCC,                                       //DateTime ValidadeCC,
                                codCoeficiente,
                                codHistoricoClearSale,
                                destCode,
                                destLocation.split('/')[0]
                            );
                        };

                        var dtPedido = clDetalhesPedido.getDadosPedidoAereoHotel(controller.aereoHotel.HotelTripResult.tables.HotelTrip.rows[0].LOCTrip).value;
                        if (dtPedido != null && dtPedido.rows.length > 0) {
                            dtPedido = dtPedido.rows[0];

                            txtValores = '<b>Opção de Pagamento:</b> ' + dtPedido.Bandeira + '<br />';
                            txtValores += '<b>Forma de Pagamento:</b> ' + (dtPedido.ValorEntrada > 0 ? 'Entrada de R$ ' + parseFloat(dtPedido.ValorEntrada).formatNumber(2, true) + ' + ' : '') + (dtPedido.TotalVezes > 0 ? dtPedido.TotalVezes + 'x de R$ ' + parseFloat(dtPedido.ValorParcela).formatNumber(2, true) + '' + (dtPedido.CoeficienteParcelamento > 0 ? ' com juros' : ' sem juros') : 'À vista') + '<br />';
                            txtValores += '<b>Valor Total:</b> R$ ' + parseFloat(dtPedido.ValorTotal).formatNumber(2, true);

                            $html('valores', txtValores);
                        };

                        $('divValoresResumo').style.display = '';
                        $('brValoresResumo').style.display = '';
                        $('tbValoresAereoHotel').style.display = 'none';
                        $('brValoresAereoHotel').style.display = 'none';

                        //jDTOperadora = new jDatatable(window.aereoHotel.getDadosOperadora());

                        //$html('idNomeOperadora', jDTOperadora.getDrValue(0, "NomeFantasia"));
                        //$html('idNomeOperadora', 'MONARK TURISMO'); // quem faz hardcode (especialmente quem faz e esquece depois) faz xixi na cama...
                        try {
                            $html('idNomeOperadora', dtOperadora.rows[0].NomeFantasia);
                            operadoraVoucher = dtOperadora.rows[0].NomeFantasia;
                        }
                        catch (e) { }

                        try {
                            JDTdadosAgencia = new jDatatable(clDetalhesPacote.getNomeEmpresa((AgenciaPacote.exec.getAgenciasSelecionadas()[0] > 0 ? AgenciaPacote.exec.getAgenciasSelecionadas()[0] : codOperadora)).value);
                        }
                        catch (e) {
                            var codEmpresaB2B = parent.jsVbB2B.codEmpresa;
                            JDTdadosAgencia = parent.Empresas.listar(codEmpresaB2B).value;
                        };

                        try {
                            var htmlAgencia = '<b>Agência: </b>' + JDTdadosAgencia.getDrValue(0, "NomeFantasia") + '<br /><b>Telefone: </b>' + jsCommon.exec.formataTelefoneAgencias(JDTdadosAgencia.getDrValue(0, "Telefone")) + '<br /><b>Email: </b>' + JDTdadosAgencia.getDrValue(0, "EmailRecebimentoPedidos") + '';
                            $html('idNomeAgencia', htmlAgencia);

                            agenciaVoucher = JDTdadosAgencia.getDrValue(0, "NomeFantasia");
                            telefoneVoucher = jsCommon.exec.formataTelefoneAgencias(JDTdadosAgencia.getDrValue(0, "Telefone"));
                            emailVoucher = JDTdadosAgencia.getDrValue(0, "EmailRecebimentoPedidos");
                        }
                        catch (e) { }

                        //$html('idAgenciaEmail',JDTdadosAgencia.getDrValue(0, "NomeFantasia")+ ' - <b> Telefone /b>'+ jsCommon.exec.formataTelefoneAgencias(JDTdadosAgencia.getDrValue(0, "Telefone")));

                        // envia vouncher por e-mail.
                        This.exec.sendVouncher();

                        try {
                            //-- Wagner Vieira - Prazo Checkin e Cancelamento
                            var prazo = render.prazoCancelamentoCheckin();
                            $('divPrazoCancelamento').style.display = '';
                            $('brPrazoCancelamento').style.display = '';
                            //$('divPrazoCheckin').style.display = '';
                            //$('brPrazoCheckin').style.display = '';
                            $html('prazoCancelamento', prazo[0]);
                            //$html('prazoCheckin', prazo[1]);

                            $('divAgenciaOperadora').style.display = 'block';

                            // hide divs
                            $('divAgenciasMain').style.display = 'none';
                            //$('formasPagamento').style.display = 'none';
                            $('divConfirmarReserva').style.display = 'none';
                            //$('divDadosCartao').style.display = 'none';

                            $('divCodPedido').style.display = 'block';
                            $('codPedidoAereoHotel').innerHTML = This.aereoHotel.HotelTripResult.tables.HotelTrip.rows[0].LOCTrip + '/' + This.aereoHotel.LocTripAereo.value;
                        }
                        catch (e) { };

                        This.goTo.passo(6);
                        startEnv.hideLoading();
                        $('sucessoReserva').style.display = 'block';
                        $html('sucessoReserva', 'Parabéns! Sua reserva foi efetuada com sucesso. <br />Foi enviada por e-mail uma cópia da sua solicitação de reserva.<div>&nbsp;</div>');

                        try {
                            window.iframeHotel.atualizaReservaRobinAereoHotel(controller.CiaAerea, controller.CodEmpresaPortlet);
                        }
                        catch (e) { };
                    }
                    catch (e) {

                        This.exec.logAlertsMsg(e.message);
                        This.reservation.doCancelReservation();
                    }

                    // RETIRAR
                    //This.reservation.doCancelReservation();
                }
                catch (e) {
                    // CANCELAR RESERVA E INFORMAR O ERRO AO USUARIO
                    This.reservation.doCancelReservation();
                }
            }
            else {
                if (This.aereoHotel.AfterDoReservationCBHotel) {
                    // FLUXO DE CANCELAMENTO DE RESERVA
                    This.reservation.doCancelReservation();
                }
            }
        }
    };
    
    var openModalDialog = function(theURL, winName) 
    {             
        window.showModalDialog(theURL, winName, "dialogwidth: 820px; dialogheight: 500px; resizable: no");
//        if (result != undefined && result  > 0)
//        {
//            codPedidoVB = result;
//            This.reservation.pagamentoPopup(result);
//        }
//        else
//        {
//            //alert("Desculpe-nos! Não foi possível realizar seu pedido");
//        };

        if (clDetalhesPedido.verificarStatusPedido(codPedidoVB, "AH").value > 0)
        {
            This.reservation.pagamentoPopup(codPedidoVB);
        }
    };
    
    this.login = {
        doLogin: function()
        {
            This.exec.setTelaAcaoSession("Login AH - B2C");
            //PubLogin.doLogin(window.iframeHotel.retornoLogin);
            PubLogin.loginNovo(codPedidoVB, 5);
        },
        isLogado: function()
        {
            
            var prePedido = clDetalhesPedido.getPrePedidoAereoHotel(window.iframeAereo.getIATADestino()).value;
			codPedidoVB = prePedido;
			
            try {
                //-- B2C
                return PubLogin.isLogado();
            } 
            catch (e) {
                //-- Area Agente
                return true;
            };
            
        },
        getCodUsuario: function(){
            try {
                //-- B2C
                return PubLogin.getSession('codUsuario');
            } 
            catch (e) {
                //-- Area Agente
                return parent.jsVbB2b.codUsuario;
            };
         }
    };
    
    var ctrlRefs = {
        iframeAereo: function(){
            return $("iframeAereo");
        },
        iframeHotel: function(){
            return $("iframeHotel");
        },
        divAereoIframe: function(){
            return $("divAereoIframe");
        },
        divHotelIframe: function(){
            return $("divHotelIframe");
        },
        divAgenciaAereoHotel: function(){
            return $("divAgenciaAereoHotel");
        },
        divPassoAPasso: function(){
            return $("divPassoAPasso");
        },
        divTopoAereoHotel: function(){
            return $("divTopoAereoHotel");
        }
    };

    this.goTo = {
    	msgError: function() {
    		//alert('Por favor, faça uma nova busca.');
    		//window.location = 'http://novovb.vaibrasil.com.br/homevb.vxlpub';

    		if ($('sucessoReserva')) {
    			$html('sucessoReserva', '<font size="4" color="#990000"><b>Desculpe-nos! Houve um problema ao efetuar sua reserva.<br />Por favor, faça uma nova busca.</b></font><br />');
    			$html('divCarrinhoAereo', '<br /><br /><br /><br /><br /><br /><br />');
    			$('divCarrinhoAereo').style.display = '';
    			$('sucessoReserva').style.display = '';
    			$('divAgenciaAereoHotel').style.display = '';
    		};

    		if ($('divCarrinhoAereo'))
    			$('divCarrinhoAereo').style.display = 'none';

    		if ($('divAgenciaAereoHotel'))
    			$('divAgenciaAereoHotel').style.display = 'none';

    		startEnv.hideLoading();

    	},
    	hotel: function(dsRet) {
    		ctrlRefs.divAereoIframe().style.display = 'none';
    		ctrlRefs.divHotelIframe().style.display = '';
    		$('divCarrinhoAereo').style.display = '';

    		// Inicia o IFrame do Hotel
    		startEnv.setSrcIframeHotel();

    		This.aereoHotel.AereoDs = dsRet;

    		//window.iframeHotel.atualizaIframe();
    		This.goTo.passo(3);
    		This.exec.renderCarrinhoAereo();
    	},
    	pagamento: function() {
    		//startEnv.showLoading();
    		ctrlRefs.divAereoIframe().style.display = 'none';
    		ctrlRefs.divHotelIframe().style.display = 'none';
    		$('divAgenciaAereoHotel').style.display = '';

    		// PAXES
    		tpl.hotel_pagCC.paxes = render.renderPaxes();

    		// HOTEL
    		var totDiarias = 0;
    		var totServicos = 0;
    		var totTarifas = 0;
    		var totHotel = 0;
    		var currencyCode = '';

    		var qtdADT = 0;
    		var qtdCHD = 0;
    		var qtdINF = 0;

    		for (var i = 0; i < controller.aereoHotel.HotelTrip.roomStays.length; i++) {
    			if (controller.aereoHotel.HotelTrip.roomStays[i].totRates != undefined)
    				totDiarias += controller.aereoHotel.HotelTrip.roomStays[i].totRates;

    			if (controller.aereoHotel.HotelTrip.roomStays[i].totServices != undefined)
    				totServicos += controller.aereoHotel.HotelTrip.roomStays[i].totServices;

    			if (controller.aereoHotel.HotelTrip.roomStays[i].totTax != undefined)
    				totTarifas += controller.aereoHotel.HotelTrip.roomStays[i].totTax;

    			if (controller.aereoHotel.HotelTrip.roomStays[i].totTotal != undefined)
    				totHotel += controller.aereoHotel.HotelTrip.roomStays[i].totTotal;

    			//currencyCode = controller.aereoHotel.HotelTrip.roomStays[i].currencyCode;
    			currencyCode = 'R$';

    			for (var j = 0; j < controller.aereoHotel.HotelTrip.roomStays[i].paxes.length; j++) {
    				var pax = controller.aereoHotel.HotelTrip.roomStays[i].paxes[j];
    				if (pax.ageCode == 1) {	// ADT
    					qtdADT++;
    				} else if (pax.ageCode == 2) { // CHD
    					qtdCHD++;
    				} else { // INF
    					qtdINF++;
    				};
    			};
    		};

    		// fixDST
    		// Fixing javascript behavior on automatically adjusting Daylight Saving Time (2011-10-16, for example). - Hilton
    		var dataCheckIn = controller.aereoHotel.HotelTrip.checkin;
    		try {
    			if (dataCheckIn.getHours() != 0) {
    				var offset = 12 - dataCheckIn.addHours(12).getHours();
    				offset += 1; // + 1 porque o javascript vai tentar "corrigir" a data novamente se a hora for definida como "0";
    				dataCheckIn = dataCheckIn.addHours(offset);
    			};
    		} catch (e) { /* do nothing */ };

    		// fixDST
    		// Fixing javascript behavior on automatically adjusting Daylight Saving Time (2011-10-16, for example). - Hilton
    		var dataCheckOut = controller.aereoHotel.HotelTrip.checkout;
    		try {
    			if (dataCheckOut.getHours() != 0) {
    				var offset = 12 - dataCheckOut.addHours(12).getHours();
    				offset += 1; // + 1 porque o javascript vai tentar "corrigir" a data novamente se a hora for definida como "0";
    				dataCheckOut = dataCheckOut.addHours(offset);
    			};
    		} catch (e) { /* do nothing */ };

    		tpl.hotel_pagCC.nomeHotel = controller.aereoHotel.HotelTrip.hotel.refName;
    		//tpl.hotel_pagCC.checkOut = controller.aereoHotel.HotelTrip.checkout.toString('dd/MM/yyyy');
    		//tpl.hotel_pagCC.checkIn = controller.aereoHotel.HotelTrip.checkin.toString('dd/MM/yyyy');
    		tpl.hotel_pagCC.checkOut = dataCheckOut.toString("dd/MM/yyyy");
    		tpl.hotel_pagCC.checkIn = dataCheckIn.toString("dd/MM/yyyy");
    		tpl.hotel_pagCC.totDiarias = currencyCode + ' ' + totDiarias.formatNumber(2, true);
    		tpl.hotel_pagCC.totServicos = currencyCode + ' ' + totServicos.formatNumber(2, true);
    		tpl.hotel_pagCC.totTarifas = currencyCode + ' ' + totTarifas.formatNumber(2, true);
    		tpl.hotel_pagCC.totHotel = currencyCode + ' ' + totHotel.formatNumber(2, true);
    		totalHospVoucher = currencyCode + ' ' + totHotel.formatNumber(2, true);

    		/* ---------- */
    		var codOperadoraPortlet = window.iframeHotel.getOperadoraLogada().value;
    		var dtOperadora = clDetalhesPacote.getDadosEmpresaB2B(codOperadoraPortlet).value;

    		var codOperadora;
    		//var nomeOperadora;
    		if (dtOperadora != null && dtOperadora.rows.count() > 0) {
    			codOperadora = dtOperadora.rows[0].CodEmpresa;
    			//nomeOperadora = dtOperadora.value.rows[0].NomeFantasia;
    		};
    		/* ---------- */

    		var JDTdadosOperadora;
    		try {
    			//-- B2C
    			//JDTdadosOperadora = new jDatatable(clDetalhesPacote.getNomeEmpresa(window.iframeHotel.getOperadoraLogada().value));
    			JDTdadosOperadora = new jDatatable(clDetalhesPacote.getNomeEmpresa(codOperadora));
    			//alert("Aereo " + window.iframeAereo.getCodOperadoraAereo().CodEmpresa);
    			//alert("Hotel " + window.iframeHotel.getOperadoraLogada().value);
    			//JDTdadosOperadora = new jDatatable(clDetalhesPacote.getNomeEmpresa(window.iframeAereo.getCodOperadoraAereo().CodEmpresa));
    		} catch (e) {
    			//-- B2b - Area Agente
    			JDTdadosAgencia = parent.Empresas.listar(parseInt($queryString("codEmpresa"))).value;

    			//-- Verificar OPERADORA deve ser do aereo
    			//JDTdadosOperadora = new jDatatable(parent.Empresas.listar(window.iframeAereo.getCodOperadoraAereo().CodEmpresa).value);
    			JDTdadosOperadora = new jDatatable(parent.Empresas.listar(codOperadora).value); // Update by Wagner 26/04/2010
    		};

    		tpl.hotel_pagCC.operadora = JDTdadosOperadora.getDrValue(0, 'NomeFantasia');

    		This.aereoHotel.ValorHotel = totHotel;

    		// AEREO
    		var dsAereo = controller.aereoHotel.AereoDs.value;
    		var valorTarifas;
    		var valorTotalAereo = 0;

    		if (dsAereo != null && dsAereo != '') {
    			valorTarifas = dsAereo.tables.Tarifas.rows;

    			/* Cálculo total */
    			for (var i = 0; i < valorTarifas.length; i++) {
    				if (valorTarifas[i].tipoDePax == 'ADT') {
    					valorTotalAereo += valorTarifas[i].valorTotal * qtdADT;
    				} else if (valorTarifas[i].tipoDePax == 'CHD') {
    					valorTotalAereo += valorTarifas[i].valorTotal * qtdCHD;
    				} else if (valorTarifas[i].tipoDePax == 'INF') {
    					valorTotalAereo += valorTarifas[i].valorTotal * qtdINF;
    				};
    			};

    			totalAereoVoucher = currencyCode + ' ' + valorTotalAereo.formatNumber(2, true);
    			tpl.hotel_pagCC.totAereo = currencyCode + ' ' + valorTotalAereo.formatNumber(2, true);
    		} else {
    			This.reservation.doCancelReservation();
    		}

    		This.aereoHotel.ValorAereo = valorTotalAereo;
    		This.aereoHotel.ValorTotal = valorTotalAereo + totHotel;

    		totalGeralVoucher = currencyCode + ' ' + (valorTotalAereo + totHotel).formatNumber(2, true);

    		tpl.hotel_pagCC.totAereoHotel = currencyCode + ' ' + (valorTotalAereo + totHotel).formatNumber(2, true);
    		tpl.hotel_pagCC.agencias = '';
    		tpl.hotel_pagCC.dadosPagtoCartaoCredito = '<input id="" checked="checked" type="radio" /> À vista';

    		/*PAGAMENTO - by Jorge Aires*/
    		//            var arrayCC = window.iframeHotel.getArrayCC();
    		//            var AcceptPaymentCartao = true;
    		//            var formasPgtoVB = drawPaymentsTypesVaiBrasil(AcceptPaymentCartao, arrayCC);
    		//            tpl.hotel_pagCC.tiposPagamento = formasPgtoVB[1];
    		//            tpl.hotel_pagCC.formasPagamento = formasPgtoVB[0];     
    		//            tpl.hotel_pagCC.dadosPagtoCartaoCredito = formasPgtoVB[0];


    		$html(ctrlRefs.divAgenciaAereoHotel(), tpl.hotel_pagCC.getHtml());
    		//$html(ctrlRefs.divAgenciaAereoHotel(), "");

    		//-- Adiciona máscaras de CPF, CC, CodSeg - Wagner | 22/04/2010
    		//    		var o = $("htPmtCard_cardSecurity2");
    		//    		o.maskData = ['###', '   '];
    		//    		InputMask(o);

    		//    		var o = $("htPmtCard_CPF");
    		//    		o.maskData = ['###.###.###-##', '   .   .   -  '];
    		//    		InputMask(o);

    		//    		var o = $("htPmtCard_cardNumber2");
    		//    		o.maskData = ['####.####.####.####', '    .    .    .    '];
    		//    		InputMask(o);

    		//-- Fim Adiciona máscaras de CPF, CC

    		if ($queryString("areaAgente") != "true")
    			render.agencias();

    		startEnv.hideLoading();
    	},
    	passo: function(i) {
    		$html(ctrlRefs.divPassoAPasso(), render.passo(i));
    	}
    };
    
    var translateCreditCardIMG = function(cardCode)
    {
        switch (cardCode) {
            
           case "UNIVERSAL AIR TRAVEL CARD": 
                return "UT";
                break;
            
            case "BANKAMERICARD":
                break;
                
            case "CARTE BLANCHE":
                return "CBlanche";
                break;
                
            case "AMERICANEXPRESS": 
            case "AMERICAN EXPRESS":
            case "AMEX":
            case "americanexpress":
            case "AX":
                return "AX";
                break;
            
            case "VISA": 
            case "visa":    
            case "VI":
                return "VI";
                break;
                
            case "MASTERCARD": 
            case "mastercard":    
            case "MC":
                return "MC";
                break;
                                 
            case "DINERS CLUB CARD":   
            case "dinersclub":
            case "DN":
            case "DC":
                return "DC";
                break;                              
                
            case "DISCOVER CARD":
            case "DS":
                return "DS";
                break;     
                                 
            case "JCB CREDIT CARD":
            case "JC":
                return "JC";
                break;   
                
            default: 
                return "unknown";
                break;
        }
    };
    
    //-- By Wagner Vieira - 06/05/2010 - Edited by Jorge Aires - 06/08/2010
    var drawPaymentsTypesVaiBrasil = function(AcceptPaymentCartao, arrayCC)
    {
        var totalBandeirasCruzadas = 0;
        var sbRetorno = [];
        var CheckedCC = false;
        
        if (arrayCC == null || arrayCC.length == 0) //Caso não retorne nenhum cartão do Broker
            AcceptPaymentCartao = false;
        
        //-- Monta as formas de Pgto
        var resOpPgto = clDetalhesPedido.getOpcoesParcelamentoB2B(window.iframeAereo.getCodOperadoraAereo().CodEmpresa);
        if (resOpPgto.error == undefined && resOpPgto.value != null && resOpPgto.value.rows.length > 0)        
        {
            var sb = new StringBuilder();            
            
            sb.append("<table style='width: 30%;'>");
            
            //-- AQUI APPEND RADIO DO PGTO CARTAO DE CREDITO OU PAGAMENTO NA AGÊNCIA
            if (AcceptPaymentCartao)
            {
                sb.append('<tr><td style="display:none;"><span id="pgto_cartaocredito"><input type="radio" checked="checked" name="checkPayment" id="forma_pgto_cartaocredito"> Cartão de Crédito</span></td></tr>');
                sb.append("<tr>");
            }
            else
            {
                sb.append('<tr><td style="display:none;"><span id="pgto_checkout"><input type="radio" checked="checked" name="checkPayment" id="forma_pgto_checkout"> Pagamento na Agência</span></td></tr>');
                sb.append("<tr>");
            }
            
            arrayBandeiras = [];
            arrayNomesBandeiras = [];
            arrayCodOpcoesPgto = [];
            var totalOptPgto = resOpPgto.value.rows.length;
            for (var i = 0; i < totalOptPgto; i++)
            {
                if (!arrayBandeiras.contains(resOpPgto.value.rows[i].CodBandeiraCC)) 
                {
                    if (resOpPgto.value.rows[i].CodBandeiraCC == 13)  // Pagamento na agência - código que nunca vai mudar
                    {
                        totalBandeirasCruzadas++;
                        arrayBandeiras.push(resOpPgto.value.rows[i].CodBandeiraCC);
                        arrayNomesBandeiras.push(resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase());
                        arrayCodOpcoesPgto.push(resOpPgto.value.rows[i].CodOpcaoParcelamento);
                                            
                        if (!AcceptPaymentCartao && !CheckedCC) // Se não aceita cartão CHECKA essa forma como padrão
                        {
                            var checked = "";
                            checked = 'checked="checked"';
                            sbRetorno.push(This.renderCoeficientePgtoVB(resOpPgto.value.rows[i].CodOpcaoParcelamento, false));
                        }
                                            
                        sb.append('<td>');
                            sb.append('<table>');
                                sb.append('<tr>');
                                    sb.append('<td><input id="htPaymentType2' + resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase() + '" type="radio" ' + checked +' value="'+ resOpPgto.value.rows[i].CodOpcaoParcelamento +'" name="rbOptPgto" onclick="javascript:controller.renderCoeficientePgtoVB(this.value, true);"/></td>');
                                    sb.append('<td><img src="http://novovb.vaibrasil.com.br/'+ resOpPgto.value.rows[i].imagem +'" border="0" /></td>');
                                sb.append('</tr>');
                            sb.append('</table>');
                        sb.append('</td>');                         
                    }
                    else
                    {
                        if (AcceptPaymentCartao) 
                        {
                            var bandeiraVB = translateCreditCardIMG(resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase());
                            if (arrayCC.contains(bandeiraVB)) // Cruza as informações dos cartões de créditos permitidos com a do VB
                            {
                                totalBandeirasCruzadas++;
                                
                                if (resOpPgto.value.rows[i].imagem != "")
                                {                    
                                    arrayBandeiras.push(resOpPgto.value.rows[i].CodBandeiraCC);
                                    arrayNomesBandeiras.push(resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase());
                                    arrayCodOpcoesPgto.push(resOpPgto.value.rows[i].CodOpcaoParcelamento);                            
                                
                                    var checked = "";
                                    if (!CheckedCC) //Se já checkou algum cartão
                                    {
                                        checked = 'checked="checked"';
                                        sbRetorno.push(This.renderCoeficientePgtoVB(resOpPgto.value.rows[i].CodOpcaoParcelamento, false));
                                        CheckedCC = true;
                                    };                        
                                
                                    sb.append('<td>');
                                        sb.append('<table>');
                                            sb.append('<tr>');
                                                sb.append('<td><input id="htPaymentType2' + resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase() + '" type="radio" ' + checked +' value="'+ resOpPgto.value.rows[i].CodOpcaoParcelamento +'" name="rbOptPgto" onclick="javascript:controller.renderCoeficientePgtoVB(this.value, true);" /></td>');
                                                sb.append('<td><img src="http://novovb.vaibrasil.com.br/'+ resOpPgto.value.rows[i].imagem +'" border="0" /></td>');
                                            sb.append('</tr>');
                                        sb.append('</table>');
                                    sb.append('</td>'); 
                                }
                            }
                        }
                    }
                };               
            };
            
            //-- Tratamento para quando não houver nenhum cruzamento de cartões do source com o VB
            if(totalBandeirasCruzadas == 0)
            {
                for (var i = 0; i < totalOptPgto; i++)
                {
                    if (!arrayBandeiras.contains(resOpPgto.value.rows[i].CodBandeiraCC)) 
                    {
                        if (resOpPgto.value.rows[i].CodBandeiraCC == 13)  // Pagamento na agência - código que nunca vai mudar
                        {                        
                            arrayBandeiras.push(resOpPgto.value.rows[i].CodBandeiraCC);
                            arrayNomesBandeiras.push(resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase());
                            arrayCodOpcoesPgto.push(resOpPgto.value.rows[i].CodOpcaoParcelamento);
                                                
                            if (!AcceptPaymentCartao && !CheckedCC) // Se não aceita cartão CHECKA essa forma como padrão
                            {
                                var checked = "";
                                checked = 'checked="checked"';
                                sbRetorno.push(This.renderCoeficientePgtoVB(resOpPgto.value.rows[i].CodOpcaoParcelamento, false));
                            }
                                                
                            sb.append('<td>');
                                sb.append('<table>');
                                    sb.append('<tr>');
                                        sb.append('<td><input id="htPaymentType2' + resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase() + '" type="radio" ' + checked +' value="'+ resOpPgto.value.rows[i].CodOpcaoParcelamento +'" name="rbOptPgto" onclick="javascript:controller.renderCoeficientePgtoVB(this.value, true);"/></td>');
                                        sb.append('<td><img src="http://novovb.vaibrasil.com.br/'+ resOpPgto.value.rows[i].imagem +'" border="0" /></td>');
                                    sb.append('</tr>');
                                sb.append('</table>');
                            sb.append('</td>');                         
                        }       
                        else
                        {         
                            var bandeiraVB = translateCreditCardIMG(resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase());                            
                            if (resOpPgto.value.rows[i].imagem != "")
                            {                    
                                arrayBandeiras.push(resOpPgto.value.rows[i].CodBandeiraCC);
                                arrayNomesBandeiras.push(resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase());
                                arrayCodOpcoesPgto.push(resOpPgto.value.rows[i].CodOpcaoParcelamento);                            
                            
                                var checked = "";
                                if (!CheckedCC) //Se já checkou algum cartão
                                {
                                    checked = 'checked="checked"';
                                    sbRetorno.push(This.renderCoeficientePgtoVB(resOpPgto.value.rows[i].CodOpcaoParcelamento, false));
                                    CheckedCC = true;
                                };                        
                            
                                sb.append('<td>');
                                    sb.append('<table>');
                                        sb.append('<tr>');
                                            sb.append('<td><input id="htPaymentType2' + resOpPgto.value.rows[i].NomeBandeiraCC.toString().toUpperCase() + '" type="radio" ' + checked +' value="'+ resOpPgto.value.rows[i].CodOpcaoParcelamento +'" name="rbOptPgto" onclick="javascript:controller.renderCoeficientePgtoVB(this.value, true);" /></td>');
                                            sb.append('<td><img src="http://novovb.vaibrasil.com.br/'+ resOpPgto.value.rows[i].imagem +'" border="0" /></td>');
                                        sb.append('</tr>');
                                    sb.append('</table>');
                                sb.append('</td>'); 
                            };
                        };
                    };               
                };
            };
            
            sb.append("</tr>");
            sb.append("</table>");
        }
        else
        {
            //-- Problema, nenhuma forma de pagamento disponível
            $html('divCarrinhoAereo', "<br />" + msgHotelNaoEncontrado + "<br /><br /><br /><br /><br /><br /><br /><br /><br />");
            $('divAgenciaAereoHotel').style.display = 'none';
        };
        sbRetorno.push(sb.toString());
        return sbRetorno;
    };

    this.setURLIframeHotel = function(hashCodUsuario) {
        This.aereoHotel.SrcIframeHotel = This.aereoHotel.SrcIframeHotel + "&CodUsuario=" + hashCodUsuario.value;
    };

    this.renderCoeficientePgtoVB = function(pCodOpcaoPgto, pRender) {
        if (pCodOpcaoPgto == null) //-- Pega do Value do Radio
        {
            for (var pmt = 0; pmt < arrayNomesBandeiras.length; pmt++) {
                if ($('htPaymentType2' + arrayNomesBandeiras[pmt]).checked) {
                    pCodOpcaoPgto = arrayCodOpcoesPgto[pmt];
                }
            }
        };

        var codOpPgto = pCodOpcaoPgto;
        globalCodOpPgto = pCodOpcaoPgto;

        var resOpPgto = clDetalhesPedido.getOpcoesParcelamentoB2B(window.iframeAereo.getCodOperadoraAereo().CodEmpresa);
        var rowOpPgto = null;
        for (var i = 0; i < resOpPgto.value.rows.length; i++) {
            if (resOpPgto.value.rows[i].CodOpcaoParcelamento == parseInt(pCodOpcaoPgto)) {
                rowOpPgto = resOpPgto.value.rows[i];
                break;
            };
        };

        var currency = "R$";
//        switch (moeda) {
//            case "BRL":
//                currency = "R$";
//                break;
//            case "USD":
//                currency = "U$";
//                break;
//            default:
//                currency = "R$";
//                break;
//        };

        var txtEntrada = "";
        var percentualEntrada = (rowOpPgto.ValorEntrada == "" || rowOpPgto.ValorEntrada == undefined ? 0 : parseFloat(rowOpPgto.ValorEntrada));
        if (percentualEntrada > 0) {
            var valorEntrada = clDetalhesPedido.calcularValorEntrada(controller.aereoHotel.ValorTotal, percentualEntrada).value;
            txtEntrada = "Entrada de " + currency + " " + parseFloat(valorEntrada).formatNumber(2, true) + " + ";
        };

        var codBandeiraCC = rowOpPgto.CodBandeiraCC;

        if (codBandeiraCC == 13) //-- 13 Pagamento na Agencia - Checkout
        {
            tipoPagamento = "ch";
            cartaoPgto = "";
        }
        else {
            tipoPagamento = "cc";
            switch (codBandeiraCC) {
                case 1:
                    cartaoPgto = "VISA";
                    ccCode = "VI";
                    break;
                case 2:
                    cartaoPgto = "MASTERCARD";
                    ccCode = "MC";
                    break;
                case 3:
                    cartaoPgto = "AMERICANEXPRESS";
                    ccCode = "AX";
                    break;
                case 4:
                    cartaoPgto = "";
                    ccCode = "";
                    break;
            };
        };

        var res = clDetalhesPedido.lerCoeficienteParcelamento(pCodOpcaoPgto);
        var sb = new StringBuilder();
        sb.append("<table>");


        totalCoefParc = res.value.rows.length;
        for (var i = 0; i < totalCoefParc; i++) {
            var taxaJuros = parseFloat(res.value.rows[i].CoeficienteParcelamento);
            var numParcelas = parseInt(res.value.rows[i].NumeroParcela);
            var valorParcela = parseFloat(controller.aereoHotel.ValorTotal) / numParcelas;
            var valorTotal = parseFloat(controller.aereoHotel.ValorTotal);
            //var valorParcela = parseFloat(valorTotal) / (i + 1);
            //var valorJuros = valorParcela * (taxaJuros / 100);
            //var valorFinalParcela = valorParcela + valorJuros;

            var valorFinalParcela = clDetalhesPedido.calcularValorParcela(valorTotal, numParcelas, taxaJuros, percentualEntrada).value;

            var checked = "";
            if (i == 0) {
                checked = 'checked="checked"';
                codCoeficiente = res.value.rows[i].CodCoeficienteParcelamento;
            }
            sb.append('<tr>');
            sb.append('<td>');
            sb.append('<input type="radio" name="rbParcelas" id="coefParc_' + i + '" value="' + res.value.rows[i].CodCoeficienteParcelamento + '" ' + checked + 'onclick="javascript:controller.getCoeficiente(this.value)"/>');
            sb.append('<label for="rbParcelas"> ' + txtEntrada + currency + '' + valorFinalParcela.formatNumber(2, true) + ' - ' + numParcelas + 'x ' + (taxaJuros > 0 ? "com juros" : "sem juros") + '</label>');
            sb.append('</td>');
            sb.append('</tr>');
        };

        sb.append("</table>");

        if (pRender) {
            $html("formasPagamentoCartao", sb.toString());

            if (codBandeiraCC == 13) {
                //$('dadosCartao1').style.display = 'none';
                //$('dadosCartao2').style.display = 'none';
                $('divDadosCartao').style.display = 'none';

                //-- limpa dados do pagamento
                $set('htPmtCard_cardHolderName2', '');
                $set('htPmtCard_CPF', '');
                $set('htPmtCard_cardNumber2', '');
                $set('htPmtCard_cardSecurity2', '');
            }
            else {
                $('divDadosCartao').style.display = '';
                //$('dadosCartao1').style.display = '';
                //$('dadosCartao2').style.display = '';
            };
        }
        else
            return sb.toString();
    };

    this.getCoeficiente = function(cod) {
        codCoeficiente = cod;
    };
    
    this.constructor = new function(){
        tpl = new Template("AereoHotel");
    };
};

function replaceAll(string, token, newtoken) {
	while (string.indexOf(token) != -1) {
 		string = string.replace(token, newtoken);
	};
	return string;
};

function $queryString(key){
    var qs = window.location.search.substring(1);
    return QueryString_SetQS(qs, key);
};

function QueryString_SetQS(qs, key){
    var value = null;
    
    var elements = qs.split("&");
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i].split("=");
        if (element[0].toLowerCase() == key.toLowerCase()) {
            value = element[1];
        };
            };
    return value;
};

//-- FUNCAO ENCODER
Encoder = {

    // When encoding do we convert characters into html or numerical entities
    EncodeType: "entity", // entity OR numerical
    isEmpty: function(val){
        if (val) {
            return ((val === null) || val.length == 0 || /^\s+$/.test(val));
        }
        else {
            return true;
        }
    },
    // Convert HTML entities into numerical entities
    HTML2Numerical: function(s){
        var arr1 = new Array('&nbsp;', '&iexcl;', '&cent;', '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;', '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;', '&shy;', '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;', '&sup3;', '&acute;', '&micro;', '&para;', '&middot;', '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;', '&frac12;', '&frac34;', '&iquest;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&Auml;', '&aring;', '&aelig;', '&ccedil;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&eth;', '&ntilde;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&Ouml;', '&times;', '&oslash;', '&ugrave;', '&uacute;', '&ucirc;', '&Uuml;', '&yacute;', '&thorn;', '&szlig;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&auml;', '&aring;', '&aelig;', '&ccedil;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&eth;', '&ntilde;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&ouml;', '&divide;', '&oslash;', '&ugrave;', '&uacute;', '&ucirc;', '&uuml;', '&yacute;', '&thorn;', '&yuml;', '&quot;', '&amp;', '&lt;', '&gt;', '&oelig;', '&oelig;', '&scaron;', '&scaron;', '&yuml;', '&circ;', '&tilde;', '&ensp;', '&emsp;', '&thinsp;', '&zwnj;', '&zwj;', '&lrm;', '&rlm;', '&ndash;', '&mdash;', '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;', '&bdquo;', '&dagger;', '&dagger;', '&permil;', '&lsaquo;', '&rsaquo;', '&euro;', '&fnof;', '&alpha;', '&beta;', '&gamma;', '&delta;', '&epsilon;', '&zeta;', '&eta;', '&theta;', '&iota;', '&kappa;', '&lambda;', '&mu;', '&nu;', '&xi;', '&omicron;', '&pi;', '&rho;', '&sigma;', '&tau;', '&upsilon;', '&phi;', '&chi;', '&psi;', '&omega;', '&alpha;', '&beta;', '&gamma;', '&delta;', '&epsilon;', '&zeta;', '&eta;', '&theta;', '&iota;', '&kappa;', '&lambda;', '&mu;', '&nu;', '&xi;', '&omicron;', '&pi;', '&rho;', '&sigmaf;', '&sigma;', '&tau;', '&upsilon;', '&phi;', '&chi;', '&psi;', '&omega;', '&thetasym;', '&upsih;', '&piv;', '&bull;', '&hellip;', '&prime;', '&prime;', '&oline;', '&frasl;', '&weierp;', '&image;', '&real;', '&trade;', '&alefsym;', '&larr;', '&uarr;', '&rarr;', '&darr;', '&harr;', '&crarr;', '&larr;', '&uarr;', '&rarr;', '&darr;', '&harr;', '&forall;', '&part;', '&exist;', '&empty;', '&nabla;', '&isin;', '&notin;', '&ni;', '&prod;', '&sum;', '&minus;', '&lowast;', '&radic;', '&prop;', '&infin;', '&ang;', '&and;', '&or;', '&cap;', '&cup;', '&int;', '&there4;', '&sim;', '&cong;', '&asymp;', '&ne;', '&equiv;', '&le;', '&ge;', '&sub;', '&sup;', '&nsub;', '&sube;', '&supe;', '&oplus;', '&otimes;', '&perp;', '&sdot;', '&lceil;', '&rceil;', '&lfloor;', '&rfloor;', '&lang;', '&rang;', '&loz;', '&spades;', '&clubs;', '&hearts;', '&diams;');
        var arr2 = new Array('&#160;', '&#161;', '&#162;', '&#163;', '&#164;', '&#165;', '&#166;', '&#167;', '&#168;', '&#169;', '&#170;', '&#171;', '&#172;', '&#173;', '&#174;', '&#175;', '&#176;', '&#177;', '&#178;', '&#179;', '&#180;', '&#181;', '&#182;', '&#183;', '&#184;', '&#185;', '&#186;', '&#187;', '&#188;', '&#189;', '&#190;', '&#191;', '&#192;', '&#193;', '&#194;', '&#195;', '&#196;', '&#197;', '&#198;', '&#199;', '&#200;', '&#201;', '&#202;', '&#203;', '&#204;', '&#205;', '&#206;', '&#207;', '&#208;', '&#209;', '&#210;', '&#211;', '&#212;', '&#213;', '&#214;', '&#215;', '&#216;', '&#217;', '&#218;', '&#219;', '&#220;', '&#221;', '&#222;', '&#223;', '&#224;', '&#225;', '&#226;', '&#227;', '&#228;', '&#229;', '&#230;', '&#231;', '&#232;', '&#233;', '&#234;', '&#235;', '&#236;', '&#237;', '&#238;', '&#239;', '&#240;', '&#241;', '&#242;', '&#243;', '&#244;', '&#245;', '&#246;', '&#247;', '&#248;', '&#249;', '&#250;', '&#251;', '&#252;', '&#253;', '&#254;', '&#255;', '&#34;', '&#38;', '&#60;', '&#62;', '&#338;', '&#339;', '&#352;', '&#353;', '&#376;', '&#710;', '&#732;', '&#8194;', '&#8195;', '&#8201;', '&#8204;', '&#8205;', '&#8206;', '&#8207;', '&#8211;', '&#8212;', '&#8216;', '&#8217;', '&#8218;', '&#8220;', '&#8221;', '&#8222;', '&#8224;', '&#8225;', '&#8240;', '&#8249;', '&#8250;', '&#8364;', '&#402;', '&#913;', '&#914;', '&#915;', '&#916;', '&#917;', '&#918;', '&#919;', '&#920;', '&#921;', '&#922;', '&#923;', '&#924;', '&#925;', '&#926;', '&#927;', '&#928;', '&#929;', '&#931;', '&#932;', '&#933;', '&#934;', '&#935;', '&#936;', '&#937;', '&#945;', '&#946;', '&#947;', '&#948;', '&#949;', '&#950;', '&#951;', '&#952;', '&#953;', '&#954;', '&#955;', '&#956;', '&#957;', '&#958;', '&#959;', '&#960;', '&#961;', '&#962;', '&#963;', '&#964;', '&#965;', '&#966;', '&#967;', '&#968;', '&#969;', '&#977;', '&#978;', '&#982;', '&#8226;', '&#8230;', '&#8242;', '&#8243;', '&#8254;', '&#8260;', '&#8472;', '&#8465;', '&#8476;', '&#8482;', '&#8501;', '&#8592;', '&#8593;', '&#8594;', '&#8595;', '&#8596;', '&#8629;', '&#8656;', '&#8657;', '&#8658;', '&#8659;', '&#8660;', '&#8704;', '&#8706;', '&#8707;', '&#8709;', '&#8711;', '&#8712;', '&#8713;', '&#8715;', '&#8719;', '&#8721;', '&#8722;', '&#8727;', '&#8730;', '&#8733;', '&#8734;', '&#8736;', '&#8743;', '&#8744;', '&#8745;', '&#8746;', '&#8747;', '&#8756;', '&#8764;', '&#8773;', '&#8776;', '&#8800;', '&#8801;', '&#8804;', '&#8805;', '&#8834;', '&#8835;', '&#8836;', '&#8838;', '&#8839;', '&#8853;', '&#8855;', '&#8869;', '&#8901;', '&#8968;', '&#8969;', '&#8970;', '&#8971;', '&#9001;', '&#9002;', '&#9674;', '&#9824;', '&#9827;', '&#9829;', '&#9830;');
        return this.swapArrayVals(s, arr1, arr2);
    },
    
    // Convert Numerical entities into HTML entities
    NumericalToHTML: function(s){
        var arr1 = new Array('&#160;', '&#161;', '&#162;', '&#163;', '&#164;', '&#165;', '&#166;', '&#167;', '&#168;', '&#169;', '&#170;', '&#171;', '&#172;', '&#173;', '&#174;', '&#175;', '&#176;', '&#177;', '&#178;', '&#179;', '&#180;', '&#181;', '&#182;', '&#183;', '&#184;', '&#185;', '&#186;', '&#187;', '&#188;', '&#189;', '&#190;', '&#191;', '&#192;', '&#193;', '&#194;', '&#195;', '&#196;', '&#197;', '&#198;', '&#199;', '&#200;', '&#201;', '&#202;', '&#203;', '&#204;', '&#205;', '&#206;', '&#207;', '&#208;', '&#209;', '&#210;', '&#211;', '&#212;', '&#213;', '&#214;', '&#215;', '&#216;', '&#217;', '&#218;', '&#219;', '&#220;', '&#221;', '&#222;', '&#223;', '&#224;', '&#225;', '&#226;', '&#227;', '&#228;', '&#229;', '&#230;', '&#231;', '&#232;', '&#233;', '&#234;', '&#235;', '&#236;', '&#237;', '&#238;', '&#239;', '&#240;', '&#241;', '&#242;', '&#243;', '&#244;', '&#245;', '&#246;', '&#247;', '&#248;', '&#249;', '&#250;', '&#251;', '&#252;', '&#253;', '&#254;', '&#255;', '&#34;', '&#38;', '&#60;', '&#62;', '&#338;', '&#339;', '&#352;', '&#353;', '&#376;', '&#710;', '&#732;', '&#8194;', '&#8195;', '&#8201;', '&#8204;', '&#8205;', '&#8206;', '&#8207;', '&#8211;', '&#8212;', '&#8216;', '&#8217;', '&#8218;', '&#8220;', '&#8221;', '&#8222;', '&#8224;', '&#8225;', '&#8240;', '&#8249;', '&#8250;', '&#8364;', '&#402;', '&#913;', '&#914;', '&#915;', '&#916;', '&#917;', '&#918;', '&#919;', '&#920;', '&#921;', '&#922;', '&#923;', '&#924;', '&#925;', '&#926;', '&#927;', '&#928;', '&#929;', '&#931;', '&#932;', '&#933;', '&#934;', '&#935;', '&#936;', '&#937;', '&#945;', '&#946;', '&#947;', '&#948;', '&#949;', '&#950;', '&#951;', '&#952;', '&#953;', '&#954;', '&#955;', '&#956;', '&#957;', '&#958;', '&#959;', '&#960;', '&#961;', '&#962;', '&#963;', '&#964;', '&#965;', '&#966;', '&#967;', '&#968;', '&#969;', '&#977;', '&#978;', '&#982;', '&#8226;', '&#8230;', '&#8242;', '&#8243;', '&#8254;', '&#8260;', '&#8472;', '&#8465;', '&#8476;', '&#8482;', '&#8501;', '&#8592;', '&#8593;', '&#8594;', '&#8595;', '&#8596;', '&#8629;', '&#8656;', '&#8657;', '&#8658;', '&#8659;', '&#8660;', '&#8704;', '&#8706;', '&#8707;', '&#8709;', '&#8711;', '&#8712;', '&#8713;', '&#8715;', '&#8719;', '&#8721;', '&#8722;', '&#8727;', '&#8730;', '&#8733;', '&#8734;', '&#8736;', '&#8743;', '&#8744;', '&#8745;', '&#8746;', '&#8747;', '&#8756;', '&#8764;', '&#8773;', '&#8776;', '&#8800;', '&#8801;', '&#8804;', '&#8805;', '&#8834;', '&#8835;', '&#8836;', '&#8838;', '&#8839;', '&#8853;', '&#8855;', '&#8869;', '&#8901;', '&#8968;', '&#8969;', '&#8970;', '&#8971;', '&#9001;', '&#9002;', '&#9674;', '&#9824;', '&#9827;', '&#9829;', '&#9830;');
        var arr2 = new Array('&nbsp;', '&iexcl;', '&cent;', '&pound;', '&curren;', '&yen;', '&brvbar;', '&sect;', '&uml;', '&copy;', '&ordf;', '&laquo;', '&not;', '&shy;', '&reg;', '&macr;', '&deg;', '&plusmn;', '&sup2;', '&sup3;', '&acute;', '&micro;', '&para;', '&middot;', '&cedil;', '&sup1;', '&ordm;', '&raquo;', '&frac14;', '&frac12;', '&frac34;', '&iquest;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&Auml;', '&aring;', '&aelig;', '&ccedil;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&eth;', '&ntilde;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&Ouml;', '&times;', '&oslash;', '&ugrave;', '&uacute;', '&ucirc;', '&Uuml;', '&yacute;', '&thorn;', '&szlig;', '&agrave;', '&aacute;', '&acirc;', '&atilde;', '&auml;', '&aring;', '&aelig;', '&ccedil;', '&egrave;', '&eacute;', '&ecirc;', '&euml;', '&igrave;', '&iacute;', '&icirc;', '&iuml;', '&eth;', '&ntilde;', '&ograve;', '&oacute;', '&ocirc;', '&otilde;', '&ouml;', '&divide;', '&oslash;', '&ugrave;', '&uacute;', '&ucirc;', '&uuml;', '&yacute;', '&thorn;', '&yuml;', '&quot;', '&amp;', '&lt;', '&gt;', '&oelig;', '&oelig;', '&scaron;', '&scaron;', '&yuml;', '&circ;', '&tilde;', '&ensp;', '&emsp;', '&thinsp;', '&zwnj;', '&zwj;', '&lrm;', '&rlm;', '&ndash;', '&mdash;', '&lsquo;', '&rsquo;', '&sbquo;', '&ldquo;', '&rdquo;', '&bdquo;', '&dagger;', '&dagger;', '&permil;', '&lsaquo;', '&rsaquo;', '&euro;', '&fnof;', '&alpha;', '&beta;', '&gamma;', '&delta;', '&epsilon;', '&zeta;', '&eta;', '&theta;', '&iota;', '&kappa;', '&lambda;', '&mu;', '&nu;', '&xi;', '&omicron;', '&pi;', '&rho;', '&sigma;', '&tau;', '&upsilon;', '&phi;', '&chi;', '&psi;', '&omega;', '&alpha;', '&beta;', '&gamma;', '&delta;', '&epsilon;', '&zeta;', '&eta;', '&theta;', '&iota;', '&kappa;', '&lambda;', '&mu;', '&nu;', '&xi;', '&omicron;', '&pi;', '&rho;', '&sigmaf;', '&sigma;', '&tau;', '&upsilon;', '&phi;', '&chi;', '&psi;', '&omega;', '&thetasym;', '&upsih;', '&piv;', '&bull;', '&hellip;', '&prime;', '&prime;', '&oline;', '&frasl;', '&weierp;', '&image;', '&real;', '&trade;', '&alefsym;', '&larr;', '&uarr;', '&rarr;', '&darr;', '&harr;', '&crarr;', '&larr;', '&uarr;', '&rarr;', '&darr;', '&harr;', '&forall;', '&part;', '&exist;', '&empty;', '&nabla;', '&isin;', '&notin;', '&ni;', '&prod;', '&sum;', '&minus;', '&lowast;', '&radic;', '&prop;', '&infin;', '&ang;', '&and;', '&or;', '&cap;', '&cup;', '&int;', '&there4;', '&sim;', '&cong;', '&asymp;', '&ne;', '&equiv;', '&le;', '&ge;', '&sub;', '&sup;', '&nsub;', '&sube;', '&supe;', '&oplus;', '&otimes;', '&perp;', '&sdot;', '&lceil;', '&rceil;', '&lfloor;', '&rfloor;', '&lang;', '&rang;', '&loz;', '&spades;', '&clubs;', '&hearts;', '&diams;');
        return this.swapArrayVals(s, arr1, arr2);
    },
    
    
    // Numerically encodes all unicode characters
    numEncode: function(s){
    
        if (this.isEmpty(s)) 
            return "";
        
        var e = "";
        for (var i = 0; i < s.length; i++) {
            var c = s.charAt(i);
            if (c < " " || c > "~") {
                c = "&#" + c.charCodeAt() + ";";
            }
            e += c;
        };
        return e;
    },
    
    // HTML Decode numerical and HTML entities back to original values
    htmlDecode: function(s){
    
        var c, m, d = s;
        
        if (this.isEmpty(d)) 
            return "";
        
        // convert HTML entites back to numerical entites first
        d = this.HTML2Numerical(d);
        
        // look for numerical entities &#34;
        arr = d.match(/&#[0-9]{1,5};/g);
        
        // if no matches found in string then skip
        if (arr != null) {
            for (var x = 0; x < arr.length; x++) {
                m = arr[x];
                c = m.substring(2, m.length - 1); //get numeric part which is refernce to unicode character
                // if its a valid number we can decode
                if (c >= -32768 && c <= 65535) {
                    // decode every single match within string
                    d = d.replace(m, String.fromCharCode(c));
                }
                else {
                    d = d.replace(m, ""); //invalid so replace with nada
                }
            };
        }
        
        return d;
    },
    
    // encode an input string into either numerical or HTML entities
    htmlEncode: function(s, dbl){
    
        if (this.isEmpty(s)) 
            return "";
        
        // do we allow double encoding? E.g will &amp; be turned into &amp;amp;
        dbl = dbl | false; //default to prevent double encoding
        // if allowing double encoding we do ampersands first
        if (dbl) {
            if (this.EncodeType == "numerical") {
                s = s.replace(/&/g, "&#38;");
            }
            else {
                s = s.replace(/&/g, "&amp;");
            }
        }
        
        // convert the xss chars to numerical entities ' " < >
        s = this.XSSEncode(s, false);
        
        if (this.EncodeType == "numerical" || !dbl) {
            // Now call function that will convert any HTML entities to numerical codes
            s = this.HTML2Numerical(s);
        }
        
        // Now encode all chars above 127 e.g unicode
        s = this.numEncode(s);
        
        // now we know anything that needs to be encoded has been converted to numerical entities we
        // can encode any ampersands & that are not part of encoded entities
        // to handle the fact that I need to do a negative check and handle multiple ampersands &&&
        // I am going to use a placeholder
        
        // if we don't want double encoded entities we ignore the & in existing entities
        if (!dbl) {
            s = s.replace(/&#/g, "##AMPHASH##");
            
            if (this.EncodeType == "numerical") {
                s = s.replace(/&/g, "&#38;");
            }
            else {
                s = s.replace(/&/g, "&amp;");
            }
            
            s = s.replace(/##AMPHASH##/g, "&#");
        }
        
        // replace any malformed entities
        s = s.replace(/&#\d*([^\d;]|$)/g, "$1");
        
        if (!dbl) {
            // safety check to correct any double encoded &amp;
            s = this.correctEncoding(s);
        }
        
        // now do we need to convert our numerical encoded string into entities
        if (this.EncodeType == "entity") {
            s = this.NumericalToHTML(s);
        }
        
        return s;
    },
    
    // Encodes the basic 4 characters used to malform HTML in XSS hacks
    XSSEncode: function(s, en){
        if (!this.isEmpty(s)) {
            en = en || true;
            // do we convert to numerical or html entity?
            if (en) {
                s = s.replace(/\'/g, "&#39;"); //no HTML equivalent as &apos is not cross browser supported
                s = s.replace(/\"/g, "&quot;");
                s = s.replace(/</g, "&lt;");
                s = s.replace(/>/g, "&gt;");
            }
            else {
                s = s.replace(/\'/g, "&#39;"); //no HTML equivalent as &apos is not cross browser supported
                s = s.replace(/\"/g, "&#34;");
                s = s.replace(/</g, "&#60;");
                s = s.replace(/>/g, "&#62;");
            }
            return s;
        }
        else {
            return "";
        }
    },
    
    // returns true if a string contains html or numerical encoded entities
    hasEncoded: function(s){
        if (/&#[0-9]{1,5};/g.test(s)) {
            return true;
        }
        else 
            if (/&[A-Z]{2,6};/gi.test(s)) {
                return true;
            }
            else {
                return false;
            }
    },
    
    // will remove any unicode characters
    stripUnicode: function(s) {
        return s.replace(/[^\x20-\x7E]/g, "");
        
    },
    
    // corrects any double encoded &amp; entities e.g &amp;amp;
    correctEncoding: function(s){
        return s.replace(/(&amp;)(amp;)+/, "$1");
    },
        
    // Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
    swapArrayVals: function(s, arr1, arr2){
        if (this.isEmpty(s)) 
            return "";
        var re;
        if (arr1 && arr2) {
            //ShowDebug("in swapArrayVals arr1.length = " + arr1.length + " arr2.length = " + arr2.length)
            // array lengths must match
            if (arr1.length == arr2.length) {
                for (var x = 0, i = arr1.length; x < i; x++) {
                    re = new RegExp(arr1[x], 'g');
                    s = s.replace(re, arr2[x]); //swap arr1 item with matching item from arr2	
                };
            }
        }
        return s;
    },
    
    inArray: function(item, arr){
        for (var i = 0, x = arr.length; i < x; i++) {
            if (arr[i] === item) {
                return i;
            }
        };
        return -1;
    }    
};

