﻿/*
    Class: jAgenciaPacote
    Author: Wagner Vieira
    Date: 2009/09/25
    Last Update: Wagner Vieira 2009/09/30
*/

function jAgenciaPacote()
{
    var tpl;
    var dtAgencias;
    var This = this;
    var arrayEmpresas = [];
    var codEmpresaLogadaB2B = 0;
    
    var codPais = 21; // Brasil
    var codEstado = 0;
    var codCidade = 0;
    var codBairro = 0;
    var codOperadora = 0;
    var countAgenciasDisponiveis = 0;

    var render = {

		// render.main2()
    	main2: function() {
    		tpl.tpl_main.trAgencias = render.listaAgencias2();
    		return tpl.tpl_main.getHtml();
    	},

    	// render.listaAgencias2()
    	listaAgencias2: function() {
    		var sb = new StringBuilder();
    		countAgenciasDisponiveis = dtAgencias.rows.count();

    		if (dtAgencias.rows.count() > 0) {
    			for (var i = 0; i < dtAgencias.rows.count(); i++) {
    				tpl.tpl_trAgencias.cor = (i % 2 == 0 ? "#FFFFFF" : "#ECF3FF");
    				tpl.tpl_trAgencias.id = dtAgencias.rows[i].CodEmpresa;
    				tpl.tpl_trAgencias.agencia = dtAgencias.rows[i].NomeFantasia;
    				tpl.tpl_trAgencias.endereco = dtAgencias.rows[i].Endereco;
    				tpl.tpl_trAgencias.fone = jsCommon.exec.formataTelefoneAgencias(dtAgencias.rows[i].Telefone);
    				tpl.tpl_trAgencias.uf = dtAgencias.rows[i].UF;
    				tpl.tpl_trAgencias.cidade = dtAgencias.rows[i].Cidade;
    				tpl.tpl_trAgencias.bairro = dtAgencias.rows[i].Bairro;

    				sb.append(tpl.tpl_trAgencias.getHtml());
    			};
    		} else {
    			var dtEmpresa = clDetalhesPacote.getNomeEmpresa(codOperadora).value;
    			var nomeOperadora = '';

    			if (clDetalhesPacote.getNomeEmpresa(codOperadora).value.rows.count() > 0) {
    				nomeOperadora = ' ' + clDetalhesPacote.getNomeEmpresa(codOperadora).value.rows[0].NomeFantasia;
    			};

    			var mensagemNaoEncontrado = 'Não há agências credenciadas nessa localidade pelo operador';
    			var style = 'style="text-align:center; font-weight:bold; margin-top:10px;"';
    			sb.append('<tr><td><div ' + style + '><p>' + mensagemNaoEncontrado + nomeOperadora + '.</p></div></td></tr>');
    		};

    		return sb.toString();
    	},

    	// render.main(pDT)
    	main: function(pDT) {
    		tpl.tpl_main.trAgencias = render.listaAgencias(pDT);
    		return tpl.tpl_main.getHtml();
    	},

    	// render.listaAgencias(pDT)
    	listaAgencias: function(pDT) {
    		var sb = new StringBuilder();
    		var i = 0;

    		if (pDT.count() > 0) {
    			while (pDT.hasNext()) {
    				tpl.tpl_trAgencias.cor = (i % 2 == 0 ? "#FFFFFF" : "#ECF3FF");
    				tpl.tpl_trAgencias.id = pDT.row.CodEmpresa;
    				tpl.tpl_trAgencias.agencia = pDT.row.NomeFantasia;
    				tpl.tpl_trAgencias.endereco = pDT.row.Endereco;
    				tpl.tpl_trAgencias.fone = jsCommon.exec.formataTelefoneAgencias(pDT.row.Telefone);
    				tpl.tpl_trAgencias.uf = pDT.row.UF;
    				tpl.tpl_trAgencias.cidade = pDT.row.Cidade;
    				tpl.tpl_trAgencias.bairro = pDT.row.Bairro;

    				sb.append(tpl.tpl_trAgencias.getHtml());
    				pDT.moveNext();
    				i++;
    			};
    		}
    		else {
    			sb.append("<tr><td>Nenhum resultado encontrado.</td></tr>");
    		};

    		return sb.toString();
    	}
    };
    
    var ctrlRefs = {
		agencia: function() { return $('agencia'); },
        divAgencias: function() { return $('divAgencias'); },
        divAgenciasMain: function() { return $('divAgenciasMain'); },
        divAgenciasMainHotel: function() { return $('divAgenciasMainHotel'); }
    };

    var on = {
		// on.changeEstado2()
		changeEstado2: function() {
			startEnv.showLoading(true);
    		
    		codEstado = $get('txt_estado');
    		codCidade = 0;
    		codBairro = 0;
    		startEnv.addOptionsCidades2();
    		startEnv.addOptionsBairros2();
    		clDetalhesPedido.listarAgenciasBWList(codOperadora, codEstado, codCidade, codBairro, callbacks.agenciasBWListChangeCombo);
    	},

    	// on.changeCidade2()
    	changeCidade2: function() {
    		startEnv.showLoading(true);
    		
    		codCidade = $get('txt_cidade');
    		codBairro = 0;
    		startEnv.addOptionsBairros2();
    		clDetalhesPedido.listarAgenciasBWList(codOperadora, codEstado, codCidade, codBairro, callbacks.agenciasBWListChangeCombo);
    	},

    	// on.changeBairro2()
    	changeBairro2: function() {
    		startEnv.showLoading(true);
    		
    		codBairro = $get('txt_bairro');
    		clDetalhesPedido.listarAgenciasBWList(codOperadora, codEstado, codCidade, codBairro, callbacks.agenciasBWListChangeCombo);
    	},

		// obsoleto
    	// função que filtra as agências do datatable
    	// on.getIterator(pCampo, pCod)
    	getIterator: function(pCampo, pCod) {
    		var dtAg = dtAgencias.getIterator(pCampo);
    		dtAg.findByKey(pCod);
    		return dtAg;
    	},

		// obsoleto
		// on.changeEstado()
    	changeEstado: function() {
    		$('txt_estado').onchange = function() {
    			$html('divCidade', '<select style="width:220" class="form" id="txt_cidade" /><option="">Selecione</option></select>');
    			$html('divBairro', '<select style="width:220" class="form" id="txt_bairro" /><option="">Selecione</option></select>');
    			on.changeCidade();

    			if ($get('txt_cidade') == "-1") { // traz resultados para todas as cidades do estado
    				startEnv.addOptionsCidades(parseInt($get('txt_estado')));
    				startEnv.getIterator("CodEstado", parseInt($get('txt_estado')));
    			}
    			else if ($get('txt_cidade') != "0") { // traz resultados para a cidade escolhida
    				startEnv.addOptionsCidades(parseInt($get('txt_estado')));
    				startEnv.getIterator("CodEstado", parseInt($get('txt_estado')));
    			};
    			arrayEmpresas = [];
    		};
    	},

		// obsoleto
    	// on.changeCidade()
    	changeCidade: function() {
    		$('txt_cidade').onchange = function() {
    			$html('divBairro', '<select style="width:220" class="form" id="txt_bairro" /><option="">Selecione</option></select>');
    			on.changeBairro();

    			if ($get('txt_cidade') != "0") {
    				startEnv.addOptionsBairros(parseInt($get('txt_cidade')));
    				startEnv.getIterator("CodCidade", parseInt($get('txt_cidade')));
    			};
    			arrayEmpresas = [];
    		};
    	},

		// obsoleto
		// on.changeBairro()
    	changeBairro: function() {
    		$('txt_bairro').onchange = function() {

    			if ($get('txt_bairro') == "-1") { // traz resultados para todos os bairros da cidade
    				startEnv.addOptionsBairros(parseInt($get('txt_cidade')));
    				startEnv.getIterator("CodCidade", parseInt($get('txt_cidade')));
    			}
    			else if ($get('txt_bairro') != "0") { // traz resultados para o bairro escolhido
    				startEnv.getIterator("CodBairro", parseInt($get('txt_bairro')));
    			};

    			arrayEmpresas = [];
    		};
    	},

		// on.clickOpcaoAgencia(pCodEmpresa, thisOBJ)
    	clickOpcaoAgencia: function(pCodEmpresa, thisOBJ) {
    		arrayEmpresas = [];
    		arrayEmpresas.push(pCodEmpresa);
    		//            if (!arrayEmpresas.contains(pCodEmpresa))
    		//            {
    		//                if (arrayEmpresas.length >= 3)
    		//                {
    		//                    alert('Você pode selecionar até 3 agências.');
    		//                    $(thisOBJ.id).checked = false;
    		//                }
    		//                else
    		//                {
    		//                    arrayEmpresas.push(pCodEmpresa);
    		//                    
    		//                    //-- Não add no array auxiliar
    		//                    arrAuxEmpresas = [];
    		//                    for (var x = 0; x < arrayEmpresas.length; x++)
    		//                    {
    		//                        if (arrayEmpresas[x] != pCodEmpresa)
    		//                        {
    		//                            arrAuxEmpresas.push(arrayEmpresas[x]);
    		//                        };
    		//                    };
    		//                };
    		//            }
    		//            else
    		//            {
    		//                //-- EXCLUIR
    		//                var arrAux = [];
    		//                for (var i = 0; i < arrayEmpresas.length; i++)
    		//                {
    		//                    if (pCodEmpresa != arrayEmpresas[i])
    		//                    {
    		//                        arrAux.push(arrayEmpresas[i]);
    		//                    };
    		//                };
    		//                arrayEmpresas = [];
    		//                arrayEmpresas = arrAux;
    		//            };
    	}
    };

    var callbacks = {

		// callbacks.agenciasBWList(res)
    	agenciasBWList: function(res) {
    		if (res.error == undefined && res.value != undefined) {
    			dtAgencias = res.value.tables.Dados;

    			var dtMetadados = res.value.tables.Metadados;
    			codEstado = dtMetadados.rows[0].CodEstado;
    			codCidade = dtMetadados.rows[0].CodCidade;
    			codBairro = dtMetadados.rows[0].CodBairro;
    		};
    		$html(ctrlRefs.agencia(), render.main2());

    		startEnv.addOptionsEstados2();
    		startEnv.addOptionsCidades2();
    		startEnv.addOptionsBairros2();

    		$('txt_estado').onchange = on.changeEstado2;
    		$('txt_cidade').onchange = on.changeCidade2;
    		$('txt_bairro').onchange = on.changeBairro2;
    		
    		startEnv.showLoading(false);
    	},

    	// callbacks.agenciasBWListChangeCombo(res)
    	agenciasBWListChangeCombo: function(res) {
    		arrayEmpresas = [];
    		if (res.error == undefined && res.value != undefined) {
    			dtAgencias = res.value.tables.Dados;
    		};

    		$html(ctrlRefs.divAgencias(), '<table class="tabelas">' + render.listaAgencias2() + '</table>');
    		startEnv.showLoading(false);
    	},

		// callbacks.optionsEstados(res)
    	optionsEstados: function(res) {
    		var combo = $('txt_estado');
    		combo.innerHTML = '';

    		var optn = document.createElement("OPTION");
    		optn.value = 0;
    		optn.text = 'Selecione o Estado';
    		combo.options.add(optn);

    		if (res.error == null) {
    			var tb = res.value;
    			for (var i = 0; i < tb.rows.length; i++) {
    				optn = document.createElement("OPTION");
    				optn.value = tb.rows[i].CodEstado;
    				optn.text = tb.rows[i].Nome + ' - ' + tb.rows[i].Uf;
    				combo.options.add(optn);
    			};
    			$set("txt_estado", codEstado);
    		};
    	},

    	// callbacks.optionsCidades(res)
    	optionsCidades: function(res) {
    		var combo = $('txt_cidade');
    		combo.innerHTML = '';

    		var optn = document.createElement("OPTION");
    		optn.value = 0;
    		optn.text = 'Selecione a Cidade';
    		combo.options.add(optn);

    		if (res.error == null) {
    			var tb = res.value;
    			for (var i = 0; i < tb.rows.length; i++) {
    				optn = document.createElement("OPTION");
    				optn.value = tb.rows[i].CodCidade;
    				optn.text = tb.rows[i].Nome;
    				combo.options.add(optn);
    			};
    			$set("txt_cidade", codCidade);
    		};
    	},

    	// callbacks.optionsBairros(res)
    	optionsBairros: function(res) {
    		var combo = $('txt_bairro');
    		combo.innerHTML = '';

    		var optn = document.createElement("OPTION");
    		optn.value = 0;
    		optn.text = 'Selecione o Bairro';
    		combo.options.add(optn);

    		if (res.error == null) {
    			var tb = res.value;
    			for (var i = 0; i < tb.rows.length; i++) {
    				optn = document.createElement("OPTION");
    				optn.value = tb.rows[i].CodBairro;
    				optn.text = tb.rows[i].Nome;
    				combo.options.add(optn);
    			};
    			$set("txt_bairro", codBairro);
    		};
    	},

		// obsoleto
    	// callbacks.agenciasAereoHotel(res)
    	agenciasAereoHotel: function(res) {

    		if (codEmpresaLogadaB2B > 0) {
    			arrayEmpresas = [];
    			arrayEmpresas.push(dtAgencias.rows[0]["CodEmpresa"]);
    		} else {
    			var dt = clDetalhesPedido.lerEnderecoUsuario(parseInt(PubLogin.getSession("CodUsuario"))).value;
    			dtAgencias = res.value;

    			if (dt.rows.length > 0) {
    				//-- Estado
    				if (dt.rows[0].CodEstado != undefined) {
    					$html(ctrlRefs.divAgenciasMain(), render.main(on.getIterator("CodEstado", dt.rows[0].CodEstado)));
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(dt.rows[0].CodEstado);
    					$set("txt_estado", dt.rows[0].CodEstado);
    				} else {
    					$html(ctrlRefs.divAgenciasMain(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(26);
    					$set("txt_estado", 26);
    				};

    				//-- Cidade
    				if (dt.rows[0].CodCidade != undefined) {
    					startEnv.getIterator("CodCidade", dt.rows[0].CodCidade);
    					startEnv.addOptionsBairros(dt.rows[0].CodCidade);
    					$set("txt_cidade", dt.rows[0].CodCidade);
    				} else {
    					startEnv.getIterator("CodCidade", 5318); //- São Paulo
    					startEnv.addOptionsBairros(5318);
    					$set("txt_cidade", 5318);
    				};

    				//-- Bairro
    				if (dt.rows[0].CodBairro != undefined) {
    					startEnv.getIterator("CodBairro", dt.rows[0].CodBairro);
    					$set("txt_bairro", dt.rows[0].CodBairro);
    				} else {
    					//startEnv.getIterator("CodBairro", 0);
    					$set("txt_bairro", 0);
    				};
    			} else {
    				//Estado
    				$html(ctrlRefs.divAgenciasMain(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    				startEnv.addOptionsEstados(21); //- Brasil
    				startEnv.addOptionsCidades(26);
    				$set("txt_estado", 26);

    				//Cidade
    				startEnv.getIterator("CodCidade", 5318); //- São Paulo
    				startEnv.addOptionsBairros(5318);
    				$set("txt_cidade", 5318);

    				//startEnv.getIterator("CodBairro", 0);
    				$set("txt_bairro", 0);

    			};
    			on.changeEstado();
    			on.changeCidade();
    			on.changeBairro();
    		};
    	},

		// obsoleto
    	// callbacks.agenciasAereo(res)
    	agenciasAereo: function(res) {

    		if (codEmpresaLogadaB2B > 0) {
    			arrayEmpresas = [];
    			arrayEmpresas.push(dtAgencias.rows[0]["CodEmpresa"]);
    		} else {
    			var dt = clDetalhesPedido.lerEnderecoUsuario(parseInt(PubLogin.getSession("CodUsuario"))).value;
    			dtAgencias = res.value;

    			if (dt.rows.length > 0) {
    				//-- Estado
    				if (dt.rows[0].CodEstado != undefined) {
    					$html(ctrlRefs.divAgenciasMain(), render.main(on.getIterator("CodEstado", dt.rows[0].CodEstado)));
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(dt.rows[0].CodEstado);
    					$set("txt_estado", dt.rows[0].CodEstado);
    				} else {
    					$html(ctrlRefs.divAgenciasMain(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(26);
    					$set("txt_estado", 26);
    				};

    				//-- Cidade
    				if (dt.rows[0].CodCidade != undefined) {
    					startEnv.getIterator("CodCidade", dt.rows[0].CodCidade);
    					startEnv.addOptionsBairros(dt.rows[0].CodCidade);
    					$set("txt_cidade", dt.rows[0].CodCidade);
    				} else {
    					startEnv.getIterator("CodCidade", 5318); //- São Paulo
    					startEnv.addOptionsBairros(5318);
    					$set("txt_cidade", 5318);
    				};

    				//-- Bairro
    				if (dt.rows[0].CodBairro != undefined) {
    					startEnv.getIterator("CodBairro", dt.rows[0].CodBairro);
    					$set("txt_bairro", dt.rows[0].CodBairro);
    				} else {
    					//startEnv.getIterator("CodBairro", 0);
    					$set("txt_bairro", 0);
    				};
    			} else {
    				//Estado
    				$html(ctrlRefs.divAgenciasMain(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    				startEnv.addOptionsEstados(21); //- Brasil
    				startEnv.addOptionsCidades(26);
    				$set("txt_estado", 26);

    				//Cidade
    				startEnv.getIterator("CodCidade", 5318); //- São Paulo
    				startEnv.addOptionsBairros(5318);
    				$set("txt_cidade", 5318);

    				//startEnv.getIterator("CodBairro", 0);
    				$set("txt_bairro", 0);
    			};
    			on.changeEstado();
    			on.changeCidade();
    			on.changeBairro();
    		};
    	},

    	// obsoleto
    	// callbacks.agenciasHotel(res)
    	agenciasHotel: function(res) {

    		if (codEmpresaLogadaB2B > 0) {
    			arrayEmpresas = [];
    			arrayEmpresas.push(dtAgencias.rows[0]["CodEmpresa"]);
    		} else {
    			var dt = clDetalhesPedido.lerEnderecoUsuario(parseInt(PubLogin.getSession("CodUsuario"))).value;
    			dtAgencias = res.value;


    			if (dt.rows.length > 0) {
    				//-- Estado
    				if (dt.rows[0].CodEstado != undefined) {
    					$html(ctrlRefs.divAgenciasMainHotel(), render.main(on.getIterator("CodEstado", dt.rows[0].CodEstado)));
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(dt.rows[0].CodEstado);
    					$set("txt_estado", dt.rows[0].CodEstado);
    				} else {
    					$html(ctrlRefs.divAgenciasMainHotel(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(26);
    					$set("txt_estado", 26);
    				};

    				//-- Cidade
    				if (dt.rows[0].CodCidade != undefined) {
    					startEnv.getIterator("CodCidade", dt.rows[0].CodCidade);
    					startEnv.addOptionsBairros(dt.rows[0].CodCidade);
    					$set("txt_cidade", dt.rows[0].CodCidade);
    				} else {
    					startEnv.getIterator("CodCidade", 5318); //- São Paulo
    					startEnv.addOptionsBairros(5318);
    					$set("txt_cidade", 5318);
    				};

    				//-- Bairro
    				if (dt.rows[0].CodBairro != undefined) {
    					startEnv.getIterator("CodBairro", dt.rows[0].CodBairro);
    					$set("txt_bairro", dt.rows[0].CodBairro);
    				} else {
    					//startEnv.getIterator("CodBairro", 0);
    					$set("txt_bairro", 0);
    				};
    			} else {
    				//Estado
    				$html(ctrlRefs.divAgenciasMainHotel(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    				startEnv.addOptionsEstados(21); //- Brasil
    				startEnv.addOptionsCidades(26);
    				$set("txt_estado", 26);

    				//Cidade
    				startEnv.getIterator("CodCidade", 5318); //- São Paulo
    				startEnv.addOptionsBairros(5318);
    				$set("txt_cidade", 5318);

    				//startEnv.getIterator("CodBairro", 0);
    				$set("txt_bairro", 0);
    			};
    			on.changeEstado();
    			on.changeCidade();
    			on.changeBairro();
    		};
    	},

    	// obsoleto
    	// callbacks.agencias(res)
    	agencias: function(res) {

    		if (codEmpresaLogadaB2B > 0) {
    			arrayEmpresas = [];
    			arrayEmpresas.push(dtAgencias.rows[0]["CodEmpresa"]);
    		} else {
    			var dt = clDetalhesPedido.lerEnderecoUsuario(parseInt(PubLogin.getSession("CodUsuario"))).value;
    			dtAgencias = res.value;

    			if (dt.rows.length > 0) {
    				//-- Estado
    				if (dt.rows[0].CodEstado != undefined) {
    					$html(ctrlRefs.agencia(), render.main(on.getIterator("CodEstado", dt.rows[0].CodEstado)));
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(dt.rows[0].CodEstado);
    					$set("txt_estado", dt.rows[0].CodEstado);
    				} else {
    					$html(ctrlRefs.agencia(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    					startEnv.addOptionsEstados(21); //- Brasil
    					startEnv.addOptionsCidades(26);
    					$set("txt_estado", 26);
    				};

    				//-- Cidade
    				if (dt.rows[0].CodCidade != undefined) {
    					startEnv.getIterator("CodCidade", dt.rows[0].CodCidade);
    					startEnv.addOptionsBairros(dt.rows[0].CodCidade);
    					$set("txt_cidade", dt.rows[0].CodCidade);
    				} else {
    					startEnv.getIterator("CodCidade", 5318); //- São Paulo
    					startEnv.addOptionsBairros(5318);
    					$set("txt_cidade", 5318);
    				};

    				//-- Bairro
    				if (dt.rows[0].CodBairro != undefined) {
    					startEnv.getIterator("CodBairro", dt.rows[0].CodBairro);
    					$set("txt_bairro", dt.rows[0].CodBairro);
    				} else {
    					//startEnv.getIterator("CodBairro", 0);
    					$set("txt_bairro", 0);
    				};
    			} else {
    				//Estado
    				$html(ctrlRefs.agencia(), render.main(on.getIterator("CodEstado", 26))); //- São Paulo
    				startEnv.addOptionsEstados(21); //- Brasil
    				startEnv.addOptionsCidades(26);
    				$set("txt_estado", 26);

    				//Cidade
    				startEnv.getIterator("CodCidade", 5318); //- São Paulo
    				startEnv.addOptionsBairros(5318);
    				$set("txt_cidade", 5318);

    				//startEnv.getIterator("CodBairro", 0);
    				$set("txt_bairro", 0);

    			};

    			on.changeEstado();
    			on.changeCidade();
    			on.changeBairro();
    		};

    		startEnv.showLoading(false);
    	}
    };

    var startEnv = {

    	// startEnv.main(pCodOperadora)
    	main: function(pCodOperadora) {
    		// verificação 1 de empresa logada
    		codEmpresaLogadaB2B = PubLogin.getSessionEmpresa("externo");
    		if (codEmpresaLogadaB2B > 0) {
    			arrayEmpresas = [];
    			//arrayEmpresas.push(dtAgencias.rows[0]["CodEmpresa"]); // nesse ponto, isso não funcionaria
    			arrayEmpresas.push(codEmpresaLogadaB2B);
    			startEnv.showLoading(false);
    		};

    		// verificação 2 de empresa logada 
    		if ($queryString('AreaAgente') == 'true') {
    			arrayEmpresas = [];
    			arrayEmpresas.push(parseInt(PubLogin.getSession("CodEmpresa")));
    			startEnv.showLoading(false);
    			return;
    		};

    		//startEnv.listarAgencias(pCodPedido);
    		codOperadora = pCodOperadora;
    		startEnv.agenciasBWList();
    	},

    	// startEnv.agenciasBWList()
    	agenciasBWList: function() {
    		var codUsuario = parseInt(PubLogin.getSession("CodUsuario"));
    		var dtEnderecoUsr = clDetalhesPedido.lerEnderecoUsuario(codUsuario).value;

    		if (dtEnderecoUsr != null && dtEnderecoUsr.rows.count() > 0) {
    			// Estado 26 é São Paulo
    			codEstado = isNaN(parseInt(dtEnderecoUsr.rows[0].CodEstado)) ? 26 : parseInt(dtEnderecoUsr.rows[0].CodEstado);
    			// Cidade 5318 é São Paulo (capital)
    			codCidade = isNaN(parseInt(dtEnderecoUsr.rows[0].CodCidade)) ? 5318 : parseInt(dtEnderecoUsr.rows[0].CodCidade);
    			// Bairro 0 retornará todos os bairros
    			codBairro = isNaN(parseInt(dtEnderecoUsr.rows[0].CodBairro)) ? 0 : parseInt(dtEnderecoUsr.rows[0].CodBairro);
    		} else {
    			codEstado = 26;
    			codCidade = 5318;
    			codBairro = 0;
    		};

    		// imagem de loading
    		//$html(ctrlRefs.agencia(), "<div align='center'><img src='imgs/load.gif' /><br /><br />Por favor, aguarde. </div>");
    		ctrlRefs.agencia().style.display = '';

    		// o datatable de agências será preenchido pelo callback
    		clDetalhesPedido.listarAgenciasBWListRecursive(codOperadora, codEstado, codCidade, codBairro, callbacks.agenciasBWList);

    		// testes
    		//codOperadora = 1;
    		//codOperadora = 2785;
    		//clDetalhesPedido.listarAgenciasBWListRecursive(codOperadora, 26, 5318, 861, callbacks.agenciasBWList);
    	},

    	// startEnv.addOptionsEstados2()
    	addOptionsEstados2: function() {
    		clLogin.listarEstadosPorPais(codPais, callbacks.optionsEstados);
    	},

    	// startEnv.addOptionsCidades2()
    	addOptionsCidades2: function() {
    		clLogin.listarCidadesPorEstado(codEstado, callbacks.optionsCidades);
    	},

    	// startEnv.addOptionsBairros2()
    	addOptionsBairros2: function() {
    		clLogin.listarBairrosPorCidadePorAgencia(codCidade, callbacks.optionsBairros);
    	},

    	// startEnv.getCodOperadora()
    	getCodOperadora: function(codPedido) {
    		//-- Obtendo o código da empresa (operadora)
    		var jDtHeader = DetalhesPacote.exec.getJDTheader(codPedido);
    		return parseInt(jDtHeader.getDrValue(0, "CodEmpresaOperadora"));
    	},

    	// startEnv.pushCodOperadora()
    	pushCodOperadora: function() {
    		// se não houver agêncis disponível (por causa das white/black lists), a agência será a operadora
    		if (arrayEmpresas.length == 0 && countAgenciasDisponiveis == 0) {
    			arrayEmpresas.push(codOperadora);
    		};
    	},

    	// loading dos pacotes
    	// startEnv.showLoading(true | false)
    	showLoading: function(display) {
    		if ($("divLoading")) {
    			$("divLoading").style.display = display ? '' : 'none';
    		};
    	},

    	// obsoleto
    	// startEnv.listarAgencias(pCodPedido)
    	listarAgencias: function(pCodPedido) {
    		//-- Obtendo o código da empresa
    		var jDtHeader = DetalhesPacote.exec.getJDTheader(pCodPedido);

    		var codOperadora = parseInt(jDtHeader.getDrValue(0, "CodEmpresaOperadora"));
    		codEmpresaLogadaB2B = PubLogin.getSessionEmpresa("externo");

    		dtAgencias = clDetalhesPedido.listarAgencias(codOperadora, codEmpresaLogadaB2B, callbacks.agencias);

    		$html(ctrlRefs.agencia(), "<div align='center'><img src='imgs/load.gif' /><br /><br />Por favor, aguarde. </div>");
    		ctrlRefs.agencia().style.display = '';
    	},

    	// obsoleto
    	//-- HOTEL
    	// startEnv.mainHotel(pCodOperadora)
    	mainHotel: function(pCodOperadora) {
    		codEmpresaLogadaB2B = PubLogin.getSessionEmpresa("externo");
    		dtAgencias = clDetalhesPedido.listarAgencias(pCodOperadora, codEmpresaLogadaB2B, callbacks.agenciasHotel);
    		$html(ctrlRefs.divAgenciasMainHotel(), "<div align='center'><img src='imgs/load.gif' /><br /><br />Por favor, aguarde.</div>");
    		ctrlRefs.divAgenciasMainHotel().style.display = '';
    	},

    	// obsoleto
    	//-- AEREO
    	// startEnv.mainAereo(pCodOperadora)
    	mainAereo: function(pCodOperadora) {
    		codEmpresaLogadaB2B = PubLogin.getSessionEmpresa("externo");
    		dtAgencias = clDetalhesPedido.listarAgencias(pCodOperadora, codEmpresaLogadaB2B, callbacks.agenciasAereo);
    		$html(ctrlRefs.divAgenciasMain(), "<div align='center'><img src='imgs/load.gif' /><br /><br />Por favor, aguarde.</div>");
    		ctrlRefs.divAgenciasMain().style.display = '';
    	},

    	// obsoleto
    	//-- AEREO + HOTEL
    	// startEnv.mainAereoHotel(pCodOperadora)
    	mainAereoHotel: function(pCodOperadora) {

    		//--- VERIFICAR AQUI TRATAMENTO

    		codEmpresaLogadaB2B = 0; //PubLogin.getSessionEmpresa("externo");
    		dtAgencias = clDetalhesPedido.listarAgencias(pCodOperadora, codEmpresaLogadaB2B, callbacks.agenciasAereoHotel);
    		$html(ctrlRefs.divAgenciasMain(), "<div align='center'><img src='imgs/load.gif' /><br /><br />Por favor, aguarde.</div>");
    		ctrlRefs.divAgenciasMain().style.display = '';
    	},

    	// obsoleto
    	// startEnv.addOptionsEstados(pCodPais)
    	addOptionsEstados: function(pCodPais) {
    		var res = clLogin.listarEstadosPorPais(pCodPais);
    		if (res.error == null) {
    			var tb = res.value;
    			var combo = $('txt_estado');
    			combo.innerHTML = '';

    			for (var i = 0; i < tb.rows.length; i++) {
    				combo.addOption('', tb.rows[i].Nome + ' - ' + tb.rows[i].Uf, tb.rows[i].CodEstado);
    			};

    			combo.addOption('', 'Selecione o Estado', '-1');
    		}
    		else {
    			var combo = $('txt_estado');
    			combo.innerHTML = '';
    			combo.addOption('', 'Selecione o Estado', '-1');
    		};
    	},

    	// obsoleto
    	// startEnv.addOptionsCidades(pCodEstado)
    	addOptionsCidades: function(pCodEstado) {
    		var res = clLogin.listarCidadesPorEstado(pCodEstado);
    		if (res.error == null) {
    			var tb = res.value;
    			var combo = $('txt_cidade');
    			combo.innerHTML = '';
    			combo.addOption('', 'Selecione a Cidade', '-1');
    			for (var i = 0; i < tb.rows.length; i++) {
    				combo.addOption('', tb.rows[i].Nome, tb.rows[i].CodCidade);
    			};
    		}
    		else {
    			var combo = $('txt_cidade');
    			combo.innerHTML = '';
    			combo.addOption('', 'Selecione a Cidade', '-1');
    		};
    	},

    	// obsoleto
    	// startEnv.addOptionsBairros(pCodCidade)
    	addOptionsBairros: function(pCodCidade) {
    		var res = clLogin.listarBairrosPorCidadePorAgencia(pCodCidade);
    		if (res.error == null) {
    			var tb = res.value;
    			var combo = $('txt_bairro');
    			combo.innerHTML = '';
    			combo.addOption('', 'Selecione o Bairro', '-1');
    			for (var i = 0; i < tb.rows.length; i++) {
    				combo.addOption('', tb.rows[i].Nome, tb.rows[i].CodBairro);
    			};

    		} else {
    			var combo = $('txt_bairro');
    			combo.innerHTML = '';
    			combo.addOption('', 'Selecione o Bairro', '-1');
    		};
    	},

    	// obsoleto
    	// startEnv.getIterator(pCampo, pCod)
    	getIterator: function(pCampo, pCod) {
    		$html(ctrlRefs.divAgencias(), '<table class="tabelas">' + render.listaAgencias(on.getIterator(pCampo, pCod)) + '</table>');
    	}
    };

    this.goTo = {
    	//-- Pacotes
		main: function(pCodPedido) {
    		startEnv.main(startEnv.getCodOperadora(pCodPedido));
    	},

    	//-- HOTEL
    	// goTo.mainHotel(pCodOperadora)
    	mainHotel: function(pCodOperadora) {
    		//startEnv.mainHotel(pCodOperadora);
    		ctrlRefs.agencia = ctrlRefs.divAgenciasMainHotel;
    		startEnv.main(pCodOperadora);
    	},

    	//-- AEREO
    	// goTo.mainAereo(pCodOperadora)
    	mainAereo: function(pCodOperadora) {
    		//startEnv.mainAereo(pCodOperadora);
    		ctrlRefs.agencia = ctrlRefs.divAgenciasMain;
    		startEnv.main(pCodOperadora);
    	},

    	//-- AEREO + HOTEL
    	// goTo.mainAereoHotel(pCodOperadora)
    	mainAereoHotel: function(pCodOperadora) {
    		//startEnv.mainAereoHotel(pCodOperadora);
    		ctrlRefs.agencia = ctrlRefs.divAgenciasMain;
    		startEnv.main(pCodOperadora);
    	},

    	agenciasBWListPorPedido: function(codPedido) {
    		startEnv.agenciasBWList(startEnv.getCodOperadora(codPedido));
    	},

    	agenciasBWList: function(codOperadora) {
    		startEnv.agenciasBWList(codOperadora);
    	}
    };

    this.exec = {
    	getIterator: function(pCampo, pCod) {
    		startEnv.getIterator(pCampo, pCod);
    	},

    	// AgenciaPacote.exec.clickOpcaoAgencia(pCodEmpresa, thisOBJ)
    	clickOpcaoAgencia: function(pCodEmpresa, thisOBJ) {
    		on.clickOpcaoAgencia(pCodEmpresa, thisOBJ);
    	},
    	
    	getAgenciasSelecionadas: function() {
    		startEnv.pushCodOperadora();
    		return arrayEmpresas;
    	},
    	
    	isAgenciaSelecionada: function() {
    		// Se não houver agências disponíveis (por causa das white/black lists), deve permitir vender sem agência
    		return arrayEmpresas.length > 0 || countAgenciasDisponiveis == 0;
    	},
    	
    	getDtDadosAgencia: function() {
    		startEnv.pushCodOperadora();
    		return clDetalhesPacote.getNomeEmpresa(arrayEmpresas[0]).value;
    	}
    };
    
    this.constructor = new function()
    {
    	tpl = new Template("AgenciasPacote");
        jsCommon = new jCommon();
    };
};