// 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 =
`
${productNameContent}
${productPriceContent}
${productDateContent}
`;
markerProduct += producto;
});
}
var thisMarkerInfo = marker.markerInfo;
const messageShowStoreHoursIni = showStoreHours(thisMarkerInfo[0]);
var markerContentHeader = "";
if ($(".service-stations button[data-type='Recarga']").hasClass('active')) {
//markerContentHeader =
//``;
if (markerPlatform === 2 || markerPlatform === 3) {
markerContentHeader = ``;
} else if (markerPlatform === 1) {
markerContentHeader = ``;
}
} else {
markerContentHeader =
``;
}
if ($(".service-stations button[data-type='Recarga']").hasClass('active')) {
var markerContentName =
` ${markerInfoName}
`;
} else {
var markerContentName =
` ${markerInfoName}
`;
}
var markerContShowStoreHours = `${messageShowStoreHoursIni}`;
var markerContentPhone =
`
Tel: ${markerInfoPhone}
`;
var markerContentAddress =
`${markerInfoAddress}
`;
if (this.data.telefono === undefined) {
markerContentPhone = '';
}
var markerContentLocation =
`${markerInfoCp}, ${markerInfoCity}
`;
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 = ``;
if (markerPlatform === 2 || markerPlatform === 3) {
markerContentHeader = ``;
} else if (markerPlatform === 1) {
markerContentHeader = ``;
}
//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 = ``;
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 `Abierto Cierra 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 `Cerrado Abre 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}
`;
}
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 += ('
' + thisMarkerInfo[0].markerName + '
');
html += ('
' + thisMarkerInfo[0].markerAddress + '
');
html += ('
' + thisMarkerInfo[0].markerCp + ', ' + thisMarkerInfo[0].markerCity + '
');
if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") {
html += ('
Tel: ' + thisMarkerInfo[0].markerPhone + '
');
}
html += ('
Cómo llegar ');
html += (`
`);
html += ('
');
$('.cards-result').append(html);
}
if ($(".service-stations button[data-type='Recarga']").hasClass("active")) {
html += (' ');
html += ('
' + thisMarkerInfo[0].markerName + '
');
html += ('
' + thisMarkerInfo[0].markerAddress + '
');
html += ('
' + thisMarkerInfo[0].markerCp + ', ' + thisMarkerInfo[0].markerCity + '
');
if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") {
html += ('
Tel: ' + thisMarkerInfo[0].markerPhone + '
');
}
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 += ('
' + thisMarkerInfo[0].markerName + '
');
html += ('
' + thisMarkerInfo[0].markerAddress + '
');
html += ('
' + thisMarkerInfo[0].markerCp + ', ' + thisMarkerInfo[0].markerCity + '
');
if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") {
html += ('
Tel: ' + thisMarkerInfo[0].markerPhone + '
');
}
html += ('
Cómo llegar ');
html += (`
`);
html += ('
');
$('.cards-result').append(html);
} else {
html += (' ');
html += ('
' + thisMarkerInfo[0].markerName + '
');
html += ('
' + thisMarkerInfo[0].markerAddress + '
');
html += ('
' + thisMarkerInfo[0].markerCp + ', ' + thisMarkerInfo[0].markerCity + '
');
if (thisMarkerInfo[0].markerPhone && thisMarkerInfo[0].markerPhone != "undefined") {
html += ('
Tel: ' + thisMarkerInfo[0].markerPhone + '
');
}
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 += ''
+'
'
+' '
+' '
+' '+ data.productos[i].text +' '
+' ';
if(data.productos[i].image && data.productos[i].image != "undefined"){
listFiltersProducts += '
'
+'
'
+'
'
};
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 += ''
+' '
+' '
+' '
+' '+ subService.text +' '
+' '
+'
'
});
} else {
listFiltersServices += ''
+' '
+' '
+' '
+' '+ service.text +' '
+' '
+'
'
}
});
} else {
listFiltersServices += ''
+' '
+' '
+' '
+' '+ service.text +' '
+' '
+'
'
}
});
$('#filter-services .filters-container').html(listFiltersServices);
}
if(data.promociones.length > 0) {
let listFiltersPromotions = "";
for(let i = 0; i < data.promociones.length; i++) {
listFiltersPromotions += ''
+' '
+' '
+' '
+' '+ data.promociones[i].text +' '
+' '
+'
'
}
$('#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 += ''
+' '
+' '
+' '
+' '+ data.tarjetas[i].text +' '
+' '
+'
'
}
}
$('#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 += ''
+' '
+' '
+' '+ data.tipoRecarga.conector[i].name+' '
+' '
}
let listFiltersRechargeVelocidad = ""
for(let i = 0; i < data.tipoRecarga.velocidad.length; i++) {
if(data.tipoRecarga.velocidad[i].text){
listFiltersRechargeVelocidad += ''
+' '
+' '
+' '+ data.tipoRecarga.velocidad[i].text+' '
+' '
}
}
$('#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');
}
}
}