
	
	function inIframe () {
    try {
        return window.self !== window.top;
    } catch (e) {
        return true;
    }
}
		$(function(){
			try {
				if (typeof window.parent['closeModal'] == 'function' && inIframe()) { 
					 window.parent['clearTimeoutModal']();
					window.parent['closeModal']();
				}
			} catch(e) {
			
			}

                try {
				  if (typeof window.parent['removeLoadingModal'] == 'function' && inIframe()) { 
				     window.parent['removeLoadingModal'](window.name.split("_modalFrame")[0]);
				  }
				} catch(e) {
                                }

				// if(Utils.queryString("listLocale") == 'false'){
					// $("#listLocalesWrapperMin").remove();
					// $("#listLocalesWrapper").remove();
				// }
				
				// $(".filterMin").click(function(){
					// $(".filterFull").hide();
					// $(".filterMin").show();
					// $(this).prev().show();
					// $(this).hide();
				// });
				
				// $(".titleFull").click(function(){
					// $(".filterFull").hide();
					// $(".filterMin").show();
					// $(this).parent().next().show();
					// $(this).parent().hide();
				// });
				
				// if(Utils.verifyCall() == 'exibit') { //Para Modo Exibição Oculta todos filtros e buscas
					// // $("#searchWrapper").hide();
					// // $("#addressWrapper").hide();
					// // $("#addressWrapper").hide();
					// // $("#sidebarWrapper > *:not(#addressInfo)").hide();			
					// $("#searchWrapper").remove();
					// $("#addressWrapper").remove();
					// $("#addressWrapper").remove();
					// $("#sidebarWrapper > *:not(#addressInfo)").remove();
				// }
				
		});	

		var defaultDetails ={
			initialPosition:{
				latitude:  "-23.549",
				longitude: "-46.633"
			},
			initialMarker: {
				url: 	'data:image/png;base64,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',
				width: 	34,
				height: 44
			},
			endMarker: {
				url: 	'giw2/images/ico/map/red.png',
				width: 	34,
				height: 44
			},
			maxZoom: 14,
			maxRadius: 7
			
		}

		var Utils = {
			queryString : function(name){ // Função que detecta melhor Query String à ser utilizada
			
				var url = location.search;
				var arrUrl = url.split("|");
				
				if (name == "poiLat" || name == "poiLong" || name == "poiLabel" || name == "poiAddr"){
					if (arrUrl.length > 1) {
						
						var arr = new Array();
						
						for(i=0;i<arrUrl.length;i++){
							arr[i] = this.queryStringArray(name,arrUrl[i]);
						}
						
						return arr;
					}
					else {
						return this.queryStringNormal(name);	
					}
				}else{
					return this.queryStringNormal(name);	
				}
			},
			queryStringNormal : function(name){ //Função de Query String para receber palavras por Url
			
				var url = location.search;
				name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
				
				var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
				results = regex.exec(url);
					
				if (results == null) {
					return undefined;
				}else{
						
					var x = decodeURIComponent(results[1].replace(/\+/g, " "));
					return x != "undefined"? x : undefined;
				}
			},
			queryStringArray : function(name, url){ //Função de Query String que retorna array de parâmetros repetidos na Url
				
				name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
				var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
				results = regex.exec(url);
					
				if (results == null) {
					return undefined;
				}else{
					var x = decodeURIComponent(results[1].replace(/\+/g, " "));
					return x != "undefined"? x : undefined;
				}
			},
			missingPostal : function(place){
				var missingPostal = true;
				if(place.address_components) {
					for(var x = 0; x < place.address_components.length; x++){
						var plc = place.address_components[x];
						
						if(plc.types[0] == "postal_code_prefix"){
							missingPostal = false;
							continue;
						}else if(plc.types[0] == "postal_code"){
							missingPostal = false;
							continue;
						}
					
					}
				}
				
				if(missingPostal) {
					return true;
				} else {
					return false;
				}
			},
			chooseReturn : function(){
			
				if(Utils.queryString("internalMap") == 'true'){
					return window.parent;
				}else{
					return window.opener;
				}
			},
			cleanString : function (strToReplace) {
				str_acento= "áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ";
				str_sem_acento = "aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC";
				
				var nova="";
				
				for (var i = 0; i < strToReplace.length; i++) {
					if (str_acento.indexOf(strToReplace.charAt(i)) != -1) {
						nova+=str_sem_acento.substr(str_acento.search(strToReplace.substr(i,1)),1);
					} else {
						nova+=strToReplace.substr(i,1);
					}
				}
				nova = nova.replace(/\W+/g, " ");
				return nova;
			},
			placeToAddress : function(place, km, mapInstance){
				var addr;
				var formatted = place.formatted_address;
				var prefix = "";
				var streetName = "";
				var number = "";
				var bairro ="";
				var city = ""
				var state = "";
				var uF = "";
				var postal = "";
				var postalpt1 = "";
				var postalpt2 = "";
				var poi=""
				
				var searchedFor = mapInstance? mapInstance.searchedFor: null;
				var draggedPin = mapInstance? mapInstance.draggedPin: null;
				
				if(place.address_components) {
					for(var x = 0; x < place.address_components.length; x++){
						var plc = place.address_components[x];
						
						if(plc.types[0] == "route"){
							var testStr = plc.long_name.split(" ");
							//for(var pref = 0; pref < prefixArray.length; pref++){
							for(var lt in LogTypes){
								//if(testStr[0].toLowerCase() == prefixArray[pref].toLowerCase()){
								if(LogTypes[lt].test(testStr[0].toLowerCase())){
									prefix = LogTypes[lt].name;
									streetName ="";
									for(var nm = 1; nm < testStr.length; nm++){
										streetName += testStr[nm];
										streetName += " ";
									}
									streetName = $.trim(streetName);
									break;
								}else{
									var expr = /^([a-zA-Z]{2,2}-[0-9]{3,3})$/
									if(expr.test(testStr[0].toLowerCase())){
										prefix = "Rodovia"
									}
									streetName = plc.long_name;
									
								}
							}
							continue;
						}
						
						if(plc.types[0] == "bus_station"){
							var testStr = plc.long_name.replace(",","").split(" ");
							for(var lt in LogTypes){
								if(LogTypes[lt].test(testStr[0].toLowerCase())){
									prefix = LogTypes[lt].name;
									streetName ="";
									for(var nm = 1; nm < testStr.length; nm++){
										if(nm == (testStr.length -1)){
											if(!isNaN(testStr[nm])){
												number = testStr[nm];
											}else{
												streetName += testStr[nm];
												streetName += " ";
											}
										}else{
											streetName += testStr[nm];
											streetName += " ";
										}
									}
									streetName = $.trim(streetName);
									break;
								}else{
									streetName = plc.long_name;
								}
							}
							continue;
						}
						
						if(plc.types[0] == "street_number"){
							number = plc.long_name;
							continue;
						}
						
						if(plc.types[0] == "establishment" || plc.types[0] == "premise"){
							poi = plc.long_name;
							continue;
						}
						
						if(plc.types[0] == "neighborhood"){
							bairro = plc.long_name;
							continue;
						} 
						
						if(plc.types[0] == "sublocality_level_1" && !bairro){
							bairro = plc.long_name;
							continue;
						} 
						
						if(plc.types[0] == "locality"){
							city = plc.long_name;
							continue;
						}else if(plc.types[0] == "administrative_area_level_2"){
							city = plc.long_name;
							continue;
						}
						
						if(plc.types[0] == "administrative_area_level_1"){
							state = plc.long_name;
							uF = plc.short_name;
							continue;
						}
						
						if(plc.types[0] == "postal_code"){
							postal = plc.long_name;
							postalpt1 = plc.long_name.split("-")[0];
							postalpt2 = plc.long_name.split("-")[1];
							continue;
						}else if(plc.types[0] == "postal_code_prefix"){
							postal = plc.long_name + "-000";
							postalpt1 = plc.long_name;
							postalpt2 = "000";
							continue;
						}
					}
					
					if(uF == "DF" && city == "Brasília"){
						for(var y = 0; y < place.address_components.length; y++){
							var plc = place.address_components[y];	
							if(prefix == ''){
								prefix = 'Brasilia_End';
							}
							if(plc.types[0] == "sublocality_level_5" && streetName == ''){
								var name = plc.short_name.split(" ");
								for(var z = 0; z < name.length; z++){
									if(!isNaN(name[z]) && number == ''){
										number = name[z];
									}else{
										streetName += name[z];
										streetName += " ";
									}
								}
								streetName = $.trim(streetName);
							}
						}
					}
				}
				
				addr = {
					address: formatted,
					attributes: {
						StPreType: prefix,
						StName: streetName,
						AddNum: number,
						neighborhood: bairro,
						City : city,
						Subregion : state,
						Postal: postal,
						Postal_Pt1 : postalpt1,
						Postal_Pt2 : postalpt2,
						UF : uF,
						Info: poi,
						lastKm : km,
						searchedFor: searchedFor,
						draggedPin : draggedPin
					}
				}
				return addr;
			},
			verifyCall : function() {
				var ret = "other";
				
				if (Utils.queryString("type") == "origem"||Utils.queryString("type") == "ORIGEM"||Utils.queryString("type") == "Origem"||Utils.queryString("type") == "orign"){
					ret = "orign"
				}
				
				if (Utils.queryString("type") == "destino"||Utils.queryString("type") == "DESTINO"||Utils.queryString("type") == "Destino"||Utils.queryString("type") == "destiny"){
					ret = "destiny"
				} 
				
				if (Utils.queryString("type") == "consulta"||Utils.queryString("type") == "CONSULTA"||Utils.queryString("type") == "Search"||Utils.queryString("type") == "SEARCH"){
					ret = "consult"
				}
				
				if (Utils.queryString("type") == "exibit"||Utils.queryString("type") == "EXIBIT" || Utils.queryString("type") == "Exibicao"||Utils.queryString("type") == "EXIBICAO"||Utils.queryString("type") == "exibicao"){
					ret = "exibit"
				}
				
				if (Utils.queryString("type") == "search"||Utils.queryString("type") == "SEARCH" || Utils.queryString("type") == "Search" || Utils.queryString("type") == "busca" || Utils.queryString("type") == "Busca" || Utils.queryString("type") == "BUSCA"){
					ret = "search"
				}
				
				if (Utils.queryString("type") == "site"||Utils.queryString("type") == "Site" || Utils.queryString("type") == "SITE"){
					ret = "site"
				}
				
				return ret;
			},
			verifyCompany: function() {
				var ret = "porto";
				var comp = Utils.queryString("company");
				if(comp) comp = comp.toLowerCase();
				if (comp == "porto" || comp == "porto seguro" || comp == "portoseguro"  || comp == "porto_seguro" ){
					ret = "porto";
				} else if (comp == "azul" || comp == "azulseguros" || comp == "azul_seguros"){
					ret = "azul";
				} else if (comp == "itau" || comp == "itauseguros" || comp == "itau_seguros"){
					ret = "itau";
				}	
				
				return ret;
			},
			splitMKTAddress : function(data) {
				var prefix ="";
				var name ="";
				var num ="";
				
				if(data.address){
					var add = data.address.split(",");
					addr = add[0];
					addr = addr.split(" ");
					for(var x = 0; x < addr.length; x++){
						var ad = addr[x];
						for(var lt in LogTypes){
							if(LogTypes[lt].test(ad.toLowerCase())){
								prefix = LogTypes[lt].name;
								streetName ="";
								for(var nm = 1; nm < addr.length; nm++){
									streetName += addr[nm];
									streetName += " ";
								}
								name = $.trim(streetName);
								break;
							}
						}
					}
					
					var adn = add[1];
					adn = adn.split(" ");
					for(var y = 0; y < adn.length; y++){
						var nn = adn[y];
						if(!isNaN(nn) && nn != ''){
							num = nn;
							break;
						}
					}
					
					data.nomeTipoLogradouro = prefix;
					data.nomeLogradouro = name;
					data.numeroLogradouro = num;
				}
				return data;
			},
			testIE : function() {

					var ua = window.navigator.userAgent;
					var msie = ua.indexOf("MSIE ");

					if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
						return true;
					else if(ua.indexOf("Firefox") != -1)
						return true;
					else                  // If another browser, return 0
						return false;

			   return false;
			},
			testIE2 : function() {

					var myNav = navigator.userAgent.toLowerCase();
					var ie = (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
					
					if(ie){
						if (ie < 9) {
							return true;
						} else {
							return false;
						}
					}
			},
			getNamespace: function(selector, bool){
				if(bool){
					if(selector.indexOf(":") != -1){
						if(Utils.testIE()){
							return selector;
						}else{
							return selector.split(":")[1];
						}
					}else{
						return selector;
					}
				}else{
					return selector;
				}
			},
			setXlmDocValue: function(namespace, xmlDoc, value){
				//PROBLEMAS MAPA - SORRY
				if($(Utils.getNamespace(namespace, true)  , xmlDoc).length > 0)
					$(Utils.getNamespace(namespace, true)  , xmlDoc).text(value);
				else
					$(Utils.getNamespace(namespace, false)  , xmlDoc).text(value);
			},
			createAddressStr : function (place){
				var address = '';
				// if (place.address_components) {
					// address = [
						// (place.address_components[0] && place.address_components[0].short_name || ''),
						// (place.address_components[1] && place.address_components[1].short_name || ''),
						// (place.address_components[2] && place.address_components[2].short_name || '')
					// ].join(' ');
				// }
				return place.formatted_address;
			},
			organizeWords : function(str){ //Função para facilitar o uso de labels com informações já contidas no código
		
				if(str != undefined){
					var arr = str.split(" ");
					str="";
					for (i=0;i<arr.length;i++){	
						var wrd = arr[i];
						if (wrd.substring(0,1) == "#") { wrd = wrd.replace("#",""); };
						var rest = (wrd.substring(1)).toLowerCase();
						str += ((wrd.substring(0,1)).toUpperCase())+rest;
						str += " ";
					}	
				}
				return str;
			},
			convertToObject : function(obj, node){
				
				$("> *", $(node)).each(function(){
					if($(this).children().length > 0) {
						obj[$(this)[0].tagName] = {};
						obj[$(this)[0].tagName] = Utils.convertToObject(obj[$(this)[0].tagName], $(this));
					} else {
						if(obj[$(this)[0].tagName]) {
							obj[$(this)[0].tagName].push($(this).text());
						} else {
							obj[$(this)[0].tagName] = [$(this).text()];
						}
					}
				});
				
				return obj;
			},
			convertToObject2 :function(xml) {
				// Create the return object
			var obj = {};

			if (xml.nodeType == 1) { // element
				// do attributes
				if (xml.attributes.length > 0) {
				obj["@attributes"] = {};
					for (var j = 0; j < xml.attributes.length; j++) {
						var attribute = xml.attributes.item(j);
						obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
					}
				}
			} else if (xml.nodeType == 3) { // text
				obj = xml.nodeValue;
			}

			// do children
			if (xml.hasChildNodes()) {
				for(var i = 0; i < xml.childNodes.length; i++) {
					var item = xml.childNodes.item(i);
					var nodeName = item.nodeName;
					if (typeof(obj[nodeName]) == "undefined") {
						if(nodeName != "#text") {
							obj[nodeName] = [Utils.convertToObject2(item)];
						} else {
							if($.trim(item.nodeValue) != "") {
								obj = Utils.convertToObject2(item);
							}
						}
					} else {
						if (typeof(obj[nodeName].push) == "undefined") {
							var old = obj[nodeName];
							obj[nodeName] = [];
							obj[nodeName].push(old);
						}
						obj[nodeName].push(Utils.convertToObject2(item));
					}
				}
			}
			return obj;
			},
			callRdvService : function (addr, callback){
				var xmlDoc = $.parseXML(Rodovia.request);
				
				$(Rodovia.querySelector , xmlDoc).text(addr);
				
				if(xmlDoc.xml){	
					xmlString = xmlDoc.xml;
				}else{
					xmlString =(new XMLSerializer()).serializeToString(xmlDoc);
				}
				
				var xhr = $.ajax({
					url: Rodovia.url,
					type: "POST",
					data: xmlString,
					timeout: 15000,
					//dataType: "text",
					contentType: "text/xml;charset=UTF-8;SOAPAction=\"" + ""+ "\"",
					success: function(data) {
						var x = $("Record",data)[0];
						
						var latlong = {};
						
						latlong.latitude = $("Value:has(X) Y",x).text();
						latlong.longitude = $("Value:has(X) X",x).text();
						
						callback(latlong);
					},
					error: function(data) {
						
					}
				});
			},
			callCustomLayer : function (options, mapInstance){
				
				var xmlDoc = $.parseXML(options.customServiceSettings.request());
				var callOpt = options.customServiceSettings;
				var xmlString;
				
				var radius = mapInstance.radius;
				var bool = callOpt.hasNamespace;
				//if(mapInstance.useMaxQtt){
					if(callOpt.parameters.qtdSelector){
						Utils.setXlmDocValue(callOpt.parameters.qtdSelector, xmlDoc , 40);
						//$(Utils.getNamespace(callOpt.parameters.qtdSelector, bool)  , xmlDoc).text(40);
					}
				//}
				
				var center = mapInstance.latlngCenter;
				
				if(callOpt.parameters.latitudeSelector){
					Utils.setXlmDocValue(callOpt.parameters.latitudeSelector, xmlDoc , center.latitude.toString());					
					//$(Utils.getNamespace(callOpt.parameters.latitudeSelector, bool)  , xmlDoc).text(center.latitude.toString());
				}
				
				if(callOpt.parameters.longitudeSelector){
					Utils.setXlmDocValue(callOpt.parameters.longitudeSelector, xmlDoc , center.longitude.toString());
					//$(Utils.getNamespace(callOpt.parameters.longitudeSelector, bool) , xmlDoc).text(center.longitude.toString());
				}
				
				if(callOpt.parameters.radiusSelector){
					$(callOpt.parameters.radiusSelector, xmlDoc).text(radius.toString());
				}
				
				if(callOpt.parameters.otherSelector){
					var selectors = callOpt.parameters.otherSelector();
					for (var x in selectors){
						if(selectors[x].paramurl){
							if(Utils.queryString(selectors[x].paramurl)){
								$(selectors[x].operator, xmlDoc).text("=");
								$(selectors[x].value, xmlDoc).text(Utils.queryString(selectors[x].paramurl.toString()));	
							}
						}else if (selectors[x].fieldSelector){
							Utils.setXlmDocValue(selectors[x].fieldSelector, xmlDoc, selectors[x].valueFixed.toString());
							//$(Utils.getNamespace(selectors[x].fieldSelector, bool), xmlDoc).text(selectors[x].valueFixed.toString());	
						}
					}
				}
				
				if(xmlDoc.xml){	
					xmlString = xmlDoc.xml;
				}else{
					xmlString =(new XMLSerializer()).serializeToString(xmlDoc);
				}
				
				var xhr = $.ajax({
					url: callOpt.url,
					type: "POST",
					data: xmlString,
					timeout: 15000,
					//dataType: "text",
					contentType: "text/xml;charset=UTF-8;SOAPAction=\"" + callOpt.SOAPAction + "\"",
					success: function(data) {
						var bool = callOpt.hasNamespace;
						var xmlData;
						if(data.xml && !callOpt.response.returnAsCdata) data = data.xml;
						if (callOpt.response.returnAsCdata) {
							var cData = $(callOpt.response.cdataSelector, data).text();
							xmlData = $.parseXML(cData);
						}else{
							if(Utils.testIE2()) xmlData = $.parseXML(data);
							else  xmlData = data;
						}
						
						var returnData = new Array();
						
						if(bool && $("faultcode", xmlData).length > 0){
						
						}else{
							//PROBLEMAS MAPA - SORRY
							var eachSel = Utils.getNamespace(callOpt.response.eachSelector, bool);

                            var encontrou = false;
							
							$(eachSel, xmlData).each(function(idx, el) {
                                encontrou = true;

								var latitude = $(Utils.getNamespace(callOpt.response.latitudeSelector, bool), el).text();
								if(latitude.indexOf(",") != -1) latitude = latitude.replace(",",".");
								var longitude = $(Utils.getNamespace(callOpt.response.longitudeSelector, bool), el).text();
								if(longitude.indexOf(",") != -1) longitude = longitude.replace(",",".");
								var description = $(Utils.getNamespace(callOpt.response.descriptionSelector, bool), el).text();
								var code = $(Utils.getNamespace(callOpt.response.codeSelector, bool), el).text();
								var address="";
								
								if(callOpt.response.taddressSelector){
									address += $.trim($(Utils.getNamespace(callOpt.response.taddressSelector, bool), el).text());
									address += " ";
								}
								
								address += $.trim($(Utils.getNamespace(callOpt.response.addressSelector, bool), el).text()); //Endereço sempre deverá ter
								
								if(callOpt.response.numberSelector){
									address += " ";
									address += $.trim($(Utils.getNamespace(callOpt.response.numberSelector, bool), el).text());
									
								}
								
								if(callOpt.response.districtSelector){
									address += " - ";
									address += $.trim($(Utils.getNamespace(callOpt.response.districtSelector, bool), el).text());
								}
								
								if(callOpt.response.citySelector){
									address += " - ";
									address += $.trim($(Utils.getNamespace(callOpt.response.citySelector, bool), el).text());
								}
								
								if(callOpt.response.ufSelector){
									if(callOpt.response.citySelector)address += "/";
									else address += " ";
									address += $.trim($(Utils.getNamespace(callOpt.response.ufSelector, bool), el).text());
								}
								
								var phone = "";
								
								if(callOpt.response.phoneSelector){
									if(callOpt.response.dddSelector){
										phone += "(";
										phone += $.trim($(Utils.getNamespace(callOpt.response.dddSelector, bool), el).first().text());
										phone += ") ";
									}
									phone += $.trim($(Utils.getNamespace(callOpt.response.phoneSelector, bool), el).first().text());
								}
								var elementData ={
									latitude  	: latitude,
									longitude 	: longitude,
									code 		: code,
									description : description,
									address		: address,
									phone		: phone
								}
								
								// $.extend(true, elementData, Utils.convertToObject({}, el));
								$.extend(true, elementData, Utils.convertToObject2(el));
								elementData.latitude = latitude.replace(",",".");
								elementData.longitude = longitude.replace(",",".");
								returnData.push(elementData);
							});

                            if( !encontrou ) {
								eachSel = Utils.getNamespace(callOpt.response.eachSelector, false);

								$(eachSel, xmlData).each(function(idx, el) {
									var latitude = $(Utils.getNamespace(callOpt.response.latitudeSelector, false), el).text();
									if(latitude.indexOf(",") != -1) latitude = latitude.replace(",",".");
									var longitude = $(Utils.getNamespace(callOpt.response.longitudeSelector, false), el).text();
									if(longitude.indexOf(",") != -1) longitude = longitude.replace(",",".");
									var description = $(Utils.getNamespace(callOpt.response.descriptionSelector, false), el).text();
									var code = $(Utils.getNamespace(callOpt.response.codeSelector, false), el).text();
									var address="";
									
									if(callOpt.response.taddressSelector){
										address += $.trim($(Utils.getNamespace(callOpt.response.taddressSelector, false), el).text());
										address += " ";
									}
									
									address += $.trim($(Utils.getNamespace(callOpt.response.addressSelector, false), el).text()); //Endere&#65533;o sempre dever&#65533; ter
									
									if(callOpt.response.numberSelector){
										address += " ";
										address += $.trim($(Utils.getNamespace(callOpt.response.numberSelector, false), el).text());
										
									}
									
									if(callOpt.response.districtSelector){
										address += " - ";
										address += $.trim($(Utils.getNamespace(callOpt.response.districtSelector, false), el).text());
									}
									
									if(callOpt.response.citySelector){
										address += " - ";
										address += $.trim($(Utils.getNamespace(callOpt.response.citySelector, false), el).text());
									}
									
									if(callOpt.response.ufSelector){
										if(callOpt.response.citySelector)address += "/";
										else address += " ";
										address += $.trim($(Utils.getNamespace(callOpt.response.ufSelector, false), el).text());
									}
									
									var phone = "";
									
									if(callOpt.response.phoneSelector){
										if(callOpt.response.dddSelector){
											phone += "(";
											phone += $.trim($(Utils.getNamespace(callOpt.response.dddSelector, false), el).first().text());
											phone += ") ";
										}
										phone += $.trim($(Utils.getNamespace(callOpt.response.phoneSelector, false), el).first().text());
									}
									var elementData ={
										latitude  	: latitude,
										longitude 	: longitude,
										code 		: code,
										description : description,
										address		: address,
										phone		: phone
									}
									
									// $.extend(true, elementData, Utils.convertToObject({}, el));
									$.extend(true, elementData, Utils.convertToObject2(el));
									elementData.latitude = latitude.replace(",",".");
									elementData.longitude = longitude.replace(",",".");
									returnData.push(elementData);
								});
							}
						}
						mapInstance.layerCallback(returnData, options);
						gerarPushResultadoBusca ('sucesso','Pesquisa de Rede Referenciada Realizada com Sucesso');
						
					},
					error: function(data, t) {
						 if(t==="timeout") {
							Utils.showWarning("A requisição atingiu o tempo limite.");
							$(options.toggleElement).removeAttr("checked");
						}
						gerarPushResultadoBusca ('erro','Erro ao Realizar Consulta Rede Referenciada');
						
					}
				});
			},
			callCustomLayerQuery : function (options, mapInstance, querystr, callback){
				
				var xmlDoc = $.parseXML(options.customServiceQuery.request());
				var callOpt = options.customServiceQuery;
				var xmlString;
				var bool = callOpt.hasNamespace;

				var searchForName = false;
				querystr = Utils.removeAcento(querystr);
				// if(/(^[a-zA-Z ]+$)/.test(querystr)){
				if(!(/(^[0-9]+$)/.test(querystr))){
					querystr = querystr.toUpperCase();
					if(options.customServiceQuery.usePercent) querystr = "%"+querystr+"%";
					searchForName = true;
				}
				
				if(searchForName){
					$(callOpt.parameters.queryNameSelector, xmlDoc).text(querystr);
				}else{
					if(callOpt.parameters.queryCodeOpSelector) {
						$(callOpt.parameters.queryCodeOpSelector, xmlDoc).text("=");
					}
					$(callOpt.parameters.queryCodeSelector, xmlDoc).text(querystr);
				}
				
				if(callOpt.parameters.qtdSelector){
					$(Utils.getNamespace(callOpt.parameters.qtdSelector, bool)  , xmlDoc).text(40);
				}
					
				if(xmlDoc.xml){	
					xmlString = xmlDoc.xml;
				}else{
					xmlString =(new XMLSerializer()).serializeToString(xmlDoc);
				}
				
				var xhr = $.ajax({
					url: callOpt.url,
					type: "POST",
					data: xmlString,
					timeout: 15000,
					//dataType: "text",
					contentType: "text/xml;charset=UTF-8;SOAPAction=\"" + callOpt.SOAPAction + "\"",
					success: function(data) {
						
						// var bool = callOpt.hasNamespace;
						// var xmlData;
						// if(data.xml && !callOpt.response.returnAsCdata) data = data.xml;
						// if (callOpt.response.returnAsCdata) {
							// var cData = $(callOpt.response.cdataSelector, data).text();
							// xmlData = $.parseXML(cData);
						// }else{
							// xmlData = data;
						// }
						
						var bool = callOpt.hasNamespace;
						var xmlData;
						if(data.xml && !callOpt.response.returnAsCdata) data = data.xml;
						if (callOpt.response.returnAsCdata) {
							var cData = $(callOpt.response.cdataSelector, data).text();
							xmlData = $.parseXML(cData);
						}else{
							if(Utils.testIE2()) xmlData = $.parseXML(data);
							else  xmlData = data;
						}
						
						var returnData = new Array();
						
						if(bool && $("faultcode", xmlData).length > 0){
						gerarPushResultadoBusca ('erro','Erro ao Realizar Consulta Rede Referenciada');
						}else{
							var eachSel = Utils.getNamespace(callOpt.response.eachSelector, bool);

                            var encontrou = false;
							
							$(eachSel, xmlData).each(function(idx, el) {
                                encontrou = true;

								var latitude = $(Utils.getNamespace(callOpt.response.latitudeSelector, bool), el).text();
								if(latitude.indexOf(",") != -1) latitude = latitude.replace(",",".");
								var longitude = $(Utils.getNamespace(callOpt.response.longitudeSelector, bool), el).text();
								if(longitude.indexOf(",") != -1) longitude = longitude.replace(",",".");
								var description = $(Utils.getNamespace(callOpt.response.descriptionSelector, bool), el).text();
								var code = $(Utils.getNamespace(callOpt.response.codeSelector, bool), el).text();
								var address="";
								
								if(callOpt.response.taddressSelector){
									address += $.trim($(Utils.getNamespace(callOpt.response.taddressSelector, bool), el).text());
									address += " ";
								}
								
								address += $.trim($(Utils.getNamespace(callOpt.response.addressSelector, bool), el).text()); //Endereço sempre deverá ter
								
								if(callOpt.response.numberSelector){
									address += " ";
									address += $.trim($(Utils.getNamespace(callOpt.response.numberSelector, bool), el).text());
									
								}
								
								if(callOpt.response.districtSelector){
									address += " - ";
									address += $.trim($(Utils.getNamespace(callOpt.response.districtSelector, bool), el).text());
								}
								
								if(callOpt.response.citySelector){
									address += " - ";
									address += $.trim($(Utils.getNamespace(callOpt.response.citySelector, bool), el).text());
								}
								
								if(callOpt.response.ufSelector){
									if(callOpt.response.citySelector)address += "/";
									else address += " ";
									address += $.trim($(Utils.getNamespace(callOpt.response.ufSelector, bool), el).text());
								}
								
								var elementData ={
									latitude  	: latitude,
									longitude 	: longitude,
									code 		: code,
									description : description,
									address		: address
								}
								
								// $.extend(true, elementData, Utils.convertToObject({}, el));
								$.extend(true, elementData,Utils.convertToObject2(el));
								elementData.latitude = latitude.replace(",",".");
								elementData.longitude = longitude.replace(",",".");
								returnData.push(elementData);
							});

                            if( !encontrou ) {
								eachSel = Utils.getNamespace(callOpt.response.eachSelector, false);

								$(eachSel, xmlData).each(function(idx, el) {
									var latitude = $(Utils.getNamespace(callOpt.response.latitudeSelector, false), el).text();
									if(latitude.indexOf(",") != -1) latitude = latitude.replace(",",".");
									var longitude = $(Utils.getNamespace(callOpt.response.longitudeSelector, false), el).text();
									if(longitude.indexOf(",") != -1) longitude = longitude.replace(",",".");
									var description = $(Utils.getNamespace(callOpt.response.descriptionSelector, false), el).text();
									var code = $(Utils.getNamespace(callOpt.response.codeSelector, false), el).text();
									var address="";
									
									if(callOpt.response.taddressSelector){
										address += $.trim($(Utils.getNamespace(callOpt.response.taddressSelector, false), el).text());
										address += " ";
									}
									
									address += $.trim($(Utils.getNamespace(callOpt.response.addressSelector, false), el).text()); //Endere&#65533;o sempre dever&#65533; ter
									
									if(callOpt.response.numberSelector){
										address += " ";
										address += $.trim($(Utils.getNamespace(callOpt.response.numberSelector, false), el).text());
										
									}
									
									if(callOpt.response.districtSelector){
										address += " - ";
										address += $.trim($(Utils.getNamespace(callOpt.response.districtSelector, false), el).text());
									}
									
									if(callOpt.response.citySelector){
										address += " - ";
										address += $.trim($(Utils.getNamespace(callOpt.response.citySelector, false), el).text());
									}
									
									if(callOpt.response.ufSelector){
										if(callOpt.response.citySelector)address += "/";
										else address += " ";
										address += $.trim($(Utils.getNamespace(callOpt.response.ufSelector, false), el).text());
									}
									
									var phone = "";
									
									if(callOpt.response.phoneSelector){
										if(callOpt.response.dddSelector){
											phone += "(";
											phone += $.trim($(Utils.getNamespace(callOpt.response.dddSelector, false), el).first().text());
											phone += ") ";
										}
										phone += $.trim($(Utils.getNamespace(callOpt.response.phoneSelector, false), el).first().text());
									}
									var elementData ={
										latitude  	: latitude,
										longitude 	: longitude,
										code 		: code,
										description : description,
										address		: address,
										phone		: phone
									}
									
									// $.extend(true, elementData, Utils.convertToObject({}, el));
									$.extend(true, elementData, Utils.convertToObject2(el));
									elementData.latitude = latitude.replace(",",".");
									elementData.longitude = longitude.replace(",",".");
									returnData.push(elementData);
								});
							}
						}
						
						callback(returnData, options);
					},
					error: function(data) {
						
					}
				});
			},
			removeAcento : function (strToReplace) {
				str_acento= "áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ";
				str_sem_acento = "aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC";
				
				var nova="";
				
				for (var i = 0; i < strToReplace.length; i++) {
					if (str_acento.indexOf(strToReplace.charAt(i)) != -1) {
						nova+=str_sem_acento.substr(str_acento.search(strToReplace.substr(i,1)),1);
					} else {
						nova+=strToReplace.substr(i,1);
					}
				}
				return nova;
			},
			parseDate : function(strDate){
				var date="";
				if(strDate){
					var arr = strDate.split("T")[0];
					arr = arr.split("-");
					var day = parseInt(arr[2]);
					var month =  parseInt(arr[1]);
						
					var year = parseInt(arr[0]);
					
					date = new Date(year, month - 1, day);
				}
				return date;
			},
			parseJsDate : function(strDate){
				var date= strDate;
				if(strDate){
					var d = strDate.getDate();
					var m = strDate.getMonth();
					var y = strDate.getFullYear();
					
					if(d != null && m != null && y != null) {
						date = d + "-" + (m+1) + "-" + y;
					}
				}
				return date;
			},
			completeCEP: function(val) {
				
				if (val){
				
					while(val.length != 5){
						val = "0" + val;
					}
					return val;
				} else {
					return '';
				}
			},
			findKM : function(rdv){
			
				rdv = rdv.toLowerCase().split("km")[1];
				rdv = rdv.split(" ");
				for(var x = 0; x < rdv.length; x++){
					if(!isNaN(rdv[x]) && rdv[x] != ''){
						return  rdv[x];
					}
				}
			},
			completeCEP2: function(val){
				
				if (val){
					while(val.length != 3){
						val = "0" + val;
					}
					return val;
				} else {
					return '';
				}
			},
			clearUndefined: function(val) {
				
				if (val == undefined){
					return '';
				}else {
					return val;
				}
			},
			showWarning: function(msg){
				if(msg){
					$("#warningWrapper").show();
					$("#warningInfo").html(msg);
				}else{
					$("#warningWrapper").hide();
				}
			}
		}
		
	Rodovia = {
		request: "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"http://www.esri.com/schemas/ArcGIS/10.1\">"+
					"<soapenv:Header/>"+
					"<soapenv:Body>"+
						"<ns:FindAddressCandidates>"+
							"<Address>"+
								"<PropertyArray>"+
									"<PropertySetProperty>"+
										"<Key>Single Line Input</Key>"+
										"<Value>Rodovia dos Bandeirantes Km 80</Value>"+
									"</PropertySetProperty>"+
								"</PropertyArray>"+
							"</Address>"+
						"</ns:FindAddressCandidates>"+
					"</soapenv:Body>"+
				"</soapenv:Envelope>",
		url: 	"mapas_Acd.content?tipo=rdv",
		querySelector: "PropertySetProperty:has(Key:contains(Single Line Input)) Value"
	}
	LogTypes = {
		
		Avenida :{
			name: "Avenida",
			test: function(value){
				
				switch(value){
					case "avenida":
					case "av":
					case "av.":
						return true;
						break;
					default:
						return false;
				}
			}
		},
		
		Alameda :{
			name: "Alameda",
			test: function(value){
				
				switch(value){
					case "alameda":
					case "al":
					case "al.":
						return true;
						break;
					default:
						return false;
				}
			}
		},
		
		Rua : {
			name: "Rua",
			test: function(value){
				switch(value){
					case "rua":
					case "r":
					case "r.":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Rodovia : {
			name: "Rodovia",
			test: function(value){
				switch(value){
					case "rodovia":
					case "rd":
					case "rd.":
					case "rdv.":
					case "rdv":
					case "rod":
					case "rod.":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Marginal : {
			name: "Avenida Marginal",
			test: function(value){
				switch(value){
					case "marginal":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Praca : {
			name: "Praça",
			test: function(value){
				switch(value){
					case "praca":
					case "pc":
					case "pc.":
					case "praça":
					case "pç.":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Travessa : {
			name: "Travessa",
			test: function(value){
				switch(value){
					case "travessa":
					case "tv":
					case "tv.":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		 
		Beco : {
			name: "Beco",
			test: function(value){
				switch(value){
					case "beco":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Estrada : {
			name: "Estrada",
			test: function(value){
				switch(value){
					case "estrada":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Largo : {
			name: "Largo",
			test: function(value){
				switch(value){
					case "largo":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Ladeira : {
			name: "Ladeira",
			test: function(value){
				switch(value){
					case "ladeira":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Viaduto : {
			name: "Viaduto",
			test: function(value){
				switch(value){
					case "viaduto":
					case "vd":
					case "vd.":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Conjunto : {
			name: "Conjunto",
			test: function(value){
				switch(value){
					case "conjunto":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Favela : {
			name: "Favela",
			test: function(value){
				switch(value){
					case "favela":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Ferrovia : {
			name: "Ferrovia",
			test: function(value){
				switch(value){
					case "ferrovia":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Quadra : {
			name: "Quadra",
			test: function(value){
				switch(value){
					case "quadra":
					case "qd":
					case "qd.":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Setor : {
			name: "Setor",
			test: function(value){
				switch(value){
					case "setor":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Bloco : {
			name: "Bloco",
			test: function(value){
				switch(value){
					case "bloco":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Lote : {
			name: "Lote",
			test: function(value){
				switch(value){
					case "Lote":
					case "Lt":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Via : {
			name: "Via",
			test: function(value){
				switch(value){
					case "via":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Viela : {
			name: "Viela",
			test: function(value){
				switch(value){
					case "viela":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Balneario : {
			name: "Balneario",
			test: function(value){
				switch(value){
					case "balneario":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Chacara : {
			name: "Chacara",
			test: function(value){
				switch(value){
					case "chacara":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Corredor : {
			name: "Corredor",
			test: function(value){
				switch(value){
					case "corredor":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Lagoa : {
			name: "Lagoa",
			test: function(value){
				switch(value){
					case "lagoa":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Loteamento : {
			name: "Loteamento",
			test: function(value){
				switch(value){
					case "loteamento":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Parque : {
			name: "Parque",
			test: function(value){
				switch(value){
					case "parque":
					case "pq":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Ponte : {
			name: "Ponte",
			test: function(value){
				switch(value){
					case "ponte":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Retorno : {
			name: "Retorno",
			test: function(value){
				switch(value){
					case "retorno":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Subida : {
			name: "Subida",
			test: function(value){
				switch(value){
					case "subida":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Terminal : {
			name: "Terminal",
			test: function(value){
				switch(value){
					case "terminal":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Trevo : {
			name: "Trevo",
			test: function(value){
				switch(value){
					case "trevo":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},

		Aeroporto : {
			name: "Aeroporto",
			test: function(value){
				switch(value){
					case "aeroporto":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Calcada : {
			name: "Calcada",
			test: function(value){
				switch(value){
					case "calcada":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Ilha : {
			name: "Ilha",
			test: function(value){
				switch(value){
					case "ilha":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Morro : {
			name: "Morro",
			test: function(value){
				switch(value){
					case "morro":
						return true;
						break;
					default:
						return false;
				}
			}
		
		},
		
		Praia : {
			name: "Praia",
			test: function(value){
				switch(value){
					case "praia":
						return true;
						break;
					default:
						return false;
				}
			}
		
		}
	}
	
	