Mapping=function(){"use strict";function f(n,r,u,f,e,o,s,h){var a,v,y,c,l;f=typeof f!="undefined"?f:"lbs-map";e=typeof e!="undefined"?e:!1;a=Mapping.baseLayers.getAll(f,h);v=Mapping.config.maxBounds;for(y in a)y==n&&(n=a[y]);n==null&&(n=Mapping.baseLayers.getOSM(f));r==null&&(r=v.getCenter());u==null&&(u=6);o==null&&(o=!0);c=L.map(f,{center:r,zoom:u,zoomControl:o,layers:[n],maxBounds:v,maxZoom:16,minZoom:6});s&&(c.dragging.disable(),c.doubleClickZoom.disable(),c.scrollWheelZoom.disable(),c.boxZoom.disable());c.getSize().x<700&&(e=!0);l=L.control.layers(a,null,{collapsed:e}).addTo(c);i[f]=l;L.control.scale().addTo(c);c.attributionControl.setPrefix(!1);c.on("zoomend",function(){sessionStorage["map.zoom"]=c.getZoom()});c.on("moveend",function(){var n=c.getCenter();sessionStorage["map.center"]=JSON.stringify([n.lat,n.lng])});c.on("baselayerchange",function(n){sessionStorage["map.baselayer"]=n.name});c.on("overlayadd",function(n){var t=[];sessionStorage["map.overlays"]!=null&&(t=JSON.parse(sessionStorage["map.overlays"]));t.push(n.layer.options.groupName);sessionStorage["map.overlays"]=JSON.stringify(t)});c.on("overlayremove",function(n){var t=JSON.parse(sessionStorage["map.overlays"]),i=$j.inArray(n.layer.options.groupName,t);i>-1&&t.splice(i,1);sessionStorage["map.overlays"]=JSON.stringify(t)});c.on("resize",function(n){n.newSize.x<700&&n.oldSize.x>=700&&(l.removeFrom(c),l.options.collapsed=!0,l.addTo(c));n.newSize.x>700&&n.oldSize.x<=700&&(l.removeFrom(c),l.options.collapsed=!1,l.addTo(c))});t[f]=c}function e(t){var i=n(t),r=Mapping.config.maxBounds;i.setView(r.getCenter(),i.getMinZoom())}function o(t,i,u){var o=n(u),f=L.marker(t,{draggable:!0,icon:i}).addTo(o),e,s;f.bindPopup("Location");e=r(f);s=L.rectangle(e,{color:"#f00",opacity:.9,weight:1}).addTo(o);f.on("dragend",function(){this.openPopup()});f.on("drag",function(n){var t=n.target.getLatLng();e.contains(t)||(e=r(n.target),s.setBounds(e))});return f}function s(t,i,r,u){var e=n(u),f=L.marker(t,{icon:i});return r&&f.bindPopup(r),f.addTo(e),f}function r(n){var t=n.getLatLng(),e=L.Util.isArray(t)?t[0]:t.lat,o=L.Util.isArray(t)?t[1]:t.lng,s=new LatLon(e,o,CoordTransform.datum.WGS84),h=s.convertDatum(CoordTransform.datum.OSGB36),c=OsGridRef.latLongToOsGrid(h),r=c.toString(6),i=OsGridRef.parse(r);i.easting=i.easting-50;i.northing=i.northing-50;var l=new OsGridRef(i.easting+100,i.northing+100),u=OsGridRef.osGridToLatLong(i).convertDatum(CoordTransform.datum.WGS84),f=OsGridRef.osGridToLatLong(l).convertDatum(CoordTransform.datum.WGS84),a=L.latLngBounds([u.lat,u.lon],[f.lat,f.lon]);return n.getPopup().setContent(t.toString()+"<br/>Grid ref:&nbsp;"+r),L.latLngBounds(a)}function h(t,i){var f=n(t),e=u(t),o=Mapping.overlayLayers.getWalks(i),s=Mapping.overlayLayers.getRoutes(i),h=Mapping.overlayLayers.getEvents(i),r=[],c=$j.url(),l;c.param("layer")!=null&&(sessionStorage["map.overlays"]=JSON.stringify(c.param("layer").split(",")));sessionStorage["map.overlays"]!=null?r=JSON.parse(sessionStorage["map.overlays"]):(r=["walks","routes"],sessionStorage["map.overlays"]=JSON.stringify(r));$j.inArray("walks",r)>-1&&f.addLayer(o);$j.inArray("routes",r)>-1&&f.addLayer(s);$j.inArray("events",r)>-1&&f.addLayer(h);e.addOverlay(o,'<span class="walks">Group walks<\/span>');e.addOverlay(s,'<span class="routes">Routes<\/span>');e.addOverlay(h,'<span class="events">Events<\/span>');i.placename&&i.lat&&i.lng&&i.radius&&(l=L.circle([i.lat,i.lng],Mapping.util.toMetres(i.radius)),f.fitBounds(l.getBounds()))}function c(t){var i=n(t),r=Mapping.overlayGroupLayers.getAreas();i.addLayer(r);i.on("zoomend",Mapping.overlayGroupLayers.onZoomEnd)}function n(n){n=typeof n!="undefined"?n:"lbs-map";return t[n]}function u(n){n=typeof n!="undefined"?n:"lbs-map";return i[n]}var t={},i={};return{initMap:f,resetMap:e,getMap:n,getLayersControl:u,showOverlays:h,showAreaBoundaryOverlay:c,addDraggableMarker:o,addMarker:s}}();Mapping.config=function(){"use strict";var n=L.icon({iconUrl:"/resources/css/images/walks-icon.png",iconRetinaUrl:"/resources/css/images/walks-icon-2x.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41],shadowUrl:"/resources/css/images/marker-shadow.png",shadowRetinaUrl:"/resources/css/images/marker-shadow.png"}),t=L.divIcon({className:"approx-icon round",iconSize:[80,80]}),i=L.icon({iconUrl:"/resources/css/images/round-icon-1x.png",iconRetinaUrl:"/resources/css/images/round-icon-2x.png",iconSize:[25,27],iconAnchor:[12,27],popupAnchor:[1,-20],shadowSize:[41,41],shadowUrl:"/resources/css/images/marker-shadow.png",shadowRetinaUrl:"/resources/css/images/marker-shadow.png"}),r=L.icon({iconUrl:"/resources/css/images/meeting-icon.png",iconRetinaUrl:"/resources/css/images/meeting-icon-2x.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41],shadowUrl:"/resources/css/images/marker-shadow.png",shadowRetinaUrl:"/resources/css/images/marker-shadow.png"}),u=L.icon({iconUrl:"/resources/css/images/routes-icon.png",iconRetinaUrl:"/resources/css/images/routes-icon-2x.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41],shadowUrl:"/resources/css/images/marker-shadow.png",shadowRetinaUrl:"/resources/css/images/marker-shadow.png"}),f=L.icon({iconUrl:"/resources/css/images/events-icon.png",iconRetinaUrl:"/resources/css/images/events-icon-2x.png",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41],shadowUrl:"/resources/css/images/marker-shadow.png",shadowRetinaUrl:"/resources/css/images/marker-shadow.png"}),e=L.icon({iconUrl:"/resources/css/images/postcode-icon.png",iconRetinaUrl:"/resources/css/images/postcode-icon.png",iconSize:[24,18],iconAnchor:[11,18],popupAnchor:[1,-34]}),o=L.icon({iconUrl:"/resources/css/images/area-icon.png",iconRetinaUrl:"/resources/css/images/area-icon-2x.png",iconSize:[35,35],iconAnchor:[17,25],popupAnchor:[1,-17]}),s=L.icon({iconUrl:"/resources/css/images/groups-icon.png",iconRetinaUrl:"/resources/css/images/groups-icon-2x.png",iconSize:[25,27],iconAnchor:[12,20],popupAnchor:[1,-12]}),h=L.icon({iconUrl:"/resources/css/images/sp-groups-icon.png",iconRetinaUrl:"/resources/css/images/sp-groups-icon-2x.png",iconSize:[25,27],iconAnchor:[11,25],popupAnchor:[1,-12]}),c=new L.LatLngBounds(new L.LatLng(45.25111,-17.02327),new L.LatLng(64.610082,7.124874));return{osmURL:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",osTilesUrl:"/tiles/{z}/{x}/{y}.png",osTilesMemberUrl:"/tiles/{z}/{x}/{y}.png?u=1",apiGroupSearch:"/api/lbs/groups",geoserverFeatureUrl:"/LBSData.ashx?type=boundaries",bingKey:"AkD_CLFHRmiumGnu7sGZ4bR7gNGlbEWO3WSSOTASUbMtQ8J4On9WxSbEJkwPO_uy",osmDomains:["a","b","c"],bingDomains:["t0","t1","t2","t3"],geoNamesUser:"ramblers",geoNamesLocationUrl:"https://ws.geonames.net/searchJSON",geoNamesPostcodeUrl:"https://ws.geonames.net/postalCodeSearchJSON",walkIcon:n,walkIconApproximateDetails:t,walkIconApproximate:i,walkIconMeeting:r,routeIcon:u,eventIcon:f,maxBounds:c,postcodeIcon:e,areaIcon:o,groupIcon:s,specialistIcon:h}}();Mapping.baseLayers=function(){"use strict";function c(c,l){return c=typeof c!="undefined"?c:"lbs-map",n[c]==null&&f(c),t[c]==null&&e(c),i[c]==null&&o(c),r[c]==null&&s(c),u[c]==null&&h(c,l),{Bing:n[c],"Bing Aerial":t[c],"Bing Hybrid":i[c],"Open Streetmap":r[c],"Ordnance Survey":u[c]}}function f(t){t=typeof t!="undefined"?t:"lbs-map";var i=n[t];return i==null&&(i=L.bingLayer(Mapping.config.bingKey,{subdomains:Mapping.config.bingDomains,type:"Road"}),n[t]=i),i}function e(n){n=typeof n!="undefined"?n:"lbs-map";var i=t[n];return i==null&&(i=L.bingLayer(Mapping.config.bingKey,{subdomains:Mapping.config.bingDomains,type:"Aerial"}),t[n]=i),i}function o(n){n=typeof n!="undefined"?n:"lbs-map";var t=i[n];return t==null&&(t=L.bingLayer(Mapping.config.bingKey,{subdomains:Mapping.config.bingDomains,type:"AerialWithLabels"}),i[n]=t),t}function s(n){n=typeof n!="undefined"?n:"lbs-map";var t=r[n];return t==null&&(t=L.tileLayer(Mapping.config.osmURL,{attribution:'&copy; <a href="https://osm.org/copyright">OpenStreetMap<\/a> contributors',subdomains:Mapping.config.osmDomains}),r[n]=t),t}function h(n,t){n=typeof n!="undefined"?n:"lbs-map";var i=u[n];return i==null&&(i=L.tileLayer(t==1?Mapping.config.osTilesMemberUrl:Mapping.config.osTilesUrl,{attribution:"&copy; Crown copyright and database rights "+(new Date).getFullYear()+" Ordnance Survey 100033886"}),u[n]=i),i}var n={},t={},i={},r={},u={};return{getAll:c,getBing:f,getBingAerial:e,getBingHybrid:o,getOSM:s,getOSTiles:h}}();Mapping.overlayLayers=function(){"use strict";function s(n){var t='<div class="popup-details">';return n.properties.status=="CANCELLED"&&(t+='<div class="details-cancelled round">CANCELLED<\/div>'),t+='<h4><a href="'+n.properties.url+'">'+n.properties.title+"<\/a><\/h4>",t+='<p class="subtitle">',n.properties.location&&(t+=n.properties.location+", "),n.properties.date&&(t+=n.properties.date+" "),n.properties.group&&(t+="(Group: "+n.properties.group,n.properties.group_invite&&(t+=" / "+n.properties.group_invite),t+=")"),t+='<\/p><p class="subtitle">',n.properties.meeting&&(t+="Meeting time "+n.properties.meeting+(n.properties.time?", ":"")),n.properties.time&&(t+="Start time "+n.properties.time+" "),t+='<\/p><p class="subtitle">',n.properties.difficulty&&(t+=n.properties.difficulty+" "),n.properties.distance_miles>0&&(t+=n.properties.distance_miles+" miles"),n.properties.distance_km>0&&(t+=" / "+n.properties.distance_km+" km"),t+="<\/p><p>",n.properties.summary&&(t+="<p>"+n.properties.summary+"<\/p>"),t+"<\/p><\/div>"}function h(n,t){var i=s(n);t.bindPopup(i);t.on("click",function(n){var t=Mapping.getMap();t.panTo(n.latlng)})}function r(n,t,i){return new L.MarkerClusterGroup({iconCreateFunction:function(t){return L.divIcon({html:"<div><span>"+t.getChildCount()+"<\/span><\/div>",className:"cluster "+n,iconSize:L.point(40,40)})},polygonOptions:t,groupName:i})}function u(n){return new L.GeoJSON(null,{onEachFeature:h,pointToLayer:function(t,i){return t.properties.exact&&t.properties.exact=="False"?L.marker(i,{icon:Mapping.config.walkIconApproximate}):L.marker(i,{icon:n})}})}function c(t){var i=u(Mapping.config.walkIcon);return $j.ajax({url:f,data:t,dataType:"json",ifModified:!0,async:!0}).done(function(t){i.addData(t);n.clearLayers();n.addLayer(i)}),n}function l(n){var i=u(Mapping.config.routeIcon);return $j.ajax({url:e,data:n,dataType:"json",ifModified:!0,async:!0}).done(function(n){i.addData(n);t.clearLayers();t.addLayer(i)}),t}function a(n){var t=u(Mapping.config.eventIcon);return $j.ajax({url:o,data:n,dataType:"json",ifModified:!0,async:!0}).done(function(n){t.addData(n);i.clearLayers();i.addLayer(t)}),i}var f="/LBSData.ashx?type=walks",e="/LBSData.ashx?type=routes",o="/LBSData.ashx?type=events",n=r("walk-cluster",{weight:2,opacity:.8,color:"#007A87",fillColor:"#30AAB7"},"walks"),t=r("route-cluster",{weight:2,opacity:.8,color:"#C75B12",fillColor:"#F78B42"},"routes"),i=r("event-cluster",{weight:2,opacity:.8,color:"#206C49",fillColor:"#509C79"},"events");return{getWalks:c,getRoutes:l,getEvents:a}}();Mapping.overlayGroupLayers=function(){"use strict";function e(n){var t=Mapping.getMap(),i;t.getBoundsZoom(n)>=8?t.fitBounds(n):(i=n.getCenter(),t.setView(i,8))}function o(n,t){return new L.GeoJSON(null,{onEachFeature:t==null?w:null,clickable:t==null?!0:!1,style:n})}function a(){return new L.GeoJSON(null,{onEachFeature:b,pointToLayer:function(n,t){var i;return n.properties.scope=="A"&&(i=new L.Marker(t,{icon:Mapping.config.areaIcon,riseOnHover:!0})),(n.properties.scope=="G"||n.properties.scope=="S")&&(i=new L.Marker(t,{icon:Mapping.config.groupIcon,riseOnHover:!0})),i}})}function v(n){var t=n.target;t.setStyle({color:"#c71235",weight:1,fillOpacity:.3,fill:!0});L.Browser.ie||L.Browser.opera||t.bringToFront()}function y(n){n.target!=r&&n.target.setStyle(u)}function p(){var t=Mapping.getMap(),r=t.getZoom();r>=8?((n==null||i==0)&&(n=s()),t.hasLayer(n)||t.addLayer(n)):r<8&&n!=null&&t.hasLayer(n)&&i>80&&(t.removeLayer(n),i=0);sessionStorage.zoom=r}function w(n,t){var f=Mapping.getMap(),i=$j('<div class="popup-details" />');i.html('<h4><a href="'+n.properties.url+'">'+n.properties.groupName+"<\/a><\/h4>");n.properties.description&&i.append($j("<p>"+n.properties.description+"<\/p>"));i.append($j('<a class="zoom" href="#">Zoom to area<\/a>'));t.bindPopup(i[0]);i.on("click",".zoom",function(n){f.closePopup();e(t.getBounds());n.preventDefault()});t.on({mouseover:v,mouseout:y,click:function(){r!=null&&r.setStyle(u);r=t}})}function b(n,i){var r=Mapping.getMap(),u=$j('<div class="popup-details" />');u.html('<h4><a href="'+n.properties.url+'">'+n.properties.groupName+"<\/a><\/h4>");n.properties.description&&u.append($j("<p>"+n.properties.description+"<\/p>"));i.bindPopup(u[0]);i.on({mouseover:function(){r.hasLayer(t)&&r.removeLayer(t);t=h(n.properties.id);r.addLayer(t)},mouseout:function(){r.hasLayer(t)&&r.removeLayer(t)},click:function(n){r.panTo(n.latlng)},popupclose:function(){r.hasLayer(t)&&r.removeLayer(t)}})}function s(t){var r=Mapping.getMap();return n==null&&(n=a()),$j.ajax({url:l,data:t,dataType:"json",async:!0}).done(function(t){n.clearLayers();i=0;(r.getZoom()>=8||t.features.length<=80)&&(n.addData(t),i=t.features.length,r.hasLayer(n)||r.addLayer(n))}),n}function h(n,t){var i=o(c,t);return $j.ajax({url:f+"&group="+n,dataType:"json",async:!1}).done(function(n){i.addData(n);sessionStorage["map.center"]=JSON.stringify([n.features[0].properties.latitude,n.features[0].properties.longitude]);sessionStorage["map.zoom"]=8}),i}function k(){var n=o(u);return $j.ajax({url:f+"&scope=A",dataType:"json",async:!0}).done(function(t){n.addData(t)}),n}var f=Mapping.config.geoserverFeatureUrl,u={weight:1,color:"#c71235",fillOpacity:.1},c={weight:1,color:"#764093",fillOpacity:.2},l="/LBSData.ashx?type=groups",t,r,n=null,i=0;return{getGroups:s,getGroupBoundary:h,getAreas:k,zoomToFeature:e,onZoomEnd:p}}();Mapping.search=function(){"use strict";function n(n,r,u,f){$j(n).autocomplete({source:function(e,o){var h=Mapping.util.isPostCode(e.term),y=e.term.replace(/\/w/g,""),l=OsGridRef.parse(y),p,a;if(!Mapping.util.isGridRef(y)||isNaN(l.easting)||isNaN(l.northing)){var s,w=[],c=[],v=e.term.trim();$j.when(i(h,v),t(f,v)).done(function(t,i){var f,e;i!=null&&(w=$j.map(i[0],function(n){var t=parseFloat(n.longitude).toFixed(6),i=parseFloat(n.latitude).toFixed(6);return{label:"Group: "+n.name,value:t+"|"+i}}));c=h?t[0].postalCodes:t[0].geonames;c.length>0&&(f=c.filter(function(n){return n.fcl=="A"&&n.fcode=="ADM2"||n.fcl!="A"}),h||(f=f.slice(0,11)),c=$j.map(f,function(n,t){var u=parseFloat(n.lng).toFixed(6),e=parseFloat(n.lat).toFixed(6),r=!1,i;if(!h)for(i=0;i<t;i++)f[i].toponymName==n.toponymName&&f[i].adminName2==n.adminName2&&(r=!0);return{label:h?n.postalCode:n.toponymName+(r==!0?" ("+n.fcodeName+")":"")+(n.adminName2!=""&&n.adminName2!=n.toponymName?", "+n.adminName2:", "+(n.adminName1==""?n.countryName:n.adminName1)),value:u+"|"+e}}));s=w.concat(c);s.length>0?s.length==1&&v.length>2?(e=s[0],$j(u).val(e.value.split("|")[0]),$j(r).val(e.value.split("|")[1]),$j(n).val(e.label),s=null,$j(n).autocomplete("close")):o(s):($j(u).val(""),$j(r).val(""),o([{label:"No location matches found",value:""}]))})}else p=OsGridRef.osGridToLatLong(l),a=p.convertDatum(CoordTransform.datum.WGS84),$j(u).val(a.lon.toFixed(6).toString()),$j(r).val(a.lat.toFixed(6).toString()),o(null)},minLength:2,focus:function(n,t){return t.item.value!=""&&($j(u).val(t.item.value.split("|")[0]),$j(r).val(t.item.value.split("|")[1]),$j(this).val(t.item.label)),!1},select:function(n,t){return $j(u).val(t.item.value.split("|")[0]),$j(r).val(t.item.value.split("|")[1]),$j(this).val(t.item.label),!1},open:function(){$j(this).removeClass("round").addClass("round-top");$j('li:contains("Group:")').last().addClass("last-group")},close:function(){$j(this).removeClass("round-top").addClass("round")}})}function t(n,t){return n?$j.ajax({url:Mapping.config.apiGroupSearch,dataType:"json",data:{groupName:t}}):null}function i(n,t){return $j.ajax({url:n?Mapping.config.geoNamesPostcodeUrl:Mapping.config.geoNamesLocationUrl,dataType:"jsonp",traditional:!0,data:{name_startsWith:n?"":t,postalcode_startsWith:n?Mapping.util.formatPostcode(t.trim()):"",username:Mapping.config.geoNamesUser,country:"GB",maxRows:25,style:"FULL",isReduced:n&&t.length==2||!n?!0:!1,featureClass:["A","H","L","P","R","S","T","V"]}})}return{bindAutocomplete:n}}();Mapping.util=function(){function n(n){if(n.length>7)return n.match(/^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))([0-9]{2})?([0-9]{2})?([0-9]{2})?([0-9]{2})?([0-9]{2})?$/);return!1}function t(n){return/^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1}/i.test(n)}function i(n){return n*1.609344*1e3}function r(n){var t=n.match(/^([A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1})\s*(\d{1}[A-Z]{0,2})$/i);return t?(t.shift(),t.join(" ")):n}return{isGridRef:n,isPostCode:t,toMetres:i,formatPostcode:r}}()