// global variables var markers = []; var locationsMap = []; var locationsStationsMap = []; var locationsRechargeMap = []; var map; var lat = ''; var lng = ''; var zoom = ''; var radius = ''; var sessionZoom = Number(sessionStorage.getItem('zoom')); var gps = '' var placeLocation = ''; var placeLAT = ''; var placeLNG = ''; var origin = ''; var place = ''; var markerInfoAddress = '' markerInfoPhone = '', markerInfoCity = '', markerInfoName = '', markerPlatform = '', markerInfoCp = '', markerInfoSpeed = '', markerInfoX = '', markerInfoY = '' var destinationURL = ''; var myURL = new URL(window.location.href); var myUSP = myURL.searchParams; var gpsURL = ''; var address = ''; var controlDivp; const blockListHeaderHeight = $(".cards-result--header").innerHeight(); const markerDetailPath = $('.detailPath').val(); const entityTypeString = $('.map-component').attr('data-entity') const entityTypeObj = JSON.parse(entityTypeString) const markerImageIcon = entityTypeObj.entityIconPath let googleImagesIcon = '' let googleImagesIconHover = '' let stationIconPath = '/content/dam/repsol-ecommerce/buscador-eess/img/sistema/estacion-servicio.svg' let rechargeIconPath = '/content/dam/repsol-ecommerce/buscador-eess/img/sistema/punto-recarga-electrica.svg' let interIconPath = '/content/dam/repsol-ecommerce/buscador-eess/img/sistema/punto-interoperabilidad.svg' const checkEntityTypeAndActiveButton = (entity) => { const checkDefaultTypeToFilterMap = () => { if(myUSP.get('default') == 'station') { stationType = 'station' sessionStorage.setItem('serviceType', stationType) googleImagesIcon = stationIconPath googleImagesIconHover = googleImagesIcon; } else { stationType = 'recharge' sessionStorage.setItem('serviceType', stationType) googleImagesIcon = rechargeIconPath googleImagesIconHover = googleImagesIcon; } } const checkContributedEntityToFilterMap = () => { if (entityTypeObj.entityName === 'Estaciones de servicio') { $('.service-stations button[data-type="Estacion"]').addClass('active') $('.service-stations button[data-type="Recarga"]').removeClass('active') $('.service-stations-result').addClass('active') $('.electric-charge-result').removeClass('active') $('.service-stations-result-number').addClass('active') $('.electric-charge-result-number').removeClass('active') stationType = 'station' sessionStorage.setItem('serviceType', stationType) googleImagesIcon = stationIconPath googleImagesIconHover = googleImagesIcon; } else { $('.service-stations button[data-type="Recarga"]').addClass('active') $('.service-stations button[data-type="Estacion"]').removeClass('active') $('.electric-charge-result').addClass('active') $('.service-stations-result').removeClass('active') $('.electric-charge-result-number').addClass('active') $('.service-stations-result-number').removeClass('active') stationType = 'recharge' sessionStorage.setItem('serviceType', stationType) googleImagesIcon = rechargeIconPath googleImagesIconHover = googleImagesIcon; } } if(myURL.search.length > 0) { if(myUSP.has('default')) { checkDefaultTypeToFilterMap() } else { checkContributedEntityToFilterMap() } } else { checkContributedEntityToFilterMap() } } function relocateMap(latitude, longitude) { var coord = { lat: latitude, lng: longitude, }; map = new google.maps.Map(document.getElementById('map'), { zoom: 16, center: coord }); var marker = new google.maps.Marker({ position: coord, map: map, icon: googleImagesIcon }); } function CustomZoomInControl(controlDiv, map) { var controlUI = document.createElement('div'); controlUI.style.backgroundColor = '#fff'; controlUI.style.width = '32px'; controlUI.style.borderRadius = '8px'; controlUI.style.height = '32px'; controlUI.style.cursor = 'pointer'; controlUI.style.margin = '0px 20px 8px 20px'; controlUI.style.textAlign = 'center'; controlUI.style.padding = '9px'; controlUI.style.lineHeight = '12px'; controlUI.className = 'map-zoom-control'; controlDiv.appendChild(controlUI); var controlPlus = document.createElement('div'); controlPlus.style.fontSize = '13px'; controlPlus.style.color = '#001E37'; controlPlus.innerHTML = ''; controlUI.appendChild(controlPlus); google.maps.event.addDomListener(controlUI, 'click', function () { map.setZoom(map.getZoom() + 1); }); } function CustomZoomInControlMinus(controlDiv, map) { var controlUI = document.createElement('div'); controlUI.style.backgroundColor = '#fff'; controlUI.style.width = '32px'; controlUI.style.borderRadius = '8px'; controlUI.style.height = '32px'; controlUI.style.cursor = 'pointer'; controlUI.style.margin = '0px 20px 0px 20px'; controlUI.style.textAlign = 'center'; controlUI.style.padding = '9px'; controlUI.style.lineHeight = '12px'; controlUI.className = 'map-zoom-control'; controlDiv.appendChild(controlUI); var controlMinus = document.createElement('div'); controlMinus.style.fontSize = '13px'; controlMinus.style.color = '#001E37'; controlMinus.innerHTML = ''; controlUI.appendChild(controlMinus); google.maps.event.addDomListener(controlUI, 'click', function () { map.setZoom(map.getZoom() - 1); }); } function addYourLocationButton(map, marker) { controlDivP = document.createElement('div'); var controlUI = document.createElement('div'); controlUI.style.backgroundColor = '#fff'; controlUI.style.width = '32px'; controlUI.style.borderRadius = '8px'; controlUI.style.height = '32px'; controlUI.style.cursor = 'pointer'; controlUI.style.margin = '10px 20px 8px 20px'; controlUI.style.textAlign = 'center'; controlUI.className = 'map-zoom-control'; controlDivP.appendChild(controlUI); var secondChild = document.createElement('div'); secondChild.style.fontSize = '14px'; secondChild.style.color = '#001E37'; controlUI.style.padding = '9px'; controlUI.style.lineHeight = '12px'; secondChild.innerHTML = ''; controlUI.appendChild(secondChild); google.maps.event.addListener(map, 'center_changed', function () { secondChild.style['background-position'] = '0 0'; }); controlUI.addEventListener('click', function () { var imgX = '0', animationInterval = setInterval(function () { imgX = imgX === '-18' ? '0' : '-18'; secondChild.style['background-position'] = imgX + 'px 0'; }, 500); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); map.setCenter(latlng); map.setZoom(13); clearInterval(animationInterval); secondChild.style['background-position'] = '-144px 0'; }); } else { clearInterval(animationInterval); secondChild.style['background-position'] = '0 0'; } }); controlDivP.index = 1; } function centerMap() { if(myURL.search && myUSP.has('gps')) { let coordenatesString = myUSP.get('gps') let coordenatesArray = coordenatesString.split(',') let coordenatesLat = coordenatesArray[0] let coordenatesLng = coordenatesArray[1] map = new google.maps.Map(document.getElementById('map'), { zoom: 13, center: new google.maps.LatLng(coordenatesLat,coordenatesLng), scaleControl: false, fullscreenControl: false, disableDefaultUI: true, clickableIcons: false, styles: [ { featureType: "poi.business", stylers: [{ visibility: "off" }], } ] }); } } function initMapMap(lat, lng, zoom, locationsMap) { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); origin = `${position.coords.latitude},${position.coords.longitude}`; }); } var locations = []; markers = []; var googleImages = $('.googleImages').val(); $('div .filters-cards').each(function (index) { var longitude = $(this).find('.cardLongitude').val(); var latitude = $(this).find('.cardLatitude').val(); var title = $(this).find('.maptitle').text(); var description = $(this).find('.mapdescription').text(); var image = $(this).find('.mapimage').attr('src'); var titletag = $(this).find('.titletag').text(); var valuetag = $(this).find('.valuetag').text(); var valuetagname = $(this).find('.valuetag').attr('data-tagname'); var item = [title, latitude, longitude, description, image, titletag, valuetag, valuetagname]; locations.push(item); }); if (lat == undefined && lng == undefined) { lat = 40.39; lng = -8.0851802; zoom = 5; if(window.innerWidth < 720) { lat = 41.000000; lng = -9.5000000; zoom = 3.75; } } map = new google.maps.Map(document.getElementById('map'), { zoom: zoom, center: new google.maps.LatLng(lat, lng), scaleControl: false, fullscreenControl: false, disableDefaultUI: true, clickableIcons: false, styles: [ { featureType: "poi.business", stylers: [{ visibility: "off" }], } ] }); var myMarker = new google.maps.Marker({ map: map, zoom: zoom + 6, animation: google.maps.Animation.DROP }); addYourLocationButton(map, myMarker); var customZoomInControlDiv = document.createElement('div'); var customZoomInControlDivMinus = document.createElement('div'); var customZoomInControl = new CustomZoomInControl(customZoomInControlDiv, map); var customZoomInControlMinus = new CustomZoomInControlMinus(customZoomInControlDiv, map); customZoomInControlDiv.index = 1; customZoomInControlDivMinus.index = 1; map.controls[google.maps.ControlPosition.RIGHT_CENTER].push(controlDivP); map.controls[google.maps.ControlPosition.RIGHT_CENTER].push(customZoomInControlDiv); map.controls[google.maps.ControlPosition.RIGHT_CENTER].push(customZoomInControlDivMinus); map.controls[google.maps.ControlPosition.RIGHT_CENTER].push(controlDivP); var infoWindow = new google.maps.InfoWindow({ minWidth: 343, maxWidth: 343, }); if(locationsMap?.length > 0){ $(".button-see").attr("disabled", false); }else{ $(".button-see").attr("disabled", true); } var marker, i; for (i = 0; i < locationsMap?.length; i++) { var locationLat = locationsMap[i].x, locationLong = locationsMap[i].y, markerInfo = [{ "markerId": locationsMap[i].id, "markerProvinceF": locationsMap[i].provinceFormated || "", "markerLocationF": locationsMap[i].localityFormated || "", "markerDirectionF": locationsMap[i].directionFormated || "", "markerName": locationsMap[i].nombre, "markerCp": locationsMap[i].cp, "markerAddress": locationsMap[i].direccion, "markerCity": locationsMap[i].localidad, "markerPhone": locationsMap[i].telefono, "markerHour": locationsMap[i].horarios || (locationsMap[i].horario ? locationsMap[i].horario : undefined), "markerPlatform": locationsMap[i].platform, "markerSpeed": locationsMap[i].velocidad, "markerConectors": locationsMap[i].conectors, "markerX": locationsMap[i].x, "markerY": locationsMap[i].y, "markerProducts": locationsMap[i].productos, "markerType": locationsMap[i].tipo, "markerMargin": locationsMap[i].margen }] const stationIcon = { url: stationIconPath, scaledSize: new google.maps.Size(50, 57), }; const rechargeIcon = { url: rechargeIconPath, scaledSize: new google.maps.Size(50, 57), }; const interIcon = { url: interIconPath, scaledSize: new google.maps.Size(50, 57), }; if (locationsMap[i].platform === 2 || locationsMap[i].platform === 3) { googleImagesIcon = interIcon; } else if (locationsMap[i].platform === 1 ){ googleImagesIcon = rechargeIcon; } else { googleImagesIcon = stationIcon; } marker = new google.maps.Marker({ position: new google.maps.LatLng(locationLong, locationLat), map: map, icon: googleImagesIcon, markerInfo: markerInfo, }); marker.data = locationsMap[i]; var markerDataType = ""; var mapComponent = document.querySelector('.map-component'); if ($(".service-stations button[data-type='Recarga']").hasClass('active')) { markerDataType = "Recarga Eléctrica Repsol"; mapComponent.style.setProperty('--marker-header-bg-color', '#001e37'); } else { markerDataType = "Estación de Servicio Repsol"; mapComponent.style.setProperty('--marker-header-bg-color', '#fff5f0'); } google.maps.event.addListener(marker, 'click', (function (marker, i, infoWindow) { return function () { pointClick = true; map.panTo(this.getPosition()); map.setZoom(map.getZoom() + 3); markerId = this.data.id, markerProvinceF = this.data.provinceFormated || "", markerLocationF = this.data.localityFormated || "", markerDirectionF = this.data.directionFormated || "", markerInfoAddress = this.data.direccion, markerInfoPhone = this.data.telefono, markerInfoCity = this.data.localidad, markerInfoName = this.data.nombre, markerPlatform = this.data.platform, markerInfoCp = this.data.cp, markerInfoSpeed = this.data.velocidad, markerInfoX = this.data.x, markerInfoY = this.data.y, markerProducts = this.data.productos, markerType = this.data.tipo, markerMargin = this.data.margen; var markerProduct = ''; var destination = { lat: parseFloat(markerInfoY), lng: parseFloat(markerInfoX) } if(markerProducts !== undefined && markerProducts.length > 0) { markerProducts.map((product) => { var productName = product.producto; var productPrice = product.precio; var productDate = product.fecha; var productNameContent = `${productName}:`; var productPriceContent = `${productPrice}:`; var productDateContent = `${productDate}:`; if(productPrice == undefined) { productPriceContent = ''; } if(productDate == undefined) { productDateContent = ''; } producto = ``; markerProduct += producto; }); } var thisMarkerInfo = marker.markerInfo; const messageShowStoreHoursIni = showStoreHours(thisMarkerInfo[0]); var markerContentHeader = ""; if ($(".service-stations button[data-type='Recarga']").hasClass('active')) { //markerContentHeader = //`
${markerDataType}
`; if (markerPlatform === 2 || markerPlatform === 3) { markerContentHeader = `
${markerDataType}
`; } else if (markerPlatform === 1) { markerContentHeader = `
${markerDataType}
`; } } else { markerContentHeader = `
${markerDataType}
`; } if ($(".service-stations button[data-type='Recarga']").hasClass('active')) { var markerContentName = ``; } else { var markerContentName = ``; } var markerContShowStoreHours = `${messageShowStoreHoursIni}`; var markerContentPhone = ``; var markerContentAddress = ``; if (this.data.telefono === undefined) { markerContentPhone = ''; } var markerContentLocation = ``; destinationURL = `https://www.google.com/maps/dir/?api=1&json?&origin=${origin}&destination=${markerInfoY},${markerInfoX}`; markerContentGoto = `Cómo llegar`; var markerContentDetail = `Cómo llegar`; var markerContentDetail = ''; if ($(".service-stations button[data-type='Estacion']").hasClass("active")) { markerContentDetail = `Ver detalle`; } else { markerContentDetail = `Ver detalle`; } var markerContentClose = `` /*markerContent = `
${markerContentHeader}
${markerContentName} ${markerContentAddress} ${markerContentLocation} ${markerContentPhone} ${markerContentGoto} ${markerContentDetail}
${markerContentClose}
`;*/ /*markerContent = `
${markerContentHeader} ${markerContShowStoreHours} ${messageShowStoreDistance}
${markerContentGoto} ${markerContentDetail}
${markerContentClose}
`; */ let messageShowStoreDistance = ""; getStoreDistanceString(thisMarkerInfo[0]).then(message => { let messageShowStoreDistance = message; let markerContentConector = ""; if ($(".service-stations button[data-type='Recarga']").hasClass('active')) { //markerContentHeader = `
Repsol, ${markerInfoName} ${messageShowStoreDistance}
`; if (markerPlatform === 2 || markerPlatform === 3) { markerContentHeader = `
Repsol, ${markerInfoName} ${messageShowStoreDistance}
`; } else if (markerPlatform === 1) { markerContentHeader = `
Repsol, ${markerInfoName} ${messageShowStoreDistance}
`; } //const recargaItems = thisMarkerInfo[0].markerConectors; let ajaxResult; callAjaxPuntoRecarga(markerId) .then(data => { ajaxResult = data; if (ajaxResult[0]) { const puntosRecarga = ajaxResult[0].puntosRecarga; let markerContentConector = ''; // Inicializar la variable aquí if (puntosRecarga && Array.isArray(puntosRecarga)) { puntosRecarga.forEach(punto => { let recargaItems = punto.conectors; if (recargaItems && Array.isArray(recargaItems)) { // Filtrar duplicados const uniqueRecargaItems = recargaItems.filter((item, index, self) => index === self.findIndex((t) => ( t.tipo === item.tipo )) ); markerContentConector = ""; uniqueRecargaItems.forEach(item => { const connectorsHTML = generateConnectorsHTML([item]); markerContentConector += `
${connectorsHTML}
`; }); } }); } document.querySelector('.marker-card-conectors').innerHTML = markerContentConector; } }) .catch(error => { console.error('Error en la llamada AJAX:', error); }); } else { markerContentHeader = `
${markerDataType} ${messageShowStoreDistance}
`; markerContentConector = ""; } markerContent = `
${markerContentHeader} ${markerContShowStoreHours}
${markerContentConector}
${markerContentGoto} ${markerContentDetail}
${markerContentClose}
`; infoWindow.setContent(markerContent); infoWindow.open(map, marker); if (window.innerWidth <= 576) { if (infoWindow) { $('.center-location').hide(); } } }); EESSSearch.dataLayer.sendData($(this), "placeicon"); } })(marker, i, infoWindow)); markers.push(marker); google.maps.event.addListener(marker, 'mouseover', function () { marker.setIcon(googleImagesIconHover); }); google.maps.event.addListener(marker, 'mouseout', function () { marker.setIcon(googleImagesIcon); }); } google.maps.event.addListener(infoWindow, 'domready', function () { $('.gm-style-iw').addClass('animate-up'); const closeBtnPrev = $('.marker-dialog__close'); if (closeBtnPrev.length > 0) { var closeBtn = $('.marker-dialog__close').get(); google.maps.event.addDomListener(closeBtn[0], 'click', function () { $('.gm-style-iw').removeClass('animate-up'); if (window.innerWidth <= 567) { setTimeout(function () { infoWindow.close(); $('.center-location').show(); }, 800); } else { infoWindow.close(); } EESSSearch.dataLayer.sendData($(this), "close"); }); } if($('.gm-style-iw .gm-ui-hover-effect').length > 0) { $('.gm-style-iw .gm-ui-hover-effect').css('display', 'none'); $('.gm-style-iw .gm-ui-hover-effect').remove() } setInfoWindowCardsCoords(); }); google.maps.event.addListener(map, 'click', function () { if (infoWindow) { infoWindow.close(); } }); google.maps.event.addListener(map, 'idle', function () { showVisibleMarkers(map, markers); var markerCluster = new MarkerClusterer(map, markers, { gridSize: 100, maxZoom: 17, imagePath: 'https://raw.githubusercontent.com/googlemaps/js-marker-clusterer/gh-pages/images/m' }); google.maps.event.addListener(markerCluster, 'clusterclick', function (cluster) { google.maps.event.addListener(map, 'idle', function () { setTimeout(function () { $('.filters-cards').remove(); showVisibleMarkers(map, markers); }, 1000); }); $(this).attr('data-cluster', cluster); EESSSearch.dataLayer.sendData($(this), "circle"); }); }); } function callAjaxPuntoRecarga(idPuntoRecarga) { return new Promise((resolve, reject) => { jQuery.ajax({ url: '/bin/repsol/searchmiddleware/station-search.json?action=show&Idioma=ES' + '&id=' + idPuntoRecarga + '&tipo=3', type: 'post', dataType: 'json', success: function(data) { resolve(data); // Resuelve la promesa con los datos recibidos }, error: function(xhr, status, error) { console.error('Error callAjaxPuntoRecarga:', error); reject(error); // Rechaza la promesa con el error recibido } }); }); } var showMeClick = false; var pointClick = false; function showme(index) { showMeClick = true; for (var i = 0; i < markers.length; i++) { if (index == i) { markers[i].setAnimation(google.maps.Animation.BOUNCE); var markerSelect = []; markerSelect.push(markers[i]); map.panTo(markerSelect[0].getPosition()); map.setZoom(13); return false; } else { markers[i].setAnimation(null); } } } function outMe(index, hoverDiv) { for (var i = 0; i < markers.length; i++) { markers[i].setIcon(googleImagesIcon); markers[i].setAnimation(null); } } function hoverMe(index, hoverDiv) { for (var i = 0; i < markers.length; i++) { if (index == i) { markers[i].setIcon(googleImagesIconHover); markers[i].setAnimation(google.maps.Animation.BOUNCE); return false; } } } function getDayInSpanish(dayIndex) { const days = ["Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"]; return days[dayIndex]; } function getDayInEnglish(dayIndex) { const days = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]; return days[dayIndex]; } function showStoreHours(markerInfo) { if (markerInfo != undefined) { const mapComponent = document.querySelector('.map-component'); const open24hText = mapComponent.getAttribute('data-open-24h-text'); const today = new Date(); const dayIndex = today.getDay(); const todayInSpanish = getDayInSpanish(dayIndex); const todayInEnglish = getDayInEnglish(dayIndex); let storeHours = false; if (markerInfo.markerHour != undefined) { if(typeof markerInfo.markerHour == 'string'){ storeHours = markerInfo.markerHour; }else{ storeHours = markerInfo.markerHour.find(hour => hour.dia === todayInEnglish); } } if (!storeHours) { if (markerInfo.markerHour != undefined) { storeHours = markerInfo.markerHour.find(hour => hour.dia === todayInSpanish); } } if (storeHours) { if(typeof storeHours == 'string'){ return `${storeHours}`; }else{ const now = today.getHours() * 60 + today.getMinutes(); // Hora actual en minutos const intervals = storeHours.horario.split(",").map(interval => { const [openTime, closeTime] = interval.split(" - ").map(time => { let [hours, minutes, seconds] = time.split(":").map(Number); if(hours == 0){ hours = 24; } return hours * 60 + minutes; // Convertir a minutos }); return { openTime, closeTime }; }); let isOpen = false; let closingTime = null; intervals.forEach(interval => { if(interval.openTime == interval.closeTime){ isOpen = true; } //Si el horario es de 00:00 a 23:59 else if(interval.openTime === 1440 && interval.closeTime === 1439){ isOpen = true; closingTime = null; } else if (now >= interval.openTime && now <= interval.closeTime) { isOpen = true; closingTime = interval.closeTime; } }); if (isOpen) { if(closingTime){ const closingHours = Math.floor(closingTime / 60); const closingMinutes = closingTime % 60; return `AbiertoCierra a las ${closingHours}:${closingMinutes < 10 ? '0' : ''}${closingMinutes}`; }else{ return `${open24hText}`; } } else { const nextOpeningTime = intervals[0].openTime; const openingHours = Math.floor(nextOpeningTime / 60); const openingMinutes = nextOpeningTime % 60; return `CerradoAbre a las ${openingHours}:${openingMinutes < 10 ? '0' : ''}${openingMinutes}`; } } } else { return `No se encontró el horario para hoy.`; } } } function calculateDistance(lat1, lon1, lat2, lon2) { const R = 6371; // Radio de la Tierra en km const dLat = toRadians(lat2 - lat1); const dLon = toRadians(lon2 - lon1); const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2); const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); const distance = R * c; // Distancia en km return parseFloat(distance.toFixed(1)); // Redondear a un decimal y convertir a número } function toRadians(degrees) { return degrees * (Math.PI / 180); } async function showStoreDistance(markerInfo) { return new Promise((resolve) => { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function(position) { var userLat = position.coords.latitude; var userLon = position.coords.longitude; var storeLat = markerInfo.markerY; var storeLon = markerInfo.markerX; var distance = calculateDistance(userLat, userLon, storeLat, storeLon); var distanceString = `

A ${distance.toFixed(2).replace('.', ',')} km

`; resolve(distanceString); }, function(error) { // En caso de error, resolver con una cadena vacía resolve(""); } ); } else { // Si la geolocalización no es compatible, resolver con una cadena vacía resolve(""); } }); } async function getStoreDistanceString(markerInfo) { try { const messageShowStoreDistance = await showStoreDistance(markerInfo); return messageShowStoreDistance; } catch (error) { console.error("Error showStoreDistance getting store distance:", error); return error; } } function generateConnectorsHTML(connectors) { // Usar un Set para almacenar los tipos de conectores únicos const uniqueConnectors = new Set(); // Filtrar los conectores duplicados const filteredConnectors = connectors.filter(connector => { if (uniqueConnectors.has(connector.tipo)) { return false; } else { uniqueConnectors.add(connector.tipo); return true; } }); return filteredConnectors.map(connector => { const fallbackConnectors = [ { "text": "Tipo F", "image": "/content/dam/repsol-ecommerce/buscador-eess/img/filtros/charge 03.png", "name": "Conector tipo F (Schuko)" }, { "text": "Tipo 2 IEC6219-2", "image": "/content/dam/repsol-ecommerce/buscador-eess/img/filtros/charge 01.png", "name": "Conector tipo 2 (Mennekes)" }, { "text": "Manguera Yazaki (Tipo 1 SAE J1772)", "image": "/content/dam/repsol-ecommerce/buscador-eess/img/filtros/charge 5.png", "name": "Conector Yazaki" }, { "text": "CHAdeMO", "image": "/content/dam/repsol-ecommerce/buscador-eess/img/filtros/charge 04.png", "name": "Conector Chademo" }, { "text": "COMBO 2 IEC 62196-3 (EUR)", "image": "/content/dam/repsol-ecommerce/buscador-eess/img/filtros/conector-combo-2.jpg", "name": "Conector Combo 2 IEC 62196-3 (EUR)" }, { "text": "COMBO 2 IEC 62196-3 (Europeo)", "image": "/content/dam/repsol-ecommerce/buscador-eess/img/filtros/conector-combo-2.jpg", "name": "Conector Combo 2 IEC 62196-3 (Europeo)" }, { "text": "COMBO 2 IEC 62196-3", "image": "/content/dam/repsol-ecommerce/buscador-eess/img/filtros/charge 6.png", "name": "Conector Combo 2" } ]; if (window.ajaxResults && window.ajaxResults.filtersData) { const data = window.ajaxResults.filtersData.tipoRecarga.conector; const predefinedConnector = data.find(predef => { return predef.text === connector.tipo || predef.name === connector.tipo; }); if (predefinedConnector) { const fallbackConnector = fallbackConnectors.find(fallback => fallback.text === connector.tipo); const connectorName = predefinedConnector.name || (fallbackConnector ? fallbackConnector.name : connector.tipo); const connectorImage = predefinedConnector.image || (fallbackConnector ? fallbackConnector.image : ""); return `
${connectorImage ? `${connectorName}` : ''} ${connectorName}
`; } return ''; } }).join(''); } function showVisibleMarkers(map, markers) { $('.filters-cards').remove(); $('.cards-result').scrollTop(0); var bounds = map.getBounds(), count = 0, cardsNumber = 20; for (var i = 0; i < markers.length; i++) { var marker = markers[i]; if (bounds.contains(marker.getPosition()) === true) { if ($('.cards-result .filters-cards').length < cardsNumber) { var html = ""; var thisMarkerInfo = marker.markerInfo; if ($(".service-stations button[data-type='Estacion']").hasClass("active")) { html += ('
'); html += (''); html += (''); html += (''); if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") { html += (''); } html += ('Cómo llegar'); html += (` `); html += ('
'); $('.cards-result').append(html); } if ($(".service-stations button[data-type='Recarga']").hasClass("active")) { html += ('
'); html += (''); html += (''); html += (''); if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") { html += (''); } html += ('Cómo llegar'); html += (``); html += ('
'); $('.cards-result').append(html); } } count++; } } if ($(".service-stations button[data-type='Recarga']").hasClass('active')) { $(".num-result").find(".service-stations-result-number").text('0'); $(".num-result").find(".electric-charge-result-number").text(count); } else { $(".num-result").find(".service-stations-result-number").text(count); $(".num-result").find(".electric-charge-result-number").text('0'); } $('.service-stations button').on('click', function () { $(".num-result").find(".electric-charge-result-number").text('0'); $(".num-result").find(".service-stations-result-number").text('0'); }); $('.cards-result').on('scroll', function () { let div = $(this).get(0); if (div.scrollTop + div.clientHeight >= div.scrollHeight) { var blockSingleLength = $(".cards-result .block-single").length, blockSingleLengthScroll = $(".cards-result .block-single").length - 4, blockSingleHeight = $(".cards-result .block-single").outerHeight(), cardsResultHeight = blockSingleLengthScroll * blockSingleHeight; if ($(".cards-result").scrollTop() >= cardsResultHeight) { cardsNumber = blockSingleLength + 20; bounds = map.getBounds(); var boundCount = 0; for (var i = blockSingleLength; i < markers.length; i++) { var marker = markers[i]; if (bounds.contains(marker.getPosition()) === true) { if ($('.cards-result .filters-cards').length < cardsNumber && boundCount >= $('.cards-result .filters-cards').length) { var html = ""; var thisMarkerInfo = marker.markerInfo; if ($(".service-stations button[data-type='Estacion']").hasClass("active")) { html += ('
'); html += (''); html += (''); html += (''); if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") { html += (''); } html += ('Cómo llegar'); html += (``); html += ('
'); $('.cards-result').append(html); } else { html += ('
'); html += (''); html += (''); html += (''); if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") { html += (''); } html += ('Cómo llegar'); html += (` `); html += ('
'); $('.cards-result').append(html); } } boundCount++; } } setFilterCardsCoords(); } } }); pointClick = false; showMeClick = false; setFilterCardsCoords(); } function setFilterCardsCoords() { let filterCard = $('.cards-result .filters-cards'); $(filterCard).on('click', function() { const cardGPS = $(this).data('gps') setSessionStorageVariable('gps', cardGPS) setSessionStorageVariable('zoom', 13) myUSP.set('gps', cardGPS) history.replaceState(null, null, decodeURIComponent(myURL).toString()) }) } function setInfoWindowCardsCoords() { $('.marker-dialog').find('.icon-rp-Arrow_right').on('click', function() { const cardGPS = $(this).data('gps') setSessionStorageVariable('gps', cardGPS) setSessionStorageVariable('zoom', 13) myUSP.set('gps', cardGPS) history.replaceState(null, null, decodeURIComponent(myURL).toString()) }); } function showMap(lat, lng, radius, urlPath) { urlPath = $(".basePathToCall").val(); checkURLRechargeDataType(); Repsol.utils.setLoader(true, $('#map')); jQuery.ajax({ url: urlPath, type: 'post', dataType: "json", success: function (data) { var count = 0; $(".button-see").attr("disabled", false); locationsRechargeMap = data.recarga.items; locationsStationsMap = data.eess.items; if ($(".service-stations button[data-type='Recarga']").hasClass("active")) { count = data.recarga.count; $(".num-result").find(".service-stations-result-number").text("0"); $(".num-result").find(".electric-charge-result-number").text(count); locationsMap = data.recarga.items; } if($(".service-stations button[data-type='Estacion']").hasClass("active")) { count = data.eess.count; $(".num-result").find(".service-stations-result-number").text(count); $(".num-result").find(".electric-charge-result-number").text("0"); locationsMap = data.eess.items; } gpsURL = myUSP.get('gps'); if (myURL.search !== '' && gpsURL !== null) { var gps = gpsURL.split(','); lat = parseFloat(gps[0]); lng = parseFloat(gps[1]); zoom = Number(sessionStorage.getItem('zoom')); setSessionStorageVariable('zoom', zoom); latLng = { lat, lng }; initMapMap(lat, lng, zoom, locationsMap); } else { initMapMap(lat, lng, zoom, locationsMap); } $(".map-component .block-tooltip span").click(function () { $(this).parents(".block-tooltip").siblings(".modal").removeClass("fade").show(); return false; }); $(".map-component .close").click(function () { $(this).parents(".modal").addClass("fade").hide(); return false; }); $(".map-component .block-single .icon").click(function (e) { e.stopPropagation(); var lat = $(this).siblings(".cardLatitude").val(); var lng = $(this).siblings(".cardLongitude").val(); var latlng = new google.maps.LatLng(lat, lng); var geocoder = new google.maps.Geocoder(); eraseCookie("direccion", $(this).parents(".block-single").find(".mapdescription").text()); var buttonA = $(this); if (!communityList) { geocoder.geocode({ 'latLng': latlng }, (results, status) => { if (status === "OK") { if (results[0]) { Repsol.utils.setData("direct-json", results[0].address_components); buttonA.attr("href"); window.location.href = $(".detailPath").val() + "?lat=" + lat + "&lng=" + lng; } else { console.log("No results found"); } } }); communityList = true; return false; } }); }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log("Error: {}", errorThrown); closeCardsResult(); $(".button-see").attr("disabled", true); $('.filters-cards').remove(); if ($(".service-stations button[data-type='Recarga']").hasClass("active")) { $(".num-result").find(".service-stations-result-number").text("0"); locationsMap = 0; } else { $(".num-result").find(".electric-charge-result-number").text("0"); locationsMap = 0; } initMapMap(lat, lng, radius); }, complete: function () { Repsol.utils.setLoader(false, $('#map')); } }); } function getSelectedCountries() { let selectedCountries = []; // Seleccionar los checkboxes dentro del contenedor .filters-country $('.filters-country .dropdown-checkbox:checked').each(function() { // Obtener el nombre del país correspondiente al checkbox seleccionado let countryName = $(this).siblings('.dropdown-name').text(); selectedCountries.push(countryName); }); return selectedCountries; } function updateMapWithFilters(lat, lng, radius, urlPathName) { var urlPathName; changeStationTypeFromSessionStorage() if ($(".service-stations button[data-type='Recarga']").hasClass("active")) { urlPathName = $(".electricChargeServicePathToCall").val(); setFiltersRowRechargeURL(); } else { urlPathName = $(".sseeServicePathToCall").val(); setFiltersRowURL(); } if (($(".rp-dropdown-filter-products").css("display") === "block" || $(".rp-dropdown-filter-services").css("display") === "block" || $(".rp-dropdown-filter-promotions").css("display") === "block" || $(".rp-dropdown-filter-cards").css("display") === "block") && $(".advanced-search-container").css("display") === "block") { let selectedCountries = getSelectedCountries(); console.log('Países seleccionados: sseeServicePathToCall', selectedCountries); if (selectedCountries.includes('España') && selectedCountries.includes('Portugal')) { urlPathName = $(".sseeServicePathToCall").val(); console.log('Ambos países seleccionados. URL Path Name:', urlPathName); } else if (selectedCountries.includes('España')) { urlPathName = $(".sseeServicePathToCallEsp").val(); console.log('España seleccionada. URL Path Name:', urlPathName); } else if (selectedCountries.includes('Portugal')) { urlPathName = $(".sseeServicePathToCallPort").val(); console.log('Portugal seleccionada. URL Path Name:', urlPathName); } else { urlPathName = $(".sseeServicePathToCall").val(); console.log('Ningún país seleccionado. URL Path Name:', urlPathName); } } if ($(".dropdown-filter-recharge").css("display") === "block" && $(".advanced-search-container").css("display") === "block") { let selectedCountries = getSelectedCountries(); console.log('Países seleccionados electricChargeServicePathToCall:', selectedCountries); if (selectedCountries.includes('España') && selectedCountries.includes('Portugal')) { urlPathName = $(".electricChargeServicePathToCall").val(); console.log('Ambos países seleccionados. URL Path Name:', urlPathName); } else if (selectedCountries.includes('España')) { urlPathName = $(".electricChargeServicePathToCallEsp").val(); console.log('España seleccionada. URL Path Name:', urlPathName); } else if (selectedCountries.includes('Portugal')) { urlPathName = $(".electricChargeServicePathToCallPort").val(); console.log('Portugal seleccionada. URL Path Name:', urlPathName); } else { urlPathName = $(".electricChargeServicePathToCall").val(); console.log('Ningún país seleccionado. URL Path Name:', urlPathName); } } var productsURL = myUSP.get('productos'); var servicesURL = myUSP.get('servicios'); var promotionsURL = myUSP.get('promociones'); var cardsURL = myUSP.get('tarjetas'); var speedURL = myUSP.get('velocidad'); var connectorURL = myUSP.get('conector'); var typeURL = myUSP.get('tipo'); if(myURL.search !== '') { if(productsURL !== null) { productsURL = encodeURIComponent(productsURL); stringProducts = `&productos=${productsURL}`; urlPathName = urlPathName + stringProducts; } if(servicesURL !== null) { servicesURL = decodeURIComponent(servicesURL); servicesURL = servicesURL.replace(/[&]/g, '%26').replace(/ /g, '%20'); stringServices = `&servicios=${servicesURL}`; urlPathName = urlPathName + stringServices; } if(promotionsURL !== null) { promotionsURL = encodeURIComponent(promotionsURL); stringPromotions = `&promociones=${promotionsURL}`; urlPathName = urlPathName + stringPromotions; } if(cardsURL !== null) { cardsURL = encodeURIComponent(cardsURL); stringCards = `&tarjetas=${cardsURL}`; urlPathName = urlPathName + stringCards; } if(speedURL !== null) { speedURL = encodeURIComponent(speedURL); stringSpeed = `&velocidad=${speedURL}`; urlPathName = urlPathName + stringSpeed; } if(connectorURL !== null) { connectorURL = encodeURIComponent(connectorURL); stringConnector = `&conector=${connectorURL}`; urlPathName = urlPathName + stringConnector; } } if(myURL.search !== '' && typeURL !== null) { if(productsURL == null && servicesURL == null && promotionsURL == null && cardsURL == null && speedURL == null && connectorURL == null) { myURL.search = ''; history.replaceState(null, null, myURL + myURL.search); } } if(productsURL == null && servicesURL == null && promotionsURL == null && cardsURL == null && speedURL == null && connectorURL == null) { if ($(".service-stations button[data-type='Estacion']").hasClass("active")) { sessionStorage.setItem('stationFullyLoaded', true) } else { sessionStorage.setItem('rechargeFullyLoaded', true) } } else { if ($(".service-stations button[data-type='Estacion']").hasClass("active")) { sessionStorage.setItem('stationFullyLoaded', false) } else { sessionStorage.setItem('rechargeFullyLoaded', false) } } Repsol.utils.setLoader(true, $('#map')); jQuery.ajax({ url: urlPathName, type: 'post', dataType: "json", success: function (data) { var count = 0; $(".button-see").attr("disabled", false); if ($(".service-stations button[data-type='Recarga']").hasClass("active")) { count = data.recarga.count; $(".num-result").find(".service-stations-result-number").text("0"); $(".num-result").find(".electric-charge-result-number").text(count); locationsMap = data.recarga.items; locationsRechargeMap = data.recarga.items; } if($(".service-stations button[data-type='Estacion']").hasClass("active")) { count = data.eess.count; $(".num-result").find(".service-stations-result-number").text(count); $(".num-result").find(".electric-charge-result-number").text("0"); locationsMap = data.eess.items; locationsStationsMap = data.eess.items; } gpsURL = myUSP.get('gps'); if (myURL.search !== '' && gpsURL !== null) { var gps = gpsURL.split(','); lat = parseFloat(gps[0]); lng = parseFloat(gps[1]); zoom = Number(sessionStorage.getItem('zoom')); setSessionStorageVariable('zoom', zoom); latLng = { lat, lng }; initMapMap(lat, lng, zoom, locationsMap); } else { initMapMap(lat, lng, zoom, locationsMap); } $(".map-component .block-tooltip span").click(function () { $(this).parents(".block-tooltip").siblings(".modal").removeClass("fade").show(); return false; }); $(".map-component .close").click(function () { $(this).parents(".modal").addClass("fade").hide(); return false; }); $(".map-component .block-single .icon").click(function (e) { e.stopPropagation(); var lat = $(this).siblings(".cardLatitude").val(); var lng = $(this).siblings(".cardLongitude").val(); var latlng = new google.maps.LatLng(lat, lng); var geocoder = new google.maps.Geocoder(); eraseCookie("direccion", $(this).parents(".block-single").find(".mapdescription").text()); var buttonA = $(this); if (!communityList) { geocoder.geocode({ 'latLng': latlng }, (results, status) => { if (status === "OK") { if (results[0]) { Repsol.utils.setData("direct-json", results[0].address_components); buttonA.attr("href"); window.location.href = $(".detailPath").val() + "?lat=" + lat + "&lng=" + lng; } else { console.log("No results found"); } } }); communityList = true; return false; } }); }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log("Error: {}", errorThrown); closeCardsResult(); $(".button-see").attr("disabled", true); $('.filters-cards').remove(); if ($(".service-stations button[data-type='Recarga']").hasClass("active")) { $(".num-result").find(".service-stations-result-number").text("0"); locationsMap = 0; } else { $(".num-result").find(".electric-charge-result-number").text("0"); locationsMap = 0; } initMapMap(lat, lng, radius); }, complete: function () { Repsol.utils.setLoader(false, $('#map')); } }); } var communityList = false; function initService() { $(".suggestTxtMap").keyup(function (e) { selectionListMap = false; $(".searched").next(".error").hide(); const displaySuggestions = function (predictions, status) { if (status != google.maps.places.PlacesServiceStatus.OK || !predictions) { return; } $('#resultsMap li').remove(); var html = ""; predictions.forEach((prediction) => { html = ""; html += '
  • '; html += prediction.description; html += '
  • '; $('#resultsMap').append(html).show(); }); $('.result-item').each(function () { $(this).on('click', function () { address = $(this).data('value'); var itemDescription = $(this).text(); $('.suggestTxtMap').val(itemDescription); $('.suggestTxtMap').attr('data-place_id', address); $('.suggestTxtMap').focus(); Repsol.utils.setLoader(true, $('#map')); searchFromText(itemDescription, $(this)) setSessionStorageVariable('zoom', 13); }); }); }; function autocompleteSuggestions() { let autocomplete = new google.maps.places.AutocompleteService(); autocomplete.getPlacePredictions({ input: $(".suggestTxtMap").val(), componentRestrictions: { country: ['es', 'pt'], }, }, displaySuggestions); } if (e.keyCode == 8) { if ($(this).val().length == 0) { $('#resultsMap').slideUp(); if(sessionStorage.getItem('placeName')) { sessionStorage.removeItem('placeName'); } if(sessionStorage.getItem('gps')) { sessionStorage.removeItem('gps'); } if(myUSP.get('gps')) { myUSP.delete('gps'); history.replaceState(null, null, decodeURIComponent(myURL).toString()); } } else { autocompleteSuggestions() } } if( e.keyCode != 13 && e.keyCode != 8) { autocompleteSuggestions() } if (e.keyCode == 13 && $(this).val().length > 0) { $('#resultsMap li').remove(); $('#resultsMap').slideUp(); $('#resultsMap').hide(); address = $('.suggestTxtMap').val(); Repsol.utils.setLoader(true, $('#map')); searchFromText(address) setSessionStorageVariable('zoom', 13); } if($(this).val().length > 0) { $('.buttonSearch').prop('disabled', false) } }); $(".buttonSearch").click(function (e) { address = $('.suggestTxtMap').val(); $('#resultsMap').slideUp(); $('#resultsMap li').remove(); Repsol.utils.setLoader(true, $('#map')); searchFromText(address); setSessionStorageVariable('zoom', 13); EESSSearch.dataLayer.sendData($(this), ""); const params = { component_description: 'buscador eess', filter_interaction: 'search', filter_search_term: address, } Repsol.AnalyticsRomProd.filterRomProd($(this), params); }); $('.map-form').submit(function (e) { e.preventDefault(); EESSSearch.dataLayer.sendData($(this), ""); }); } function setAutoCompleteHash(itemId) { var request = { placeId: itemId, } var service = new google.maps.places.PlacesService(map); service.getDetails(request, setPlaceHash); function setPlaceHash(place, status) { if (status !== google.maps.places.PlacesServiceStatus.OK) { return } if (place.geometry) { placeLAT = place.geometry.location.lat(); placeLNG = place.geometry.location.lng(); placeLocation = `${placeLAT},${placeLNG}`; if(placeLocation.length) { myUSP.set('gps', placeLocation); history.replaceState(null, null, decodeURIComponent(myURL).toString()); setSessionStorageVariable('gps', placeLocation); setSessionStorageVariable('zoom', 13); } $('.suggestTxtMap').attr('data-location', placeLocation); $(document).trigger("set-gps"); } } } var selectionListMap = false; function geocodePlace(address) { var geocoder = new google.maps.Geocoder(); selectionListMap = true; geocoder.geocode({ address: address }, (results, status) => { if (status === "OK") { if (results[0]) { window.setTimeout(() => { map.setZoom(13); map.setCenter(results[0].geometry.location); }, 300); } else { console.log("No results found"); } } else { console.log("Geocoder failed due to: " + status); } }); } var searchActiveMap = false; function searchItemMap(lat, lng, urlPathName) { var urlPathName; if ($(".service-stations button[data-type='Recarga']").hasClass("active")) { urlPathName = $(".sseeServicePathToCall").val(); } else { urlPathName = $(".electricChargeServicePathToCall").val(); } jQuery.ajax({ url: urlPathName, type: 'post', dataType: "json", success: function (data) { if (data.length > 0) { searchActiveMap = true; } else { searchActiveMap = false; $("#resultsMap").hide(); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log("Error: {}", errorThrown); } }); } function handleAdvancedSearchClick() { $(this).toggleClass('active'); if ($(this).hasClass('active')) { // Mostrar los elementos $('.map-filters').css('pointer-events', 'all'); $('.advanced-search-container').css('display', 'block'); $('.advanced-search-container').css('pointer-events', 'all'); if (window.innerWidth <= 1150) { $('.map-content').css('background-color', '#00000080'); $('.map-filters').css('opacity', '0.2'); $('.default-filters').css('opacity', '0.2'); $('.apply-filters').removeClass('d-none'); } else { $('.map-content').css('background-color', ''); $('.map-filters').css('opacity', ''); $('.default-filters').css('opacity', ''); $('.apply-filters').addClass('d-none'); } } else { // Ocultar los elementos hideAdvancedSearch(); } } function checkWindowSize() { let desktopThreshold = 1150; let windowWidth = window.innerWidth; if (windowWidth >= desktopThreshold) { $('.map-content').css('background-color', ''); $('.map-filters').css('opacity', ''); $('.default-filters').css('opacity', ''); $('.apply-filters').addClass('d-none'); if($(".advanced-search-container").hasClass("is-visible")){ $(".advanced-search-container").css("display", "none"); $(".advanced-search-container").removeClass("is-visible"); hideOpenAdvancedSearchBttn(); } }else if(windowWidth < desktopThreshold){ if($(".advanced-search-container").hasClass("is-visible")){ $(".advanced-search-container").removeClass("is-visible"); $(".advanced-search-container").css("display", "none"); let filteredDivs = $('.advanced-search-container-filters') .find('div.rp-dropdown, div.rp-dropdown--checkbox, div.dropdown, div.mode-select') .not('.dropdown-filter-recharge'); filteredDivs.css('display', 'block'); } hideOpenAdvancedSearchBttn(); $('.map-content').css('background-color', ''); $('.map-filters').css('opacity', ''); $('.default-filters').css('opacity', ''); $('.apply-filters').removeClass('d-none'); } } function initializeAdvancedSearch() { // Inicializar el estado de los elementos según el estado del botón $('.map-filters').css('pointer-events', 'all'); if ($('.js-open-advanced-search').hasClass('active')) { showAdvancedSearch(); } else { hideAdvancedSearch(); hideOpenAdvancedSearchBttn(); } } function showAdvancedSearch() { $('.advanced-search-container').css('display', 'block'); $('.advanced-search-container').css('pointer-events', 'all'); if (window.innerWidth <= 1150) { $('.map-content').css('background-color', '#00000080'); $('.map-filters').css('opacity', '0.2'); $('.default-filters').css('opacity', '0.2'); $('.apply-filters').removeClass('d-none'); } else { $('.map-content').css('background-color', ''); $('.map-filters').css('opacity', ''); $('.default-filters').css('opacity', ''); $('.apply-filters').addClass('d-none'); } $('.map-filters').css('pointer-events', 'all'); showOpenAdvancedSearchBttn(); } function showOpenAdvancedSearchBttn() { if (window.innerWidth > 1150) { $(".js-open-advanced-search").addClass("active"); } } function hideOpenAdvancedSearchBttn() { if ($(".js-open-advanced-search").hasClass("active")) { $(".js-open-advanced-search").removeClass("active"); } } function hideAdvancedSearch() { $('.map-filters').css('pointer-events', 'all'); $('.advanced-search-container').css('display', 'none'); $('.map-content').css('background', 'none'); $('.map-filters').css('opacity', '1'); $('.default-filters').css('opacity', '1'); $('.apply-filters').addClass('d-none'); let allDivs = $('.advanced-search-container-filters') .find('div.rp-dropdown, div.rp-dropdown--checkbox, div.dropdown, div.mode-select, div.rp-dropdown-filter-products') .not('.dropdown-filter-recharge'); allDivs.css('display', 'block'); let buttons = allDivs.find('button.dropdown-toggle-custom'); buttons.css('display', 'flex'); hideOpenAdvancedSearchBttn(); } function hideBlockListMap() { $('.block-list-map').css('overflow', 'hidden'); $('.block-list-map').css('height', '80px'); } function handleDefaultFilterListClick() { $(document).on('click', '.default-filter-list', function () { event.preventDefault(); $(this).toggleClass('active'); $(this).find('.icon-rp').toggleClass('icon-rp-Check'); }); } function toggleAdvancedSearch() { closeCardsResult(); if ($('.js-open-advanced-search').hasClass('active')) { $('.js-open-advanced-search').removeClass('active'); hideAdvancedSearch(); $('.map-filters').css('pointer-events', 'all'); } else { showAdvancedSearch(); $('.map-filters').css('pointer-events', 'all'); $('.js-open-advanced-search').addClass('active'); } closeCardsResult(); } function closeCardsResult(){ $(".button-see").removeClass("active"); const blockListHeaderHeight = $(".cards-result--header").innerHeight(); if(window.innerWidth > 1150){ $(".cards-result").animate({ height: "0" }, 0); $(".cards-result").css('padding-bottom', '0'); $(".block-list").css("overflow", "hidden").animate({ height: blockListHeaderHeight }, 0); }else{ $(".block-list").css("overflow", "hidden").animate({ height: "0" }, 0); } } function openCardsResult(){ $(".button-see").addClass("active"); $(".cards-result").animate({ height: "100%" }, 0); if (window.innerWidth > 1150) { $(".cards-result").css('padding-bottom', '4rem'); $(".block-list").css("overflow", "visible").animate({ height: "100%" }, 0); } else { $(".block-list").css("overflow", "hidden").animate({ height: "100%" }, 0); } } function getActiveFiltersData() { var activeFiltersData = []; $('.default-filter-list.active .default-filter-text').each(function () { var dataId = $(this).attr('data-id'); var spanText = $(this).find('.default-filter-icon').text(); activeFiltersData.push({ dataId: dataId, spanText: spanText }); }); return activeFiltersData; } function getActiveFiltersAndCombine(activeFilters) { // Convertir activeFilters a un arreglo de ids let activeFilterIds = activeFilters.map(filter => filter.dataId); let combinedString = Array.from(activeFilterIds).join(','); let urlParams = combinedString; return urlParams; } function updateURLWithFilters(idFilter) { let activeFilters = getActiveFiltersData(); let currentUrl = window.location.href; // Crear un objeto URL para facilitar la manipulación let url = new URL(currentUrl); // Reconstruir la URL con los valores especificados let urlWithoutParams = `${url.protocol}//${url.hostname}`; if (url.port) { urlWithoutParams += `:${url.port}`; } urlWithoutParams += url.pathname; // Obtener los parámetros de la URL let params = new URLSearchParams(url.search); // Inicializar variables para cada query parameter let servicios = ""; let productos = ""; let promociones = ""; let tarjetas = ""; // Asignar valores a las variables si existen en la URL if (params.has('servicios')) { servicios = params.get('servicios'); } if (params.has('productos')) { productos = params.get('productos'); } if (params.has('promociones')) { promociones = params.get('promociones'); } if (params.has('tarjetas')) { tarjetas = params.get('tarjetas'); } // Obtener los IDs y sus categorías de activeFilters let activeFilterIdsAndCategories = activeFilters.map(filter => { return { id: filter.dataId, category: findParentCategoryById(filter.dataId) }; }); // Eliminar duplicados let uniqueActiveFilters = Array.from(new Set(activeFilterIdsAndCategories.map(a => a.id))) .map(id => { return activeFilterIdsAndCategories.find(a => a.id === id); }); // Combinar los IDs de activeFilters con los IDs de la URL let combinedFilters = { servicios: new Set(servicios ? servicios.split(',') : []), productos: new Set(productos ? productos.split(',') : []), promociones: new Set(promociones ? promociones.split(',') : []), tarjetas: new Set(tarjetas ? tarjetas.split(',') : []) }; uniqueActiveFilters.forEach(filter => { if (filter.category === 'servicios') { combinedFilters.servicios.add(filter.id); } else if (filter.category === 'productos') { combinedFilters.productos.add(filter.id); } else if (filter.category === 'promociones') { combinedFilters.promociones.add(filter.id); } else if (filter.category === 'tarjetas') { combinedFilters.tarjetas.add(filter.id); } }); // Buscar y remover el elemento idFilter si se encuentra for (let key in combinedFilters) { if (combinedFilters[key].has(idFilter)) { combinedFilters[key].delete(idFilter); } } // Crear la cadena final concatenando los parámetros restantes let cadenaFinal = ''; for (let key in combinedFilters) { if (combinedFilters[key].size > 0) { if (cadenaFinal !== '') { cadenaFinal += '&'; } cadenaFinal += `${key}=${Array.from(combinedFilters[key]).join(',')}`; } } let newUrl = urlWithoutParams; myURL.search = ""; if (cadenaFinal) { newUrl += '?' + cadenaFinal; myURL.search = '?' + cadenaFinal; } window.history.replaceState({ path: newUrl }, '', newUrl); } function handleFilterClick(event) { let hrefAttr = $(this).children().attr('href'); const targetAttr = $(this).children().attr('target'); const currentDomain = window.location.origin; if (isAuthorMode()) { console.log('Estamos en modo autor'); } else { if (hrefAttr.includes('/content')) { hrefAttr = hrefAttr.replace('/content', ''); } if (hrefAttr.includes('/repsol-ecommerce')) { hrefAttr = hrefAttr.replace('/repsol-ecommerce', ''); } if (hrefAttr.includes('/es')) { hrefAttr = hrefAttr.replace('/es', ''); } if (hrefAttr.includes('/en')) { hrefAttr = hrefAttr.replace('/en', ''); } $(this).children().attr('href', hrefAttr); window.location.href = hrefAttr; } if (targetAttr == '_self') { event.preventDefault(); if ($(this).length > 0) { $(this).toggleClass('active'); $(this).find('.icon-rp').toggleClass('icon-rp-Check'); } let idFilter = ""; if (!$(this).hasClass('active')) { idFilter = $(this).find('.default-filter-text').attr('data-id'); } updateURLWithFilters(idFilter); updateMapWithFilters(); setMapFiltersClick(); let idFilterStr = event.target.dataset.id; if(idFilterStr){ marcarCheckboxPorId(idFilterStr); setSelectedFiltersLength(); } $('.map-filters').css('pointer-events', 'all'); } } function marcarCheckboxPorId(id) { // Seleccionar todos los dropdowns const dropdowns = [ document.getElementById('filter-products'), document.getElementById('filter-services'), document.getElementById('filter-promotions'), document.getElementById('filter-cards'), document.getElementById('filter-recharge') ]; // Iterar sobre cada dropdown dropdowns.forEach(dropdown => { if (dropdown) { // Buscar el checkbox con el ID especificado const checkbox = dropdown.querySelector(`input[data-id="${id}"]`); if (checkbox) { const span = checkbox.nextElementSibling; if (checkbox.checked) { checkbox.checked = false; if($('.advanced-search-btn .icon-rp-Filter').hasClass('notification')) { $('.advanced-search-btn .icon-rp-Filter').removeClass('notification'); } if (span) { span.classList.remove('checked'); } } else { checkbox.checked = true; if( !$('.advanced-search-btn .icon-rp-Filter').hasClass('notification')) { $('.advanced-search-btn .icon-rp-Filter').addClass('notification'); } if (span) { span.classList.add('checked'); } } } } }); } function isAuthorMode() { return typeof Granite !== 'undefined' && typeof Granite.author !== 'undefined'; } function toggleDropdownsAdvSearchBtnStation() { // Seleccionar todos los divs con las clases especificadas dentro del contenedor .advanced-search-container-filters var filteredDivs = $('.advanced-search-container-filters') .find('div.rp-dropdown, div.rp-dropdown--checkbox, div.dropdown, div.mode-select') .not('.dropdown-filter-recharge'); // Validar si el div con la clase .advanced-search-container contiene la clase is-visible if ($('.advanced-search-container').hasClass('is-visible')) { if ($('.dropdown-filter-recharge').css('display') === 'block') { $('.dropdown-filter-recharge').css('display', 'none'); // Establecer el display de los elementos encontrados a block filteredDivs.css('display', 'block'); } else { $('.advanced-search-container').removeClass('is-visible') } // Asegurarse de que el elemento con la clase .dropdown-filter-recharge siempre esté en display: none $('.dropdown-filter-recharge').css('display', 'none'); } } function toggleDropdownsAdvSearchBtnRecharge() { var filteredDivs = $('.advanced-search-container-filters') .find('div.rp-dropdown, div.rp-dropdown--checkbox, div.dropdown, div.mode-select') .not('.dropdown-filter-recharge'); // Seleccionar todos los divs con las clases especificadas dentro del contenedor .advanced-search-container-filters var specificDivs = $('.advanced-search-container-filters') .find('div.dropdown-filter-recharge.rp-dropdown, div.dropdown-filter-recharge.rp-dropdown--checkbox, div.dropdown-filter-recharge.dropdown, div.dropdown-filter-recharge.mode-select'); // Validar si el div con la clase .advanced-search-container contiene la clase is-visible if ($('.advanced-search-container').hasClass('is-visible')) { if (filteredDivs.css('display') === 'block') { // Establecer el display de los elementos encontrados a block specificDivs.css('display', 'block'); } else { $('.advanced-search-container').removeClass('is-visible') } // Asegurarse de que el elemento con la clase .dropdown-filter-recharge siempre esté en display: none filteredDivs.css('display', 'none'); } } function openDisplayRecaElectric() { let allDivs = $('.advanced-search-container-filters') .find('div.rp-dropdown, div.rp-dropdown--checkbox, div.dropdown, div.mode-select, div.rp-dropdown-filter-products') .not('.dropdown-filter-recharge'); allDivs.css('display', 'none'); $('.dropdown-filter-recharge').css('display', 'block'); } function openDisplayEstServ() { if (window.innerWidth <= 1150) { let allDivs = $('.advanced-search-container-filters') .find('div.rp-dropdown, div.rp-dropdown--checkbox, div.dropdown, div.mode-select, div.rp-dropdown-filter-products') .not('.dropdown-filter-recharge'); let buttons = allDivs.find('button.dropdown-toggle-custom'); // Filtrar los elementos que también tienen la clase 'is-active' let activeDivs = allDivs.filter(function() { return $(this).hasClass('is-active'); }); // Verificar si hay algún elemento con la clase 'is-active' if (activeDivs.length > 0) { allDivs.css('display', 'none'); allDivs.filter('.is-active').css('display', 'block'); } else { allDivs.css('display', 'block'); buttons.css('display', 'flex'); $('.advanced-search-container').find('.apply-filters').css('display', 'block'); } $('.dropdown-filter-recharge').css('display', 'none'); } } function initializeModal() { var modal = document.getElementById("modalGeoAccess"); var modalContent = document.querySelector("#modalGeoAccess .modal-content"); var allowLocationBtn = document.getElementById("allowLocationBtn"); var denyLocationBtn = document.getElementById("denyLocationBtn"); var map = document.getElementById("map"); var errorMessage = document.getElementById("geoErrorMessageModal"); // Verificar la configuración guardada var geoAccess = localStorage.getItem("geoAccess"); denyLocationBtn.onclick = function() { modal.style.display = "none"; localStorage.setItem("geoAccess", "denied"); } allowLocationBtn.onclick = function() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition, showError); } else { errorMessage.textContent = "La geolocalización no es compatible con este navegador."; } } window.onclick = function(event) { localStorage.setItem("geoAccess", "denied"); if (event.target.matches('.map-zoom-control .icon-rp-place')) { $(".map-component .default-filters").css("z-index", "1"); }else if (!event.target.matches('#modalGeoAccess') && !event.target.matches('.map-zoom-control .icon-rp-place')){ $(".map-component .default-filters").css("z-index", "3"); modal.style.display = "none"; } } modal.onclick = function(event) { if (event.target == modal && !modalContent.contains(event.target)) { modal.style.display = "none"; localStorage.setItem("geoAccess", "denied"); $(".map-component .default-filters").css("z-index", "3"); } } function showPosition(position) { modal.style.display = "none"; //map.style.display = "block"; localStorage.setItem("geoAccess", "allowed"); var lat = position.coords.latitude; var lon = position.coords.longitude; var mapOptions = { center: new google.maps.LatLng(lat, lon), zoom: 15, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("map"), mapOptions); } function showError(error) { switch(error.code) { case error.PERMISSION_DENIED: errorMessage.textContent = "El usuario denegó la solicitud de geolocalización. Por favor, habilítela en la configuración de su navegador."; localStorage.setItem("geoAccess", "denied"); break; case error.POSITION_UNAVAILABLE: errorMessage.textContent = "La información de ubicación no está disponible."; break; case error.TIMEOUT: errorMessage.textContent = "La solicitud para obtener la ubicación del usuario ha caducado."; break; case error.UNKNOWN_ERROR: errorMessage.textContent = "Ocurrió un error desconocido."; break; } } function requestGeolocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function(position) { modal.style.display = "none"; map.style.display = "block"; var userLat = position.coords.latitude; var userLon = position.coords.longitude; var storeLat = 40.99221111; // Latitud de la tienda var storeLon = -8.63026111; // Longitud de la tienda var distance = calculateDistance(userLat, userLon, storeLat, storeLon); var distanceString = `You are ${distance.toFixed(2)} km away from the store.`; console.log(distanceString); document.getElementById("distanceMessage").innerHTML = distanceString; }, function(error) { showError(error); } ); } else { errorMessage.textContent = "La geolocalización no es compatible con este navegador."; } } } function initializeClickDetection() { $('#map.block-map').on('click', '.icon-rp-place', function() { if (!checkGeolocationStatus()) { var modal = document.getElementById("modalGeoAccess"); modal.style.display = "block"; $(".map-component .default-filters").css("z-index", "1"); } }); } function checkGeolocationStatus() { var modal = document.getElementById("modalGeoAccess"); var errorMessage = document.getElementById("geoErrorMessageModal"); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function(position) { return true; }, function(error) { if (error.code === error.PERMISSION_DENIED) { errorMessage.textContent = "Permiso de geolocalización denegado. Por favor, habilítelo en la configuración de su navegador."; modal.style.display = "block"; } else { errorMessage.textContent = "La geolocalización no está disponible."; modal.style.display = "block"; } return false; } ); } else { errorMessage.textContent = "La geolocalización no es compatible con este navegador."; modal.style.display = "block"; return false; } } function findParentCategoryById(id) { const data = window.ajaxResults.filtersData; function searchInArray(array, id) { return array.find(item => item.id === id); } if (searchInArray(data.productos, id)) { return 'productos'; } for (const servicio of data.servicios) { if (servicio.id === id) { return 'servicios'; } if (searchInArray(servicio.servicios, id)) { return 'servicios'; } } if (searchInArray(data.promociones, id)) { return 'promociones'; } if (searchInArray(data.tarjetas, id)) { return 'tarjetas'; } return 'ID no encontrado'; } $(document).ready(function () { setContributedParams(); removeGPSParams(); callAjaxFilters(); initService(); checkEntityTypeAndActiveButton(entityTypeObj); updateMapWithFilters(); initializeAdvancedSearch(); // Asignar el evento de clic para llamar a la función toggleAdvancedSearch $('.js-open-advanced-search').on('click', function() { toggleAdvancedSearch();}); // Asignar el evento de clic al botón .btn-station para llamar a la función toggleDropdowns $('.btn-station').on('click', function() { toggleDropdownsAdvSearchBtnStation(); }); $('.btn-recharge').on('click', function() { toggleDropdownsAdvSearchBtnRecharge(); }); $(".js-close-advanced-search").click(hideAdvancedSearch); $(".btn-station").click(hideBlockListMap); $(".btn-recharge").click(hideBlockListMap); $(".rp-dropdown-filter-products .dropdown-toggle-custom").click(openDisplayEstServ); $(".rp-dropdown-filter-services .dropdown-toggle-custom").click(openDisplayEstServ); $(".rp-dropdown-filter-promotions .dropdown-toggle-custom").click(openDisplayEstServ); $(".rp-dropdown-filter-cards .dropdown-toggle-custom").click(openDisplayEstServ); $('.dropdown-cta-save').on('click', function() { $(this).parents().closest('.dropdown').removeClass('is-active'); setFiltersParamsToURL(); updateURLWithFilters(""); updateMapWithFilters(); setMapFiltersClick(); $('.map-filters').css('pointer-events', 'all'); openDisplayEstServ(); }); $('.save-filters-recharge').on('click', function() { setFiltersParamsToURL(); updateMapWithFilters(); setMapFiltersClick(); $('.map-filters').css('pointer-events', 'all'); openDisplayRecaElectric(); }); $('.apply-filters').click(function() { updateURLWithFilters(""); updateMapWithFilters(); setMapFiltersClick(); hideAdvancedSearch(); }); $('.filters-country .dropdown-checkbox-esp').click(function() { updateURLWithFilters(""); updateMapWithFilters(); setMapFiltersClick(); $('.map-filters').css('pointer-events', 'all'); hideAdvancedSearch(); }); $('.filters-country .dropdown-checkbox-port').click(function() { updateURLWithFilters(""); updateMapWithFilters(); setMapFiltersClick(); $('.map-filters').css('pointer-events', 'all'); hideAdvancedSearch(); }); $(".default-filter-list").click(handleFilterClick); $(window).resize(function() { checkWindowSize(); }); initializeModal(); initializeClickDetection(); $("body").click(function () { $("#resultsMap").hide(); }); $(".buttonSearch").click(function (e) { Repsol.Analytics.clickBtn($(this)); Repsol.AnalyticsRomProd.linkClickRomProd($(this), {}); $(this).parents(".search").next(".error").hide(); e.preventDefault(); if ($("#latResult").val() != "" && $("#lngResult").val() != "") { eraseCookie("direccion", $("#suggestTxtMap").val()); Repsol.utils.setData("matcher_way", "long"); RepsolSolmatch.AnalyticsSolmatch.clickFunnelMatcher($(this)); var params = { event_detail: "long", field_name_1: undefined, field_name_2: undefined, establishment_category: undefined, establishment_raiting: undefined, establishment_state: undefined }; Repsol.AnalyticsRomProd.funnelRomProd($(this), params); } return false; }); $(".button-see").click(function () { if ($(".button-see").hasClass("active")) { closeCardsResult(); }else{ openCardsResult(); } EESSSearch.dataLayer.sendData( $(this), "menu list"); const params= { component_description: 'buscador eess', element_description: 'open eess cards', element_type: 'button', link_text: 'open detail', is_establishment_filter: true, establishment_type : EESSSearch.getTypeText($(this)) } Repsol.AnalyticsRomProd.clickInteractionRomProd($(this), params); }); $(window).resize(function () { closeCardsResult(); }) $(".button-see-close").click(function () { closeCardsResult(); }); $(".service-stations button").on("click", function () { if ($(this).data("type") == "Estacion") { $(".service-stations button").removeClass("active"); $(this).addClass("active"); $(".service-stations-result").addClass("active"); $(".service-stations-result-number").addClass("active"); $(".electric-charge-result-number").removeClass("active"); setSessionStorageVariable('serviceType', 'station'); locationsMap = locationsStationsMap googleImagesIcon = stationIconPath } else { $(this).addClass("active"); $(".service-stations button").removeClass("active"); $(this).addClass("active"); $(".electric-charge-result-number").addClass("active"); $(".service-stations-result").removeClass("active"); $(".service-stations-result-number").removeClass("active"); locationsMap = locationsRechargeMap setSessionStorageVariable('serviceType', 'recharge'); googleImagesIcon = rechargeIconPath } clearAllFiltersParamsURL(); lat = 34.8141026; lng = -8.0851802; zoom = 5 clearSelectedFiltersLength() if(sessionStorage.getItem('stationFullyLoaded') == 'true' && sessionStorage.getItem('rechargeFullyLoaded') == 'true') { initMapMap(lat, lng, zoom, locationsMap) } else { updateMapWithFilters() } centerMap(); closeCardsResult(); hideAdvancedSearch(); EESSSearch.dataLayer.sendData( $(this), "button"); const params = { component_description: 'buscador eess', field_name_1: 'Tipo de estación', selected_option_1: $(this).text().trim(), filter_interaction : 'select' } Repsol.AnalyticsRomProd.filterRomProd($(this), params); }) $(".center-location-btn").on("click", function () { checkGeolocationStatus(); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); map.setCenter(latlng); map.setZoom(13); setSessionStorageVariable('zoom', 13); origin = `${position.coords.latitude},${position.coords.longitude}`; setCenterLocation(origin); }); } else { secondChild.style['background-position'] = '0 0'; } EESSSearch.dataLayer.sendData($(this), "location"); const params= { component_description: 'buscador eess', element_description: 'center location', element_type: 'button', link_text: 'ubicación', is_establishment_filter: true } Repsol.AnalyticsRomProd.clickInteractionRomProd($(this), params); }) EESSSearch.dataLayer.events(); }) function setCenterLocation(place) { $('.suggestTxtMap').val(''); $('.suggestTxtMap').attr('data-place_id', ''); $('.suggestTxtMap').attr('data-location', ''); myUSP.set('gps', place); history.replaceState(null, null, decodeURIComponent(myURL).toString()); if(sessionStorage.getItem('placeName')) { sessionStorage.removeItem('placeName'); } } function reverseGeocoding(lugar) { const geocoder = new google.maps.Geocoder(); geocoder.geocode({ location: lugar }, (results, status) => { if (status === "OK") { if (results[0]) { const urlPlaceName = results[0].formatted_address; } else { console.log("No results found"); } } else { console.log("Geocoder failed due to: " + status); } }); } EESSSearch = { controlSetGPSEvent : false, dataLayer: { placeiconData : {}, events: function(){ $(document).on("click", ".advanced-search .advanced-search-container-filters .dropdown-toggle-custom", function(){ EESSSearch.dataLayer.sendData($(this), "drop-down"); }); $(document).on("change", ".advanced-search .advanced-search-container-filters .dropdown-checkbox", function(){ EESSSearch.dataLayer.sendData($(this), "checkbox"); }); $(document).on("click", ".advanced-search .advanced-search-container .apply-filters", function(){ EESSSearch.dataLayer.sendData( $(this), "button"); }); $(document).on("click", ".js-go-detail", function(ev){ ev.stopPropagation(); EESSSearch.dataLayer.sendData( $(this), ""); const params = { component_description: 'buscador eess', element_description: 'locate eess', element_type: 'button', link_text : 'visualizar', is_establishment_filter: true, establishment_type : EESSSearch.getTypeText($(this)) } Repsol.AnalyticsRomProd.clickInteractionRomProd($(this), params); }); $(document).on("click", ".mapgoto", function(ev){ ev.stopPropagation(); EESSSearch.dataLayer.sendData( $(this), ""); const params = { component_description: 'buscador eess', content_name: EESSSearch.getESSName($(this), ""), is_establishment_filter: true } Repsol.AnalyticsRomProd.linkClickRomProd($(this), params); }); $(document).on("click", ".block-list-map .cards-result .block-single", function(){ EESSSearch.dataLayer.sendData( $(this), "card"); }); $(document).on('click', '.result-item', function () { let $this = $(this); if(!EESSSearch.controlSetGPSEvent){ EESSSearch.controlSetGPSEvent = true; $(document).on("set-gps", function(){ //Analytics EESSSearch.dataLayer.sendData($this, ""); const params = { component_description: 'buscador eess', filter_interaction: 'search', filter_search_term: $this.text(), } Repsol.AnalyticsRomProd.filterRomProd($this, params); }); } }); $(document).on('click', '.default-filters .default-filter-text', function () { const params = { component_description: 'buscador eess', field_name_1: 'Servicios', selected_option_1: $(this).text().trim(), filter_interaction: 'select' } Repsol.AnalyticsRomProd.filterRomProd($(this), params); }); $(document).on('change', '.filters-country input[type="checkbox"]', function () { const checkedOptions = $(this).closest('.filters-country').find('input[type="checkbox"]:checked') let checkedOptionsText = ''; checkedOptions.each((index , $check)=>{ checkedOptionsText += $($check)?.siblings('.dropdown-name').text().trim(); if(index < checkedOptions.length - 1){ checkedOptionsText += '|'; } }); const params = { component_description: 'buscador eess', field_name_1: 'pais', selected_option_1: checkedOptionsText, filter_section: EESSSearch.getTypeText($(this)) } Repsol.AnalyticsRomProd.filterRomProd($(this), params); }); }, sendData: function(obj, elementType){ let event = obj.attr("data-event"); let streetData = EESSSearch.getStreet(); if(elementType == "placeicon" && obj.length > 0 && obj[0].data){ EESSSearch.dataLayer.placeiconData = obj[0].data; } if(obj.attr("data-text")){ var linkText = obj.attr("data-text"); }else{ if (obj.hasClass('block-single') && obj.hasClass('filters-cards')) { var linkText = elementType == "checkbox" ? obj.siblings(".dropdown-name").text().trim() : obj.find('p:first').text().trim(); var street = obj.find('p.mapaddress:first').text().trim(); } else { var linkText = elementType == "checkbox" ? obj.siblings(".dropdown-name").text().trim() : obj.text().trim(); var street = streetData["street"]; } } let eventType = EESSSearch.getType(obj); let eesName = eventType == "EES" ? EESSSearch.getESSName(obj, elementType) : ""; let evhName = eventType != "EES" ? EESSSearch.getESSName(obj, elementType) : ""; let componentName = $(".map-component").attr("data-component"); let latitude = streetData["latitude"]; let longitude = streetData["longitude"]; let dataLayer = { "event": event, "service": "ees and evh map", "event_type": eventType, "location_permission": undefined, "street": street != "" ? street : undefined, "latitude": latitude != "" ? latitude : undefined, "longitude": longitude != "" ? longitude : undefined, "ees_name": eesName != "" ? eesName : undefined, "evh_name": evhName != "" ? evhName : undefined, "map_filter": "no", "ees_filter_detail_products": undefined, "ees_filter_detail_services": undefined, "ees_filter_detail_promotions": undefined, "ees_filter_detail_cards": undefined, "evh_filter_power": undefined, "evh_filter_connector_type": undefined, "component_position": undefined, "component_name": componentName }; if(!obj.parent().hasClass("service-stations")){ if(eventType == "EES"){ let filterProducts = EESSSearch.getEESFilters("filter-products"); let filterServices = EESSSearch.getEESFilters("filter-services"); let filterPromotions = EESSSearch.getEESFilters("filter-promotions"); let filterCards = EESSSearch.getEESFilters("filter-cards"); if(filterProducts != ""){ dataLayer["ees_filter_detail_products"] = filterProducts; } if(filterServices != ""){ dataLayer["ees_filter_detail_services"] = filterServices; } if(filterPromotions != ""){ dataLayer["ees_filter_detail_promotions"] = filterPromotions; } if(filterCards != ""){ dataLayer["ees_filter_detail_cards"] = filterCards; } if(filterProducts != "" || filterServices != "" || filterPromotions != "" || filterCards != ""){ dataLayer["map_filter"] = "yes"; } }else{ let filterPower = EESSSearch.getChargingPointFilters("filter-speed"); let filterConnector = EESSSearch.getChargingPointFilters("filter-connector"); if(filterPower != ""){ dataLayer["evh_filter_power"] = filterPower; } if(filterConnector != ""){ dataLayer["evh_filter_connector_type"] = filterConnector; } if(filterPower != "" || filterConnector != ""){ dataLayer["map_filter"] = "yes"; } } } if(elementType != ""){ dataLayer["link_text"] = linkText == "" ? undefined : linkText; dataLayer["element_type"] = elementType; } if(obj.attr("data-map-click")){ dataLayer["map_click"] = obj.attr("data-map-click"); } if(event == "link_click"){ dataLayer["link_domain"] = "www.repsol.es"; dataLayer["link_text"] = linkText == "" ? undefined : linkText; dataLayer["link_url"] = obj.attr("href"); dataLayer["outbound"] = "false"; dataLayer["link_is_cta"] = "false"; dataLayer["link_type"] = "navigation"; } switch (elementType){ case "circle": const clusterData = obj.attr('data-cluster'); const markers = clusterData?.getMarkers() || []; const firstMarker = markers.length > 0 ? markers[0] : null; if(firstMarker){ const firstMarkerInfo = firstMarker.markerInfo[0]; const firstMarkerProvince = firstMarker.markerInfo[0]?.markerProvinceF; dataLayer["link_text"] = firstMarkerProvince || undefined; } dataLayer["event"] = "interaction"; dataLayer["map_click"] = "result"; break; case "placeicon": dataLayer["event"] = "interaction"; dataLayer["map_click"] = "placeicon"; dataLayer["link_text"] = eesName; break; } Repsol.utils.isLocationPermissionActivated().then(resp => { dataLayer["location_permission"] = "true"; }).catch(err => { dataLayer["location_permission"] = "false"; }).finally(() => { Repsol.Analytics.setInfoClick(dataLayer); }); }, sendSaveFiltersData: (obj) =>{ const $mapComponent = obj.closest(".map-component"); const type = $mapComponent.find('.service-stations .rp-btn.active')?.attr('data-type'); const $filtersContainer = obj.closest('.advanced-search-container-filters'); const filtersArray = []; if(type?.toLowerCase() == 'estacion'){ const $filters = $filtersContainer.find('.rp-dropdown:not(.dropdown-filter-recharge)') $filters.each(function(){ const filterType = $(this).find('.dropdown-menu').attr('id'); filtersArray.push({ 'key': $(this).find('.selected-filters-text')?.text().trim(), 'value': EESSSearch.getEESFilters(filterType) }); }); }else{ const $rechargeDropdown = $filtersContainer.find('.dropdown-filter-recharge'); const $filters = $rechargeDropdown.find('.filters-container .dropdown-item'); $filters.each(function(){ const filterType = $(this).attr('id'); filtersArray.push({ 'key': $(this).children('p')?.text().trim(), 'value': EESSSearch.getChargingPointFilters(filterType) }); }); } let params = { component_description: 'buscador eess', filter_interaction: obj.text().trim(), filter_section: EESSSearch.getTypeText(obj) } for(let i = 0; i < 4 ; i++){ params[`field_name_${i+1}`] = filtersArray[i]?.key || undefined; params[`selected_option_${i+1}`] = filtersArray[i]?.value || undefined; } Repsol.AnalyticsRomProd.filterRomProd(obj, params); } }, getStreet: function(){ let data = {}; data["street"] = $(".suggestTxtMap").val(); var latitude = ""; var longitude = ""; let gpsURL = myUSP.get('gps'); if(gpsURL !== null){ var gps = gpsURL.split(','); if( gps.length > 0 ){ latitude = gps[0]; longitude = gps[1].indexOf("?") != -1 ? gps[1].substring(0, gps[1].indexOf("?")) : gps[1]; } } data["latitude"] = latitude; data["longitude"] = longitude; return data; }, getType: function(obj){ var $type = $(".map-component .service-stations").find(".rp-btn.active"); var type = $type.attr("data-event-type"); if(type == ""){ type = undefined; } return type; }, getTypeText : function(obj){ const $mapComponent = obj.closest('.map-component'); const $mapFilters = $mapComponent.find('.map-filters'); return $mapFilters.find('.service-stations button.active')?.text().trim(); }, getEESFilters: function(name){ let filterId = "#" + name; let filters = []; let $checkedFilters = $(filterId).find(".dropdown-checkbox:checked"); let $button = $(filterId).closest(".rp-dropdown--checkbox").find("button.dropdown-toggle-custom"); if($button.find(".selected-filters-length").length > 0){ $checkedFilters.each(function(){ let $filter = $(this); let filterText = $filter.siblings(".dropdown-name").text(); filters.push(filterText); }); } return filters.join("|"); }, getChargingPointFilters: function(name){ let filterId = "#" + name; let filters = []; let $checkedFilters = $(filterId).find(".dropdown-checkbox:checked"); let $savedFilters = $('.filter-row-list').find(".filter-row-item"); $savedFilters.each(function(){ let savedFilterId = $(this).attr("data-id"); $checkedFilters.each(function(){ let $filter = $(this); if(savedFilterId == $filter.attr("data-id")){ let filterText = $filter.siblings(".dropdown-name").text(); filters.push(filterText); } }); }); return filters.join("|"); }, getESSName: function(obj, elementType){ let eesName = ""; if(obj.closest(".block-list-map").length > 0){ eesName = obj.closest(".block-single").find(".maptitle").text().trim(); }else if(elementType == "placeicon"){ eesName = EESSSearch.dataLayer.placeiconData.nombre ? EESSSearch.dataLayer.placeiconData.nombre : ""; }else if(obj.closest(".infoWindow").length > 0){ eesName = obj.closest(".infoWindow").find(".maptitle").text().trim(); } return eesName; } }; function setSessionStorageVariable(name, type) { sessionStorage.setItem(name, type); } function changeStationTypeFromSessionStorage() { let serviceType = sessionStorage.getItem('serviceType'); if(serviceType && serviceType == 'recharge') { $(".service-stations button[data-type='Recarga']").addClass('active'); $(".service-stations button[data-type='Estacion']").removeClass('active'); $(".service-stations-result-number").removeClass("active"); $(".electric-charge-result-number").addClass("active"); } else { $(".service-stations button[data-type='Estacion']").addClass('active'); $(".service-stations button[data-type='Recarga']").removeClass('active'); $(".service-stations-result-number").addClass("active"); $(".electric-charge-result-number").removeClass("active"); } } function setPlaceNameSearchInput() { placeName = sessionStorage.getItem('placeName'); let placeCoords = sessionStorage.getItem('gps'); if(placeName && placeCoords) { $('#suggestTxtMap').val(placeName); myUSP.set('gps', placeCoords); history.replaceState(null, null, decodeURIComponent(myURL).toString()); } } function removeGPSParams() { const perfEntries = performance.getEntriesByType('navigation'); if (perfEntries.length && perfEntries[0].type === 'back_forward') { // console.log('User got here from Back or Forward button.'); } else { // console.log('refresh') if(sessionStorage.getItem('gps')) { sessionStorage.removeItem('gps') } if(myUSP.get('gps')) { myUSP.delete('gps') history.replaceState(null, null, decodeURIComponent(myURL).toString()); } } } function searchFromText(searchText, obj) { const request = { query: searchText, fields: ["name", "geometry"], } service = new google.maps.places.PlacesService(map); service.findPlaceFromQuery(request, (results, status) => { if (status === google.maps.places.PlacesServiceStatus.OK && results) { map.setCenter(results[0].geometry.location); map.setZoom(13) Repsol.utils.setLoader(false, $('#map')); } if (results[0].geometry) { placeLAT = results[0].geometry.location.lat(); placeLNG = results[0].geometry.location.lng(); placeLocation = `${placeLAT},${placeLNG}`; if (placeLocation.length) { myUSP.set('gps', placeLocation); history.replaceState(null, null, decodeURIComponent(myURL).toString()); if(obj.hasClass("result-item")){ $(document).trigger("set-gps"); } } } }); } window.onbeforeunload = function() { if(sessionStorage.getItem('stationFullyLoaded') != null) { sessionStorage.removeItem('stationFullyLoaded') } if(sessionStorage.getItem('rechargeFullyLoaded') != null) { sessionStorage.removeItem('rechargeFullyLoaded') } if(sessionStorage.getItem('serviceType') != null) { sessionStorage.removeItem('serviceType') } } let selectedFiltersProducts = []; let selectedFiltersServices = []; let selectedFiltersPromotions = []; let selectedFiltersCards = []; let selectedFiltersSpeed = []; let selectedFiltersConnector = []; let selectedFiltersProductsSaved = []; let selectedFiltersServicesSaved = []; let selectedFiltersPromotionsSaved = []; let selectedFiltersCardsSaved = []; let selectedFiltersSpeedSaved = []; let selectedFiltersConnectorSaved = []; let selectedSubServices = []; let selectedSubServicesSaved = []; let finalServices = []; let servicesStrings; let idParent = ''; let urlIds; let filtersRow = []; let filtersRowItems = []; let baseURL = '/bin/repsol/searchmiddleware/station-search.json?action=search'; let selectedFilters = []; let selectedFiltersSaved = []; let parentItem; let filterSubServicesStrings = []; let filterName; let filterIdName; let filterType; let filtersId; let array = []; $(document).ready(function () { $('.advanced-search-btn').attr('disabled', true); openFiltersMenu(); closeFiltersMenu(); $("button[data-type='Estacion'], button[data-type='Recarga']").on("click", function() { resetAll(); }) $(".remove-all-filters").click(function(){ resetAll(); clearAllFiltersParamsURL(); updateMapWithFilters(); clearSelectedFiltersLength(); setSelectedFiltersLength(); EESSSearch.dataLayer.sendData( $(this), "clear"); }); $('.dropdown-cta').on('click', function() { setDotFilterButton() }) }); function printFilters(data) { if(data.productos.length > 0) { let listFiltersProducts = ""; for(let i = 0; i < data.productos.length; i++) { listFiltersProducts += ''; } $('#filter-products .filters-container').html(listFiltersProducts); } if(data.servicios.length > 0) { const mainServices = data.servicios; let listFiltersServices = ''; mainServices.forEach(service => { const insideServices = service.servicios if(insideServices != undefined) { insideServices.forEach(service => { const subServices = service.subServicios; if(subServices != undefined) { subServices.forEach(subService => { const subServiceId = subService.text.replace(/[&]/g, '%26').replace(/ /g, '%20'); listFiltersServices += '' }); } else { listFiltersServices += '' } }); } else { listFiltersServices += '' } }); $('#filter-services .filters-container').html(listFiltersServices); } if(data.promociones.length > 0) { let listFiltersPromotions = ""; for(let i = 0; i < data.promociones.length; i++) { listFiltersPromotions += '' } $('#filter-promotions .filters-container').append(listFiltersPromotions); } if(data.tarjetas.length > 0) { let listFiltersCards = ""; for(let i = 0; i < data.tarjetas.length; i++) { if(data.tarjetas[i].text && data.tarjetas[i].text != "undefined"){ listFiltersCards += '' } } $('#filter-cards .filters-container').append(listFiltersCards); } } function printFiltersRecharge(data) { if(data.tipoRecarga) { let listFiltersRechargeConectorTitle = "" listFiltersRechargeConectorTitle += '' let listFiltersRechargeVelocidadTitle = "" listFiltersRechargeVelocidadTitle += '' let listFiltersRechargeConector = "" for(let i = 0; i < data.tipoRecarga.conector.length; i++) { listFiltersRechargeConector += '' } let listFiltersRechargeVelocidad = "" for(let i = 0; i < data.tipoRecarga.velocidad.length; i++) { if(data.tipoRecarga.velocidad[i].text){ listFiltersRechargeVelocidad += '' } } $('#filter-recharge .filters-container').html(listFiltersRechargeConectorTitle); $( listFiltersRechargeVelocidadTitle ).insertAfter( "#filter-recharge .filters-container .dropdown-item:first-child" ); $('#filter-recharge .filters-container .dropdown-item:first-child .filter-recharge-options').html(listFiltersRechargeConector); $('#filter-recharge .filters-container .dropdown-item:last-child .filter-recharge-options').html(listFiltersRechargeVelocidad); } } window.ajaxResults = {}; function callAjaxFilters() { return jQuery.ajax({ url: '/bin/repsol/searchmiddleware/station-search.json?action=filter', type: 'post', dataType: "json", success: function (data) { printFilters(data); enableStationFiltersSaveButton(); deleteFilterStation(); setFiltersWithParams(); window.ajaxResults.filtersData = data; if(myURL.search !== null && myUSP.has('productos')) { filterName = 'productos'; filterIdName = '#filter-products'; let urlIds = myUSP.getAll(filterName).toString(); let filtersId = urlIds.split(','); selectedFiltersProducts = filtersId; saveFilters(selectedFiltersProducts, selectedFiltersProductsSaved); selectedFiltersProductsSaved = selectedFiltersProductsSaved.filter((item, index) => selectedFiltersProductsSaved.indexOf(item) === index); $('.filter-row').addClass('visible'); checkFiltersFromURL(filterName, filterIdName); setFiltersRowURL(); } if(myURL.search !== null && myUSP.has('servicios')) { filterName = 'servicios'; filterIdName = '#filter-services'; let urlString = []; let urlIds = myUSP.getAll(filterName).toString(); urlIds = urlIds.replace(/[&]/g, '%26').replace(/ /g, '%20'); const regExp = new RegExp(/041\(([^)]+)\)/g); serviceFilters = urlIds.replace(regExp, ''); serviceFiltersArray = serviceFilters.split(','); selectedFiltersServices = serviceFiltersArray.filter(item => { return item !== ''; }); if(urlIds.includes('041')) { urlString = [...urlIds.match(regExp)].toString(); let subServicesIds = urlString.replace(/041\(/g, '').replace(/\)/g, ''); selectedSubServices = subServicesIds.split(','); } else { urlString = ''; subServicesIds = []; selectedSubServices = []; } saveFilters(selectedFiltersServices, selectedFiltersServicesSaved); selectedFiltersServicesSaved = selectedFiltersServicesSaved.filter((item, index) => selectedFiltersServicesSaved.indexOf(item) === index); saveFilters(selectedSubServices, selectedSubServicesSaved); selectedSubServicesSaved = selectedSubServicesSaved.filter((item, index) => selectedSubServicesSaved.indexOf(item) === index); $('.filter-row').addClass('visible'); checkServicesFromURL(filterName, filterIdName); setFiltersRowURL(); } if(myURL.search !== null && myUSP.has('promociones')) { filterName = 'promociones'; filterIdName = '#filter-promotions'; let urlIds = myUSP.getAll(filterName).toString(); let filtersId = urlIds.split(','); selectedFiltersPromotions = filtersId; saveFilters(selectedFiltersPromotions, selectedFiltersPromotionsSaved); selectedFiltersPromotionsSaved = selectedFiltersPromotionsSaved.filter((item, index) => selectedFiltersPromotionsSaved.indexOf(item) === index); $('.filter-row').addClass('visible'); checkFiltersFromURL(filterName, filterIdName); setFiltersRowURL(); } if(myURL.search !== null && myUSP.has('tarjetas')) { filterName = 'tarjetas'; filterIdName = '#filter-cards'; let urlIds = myUSP.getAll(filterName).toString(); let filtersId = urlIds.split(','); selectedFiltersCards = filtersId; saveFilters(selectedFiltersCards, selectedFiltersCardsSaved); selectedFiltersCardsSaved = selectedFiltersCardsSaved.filter((item, index) => selectedFiltersCardsSaved.indexOf(item) === index); $('.filter-row').addClass('visible'); checkFiltersFromURL(filterName, filterIdName); setFiltersRowURL(); } $('.save-products').click(function() { saveFilters(selectedFiltersProducts, selectedFiltersProductsSaved); selectedFiltersProductsSaved = selectedFiltersProductsSaved.filter((item, index) => selectedFiltersProductsSaved.indexOf(item) === index); checkActivationSearchButtonStation(); setFiltersRowURL(); showCarouselFilters(); EESSSearch.dataLayer.sendData($(this), "button"); EESSSearch.dataLayer.sendSaveFiltersData($(this)); }) $('.save-services').click(function() { saveFilters(selectedFiltersServices, selectedFiltersServicesSaved); selectedFiltersServicesSaved = selectedFiltersServicesSaved.filter((item, index) => selectedFiltersServicesSaved.indexOf(item) === index); saveFilters(selectedSubServices, selectedSubServicesSaved); selectedSubServicesSaved = selectedSubServicesSaved.filter((item, index) => selectedSubServicesSaved.indexOf(item) === index); checkActivationSearchButtonStation(); setFiltersRowURL(); showCarouselFilters(); EESSSearch.dataLayer.sendData($(this), "button"); EESSSearch.dataLayer.sendSaveFiltersData($(this)); }) $('.save-promotions').click(function() { saveFilters(selectedFiltersPromotions, selectedFiltersPromotionsSaved); selectedFiltersPromotionsSaved = selectedFiltersPromotionsSaved.filter((item, index) => selectedFiltersPromotionsSaved.indexOf(item) === index); checkActivationSearchButtonStation(); setFiltersRowURL(); showCarouselFilters(); EESSSearch.dataLayer.sendData($(this), "button"); EESSSearch.dataLayer.sendSaveFiltersData($(this)); }) $('.save-cards').click(function() { saveFilters(selectedFiltersCards, selectedFiltersCardsSaved); selectedFiltersCardsSaved = selectedFiltersCardsSaved.filter((item, index) => selectedFiltersCardsSaved.indexOf(item) === index); checkActivationSearchButtonStation(); setFiltersRowURL(); showCarouselFilters(); EESSSearch.dataLayer.sendData($(this), "button"); EESSSearch.dataLayer.sendSaveFiltersData($(this)); }) $('.apply-filters').click(function() { }) printFiltersRecharge(data); enableRechargeFiltersSaveButton(); deleteFilterRecharge(); setFiltersWithParamsRecharge(); if(myURL.search !== null && myUSP.has('velocidad')) { filterName = 'velocidad'; filterIdName = '#filter-speed'; let urlIds = myUSP.getAll(filterName).toString(); let filtersId = urlIds.split(','); selectedFiltersSpeed = filtersId; saveFilters(selectedFiltersSpeed, selectedFiltersSpeedSaved); selectedFiltersSpeedSaved = selectedFiltersSpeedSaved.filter((item, index) => selectedFiltersSpeedSaved.indexOf(item) === index); $('.filter-row').addClass('visible'); checkFiltersFromURL(filterName, filterIdName); setFiltersRowRechargeURL(); } if(myURL.search !== null && myUSP.has('conector')) { filterName = 'conector'; filterIdName = '#filter-connector'; let urlIds = myUSP.getAll(filterName).toString(); let filtersId = urlIds.split(','); selectedFiltersConnector = filtersId; saveFilters(selectedFiltersConnector, selectedFiltersConnectorSaved); selectedFiltersConnectorSaved = selectedFiltersConnectorSaved.filter((item, index) => selectedFiltersConnectorSaved.indexOf(item) === index); $('.filter-row').addClass('visible'); checkFiltersFromURL(filterName, filterIdName); setFiltersRowRechargeURL(); } $('.save-filters-recharge').click(function() { saveFilters(selectedFiltersSpeed, selectedFiltersSpeedSaved); selectedFiltersSpeedSaved = selectedFiltersSpeedSaved.filter((item, index) => selectedFiltersSpeedSaved.indexOf(item) === index); saveFilters(selectedFiltersConnector, selectedFiltersConnectorSaved); selectedFiltersConnectorSaved = selectedFiltersConnectorSaved.filter((item, index) => selectedFiltersConnectorSaved.indexOf(item) === index); checkActivationSearchButtonRecharge(); setFiltersRowRechargeURL(); showCarouselFilters(); EESSSearch.dataLayer.sendData($(this), "button"); EESSSearch.dataLayer.sendSaveFiltersData($(this)); }) $('.apply-filters').click(function() { }) $('.advanced-search-btn').attr('disabled', false); removeFilterCarouselAndURL(); }, complete: function() { setSelectedFiltersLength(); }, error: function (XMLHttpRequest, textStatus, errorThrown) { console.log("Error: {}", errorThrown); } }); } function enableStationFiltersSaveButton() { $('.filters-container .dropdown-label').on("click", function(el) { activationSaveButtonStation($(this)); checkActivationSearchButtonStation(); }) } function enableRechargeFiltersSaveButton() { $('.filters-container .dropdown-label').on("click", function(el) { activationSaveButtonRecharge($(this)); checkActivationSearchButtonRecharge() }) } $('.dropdown-toggle-custom').on('click', function() { if ($(this).parent().hasClass('is-active')) { // Si el elemento ya está activo, desactivarlo y mostrar los otros elementos $(this).parent().removeClass('is-active'); if (window.innerWidth < 1150) { $('.dropdown-toggle-custom').css('display', 'flex'); $('.apply-filters').css('display', 'flex'); //$('.advanced-search-container-filters').css('padding-right', '9px'); } } else { // Si el elemento no está activo, activarlo y ocultar los otros elementos $('.dropdown').removeClass('is-active'); $(this).parent().addClass('is-active'); if (window.innerWidth < 1150) { $('.dropdown-toggle-custom').not(this).css('display', 'none'); $('.apply-filters').css('display', 'none'); //$('.advanced-search-container-filters').css('padding-right', '0px'); } } }); $(".dropdown-menu").on("click", function (e) { e.stopPropagation(); }) function deleteFilterStation() { $('.dropdown-cta-delete').on('click', function() { $(this).next().attr('disabled','disabled'); if( $(this).hasClass("remove-products")) { selectedFiltersProducts = []; selectedFiltersProductsSaved = []; deleteFilterURL('productos'); } if( $(this).hasClass("remove-services")) { selectedFiltersServices = []; selectedFiltersServicesSaved = []; selectedSubServices = []; selectedSubServicesSaved = []; deleteFilterURL('servicios'); } if( $(this).hasClass("remove-promotions")) { selectedFiltersPromotions = []; selectedFiltersPromotionsSaved = []; deleteFilterURL('promociones'); } if( $(this).hasClass("remove-cards")) { selectedFiltersCards = []; selectedFiltersCardsSaved = []; deleteFilterURL('tarjetas'); } checkActivationSearchButtonStation(); setFiltersParamsToURL(); setFiltersRowURL(); hideCarouselFilters(); }) } function deleteFilterRecharge() { $('.dropdown-cta-delete').on('click', function() { $(this).next().attr('disabled','disabled'); let checkbox = $(this).closest("#filter-recharge").find(".dropdown-item"); $(checkbox).each(function(){ $(this).find(".dropdown-checkbox").prop("checked", false); }) selectedFiltersSpeed = []; selectedFiltersSpeedSaved = []; selectedFiltersConnector = []; selectedFiltersConnectorSaved = []; checkActivationSearchButtonRecharge(); deleteFilterURL('velocidad'); deleteFilterURL('conector'); EESSSearch.dataLayer.sendData($(this), "clear"); const $title = $(this).closest('.advanced-search-container').find('.advanced-search-container-title')?.text().trim(); const params= { component_description: 'buscador eess', content_name: $title, element_description: 'delete selection', element_type: 'text', link_text: 'Borrar seleccion', is_establishment_filter: true, establishment_type : EESSSearch.getTypeText($(this)) } Repsol.AnalyticsRomProd.clickInteractionRomProd($(this), params); }) } function keepSavedFiltersAfterClose() { if (selectedFiltersProductsSaved.length > 0) { $.each (selectedFiltersProductsSaved, function (index, value) { $('#filter-products #' + selectedFiltersProductsSaved[index]).prop("checked", true); }); } if (selectedFiltersServicesSaved.length > 0) { $.each (selectedFiltersServicesSaved, function (index, value) { $('#filter-services #' + selectedFiltersServicesSaved[index]).prop("checked", true); }); } if (selectedFiltersPromotionsSaved.length > 0) { $.each (selectedFiltersPromotionsSaved, function (index, value) { $('#filter-promotions #' + selectedFiltersPromotionsSaved[index]).prop("checked", true); }); } if (selectedFiltersCardsSaved.length > 0) { $.each (selectedFiltersCardsSaved, function (index, value) { $('#filter-tarjetas #' + selectedFiltersCardsSaved[index]).prop("checked", true); }); } if (selectedFiltersSpeedSaved.length > 0) { $.each (selectedFiltersSpeedSaved, function (index, value) { $('#filter-velocidad #' + selectedFiltersSpeedSaved[index]).prop("checked", true); }); } if (selectedFiltersConnectorSaved.length > 0) { $.each (selectedFiltersConnectorSaved, function (index, value) { $('#filter-conector #' + selectedFiltersConnectorSaved[index]).prop("checked", true); }); } } function activationSaveButtonStation(el) { let isAnyChecked = el.parent().parent().find("input[type=checkbox]").is(':checked') ? true : false; let buttonSave = el.parent().parent().next().find('.dropdown-cta-save'); if(isAnyChecked) { buttonSave.removeAttr("disabled"); } else { buttonSave.attr('disabled','disabled'); } } function activationSaveButtonRecharge(el) { let isAnyChecked = el.closest(".filters-container").find("input[type=checkbox]").is(':checked') ? true : false; let buttonSave = el.parent().parent().parent().next().find('.dropdown-cta-save'); if(isAnyChecked) { buttonSave.removeAttr("disabled"); } else { buttonSave.attr('disabled','disabled'); } } function checkActivationSearchButtonStation() { let buttonApplyFilters = $('.apply-filters'); if( selectedFiltersProductsSaved.length > 0 || selectedFiltersServicesSaved.length > 0 || selectedFiltersPromotionsSaved.length > 0 || selectedFiltersCardsSaved.length > 0 || selectedSubServicesSaved.length > 0 ){ buttonApplyFilters.removeAttr("disabled"); }else { buttonApplyFilters.attr('disabled','disabled'); } } function checkActivationSearchButtonRecharge() { let buttonApplyFilters = $('.apply-filters'); if( selectedFiltersSpeedSaved.length > 0 || selectedFiltersConnectorSaved.length > 0 ){ buttonApplyFilters.removeAttr("disabled"); }else { buttonApplyFilters.attr('disabled','disabled'); } } function setFiltersWithParams() { $('.filters-container .dropdown-label .dropdown-checkbox').on("click", function() { if($(this).closest("#filter-products").length > 0){ let idFilter = $(this).data('id').toString(); if(selectedFiltersProducts.indexOf(idFilter) === -1) { selectedFiltersProducts.push(idFilter); } else { let filterToRemove = selectedFiltersProducts.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersProducts.splice(filterToRemove, 1); selectedFiltersProductsSaved.splice(filterToRemove, 1); } } if (selectedFiltersProducts.length == 0) { selectedFiltersProductsSaved = []; $('.save-products').trigger('click'); } } if($(this).closest("#filter-services").length > 0){ let idFilter = $(this).data('id').toString(); idParent = $(this).data('parent-id'); let inputFilter = $('input.dropdown-checkbox[data-parent-id="' + idParent + '"]'); if(inputFilter.length > 0) { if(selectedSubServices.indexOf(idFilter) === -1) { selectedSubServices.push(idFilter); } else { let filterToRemove = selectedSubServices.indexOf(idFilter); if (filterToRemove !== -1) { selectedSubServices.splice(filterToRemove, 1); selectedSubServicesSaved.splice(filterToRemove, 1); } } if(selectedFiltersServices.indexOf(idFilter) === -1) { selectedFiltersServices.push(idFilter); }else { let filterToRemove = selectedFiltersServices.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersServices.splice(filterToRemove, 1); selectedFiltersServicesSaved.splice(filterToRemove, 1); } } } if(selectedFiltersServices.indexOf(idFilter) === -1) { selectedFiltersServices.push(idFilter); }else { let filterToRemove = selectedFiltersServices.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersServices.splice(filterToRemove, 1); selectedFiltersServicesSaved.splice(filterToRemove, 1); } } if (selectedFiltersServices.length == 0 && selectedSubServices.length == 0) { selectedFiltersServicesSaved = []; selectedSubServicesSaved = []; $('.save-services').trigger('click'); } } if($(this).closest("#filter-promotions").length > 0){ let idFilter = $(this).data('id').toString(); if(selectedFiltersPromotions.indexOf(idFilter) === -1) { selectedFiltersPromotions.push(idFilter); }else { let filterToRemove = selectedFiltersPromotions.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersPromotions.splice(filterToRemove, 1); selectedFiltersPromotionsSaved.splice(filterToRemove, 1); } } if (selectedFiltersPromotions.length == 0) { selectedFiltersPromotionsSaved = []; $('.save-promotions').trigger('click'); } } if($(this).closest("#filter-cards").length > 0){ let idFilter = $(this).data('id').toString(); if(selectedFiltersCards.indexOf(idFilter) === -1) { selectedFiltersCards.push(idFilter); }else { let filterToRemove = selectedFiltersCards.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersCards.splice(filterToRemove, 1); selectedFiltersCardsSaved.splice(filterToRemove, 1); } } if (selectedFiltersCards.length == 0) { selectedFiltersCardsSaved = []; $('.save-cards').trigger('click'); } } checkActivationSearchButtonStation(); }) } function setFiltersWithParamsRecharge() { $('.filters-container .dropdown-label .dropdown-checkbox').on("click", function() { if($(this).closest("#filter-speed").length > 0){ let idFilter = $(this).data('id').toString(); if(selectedFiltersSpeed.indexOf(idFilter) === -1) { selectedFiltersSpeed.push(idFilter); }else { let filterToRemove = selectedFiltersSpeed.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersSpeed.splice(filterToRemove, 1); selectedFiltersSpeedSaved.splice(filterToRemove, 1); } } if (selectedFiltersSpeed.length == 0) { selectedFiltersSpeedSaved = []; } } if($(this).closest("#filter-connector").length > 0){ let idFilter = $(this).data('id').toString(); if(selectedFiltersConnector.indexOf(idFilter) === -1) { selectedFiltersConnector.push(idFilter); }else { let filterToRemove = selectedFiltersConnector.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersConnector.splice(filterToRemove, 1); selectedFiltersConnectorSaved.splice(filterToRemove, 1); } } if (selectedFiltersConnector.length == 0) { selectedFiltersConnectorSaved = []; } } checkActivationSearchButtonRecharge(); }) } function saveFilters(array1, array2) { if (array1.length > 0) { array2.push(...array1); } } function setFiltersParamsToURL() { if(selectedFiltersProducts.length > 0) { const filterProductsStrings = selectedFiltersProducts.toString(); myUSP.set('productos', filterProductsStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('productos')) { deleteFilterURL('productos'); } } if(selectedFiltersServices.length > 0 || selectedSubServices.length > 0) { let filterSubServicesStrings = ''; filterServicesStrings = selectedFiltersServices.toString(); const subServices = []; if(selectedFiltersServices.length == 0) { filterSubServicesStrings = '041' + '('+ selectedSubServices.toString() +')'; } else { filterSubServicesStrings = ',' + '041' + '('+ selectedSubServices.toString() +')'; } if(selectedSubServices.length > 0) { subServices.push(filterSubServicesStrings); } finalServices = filterServicesStrings.concat(subServices); myUSP.set('servicios', finalServices); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('servicios')) { deleteFilterURL('servicios'); } } if(selectedFiltersPromotions.length > 0) { const filterPromotionsStrings = selectedFiltersPromotions.toString(); myUSP.set('promociones', filterPromotionsStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('promociones')) { deleteFilterURL('promociones'); } } if(selectedFiltersCards.length > 0) { const filterCardsStrings = selectedFiltersCards.toString(); myUSP.set('tarjetas', filterCardsStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('tarjetas')) { deleteFilterURL('tarjetas'); } } if(selectedFiltersConnector.length > 0) { const filterConnectorStrings = selectedFiltersConnector.toString(); myUSP.set('conector', filterConnectorStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('conector')) { deleteFilterURL('conector'); } } if(selectedFiltersSpeed.length > 0) { const filterSpeedStrings = selectedFiltersSpeed.toString(); myUSP.set('velocidad', filterSpeedStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('velocidad')) { deleteFilterURL('velocidad'); } } } function setFiltersRechargeParamsToURL() { if(selectedFiltersSpeed.length > 0) { const filterSpeedStrings = selectedFiltersSpeed.toString(); myUSP.set('velocidad', filterSpeedStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('velocidad')) { deleteFilterURL('velocidad'); } } if(selectedFiltersConnector.length > 0) { const filterConnectorStrings = selectedFiltersConnector.toString(); myUSP.set('conector', filterConnectorStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); } else { if(myUSP.has('conector')) { deleteFilterURL('conector'); } } } function setFiltersRowURL() { filtersRow = []; filtersRowItems = []; filtersRow = [...selectedFiltersProductsSaved, ...selectedFiltersServicesSaved, ...selectedSubServicesSaved, ...selectedFiltersPromotionsSaved, ...selectedFiltersCardsSaved]; filtersRow = filtersRow.filter((item, index) => filtersRow.indexOf(item) === index); if(filtersRow.length > 0) { filtersRow.forEach(function(el){ let item = $('input[data-id="' + el + '"]'); let filter = { id: el, name: item.parent().find(".dropdown-name").text(), parent: item.data('parent-id') } filtersRowItems.push(filter); }); } else { filtersRow = []; } let filterItems = ""; for(let i = 0; i < filtersRowItems.length; i++) { filterItems += '
  • '+ filtersRowItems[i].name +'
  • ' } if( $('.filter-row-list').hasClass("slick-initialized")) { $('.filter-row-list').slick('unslick'); $('.filter-row-list').empty(); $('.filter-row-list').html(filterItems); callSlickCarousel(); } else { $('.filter-row-list').html(filterItems); callSlickCarousel(); } setDotFilterButton(); } function setFiltersRowRechargeURL() { filtersRow = []; filtersRowItems = []; if( selectedFiltersSpeedSaved.length > 0 || selectedFiltersConnectorSaved.length > 0 ) {} filtersRow = [...selectedFiltersSpeedSaved, ...selectedFiltersConnectorSaved]; filtersRow = filtersRow.filter((item, index) => filtersRow.indexOf(item) === index); if(filtersRow.length > 0) { filtersRow.forEach(function(el){ let el_dash = el.replace(/[{()}]/g, '').replace(/\s+/g, "-") let item = $('input[data-id="' + el + '"]'); let filter = { id: el, name: item.parent().find(".dropdown-name").text() } filtersRowItems.push(filter); }) } else { filtersRow = []; } let filterItems = ""; for(let i = 0; i < filtersRowItems.length; i++) { filterItems += '
  • '+ filtersRowItems[i].name +'
  • ' } if( $('.filter-row-list').hasClass("slick-initialized")) { $('.filter-row-list').slick('unslick'); $('.filter-row-list').empty(); $('.filter-row-list').html(filterItems); callSlickCarousel(); } else { $('.filter-row-list').html(filterItems); callSlickCarousel(); } setDotFilterButton(); } function showCarouselFilters() { if( !$(".filter-row").hasClass("visible")) { $(".filter-row").addClass("visible"); } return; } function hideCarouselFilters() { if(filtersRow.length == 0) { $('.filter-row').removeClass('visible'); updateMapWithFilters(); } } function callSlickCarousel() { $(".filter-row-list").slick({ loop: false, infinite: false, variableWidth: true, dots: false, arrows: false, slidesToShow: 2.4, slidesToScroll: 1 }) } function resetAll () { filtersRow = []; filtersRowItems = []; selectedFiltersProducts = []; selectedFiltersServices = []; selectedSubServices = []; selectedFiltersPromotions = []; selectedFiltersCards = []; selectedFiltersSpeed = []; selectedFiltersConnector = []; selectedFiltersProductsSaved = []; selectedFiltersServicesSaved = []; selectedSubServicesSaved = []; selectedFiltersPromotionsSaved = []; selectedFiltersCardsSaved = []; selectedFiltersSpeedSaved = []; selectedFiltersConnectorSaved = []; $(".filter-row").removeClass("visible"); $('.filter-row-list').empty(); $('.selected-filters-length').remove(); $(".dropdown-cta-save").attr('disabled','disabled'); $(".apply-filters").attr('disabled','disabled'); } function setMapFiltersClick() { if($('.advanced-search-container').hasClass('is-visible')) { $('.map-filters').css('pointer-events', 'none'); } else { $('.map-filters').css('pointer-events', 'all'); } } function checkFiltersFromURL(filterName, filterIdName) { filterType = $(filterIdName).find('.dropdown-checkbox'); urlIds = myUSP.getAll(filterName).toString(); let filtersId = urlIds.split(','); selectedFilters = filtersId; filterType.map((index, element) => { elementId = $(element).data('id').toString(); if(filtersId.includes(elementId)) { $(element).prop('checked', true); const isAnyChecked = $(element).is(':checked') ? true : false; const buttonSave = $(element).parent().parent().parent().next().find('.dropdown-cta-save'); if(isAnyChecked) { buttonSave.removeAttr("disabled"); } else { buttonSave.attr('disabled','disabled'); } } else { $(element).prop('checked', false); } }); setSelectedFiltersLength(); } function checkServicesFromURL(filterName, filterIdName) { filterType = $(filterIdName).find('.dropdown-checkbox'); let urlIds = myUSP.getAll(filterName).toString(); urlIds = urlIds.replace(/[&]/g, '%26').replace(/ /g, '%20'); const regExp = new RegExp(/041\(([^)]+)\)/g); serviceFilters = urlIds.replace(regExp, ''); serviceFiltersArray = serviceFilters.split(','); selectedFiltersServices = serviceFiltersArray.filter(item => { return item !== ''; }); if(urlIds.includes('041')) { urlString = [...urlIds.match(regExp)].toString(); subServicesIds = urlString.replace(/041\(/g, '').replace(/\)/g, ''); selectedSubServices = subServicesIds.split(','); } else { urlString = ''; selectedSubServices = []; subServicesIds = []; } filtersId = [...selectedFiltersServices, ...selectedSubServices]; selectedFilters = filtersId; filterType.map((index, element) => { elementId = $(element).data('id').toString(); if(filtersId.includes(elementId)) { $(element).prop('checked', true); const isAnyChecked = $(element).is(':checked') ? true : false; const buttonSave = $(element).parent().parent().parent().next().find('.dropdown-cta-save'); if(isAnyChecked) { buttonSave.removeAttr("disabled"); } else { buttonSave.attr('disabled','disabled'); } } else { $(element).prop('checked', false); } }); setSelectedFiltersLength(); } function checkFiltersRechargeFromURL(filterName, filterIdName) { filterType = $(filterIdName).find('.dropdown-checkbox'); let urlIds = myUSP.getAll(filterName).toString(); let filtersId = urlIds.split(','); selectedFilters = filtersId; filterType.map((index, element) => { elementId = $(element).attr('id').toString(); if(filtersId.includes(elementId)) { $(element).prop('checked', true); $(element).attr('checked', 'checked'); const isAnyChecked = $(element).is(':checked') ? true : false; const buttonSave = $(element).parent().parent().parent().next().find('.dropdown-cta-save'); if(isAnyChecked) { buttonSave.removeAttr("disabled"); } else { buttonSave.attr('disabled','disabled'); } } }); } function openFiltersMenu() { $(".js-open-advanced-search").on("click", function(){ const backdrop = `
    `; //$('#map').prepend($(backdrop)); $(".advanced-search-container").animate({left: "0"}, 300 ); $(".advanced-search-container").addClass('is-visible'); if(window.innerWidth <= 1150){ $("body").css("overflow", "hidden"); $(".map-content").css('z-index', '1500'); }; if($('.dropdown').hasClass('is-active')) { $('.dropdown').removeClass('is-active'); } //setMapFiltersClick(); if($(".service-stations button[data-type='Estacion']").hasClass("active")){ $(".advanced-search-container-filters .rp-dropdown").css("display", "block"); $(".advanced-search-container-filters .rp-dropdown.dropdown-filter-recharge").css("display", "none"); } else { $(".advanced-search-container-filters .rp-dropdown").css("display", "none"); $(".advanced-search-container-filters .rp-dropdown.dropdown-filter-recharge").css("display", "block"); } $('.advanced-search-backdrop').on('click', function() { $(".advanced-search-backdrop").animate({opacity: "0",}, 300 ); $('#map .advanced-search-backdrop').remove(); $(".advanced-search-container").animate({left: "-9999"}, 300 ); $(".advanced-search-container").removeClass('is-visible'); setMapFiltersClick(); }); EESSSearch.dataLayer.sendData( $(this), "filter"); const $main = $(this).closest('main.rp-es-container'); const heroTitle = $main.find('.hero-es-component .hero-title .rp-title')?.text().trim(); const params= { component_description: 'buscador eess', content_name: heroTitle, element_description: 'open filter', element_type: 'button', link_text: 'filtro', is_establishment_filter: true, establishment_type : EESSSearch.getTypeText($(this)) } Repsol.AnalyticsRomProd.clickInteractionRomProd($(this), params); }) } function closeFiltersMenu() { $(".js-close-advanced-search").on("click", function(){ $(".advanced-search-backdrop").animate({opacity: "0",}, 300 ); $('#map .advanced-search-backdrop').remove(); $(".advanced-search-container").animate({left: "-9999"}, 300 ); $(".advanced-search-container").removeClass('is-visible'); if(window.innerWidth <= 1150){ $("body").css("overflow", "auto"); $(".map-content").css('z-index', '5'); } if($('.dropdown').hasClass('is-active')) { $('.dropdown').removeClass('is-active'); } setMapFiltersClick(); }) } function clearAllFiltersParamsURL() { if(myURL.search !== null) { if(myUSP.has('productos')) { myUSP.delete('productos'); } if(myUSP.has('servicios')) { myUSP.delete('servicios'); } if(myUSP.has('promociones')) { myUSP.delete('promociones'); } if(myUSP.has('tarjetas')) { myUSP.delete('tarjetas'); } if(myUSP.has('velocidad')) { myUSP.delete('velocidad'); } if(myUSP.has('conector')) { myUSP.delete('conector'); } if(myUSP.has('tipo')) { myUSP.delete('tipo'); } history.replaceState(null, null, decodeURIComponent(myURL).toString()); } } function removeFilterCarouselAndURL() { $('.filter-row-list').on('click', '.filter-row-item', function() { let idFilter = $(this).data("id").toString(); $(this).remove(); if(selectedFiltersProducts.length > 0) { if(selectedFiltersProductsSaved.includes(idFilter)) { if(selectedFiltersProducts.indexOf(idFilter) === -1) { selectedFiltersProducts.push(idFilter); } else { let filterToRemove = selectedFiltersProducts.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersProducts.splice(filterToRemove, 1); selectedFiltersProductsSaved.splice(filterToRemove, 1); } } } saveFilters(selectedFiltersProducts, selectedFiltersProductsSaved); selectedFiltersProductsSaved = selectedFiltersProductsSaved.filter((item, index) => selectedFiltersProductsSaved.indexOf(item) === index); const filterProductsStrings = selectedFiltersProducts.toString(); myUSP.set('productos', filterProductsStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); checkFiltersFromURL('productos', '#filter-products'); } if(selectedFiltersProducts.length == 0) { selectedFiltersProductsSaved = []; if(myUSP.has('productos')) { deleteFilterURL('productos'); } } if(selectedFiltersServices.length > 0 || selectedSubServices.length > 0) { if(selectedFiltersServicesSaved.includes(idFilter)) { if(selectedFiltersServices.indexOf(idFilter) === -1) { selectedFiltersServices.push(idFilter); } else { let filterToRemove = selectedFiltersServices.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersServices.splice(filterToRemove, 1); selectedFiltersServicesSaved.splice(filterToRemove, 1); } } } if(selectedSubServicesSaved.includes(idFilter)) { if(selectedSubServices.indexOf(idFilter) === -1) { selectedSubServices.push(idFilter); } else { let filterToRemove = selectedSubServices.indexOf(idFilter); if (filterToRemove !== -1) { selectedSubServices.splice(filterToRemove, 1); selectedSubServicesSaved.splice(filterToRemove, 1); } } } saveFilters(selectedFiltersServices, selectedFiltersServicesSaved); selectedFiltersServicesSaved = selectedFiltersServicesSaved.filter((item, index) => selectedFiltersServicesSaved.indexOf(item) === index); saveFilters(selectedSubServices, selectedSubServicesSaved); selectedSubServicesSaved = selectedSubServicesSaved.filter((item, index) => selectedSubServicesSaved.indexOf(item) === index); let filterSubServicesStrings = ''; let filterServicesStrings = selectedFiltersServices.toString(); let subServices = []; if(selectedFiltersServices.length == 0) { filterSubServicesStrings = '041' + '('+ selectedSubServices.toString() +')'; } else { filterSubServicesStrings = ',' + '041' + '('+ selectedSubServices.toString() +')'; } if(selectedSubServices.length > 0) { subServices.push(filterSubServicesStrings) } finalServices = filterServicesStrings.concat(subServices); myUSP.set('servicios', finalServices); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); checkServicesFromURL('servicios', '#filter-services'); } if(selectedFiltersServices.length == 0 ) { selectedFiltersServicesSaved = []; } if(selectedSubServices.length == 0 ) { selectedSubServicesSaved = []; } if(selectedFiltersServices.length == 0 || selectedSubServices.length == 0) { if(myUSP.has('servicios') && myUSP.get('servicios').length == 0) { deleteFilterURL('servicios'); } } if(selectedFiltersPromotions.length > 0) { if(selectedFiltersPromotionsSaved.includes(idFilter)) { if(selectedFiltersPromotions.indexOf(idFilter) === -1) { selectedFiltersPromotions.push(idFilter); } else { let filterToRemove = selectedFiltersPromotions.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersPromotions.splice(filterToRemove, 1); selectedFiltersPromotionsSaved.splice(filterToRemove, 1); } } } saveFilters(selectedFiltersPromotions, selectedFiltersPromotionsSaved); selectedFiltersPromotionsSaved = selectedFiltersPromotionsSaved.filter((item, index) => selectedFiltersPromotionsSaved.indexOf(item) === index); const filterPromotionsStrings = selectedFiltersPromotions.toString(); myUSP.set('promociones', filterPromotionsStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); checkFiltersFromURL('promociones', '#filter-promotions'); } if(selectedFiltersPromotions.length == 0) { selectedFiltersPromotionsSaved = []; if(myUSP.has('promociones') &&myUSP.get('promociones').length == 0) { deleteFilterURL('promociones'); } } if(selectedFiltersCards.length > 0) { if(selectedFiltersCardsSaved.includes(idFilter)) { if(selectedFiltersCards.indexOf(idFilter) === -1) { selectedFiltersCards.push(idFilter); } else { let filterToRemove = selectedFiltersCards.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersCards.splice(filterToRemove, 1); selectedFiltersCardsSaved.splice(filterToRemove, 1); } } } saveFilters(selectedFiltersCards, selectedFiltersCardsSaved); selectedFiltersCardsSaved = selectedFiltersCardsSaved.filter((item, index) => selectedFiltersCardsSaved.indexOf(item) === index); const filterCardsStrings = selectedFiltersCards.toString(); myUSP.set('tarjetas', filterCardsStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); checkFiltersFromURL('tarjetas', '#filter-cards'); } if(selectedFiltersCards.length == 0) { selectedFiltersCardsSaved = []; if(myUSP.has('tarjetas') && myUSP.get('tarjetas').length == 0) { deleteFilterURL('tarjetas'); } } if(selectedFiltersConnector.length > 0) { if(selectedFiltersConnectorSaved.includes(idFilter)) { if(selectedFiltersConnector.indexOf(idFilter) === -1) { selectedFiltersConnector.push(idFilter); } else { let filterToRemove = selectedFiltersConnector.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersConnector.splice(filterToRemove, 1); selectedFiltersConnectorSaved.splice(filterToRemove, 1); } } } saveFilters(selectedFiltersConnector, selectedFiltersConnectorSaved); selectedFiltersConnectorSaved = selectedFiltersConnectorSaved.filter((item, index) => selectedFiltersConnectorSaved.indexOf(item) === index); const filterConnectorStrings = selectedFiltersConnector.toString(); myUSP.set('conector', filterConnectorStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); checkFiltersFromURL('conector', '#filter-recharge'); } if(selectedFiltersConnector.length == 0) { selectedFiltersConnectorSaved = []; if(myUSP.has('conector') && myUSP.get('conector').length == 0) { deleteFilterURL('conector'); } } if(selectedFiltersSpeed.length > 0) { if(selectedFiltersSpeedSaved.includes(idFilter)) { if(selectedFiltersSpeed.indexOf(idFilter) === -1) { selectedFiltersSpeed.push(idFilter); } else { let filterToRemove = selectedFiltersSpeed.indexOf(idFilter); if (filterToRemove !== -1) { selectedFiltersSpeed.splice(filterToRemove, 1); selectedFiltersSpeedSaved.splice(filterToRemove, 1); } } } saveFilters(selectedFiltersSpeed, selectedFiltersSpeedSaved); selectedFiltersSpeedSaved = selectedFiltersSpeedSaved.filter((item, index) => selectedFiltersSpeedSaved.indexOf(item) === index); const filterSpeedStrings = selectedFiltersSpeed.toString(); myUSP.set('velocidad', filterSpeedStrings); history.replaceState(null, null, decodeURIComponent(myURL.search).toString()); checkFiltersFromURL('velocidad', '#filter-recharge'); } if(selectedFiltersSpeed.length == 0) { selectedFiltersSpeedSaved = []; if(myUSP.has('velocidad') && myUSP.get('velocidad').length == 0) { deleteFilterURL('velocidad'); } } if( $(".service-stations button[data-type='Estacion']").hasClass("active")) { setFiltersRowURL(); } else { setFiltersRowRechargeURL(); } if(filtersRow.length == 0) { $('.filter-row').removeClass('visible'); } updateMapWithFilters(); }); if($('.filter-row-list[data-event-analytic]').length == 0){ $('.filter-row-list').attr("data-event-analytic", "true"); $('.filter-row-list').on('click', '.filter-row-item', function() { EESSSearch.dataLayer.sendData($(this), "label"); }); } } function deleteFilterURL(filterName) { myUSP.delete(filterName); history.replaceState(null, null, decodeURIComponent(myURL).toString()); } function checkURLRechargeDataType() { if(myURL.search !== null) { if(myUSP.get('velocidad') || myUSP.get('conector')) { $(".service-stations button[data-type='Recarga']").addClass('active'); $(".service-stations button[data-type='Estacion']").removeClass('active'); $(".service-stations-result").addClass("active"); $(".service-stations-result-number").removeClass("active"); $(".electric-charge-result-number").addClass("active"); setSessionStorageVariable('serviceType', 'recharge'); } } } function setContributedParams() { let contributedParams = $(".map-component").data("default-filter"); if(contributedParams) { myURL.search = contributedParams; setFiltersRowURL(); setFiltersRowRechargeURL(); } } function setSelectedFiltersLength() { if($(".rp-dropdown--checkbox").length){ $('.rp-dropdown--checkbox').each(function(index, value) { let itemsChecked = $(value).find('.dropdown-checkbox:checked'); let itemsCheckedNumber = $(itemsChecked).length; let parent = $(itemsChecked).closest('.rp-dropdown--checkbox').find('.dropdown-toggle-custom'); if(itemsCheckedNumber === 0) { parent = itemsChecked.prevObject[0]; if($(parent).find('.selected-filters-length').length > 0) { $(parent).find('.selected-filters-length').remove(); } buttonSave = $(parent).find('.dropdown-cta-save'); buttonSave.attr('disabled','disabled'); } else { if($(parent).find('.selected-filters-length').length > 0) { $(parent).find('.selected-filters-length').text("(" + itemsCheckedNumber + ")"); } else { $(parent).append("(" + itemsCheckedNumber + ")"); } buttonSave = $(parent).find('.dropdown-cta-save'); buttonSave.removeAttr("disabled"); } }); } } function clearSelectedFiltersLength() { $('.dropdown-checkbox').prop('checked', false); } function setDotFilterButton() { if($('.filter-row-item').length > 0) { if( !$('.advanced-search-btn .icon-rp-Filter').hasClass('notification')) { $('.advanced-search-btn .icon-rp-Filter').addClass('notification'); } } else { if($('.advanced-search-btn .icon-rp-Filter').hasClass('notification')) { $('.advanced-search-btn .icon-rp-Filter').removeClass('notification'); } } }