Si buscas una forma original de complementar tu evento corporativo, Asturias te ofrece un sinfín de experiencias en plena naturaleza. Desde emocionantes actividades como rutas a caballo, descensos en canoa o aventuras acuáticas como el paddle surf. Además, con estas empresas especializadas en turismo activo convertirás tu evento o viaje de incentivos en una experiencia única y llena de adrenalina.

Atrás Asturfly

Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> assetVocabularyLocalService.fetchGroupVocabulary(themeDisplay.scopeGroupId, "Empresas de Actividades")  [in template "37703#37743#1558935" at line 26, column 18]

----
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 vocab = assetVocabularyLocalS...  [in template "37703#37743#1558935" at line 26, column 1]
----
1<#-- Services --> 
2<#assign assetEntryLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/> 
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/> 
4<#assign journalArticleResourceServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")/> 
5<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
7 
8<#-- Reserved vbles --> 
9<#assign title = .vars['reserved-article-title'].data> 
10<#assign articleId=.vars["reserved-article-id"].data /> 
11<#assign description=.vars["reserved-article-description"].data /> 
12<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data /> 
13<#assign date=.vars["reserved-article-display-date"].data /> 
14<#assign request = .vars['request']> 
15 
16<#-- Init --> 
17<#assign assetEntry = journalTool.getAssetEntryByArticleId(groupId, articleId)> 
18<#assign journalArticle = journalTool.getJournalArticleByAssetEntry(assetEntry)> 
19<#assign articleURL = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()> 
20<#assign articleSocialBookmarks = themeDisplay.getThemeSetting("article-social-bookmarks")!> 
21<#assign layoutSetBannerPath = layoutTool.getLayoutSetBannerPath(groupId, themeDisplay.getLayout().isPrivateLayout())!> 
22<#assign articleMainImageThumbnail3 = dlTool.getThumbnail(smallImageUrl, "3", layoutSetBannerPath)! /> 
23<#assign articleMainImageThumbnail1 = dlTool.getThumbnail(smallImageUrl, "1")! /> 
24 
25<#-- Names category --> 
26<#assign vocab = assetVocabularyLocalService.fetchGroupVocabulary(themeDisplay.scopeGroupId, "Empresas de Actividades") /> 
27 
28<#assign ddmStructureNameNormalize = "template-${friendlyURLNormalizerTool.normalize(journalArticle.getDDMStructure().getName(localeUtil.getDefault()))}" /> 
29<#function sanitizeURL url> 
30	<#if !url?has_content> 
31		<#return "" /> 
32	</#if> 
33	<#assign urlTrimmed = url?trim /> 
34	<#if urlTrimmed?starts_with("javascript:") || urlTrimmed?starts_with("data:") || urlTrimmed?starts_with("vbscript:")> 
35		<#return "" /> 
36	</#if> 
37	<#return htmlUtil.escapeHREF(urlTrimmed) /> 
38</#function> 
39 
40<#function isExternalURL url> 
41	<#if !url?has_content> 
42		<#return false /> 
43	</#if> 
44	<#assign portalURLlc = themeDisplay.getPortalURL()?lower_case /> 
45	<#assign urlLC = url?lower_case /> 
46	<#assign isHttp = urlLC?starts_with("http://") || urlLC?starts_with("https://") /> 
47	<#assign isInternal = (url?starts_with("/")) || (isHttp && urlLC?starts_with(portalURLlc)) /> 
48	<#return isHttp && !isInternal /> 
49</#function>				 
50<#-- Build --> 
51<#if Nombre.data?has_content> 
52	<#assign title = Nombre.data> 
53</#if> 
54<#assign altImgDestacada = title /> 
55<#if AltImagenDestacada ??> 
56	<#if validator.isNotNull(AltImagenDestacada.getData())> 
57		<#assign altImgDestacada = AltImagenDestacada.getData() /> 
58	</#if> 
59</#if> 
60<#assign articleMainImageThumbnail3Safe = sanitizeURL(articleMainImageThumbnail3) /> 
61<#assign articleMainImageThumbnail1Safe = sanitizeURL(articleMainImageThumbnail1) /> 
62 
63<#-- Validaciones de TAB --> 
64<#assign serviciosData = (Informacion.Servicios.data)!"" /> 
65<#assign hasActividades = false /> 
66<#assign hasZonaActividad = ((Informacion.ZonaActividad.data)!)?has_content /> 
67<#if vocab??> 
68	<#list assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) as cat> 
69		<#if cat.vocabularyId == vocab.vocabularyId> 
70			<#assign hasActividades = true /> 
71			<#break> 
72		</#if> 
73	</#list> 
74</#if> 
75<#assign suplementoMascota = (AsturiasMascotas.SuplementoMascota.data)!"" /> 
76<#assign limitacionPeso = (AsturiasMascotas.LimitacionPeso.data)!"" /> 
77<#assign numeroMaximo = (AsturiasMascotas.NumeroMaximo.data)!"" /> 
78<#assign materialNecesario = (AsturiasMascotas.MaterialNecesario.data)!"" /> 
79<#assign suministroMaterial = (AsturiasMascotas.SuministroMaterial.data)!"" /> 
80<#assign admitePPP = (AsturiasMascotas.AdmitePPP.data)!"" /> 
81<#assign otrasMascotas = (AsturiasMascotas.OtrasMascotas.data)!"" /> 
82<#assign otrosAnimales = (AsturiasMascotas.OtrosAnimales.data)!"" /> 
83<#assign precioSuplemento = (AsturiasMascotas.PrecioSuplemento.data)!"" /> 
84<#assign detalleNormas = (AsturiasMascotas.DetalleNormas.data)!"" /> 
85 
86<#assign vocabMascotas = assetVocabularyLocalService.fetchGroupVocabulary(groupId, "Mascotas")! /> 
87<#assign actividadesMascotas = [] /> 
88<#if vocabMascotas?has_content> 
89	<#assign categoriasArticulo = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) /> 
90	<#list categoriasArticulo as cat> 
91		<#if cat.getVocabularyId() == vocabMascotas.getVocabularyId()> 
92			<#if cat.getParentCategoryId() != 0> 
93				<#assign parentCat = assetCategoryLocalService.fetchAssetCategory(cat.getParentCategoryId())! /> 
94				<#if parentCat?has_content && parentCat.getName() == "Actividades"> 
95					<#assign actividadesMascotas = actividadesMascotas + [cat] /> 
96				</#if> 
97			</#if> 
98		</#if> 
99	</#list> 
100</#if> 
101<#assign hasIconos = suplementoMascota?has_content || limitacionPeso?has_content || numeroMaximo?has_content || materialNecesario?has_content || suministroMaterial?has_content /> 
102<#assign hasActividadesMascotas = actividadesMascotas?has_content /> 
103<#assign hasNormas = admitePPP?has_content || otrasMascotas?has_content || detalleNormas?has_content /> 
104 
105<article class="template ${ddmStructureNameNormalize}" role="article"> 
106	<header class="article-header-wrapper row no-gutters"> 
107		<div class="article-header-container article-header-container-static"> 
108			<div class="container"> 
109				<div class="row no-gutters"> 
110					<div class="col-md-6"> 
111						<div class="article-image" style="background-image: url('${articleMainImageThumbnail3Safe}')" role="img" aria-label="${altImgDestacada}"> 
112							<img class="hide-accessible" src="${articleMainImageThumbnail3Safe}" alt="" /> 
113						</div> 
114					</div> 
115					<div class="article-info-wrapper col-md-6"> 
116						<div class="article-info"> 
117							<h2 class="article-title">${title}</h2> 
118							<div class="article-list-wrapper"> 
119								<ul class="article-list list-unstyled article-list-info"> 
120									<li class="article-list-item mb-4"> 
121										<span class="fas fa-map-marker-alt" aria-hidden="true"></span> 
122										<span class="hide-accessible">${languageUtil.get(request,"location")}</span> 
123										<span class="field-wrapper"> 
124											<#if Contacto.Concejo.data?has_content> 
125												<span class="important">${Contacto.Concejo.data}</span> 
126											</#if> 
127											<#if Contacto.Zona.data?has_content> 
128												<span class="text d-block">${Contacto.Zona.data}</span> 
129											</#if> 
130										</span> 
131									</li> 
132									<#if Contacto.Direccion?? && Contacto.Direccion.data?has_content || Contacto.CP?? && Contacto.CP.data?has_content || Contacto.Localidad?? && Contacto.Localidad.data?has_content> 
133										<li class="article-list-item"> 
134											<span class="far fa-address-card" aria-hidden="true"></span> 
135											<span class="hide-accessible">${languageUtil.get(request,"address")}</span> 
136											<span class="field-wrapper"> 
137												<span class="field">${languageUtil.get(request, "address")}:</span> 
138												<span class="text">${(Contacto.Direccion.data)!}</span><span aria-hidden="true"> ■ </span> 
139												<span class="text">${(Contacto.CP.data)!} - ${(Contacto.Localidad.data)!}</span> 
140											</span> 
141										</li> 
142									</#if> 
143									<#if Contacto.DireccionSedeAlternativa.data?has_content> 
144										<#list Contacto.DireccionSedeAlternativa.getSiblings() as dirAlt> 
145											<li class="article-list-item <#if dirAlt?is_last>mb-4</#if>"> 
146												<span class="far fa-address-card" aria-hidden="true"> 
147													<span class="hide-accessible">${languageUtil.get(request,"address")}</span> 
148												</span> 
149												<span class="field-wrapper"> 
150													<span class="field">${languageUtil.get(request, "address")}:</span> 
151													<span class="text">${dirAlt.getData()}</span> 
152												</span> 
153											</li> 
154										</#list> 
155									</#if> 
156									<#if Contacto.Telefono.data?has_content>									 
157										<li class="article-list-item"> 
158											<span class="fas fa-phone-alt" aria-hidden="true"></span> 
159											<span class="hide-accessible">${languageUtil.get(request, "phone")}</span> 
160											<span class="field-wrapper"> 
161												<span class="field">${languageUtil.get(request, "phone")}:</span> 
162												<#list Contacto.Telefono.getSiblings() as telephone> 
163													<#if telephone.data?has_content> 
164														<#assign rawTelefono = telephone.data?trim /> 
165														<#assign cleanTelefono = rawTelefono?replace("\\(.*?\\)", "", "r") /> 
166														<#assign numberTelefono = cleanTelefono?replace("[^0-9]", "", "r") /> 
167														<#assign numberLength = numberTelefono?length /> 
168														<#if numberLength == 9> 
169															<#assign hrefNumber = "+34${numberTelefono}" /> 
170														<#else> 
171															<#assign hrefNumber = numberTelefono /> 
172														</#if> 
173														<span class="text"> 
174															<a href="tel:${htmlUtil.escapeHREF(hrefNumber)}" aria-label="${languageUtil.format(request, 'call', rawTelefono)}"> 
175																${rawTelefono} 
176															</a> 
177															<#if !telephone?is_last><span aria-hidden="true"> | </span></#if> 
178														</span> 
179													</#if> 
180												</#list> 
181											</span> 
182										</li> 
183									</#if> 
184									<#assign whatsappData = (Contacto.whatsapp.data)!"" /> 
185									<#if whatsappData?has_content> 
186										<#assign cleanNumber = whatsappData?replace(" ", "")?replace("-", "")?replace("(", "")?replace(")", "") /> 
187										<#assign whatsappNumber = cleanNumber /> 
188										<#if !cleanNumber?starts_with("+") && !cleanNumber?starts_with("34")> 
189											<#assign whatsappNumber = "34${cleanNumber}" /> 
190										<#elseif cleanNumber?starts_with("34") && !cleanNumber?starts_with("+")> 
191											<#assign whatsappNumber = cleanNumber /> 
192										<#elseif cleanNumber?starts_with("+")> 
193											<#assign whatsappNumber = cleanNumber?substring(1) /> 
194										</#if> 
195										<#assign whatsappURLRaw = "https://wa.me/${whatsappNumber}" /> 
196										<#assign whatsappURL = sanitizeURL(whatsappURLRaw) /> 
197										<#if whatsappURL?has_content> 
198											<li class="article-list-item"> 
199												<span class="fab fa-whatsapp" aria-hidden="true"></span> 
200												<span class="hide-accessible">WhatsApp</span> 
201												<span class="field-wrapper"> 
202													<span class="field">WhatsApp:</span> 
203													<span class="text"> 
204														<a href="${whatsappURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.get(request, 'contact-via-whatsapp')} ${whatsappData} - ${languageUtil.get(request, 'opens-new-window')}"> 
205															${whatsappData} 
206															<span class="fas fa-external-link-alt ml-1 font-size-08" aria-hidden="true"></span> 
207														</a> 
208													</span> 
209												</span> 
210											</li> 
211										</#if> 
212									</#if> 
213									<#if Contacto.Email?? && Contacto.Email.data?has_content> 
214										<li class="article-list-item"> 
215											<span class="far fa-envelope" aria-hidden="true"></span> 
216											<span class="hide-accessible">${languageUtil.get(request,"email")}</span> 
217											<span class="field-wrapper"> 
218												<span class="field">${languageUtil.get(request, "email")}:</span> 
219												<span class="text"> 
220													<#list Contacto.Email.getSiblings() as Item> 
221														<#if Item.data?trim?has_content> 
222															<#assign emailAddress = Item.data?trim /> 
223															<a href="mailto:${htmlUtil.escapeHREF(emailAddress)}" aria-label="${languageUtil.format(request,'email-to', emailAddress)}"> 
224																${emailAddress} 
225															</a> 
226															<#if Item_has_next>, </#if> 
227														</#if> 
228													</#list> 
229												</span> 
230											</span> 
231										</li> 
232									</#if> 
233									<#if Contacto.Web?? && Contacto.Web.getSiblings()?has_content> 
234										<#assign hasValidURL = false /> 
235										<#list Contacto.Web.getSiblings() as web> 
236											<#if web.data?trim?has_content> 
237												<#assign linkURL = web.data?trim /> 
238												<#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")> 
239													<#assign hasValidURL = true /> 
240													<#break> 
241												</#if> 
242											</#if> 
243										</#list> 
244										<#if hasValidURL> 
245											<li class="article-list-item web"> 
246												<span class="fas fa-link" aria-hidden="true"></span> 
247												<span class="hide-accessible">${languageUtil.get(request, "site")}</span> 
248											<span class="field-wrapper d-inline-flex flex-wrap align-items-center gap-2"> 
249													<span class="field mr-1">${languageUtil.get(request, "site")}:</span> 
250													<#assign webCount = 0 /> 
251													<#list Contacto.Web.getSiblings() as web> 
252														<#if web.data?trim?has_content> 
253															<#assign linkURL = web.data?trim /> 
254															<#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")> 
255																<#assign webCount = webCount + 1 /> 
256															</#if> 
257														</#if> 
258													</#list> 
259													<#assign validIndex = 0 /> 
260													<#list Contacto.Web.getSiblings() as web> 
261														<#if web.data?trim?has_content> 
262															<#assign linkURL = web.data?trim /> 
263															<#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")> 
264																<#if !stringUtil.startsWith(linkURL, "http://") && !stringUtil.startsWith(linkURL, "https://")> 
265																	<#assign linkURL = "https://${linkURL}" /> 
266																</#if> 
267																<#assign validIndex = validIndex + 1 /> 
268																<#assign linkNumber = validIndex /> 
269																<a href="${htmlUtil.escapeHREF(linkURL)}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.get(request, 'site')} ${linkNumber} - ${htmlUtil.escape(title)} (${languageUtil.get(request, 'opens-new-window')})" class="text d-inline-flex align-items-center gap-1 text-nowrap"> 
270																	<#if webCount gt 1> 
271																		${languageUtil.get(request, "visit")} ${linkNumber} 
272																	<#else> 
273																		${languageUtil.get(request, "visit")} 
274																	</#if> 
275																	<span class="fas fa-external-link-alt ml-1 font-size-08" aria-hidden="true"></span> 
276																</a> 
277																<#if validIndex lt webCount> 
278																	<span class="mx-2 text-muted">|</span> 
279																</#if> 
280															</#if> 
281														</#if> 
282													</#list> 
283												</span> 
284											</li> 
285										</#if> 
286									</#if> 
287									<#if hasActividades?has_content> 
288										<li class="article-list-item web"> 
289											<span class="fas fa-clock" aria-hidden="true"></span> 
290											<span class="field-wrapper"> 
291												<span class="field">${languageUtil.get(request, "infoasturias-actividades")}:</span> 
292												<span class="text"> 
293													<a href="#tabContent2" class="internal-tab-link" data-tab-heading="tabHeading2" data-tab-content="tabContent2" aria-label="${languageUtil.get(request, 'infoasturias-actividadess')}"> 
294														${languageUtil.get(request, "view")} 
295														<span class="fas fa-caret-right ml-1 font-size-08" aria-hidden="true"></span> 
296													</a> 
297												</span> 
298											</span> 
299										</li> 
300									</#if> 
301									<#assign accesibilidadPath = (Informacion.Accesibilidad.data)!"" /> 
302									<#if accesibilidadPath?has_content> 
303										<#attempt> 
304											<#assign dlFileEntry = dlTool.getDLFileEntryByPath(accesibilidadPath) /> 
305											<#if dlFileEntry??> 
306												<#assign downloadURLRaw = "/documents/${groupId}/${dlFileEntry.getUuid()}" /> 
307												<#assign downloadURL = sanitizeURL(downloadURLRaw) /> 
308												<#if downloadURL?has_content> 
309													<#assign fileName = dlFileEntry.getFileName() /> 
310													<#assign fileSize = dlFileEntry.getSize() /> 
311													<#assign displaySize = (fileSize > 1048576)?then((fileSize / 1048576)?string("0.##") + " MB", ((fileSize / 1024)?round) + " KB") /> 
312													<li class="article-list-item document document-pdf"> 
313														<span class="far fa-file-pdf" aria-hidden="true"></span> 
314														<span class="hide-accessible">${languageUtil.get(request,"infoasturias-accesibilidad")}</span> 
315														<span class="field-wrapper"> 
316															<span class="field">${languageUtil.get(request, "infoasturias-accesibilidad")}:</span> 
317															<span class="text"> 
318																<a href="${downloadURL}" download="${fileName}" aria-label="${languageUtil.get(request, 'infoasturias-accesibilidad')}, PDF, ${displaySize}"> 
319																	${languageUtil.get(request, "infoasturias-accesibilidad")} 
320																	<span class="text-muted small ml-1" aria-hidden="true">(${displaySize})</span> 
321																	<span class="fas fa-download ml-1" aria-hidden="true"></span> 
322																</a>	 
323															</span> 
324														</span>		 
325													</li> 
326												</#if> 
327											</#if> 
328											<#recover> 
329										</#attempt> 
330									</#if> 
331									<#if Documentos?? && Documentos.Archivo?? && Documentos.Archivo.data?has_content> 
332										<#assign dlFileEntry = dlTool.getDLFileEntryByPath(Documentos.Archivo.data) /> 
333										<#if validator.isNotNull(dlFileEntry)> 
334											<#assign ext = dlFileEntry.getExtension()! /> 
335											<li class="article-list-item document document-${htmlUtil.escape(ext)}"> 
336												<span class="fas fa-file" aria-hidden="true"></span> 
337												<span class="hide-accessible">${languageUtil.get(request,"related-documents")}</span> 
338												<span class="field-wrapper"> 
339													<span class="field">${languageUtil.get(request, "related-documents")}:</span> 
340													<span class="text"> 
341														<#list Documentos.Archivo.getSiblings() as Item> 
342															<#if Item.data?has_content> 
343																<#assign dlFileEntry = dlTool.getDLFileEntryByPath(Item.data) /> 
344																<#if validator.isNotNull(dlFileEntry)> 
345																	<#assign downloadURL = sanitizeURL("/documents/${groupId}/${dlFileEntry.getUuid()}") /> 
346																	<#assign fileSize = dlFileEntry.getSize() /> 
347																	<#assign fileSizeKB = (fileSize / 1024)?round /> 
348																	<#assign fileExt = dlFileEntry.getExtension()?upper_case /> 
349																	<#if Item.ArchivoTitulo.data?has_content> 
350																		<#assign fileName = Item.ArchivoTitulo.data /> 
351																	<#else> 
352																		<#assign fileName = dlFileEntry.getTitle() /> 
353																	</#if> 
354																	<#assign downloadLabel = languageUtil.get(request, 'download') /> 
355																	<#assign formatLabel = languageUtil.get(request, 'format') /> 
356																	<#assign sizeLabel = languageUtil.get(request, 'size') /> 
357																	<#assign kbLabel = languageUtil.get(request, 'kb') /> 
358																	<#assign ariaLabelText = "${downloadLabel} ${fileName}, ${formatLabel} ${fileExt}, ${sizeLabel} ${fileSizeKB} ${kbLabel}" /> 
359																	<a href="${downloadURL}" download aria-label="${ariaLabelText}"> 
360																		${fileName} 
361																		<span class="file-info" aria-hidden="true"> 
362																			(${fileExt}, ${fileSizeKB} KB) 
363																		</span> 
364																		<span class="fas fa-download ml-1" aria-hidden="true"></span> 
365																	</a> 
366																	<#if Item_has_next>, </#if> 
367																</#if> 
368															</#if> 
369														</#list> 
370													</span> 
371												</span>		 
372											</li> 
373										</#if> 
374									</#if>			 
375								</ul> 
376							</div> 
377							<#if (RedesSociales.Facebook.data)!?has_content || (RedesSociales.Twitter.data)!?has_content || (RedesSociales.Instagram.data)!?has_content || (RedesSociales.Youtube.data)!?has_content || (RedesSociales.TikTok.data)!?has_content || (RedesSociales.Pinterest.data)!?has_content || (RedesSociales.Rss.data)!?has_content || (RedesSociales.OtrosCanales.NombreCanal.data)!?has_content> 
378								<div class="article-socials-wrapper mt-4"> 
379									<div class="socials-wrapper"> 
380									<div class="socials"> 
381										<ul class="list-inline items socials"> 
382											<#if RedesSociales.Facebook.data?has_content> 
383												<#assign linkURLRaw = RedesSociales.Facebook.data?trim /> 
384												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
385													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
386												</#if> 
387												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
388												<#if linkURL?has_content> 
389													<li class="list-inline-item item facebook"> 
390														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','Facebook')} ${languageUtil.get(request,'opens-new-window')}"> 
391														  <span class="fab fa-facebook-f" aria-hidden="true"></span> 
392														  <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Facebook')}</span> 
393														</a> 
394													</li> 
395												</#if> 
396											</#if> 
397											<#if RedesSociales.Twitter.data?has_content> 
398												<#assign linkURLRaw = RedesSociales.Twitter.data?trim /> 
399												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
400													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
401												</#if> 
402												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
403												<#if linkURL?has_content> 
404													<li class="list-inline-item item twitter"> 
405														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','X (Twitter)')} ${languageUtil.get(request,'opens-new-window')}"> 
406															<span class="fa-brands fa-x-twitter" aria-hidden="true"></span> 
407															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','X (Twitter)')}</span> 
408														</a> 
409													</li> 
410												</#if> 
411											</#if> 
412											<#if RedesSociales.Instagram.data?has_content> 
413												<#assign linkURLRaw = RedesSociales.Instagram.data?trim /> 
414												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
415													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
416												</#if> 
417												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
418												<#if linkURL?has_content> 
419													<li class="list-inline-item item instagram"> 
420														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','Instagram')} ${languageUtil.get(request,'opens-new-window')}"> 
421															<span class="fab fa-instagram" aria-hidden="true"></span> 
422															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','Instagram')}</span> 
423														</a> 
424													</li> 
425												</#if> 
426											</#if> 
427											<#if RedesSociales.Youtube.data?has_content> 
428												<#assign linkURLRaw = RedesSociales.Youtube.data?trim /> 
429												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
430													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
431												</#if> 
432												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
433												<#if linkURL?has_content> 
434													<li class="list-inline-item item youtube"> 
435														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','YouTube')} ${languageUtil.get(request,'opens-new-window')}"> 
436															<span class="fab fa-youtube" aria-hidden="true"></span> 
437															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','YouTube')}</span> 
438														</a> 
439													</li> 
440												</#if> 
441											</#if> 
442											<#if RedesSociales.Tiktok?? && RedesSociales.Tiktok.data?has_content> 
443												<#assign linkURLRaw = RedesSociales.Tiktok.data?trim /> 
444												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
445													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
446												</#if> 
447												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
448												<#if linkURL?has_content> 
449													<li class="list-inline-item item tiktok"> 
450														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','TikTok')} ${languageUtil.get(request,'opens-new-window')}"> 
451															<span class="fab fa-tiktok" aria-hidden="true"></span> 
452															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','TikTok')}</span> 
453														</a> 
454													</li> 
455												</#if> 
456											</#if> 
457											<#if RedesSociales.Pinterest.data?has_content> 
458												<#assign linkURLRaw = RedesSociales.Pinterest.data?trim /> 
459												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
460													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
461												</#if> 
462												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
463												<#if linkURL?has_content> 
464													<li class="list-inline-item item pinterest"> 
465														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','Pinterest')} ${languageUtil.get(request,'opens-new-window')}"> 
466															<span class="fab fa-pinterest-p" aria-hidden="true"></span> 
467															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','Pinterest')}</span> 
468														</a> 
469													</li> 
470												</#if> 
471											</#if> 
472											<#if RedesSociales.Rss.data?has_content> 
473												<#assign linkURLRaw = RedesSociales.Rss.data?trim /> 
474												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
475													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
476												</#if> 
477												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
478												<#if linkURL?has_content> 
479													<li class="list-inline-item item rss"> 
480														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','RSS')} ${languageUtil.get(request,'opens-new-window')}"> 
481															<span class="fas fa-rss" aria-hidden="true"></span> 
482															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','RSS')}</span> 
483														</a> 
484													</li> 
485												</#if> 
486											</#if> 
487											<#if RedesSociales.OtrosCanales.NombreCanal??> 
488												<#list RedesSociales.OtrosCanales.NombreCanal.getSiblings() as Canal> 
489													<#if Canal.CanalUrl.data?trim?has_content && Canal.data?trim?has_content> 
490														<#assign linkURLRaw = Canal.CanalUrl.data?trim /> 
491														<#assign canalName = Canal.data?trim /> 
492														<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
493															<#assign linkURLRaw = "https://${linkURLRaw}" /> 
494														</#if> 
495														<#assign linkURL = sanitizeURL(linkURLRaw) /> 
496														<#if linkURL?has_content> 
497															<li class="list-inline-item item other-channel"> 
498																<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x', canalName)} ${languageUtil.get(request,'opens-new-window')}"> 
499																	<span class="fas fa-share-alt" aria-hidden="true"></span> 
500																	<span class="hide-accessible">${languageUtil.format(request,'go-to-x', canalName)}</span> 
501																</a> 
502															</li> 
503														</#if> 
504													</#if> 
505												</#list> 
506											</#if> 
507											</ul> 
508										</div> 
509									</div> 
510								</div> 
511							</#if> 
512						</div> 
513					</div> 
514				</div> 
515			</div> 
516		</div>  
517	</header> 
518	 
519	<div class="sheet sheet-lg"> 
520		<#if Informacion.Titulo.data?has_content> 
521			<div class="article-great"> 
522				${Informacion.Titulo.data} 
523			</div>	 
524		</#if> 
525		<#assign hasTab1 = Informacion.Texto.data?has_content> 
526		<#assign hasTab2 = hasActividades || hasZonaActividad /> 
527		<#assign hasTab3 = serviciosData?has_content> 
528		<#assign hasTab4 = Contacto.Temporadas?? && Contacto.Temporadas.data?has_content || Contacto.FechasDeCierre?? && Contacto.FechasDeCierre.data?has_content> 
529		<#assign hasTab5 = hasIconos || hasActividadesMascotas || hasNormas /> 
530		<#assign hasTab6 = Geolocalizacion.Coordenadas.data?has_content>		 
531		<#assign showFirstTab = true>	 
532		<div class="article-accordion accordion"> 
533			<#if Visualizador.Slide.getData()?has_content> 
534				<h3 class="h3">${languageUtil.get(locale,"model.resource.com.liferay.portlet.imagegallery")}</h3>			 
535				<div class="slick article-slick article-section <#if Visualizador.Slide.getSiblings()?size==1>hide</#if>"> 
536					<#list Visualizador.Slide.getSiblings() as Slide> 
537						<#if validator.isNotNull(Slide.getData()) || validator.isNotNull(Slide.SlideUrl.getData())> 
538							<#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! /> 
539							<#assign slideThumbnail2Raw = dlTool.getThumbnailByJSON(Slide.data, "2")! /> 
540							<#assign slidePathRaw = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! /> 
541							<#assign slideUrlRaw = Slide.SlideUrl.data /> 
542							<#if slideUrlRaw?has_content> 
543								<#assign slideTitleRaw = "${languageUtil.get(request, 'video')} ${Slide?index}" /> 
544								<#if Slide.SlideTitulo.data?has_content> 
545									<#assign slideTitleRaw = Slide.SlideTitulo.data />   
546								</#if> 
547								<#assign slideUrl = stringUtil.replace(slideUrlRaw, 'watch?v=', 'embed/') /> 
548								<#assign slideThumbnail2Raw = stringUtil.replace(slideUrl, 'www', 'img') /> 
549								<#assign slideThumbnail2Raw = stringUtil.replace(slideThumbnail2Raw, 'embed', 'vi') /> 
550								<#assign slideThumbnail2Raw = '${slideThumbnail2Raw}/mqdefault.jpg' /> 
551								<#if slideUrl?contains("vimeo")> 
552									<#assign slideUrl = stringUtil.replace(slideUrl, 'http://vimeo.com/', 'https://player.vimeo.com/video/') /> 
553									<#assign slideVimeoId = stringUtil.extractLast(slideUrl, 'https://player.vimeo.com/video/') /> 
554									<#if slideVimeoId?has_content> 
555										<#assign slideVimeoJsonPath = 'http://vimeo.com/api/v2/video/${slideVimeoId}.json' /> 
556										<#assign slideVimeoJsonContent = getUrlContent.getContent(slideVimeoJsonPath)! /> 
557										<#if slideVimeoJsonContent?has_content> 
558											<#assign slideVimeoJsonArray = jsonFactoryUtil.createJSONArray(slideVimeoJsonContent) /> 
559											<#assign slideVimeoJsonItem = slideVimeoJsonArray.get(0) /> 
560											<#assign slideThumbnail2Raw = slideVimeoJsonItem.thumbnail_medium /> 
561										</#if> 
562									</#if> 
563								</#if> 
564								<#assign slideUrlSafe = sanitizeURL(slideUrl) /> 
565								<#assign slideThumbnail2Safe = sanitizeURL(slideThumbnail2Raw) /> 
566								<#assign slideTitle = htmlUtil.escape(slideTitleRaw) /> 
567								<#if slideUrlSafe?has_content && slideThumbnail2Safe?has_content> 
568									<div id="slide-${Slide?index}" class="slide"> 
569										<a class="card card-simple card-video" href="#" role="button" tabindex="0" onclick="event.preventDefault(); showDialogIframe('${slideUrlSafe}', '${slideTitle}', 800, 600, 'videoPopup', 'videoPopupIframe'); return false;" aria-label="${languageUtil.format(request, 'open-video-x', slideTitle)}"> 
570											<span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2Safe}')" role="img" aria-label="${slideTitle}"> 
571												<img class="hide-accessible" src="${slideThumbnail2Safe}" alt="" /> 
572											</span> 
573										</a> 
574									</div> 
575								</#if> 
576							<#else> 
577								<#assign slideTitleRaw = "${languageUtil.get(request, 'image')} ${Slide?index}" /> 
578								<#if Slide.SlideTitulo.data?has_content> 
579									<#assign slideTitleRaw = Slide.SlideTitulo.data />   
580								</#if> 
581								 
582								<#assign slideAltRaw = slideTitleRaw />									 
583								<#if Slide.ImagenAlt??>							 
584									<#if Slide.ImagenAlt.data?has_content> 
585										<#assign slideAltRaw = Slide.ImagenAlt.data />   
586									</#if> 
587								</#if> 
588								<#assign slidePath = sanitizeURL(slidePathRaw) /> 
589								<#assign slideThumbnail2Safe = sanitizeURL(slideThumbnail2Raw) /> 
590								<#assign slideTitle = htmlUtil.escape(slideTitleRaw) /> 
591								<#assign slideAlt = htmlUtil.escape(slideAltRaw) /> 
592								<#if slidePath?has_content && slideThumbnail2Safe?has_content> 
593								  <div class="slide"> 
594									<a class="card card-simple lightbox" href="${slidePath}" title="${slideTitle}" aria-label="${languageUtil.format(request, 'view-image-x', slideTitle)}"> 
595										<span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2Safe}')" role="img" aria-label="${slideAlt}"> 
596											<img class="hide-accessible" src="${slideThumbnail2Safe}" alt="" /> 
597										</span> 
598									</a> 
599								  </div> 
600								</#if> 
601							</#if> 
602						</#if> 
603					</#list> 
604				</div> 
605			</#if> 
606		 
607			<#if hasTab1> 
608				<div id="tab1" class="article-section accordion-item"> 
609					<a href="#tabContent1" id="tabHeading1" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent1" data-toggle="liferay-collapse"> 
610						<h3 class="h3 accordion-header"> 
611							${languageUtil.get(request,'info')} 
612						</h3> 
613					</a> 
614					<div id="tabContent1" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" role="region" aria-labelledby="tabHeading1"> 
615						<#if Informacion.Texto.data?has_content> 
616							${Informacion.Texto.data} 
617						</#if> 
618					</div> 
619				</div> 
620				<#assign showFirstTab = false> 
621			</#if> 
622			 
623			<#if hasTab2> 
624				<div id="tab2" class="article-section accordion-item"> 
625					<a href="#tabContent2" id="tabHeading2" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent2" data-toggle="liferay-collapse"> 
626						<h3 class="h3 accordion-header"> 
627							${languageUtil.get(request,'infoasturias-actividades')} 
628						</h3> 
629					</a> 
630					<div id="tabContent2" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading2" role="region"> 
631						<#if hasActividades> 
632							<#assign actividadCats = [] /> 
633							<#list assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) as cat> 
634								<#if vocab?? && cat.vocabularyId == vocab.vocabularyId> 
635									<#assign actividadCats = actividadCats + [cat] /> 
636								</#if> 
637							</#list> 
638							<#if actividadCats?has_content> 
639								<ul class="row list-unstyled article-list article-list-characteristics" role="list" aria-label="${languageUtil.get(request,'infoasturias-actividades')}"> 
640									<#list actividadCats as cat> 
641										<li class="col-12 col-sm-6 col-lg-4 mb-2 d-flex align-items-center"> 
642											<span class="fas fa-check text-success flex-shrink-0" aria-hidden="true"></span> 
643											<span class="value pl-2">${cat.getTitle(locale)}</span> 
644										</li> 
645									</#list> 
646								</ul> 
647							</#if> 
648						</#if> 
649						<#if hasZonaActividad> 
650							<div class="mb-4 title-normas <#if hasActividades>mt-5</#if>"> 
651								${languageUtil.get(request,'infoasturias-turismo-activo-zona-actividades')} 
652							</div> 
653							<#assign zonaContent = Informacion.ZonaActividad.data /> 
654							<#assign cleanZona = zonaContent?replace('<[^>]+>', '', 'r')?trim /> 
655							<#assign ubicaciones = cleanZona?split(',') /> 
656							<#if ubicaciones?has_content> 
657								<ul class="row list-unstyled font-size-09" role="list" aria-label="${languageUtil.get(request,'infoasturias-turismo-activo-zona-actividades')}"> 
658									<#list ubicaciones as ubicacion> 
659										<#assign ubicacionClean = ubicacion?trim /> 
660										<#if ubicacionClean?has_content> 
661											<li class="col-12 col-sm-6 col-lg-4 mb-2 d-flex align-items-center"> 
662												<span class="fas fa-map-pin text-success flex-shrink-0 small" aria-hidden="true"></span> 
663												<span class="pl-2">${ubicacionClean}</span> 
664											</li> 
665										</#if> 
666									</#list> 
667								</ul> 
668							</#if> 
669						</#if> 
670					</div> 
671				</div> 
672				<#assign showFirstTab = false /> 
673			</#if> 
674 
675			<#if hasTab3> 
676				<div id="tab3" class="article-section accordion-item"> 
677					<a href="#tabContent3" id="tabHeading3" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent3" data-toggle="liferay-collapse"> 
678						<h3 class="h3 accordion-header"> 
679							${languageUtil.get(request,'infoasturias-servicios')} 
680						</h3> 
681					</a> 
682					<div id="tabContent3" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading3" role="region"> 
683						<#assign serviciosClean = serviciosData 
684							?replace('&nbsp;', ' ') 
685							?replace('<br />\n\t ', '') 
686							?replace('<br />', '') 
687							?replace('<ul>', '<ul role="list">') /> 
688						${serviciosClean} 
689					</div> 
690				</div> 
691				<#assign showFirstTab = false /> 
692			</#if> 
693			 
694			<#if hasTab4> 
695				<div id="tab4" class="article-section accordion-item"> 
696					<a href="#tabContent4" id="tabHeading4" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent4" data-toggle="liferay-collapse"> 
697						<h3 class="h3 accordion-header"> 
698							${languageUtil.get(request,'infoasturias-temporadas')} 
699						</h3> 
700					</a> 
701					<div id="tabContent4" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading4" role="region"> 
702						<#if Contacto.Temporadas.data?has_content> 
703							<div class="mb-4 d-flex align-items-start"> 
704								<span class="fas fa-calendar color-green mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
705								<div class="flex-grow-1"> 
706									<span class="hide-accessible">${languageUtil.get(request,"infoasturias-temporadas")}</span> 
707									${Contacto.Temporadas.data} 
708								</div> 
709							</div> 
710						</#if> 
711						<#if Contacto.FechasDeCierre.data?has_content> 
712							<div class="mt-4"> 
713								<span class="hide-accessible">${languageUtil.get(request,"infoasturias-fechas-de-cierre")}</span> 
714								<div class="mb-2 d-flex align-items-start"> 
715									<span class="fas fa-door-open color-green mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
716									<span class="important flex-grow-1">${languageUtil.get(request,'infoasturias-fechas-de-cierre')}:</span> 
717								</div> 
718								<div class="pl-4"> 
719									${Contacto.FechasDeCierre.data} 
720								</div> 
721							</div> 
722						</#if> 
723					</div> 
724				</div> 
725				<#assign showFirstTab = false /> 
726			</#if>	 
727		 
728			<#if hasTab5> 
729				<div id="tab5" class="article-section accordion-item"> 
730					<a href="#tabContent5" id="tabHeading5" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent5" data-toggle="liferay-collapse"> 
731						<h3 class="h3 accordion-header"> 
732							${languageUtil.get(request,'infoasturias-info-mascotas')} 
733						</h3> 
734					</a> 
735					<div id="tabContent5" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading5" role="region"> 
736						<#if hasIconos> 
737							<div class="list-iconos mb-3 d-flex flex-wrap justify-content-center"> 
738								<#if suplementoMascota?has_content> 
739									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
740										<#if suplementoMascota == "Si"> 
741											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Suplemento por mascota") /> 
742											<#if imgArray?has_content && imgArray[0]?has_content> 
743												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-con-suplemento')}" loading="lazy"></div> 
744												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-con-suplemento')}</span> 
745											</#if> 
746										<#else> 
747											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Sin suplemento por mascota") /> 
748											<#if imgArray?has_content && imgArray[0]?has_content> 
749												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-no-suplemento')}" loading="lazy"></div> 
750												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-no-suplemento')}</span> 
751											</#if> 
752										</#if> 
753									</div> 
754								</#if> 
755								<#if limitacionPeso?has_content> 
756									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
757										<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Limitación de tamaño") /> 
758										<#if imgArray?has_content && imgArray[0]?has_content> 
759											<div> 
760												<img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-peso')}" loading="lazy"> 
761												<span class="value">${limitacionPeso}</span> 
762											</div> 
763											<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-peso')}</span> 
764										</#if> 
765									</div> 
766								</#if> 
767								<#if numeroMaximo?has_content> 
768									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
769										<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Número máximo de perros por persona") /> 
770										<#if imgArray?has_content && imgArray[0]?has_content> 
771											<div> 
772												<img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-maximo-persona')}" loading="lazy"> 
773												<span class="value-icono">${numeroMaximo}</span> 
774											</div> 
775											<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-maximo-persona')}</span> 
776										</#if> 
777									</div> 
778								</#if> 
779								<#if materialNecesario?has_content> 
780									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
781										<#if materialNecesario == "Si"> 
782											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Hace falta material para la actividad") /> 
783											<#if imgArray?has_content && imgArray[0]?has_content> 
784												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-material')}" loading="lazy"></div> 
785												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-material')}</span> 
786											</#if> 
787										<#else> 
788											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "No hace falta material para la actividad") /> 
789											<#if imgArray?has_content && imgArray[0]?has_content> 
790												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-no-material')}" loading="lazy"></div> 
791												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-no-material')}</span> 
792											</#if> 
793										</#if> 
794									</div> 
795								</#if> 
796								<#if materialNecesario == "Si" && suministroMaterial?has_content> 
797									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
798										<#if suministroMaterial == "Si"> 
799											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Suministran material") /> 
800											<#if imgArray?has_content && imgArray[0]?has_content> 
801												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-suministran-material')}" loading="lazy"></div> 
802												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-suministran-material')}</span> 
803											</#if> 
804										<#else> 
805											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "No suministran material") /> 
806											<#if imgArray?has_content && imgArray[0]?has_content> 
807												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-no-suministran-material')}" loading="lazy"></div> 
808												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-no-suministran-material')}</span> 
809											</#if> 
810										</#if> 
811									</div> 
812								</#if> 
813							</div> 
814						</#if> 
815						<#if hasActividadesMascotas> 
816							<div class="article-info-table mb-2"> 
817								<h4 class="mb-4 text-success text-center article-info-border"> 
818									${languageUtil.get(request,'infoasturias-actividades-mascotas')} 
819								</h4> 
820								<ul class="row list-unstyled article-list mb-5"  
821									role="list" 
822									aria-label="${languageUtil.get(request,'infoasturias-actividades-mascotas')}"> 
823									<#list actividadesMascotas as actividad> 
824										<li class="col-12 col-sm-6 col-lg-4 mb-2 d-flex align-items-center"> 
825											<span class="fas fa-check text-success flex-shrink-0" aria-hidden="true"></span> 
826											<span class="value pl-1">${actividad.getTitle(locale)}</span> 
827										</li> 
828									</#list> 
829								</ul> 
830								<#if hasNormas> 
831									<div class="normas-mascotas"> 
832										<h4 class="mb-4 text-success text-center article-info-border"> 
833											${languageUtil.get(request,'infoasturias-normas-mascotas')} 
834										</h4> 
835										<ul class="list-unstyled" role="list"> 
836											<#if admitePPP?has_content> 
837												<li class="d-flex align-items-start mb-2"> 
838													<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
839													<span class="text-rule"> 
840														<#if admitePPP == "Si"> 
841															${languageUtil.get(request,'infoasturias-mascotas-ppp')}. 
842														<#else> 
843															${languageUtil.get(request,'infoasturias-mascotas-no-ppp')}. 
844														</#if> 
845													</span> 
846												</li> 
847											</#if> 
848											<#if otrasMascotas?has_content> 
849												<li class="d-flex align-items-start mb-2"> 
850													<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
851													<span class="text-rule"> 
852														<#if otrasMascotas == "Si"> 
853															${languageUtil.get(request,'infoasturias-otras-mascotas')}: 
854															<#if otrosAnimales?has_content> 
855																<strong>${otrosAnimales}</strong> 
856															</#if> 
857														<#else> 
858															${languageUtil.get(request,'infoasturias-no-otras-mascotas')}. 
859														</#if> 
860													</span> 
861												</li> 
862											</#if> 
863											<#if precioSuplemento?has_content> 
864												<li class="d-flex align-items-start mb-2"> 
865													<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
866													<span class="text-rule"> 
867														${languageUtil.get(request,'infoasturias-mascotas-suplemento')}:  
868														<strong>${precioSuplemento}€</strong> 
869													</span> 
870												</li> 
871											</#if> 
872											<#if detalleNormas?has_content> 
873												<#assign normasParagraphs = detalleNormas?split('</p>') /> 
874												<#list normasParagraphs as parrafo> 
875													<#if parrafo?trim?has_content> 
876														<#assign cleanParrafo = parrafo?replace('<p>', '')?replace('<p[^>]*>', '', 'r')?trim /> 
877														<#if cleanParrafo?has_content> 
878															<li class="d-flex align-items-start mb-2"> 
879																<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
880																<span class="text-rule">${cleanParrafo}</span> 
881															</li> 
882														</#if> 
883													</#if> 
884												</#list> 
885											</#if>									 
886										</ul> 
887									</div> 
888								</#if> 
889							</div> 
890						</#if> 
891					</div> 
892				</div> 
893				<#assign showFirstTab = false /> 
894			</#if> 
895			<#if hasTab6> 
896				<#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) /> 
897				<div id="tab6" class="article-section article-section-map accordion-item"> 
898					<a href="#tabContent6" id="tabHeading6" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent6" data-toggle="liferay-collapse"> 
899						<h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-how-to-get')}</h3> 
900					</a> 
901					<div id="tabContent6" class="article-section-content accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading6" role="region"> 
902						<div id="article-map-wrapper-${articleId}" class="article-map-wrapper">  
903							<div id="article-map-content-${articleId}" style="width: 100%; height: 500px; z-index:1" role="application" aria-label="${languageUtil.format(request,'infoasturias-mapa-de', title)}"><!-- MAP --></div> 
904							<div class="hide-accessible" aria-live="polite"> 
905								<p>${languageUtil.get(request,'first-name')}: ${title}</p> 
906								<p>GPS: ${Geolocalizacion.Coordenadas.data}</p> 
907								<#if (Contacto.Direccion.data)?has_content || ((Contacto.CP.data)?has_content) || ((Contacto.Localidad.data)?has_content)> 
908									<p>${languageUtil.get(request,'address')}: ${((Contacto.Direccion.data)!)?js_string} ■ ${((Contacto.CP.data)!)?js_string} - ${((Contacto.Localidad.data)!)?js_string}</p> 
909								</#if> 
910							</div>								 
911							<div class="article-map-form">  
912								<div class="name important">${title}</div> 
913								<div class="gps"><span class="label">GPS:</span> <span class="value important">${Geolocalizacion.Coordenadas.data}</span></div> 
914								<form action="https://maps.google.es/maps" method="get" target="_blank"> 
915									<input type="hidden" name="daddr" value="${coordenadas[0]},${coordenadas[1]}"> 
916									<label for="saddrText"><span class="label hide-accessible">${languageUtil.get(request,'infoasturias-insert-from')}: </span></label> 
917									<label for="saddr"><span class="label">${languageUtil.get(request,'infoasturias-from')}: </span></label> 
918									<input class="form-control" type="text" maxlength="40" name="saddrText" id="saddrText" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}"> 
919									<input class="form-control" type="hidden" name="saddr" id="saddr" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}"> 
920									<button class="btn btn-text" type="submit">${languageUtil.get(request,'infoasturias-como-llegar')} &raquo;</button> 
921								</form> 
922							</div> 
923						</div> 
924						<script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script> 
925						<script type="text/javascript"> 
926							AUI().ready('aui-base', function(A){ 
927								var lat = ${coordenadas[0]}, 
928									lng = ${coordenadas[1]}, 
929									zoom = 16; 
930								mapContent = new L.map('article-map-content-${articleId}', {center: [lat, lng], zoom: 16}); 
931 
932								//Marker 
933								var defaultIconTheme = '/o/turismo-asturias-theme/css/images/icons/mark-box.png'; 
934								var defaultIcon = L.icon({ 
935									iconUrl: defaultIconTheme, 
936									iconSize:     [36, 53], 
937									iconAnchor:   [18, 53], 
938									iconShadow:   [0,0], 
939									popupAnchor:  [0, -30] 
940								}); 
941								var marker = L.marker([lat, lng], {icon: defaultIcon}).addTo(mapContent); 
942								 
943								var contentString = '<div class="row">'; 
944								contentString += '<div class="col-12">'; 
945								contentString += '<div class="h4">${htmlUtil.escape(title)}</div>'; 
946								contentString += '</div>'; 
947								contentString += '</div>'; 
948								 
949								contentString += '<div class="row">'; 
950								contentString += '<div class="col-12">'; 
951								<#if validator.isNotNull(articleMainImageThumbnail1Safe)> 
952									contentString += '<img class="pull-right mb-2 ml-2" src="${articleMainImageThumbnail1Safe}" alt="$title"/>'; 
953								</#if> 
954								contentString += '<dl class="mb-0">'; 
955								<#if (Contacto.Direccion.data)?has_content || ((Contacto.CP.data)?has_content) || ((Contacto.Localidad.data)?has_content)> 
956									contentString += '<dt class="important">${languageUtil.get(request,"address")}</dt>'; 
957									contentString += '<dd>${((Contacto.Direccion.data)!)?js_string}<br>${((Contacto.CP.data)!)?js_string}} - ${((Contacto.Localidad.data)!)?js_string}</dd>'; 
958								</#if> 
959								<#if Contacto.Telefono.data?has_content> 
960									contentString += '<dt class="important">${languageUtil.get(request,'phone')}</dt>'; 
961									contentString += '<dd>${Contacto.Telefono.data}</dd>'; 
962								</#if> 
963								<#if Contacto.Email.getData()?has_content> 
964									contentString += '<dt class="important">${languageUtil.get(request,'email')}</dt>'; 
965									<#list Contacto.Email.getSiblings() as Item> 
966										contentString += '<dd><a href="mailto:${Item.data}" title="${languageUtil.format(request,'go-to-x', 'email')}">${Item.data}</a></dd>'; 
967									</#list> 
968								</#if> 
969								<#if Contacto.Web.data?has_content> 
970									<#assign linkURL = Contacto.Web.data/> 
971									<#if !stringUtil.startsWith(linkURL, "http")> 
972										<#assign linkURL = "https://${Contacto.Web.data}"/> 
973									</#if> 
974									contentString += '<dt class="important">${languageUtil.get(request,'site')}</dt>'; 
975									contentString += '<dd><a href="${linkURL}" title="${languageUtil.format(request,'go-to-x', 'site')}">${Contacto.Web.data}</a></dd>'; 
976								</#if> 
977								contentString += '</dl>'; 
978								contentString += '</div>'; 
979								contentString += '</div>'; 
980								<#if description?has_content> 
981									 <#assign descriptionClean = description?replace("\n", "", "r")?replace("\r", "", "r") /> 
982									contentString += '<div class="row"><div class="col-12">${htmlUtil.escapeJS(descriptionClean)}</div></div>'; 
983								</#if> 
984								marker.bindPopup(contentString); 
985 
986								//Contributor 
987								L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 
988									attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.' 
989								}).addTo(mapContent); 
990								 
991							}); //AUI.ready 
992						</script> 
993					</div> 
994				</div> 
995				<#assign showFirstTab = false> 
996			</#if>		 
997		</div> 
998		 
999		<#if  validator.isNotNull(Observaciones.Observacion.data) || validator.isNotNull(Observaciones.MasInformacion.data) || validator.isNotNull(OtrosDatos.DatosFacilitadosPor.data) || validator.isNotNull(CodigoDGT.data) > 
1000			<div class="article-border"> 
1001				<#if Observaciones.Observacion?has_content> 
1002					${Observaciones.Observacion.data} 
1003				</#if> 
1004				<#if Observaciones.MasInformacion?has_content> 
1005					<#list  Observaciones.MasInformacion.getSiblings() as Item> 
1006						<#if stringUtil.matches(Item.data, "//") || stringUtil.matches(Item.data, "www") > 
1007							<div><a class="" href="${Item.data}" title="${languageUtil.format(request,'go-to-x', 'link')}">${Item.data}</a></div> 
1008						<#else> 
1009							<div><span class="">${Item.data}</span></div> 
1010						</#if> 
1011					</#list> 
1012				</#if> 
1013				<#if OtrosDatos.DatosFacilitadosPor?has_content> 
1014					<div><span class="important mr-1">${languageUtil.get(request,'infoasturias-datos-facilitados-por')}:</span><span class="text-wrapper">${OtrosDatos.DatosFacilitadosPor.data}.</span></div> 
1015				</#if> 
1016					 
1017					<#if CodigoDGT.data?has_content> 
1018					<div><span class="text-wrapper mr-1">Empresa de turismo activo inscrita en el Registro de Actividades Turísticas del Principado de Asturias con el código</span><span class="important">${CodigoDGT.data}.</span></div> 
1019					</#if> 
1020			</div> 
1021		</#if> 
1022		 
1023		<div class="row mt-5"> 
1024			<div class="col-xs-12 mb-3"> 
1025				<div class="text-center"> 
1026					<#if Contacto.Email.data?has_content> 
1027						<a href="mailto:${Contacto.Email.data}?Subject=${title}:%20${languageUtil.get(request,'infoasturias-more-info')}" class="btn btn-default text-center text-uppercase"> 
1028							<span class="far fa-envelope mr-2"> 
1029								<span class="hide-accessible">${languageUtil.get(request,"email")}</span> 
1030							</span> 
1031							${languageUtil.get(request,'infoasturias-contacto-alojamiento')} 
1032						</a> 
1033					</#if>					 
1034				</div>	 
1035			</div> 
1036		</div> 
1037	</div> 
1038	 
1039	<#-- Related --> 
1040	<#assign relatedJournalArticles = assetTool.getRelatedJournalArticlesApproved(assetEntry)/> 
1041	<#if validator.isNotNull(relatedJournalArticles) && relatedJournalArticles?size gt 0> 
1042		<div class="article-related portlet-background-grey-container"> 
1043			<div class="container"> 
1044				<h3 class="title-section">${languageUtil.get(request,'related-assets')}</h3> 
1045				<div class="slick article-related-slick"> 
1046					<#list relatedJournalArticles as currentJournalArticle> 
1047						<#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/> 
1048							<div class="slide"> 
1049								<a class="card background card-background-9-14"  href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}"> 
1050									<span class="d-block image-wrapper aspect-ratio-bg-cover" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');"> 
1051										<img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}"> 
1052										<span class="card-body"> 
1053											<span class="card-title">${currentJournalArticle.getTitle(locale)}</span> 
1054										</span> 
1055									</span> 
1056								</a> 
1057							</div> 
1058					</#list> 
1059				</div> 
1060			</div> 
1061		</div> 
1062	</#if> 
1063	 
1064	<#-- Nearby Articles --> 
1065	<#assign classTypeIds = [] /> 
1066	<#assign assetsNearJournalArticles = assetNearTool.getNearJournalArticles(themeDisplay.getScopeGroupId(), assetEntry.getEntryId(), 50.0, classTypeIds, 25)! /> 
1067	<#if validator.isNotNull(assetsNearJournalArticles) && assetsNearJournalArticles?size gt 0> 
1068		<div class="article-nearby portlet-container-margin"> 
1069			<div class="container"> 
1070				<div class="article-nearby-container"> 
1071					<h3 class="title-section">${languageUtil.get(request,'infoasturias-near-here')}</h3> 
1072					<div class="slick article-nearby-slick"> 
1073						<#list assetsNearJournalArticles as currentJournalArticle> 
1074							<#assign viewURLRaw = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true) /> 
1075							<#assign viewURL = sanitizeURL(viewURLRaw) /> 
1076							<#assign articleTitle = currentJournalArticle.getTitle(locale) /> 
1077							<#assign articleDescription = currentJournalArticle.getDescription(locale) /> 
1078							<#assign smallImageURLRaw = currentJournalArticle.getSmallImageURL() /> 
1079							<#assign smallImageURL = sanitizeURL(smallImageURLRaw) /> 
1080							<#assign distanceKm = currentJournalArticle.getVersion() /> 
1081							<#assign categoriesNamesRaw = journalTool.getCategoriesNames(groupId, currentJournalArticle.getArticleId(), locale, ["Concejos"]) /> 
1082							<#assign categoriesNames = htmlUtil.escape(categoriesNamesRaw) /> 
1083							 
1084							<#if viewURL?has_content && smallImageURL?has_content && articleTitle?has_content> 
1085								<div class="slide"> 
1086									<a class="card" href="${viewURL}" aria-label="${languageUtil.format(request, 'go-to-x', articleTitle)}"> 
1087										<span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${smallImageURL}')" role="img" aria-label="${articleTitle}"> 
1088											<img class="hide-accessible" src="${smallImageURL}" alt="" />					 
1089											<#if articleDescription?has_content> 
1090												<span class="card-hover"> 
1091													<span class="card-text">${articleDescription}</span> 
1092												</span> 
1093											</#if> 
1094										</span> 
1095										<span class="card-body"> 
1096											<span class="card-title">${articleTitle}</span> 
1097											<span class="card-subtitle"> 
1098												<span class="d-block"> 
1099													<span class="sr-only">${languageUtil.get(request, 'distance')}: </span> 
1100													${distanceKm} ${languageUtil.get(request, 'km')} 
1101												</span> 
1102												<#if categoriesNames?has_content> 
1103													<span class="d-block">${categoriesNames}</span> 
1104												</#if> 
1105											</span> 
1106										</span> 
1107									</a> 
1108								</div> 
1109							</#if> 
1110						</#list> 
1111					</div> 
1112				</div> 
1113			</div> 
1114		</div> 
1115	</#if> 
1116</article> 
1117<script type="application/ld+json"> 
1118
1119	"@context": "https://schema.org", 
1120	"@type": ["LocalBusiness"], 
1121	"@id": "${articleURL}", 
1122	"name": "${title?json_string}", 
1123	"url": "${articleURL}" 
1124	<#if articleMainImageThumbnail3Safe?has_content> 
1125		,"image": "${themeDisplay.getPortalURL()}${articleMainImageThumbnail3Safe}" 
1126	</#if>   
1127	<#if Informacion.Texto.data?has_content> 
1128		<#assign cleanDesc = htmlUtil.extractText(Informacion.Texto.data)?trim /> 
1129		<#if cleanDesc?has_content> 
1130			,"description": "${cleanDesc?json_string}" 
1131		</#if> 
1132	</#if> 
1133	<#if ((Contacto.Direccion.data)!)?has_content || ((Contacto.CP.data)!)?has_content> 
1134		,"address": { 
1135			"@type": "PostalAddress" 
1136			<#if (Contacto.Direccion.data)!?has_content> 
1137				,"streetAddress": "${Contacto.Direccion.data?json_string}" 
1138			</#if> 
1139			<#if (Contacto.CP.data)!?has_content> 
1140				,"postalCode": "${(Contacto.CP.data)!}" 
1141			</#if> 
1142			<#if (Contacto.Localidad.data)!?has_content> 
1143				,"addressLocality": "${Contacto.Localidad.data?json_string}" 
1144			</#if> 
1145			<#if (Contacto.Concejo.data)!?has_content> 
1146				,"addressRegion": "${Contacto.Concejo.data?json_string}" 
1147			</#if> 
1148			,"addressCountry": "ES" 
1149
1150	</#if> 
1151	<#if Geolocalizacion.Coordenadas.data?has_content> 
1152		<#assign coordenadas = stringUtil.split(Geolocalizacion.Coordenadas.data) /> 
1153		,"geo": { 
1154			"@type": "GeoCoordinates", 
1155			"latitude": "${coordenadas[0]}", 
1156			"longitude": "${coordenadas[1]}" 
1157
1158	</#if> 
1159	<#if Contacto.Telefono.data?has_content> 
1160		,"telephone": [ 
1161			<#assign phoneCount = 0 /> 
1162			<#list Contacto.Telefono.getSiblings() as telephone> 
1163				<#if telephone.data?has_content> 
1164					<#assign phoneCount = phoneCount + 1 /> 
1165				</#if> 
1166			</#list> 
1167			<#assign phoneIndex = 0 /> 
1168			<#list Contacto.Telefono.getSiblings() as telephone> 
1169				<#if telephone.data?has_content> 
1170					<#assign rawTelefono = telephone.data?trim /> 
1171					<#assign cleanTelefono = rawTelefono?replace("\\(.*?\\)", "", "r") /> 
1172					<#assign numberTelefono = cleanTelefono?replace("[^0-9]", "", "r") /> 
1173					<#assign numberLength = numberTelefono?length /> 
1174					<#assign phoneIndex = phoneIndex + 1 /> 
1175					<#if numberLength == 9> 
1176						"+34${numberTelefono}"<#if phoneIndex < phoneCount>,</#if> 
1177					<#else> 
1178						"${numberTelefono?json_string}"<#if phoneIndex < phoneCount>,</#if> 
1179					</#if> 
1180				</#if> 
1181			</#list> 
1182
1183	</#if> 
1184	<#if Contacto.Email.getData()?has_content> 
1185		,"email": [ 
1186			<#assign emailCount = 0 /> 
1187			<#list Contacto.Email.getSiblings() as Item> 
1188				<#if Item.data?trim?has_content> 
1189					<#assign emailCount = emailCount + 1 /> 
1190				</#if> 
1191			</#list> 
1192			<#assign emailIndex = 0 /> 
1193			<#list Contacto.Email.getSiblings() as Item> 
1194				<#if Item.data?trim?has_content> 
1195					<#assign emailIndex = emailIndex + 1 /> 
1196					"${Item.data?json_string}"<#if emailIndex < emailCount>,</#if> 
1197				</#if> 
1198			</#list> 
1199
1200	</#if> 
1201	<#if vocab??> 
1202		<#assign actividadCats = [] /> 
1203		<#list assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) as cat> 
1204			<#if cat.vocabularyId == vocab.vocabularyId> 
1205				<#assign actividadCats = actividadCats + [cat] /> 
1206			</#if> 
1207		</#list> 
1208		<#if actividadCats?has_content> 
1209			,"makesOffer": [ 
1210				<#list actividadCats as cat> 
1211					{"@type": "Offer", 
1212						"itemOffered": { 
1213							"@type": "Offer", 
1214							"name": "${cat.getTitle(locale)?json_string}", 
1215							"category": "Adventure Tourism" 
1216
1217					}<#if cat_has_next>,</#if> 
1218				</#list> 
1219
1220		</#if> 
1221	</#if> 
1222	<#if Contacto.Temporadas.data?has_content> 
1223		<#assign cleanTemp = htmlUtil.extractText(Contacto.Temporadas.data)?trim /> 
1224		<#if cleanTemp?has_content> 
1225			,"openingHoursSpecification": { 
1226				"@type": "OpeningHoursSpecification", 
1227				"description": "${cleanTemp?json_string}" 
1228
1229		</#if> 
1230	</#if> 
1231
1232</script> 
1233<script type="text/javascript"> 
1234	(function() { 
1235		'use strict'; 
1236		setTimeout(function() { 
1237			var links = document.querySelectorAll('.internal-tab-link'); 
1238			links.forEach(function(link) { 
1239				link.addEventListener('click', function(e) { 
1240					e.preventDefault(); 
1241					 
1242					var tabHeadingId = this.getAttribute('data-tab-heading'); 
1243					var tabContentId = this.getAttribute('data-tab-content'); 
1244					var tabControl = document.getElementById(tabHeadingId); 
1245					var tabContent = document.getElementById(tabContentId); 
1246					 
1247					if (!tabControl || !tabContent) return; 
1248					 
1249					var isExpanded = tabControl.getAttribute('aria-expanded') === 'true'; 
1250					if (!isExpanded) { 
1251						tabControl.click(); 
1252						setTimeout(function() { 
1253							scrollToElement(tabControl); 
1254						}, 350); 
1255					} else { 
1256						scrollToElement(tabControl); 
1257
1258				}); 
1259			}); 
1260		}, 500); 
1261	   
1262		function scrollToElement(element) { 
1263			var elementPosition = element.getBoundingClientRect().top; 
1264			var offsetPosition = elementPosition + window.pageYOffset - 140; 
1265			window.scrollTo({ 
1266				top: offsetPosition, 
1267				behavior: 'smooth' 
1268			}); 
1269			setTimeout(function() { 
1270				element.focus(); 
1271			}, 400); 
1272
1273	})(); 
1274</script>