An error occurred while processing the template.	
	
		
				
	
	
	
	
					
				
			
		
	
	
	Failed to get value for key "com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil"; see cause exception.
----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticleLocalServiceUti...  [in template "20155#20195#7924243" at line 520, column 1]
----
	1<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyADxO5pq3U3jcHoM1SMQ9FFvIPlENolN5k&language=${locale.getLanguage()}®ion=${locale.getCountry()}" type="text/javascript"></script> 
				2 
				3<script type="text/javascript"> 
				4     
				5     
				6	window.onload = function() { 
				7      // Se cargan las oficinas 
				8        initLoad(); 
				9  	    loadCentros(); 
				10 
				11    }; 
				12	 
				13	$( window ).resize(function() { 
				14		console.log("cambia windows"); 
				15	  initLoad(); 
				16	}); 
				17	 
				18	// Variable que guarda los datos de los centros 
				19	var centros = []; 
				20	 
				21	// Variable que guarda el html de los resultados encontrados 
				22	var side_bar_html = ""; 
				23 
				24	// Array para guardar todos los marcadores 
				25	var gmarkers = []; 
				26	var gmarkersshow = []; 
				27 
				28	// Variables globales 
				29	var map; 
				30	var circle = null; 
				31	var geocoder; 
				32	var busquedaRealizada = false; 
				33	var marker_you; 
				34	var userMarker; 
				35	var directionsService; 
				36	var directionsDisplay; 
				37	var infowindow; 
				38	var defaultCoordinates = {lat: 40.4168508 ,lng:-3.7031067}; 
				39	 
				40	// Variable global para saber si se tiene o no geolocalizacion 
				41	var geoActive = true; 
				42	 
				43	//Variable para guardar objeto scrollbar 
				44	var scrollbar; 
				45 
				46	//Genera arrays de centros 
				47    function addCentros (contador,nombre,direccion,latitud,longitud,enlace,telefono){ 
				48        var entryLocation = [nombre,direccion,latitud,longitud,enlace,telefono]; 
				49        centros[contador] = entryLocation; 
				50    } 
				51 
				52	//Funcion que muestra error por consola si no se puede utilizar la geolocalizacion del usuario 
				53	function showError() { 
				54		console.log("Location can't be found"); 
				55		geoActive = false; 
				56		 
				57		if(directionsService == null || directionsService == "undefined"){ 
				58			directionsService = new google.maps.DirectionsService(); 
				59		} 
				60		if(directionsDisplay == null || directionsDisplay == "undefined"){ 
				61			directionsDisplay = new google.maps.DirectionsRenderer(); 
				62		} 
				63		if(infowindow == null || infowindow == "undefined"){ 
				64			infowindow = new google.maps.InfoWindow({  
				65				size: new google.maps.Size(150,50) 
				66			}); 
				67		} 
				68		map = new google.maps.Map(document.getElementById("map_canvas"), { 
				69			zoom: 8, 
				70			center: {lat: 40.4169473, lng: -3.7079059} 
				71			 
				72		}); 
				73		 
				74		// Crea evento para sacar infoWindows 
				75		google.maps.event.addListener(map, 'click', function() { 
				76			infowindow.close(); 
				77		}); 
				78	 
				79		// Funcion autocompletar para el campo de texto 
				80		var autocomplete = new google.maps.places.Autocomplete(document.getElementById('address')); 
				81		autocomplete.bindTo('bounds', map); 
				82		 
				83		searchRadius(defaultCoordinates); 
				84	 
				85		// Se hace focus en el campo de texto de la direccion una vez que todo este cargado 
				86		$(".js_input_dir").select(); 
				87	} 
				88	 
				89	// Funcion para crear marcadores 
				90	function createMarker(latlng, name, html_infow, html_res, indice) { 
				91		// Contenido del infoWindow 
				92		var contentString = html_infow; 
				93 
				94		// Marcador 
				95		var marker = new google.maps.Marker({ 
				96			icon: '/constcaonl-public-theme/images/ovalado_rojo.png', 
				97			position: latlng, 
				98			title: name, 
				99			//	zIndex: Math.round(latlng.lat()*-100000)<<5, 
				100			zIndex: Math.round(latlng.lat*-100000)<<5, 
				101			info: html_res, 
				102			ind: indice 
				103		}); 
				104	 
				105		// Evento para lanzar la infoWdindows al hacer click sobre el marcador 
				106		google.maps.event.addListener(marker, 'click', function() { 
				107			infowindow.setContent(contentString);  
				108			infowindow.open(map,marker); 
				109		}); 
				110		 
				111		// Guarda el marcador en el array global 
				112		gmarkers.push(marker); 
				113	} 
				114	 
				115	// Funcion initLoad 
				116	function initLoad(){ 
				117		console.log("Entramos en la funcion del callback"); 
				118		// INICIALIZACION 
				119		geocoder = new google.maps.Geocoder(); 
				120		if (navigator.geolocation) { 
				121		    var options = { 
				122		        enableHighAccuracy: true, 
				123		        maximumAge: 0 
				124		    } 
				125			navigator.geolocation.getCurrentPosition(initializeMaps, showError, options); 
				126		} 
				127		else { 
				128			console.log("El navegador no soporta geolocalización"); 
				129		} 
				130	    // FIN INICIALIZACION 
				131	} 
				132 
				133	// Funcion ejecutada al CARGAR LA PÁGINA 
				134	function initializeMaps(userPosition) { 
				135		// Define las opciones del mapa 
				136		userMarker = userPosition; 
				137		var myOptions = { 
				138			zoom: 8, 
				139			center: new google.maps.LatLng(userPosition.coords.latitude, userPosition.coords.longitude), 
				140			mapTypeControl: true, 
				141			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}, 
				142			navigationControl: true, 
				143			mapTypeId: google.maps.MapTypeId.ROADMAP 
				144		}; 
				145		 
				146		// Define el mapa 
				147		map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
				148	 
				149		// Crea evento para sacar infoWindows 
				150		google.maps.event.addListener(map, 'click', function() { 
				151			infowindow.close(); 
				152		}); 
				153		 
				154		if(directionsService == null || directionsService == "undefined"){ 
				155			directionsService = new google.maps.DirectionsService(); 
				156		} 
				157		if(directionsDisplay == null || directionsDisplay == "undefined"){ 
				158			directionsDisplay = new google.maps.DirectionsRenderer(); 
				159		} 
				160		if(infowindow == null || infowindow == "undefined"){ 
				161			infowindow = new google.maps.InfoWindow({  
				162				size: new google.maps.Size(150,50) 
				163			}); 
				164		} 
				165	 
				166		// Funcion autocompletar para el campo de texto 
				167		var autocomplete = new google.maps.places.Autocomplete(document.getElementById('address')); 
				168		autocomplete.bindTo('bounds', map); 
				169	  
				170	    //se crea el marcador de posición del usuario 
				171	    //marcador = new google.maps.Marker({   
				172        //    position: new google.maps.LatLng(userPosition.coords.latitude, userPosition.coords.longitude), 
				173        //    icon: 'http://opendatacon.org/wp-content/uploads/2016/05/Farm-Fresh_star.png', 
				174        //    title: "Usted está aquí", 
				175        //    map: map 
				176        //}); 
				177		 
				178		searchRadius(); 
				179 
				180		// Se hace focus en el campo de texto de la direccion una vez que todo este cargado 
				181		$(".js_input_dir").select(); 
				182	} 
				183	 
				184	function searchRadius(coordinates){ 
				185		//se saca la dirección del usuario según sus coordenadas (si no se encuentra se fija la puerta de sol como punto de partida) 
				186		var userPosic = 'Plaza Puerta del Sol, 28013 Madrid'; 
				187		var latlng; 
				188		 
				189		if(coordinates != null){ 
				190			latlng = coordinates; 
				191		}else{ 
				192			var input = (userMarker.coords.latitude+","+userMarker.coords.longitude); 
				193	        var latlngStr = input.split(',', 2); 
				194	        latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])}; 
				195		} 
				196		 
				197        geocoder.geocode({'location': latlng}, function(results, status) { 
				198            if (status === google.maps.GeocoderStatus.OK) { 
				199            		console.log(results[0].formatted_address); 
				200                if (results[0]) { 
				201                    userPosic = results[0].formatted_address; 
				202                } else { 
				203                    window.alert('No results found'); 
				204                } 
				205            } else { 
				206                window.alert('Geocoder failed due to: ' + status); 
				207            } 
				208 
				209    		//se buscan los centros que estén a menos de 6km del usuario 
				210    		var searchAddress = userPosic; 
				211    		var radVal = 6; 
				212    		var radius = 600000; 
				213            $(".rad_err_msg").hide(); 
				214    			if(searchAddress != null && searchAddress != ""){ 
				215    				// Ejecutamos con timeOut de 200ms para evitar el queryLimit de google 
				216    				setTimeout(function(){ 
				217    					$(".div_lista").fadeIn(); 
				218    					exe_code_address(searchAddress, radius); 
				219    				}, 200); 
				220    			} 
				221        }); 
				222		 
				223	} 
				224	 
				225	 
				226    // Funcion para procesar los centros 
				227	function loadCentros(){ 
				228		// Para cada centro se genera un marcador y una infoWindow 
				229		for(var i = 0; i < centros.length; i++){ 
				230			var centroName = centros[i][0]; 
				231			var centroAddress = centros[i][1]; 
				232			var centroLatitud = centros[i][2]; 
				233			var centroLongitud = centros[i][3]; 
				234			var enlaceAWeb = centros[i][4]; 
				235			var centroTlf = centros[i][5]; 
				236 
				237			var latlng = {lat: parseFloat(centroLatitud), lng: parseFloat(centroLongitud)}; 
				238			 
				239			var urlCentro = ""; 
				240            if("" != enlaceAWeb && null != enlaceAWeb){ 
				241                urlCentro = '<div class="center_url">'+ 
				242							'<a class="btn btn-primary" href="'+ enlaceAWeb +'" target="_blank"> Sitio web </a>'+ 
				243						'</div>'; 
				244            } 
				245             
				246			var html_inf =  
				247				'<div id="content_gmap">'+ 
				248					'<div class="center_data_wrapper" onclick="javascript:myclick({index})">'+ 
				249						'<div class="evo-form__text-info office_data">'+ 
				250							'<p class="center_title">'+centroName+'</p>'+ 
				251							'<p class="center_address">'+centroAddress+'</p>'+ 
				252							'<p class="center_tlf">'+centroTlf+'</p>'+ 
				253						'</div>'+ 
				254					'</div>'+ 
				255					'<div class="howToGo">'+ 
				256						'<a class="btn btn-primary" href="javascript:void(0);" onclick="arriveTo(\'' + centroAddress + '\');"> ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.como.llegar")} </a>'+ 
				257					'</div>'+ 
				258					urlCentro + 
				259				'</div>'; 
				260				 
				261		   var html_res =  
				262			   '<div id="content_gmap">'+ 
				263					'<div class="center_data_wrapper" onclick="javascript:myclick({index})">'+ 
				264						'<div class="center_data">'+ 
				265							'<p class="center_title">'+centroName+'</p>'+ 
				266							'<p class="center_address">'+centroAddress+'</p>'+ 
				267							'<p class="center_tlf">'+centroTlf+'</p>'+ 
				268						'</div>'+ 
				269					'</div>'+ 
				270					'<div class="howToGo">'+ 
				271						'<a class="btn btn-primary" href="javascript:void(0);" onclick="arriveTo(\'' + centroAddress + '\');"> ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.como.llegar")} </a>'+ 
				272					'</div>'+ 
				273					urlCentro + 
				274				'</div>'; 
				275			//Se crea el marcador en las coordenadas de los centros 
				276			var marker = createMarker(latlng, centroName, html_inf, html_res, i); 
				277		} 
				278	} 
				279 
				280 
				281	var marcador; 
				282	// Funcion para atender la direccion introducida en el formulario 
				283	function codeAddress() { 
				284		//se crea el marcador de posición del usuario con datos por defecto 
				285		var latitude = defaultCoordinates.lat; 
				286		var longitude = defaultCoordinates.lng; 
				287		 
				288		if(userMarker != undefined){ 
				289			latitude = userMarker.coords.latitude; 
				290			longitude = userMarker.coords.longitude; 
				291		} 
				292		 
				293	    marcador = new google.maps.Marker({   
				294            position: new google.maps.LatLng(latitude, longitude), 
				295            icon: "/tCuida-theme/images/content/pin-position.png", 
				296            title: "Usted está aquí", 
				297            map: map 
				298        }); 
				299         
				300		//Se resetea el "como llegar",las indicaciones y se cierran la infowindow que hubiese abierta 
				301		if(directionsDisplay != null){ 
				302			directionsDisplay.setMap(null); 
				303		} 
				304		$("#map_indications").html(""); 
				305		  
				306		if(infowindow)infowindow.close(); 
				307		var searchAddress = $("#address").val(); 
				308		var radVal = $("#radius").val(); 
				309		var radius = parseInt($("#radius").val(), 10)*1000; 
				310		 
				311		if(radVal > 0 && radVal <= 500){ 
				312			$(".rad_err_msg").hide(); 
				313			if(searchAddress != null && searchAddress != ""){ 
				314				// Ejecutamos con timeOut de 200ms para evitar el queryLimit de google 
				315				setTimeout(function(){ 
				316					$(".div_lista").fadeIn(); 
				317					exe_code_address(searchAddress, radius); 
				318				}, 200); 
				319			} 
				320		}else{ 
				321			$(".rad_err_msg").show(); 
				322		} 
				323	} 
				324	 
				325	function exe_code_address(searchAddress, radius){ 
				326		//	Flag de busqueda realizada para evento del input de radio 
				327		busquedaRealizada = true; 
				328		 
				329		// El marcador de la posicion buscada se reinicia en cada busqueda 
				330		if(marker_you != null){ 
				331			marker_you.setMap(null); 
				332		} 
				333		 
				334		// Se situa un marcador en el mapa con los datos recogidos 
				335		geocoder.geocode({ 'address': searchAddress}, function(results, status) { 
				336			if (status == google.maps.GeocoderStatus.OK) { 
				337				map.setCenter(results[0].geometry.location); 
				338				map.setZoom(8); 
				339				var searchCenter = results[0].geometry.location; 
				340				/* 
				341				var searchAddressComponents = results[0].address_components; 
				342				var searchPostalCode = ""; 
				343				var searchCity = ""; 
				344 
				345			    $.each(searchAddressComponents, function(){ 
				346                    if(this.types[0]=="postal_code"){ 
				347                        searchPostalCode=this.short_name; 
				348                    } else if (this.types[0]=="locality"){ 
				349                        searchCity = this.short_name; 
				350                    } 
				351                }); 
				352 
				353                // Codigo para enviar a analytics . si hay psotal code se enva CP, si no city 
				354                var titleBusqueda=searchPostalCode; 
				355                if (titleBusqueda == ""){ 
				356                    titleBusqueda=searchCity; 
				357                } 
				358                ga('send', 'event', 'tCuida', 'busqueda_farmacias', titleBusqueda,{ 'dimension1': 'tCuida' }); 
				359                */ 
				360                //...... 
				361 
				362				marker_you = new google.maps.Marker({ 
				363					map: map, 
				364					position: results[0].geometry.location, 
				365					icon: "/tCuida-theme/images/content/pin-position.png", 
				366				}); 
				367				 
				368				// Se crea un circulo con el radio provisto en el formulario 
				369				if (circle) circle.setMap(null); 
				370				circle = new google.maps.Circle({ 
				371					center:searchCenter, 
				372					radius: radius, 
				373					fillColor: "#999", 
				374					strokeWeight: 1, 
				375					fillOpacity: 0.2, 
				376					map: map 
				377				}); 
				378				 
				379				// Se reinicia la lista de resultados 
				380				side_bar_html = ""; 
				381				gmarkersshow = []; 
				382				 
				383				var bounds = new google.maps.LatLngBounds(); 
				384				var foundMarkers = 0; 
				385				 
				386				//Añadimos el marker del sitio buscado al bounds 
				387				bounds.extend(marker_you.getPosition()); 
				388				 
				389				// Se pintan en la lista todos los resultados 
				390				for(var i = 0; i < gmarkers.length; i++){ 
				391					if (google.maps.geometry.spherical.computeDistanceBetween(gmarkers[i].getPosition(),searchCenter) < radius) { 
				392						bounds.extend(gmarkers[i].getPosition()); //Se anade la posicion de todos los markers para expandir la vista y que salgan todos en el mapa 
				393						gmarkers[i].setMap(map); 
				394						var distanceToCenter = google.maps.geometry.spherical.computeDistanceBetween(gmarkers[i].getPosition(),searchCenter); 
				395						gmarkersshow.push({marker: gmarkers[i], dist: distanceToCenter}); 
				396						foundMarkers++; 
				397					}else{ 
				398						gmarkers[i].setMap(null); 
				399					} 
				400				} 
				401				 
				402				// Se ordena el array de maracadores visibles por distancia 
				403				gmarkersshow = gmarkersshow.sort(function(a,b){return a.dist - b.dist;}); 
				404				 
				405				// Se pintan en la lista todos los resultados ordenados por distancia 
				406				var distance; 
				407				side_bar_html +='<div class="info_container">'; 
				408				for(var i = 0; i < gmarkersshow.length; i++){ 
				409					distance = round((gmarkersshow[i].dist / 1000), 2); 
				410					side_bar_html += '<div class="info_fcia_side_bar div_side_bar_' + i + '">'; 
				411                    side_bar_html += '<div class="info_fcia_distance"><span class="text-base">' + distance + ' km.</span></div>'; 
				412                    side_bar_html += (gmarkersshow[i].marker.info).replace("{index}", i); 
				413                    side_bar_html += '</div>'; 
				414				} 
				415				side_bar_html +='</div>'; 
				416				// Si hay resultados que cumplan el criterio del radio, se anaden a la lista 
				417				if(foundMarkers > 0){ 
				418					if(foundMarkers == 1){ 
				419						side_bar_html = "<div class=\"titulosidebar\"><p class=\"title_results_gmaps\"><strong>" + foundMarkers + '</strong> ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.resultado")} ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.encontrado")}:</p></div>' + side_bar_html; 
				420					}else{ 
				421						side_bar_html = "<div class=\"titulosidebar\"><p class=\"title_results_gmaps\"><strong>" + foundMarkers + '</strong> ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.resultado")}s ${languageUtil.get(locale, "com.cofares.liferay.adt.mapa.empresas.encontrado")}s:</p></div>' + side_bar_html; 
				422					} 
				423				}else{ 
				424					side_bar_html = "<div class=\"p_aviso_side_bar\"><p class=\"evo-form__text-info js_result_no_found\">No se han encontrado resultados. Por favor, busca en otro lugar o amplía el radio de búsqueda.</p></div>"; 
				425				} 
				426 
				427				// Coloca la lista en el sitio que le corresponde 
				428				document.getElementById("side_bar").innerHTML = side_bar_html; 
				429				if (foundMarkers > 0) { 
				430					map.fitBounds(bounds); 
				431				} else{ 
				432					map.fitBounds(circle.getBounds()); 
				433				} 
				434			} 
				435			$(".info_container").mCustomScrollbar({ 
				436                axis:"y" 
				437            }); 
				438		}); 
				439	} 
				440	 
				441	// Metodo para redondear a los decimales 
				442	function round(value, decimals) { 
				443		return Number(Math.round(value+'e'+decimals)+'e-'+decimals); 
				444	} 
				445	 
				446	// Evento para lanzar la infoWindow al clickar sobre el marcador 
				447	function myclick(i) { 
				448		google.maps.event.trigger(gmarkersshow[i].marker, "click"); 
				449	} 
				450	 
				451	//Funcion para utilizar la api de google maps de "cómo llegar" 
				452	function arriveTo(address) { 
				453		var request; 
				454         
				455        //eliminamos el marcador de la posición del usuario si se muestra 
				456        if (marcador != null  && marcador!=""){ 
				457            marcador.setMap(null); 
				458        } 
				459         
				460        //se saca la dirección del usuario según sus coordenadas (si no se encuentra se fija la puerta de sol como punto de partida) 
				461		var userPosic = 'Plaza Puerta del Sol, 28013 Madrid'; 
				462		var latlng; 
				463		 
				464		if(userMarker == null){ 
				465			latlng = defaultCoordinates; 
				466		}else{ 
				467			var input = (userMarker.coords.latitude+","+userMarker.coords.longitude); 
				468	        var latlngStr = input.split(',', 2); 
				469	        latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])}; 
				470		} 
				471         
				472        geocoder.geocode({'location': latlng}, function(results, status) { 
				473            if (status === google.maps.GeocoderStatus.OK) { 
				474                if (results[0]) { 
				475                    userPosic = results[0].formatted_address; 
				476                } else { 
				477                    window.alert('No results found'); 
				478                } 
				479            } else { 
				480                window.alert('Geocoder failed due to: ' + status); 
				481            } 
				482 
				483    		if(geoActive){ 
				484    			request = { 
				485    				//origin: new google.maps.LatLng(userMarker.coords.latitude, userMarker.coords.longitude), 
				486    				origin: userPosic, 
				487    				destination: address, 
				488    				travelMode: google.maps.TravelMode.DRIVING, 
				489    				unitSystem: google.maps.UnitSystem.METRIC, 
				490    				provideRouteAlternatives: true 
				491    			}; 
				492    		}else{ 
				493    			request = { 
				494    				origin: userPosic, 
				495    				destination: address, 
				496    				travelMode: google.maps.TravelMode.DRIVING, 
				497    				unitSystem: google.maps.UnitSystem.METRIC, 
				498    				provideRouteAlternatives: true 
				499    			}; 
				500    		} 
				501     
				502    		directionsService.route(request, function(results, status) { 
				503    			if (status == google.maps.DirectionsStatus.OK) { 
				504    				if (circle) circle.setMap(null); 
				505    				if(infowindow)infowindow.close(); 
				506    				directionsDisplay.setMap(map); 
				507    				directionsDisplay.setPanel($("#map_indications").get(0)); 
				508    				directionsDisplay.setDirections(results); 
				509    			} else { 
				510    				console.log("No existen rutas entre ambos puntos"); 
				511    			} 
				512    		}); 
				513        }); 
				514	} 
				515</script> 
				516 
				517 
				518<#assign getterUtil = staticUtil["com.liferay.portal.kernel.util.GetterUtil"]/> 
				519<#assign groupId = themeDisplay.getScopeGroupId()/> 
				520<#assign journalArticleLocalServiceUtil = staticUtil["com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil"]/> 
				521<#assign structureID = 1907194/>  
				522<#assign dDMStructureLocalServiceUtil = staticUtil["com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil"]/> 
				523<#assign s = dDMStructureLocalServiceUtil.getDDMStructure(structureID)/> 
				524<#assign articulos = journalArticleLocalServiceUtil.getStructureArticles(groupId, s.getStructureKey())/> 
				525 
				526<#if articulos?has_content> 
				527    <#assign contador = 0 /> 
				528    <#list articulos as entry> 
				529        <#assign latestVersion = journalArticleLocalServiceUtil.getLatestVersion(groupId, entry.getArticleId())/> 
				530 
				531        <#if latestVersion==entry.getVersion()> 
				532            <#assign docXml = saxReaderUtil.read(entry.getContent()) /> 
				533            <#assign nombre = entry.getTitle(locale) /> 
				534            <#assign direccion = docXml.valueOf("//dynamic-element[@name='Direccion']/dynamic-content/text()") /> 
				535            <#assign latitud = docXml.valueOf("//dynamic-element[@name='Latitud']/dynamic-content/text()") /> 
				536            <#assign longitud = docXml.valueOf("//dynamic-element[@name='Longitud']/dynamic-content/text()") /> 
				537            <#assign enlace = docXml.valueOf("//dynamic-element[@name='Web']/dynamic-content/text()") /> 
				538            <#assign telefono = docXml.valueOf("//dynamic-element[@name='Telefono']/dynamic-content/text()") /> 
				539 
				540            <script> 
				541                addCentros('${contador}','${nombre}','${direccion}','${latitud}','${longitud}','${enlace}','${telefono}'); 
				542            </script> 
				543            <#assign contador = contador + 1 /> 
				544        </#if> 
				545    </#list> 
				546</#if> 
				547 
				548<div class="tc-map"> 
				549    <div class="tc-map-search-ctn"> 
				550        <div class="wrapper-ajust"> 
				551            <form class="form-inline form-map"> 
				552                <div class="tc-form-control"> 
				553                    <label class="tc-map-label" for="address"><span class="text-base">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.direccion")}, CP o ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.provincia")}:</span></label> 
				554                    <input class="field form-control error-field" name="address" id="address" type="textbox" placeholder='${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.direccion")}, ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.codigo.postal")} o ${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.provincia")}'></input> 
				555                </div> 
				556                <div class="tc-form-control"> 
				557                    <label class="tc-map-label" for="radius"><span class="text-base">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.radio.busqueda")}:</span></label> 
				558                    <input class="field form-control error-field field-small" name="radius" id="radius" type="number" min="1" step="1" value="2" placeholder='${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.radio.busqueda")}'></input> 
				559                    <span class="tc-map-text-desc">Km.</span> 
				560                    <button type="button" class="btn btn-ico btn-primary" onclick="codeAddress();"><i class="icon-search"></i></button> 
				561                </div> 
				562                <span class="rad_err_msg">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.radio.busqueda.error")}</span> 
				563            </form> 
				564        </div> 
				565    </div> 
				566    <div class="wrapper-ajust"> 
				567        <div class="tc-map-container"> 
				568            <div id="map_canvas" class="tc-map-show"></div> 
				569            <div class="div_lista"> 
				570                <div id="side_bar" class="side_bar"> 
				571                    <div class="p_aviso_side_bar"> 
				572                        <p class="evo-form__text-info">${languageUtil.get(locale,"com.cofares.liferay.adt.mapa.empresas.realice.una.busqueda")}</p> 
				573                    </div> 
				574                </div> 
				575            </div> 
				576        </div> 
				577        <div id="map_indications" class="tc-map-indications"></div> 
				578    </div> 
				579</div> 
		
	
		An error occurred while processing the template.	
	
		
				
	
	
	
	
					
				
			
		
	
	
	The following has evaluated to null or missing:
==> serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService")  [in template "20155#20195#1900805" at line 1, column 38]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign assetCategoryLocalService = s...  [in template "20155#20195#1900805" at line 1, column 1]
----
	1<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService")> 
				2<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetVocabularyLocalService")> 
				3 
				4<!--Multiidioma--> 
				5<#assign seeMore = languageUtil.get(locale, "view-more")/> 
				6 
				7<!--Buscamos si el contexto es público o privado--> 
				8<#if themeDisplay.getLayout().isPrivateLayout()> 
				9    <#assign contexto = "/group/canal-online/"/> 
				10<#else> 
				11	<#assign contexto = "/web/canal-online/"/> 
				12</#if> 
				13 
				14<#if entries?has_content> 
				15<div class="company-list"> 
				16    <#list entries as curEntry> 
				17        <#assign article = curEntry.getAssetRenderer().getArticle() /> 
				18	    <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContentByLocale(locale)) /> 
				19	    <#assign titulo = docXml.valueOf("//dynamic-element[@name='Titulo']/dynamic-content/text()") /> 
				20	    <#assign cp = docXml.valueOf("//dynamic-element[@name='CP']/dynamic-content/text()") /> 
				21	    <#assign localidad = docXml.valueOf("//dynamic-element[@name='Localidad']/dynamic-content/text()") /> 
				22	    <#assign provincia = docXml.valueOf("//dynamic-element[@name='Provincia']/dynamic-content/text()") /> 
				23	    <#assign textoEnlace = docXml.valueOf("//dynamic-element[@name='TextoEnlace']/dynamic-content/text()") /> 
				24	    <#assign urlEnlace = docXml.valueOf("//dynamic-element[@name='UrlEnlace']/dynamic-content/text()") /> 
				25	    <div class="company-item"> 
				26            <h4 class="title"> ${titulo} </h4> 
				27            <#if cp!="null"> 
				28				<p class="data"> 
				29					${cp} - ${localidad} - ${provincia} 
				30				</p> 
				31            </#if> 
				32            <!--<#if textoEnlace?has_content && textoEnlace!= '' && urlEnlace?has_content && urlEnlace!=''> 
				33                <div class="more-information"> 
				34                    <a href="${urlEnlace}"> <button class="button" id="seeMore"> ${textoEnlace} </button> </a> 
				35                </div> 
				36            </#if>--> 
				37            <#assign catNameUrl = curEntry.getTitle(locale)?lower_case/> 
				38    		<#if catNameUrl?contains(" ")> 
				39                <#assign catNameUrl = catNameUrl?replace(" ","-")> 
				40            </#if> 
				41    		<#if catNameUrl?contains("á")> 
				42            <#assign catNameUrl = catNameUrl?replace("á","a")> 
				43    		</#if> 
				44    		<#if catNameUrl?contains("Á")> 
				45    		    <#assign catNameUrl = catNameUrl?replace("Á","A")> 
				46    		</#if> 
				47    		<#if catNameUrl?contains("é")> 
				48    		    <#assign catNameUrl = catNameUrl?replace("é","e")> 
				49    		</#if> 
				50    		<#if catNameUrl?contains("É")> 
				51    		    <#assign catNameUrl = catNameUrl?replace("É","E")> 
				52    		</#if> 
				53    		<#if catNameUrl?contains("í")> 
				54    		    <#assign catNameUrl = catNameUrl?replace("í","i")> 
				55    		</#if> 
				56    		<#if catNameUrl?contains("Í")> 
				57    		    <#assign catNameUrl = catNameUrl?replace("Í","I")> 
				58    		</#if> 
				59    		<#if catNameUrl?contains("ó")> 
				60    		    <#assign catNameUrl = catNameUrl?replace("ó","o")> 
				61    		</#if> 
				62    		<#if catNameUrl?contains("Ó")> 
				63    		    <#assign catNameUrl = catNameUrl?replace("Ó","O")> 
				64    		</#if> 
				65    		<#if catNameUrl?contains("ú")> 
				66    		    <#assign catNameUrl = catNameUrl?replace("ú","u")> 
				67    		</#if> 
				68    		<#if catNameUrl?contains("Ú")> 
				69    		    <#assign catNameUrl = catNameUrl?replace("Ú","U")> 
				70    		</#if> 
				71             
				72            <div class="text-right"> 
				73                <#if urlEnlace?has_content> 
				74                    <a href='${urlEnlace}' class="link"> 
				75                    <#if textoEnlace?has_content> 
				76                        <span id="seeMore"> ${textoEnlace} </span>  
				77                    <#else> 
				78                        <span id="seeMore"> ${seeMore} <i class="icon-angle-right"></i></span>  
				79                    </#if> 
				80                    </a> 
				81                <#else> 
				82                    <!--<a href='/web/canalonline/fundacion-cofares/-/asset_publisher/7wm2IPFLlRuS/content/${catNameUrl}'>--> 
				83                    <#assign visorId = "56_INSTANCE_j23b5kT7qr4p" /> 
				84                    <#assign article = curEntry.getAssetRenderer().getArticle() /> 
				85                    <#assign articleId = article.getArticleId() /> 
				86                    <#assign groupId = themeDisplay.getScopeGroupId() /> 
				87                    <#assign urlGo = "${contexto}"+"/detalle-empresa/-/journal_content/"+visorId+"/${groupId}/${articleId}?" /> 
				88                    <a href="${urlGo}" class="link"> 
				89                        <span id="seeMore"> ${seeMore} <i class="icon-angle-right"></i></span>  
				90                    </a> 
				91                </#if> 
				92            </div> 
				93        </div> 
				94    </#list> 
				95</div> 
				96</#if> 
		
	
		An error occurred while processing the template.	
	
		
				
	
	
	
	
					
				
			
		
	
	
	The following has evaluated to null or missing:
==> serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService")  [in template "20155#20195#1900805" at line 1, column 38]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign assetCategoryLocalService = s...  [in template "20155#20195#1900805" at line 1, column 1]
----
	1<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService")> 
				2<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetVocabularyLocalService")> 
				3 
				4<!--Multiidioma--> 
				5<#assign seeMore = languageUtil.get(locale, "view-more")/> 
				6 
				7<!--Buscamos si el contexto es público o privado--> 
				8<#if themeDisplay.getLayout().isPrivateLayout()> 
				9    <#assign contexto = "/group/canal-online/"/> 
				10<#else> 
				11	<#assign contexto = "/web/canal-online/"/> 
				12</#if> 
				13 
				14<#if entries?has_content> 
				15<div class="company-list"> 
				16    <#list entries as curEntry> 
				17        <#assign article = curEntry.getAssetRenderer().getArticle() /> 
				18	    <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContentByLocale(locale)) /> 
				19	    <#assign titulo = docXml.valueOf("//dynamic-element[@name='Titulo']/dynamic-content/text()") /> 
				20	    <#assign cp = docXml.valueOf("//dynamic-element[@name='CP']/dynamic-content/text()") /> 
				21	    <#assign localidad = docXml.valueOf("//dynamic-element[@name='Localidad']/dynamic-content/text()") /> 
				22	    <#assign provincia = docXml.valueOf("//dynamic-element[@name='Provincia']/dynamic-content/text()") /> 
				23	    <#assign textoEnlace = docXml.valueOf("//dynamic-element[@name='TextoEnlace']/dynamic-content/text()") /> 
				24	    <#assign urlEnlace = docXml.valueOf("//dynamic-element[@name='UrlEnlace']/dynamic-content/text()") /> 
				25	    <div class="company-item"> 
				26            <h4 class="title"> ${titulo} </h4> 
				27            <#if cp!="null"> 
				28				<p class="data"> 
				29					${cp} - ${localidad} - ${provincia} 
				30				</p> 
				31            </#if> 
				32            <!--<#if textoEnlace?has_content && textoEnlace!= '' && urlEnlace?has_content && urlEnlace!=''> 
				33                <div class="more-information"> 
				34                    <a href="${urlEnlace}"> <button class="button" id="seeMore"> ${textoEnlace} </button> </a> 
				35                </div> 
				36            </#if>--> 
				37            <#assign catNameUrl = curEntry.getTitle(locale)?lower_case/> 
				38    		<#if catNameUrl?contains(" ")> 
				39                <#assign catNameUrl = catNameUrl?replace(" ","-")> 
				40            </#if> 
				41    		<#if catNameUrl?contains("á")> 
				42            <#assign catNameUrl = catNameUrl?replace("á","a")> 
				43    		</#if> 
				44    		<#if catNameUrl?contains("Á")> 
				45    		    <#assign catNameUrl = catNameUrl?replace("Á","A")> 
				46    		</#if> 
				47    		<#if catNameUrl?contains("é")> 
				48    		    <#assign catNameUrl = catNameUrl?replace("é","e")> 
				49    		</#if> 
				50    		<#if catNameUrl?contains("É")> 
				51    		    <#assign catNameUrl = catNameUrl?replace("É","E")> 
				52    		</#if> 
				53    		<#if catNameUrl?contains("í")> 
				54    		    <#assign catNameUrl = catNameUrl?replace("í","i")> 
				55    		</#if> 
				56    		<#if catNameUrl?contains("Í")> 
				57    		    <#assign catNameUrl = catNameUrl?replace("Í","I")> 
				58    		</#if> 
				59    		<#if catNameUrl?contains("ó")> 
				60    		    <#assign catNameUrl = catNameUrl?replace("ó","o")> 
				61    		</#if> 
				62    		<#if catNameUrl?contains("Ó")> 
				63    		    <#assign catNameUrl = catNameUrl?replace("Ó","O")> 
				64    		</#if> 
				65    		<#if catNameUrl?contains("ú")> 
				66    		    <#assign catNameUrl = catNameUrl?replace("ú","u")> 
				67    		</#if> 
				68    		<#if catNameUrl?contains("Ú")> 
				69    		    <#assign catNameUrl = catNameUrl?replace("Ú","U")> 
				70    		</#if> 
				71             
				72            <div class="text-right"> 
				73                <#if urlEnlace?has_content> 
				74                    <a href='${urlEnlace}' class="link"> 
				75                    <#if textoEnlace?has_content> 
				76                        <span id="seeMore"> ${textoEnlace} </span>  
				77                    <#else> 
				78                        <span id="seeMore"> ${seeMore} <i class="icon-angle-right"></i></span>  
				79                    </#if> 
				80                    </a> 
				81                <#else> 
				82                    <!--<a href='/web/canalonline/fundacion-cofares/-/asset_publisher/7wm2IPFLlRuS/content/${catNameUrl}'>--> 
				83                    <#assign visorId = "56_INSTANCE_j23b5kT7qr4p" /> 
				84                    <#assign article = curEntry.getAssetRenderer().getArticle() /> 
				85                    <#assign articleId = article.getArticleId() /> 
				86                    <#assign groupId = themeDisplay.getScopeGroupId() /> 
				87                    <#assign urlGo = "${contexto}"+"/detalle-empresa/-/journal_content/"+visorId+"/${groupId}/${articleId}?" /> 
				88                    <a href="${urlGo}" class="link"> 
				89                        <span id="seeMore"> ${seeMore} <i class="icon-angle-right"></i></span>  
				90                    </a> 
				91                </#if> 
				92            </div> 
				93        </div> 
				94    </#list> 
				95</div> 
				96</#if>