1(()=>{function patchClusterIconRemoval(){if("undefined"===typeof ClusterIcon||ClusterIcon.__voyagerPatched)return;const e=ClusterIcon;ClusterIcon=function(){e.apply(this,arguments);const t=this.remove.bind(this);this.remove=function(){this.hide();if(this.div_&&this.div_.parentNode)this.div_.parentNode.removeChild(this.div_);this.div_=null;t()}};ClusterIcon.prototype=e.prototype;ClusterIcon.__voyagerPatched=true}class MapHelper{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if("undefined"===typeof google||"undefined"===typeof google.maps){console.error("Google Maps API not loaded");return}if(!e.hasOwnProperty("mainMap"))e["mainMap"]={lat:52.7276659,long:-7.604434,type:"preview"};var{lat:t,long:r}=e["mainMap"];var a=[{featureType:"administrative.land_parcel",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"administrative.neighborhood",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"landscape",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"landscape.man_made",elementType:"geometry",stylers:[{color:"#ffffff"}]},{featureType:"landscape.natural",elementType:"geometry",stylers:[{color:"#ffffff"}]},{featureType:"poi",elementType:"geometry",stylers:[{visibility:"off"}]},{featureType:"poi",elementType:"labels.text",stylers:[{visibility:"off"}]},{featureType:"poi.business",stylers:[{visibility:"off"}]},{featureType:"poi.park",stylers:[{color:"#e5fcde"}]},{featureType:"poi.park",elementType:"geometry",stylers:[{color:"#e5ffe7"}]},{featureType:"poi.park",elementType:"labels.text",stylers:[{visibility:"off"}]},{featureType:"road",elementType:"geometry",stylers:[{color:"#ededed"}]},{featureType:"road.arterial",elementType:"geometry",stylers:[{color:"#d1d1d1"},{weight:1.5}]},{featureType:"road.highway",elementType:"geometry",stylers:[{color:"#d1d1d1"},{weight:1.5}]},{featureType:"road.highway",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"road.local",elementType:"geometry",stylers:[{color:"#e3e3e3"},{weight:.5}]},{featureType:"road.local",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"transit",elementType:"geometry",stylers:[{visibility:"off"}]},{featureType:"water",elementType:"geometry",stylers:[{color:"#deeefc"}]},{featureType:"water",elementType:"labels",stylers:[{visibility:"off"}]}];if(e["custom_style"]&&0!==e["custom_style"].length)a=e["custom_style"];if("default"===e["styled"])a="";this.map_data=e;this.container=e.container;this.mapCenter=isNaN(t)||isNaN(r)?{lat:52.7276659,lng:-7.604434}:{lat:parseFloat(t),lng:parseFloat(r)};this.mapZoom="manual"===e["zoom"]?parseInt(this.map_data["zoom_level"]):6;this.mapStyle=e["styled"]?a:"";this.latlngbounds=new google.maps.LatLngBounds;this.infowindow=new google.maps.InfoWindow;this.markerID=0;this.map=null;this.markerElement=[];this.markerArr=[];this.eventTarget=new EventTarget;this.selected_marker=null;this.markerCluster=false;this.map_init_value={};this.init()}sanitizeTitle(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}mapInit(){let e=this;const t={zoom:e.mapZoom,streetViewControl:false,mapTypeControl:false,zoomControlOptions:{position:google.maps.ControlPosition.RIGHT_BOTTOM},center:e.mapCenter,styles:e.mapStyle};if(e.container)e.map=new google.maps.Map(e.container,t);else return false}setMarkerPosition(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;var a=this;var i=new google.maps.Marker({position:e,icon:t,animation:google.maps.Animation.DROP,id:r.id?r.id:a.markerID,map:a.map,content:r});i.isCenterMarker="center_map"===(null===r||void 0===r?void 0:r.type);a.latlngbounds.extend(i.position);a.markerArr.push(i);if(this.map_data["enableInfoWindow"]){i.content=a.markerElement;i.addListener("click",()=>{a.handleMarkerClick(i);a.setValue(i)})}a.markerID++}setValue(e){this.selected_marker=e;this.dispatchMarkerClickEvent()}dispatchMarkerClickEvent(){const e=new CustomEvent("MarkerClick",{detail:this.selected_marker});this.eventTarget.dispatchEvent(e)}addMarkerClickListener(e){this.eventTarget.addEventListener("MarkerClick",e)}markerContent(e){if(!e)return false;var t="";const{title:r,info_image:a,cta_link:i,desc:l}=e;const n=this.sanitizeTitle(r);t+=`<div class="marker ${n}">\n <div class="marker-card">`;if(a)t+=`${a.sizes["map--default--desktop"]?`<div class="voyager-map__marker-card-thumbnail" style="background-image: url(${a.sizes["map--default--desktop"]})"></div>`:""}`;t+=`<div class="marker-card__content">\n ${r?`<h3 class="marker-card__title ${n}">${r}</h3>`:""}\n ${l?`<strong class="marker-card__location">${l} <i class="fas fa-map-marker-alt"></i></strong>`:""}`;if(i&&i.url&&i.title)t+=`${i.url?`<a class="marker-card__link" href="${i.url}" target="${i.target}">${i.title}</a>`:""}`;t+=`</div></div></div>`;return t}initPlaceMarker(e){var t=this;if(void 0===e||null===e&&0===e[0].length)return false;e=e.filter(e=>!(Array.isArray(e)&&0===e.length));t.markerArr=t.removeAllMarkers();if(t.markerCluster&&"function"===typeof t.markerCluster.clearMarkers)t.markerCluster.clearMarkers();e.forEach((e,r)=>{if(!e.lat||!e.long)return false;var a=parseFloat(e.lat),i=parseFloat(e.long),l=t.map_data["mainMap"]["icon"]??"",n=t.map_data["filters"],o=false;t.markerElement=e;if(n&&e.type)if("center_map"===e.type)l=t.map_data["mainMap"]["icon"]??"";else if(n){o=Object.entries(n).some(t=>{let[r]=t;return r===e.type.trim().toLowerCase()});if(o)l=t.map_data.filters[e.type.toLowerCase()].markerIcon??""}if(!l)l=t.map_data["default_marker_icon"];if(a&&i){var s=new google.maps.LatLng(a,i);t.setMarkerPosition(s,l,e)}});t.map.setCenter(t.latlngbounds.getCenter());if("auto"===t.map_data["zoom"]){t.map.fitBounds(t.latlngbounds);t.setAutoZoom()}else t.map.setZoom(parseInt(t.map_data["zoom_level"]));t.mapClusterInit()}setAutoZoom(){var e=this,t=e.getDistance();google.maps.event.addListener(e.map,"zoom_changed",function(){if(!e.map_init_value.zoom_level)e.map_init_value.zoom_level=e.map.getZoom()});e.calculateZoomLevel(t)}
1calculateZoomLevel(e){var t=this;if(t.map_init_value.maxDistance&&t.map_init_value.zoom_level){var r=t.map_init_value.maxDistance,a=t.map_init_value.zoom_level;const i=a-Math.log2(e/r);if(i!==1/0){t.map.setZoom(parseInt(i)-1);t.map.panTo(t.map_init_value.midpoint)}else{t.map.setZoom(14);t.map.panTo(t.markerArr[0].getPosition())}}}getDistance(){var e=this,t=0,r=1/0,a=null,i=null;for(var l=0;l<e.markerArr.length;l++)for(var n=l+1;n<e.markerArr.length;n++){var o=google.maps.geometry.spherical.computeDistanceBetween(e.markerArr[l].getPosition(),e.markerArr[n].getPosition());if(o>t){t=o;a={from:e.markerArr[l],to:e.markerArr[n]}}if(o<r){r=o;i={from:e.markerArr[l],to:e.markerArr[n]}}}if(a){if(!e.map_init_value.maxDistance)e.map_init_value.maxDistance=t.toFixed(2);var s=a.from.getPosition();var m=a.to.getPosition();e.map_init_value.midpoint=google.maps.geometry.spherical.interpolate(s,m,.5)}return t.toFixed(2)}removeAllMarkers(){var e=this;let t=e.markerArr;for(let e=0;e<t.length;e++)t[e].setMap(null);return[]}handleItemsSelection(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:false;var a=this;if("animation"===t)a.findMarker(e).setAnimation(google.maps.Animation.BOUNCE);if("infowindow"===t){let t=a.findMarker(e);a.handleMarkerClick(t,r)}}handleMarkerClick(e,t){if(void 0===(null===e||void 0===e?void 0:e.content))return false;var r=this,a=r.markerContent(e.content);if(t){r.map.setZoom(15);r.map.panTo(e.getPosition())}r.infowindow.close();r.infowindow.setContent(a);r.infowindow.open(r.map,e)}handleItemsRejection(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;var t=this,r=t.findMarker(e);if(r)r.setAnimation(null);else t.infowindow.close()}findMarker(e){var t=this;for(var r=0;r<t.markerArr.length;r++)if(e==t.markerArr[r].id)return t.markerArr[r]}mapClusterInit(){var e=this;let t=e.markerArr.filter(e=>!e.isCenterMarker);let r=e.map_data["cluster_icon"];if(!r)return false;if("undefined"===typeof MarkerClusterer&&"undefined"===typeof window.MarkerClusterer){console.warn("MarkerClusterer not available, skipping clustering");return false}const a="undefined"!==typeof MarkerClusterer?MarkerClusterer:window.MarkerClusterer;let i=[{textColor:"white",url:r,backgroundSize:"44",background:"red",height:44,width:44,fontFamily:"'Open Sans', Arial",fontWeight:"400",textSize:"14",textLineHeight:"44",className:"custom-clustericon-1"}];try{patchClusterIconRemoval();e.markerCluster=new a(e.map,t,{gridSize:44,clusterClass:"cos--cluster",styles:i,minimumClusterSize:2,calculator:function(e,t){if(e.length>=50)return{text:e.length,index:3};if(e.length>=5)return{text:e.length,index:2};return{text:e.length,index:0}}});google.maps.event.addListener(e.markerCluster,"clusterclick",function(){google.maps.event.addListenerOnce(e.map,"idle",function(){e.markerCluster.resetViewport();e.markerCluster.redraw()})})}catch(t){console.warn("Failed to initialize MarkerClusterer:",t);e.markerCluster=false}}init(){this.mapInit();if(!this.map)return;this.initPlaceMarker(this.map_data["markers"])}}window.MapHelper=MapHelper})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.