!function(t){if("function"==typeof define&&define.amd)define(["leaflet"],t);else if("undefined"!=typeof module)module.exports=t(require("leaflet"));else{if(void 0===window.L)throw new Error("Leaflet must be loaded first");t(window.L)}}(function(t){t.Control.PolylineMeasure=t.Control.extend({options:{position:"topleft",unit:"metres",clearMeasurementsOnStop:!0,showBearings:!1,bearingTextIn:"In",bearingTextOut:"Out",tooltipTextDraganddelete:"Click and drag to <b>move point</b><br>Press ALT-key and click to <b>delete point</b>",tooltipTextResume:"<br>Press CTRL-key and click to <b>resume line</b>",tooltipTextAdd:"Press CTRL-key and click to <b>add point</b>",measureControlTitleOn:"Turn on PolylineMeasure",measureControlTitleOff:"Turn off PolylineMeasure",measureControlLabel:"&#8614;",measureControlClasses:[],showClearControl:!1,clearControlTitle:"Clear Measurements",clearControlLabel:"&times;",clearControlClasses:[],showUnitControl:!1,unitControlTitle:{text:"Change Units",metres:"metres",landmiles:"land miles",nauticalmiles:"nautical miles"},unitControlLabel:{metres:"m",kilometres:"km",feet:"ft",landmiles:"mi",nauticalmiles:"nm"},tempLine:{color:"#00f",weight:2},fixedLine:{color:"#006",weight:2},startCircle:{color:"#000",weight:1,fillColor:"#0f0",fillOpacity:1,radius:3},intermedCircle:{color:"#000",weight:1,fillColor:"#ff0",fillOpacity:1,radius:3},currentCircle:{color:"#000",weight:1,fillColor:"#f0f",fillOpacity:1,radius:6},endCircle:{color:"#000",weight:1,fillColor:"#f00",fillOpacity:1,radius:3}},_createControl:function(e,i,o,r,s,n){var a=document.createElement("a");return a.innerHTML=e,a.setAttribute("title",i),o.forEach(function(t){a.classList.add(t)}),t.DomEvent.on(a,"click",s,n),r.appendChild(a),a},onAdd:function(e){this._container=document.createElement("div"),this._container.classList.add("leaflet-bar"),t.DomEvent.disableClickPropagation(this._container);var i=this.options.measureControlTitleOn,o=this.options.measureControlLabel,r=this.options.measureControlClasses;if(-1!=o.indexOf("&")&&r.push("polyline-measure-unicode-icon"),this._arrPolylines=[],this._measureControl=this._createControl(o,i,r,this._container,this._toggleMeasure,this),this._measureControl.setAttribute("id","polyline-measure-control"),this.options.showClearControl){i=this.options.clearControlTitle,o=this.options.clearControlLabel,r=this.options.clearControlClasses;-1!=o.indexOf("&")&&r.push("polyline-measure-unicode-icon"),this._clearMeasureControl=this._createControl(o,i,r,this._container,this._clearAllMeasurements,this),this._clearMeasureControl.classList.add("polyline-measure-clearControl")}if(this.options.showUnitControl){if("metres"==this.options.unit)o=this.options.unitControlLabel.metres,i=this.options.unitControlTitle.text+" ["+this.options.unitControlTitle.metres+"]";else if("landmiles"==this.options.unit)o=this.options.unitControlLabel.landmiles,i=this.options.unitControlTitle.text+" ["+this.options.unitControlTitle.landmiles+"]";else o=this.options.unitControlLabel.nauticalmiles,i=this.options.unitControlTitle.text+" ["+this.options.unitControlTitle.nauticalmiles+"]";r=[];this._unitControl=this._createControl(o,i,r,this._container,this._changeUnit,this),this._unitControl.setAttribute("id","unitControlId")}return this._container},onRemove:function(){this._measuring&&this._toggleMeasure()},_toggleMeasure:function(){this._measuring=!this._measuring,this._measuring?(this._measureControl.classList.add("polyline-measure-controlOnBgColor"),this._measureControl.title=this.options.measureControlTitleOff,this._oldCursor=this._map._container.style.cursor,this._map._container.style.cursor="crosshair",this._doubleClickZoom=this._map.doubleClickZoom.enabled(),this._map.doubleClickZoom.disable(),this._layerPaint||(this._layerPaint=t.layerGroup().addTo(this._map)),this._map.on("mousemove",this._mouseMove,this),this._map.on("click",this._mouseClick,this),t.DomEvent.on(document,"keydown",this._onKeyDown,this),this._resetPathVariables()):(this._measureControl.classList.remove("polyline-measure-controlOnBgColor"),this._measureControl.title=this.options.measureControlTitleOn,this._map._container.style.cursor=this._oldCursor,this._map.off("mousemove",this._mouseMove,this),this._map.off("click",this._mouseClick,this),t.DomEvent.off(document,"keydown",this._onKeyDown,this),this._doubleClickZoom&&this._map.doubleClickZoom.enable(),this.options.clearMeasurementsOnStop&&this._layerPaint&&this._clearAllMeasurements(),0!==this._cntCircle&&this._finishPolylinePath())},_clearAllMeasurements:function(){void 0!==this._cntCircle&&0!==this._cntCircle&&this._finishPolylinePath(),this._layerPaint&&this._layerPaint.clearLayers(),this._arrPolylines=[]},_changeUnit:function(){"metres"==this.options.unit?(this.options.unit="landmiles",document.getElementById("unitControlId").innerHTML=this.options.unitControlLabel.landmiles,this._unitControl.title=this.options.unitControlTitle.text+" ["+this.options.unitControlTitle.landmiles+"]"):"landmiles"==this.options.unit?(this.options.unit="nauticalmiles",document.getElementById("unitControlId").innerHTML=this.options.unitControlLabel.nauticalmiles,this._unitControl.title=this.options.unitControlTitle.text+" ["+this.options.unitControlTitle.nauticalmiles+"]"):(this.options.unit="metres",document.getElementById("unitControlId").innerHTML=this.options.unitControlLabel.metres,this._unitControl.title=this.options.unitControlTitle.text+" ["+this.options.unitControlTitle.metres+"]"),this._arrPolylines.map(function(t){var e=0;t.circleCoords.map(function(i,o){if(o>=1){var r=t.circleCoords[o-1].distanceTo(t.circleCoords[o]);e+=r,this._updateTooltip(t.tooltips[o],t.tooltips[o-1],e,r,t.circleCoords[o-1],t.circleCoords[o])}}.bind(this))}.bind(this))},_onKeyDown:function(t){if(27===t.keyCode){if(!0===resumeFirstpointFlag){resumeFirstpointFlag=!1,this._map.off("mousemove",this._resumeFirstpointMousemove,this),this._map.off("click",this._resumeFirstpointClick,this),this._layerPaint.removeLayer(this._rubberlinePath2),this._layerPaint.removeLayer(tooltipNew),this._arrPolylines[lineNr].circleMarkers[0].setStyle(this.options.startCircle),text="";var e=0;return!0===this.options.showBearings&&(text=this.options.bearingTextIn+":---°<br>"+this.options.bearingTextOut+":---°"),text+='<div class="polyline-measure-tooltip-difference">+0</div>',text+='<div class="polyline-measure-tooltip-total">0</div>',this._arrPolylines[lineNr].tooltips[0]._icon.innerHTML=text,this._arrPolylines[lineNr].tooltips.map(function(t,i){if(i>=1){var o=this._arrPolylines[lineNr].circleCoords[i-1].distanceTo(this._arrPolylines[lineNr].circleCoords[i]),r=this._arrPolylines[lineNr].circleCoords[i-1],s=this._arrPolylines[lineNr].circleCoords[i];e+=o;var n=this._arrPolylines[lineNr].tooltips[i-1];this._updateTooltip(t,n,e,o,r,s)}}.bind(this)),void this._map.on("mousemove",this._mouseMove,this)}this._currentLine?this._finishPolylinePath(t):this._toggleMeasure()}},_getDistance:function(t){var e=t;return"nauticalmiles"===this.options.unit?(unit=this.options.unitControlLabel.nauticalmiles,e>=1852e3?e=(e/1852).toFixed(0):e>=185200?e=(e/1852).toFixed(1):e>=1852?e=(e/1852).toFixed(2):(e=(e/.3048).toFixed(0),unit=this.options.unitControlLabel.feet)):"landmiles"===this.options.unit?(unit=this.options.unitControlLabel.landmiles,e>=1609344?e=(e/1609.344).toFixed(0):e>=160934.4?e=(e/1609.344).toFixed(1):e>=1609.344?e=(e/1609.344).toFixed(2):(e=(e/.3048).toFixed(0),unit=this.options.unitControlLabel.feet)):(unit=this.options.unitControlLabel.kilometres,e>=1e6?e=(e/1e3).toFixed(0):e>=1e5?e=(e/1e3).toFixed(1):e>=1e3?e=(e/1e3).toFixed(2):(e=e.toFixed(1),unit=this.options.unitControlLabel.metres)),{value:e,unit:unit}},_polylineArc:function(t,e){function i(t){function e(t){return Math[t>0?"floor":"ceil"](t)}return A=Math.sin((1-t)*d)/Math.sin(d),B=Math.sin(t*d)/Math.sin(d),x=A*Math.cos(o)*Math.cos(r)+B*Math.cos(s)*Math.cos(n),y=A*Math.cos(o)*Math.sin(r)+B*Math.cos(s)*Math.sin(n),z=A*Math.sin(o)+B*Math.sin(s),latInterpol=180/Math.PI*Math.atan2(z,Math.sqrt(Math.pow(x,2)+Math.pow(y,2))),lngInterpol=180/Math.PI*Math.atan2(y,x),diff=lngInterpol-180*r/Math.PI,diff<0?lngInterpol-=360*e((diff-180)/360):lngInterpol-=360*e((diff+180)/360),[latInterpol,lngInterpol]}var o=t.lat,r=t.lng,s=e.lat,n=e.lng;return o=o*Math.PI/180,r=r*Math.PI/180,s=s*Math.PI/180,n=n*Math.PI/180,d=2*Math.asin(Math.sqrt(Math.pow(Math.sin((o-s)/2),2)+Math.cos(o)*Math.cos(s)*Math.pow(Math.sin((r-n)/2),2))),0===d?arrLatLngs=[[o,r]]:(arcpoints=100,arrLatLngs=function(t){arrArcCoords=[];for(var e=1/(t-1),o=0;o<t;o++){var r=i(e*o);arrArcCoords.push(r)}return arrArcCoords}(arcpoints)),arrLatLngs},_updateTooltip:function(t,e,i,o,r,s){calcAngle=function(t,e,i){var o=t.lat/180*Math.PI,r=e.lat/180*Math.PI,s=t.lng/180*Math.PI,n=e.lng/180*Math.PI,a=Math.sin(n-s)*Math.cos(r),l=Math.cos(o)*Math.sin(r)-Math.sin(o)*Math.cos(r)*Math.cos(n-s);if("inbound"===i)var c=(180*Math.atan2(a,l)/Math.PI+180).toFixed(0);else c=(180*Math.atan2(a,l)/Math.PI+360).toFixed(0);return c%360};var n=calcAngle(s,r,"inbound"),a=calcAngle(r,s,"outbound"),l=this._getDistance(i),c=this._getDistance(o),p="";if(c.value>0&&(!0===this.options.showBearings&&(p=this.options.bearingTextIn+": "+n+"°<br>"+this.options.bearingTextOut+":---°"),p+='<div class="polyline-measure-tooltip-difference">+'+c.value+"&nbsp;"+c.unit+"</div>"),p+='<div class="polyline-measure-tooltip-total">'+l.value+"&nbsp;"+l.unit+"</div>",t._icon.innerHTML=p,!0===this.options.showBearings&&e){textPrev=e._icon.innerHTML;var h=new RegExp(this.options.bearingTextOut+".*°");textReplace=textPrev.replace(h,this.options.bearingTextOut+": "+a+"°"),e._icon.innerHTML=textReplace}},_drawArrow:function(e){var i=e[48],o=e[49],r=o[1]-i[1],s=o[0]-i[0],n=[i[0]+s/2,i[1]+r/2],a=57.29578*-Math.atan2(s,r);return iconArrow=t.divIcon({className:"",iconSize:[16,16],iconAnchor:[8,8],html:"<div style = 'font-size: 16px; line-height: 16px; vertical-align:top; transform: rotate("+a+"deg)'>&#x27a4;</div>"}),newArrowMarker=t.marker(n,{icon:iconArrow}).addTo(this._layerPaint),newArrowMarker.bindTooltip(this.options.tooltipTextAdd,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}),newArrowMarker.on("click",this._clickedArrow,this),newArrowMarker},_mouseMove:function(t){var e=t.latlng;if(this._map.on("click",this._mouseClick,this),e&&this._currentLine){var i=this._currentLine.circleCoords.last();this._rubberlinePath.setLatLngs(this._polylineArc(i,e));var o=this._currentLine.tooltips.last(),r=this._currentLine.tooltips.slice(-2,-1)[0];o.setLatLng(e);var s=e.distanceTo(i);this._updateTooltip(o,r,this._currentLine.distance+s,s,i,e)}},_startLine:function(e){var i=t.divIcon({className:"polyline-measure-tooltip",iconAnchor:[-4,-4]}),o=function(){return this.slice(-1)[0]};this._rubberlinePath=t.polyline([],{color:this.options.tempLine.color,weight:this.options.tempLine.weight,interactive:!1,dashArray:"8,8"}).addTo(this._layerPaint).bringToBack();var r=this;this._currentLine={id:0,circleCoords:[],circleMarkers:[],arrowMarkers:[],tooltips:[],distance:0,polylinePath:t.polyline([],{color:this.options.fixedLine.color,weight:this.options.fixedLine.weight,interactive:!1}).addTo(this._layerPaint).bringToBack(),handleMarkers:function(e){var i=this.circleMarkers.last();i&&(i.off("click",r._finishPolylinePath,r),1===this.circleMarkers.length?(i.setStyle(r.options.startCircle),i.unbindTooltip(),i.bindTooltip(r.options.tooltipTextDraganddelete+r.options.tooltipTextResume,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"})):i.setStyle(r.options.intermedCircle));var o=new t.CircleMarker(e,r.options.currentCircle).addTo(r._layerPaint);o.bindTooltip(r.options.tooltipTextDraganddelete,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}),o.cntLine=r._currentLine.id,o.cntCircle=r._cntCircle,r._cntCircle++,o.on("mousedown",r._dragCircle,r),o.on("click",r._finishPolylinePath,r),this.circleMarkers.push(o)},getNewToolTip:function(e){return t.marker(e,{icon:i,interactive:!1})},addPoint:function(t){var e=this.circleCoords.last();if(!e||!e.equals(t)){if(this.circleCoords.push(t),this.circleCoords.length>1){var i=r._polylineArc(e,t);this.circleCoords.length>2&&i.shift(),this.polylinePath.setLatLngs(this.polylinePath.getLatLngs().concat(i));var o=r._drawArrow(i);o.cntLine=r._currentLine.id,o.cntArrow=r._cntCircle-1,r._currentLine.arrowMarkers.push(o),distanceSegment=e.distanceTo(t),this.distance+=distanceSegment;var s=r._currentLine.tooltips.last(),n=r._currentLine.tooltips.slice(-1,-2)[0];r._updateTooltip(s,n,this.distance,distanceSegment,e,t)}s&&s.setLatLng(t);var a=this.getNewToolTip(t);a.addTo(r._layerPaint),this.tooltips.push(a),this.handleMarkers(t)}},finalize:function(){if(r._layerPaint.removeLayer(this.tooltips.last()),this.tooltips.pop(),r._layerPaint.removeLayer(r._rubberlinePath),this.circleCoords.length>1){this.tooltips.last()._icon.classList.add("polyline-measure-tooltip-end");var t=this.circleMarkers.last();t.setStyle(r.options.endCircle),t.unbindTooltip(),t.bindTooltip(r.options.tooltipTextDraganddelete+r.options.tooltipTextResume,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}),t.off("click",r._finishPolylinePath,r),t.on("click",r._resumePolylinePath,r),r._arrPolylines.push(this)}else r._layerPaint.removeLayer(this.circleMarkers.last());r._resetPathVariables()}},firstTooltip=t.marker(e,{icon:i,interactive:!1}),firstTooltip.addTo(this._layerPaint),text="",!0===this.options.showBearings&&(text=this.options.bearingTextIn+":---°<br>"+this.options.bearingTextOut+":---°"),text+='<div class="polyline-measure-tooltip-difference">+0</div>',text+='<div class="polyline-measure-tooltip-total">0</div>',firstTooltip._icon.innerHTML=text,this._currentLine.tooltips.push(firstTooltip),this._currentLine.circleCoords.last=o,this._currentLine.tooltips.last=o,this._currentLine.circleMarkers.last=o,this._currentLine.id=this._arrPolylines.length},_mouseClick:function(t){!t.latlng||this._finishCircleScreencoords&&this._finishCircleScreencoords.equals(t.containerPoint)||(this._currentLine||this._startLine(t.latlng),this._currentLine.addPoint(t.latlng))},_finishPolylinePath:function(t){this._currentLine.finalize(),t&&(this._finishCircleScreencoords=t.containerPoint)},_resumePolylinePath:function(e){if(!0===e.originalEvent.ctrlKey){this._currentLine=this._arrPolylines[e.target.cntLine],this._rubberlinePath=t.polyline([],{color:this.options.tempLine.color,weight:this.options.tempLine.weight,interactive:!1,dashArray:"8,8"}).addTo(this._layerPaint).bringToBack(),this._currentLine.tooltips.last()._icon.classList.remove("polyline-measure-tooltip-end");var i=this._currentLine.getNewToolTip(e.latlng);i.addTo(this._layerPaint),this._currentLine.tooltips.push(i),this._currentLine.circleMarkers.last().unbindTooltip(),this._currentLine.circleMarkers.last().bindTooltip(this.options.tooltipTextDraganddelete,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}),this._currentLine.circleMarkers.last().setStyle(this.options.currentCircle),this._cntCircle=this._currentLine.circleCoords.length}},_resetPathVariables:function(){this._cntCircle=0,this._currentLine=null},_clickedArrow:function(e){if(e.originalEvent.ctrlKey){var i=e.target.cntLine,o=e.target.cntArrow;this._arrPolylines[i].arrowMarkers[o].removeFrom(this._layerPaint);var r=new t.CircleMarker(e.latlng,this.options.intermedCircle).addTo(this._layerPaint);r.cntLine=i,r.on("mousedown",this._dragCircle,this),r.bindTooltip(this.options.tooltipTextDraganddelete,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}),this._arrPolylines[i].circleMarkers.splice(o+1,0,r),this._arrPolylines[i].circleMarkers.map(function(t,e){t.cntCircle=e}),this._arrPolylines[i].circleCoords.splice(o+1,0,e.latlng),lineCoords=this._arrPolylines[i].polylinePath.getLatLngs();var s=this._polylineArc(this._arrPolylines[i].circleCoords[o],e.latlng);s.pop();var n=this._polylineArc(e.latlng,this._arrPolylines[i].circleCoords[o+2]);Array.prototype.splice.apply(lineCoords,[o*(arcpoints-1),arcpoints].concat(s,n)),this._arrPolylines[i].polylinePath.setLatLngs(lineCoords),arrowMarker=this._drawArrow(s),this._arrPolylines[i].arrowMarkers[o]=arrowMarker,arrowMarker=this._drawArrow(n),this._arrPolylines[i].arrowMarkers.splice(o+1,0,arrowMarker),this._arrPolylines[i].arrowMarkers.map(function(t,e){t.cntLine=i,t.cntArrow=e}),tooltipNew=t.marker(e.latlng,{icon:t.divIcon({className:"polyline-measure-tooltip",iconAnchor:[-4,-4]}),interactive:!1}),tooltipNew.addTo(this._layerPaint),this._arrPolylines[i].tooltips.splice(o+1,0,tooltipNew);var a=0;this._arrPolylines[i].tooltips.map(function(t,e){if(e>=1){var o=this._arrPolylines[i].circleCoords[e-1].distanceTo(this._arrPolylines[i].circleCoords[e]),r=this._arrPolylines[i].circleCoords[e-1],s=this._arrPolylines[i].circleCoords[e];a+=o;var n=this._arrPolylines[i].tooltips[e-1];this._updateTooltip(t,n,a,o,r,s)}}.bind(this))}},_dragCircleMouseup:function(){0===circleNr||circleNr===this._arrPolylines[lineNr].circleCoords.length-1?this._e1.target.bindTooltip(this.options.tooltipTextDraganddelete+this.options.tooltipTextResume,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}):this._e1.target.bindTooltip(this.options.tooltipTextDraganddelete,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}),this._resetPathVariables(),this._map.off("mousemove",this._dragCircleMousemove,this),this._map.dragging.enable(),this._map.on("mousemove",this._mouseMove,this),this._map.off("mouseup",this._dragCircleMouseup,this)},_dragCircleMousemove:function(e){var i=e.latlng.lat,o=e.latlng.lng,r=i-this._mouseStartingLat,s=o-this._mouseStartingLng,n=t.latLng(this._circleStartingLat+r,this._circleStartingLng+s);lineNr=this._e1.target.cntLine,circleNr=this._e1.target.cntCircle,this._e1.target.setLatLng(n),this._e1.target.unbindTooltip(),this._arrPolylines[lineNr].circleCoords[circleNr]=n,lineCoords=this._arrPolylines[lineNr].polylinePath.getLatLngs(),circleNr>=1&&(newLineSegment1=this._polylineArc(this._arrPolylines[lineNr].circleCoords[circleNr-1],n),Array.prototype.splice.apply(lineCoords,[(circleNr-1)*(arcpoints-1),arcpoints].concat(newLineSegment1)),arrowMarker=this._drawArrow(newLineSegment1),arrowMarker.cntLine=lineNr,arrowMarker.cntArrow=circleNr-1,this._arrPolylines[lineNr].arrowMarkers[circleNr-1].removeFrom(this._layerPaint),this._arrPolylines[lineNr].arrowMarkers[circleNr-1]=arrowMarker),circleNr<this._arrPolylines[lineNr].circleCoords.length-1&&(newLineSegment2=this._polylineArc(n,this._arrPolylines[lineNr].circleCoords[circleNr+1]),Array.prototype.splice.apply(lineCoords,[circleNr*(arcpoints-1),arcpoints].concat(newLineSegment2)),arrowMarker=this._drawArrow(newLineSegment2),arrowMarker.cntLine=lineNr,arrowMarker.cntArrow=circleNr,this._arrPolylines[lineNr].arrowMarkers[circleNr].removeFrom(this._layerPaint),this._arrPolylines[lineNr].arrowMarkers[circleNr]=arrowMarker),this._arrPolylines[lineNr].polylinePath.setLatLngs(lineCoords),circleNr>=0&&this._arrPolylines[lineNr].tooltips[circleNr].setLatLng(n);var a=0;this._arrPolylines[lineNr].tooltips.map(function(t,e){if(e>=1){var i=this._arrPolylines[lineNr].circleCoords[e-1].distanceTo(this._arrPolylines[lineNr].circleCoords[e]),o=this._arrPolylines[lineNr].circleCoords[e-1],r=this._arrPolylines[lineNr].circleCoords[e];a+=i;var s=this._arrPolylines[lineNr].tooltips[e-1];this._updateTooltip(t,s,a,i,o,r)}}.bind(this)),this._map.on("mouseup",this._dragCircleMouseup,this)},_resumeFirstpointMousemove:function(t){this._map.on("click",this._resumeFirstpointClick,this);var e=t.latlng;this._rubberlinePath2.setLatLngs(this._polylineArc(e,currentCircleCoords)),tooltipNew.setLatLng(e);var i=0,o=e.distanceTo(this._arrPolylines[lineNr].circleCoords[0]),r=e,s=this._arrPolylines[lineNr].circleCoords[0];i+=o;var n=tooltipNew,a=this._arrPolylines[lineNr].tooltips[0];this._updateTooltip(a,n,i,o,r,s),this._arrPolylines[lineNr].tooltips.map(function(t,e){if(e>=1){var o=this._arrPolylines[lineNr].circleCoords[e-1].distanceTo(this._arrPolylines[lineNr].circleCoords[e]),r=this._arrPolylines[lineNr].circleCoords[e-1],s=this._arrPolylines[lineNr].circleCoords[e];i+=o;var n=this._arrPolylines[lineNr].tooltips[e-1];this._updateTooltip(t,n,i,o,r,s)}}.bind(this))},_resumeFirstpointClick:function(e){resumeFirstpointFlag=!1,this._map.off("mousemove",this._resumeFirstpointMousemove,this),this._map.off("click",this._resumeFirstpointClick,this),this._layerPaint.removeLayer(this._rubberlinePath2),this._arrPolylines[lineNr].circleMarkers[0].setStyle(this.options.intermedCircle),this._arrPolylines[lineNr].circleMarkers[0].unbindTooltip(),this._arrPolylines[lineNr].circleMarkers[0].bindTooltip(this.options.tooltipTextDraganddelete,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"});var i=new t.CircleMarker(e.latlng,this.options.startCircle).addTo(this._layerPaint);i.cntLine=lineNr,i.cntCircle=0,i.on("mousedown",this._dragCircle,this),i.bindTooltip(this.options.tooltipTextDraganddelete+this.options.tooltipTextResume,{direction:"top",opacity:.7,className:"polyline-measure-popupTooltip"}),this._arrPolylines[lineNr].circleMarkers.unshift(i),this._arrPolylines[lineNr].circleMarkers.map(function(t,e){t.cntCircle=e}),this._arrPolylines[lineNr].circleCoords.unshift(e.latlng);var o=this._polylineArc(e.latlng,currentCircleCoords);arrowMarker=this._drawArrow(o),this._arrPolylines[lineNr].arrowMarkers.unshift(arrowMarker),this._arrPolylines[lineNr].arrowMarkers.map(function(t,e){t.cntLine=lineNr,t.cntArrow=e}),o.pop(),this._arrPolylines[lineNr].polylinePath.setLatLngs(o.concat(this._arrPolylines[lineNr].polylinePath.getLatLngs())),this._arrPolylines[lineNr].tooltips.unshift(tooltipNew),this._map.on("mousemove",this._mouseMove,this)},_dragCircle:function(e){if(e.originalEvent.ctrlKey)return this._map.off("click",this._mouseClick,this),void(0===e.target.cntCircle&&(resumeFirstpointFlag=!0,lineNr=e.target.cntLine,circleNr=e.target.cntCircle,currentCircleCoords=e.latlng,this._arrPolylines[lineNr].circleMarkers[0].setStyle(this.options.currentCircle),this._rubberlinePath2=t.polyline([],{color:this.options.tempLine.color,weight:this.options.tempLine.weight,interactive:!1,dashArray:"8,8"}).addTo(this._layerPaint).bringToBack(),tooltipNew=t.marker(currentCircleCoords,{icon:t.divIcon({className:"polyline-measure-tooltip",iconAnchor:[-4,-4]}),interactive:!1}),tooltipNew.addTo(this._layerPaint),text="",!0===this.options.showBearings&&(text=text+this.options.bearingTextIn+":---°<br>"+this.options.bearingTextOut+":---°"),text+='<div class="polyline-measure-tooltip-difference">+0</div>',text+='<div class="polyline-measure-tooltip-total">0</div>',tooltipNew._icon.innerHTML=text,this._map.off("mousemove",this._mouseMove,this),this._map.on("mousemove",this._resumeFirstpointMousemove,this)));if(e.originalEvent.altKey){lineNr=e.target.cntLine,circleNr=e.target.cntCircle,this._arrPolylines[lineNr].circleCoords.splice(circleNr,1),this._arrPolylines[lineNr].circleMarkers[circleNr].removeFrom(this._layerPaint),this._arrPolylines[lineNr].circleMarkers.splice(circleNr,1),this._arrPolylines[lineNr].circleMarkers.map(function(t,e){t.cntCircle=e}),lineCoords=this._arrPolylines[lineNr].polylinePath.getLatLngs(),this._arrPolylines[lineNr].tooltips[circleNr].removeFrom(this._layerPaint),this._arrPolylines[lineNr].tooltips.splice(circleNr,1),0===circleNr?(this._arrPolylines[lineNr].circleMarkers[0].setStyle(this.options.startCircle),lineCoords.splice(0,arcpoints-1),this._arrPolylines[lineNr].arrowMarkers[circleNr].removeFrom(this._layerPaint),this._arrPolylines[lineNr].arrowMarkers.splice(0,1),text="",!0===this.options.showBearings&&(text=this.options.bearingTextIn+":---°<br>"+this.options.bearingTextOut+":---°"),text+='<div class="polyline-measure-tooltip-difference">+0</div>',text+='<div class="polyline-measure-tooltip-total">0</div>',this._arrPolylines[lineNr].tooltips[0]._icon.innerHTML=text):circleNr===this._arrPolylines[lineNr].circleCoords.length?(this._arrPolylines[lineNr].circleMarkers.slice(-1)[0].setStyle(this.options.endCircle),this._arrPolylines[lineNr].tooltips.slice(-1)[0]._icon.classList.add("polyline-measure-tooltip-end"),lineCoords.splice(-(arcpoints-1),arcpoints-1),this._arrPolylines[lineNr].arrowMarkers[circleNr-1].removeFrom(this._layerPaint),this._arrPolylines[lineNr].arrowMarkers.splice(-1,1)):(newLineSegment=this._polylineArc(this._arrPolylines[lineNr].circleCoords[circleNr-1],this._arrPolylines[lineNr].circleCoords[circleNr]),Array.prototype.splice.apply(lineCoords,[(circleNr-1)*(arcpoints-1),2*arcpoints-1].concat(newLineSegment)),this._arrPolylines[lineNr].arrowMarkers[circleNr-1].removeFrom(this._layerPaint),this._arrPolylines[lineNr].arrowMarkers[circleNr].removeFrom(this._layerPaint),arrowMarker=this._drawArrow(newLineSegment),this._arrPolylines[lineNr].arrowMarkers.splice(circleNr-1,2,arrowMarker)),this._arrPolylines[lineNr].polylinePath.setLatLngs(lineCoords),this._arrPolylines[lineNr].arrowMarkers.map(function(t,e){t.cntLine=lineNr,t.cntArrow=e});var i=0;this._arrPolylines[lineNr].tooltips.map(function(t,e){if(e>=1){var o=this._arrPolylines[lineNr].circleCoords[e-1].distanceTo(this._arrPolylines[lineNr].circleCoords[e]),r=this._arrPolylines[lineNr].circleCoords[e-1],s=this._arrPolylines[lineNr].circleCoords[e];i+=o;var n=this._arrPolylines[lineNr].tooltips[e-1];this._updateTooltip(t,n,i,o,r,s)}}.bind(this))}else this._e1=e,this._measuring&&0===this._cntCircle&&(this._map.dragging.disable(),this._map.off("mousemove",this._mouseMove,this),this._map.off("click",this._mouseClick,this),this._mouseStartingLat=e.latlng.lat,this._mouseStartingLng=e.latlng.lng,this._circleStartingLat=e.target._latlng.lat,this._circleStartingLng=e.target._latlng.lng,this._map.on("mousemove",this._dragCircleMousemove,this))}}),t.Map.mergeOptions({PolylineMeasureControl:!1}),t.Map.addInitHook(function(){this.options.polylineMeasureControl&&(this.PMControl=new t.Control.PolylineMeasure,this.addControl(this.PMControl))}),t.control.polylineMeasure=function(e){return new t.Control.PolylineMeasure(e)}});const Help={isMobile(){return this.isApple()||this.isAndroid()},isApple:()=>navigator.userAgent.match(/(iPhone|iPod|iPad)/i),isAndroid:()=>navigator.userAgent.match(/(Android)/i),viewport(){let t=.01*window.innerHeight;document.documentElement.style.setProperty("--vh",`${t}px`)},isInViewport(t){const e=t.getBoundingClientRect();return e.top>=-3e3&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)+3e3}};window.Mapping={bing:"ApHGX_AHDX1SN45wOhN4kyY65rbSmeJzTWix9rhXZ5s36qVDjbh6XIaXvVsG5Vav",highlightNumber:!1,leaflet:!1,windy:!1,activeLayer:!1,activeMap:"leaflet",markers:{},retirements:{},courses:{},checkpoints:{},layers:{},overlay:{},route:!1,distMarkers:!1,trace:!1,stateless:!1,altitudeMarker:!1,legend:!1,esritoken:!1,cpOMS:{windy:!1,leaflet:!1},popup:{windy:!1,leaflet:!1},cpPopup:{windy:!1,leaflet:!1},indexed:{google:!1,bing:!1},init(t,e){let i=this;i.options=t,i.zoom=i.options.zoom;let o=!0;"Google"===i.options.mapping&&(o=!1),i.options.esritoken&&(i.esritoken=i.options.esritoken);let r={zoom:i.zoom,zoomControl:!1,attributionControl:o,layers:[i.addLayer(i.options.mapping,!0)],center:[i.options.latitude,i.options.longitude]};if(t.overlay&&(r.maxZoom=17),i.leaflet=L.map("map",r),i.options.hasRoute){let t=i.options.live?"/"+i.options.code+"/data/"+i.options.code+".kml":i.options.url+"/data/"+i.options.code+".kml";i.route=new L.KML(t,{async:!1,color:"#00ff00",weight:6,opacity:.6,clickable:!1}),i.leaflet.addLayer(i.route),this.options.markerdistance&&this.options.markerdistance>0&&(this.distMarkers=L.polyline(i.route.latLngs,{distanceMarkers:{offset:this.options.markerdistance,divider:this.options.markerdivider,iconSize:null,cssClass:"dist-markers"},opacity:0}),i.leaflet.addLayer(this.distMarkers))}i.setupOms("cpOMS","leaflet"),i.options.hasOwnProperty("cluster")&&i.options.cluster?Markers.init(!0,i.leaflet):Markers.init(!1!==Url.cluster,i.leaflet),i.options.mapOptions.length&&i.options.mapOptions.forEach(function(t){i.addLayer(t)}),t.overlay&&(i.overlay["Event Map"]=L.tileLayer(t.overlay.tiles,{minZoom:10,maxZoom:17,attribution:t.overlay.attr}),i.leaflet.addLayer(i.overlay["Event Map"])),Object.keys(i.layers).length>0&&L.control.layers(i.layers,i.overlay,{position:"topleft"}).addTo(i.leaflet),L.control.scale({position:"bottomright",imperial:!1}).addTo(i.leaflet),L.control.zoom({position:"topleft"}).addTo(i.leaflet),e||i.setupMeasurements(),i.indexed.bing&&i.leaflet.on("zoomend",function(t){i.zoom=i.leaflet.getZoom(),i.zoom<12&&"Bing OS"===i.activeLayer?i.leaflet.removeLayer(i.layers["Bing OS"]).addLayer(i.layers["Bing Road"]):i.zoom>=12&&i.zoom<=14&&"Bing Road"===i.activeLayer&&i.leaflet.removeLayer(i.layers["Bing Road"]).addLayer(i.layers["Bing OS"])}),i.leaflet.on("baselayerchange",function(t){i.setActiveLayer(t.name)})},setupOms(t,e){let i="leaflet"===e?this.leaflet:this.windy.map,o="oms"===t?"popup":"cpPopup",r=this;this[o][e]=new L.Popup({offset:"oms"===t?[0,-42]:[0,0]}),this[t][e]=new OverlappingMarkerSpiderfier(i,{legWeight:.5,keepSpiderfied:!0,circleSpiralSwitchover:10,nearbyDistance:"oms"===t?36:2}),this[t][e].addListener("click",function(t){r[o][e].setContent(t.options.desc),r[o][e].setLatLng(t.getLatLng()),i.openPopup(r[o][e])})},omsObject(){return this.oms[this.activeMap]},loadTrace(t,e,i){this.removeTrace(),this.trace=new L.KML(Url.trace(t,e,i),{async:!1,color:"#00ff00",weight:6,opacity:.2,clickable:!1}),this.map().addLayer(this.trace)},removeTrace(){!1!==this.trace&&(this.map().removeLayer(this.trace),this.trace=!1)},map(){return!1!==this.windy&&"windy"===this.activeMap?this.windy.map:this.leaflet},openWindy(t){let e=this;!1===e.windy?Url.script("https://api.windy.com/assets/map-forecast/libBoot.js",function(){windyInit({key:e.options.windy,verbose:!1,lat:e.leaflet.getCenter().lat,lon:e.leaflet.getCenter().lng,zoom:e.leaflet.getZoom()},t=>{e.windy=t,e.switchMaps(),e.leaflet.on("zoomend",function(){e.windy.map.setView(e.leaflet.getCenter(),e.leaflet.getZoom())}),e.windy.map.on("zoomend",function(){e.leaflet.setView(e.windy.map.getCenter(),e.windy.map.getZoom())})})}):e.switchMaps()},switchMaps(){!1!==this.route&&this.map().removeLayer(this.route),!1!==this.trace&&this.map().removeLayer(this.trace),this.cpOMS[this.activeMap].clearMarkers(),this.activeMap="windy"===this.activeMap?"leaflet":"windy",!1!==this.route&&this.map().addLayer(this.route),!1!==this.trace&&this.map().addLayer(this.trace),"windy"===this.activeMap&&!1===this.cpOMS.windy&&(this.setupOms("cpOMS","windy"),this.cpOMS.windy=new OverlappingMarkerSpiderfier(this.map(),{legWeight:.5,keepSpiderfied:!0,nearbyDistance:2}),this.popup.windy=new L.Popup({offset:[0,-42]}),this.cpOMS.windy.addListener("click",function(t){_this.popup.windy.setContent(t.options.desc),_this.popup.windy.setLatLng(t.getLatLng()),_this.windy.map.openPopup(_this.popup.windy)}));for(const t in this.checkpoints)null!==this.checkpoints[t]._map&&this.cpOMS[this.activeMap].addMarker(this.checkpoints[t].remove().addTo(this.map()));Markers.switchMaps(Mapping.map())},marker(t,e){let i="p"+t;return!!this[e].hasOwnProperty(i)&&this[e][i]},plotCheckpoints(t){let e=[],i=this;t.forEach(function(t){let i=t.la+","+t.lo,o=e.findIndex(t=>t.ll===i);o>=0?e[o].title+=" / "+t.n:e.push({ll:i,title:t.n})}),t.forEach(function(t){let o=t.la+","+t.lo,r="c"+t.id;if(!i.checkpoints.hasOwnProperty(r)){let s='<div class="popup-row">'+t.n+"</div>";t.p&&(s+='<img src="'+t.p+'" onerror="this.remove()">'),t.i&&(s+='<div class="popup-row">'+t.i+"</div>"),i.checkpoints[r]=L.marker([t.la,t.lo],{title:e.find(t=>t.ll===o).title,desc:s,icon:L.divIcon({html:'<div class="marker-bullseye" style="border-color: '+t.c+';"><div class="point" style="background-color: '+t.c+';"></div></div>',iconSize:[30,30],iconAnchor:[15,15]})}).addTo(i.map()),i.cpOMS[i.activeMap].addMarker(i.checkpoints[r]),!1!==Url.geofences&&L.circle([t.la,t.lo],{radius:t.g,color:t.c}).bindPopup('<div class="popup-row">'+t.n+" Geofence: "+t.g+"m</div>").addTo(i.leaflet)}})},getRGBA:(t,e)=>"rgba("+parseInt(t.slice(1,3),16)+", "+parseInt(t.slice(3,5),16)+", "+parseInt(t.slice(5,7),16)+", "+e+")",moveAltitudeMarker(t,e){!1===this.altitudeMarker?this.altitudeMarker=L.marker(t,{icon:L.divIcon({html:'<div class="marker-bullseye highlight"></div>',iconSize:[20,20],iconAnchor:[10,10]})}):e?this.altitudeMarker.setLatLng(t).remove().addTo(this.map()):this.altitudeMarker.remove()},toCheckpointBoundary(){if(0!==Object.keys(this.checkpoints).length&&this.checkpoints.constructor===Object){let t=[];for(const e in this.checkpoints)t.push(this.checkpoints[e]);let e=new L.featureGroup(t);this.map().flyToBounds(e.getBounds(),{duration:1,paddingTopLeft:L.point(464,64),paddingBottomRight:L.point(200,96)})}},setLayer(t,e){this.layers.hasOwnProperty(t)||(this.layers[t]=e)},addLayer(t,e){let i=!1,o=this;if(void 0===e){}switch(t){case"Google":case"google":if(void 0===this.options.google||!this.options.google||!this.options.live||this.indexed.google)break;this.indexed.google=!0,i="Google Terrain";let e=document.createElement("script");e.src="//maps.google.com/maps/api/js?callback=initGoogleMap&key="+o.options.google,document.body.appendChild(e),this.setLayer("Google Terrain",L.gridLayer.googleMutant({maxZoom:16,type:"terrain"})),this.setLayer("Google Satellite",L.gridLayer.googleMutant({maxZoom:16,type:"satellite"})),this.setLayer("Google Street",L.gridLayer.googleMutant({maxZoom:16,type:"roadmap"}));break;case"25":case"OS":case"outdoors":if(!this.options.live||this.indexed.bing)break;this.indexed.bing=!0,i="Bing OS",this.setLayer("Bing OS",new L.BingLayer(o.bing,{type:"OrdnanceSurvey",minZoom:11,maxZoom:o.options.mapOptions.includes("25")?15:14})),this.setLayer("Bing Aerial",new L.BingLayer(o.bing,{type:"AerialWithLabelsOnDemand",minZoom:1,maxZoom:19})),this.setLayer("Bing Grayscale",new L.BingLayer(o.bing,{type:"CanvasGray",minZoom:5,maxZoom:17})),this.setLayer("Bing Road",new L.BingLayer(o.bing,{type:"RoadOnDemand",minZoom:5,maxZoom:16})),o.zoom<12&&(i="Bing Road");break;case"OpenCycle":case"cycle":i="Open Cycle",this.setLayer("Open Cycle",L.tileLayer("//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"));break;case"OpenTopo":case"topo":i="Open Topo",this.setLayer("Open Topo",L.tileLayer("//{s}.tile.opentopomap.org/{z}/{x}/{y}.png",{maxZoom:18,minZoom:4,attribution:'Map data: &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, <a href="http://viewfinderpanoramas.org">SRTM</a> | Map style: &copy; <a href="https://opentopomap.org">OpenTopoMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)'}));break;case"ESRI":case"TopoESRI":case"ESRI Satellite":case"ESRI Topo":i="ESRI Satellite"!=t&&"ESRI Topo"!=t?"ESRI Satellite":t;const r=o.esritoken;this.setLayer("ESRI Satellite",L.esri.Vector.vectorBasemapLayer("arcgis/imagery",{token:r})),this.setLayer("ESRI Terrain",L.esri.Vector.vectorBasemapLayer("arcgis/terrain",{token:r})),this.setLayer("ESRI Outdoor",L.esri.Vector.vectorBasemapLayer("arcgis/outdoor",{token:r,language:"zh-HK"})),this.setLayer("ESRI Topo",L.esri.Vector.vectorBasemapLayer("arcgis/topographic",{token:r}))}if(e)return!1!==i?(this.setActiveLayer(i),this.layers[i]):this.addLayer("cycle",!0)},setActiveLayer(t){!1!==this.activeLayer&&document.body.classList.remove(this.layerClass()),this.activeLayer=t,document.body.classList.add(this.layerClass())},layerClass(){return this.activeLayer.replace(" ","-").toLowerCase()},addLegend(t){let e=[{label:"Not moving",html:'<span class="fad fa-bed"></span>'},{label:"No mobile signal",html:'<span class="fad fa-signal-slash"></span>'},{label:"Poor location fix",html:'<span class="fad fa-tools"></span>'}];t.forEach(t=>Markers.addCourse(t.colour,t.name));for(const t in Markers.courses)e.push({label:Markers.courses[t].name,html:'<span class="circle" style="background-color: '+t+';"></span>'});let i=L.control.htmllegend({position:"topleft",layer:"groupLayers",legends:[{name:"Key",elements:e}],collapseSimple:!0,detectStretched:!0,collapsedOnInit:!0});this.leaflet.addControl(i),this.legend=!0},setupMeasurements(){L.control.polylineMeasure({position:"topleft",unit:"metres",showBearings:!1,clearMeasurementsOnStop:!1,showClearControl:!0,showUnitControl:!0,measureControlTitleOn:"Turn on Measuring Tool",measureControlTitleOff:"Turn off Measuring Tool",tempLine:{color:"#00CC33",weight:3},fixedLine:{color:"#4D4D4D ",weight:3},startCircle:{color:"#FF5722",weight:1,fillColor:"#FF5722",fillOpacity:1,radius:5},intermedCircle:{color:"#FF5722",weight:0,fillColor:"#FF5722",fillOpacity:.6,radius:5},currentCircle:{color:"#000",weight:1,fillColor:"#00CC33",fillOpacity:1,radius:5},endCircle:{color:"#FF5722",weight:1,fillColor:"#FF5722",fillOpacity:1,radius:5}}).addTo(this.leaflet)}},window.Url={code:"",written:!1,photosDir:"",team:!1,teamsingle:!1,geofences:!1,cluster:!1,secure:!1,noVideo:!1,live:!0,params:{},init(t,e,i){this.indexParams(),this.code=t,this.written=e,this.team=this.getParam("n",!1),this.teamsingle=this.getParam("b",!1),this.team&&this.teamsingle&&(this.team=!1),this.geofences=this.getParam("c",!1),this.cluster=this.getParam("cluster",!1),this.noVideo=this.getParam("no-video",!1),this.live=i||!0,this.secure="https:"===window.location.protocol},indexParams(){let t=window.location.search.substring(1).split("&");for(let e=0;e<t.length;e++){let i=t[e].split("=");this.params[i[0]]=this.notANumber(i[1])?parseInt(i[1]):i[1]}},getParam(t,e){return this.params.hasOwnProperty(t)?this.params[t]:e},notANumber:t=>"string"==typeof t&&(!isNaN(t)&&!isNaN(parseFloat(t))),protocolPath(t){return(this.secure?"https":"http")+t},protocolSocket(t){return this.secure,"ws:"+t},make(t){return this.written?"/"+(this.live?"":"events/")+this.code+"/data/"+t+".json":"/event/"+this.code+"/"+t},mail(){return this.written?"https://editor.opentracking.co.uk/event/"+this.code+"/mail":"/event/"+this.code+"/mail"},setPhotoDir(t){this.photosDir=t},trace(t,e,i){return e&&this.written&&!this.teamsingle?"/"+this.code+"/data/trace.kml":this.written?"https://editor.opentracking.com/event/"+this.code+"/trace?id="+t+(i?"&e="+i:""):"/event/"+this.code+"/trace?id="+t+(i?"&e="+i:"")},details(t,e,i){return e&&this.written&&!this.teamsingle?"/"+this.code+"/data/details.json":this.written?"https://editor.opentracking.com/event/"+this.code+"/details?id="+t+(i?"&e="+i:""):this.make("details")+"?id="+t+(i?"&e="+i:"")},script(t,e){let i=document.createElement("script");"function"==typeof e&&(i.onload=function(){e()}),i.src=t,document.head.appendChild(i)},photo(t,e,i){return this.photosDir+(e&&i?i+"_":"")+t+".jpg"}},window.Storage={key:"",exists:!1,init:function(t){this.key=t,this.exists=void 0!==window.localStorage,this.exists||console.log("Storage unavailable"),Array.isArray(this.getArray("watched",[]))||this.setArray("watched",[])},accessor:function(t){return this.key+"-"+t},get:function(t,e){if(!this.exists)return e;let i=localStorage.getItem(this.accessor(t));return null===i?e:i},getArray(t){let e=this.get(t,[]);return e.length>0&&!Array.isArray(e)?e.split(","):[]},delete(t){this.exists&&localStorage.removeItem(this.accessor(t))},set:function(t,e){this.exists&&localStorage.setItem(this.accessor(t),e)},setArray(t,e){this.exists&&localStorage.setItem(this.accessor(t),e.join(","))},remove:function(t){this.exists&&localStorage.removeItem(this.accessor(t))}};var customSize=!1;"undefined"==typeof iconSize?(iconSize=[50,63],iconAnchor=[25,61]):customSize=!0,window.Markers={markers:{},records:{},courses:{},cluster:!1,spider:!1,popup:!1,states:{bed:"Not moving","signal-slash":"No mobile signal",tools:"Poor location fix"},init(t,e){L.Marker.setBouncingOptions({bounceHeight:50,bounceSpeed:60}),this.popup=new L.Popup({offset:[0,-42]}),t?this.setupCluster(e):this.setupSpider(e)},switchMaps(t){!1!==this.popup&&this.popup.remove(),delete this.popup,this.popup=new L.Popup({offset:[0,-42]});for(const e in this.records)this.records[e].remove().addTo(t);!1!==this.cluster?this.setupCluster(t):this.setupSpider(t)},setupCluster(t){if(!1!==this.cluster&&null!==this.cluster._map)return this.cluster._map.removeLayer(this.cluster),this.cluster._maxZoom=t._layersMaxZoom,t.addLayer(this.cluster),!1;this.cluster=L.markerClusterGroup({animate:!0,maxClusterRadius:20}),this.cluster.addEventListener("click",function(t){Markers.popup.setContent(t.layer.options._popup),Markers.popup.setLatLng(t.layer.getLatLng()),Markers.popup.openOn(Mapping.map())}),t.addLayer(this.cluster)},bounce(t,e){let i="p"+t+(e?"e"+e:""),o=null,r=null;if(this.markers.hasOwnProperty(i)&&this.markers[i].options._plot)if(r=this.markers[i].getLatLng(),!1===this.cluster)o=this.markers[i];else{let e=this.markers["p"+t];this.cluster.getVisibleParent(e).options.hasOwnProperty("_bib")&&(o=e)}if(null!==r&&Mapping.map().setView(r),null!==o){let t=o._zIndex;o._zIndex=1e7,o.bounce(5),setTimeout(function(){o.isBouncing()&&o.stopBouncing(),o._zIndex=t},4e3)}},plotRecord(t,e,i,o,r,s){let n="r"+t;if(this.records.hasOwnProperty(n))this.records[n].setLatLng(e.split(","));else{let t='<div class="marker-pin" style="opacity: 1; '+this.getGradient(i)+'"></div><div style="top: 10px; font-size: 1.2rem;" class="state fas fa-trophy-alt"></div>',a=this.htmlPopup(n,o,i,"","",1234,"fkt",s,r);this.records[n]=L.marker(e.split(","),{title:(o||"Fastest Known Time")+(r?" "+r:""),riseOnHover:!0,_coords:e,_popup:a,zIndexOffset:100001,icon:L.divIcon({html:t,iconSize:iconSize,iconAnchor:iconAnchor})}),!1===this.cluster?this.spider.addMarker(this.records[n].addTo(Mapping.leaflet)):this.cluster.addLayer(this.records[n])}},addMe(t){let e=!!this.markers.hasOwnProperty("ME")&&this.markers.ME;if(e)e.setLatLng(t.split(","));else{let i=this.getGradient("#000000"),o='<div class="popup-row bg-theme"><span class="inline pill" style="background-color: white;">Me</span><span class="inline">My location</span></div>';e=L.marker(t.split(","),{title:"My Location",riseOnHover:!0,_coords:t,_popup:o,zIndexOffset:100002,icon:L.divIcon({html:'<div class="marker-pin" style="border:1px solid black;opacity: 1; '+i+'"></div><div style="color:white;top: 10px; font-size: 1.2rem;" class="state fa fa-location-circle"></div>',iconSize:iconSize,iconAnchor:iconAnchor})}).addTo(Mapping.map());let r=new L.Popup({offset:[0,-42]});r.setContent(o).setLatLng(t.split(",")),e.bindPopup(r),this.markers.ME=e}Mapping.map().setView(e.getLatLng()),e.bounce(5)},setupSpider(t){let e=!1;if(!1!==this.spider&&null!==this.spider._map){e=!0;for(const t in this.markers)this.markers[t].options._plot&&this.spider.removeMarker(this.markers[t].remove())}if(delete this.spider,this.spider=new OverlappingMarkerSpiderfier(t,{legWeight:.5,keepSpiderfied:!0,circleSpiralSwitchover:10,nearbyDistance:36}),this.spider.addListener("click",function(t){Markers.popup.setContent(t.options._popup),Markers.popup.setLatLng(t.getLatLng()),Markers.popup.openOn(Mapping.map())}),this.spider.addListener("unspiderfy",function(t){for(let e in t)t[e].setZIndexOffset(t[e].options._zi)}),e)for(const e in this.markers)this.markers[e].options._plot&&this.spider.addMarker(this.markers[e].addTo(t))},index(t,e,i,o,r,s,n,a,l,c,p){if(void 0===l&&(l=!0),void 0===p&&(p=0),9==r.length&&r.endsWith("00"))return;let h="p"+t+(a?"e"+a:""),d=this.htmlIcon(t,r,o,!l),u=this.htmlPopup(t,e,r,o,s,a,l),m=null;c?c.startsWith("http")?m=L.icon({iconUrl:c,iconSize:customSize?iconSize:[62,78],iconAnchor:customSize?iconAnchor:[31,76]}):(d=this.htmlCustomIcon(t,r,o,c),m=L.divIcon({html:d,iconSize:iconSize,iconAnchor:iconAnchor})):m=L.divIcon({html:d,iconSize:iconSize,iconAnchor:iconAnchor});let y=-1*Number(p)+1e7;return this.markers[h]=L.marker(i.split(","),{_bib:t,_name:e,_state:o,_colour:r,_plot:n,_coords:i,_tracked:s,_popup:u,_customicon:c,_zi:y,title:t+" "+e,riseOnHover:!0,zIndexOffset:y,icon:m}),n&&(!1!==this.cluster?this.cluster.addLayer(this.markers[h]):this.spider.addMarker(this.markers[h].addTo(Mapping.leaflet))),n},update(t,e,i){let o="p"+t+(i?"e"+i:""),r=null,s=!1,n=!1,a=!1;if(!this.markers.hasOwnProperty(o))return!1;if(e.hasOwnProperty("colour")&&this.markers[o].options._colour!==e.colour&&(s=!0,n=!0,this.markers[o].options._colour=e.colour),e.hasOwnProperty("icon")&&this.markers[o].options._customicon!==e.icon&&(s=!0,n=!0,this.markers[o].options._customicon=e.icon),e.hasOwnProperty("state")&&this.markers[o].options._state!==e.state&&(s=!0,n=!0,this.markers[o].options._state=e.state),e.hasOwnProperty("tracked")&&this.markers[o].options._tracked!==e.tracked&&(n=!0,this.markers[o].options._tracked=e.tracked),e.hasOwnProperty("plot")&&this.markers[o].options._plot!==e.plot&&(r=e.plot,this.markers[o].options._plot=e.plot),e.hasOwnProperty("coords")&&this.markers[o].options._coords!==e.coords&&(a=!0,this.markers[o].options._coords=e.coords),a)try{this.markers[o].setLatLng(this.markers[o].options._coords.split(","))}catch(e){console.error("Error moving",t,e.message)}if(s&&!this.markers[o].options._customicon){let e=this.htmlIcon(t,this.markers[o].options._colour,this.markers[o].options._state);this.markers[o].setIcon(L.divIcon({html:e,iconSize:iconSize,iconAnchor:iconAnchor}))}else if(s&&this.markers[o].options._customicon&&!this.markers[o].options._customicon.startsWith("http")){let e=this.htmlCustomIcon(t,this.markers[o].options._colour,this.markers[o].options._state,this.markers[o].options._customicon);this.markers[o].setIcon(L.divIcon({html:e,iconSize:iconSize,iconAnchor:iconAnchor}))}return n&&(this.markers[o].options._popup=this.htmlPopup(t,this.markers[o].options._name,this.markers[o].options._colour,this.markers[o].options._state,this.markers[o].options._tracked)),null!==r&&(!1!==this.cluster?r?this.cluster.addLayer(this.markers[o]):this.cluster.removeLayer(this.markers[o]):r?this.spider.addMarker(this.markers[o].addTo(Mapping.map())):this.spider.removeMarker(this.markers[o].remove())),this.markers[o].options._plot},htmlIcon(t,e,i){let o='<div class="marker-pin" style="'+this.getGradient(e)+'"></div>';return i&&(o+='<div class="state fad fa-'+i+'"></div>'),o+'<div class="inner">'+t+"</div>"},htmlCustomIcon(t,e,i,o){return'<div class="marker-pin" style="'+this.getGradient(e)+'"></div>'+'<div class="customstate state '+o+'"></div><div class="inner">'+t+"</div>"},htmlPopup(t,e,i,o,r,s,n,a,l){void 0===n&&(n=!0);let c='<div class="popup-row bg-theme"><span class="inline pill" style="background-color: '+i+'">'+("fkt"===n?"Record":t)+'</span><span class="inline">'+e+"</span></div>";return c+="fkt"===n&&a?'<img src="'+a+'" onerror="this.remove()" alt="#'+e+'">':'<img src="'+Url.photo(t)+'" onerror="this.remove()" alt="#'+t+" "+e+'">',this.stateless||(c+=this.getStateLabel(o)),c+='<div class="popup-row space-between"><div class="popup-item"><div class="popup-label">'+("fkt"===n?l:"Tracker")+"</div>"+r+"</div>",(c+=!0===n?'<div class="btn" onclick="app.loadParticipant('+t+", "+s+'); Mapping.map().closePopup()">More</div>':"fkt"===n?'<span class="popup-label">Record Time</span>':'<span class="popup-label">This is a bag, NOT a runner!</span>')+"</div>"},getStateLabel(t){switch(t){case"tools":case"signal-slash":case"bed":return'<div class="popup-row state"><span class="fad fa-'+t+'"></span><span class="inline">'+this.states[t]+"</span></div>";default:return""}},addCourse(t,e){if(this.courses.hasOwnProperty(t))this.courses[t].name+="<br>"+e;else{let i=this.getGradient(t);this.courses[t]={name:e,gradient:i}}},getGradient(t){if(this.courses.hasOwnProperty(t))return this.courses[t].gradient;let e=this.changeColor(t,-40);return"background-image: linear-gradient(45deg, "+t+" 0%, "+e+" 100%); border-color: "+e},changeColor(t,e){var i=!1;"#"==t[0]&&(t=t.slice(1),i=!0);var o=parseInt(t,16),r=(o>>16)+e;r>255?r=255:r<0&&(r=0);var s=(o>>8&255)+e;s>255?s=255:s<0&&(s=0);var n=(255&o)+e;return n>255?n=255:n<0&&(n=0),[r,n,s]=[r,n,s].map(t=>t<=15?`0${t.toString(16)}`:t.toString(16)),(i?"#":"")+r+s+n}};
