var AtisContextMenu=function(e,t){var s,n={populateMenu:function(e,r,a,i,u){var t=16;$.ajax("/api/route/getlocations?latitude="+MapComp.lat(i)+"&longitude="+MapComp.lng(i)+"&zoom="+t).done(function(e){var t="";if(s=[],null!=e)if(e.length)for(var n=0,o=e.length;n<o;n++)e[n].name&&(t+='<li><a  href="#'+n+'">'+e[n].nameDirection+"</a></li>",s.push(e[n]));else t='<li><p class="error">'+resources.CouldNotRetrieveMapLocation+"</p></li>";u(t,r,a,i)}).fail(function(){u(null,r,a,i)})},doAction:function(e,t,n){n=s[n];o(t,n,e)},setupEventHandlers:function(e){e.find("a").hover(function(){$(this).parent().addClass("hover")},function(){$(this).parent().removeClass("hover")})},resetMarkers:function(e){$(document).trigger("resetRoutePlanner-contextMenu")}},o=function(e,t,n){var e=$(e.target),o=e.parent(),r=e.detach(),a=this;a.mostRecentLocation=t,o.append(a.toHereFromHereMenuItem||'<div class="btn-group" id="contextMenuToFrom"><button class="btn btn-info" data-type="fromHere">'+resources.FromHere+'</button><button class="btn btn-info" data-type="toHere">'+resources.ToHere+"</button></div>"),a.toHereFromHereMenuItem||(e=o.children().first(),$('[data-type="fromHere"],[data-type="toHere"]',e).on("click",function(e){var t;t=$(this).attr("data-type"),$(document).trigger("locationSelected-contextMenu",[t,a.mostRecentLocation]),n.fadeOut(75)}).css("cursor","pointer")),o.on("mouseleave.atisContextMenu",function(e){a.toHereFromHereMenuItem=o.children().first().detach(),o.append(r),o.off("mouseleave.atisContextMenu"),o.removeClass("hover")})};return n};
var NewAtisContextMenu=function(r,e){var a,u,n,t,o,s,i={populateMenu:function(e,t,o,n,r){a=n,r('<a class="list-group-item contextPointButton" data-type="fromHere" href="#1">'+resources.FromHere+'</a><a class="list-group-item contextPointButton" data-type="toHere" href="#2">'+resources.ToHere+"</a>",t,o,n)}},c=(i.AddWaypointToContextMenu=function(e){0},i.getNearestLocations=function(e,t,o){var n=16;o&&(n=r.map.zoom),$.ajax("/api/route/getlocations?latitude="+MapComp.lat(e)+"&longitude="+MapComp.lng(e)+"&zoom="+n).done(function(e){t(e||[])}).fail(function(){t(null)})},function(e){u.empty(),l(e);e=$(map.getDiv());t>e.width()-u.width()&&(t-=u.width()),o>e.height()-u.height()&&(o-=u.height()),u.css({top:o,left:t}).fadeIn(300)}),l=function(e){"True"==resources.DisplayLocationsInContextMenu?(u.append(e+"<hr>"),u.append('<li><a href="#resetMarkers">'+resources.StartOver+'</a></li><li><a href="#zoomIn">'+resources.ZoomIn+'</a></li><li><a href="#zoomOut">'+resources.ZoomOut+'</a></li><li><a href="#centerMap">'+resources.CenterHere+"</a></li>")):(u.append(e),u.append('<a href="#resetMarkers" class="list-group-item defaultMenu">'+resources.StartOver+'</a><a href="#zoomIn" class="list-group-item defaultMenu">'+resources.ZoomIn+'</a><a href="#zoomOut" class="list-group-item defaultMenu">'+resources.ZoomOut+'</a><a href="#centerMap" class="list-group-item defaultMenu">'+resources.CenterHere+"</a>")),setUpMenuEventHandlers()},p=(i.setupEventHandlers=function(e){},i.setupEventHandlersold=function(){"True"==resources.DisplayLocationsInContextMenu?u.find("a").click(function(e){e.preventDefault();var t=$(e.target).attr("href").substr(1),o=m(t);if(null!=o){o=s[o];p(e,o)}else switch(u.fadeOut(75),t){case"resetMarkers":$(document).trigger("resetRoutePlanner-contextMenu");break;case"zoomIn":map.setZoom(map.getZoom()+1),map.panTo(n);break;case"zoomOut":map.setZoom(map.getZoom()-1),map.panTo(n);break;case"centerMap":map.panTo(n)}}):$(".defaultMenu").click(function(e){e.preventDefault();var t=$(e.target).attr("href").substr(1),o=m(t);if(null!=o){o=s[o];p(e,o)}else switch(u.fadeOut(75),t){case"resetMarkers":$(document).trigger("resetRoutePlanner-contextMenu");break;case"zoomIn":map.setZoom(map.getZoom()+1),map.panTo(n);break;case"zoomOut":map.setZoom(map.getZoom()-1),map.panTo(n);break;case"centerMap":map.panTo(n)}}),u.find("a").hover(function(){$(this).parent().addClass("hover")},function(){$(this).parent().removeClass("hover")})},function(e,t){var e=$(e.target),o=e.parent(),n=e.detach(),r=this;r.mostRecentLocation=t,o.append(r.toHereFromHereMenuItem||'<div class="btn-group" id="contextMenuToFrom"><button class="btn btn-info" data-type="fromHere">'+resources.FromHere+'</button><button class="btn btn-info" data-type="toHere">'+resources.ToHere+"</button></div>"),r.toHereFromHereMenuItem||(e=o.children().first(),$('[data-type="fromHere"],[data-type="toHere"]',e).on("click",function(e){var t;t=$(this).attr("data-type"),$(document).trigger("locationSelected-contextMenu",[t,r.mostRecentLocation]),u.fadeOut(75)}).css("cursor","pointer")),o.on("mouseleave.atisContextMenu",function(e){r.toHereFromHereMenuItem=o.children().first().detach(),o.append(n),o.off("mouseleave.atisContextMenu"),o.removeClass("hover")})}),m=function(e){try{var t=parseInt(e);return isNaN(t)?null:t}catch(e){return null}};return i.resetMarkers=function(e){$(document).trigger("resetRoutePlanner-contextMenu")},i.doAction=function(e,t,o){$(document).trigger("locationSelected-contextMenu",[1==o?"fromHere":"toHere",{point:{latitude:MapComp.lat(a),longitude:MapComp.lng(a)}}]),$("#mapLocation").is(":visible")&&$(".myRouteBtn").trigger("click"),e.fadeOut(75)},i},NewAtisContextMenuFromErs=function(r,e){var a,t={populateMenu:function(e,t,o,n,r){a=n,r('<a class="list-group-item contextPointButton" data-type="fromHere" href="1">'+resources.FromHere+'</a><a class="list-group-item contextPointButton" data-type="toHere" href="2">'+resources.ToHere+"</a>",t,o,n)},doAction:function(e,t,o){$(document).trigger("locationSelected-contextMenu",[1==o?"fromHere":"toHere",{point:{latitude:MapComp.lat(a),longitude:MapComp.lng(a)}}]),contextMenu.fadeOut(75)},setupEventHandlers:function(e){},getNearestLocations:function(e,t,o){var n=16;o&&(n=r.zoom),$.ajax("/api/route/getlocations?latitude="+MapComp.lat(e)+"&longitude="+MapComp.lng(e)+"&zoom="+n).done(function(e){t(e||[])}).fail(function(){t(null)})}};return t.resetMarkers=function(e){$(document).trigger("resetRoutePlanner-contextMenu")},t};
$(()=>{$("#setStartGeolocation")[0].addEventListener("focus",()=>{""!==$("#startLocationText").val()&&$("#swapLocationsBtn").focus()}),$("#setEndGeolocation")[0].addEventListener("focus",()=>{""!==$("#endLocationText").val()&&$("#generateRouteBtn").focus()}),$("#generateRouteBtn").keydown(function(e){"Tab"===e.key&&e.shiftKey&&setTimeout(()=>{$("#endLocationText").focus()})}),$("#swapLocationsBtn").keydown(function(e){"Tab"===e.key&&e.shiftKey&&setTimeout(()=>{$("#startLocationText").focus()})})});let RoutePlanner=function(p,e,t){function n(t){t.preventDefault(),c=[];var e=$("#startLocationText").val(),n=$("#endLocationText").val();e.match(/^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$/g)&&n.match(/^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$/g)?L([{point:{latitude:e.split(",")[0],longitude:e.split(",")[1]}},{point:{latitude:n.split(",")[0],longitude:n.split(",")[1]}}],t):g.getLocationArray().then(e=>{u(e)?m(!0):!function(e){let t=(e[0].point.latitude||"rand")==e[e.length-1].point.latitude&&(e[0].point.longitude||"rand")==e[e.length-1].point.longitude,n=(e[0].linkId||"rand")==e[e.length-1].linkId;return t||n}(e)?(I(),L(e,t)):(I(resources.StartAndEndLocationCannotBeSame),m(!0))}).catch(()=>I(resources.PleaseCheckStartEndLocation)),MapComp.isGoogle&&f.getStreetView().setVisible(!1),$(document).off("keypress",null,WaypointManager.enterkeyHandler)}function o(){$(".waypointContainer").hide(),m(),c=[],h="",localStorage.setItem("routeGenerateButton",""),"undefined"!=typeof TransitOptions&&TransitOptions.reset(),g.clearAll(),$("#btnSaveRoute").text(resources.Save),$(document).trigger("routeCleared-routePlanner"),0<$("#Map_Index_RoutePlannerDescription > div").contents().length&&$("#routePlannerDesc").show(),$(document).off("keypress",null,g.enterkeyHandler)}let i={},s=new RoutePlannerAutocomplete(p.map,t,window.extraPoi||[]),g=new WaypointManager(p.map,s,e,i),v=new RoutingPolyline(p,e,i,g),f=p.map,a=new UserGeolocation(s,g,e,p.map,p),r=new TransitDirections(p,v,document.getElementById("transitRouteResults")),l=new MapFctns,c=[],h="",u=(s.SetupAutoComplete("#startLocationText",g.getLocations()),s.SetupAutoComplete("#endLocationText",g.getLocations()),function(t){for(let e=0;e<t.length;e++)if(!t[e])return 0===e?I(resources.PleaseCheckStartLocation):e===t.length-1?I(resources.PleaseCheckEndLocation):I(resources.PleaseCheckWaypoints),!0;return!1}),m=function(e){v.DeleteAll(),$(".linkIcons").hide(),$("#routeResults").hide(),$("#routeTabContent").empty(),$("#routeTabs").empty(),e||I(),r.Reset()},d=($(document).on("clearRouteView-routePlanner",function(e){m()}),$(document).on("saveRoutePoints",function(){var e={locations:$.map(g.getLocations(),function(e){return e.point}),avoidToll:$("#avoidTollsCheckBox").is(":checked")};localStorage.setItem("routeLocations",JSON.stringify(e))}),function(){$(document).trigger("routingFail-routePlanner")}),y=function(){$(document).trigger("routingSuccess-routePlanner")},T=function(e,t,n){$(".waypointContainer").hide(),$("#transitRouteResults").show(),h=n?"generateDriveTransitRouteBtn":"generateTransitRouteBtn",r.Directions(e,t,n),$("#routeResults").trigger("adjustTransitResultsHeight"),I(resources.TransitForImmediateDepartures),$(".linkIcons").show()},R=function(e,n,t,o){let i=e,a;n&&(i=[e[0],n],a=[n,e[1]]),$.ajax("/api/route/getroutes",{type:"POST",data:{Waypoints:i,Options:t},transitHubLocation:n}).done(function(t){if(0<t.length){if(MapComp.isGoogle)for(let e=0;e<t[0].waypoints.length&&(1!==e||!n);e++)g.adjustMarker(e,t[0].waypoints[e].point.latitude,t[0].waypoints[e].point.longitude);$(document).trigger("routeGenerated-loginModal")}C(t,!1!==n,n.name),n&&(T(a,o,!0),l.fitMapToRoute(f,e),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")),y()}).fail(function(){d(),I(resources.ErrorRetrievingYourRoute),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")}).always(function(){loadBlockerApi.hideSpinner("calculateRoute")})},k=function(e,t){e.forEach(function(e){e.listenerAdded=!1,google.maps.event.clearListeners(e,t)})};const b=(o,e,i,a,r)=>{o.listenerAdded||(o.listenerAdded=!0,o.addListener("mouseup",function(n){g.getLocationArray().then(e=>{var t;u(e)?(m(),k(i,"mouseup"),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")):(loadBlockerApi.showSpinner("calculateDriveTransitRoute"),t=s.GetCustomSimplePlace(o.title,null,n.latLng.lat(),n.latLng.lng(),!1),R(e,t,a,r),$("#transitRouteResults").addClass("padFix"),k(i,"mouseup"))})}))};let w=function(){var e={};return 0<$("#avoidTollsCheckBox").length&&(e.AvoidTolls=$("#avoidTollsCheckBox").is(":checked")),0<$("#avoidFerriesCheckBox").length&&(e.AvoidFerries=$("#avoidFerriesCheckBox").is(":checked")),e},E=function(e){if("undefined"==typeof TransitOptions)return{};switch(e){case"generateWalkOnlyRouteBtn":TransitOptions.UpdateTransitOptions("WALK");break;case"generateBicycleOnlyRouteBtn":TransitOptions.UpdateTransitOptions("BICYCLE");break;case"generateTransitRouteBtn":TransitOptions.UpdateTransitOptionsFromDropDown()}try{return JSON.stringify(TransitOptions.GetTransitOptions())}catch(e){return{error:e}}};function L(e,t){var n,o,i,a,r=t?.currentTarget?.id??t?.target?.id??h,s=(h=r,t?.currentTarget&&(t.currentTarget.id=r),loadBlockerApi.showSpinner("calculateRoute"),m(),$("#routePlannerDesc").hide(),g.setDetails(),w()),l=E(r);if(l?.error)loadBlockerApi.hideSpinner("calculateRoute"),RoutePlannerStatus.updateStatus(l.errMsg,RoutePlannerStatus.StatusTypes.danger);else switch(r){case"generateDriveTransitRouteBtn":{var c=e;var u=l;var d=s;u.travelMode="transit",$(".waypointContainer").hide(),loadBlockerApi.hideSpinner("calculateRoute"),$(".routeName").toggle(!1),$("#btnSaveRoute").toggle(!1),f.setZoom(12),f.panTo(new google.maps.LatLng(c[0].point.latitude,c[0].point.longitude)),I(resources.DriveTransitHelpText);let o=resources.ParkAndRideLayers.split(","),i=[];o.forEach(function(e){$(document).on("layerRefreshed-iconsAdded."+e,function(e,t,n){if(-1<o.indexOf(t)){$(document).off("layerRefreshed-iconsAdded."+e);let e=p.appHelper.iconManager.GetIconLayer(e);t=e.GetIcons();i=i.concat(t),t.forEach(e=>b(e,0,i,d,u))}})})}break;case"generateTransitRouteBtn":c=e,(a=l).travelMode="transit",T(c,a,!1);break;case"generateWalkOnlyRouteBtn":a=e,(i=l).travelMode="walking",T(a,i,!1);break;case"generateBicycleOnlyRouteBtn":i=e,(o=l).travelMode="bicycling",T(i,o,!1);break;default:o=e,n=s,$("#transitRouteResults").hide(),R(o,!1,n)}}let C=function(t,n,o){if($("#routePlannerDesc").hide(),0==t.length){d();var e=g.getLocations();I(e.length<=2?resources.RouteNotAvailable:resources.RouteNotAvailableWithWaypoints)}else{$(".waypointContainer").show(),$("#routeTabs").show(),$(document).trigger("routeGenerated-routePlanner",[t]),m(!0);for(let e=0;e<t.length;e++)!function(e,o,t,n){let i=e.statistics,a=resources.EnableRouteClosureDisclaimer=="True"&&e.statistics.includesClosures,r=resources.EnableRouteConditionDisclaimer=="True"&&e.statistics.includesRouteConditions,s=a?{strokeColor:"#FF0000"}:null,l=v.AddRoute(e.encodedPolyline,e.waypoints,s,false,t),c="",u="";if(e.waypoints.length>1){c=e.waypoints[0].nameDirection;u=e.waypoints[e.waypoints.length-1].nameDirection}let d=a||r?"withDisclaimer":"",p=($("#routeTabs").append("<li class='routeTabHeader "+d+"' role='presentation'><a href='#"+(t?"transit":"")+"routeTab-"+o+"' data-id='"+o+"' data-guids='"+l+"' data-travelTimeInSeconds='"+i.postedTravelTimeSeconds+"'>"+resources.Route+" "+o+"  <span class='badge'>"+i.travelTimeDisplay+"</span></a></li>"),"");if(a||r){p+='<div id="routeIncludesDisclaimerDiv'+o+'" class="alert alert-danger" role="alert">';if(a)if(r)p+="<p>"+resources.RouteIncludesClosuresAndConditionsDisclaimer+"</p>";else p+="<p>"+resources.RouteIncludesClosuresDisclaimer+"</p>";else p+="<p>"+resources.RouteIncludesConditionsDisclaimer+"</p>";p+='<button id="acceptRouteDisclaimerBtn'+o+'" type="button" class="btn btn-info">'+resources.OK+"</button>"+"</div >";p+='<div class="hideRouteTab'+o+'" style="opacity: .10;">'}p=(p+="<div class='panel panel-default routeContent "+d+"'><h3 class='printHeader'>"+resources.SiteHeader+" "+resources.RouteDetails+"</h3><div class='panel-body'><i class='far fa-car fa-2x'></i><span class='printToFrom'>"+resources.From+" "+c+" "+resources.To+" "+u+"</span><p><b>"+resources.TotalTime+" <span class='pull-right'> "+i.travelTimeDisplay+"</span></b><br />")+("<b>"+resources.TotalTravelDistance+" <span class='pull-right'> "+i.lengthDisplay+"</span></b></p>");let g=[];if(e.includesTollLink)g.push(resources.Tolls.toLowerCase());if(e.includesFerryLink)g.push(resources.Ferries.toLowerCase());let f="";if(g.length==2)f=g[0]+" "+resources.And+" "+g[1];else if(g.length==1)f=g[0];if(g.length>0)p+='<div class="route-alert"><i class="fas fa-exclamation-triangle" aria-hidden="true"></i> '+resources.ThisRouteIncludes+" "+f+".</div>";if(p=p+"</div>"+"<ul class='list-group'>",n)n=" ("+n+")";else n="";if(i.instructions)for(let n=0;n<i.instructions.length;n++){let e=i.instructions[n];let t=arrowDirection.getDriveImg(e.instruction);p+='<li class="list-group-item">';if(e.linkConditions&&e.linkConditions.length>0)p+='<div class="vLineBorder"></div>';p+='<div class="directionArrow">'+t+"</div><div "+G(e.linkConditions)+">"+e.instruction+P(e.linkEvents,o,n)+A(e.linkCameras,o,n)+N(e.linkConditions)+"</div></li>"}else for(let e=0;e<i.links.length;e++)if(e==i.links.length-1)p+="<li class='list-group-item'><b>"+i.links[e].nameDirection+n+"</b><br/>"+i.links[e].travelTimeDisplay+" ("+i.links[e].lengthDisplay+")"+P(i.links[e].linkEvents,o,e)+A(i.links[e].linkCameras,o,e)+"</li>";else p+="<li class='list-group-item'><b>"+resources.From+" "+i.links[e].nameDirection+" "+resources.To+" "+i.links[e+1].nameDirection+"</b><br/>"+i.links[e].travelTimeDisplay+" ("+i.links[e].lengthDisplay+")"+P(i.links[e].linkEvents,o,e)+A(i.links[e].linkCameras,o,e)+"</li>";if(p+="</ul></div>",a||r)p+="</div>";let h;if(e.includesFerryLink||resources.OutsideONTTDistanceTravelPortions!=="")h=`<div class="routeNotes">
                        <p>${resources.Notes}</p>
                        <ul>
                            <li>${resources.AllTravelTimesBasedOnEstimates}</li>
                            ${resources.OutsideONTTDistanceTravelPortions!==""?"<li>"+resources.OutsideONTTDistanceTravelPortions+"</li>":""}
                            ${e.includesFerryLink?"<li>"+resources.FerryNote+"</li> ":""}   
                        </ul>
                     </div> `;else h=`<p class="routeNote"><b>${resources.NoteColon}</b> ${resources.AllTravelTimesBasedOnEstimates}</p>`;$("#routeTabContent").append('<div id="'+(t?"transit":"")+"routeTab-"+o+'" data-id="'+o+'" class="routeTab tab-pane fade">'+p+h+"</div>"),$("#cameraRouteToggle"+o+" , #eventRouteToggle"+o).on("click",function(){let e=$(this).data("id");$("i[id='"+e+"circle'").toggleClass("fa-plus-circle fa-minus-circle");$("div[id='"+e+"div'").toggle(400);if(this.className=="eventRouteToggle"){let e=$(this).parent().find(".showMore").length>0;if(!e)W(this)}}),$("#acceptRouteDisclaimerBtn"+o).on("click",function(){$(".hideRouteTab"+o).css({opacity:"1"});$("#routeIncludesDisclaimerDiv"+o).hide()})}(t[e],e+1,n,o);$("#routeTabs a").click(function(e){e.preventDefault(),$(this).tab("show"),v.MakeActive($(this).attr("data-guids")+S("#transitRouteTabs li.active a"))}),v.MakeActive($("#routeTabs a:first").attr("data-guids")+S("#transitRouteTabs li.active a")),$("#routeTabs a:first").tab("show"),$("#routeResults").show(),$("#routeResults").scrollTop(0),0<t[0].waypoints.length&&l.fitMapToRoute(f,t[0].waypoints),$("#routeResults").trigger("adjustRoutePlannerHeight");var i=t[0].enableMapLayers;for(let t in i){let e=$("input[type='checkbox'][data-layerid ="+i[t]+"]",$("#layerSelection"));if(e&&e[0]&&!e[0].checked)e[0].click();else p.appHelper.iconManager.RefreshLayer(i[t],true)}MapComp.isGoogle&&f.getStreetView().setVisible(!1),W(),$("#routeTabs a").on("shown.bs.tab",function(){W()}),$(".linkIcons").show()}};function S(e){e=$(e);let t="";return t=null!=e&&e.length&&e!=this?";"+e.attr("data-guids"):t}function D(){var e=0<$("#routeTabs").html().length,t=0<$("#transitRouteResults").html().length;e||t?$(e&&t?"#routeTabContent div.active, #transitRouteResults":e?"#routeTabContent div.active":"#transitRouteResults").printThis():I(resources.NoRouteDetailGenerated,RoutePlannerStatus.StatusTypes.danger)}String.prototype.replaceAll=function(e,t){return this.split(e).join(t)};let B=null,A=function(e,t,n){if(!e||!e.length)return"";var o,n=e[0].id+t+n;B=B||'<div class="route-tooltip routeLinkCamera"><p><img src="{IconURL}" alt="{Name}">&nbsp;<a class="Cctv-link" href="#Cameras-{Id}" data-id="{Id}">{Name}</a></p></div>';let i="";for(o in e)i+=B.replaceAll("{Name}",e[o].displayName).replaceAll("{Id}",e[o].id).replaceAll("{IconURL}",e[o].icon.url);return 1<e.length&&(t='<div class="cameraRouteSection"><button id="cameraRouteToggle'+t+'" class="cameraRouteToggle" data-id="'+n+'" data-toggle="collapse" title="Toggle" aria-expanded="true" class="">'+resources.Cameras+' <span class="badge">'+e.length+'</span><i id="'+n+'circle" class="far fa-plus-circle"></i></button><div id="'+n+'div" class="routeCameras" style="display:none;">',i=t+i+"</div>"),i},x=null,P=function(n,e,t){if(!n||!n.length||"undefined"!=typeof SpecialEventData)return"";var o,i;x||(i=(i='<div class="route-tooltip routeLinkEvent">')+("<button onclick=\"routeViewOnMap('{viewLink}','{layerId}')\" class=\"routeViewOnMap\">"+resources.ViewOnMap)+'</button><h4><img src="{iconUrl}" alt="{heading}">&nbsp;{heading}</h4><div class="text">{text}</div></div>',x=i);let a="";for(o in n){let t="";for(var r in n[o].orderedPiecesOfInfo)if(n[o].orderedPiecesOfInfo[r].title==resources.Description){let e=n[o].orderedPiecesOfInfo[r].text.trim().replace(/\s\s+/g," ");r=(r='<div class="shorten">')+(e=e.replace(" .","."))+"</div>";t+=x.replaceAll("{text}",r)}a+=t.replaceAll("{iconUrl}",n[o].icon.url).replaceAll("{heading}",n[o].heading).replaceAll("{viewLink}",n[o].urlFriendlyName).replaceAll("{layerId}",n[o].urlFriendlyName+"-"+n[o].eventId)}return 1<n.length&&(e='<div class="eventRouteSection"><button id="eventRouteToggle'+e+'" class="eventRouteToggle" data-id="'+(i=n[0].id+e+t)+'" data-toggle="collapse" title="Toggle" aria-expanded="true" class=""> '+resources.Events+'<span class="badge">'+n.length+'</span><i id="'+i+'circle" class="far fa-plus-circle"></i></button><div id="'+i+'div" class="routeEvents" style="display:none;">',a=e+a+"</div></div>"),a},N=function(e){if(!e||!e.length)return"";let t='<div class="route-tooltip routeLinkEvent">';t=t+('<h4><img class="notMarker" src="/Content/Images/ic_wta.svg" alt="'+resources.RoadConditions+'">'+resources.RoadConditions)+'</h4><ul class="wtaInfo">';for(const n of e.reduce(function(e,t){return 0==e.filter(function(e){return t.id==e.id}).length&&e.push(t),e},[]))t+='<li><span class="wtaDot" style="background-color: '+n.colour+'" aria-hidden="true"></span>'+n.statusName+"</li>";return t=t+"</ul>"+"</div>"},G=function(t){let n="";if(t&&0<t.length){var o=Math.round(100/t.length);for(let e=0;e<t.length;e++){var i=o*e;n+=t[e].colour+" "+i+"%, "+t[e].colour+" "+(i+o)+"%",e+1!=t.length?n+=",":n+=", "+t[e].colour+" 100%"}return'class="instructionText" style ="border-style: solid; border-width: 5px; border-right: 0; margin-left: -15px; margin-top: -10px; margin-bottom: -10px; padding-left: 30px; padding-top: 5px; padding-bottom: 5px; border-image: linear-gradient(to bottom, '+n+') 1 100%;"'}return'class="instructionText"'},I=RoutePlannerStatus.updateStatus,O=function(e,t){t=s.GetSimplePlace(t);t&&g.setLocation(!1,t,!0)},M=(i.SetWaypoint=function(e,t,n){g.setWaypoint(e,Number(t)+1,!0,n)},i.getActiveRouteIndex=function(){var e=$("#routeTabs li.active a").attr("data-id");return isNaN(e)?null:e-1},i.getNameForSimplePlace=function(e,t){g.getNameForSimplePlace(e,t)},i.displayRoutes=function(e){o(),0<e[0].waypoints.length&&(e[0].waypoints[e[0].waypoints.length-1].poiId?(O(null,e[0].waypoints[e[0].waypoints.length].poiId),g.setLocation(!0,e[0].waypoints[0],!0)):g.setAllLocations(e[0].waypoints)),s.SetupAutoComplete("#startLocationText",g.getLocations()),s.SetupAutoComplete("#endLocationText",g.getLocations()),C(e,!1)},i.displayRoute=function(e){i.displayRoutes([e],!1)},i.displayTransitRoute=function(t){o(),g.setStartEndPoint(new s.GetCustomSimplePlace(t.fromAddress,null,t.fromLat,t.fromLong,!1),new s.GetCustomSimplePlace(t.toAddress,null,t.toLat,t.toLong,!1)),g.getLocationArray().then(e=>{u(e)?m():T(e,t.options,!1)}),"undefined"!=typeof TransitOptions&&TransitOptions.SetTransitOptions(t.options)},i.resetRoutePlanner=o,i.calculateRoute=function(e){var t={};t.currentTarget={id:e},t.target={id:e},t.preventDefault=function(){},n(t)},i.clearLoationsWithoutPoints=function(){g.clearLoationsWithoutPoints()},function(e,t,n){var o='<div class="form-group hidden-print" data-waypointparent="'+e+'"><div class="input-group"><label class="sr-only" for="waypointText-'+e+'">'+resources.Waypoint+" "+e+'</label><div class="input-group-addon"><div class="waypointCircle" aria-hidden="true"></div></div><input type="text" class="form-control waypointText" id="waypointText-'+e+'" placeholder="'+resources.Waypoint+'"><div class="input-group-btn"><button class="btn btn-default" id="setWaypointGeolocation-'+e+'" type="button" data-wpId="'+e+'" title="'+resources.MyLocation+'"><i class="far fa-crosshairs" aria-hidden="true"></i><span class="sr-only">'+resources.MyLocation+'</span></button><button class="btn btn-default" aria-label= "'+resources.Remove+'" id="deleteWaypoint-'+e+'" type="button" data-wpId="'+e+'" title="'+resources.Remove+'"><i class="far fa-times"</button></div></div></div>';$("#waypoints").append(o),$("#waypointText-"+e).val(t),$("#deleteWaypoint-"+e).click(function(){var e=$(this).data("wpid");g.ClearWaypoint(e,"lookupGMarker",!0)}),$("#setWaypointGeolocation-"+e).click(function(){var e=$(this).data("wpid");a.AttemptToSetWaypointWithUsersGeolocation(e)}),s.SetupAutoComplete("#waypointText-"+e,g.getLocations(),n)});i.redrawWaypoints=function(e,t){var n=g.getLocations();if(t){t=n.length-1;g.addWaypoint(t),M(t,e,!1)}else{$("#waypoints").html("");for(let e=1;e<n.length-1;e++)M(e,n[e].text,!0)}},i.AddWaypointToPlanner=function(e,t){i.redrawWaypoints(e,t)},$(document).on("UserRouteDropDownVisible",function(){$(".linkRoute").toggle(!0)}),setAllLocations=function(t){g.setStartEndPoint(t[0],t[t.length-1]);for(let e=1;e<t.length-1;++e)M(e,"",!1),g.setWaypoint(t[e],e,!0,!1)};function W(e,n){(e?$(e).parent().find(".routeLinkEvent"):$(".routeTab:visible .routeLinkEvent")).each(function(){var e=$(this).find(".shorten")[0],t=$(this).find(".showMore");"windowResize"==n&&($(e).hasClass("expanded")&&$(e).removeClass("expanded"),t)&&t.remove(),e&&e.clientHeight<e.scrollHeight&&!e.nextElementSibling&&$(this).find(".text").append("<button class='showMore'>"+resources.ShowMore+"</button>")})}return $(document).ready(function(){var e,t;$("#generateRouteBtn").click(n),$("#generateTransitRouteBtn").click(n),$("#generateDriveTransitRouteBtn").click(n),$("#generateWalkOnlyRouteBtn").click(n),$("#generateBicycleOnlyRouteBtn").click(n),$("#generateRouteBtn").submit(function(e){e.preventDefault()}),$("#generateTransitRouteBtn").submit(function(e){e.preventDefault()}),$("#generateWalkOnlyRouteBtn").submit(function(e){e.preventDefault()}),$("#generateBicycleOnlyRouteBtn").submit(function(e){e.preventDefault()}),$("#generateDriveTransitRouteBtn").submit(function(e){e.preventDefault()}),window.location.hash.indexOf("#route-")<0?(e=localStorage.getItem("routeLocations"))&&(e=JSON.parse(e),setAllLocations(e.locations),e.avoidToll&&($("#avoidTollsCheckBox").prop("checked",!0),$("#routeOptions").click()),$(".myRouteBtn").trigger("click",{skipPtBSetup:!0}),("TRANSIT"===(e=localStorage.getItem("routeGenerateButton"))?$("#generateTransitRouteBtn"):"DRIVETRANSIT"===e?$("#generateDriveTransitRouteBtn"):"WALK"===e?$("#generateWalkOnlyRouteBtn"):"CYCLE"===e?$("#generateBicycleOnlyRouteBtn"):$("#generateRouteBtn")).click(),localStorage.removeItem("routeLocations")):localStorage.removeItem("routeLocations"),$(document).on("resetRoutePlanner-contextMenu",o),$(document).on("setCarpoolDestination.carpoolTooltip",function(e,t,n,o,i){"block"==$(".showSideBar").css("display")&&$(".showSideBar").trigger("click"),g.setLocation(!1,s.GetCustomSimplePlace(o,null,n,t,!1),!0),bootbox.closeMapPageDialog()}),$(document).on("clearRouteButtonClicked.routeSave",urlHash.clearHash),$("#clearRouteBtn").click(function(){o(),$(document).trigger("clearRouteButtonClicked"),$(".clearLocateBtn").trigger("click")}),$(document).on("clearUserRouteTrigger",function(){$("#clearRouteBtn").trigger("click")}),$("#swapLocationsBtn").click(function(t){var e;$("#startLocationText").val()!=$("#endLocationText").val()&&(e=$("#startLocationText").val(),$("#startLocationText").val($("#endLocationText").val()),$("#endLocationText").val(e),g.swapStartEnd(),g.setDetails(),"True"===resources.AutoGenerateDriveRoute)&&g.getLocationArray().then(e=>{null!=e&&n(t)})}),e=$.QueryString.placeId,t=$.QueryString.destination,e?O(null,parseInt(e)):t&&s.GetSimplePlaceByTextSearch(t,function(e){e&&g.setLocation(!1,e,!0)}),$(".printRoute").click(D),$(".printRoute").bind("keydown",function(e){13==e.keyCode&&D()}),0<$("#routeNotificationAlert").length&&$(".createRouteAlert .close").on("click",function(){$(".createRouteAlert").hide()}),$("#setStartGeolocation").click(function(){a.AttemptToSetLocationWithUsersGeolocation(!0,!0)}),$("#setEndGeolocation").click(function(){a.AttemptToSetLocationWithUsersGeolocation(!1,!0)}),$("#addWaypointBtn").click(function(){var e=null!=(e=$(".waypointText:last")).html()&&0===e.val().length;e||i.AddWaypointToPlanner(null,!0)}),$(document).on("checkEventOnRoutePlanner",W)}),i};$(document).on("appInitComplete",function(e,t,n){let o;o="true"==resources.DisplayLocationsInContextMenu?new AtisContextMenu(t.map,n):new NewAtisContextMenu(t,n);var i=new ContextMenu(t.map,o),t=new RoutePlanner(t,i,n);new UserRoutePlanner(t),$(document).trigger("hashChanged-urlHash"),$(document).trigger("BeforeDisplayRoute")});
let RoutePlannerAutocomplete=function(e,t,i){let l={},o,s,a;var n,r;i&&$(i).each(function(e,t){t.isGoogle=!1}),MapComp.isGoogle&&(n=new google.maps.LatLng(t.RoutingModel.MapBottomLeftBounds.Latitude,t.RoutingModel.MapBottomLeftBounds.Longitude),r=new google.maps.LatLng(t.RoutingModel.MapTopRightBounds.Latitude,t.RoutingModel.MapTopRightBounds.Longitude),o=new google.maps.LatLngBounds(n,r),s=new google.maps.places.AutocompleteService,a=new google.maps.places.PlacesService(e));function c(e,t,o,n,i,s,a,l){this.name=e,this.placeId=t,this.point={latitude:o,longitude:n},this.isGoogle=i,this.linkId=null,this.streetNumber=s,this.streetName=a,this.postalCode=l}function u(e){var t=e.label||e.name,o=e.location.latitude,n=e.location.longitude,i=l.GetAddressDetails(e.address);return new c(t,e.poiId,o,n,!1,i.streetNumber,i.streetName,i.postalCode)}l.GetAddressDetails=function(s){if(MapComp.isLibre)return MapComp.GetAddressDetails(s);{let t,o,n,i;for(let e=0;e<s.length;e++)-1<s[e].types.indexOf("route")&&(t=s[e].short_name),-1<s[e].types.indexOf("street_number")&&(o=s[e].long_name),-1<s[e].types.indexOf("postal_code")&&(n=s[e].long_name),-1<s[e].types.indexOf("administrative_area_level_1")&&(i=s[e].short_name);return{streetName:t,streetNumber:o,postalCode:n,state:i}}};l.GetGoogleLocaition=function(i){return new Promise((o,n)=>{i.poiId||n("invalid poiId"),a.getDetails({placeId:i.poiId,fields:["address_component,adr_address,alt_id,formatted_address,geometry,icon,id,name,place_id,plus_code,scope,type,url,utc_offset,vicinity"],sessionToken:i.token},(e,t)=>{i.token=new google.maps.places.AutocompleteSessionToken,t!==google.maps.places.PlacesServiceStatus.OK?n(t):(e.formatted_address=i.text,o(function(e){var t;for(t of resources.PlaceOverrides.split(";")){var o=t.split("|");e.formatted_address==o[0]&&(o=o[1].split(","),e.geometry.location=new google.maps.LatLng(o[0],o[1]))}var n=e.formatted_address||e.name,i=e.geometry.location.lat(),s=e.geometry.location.lng(),a=l.GetAddressDetails(e.address_components);return new c(n,e.place_id,i,s,!0,a.streetNumber,a.streetName,a.postalCode)}(e)))})})},l.GetLocationDetails=function(t){return t.point?.name===t.text?Promise.resolve(t.point):l.autoCompleteSource(t,t.text).then(e=>{if(0<e.length)return e=e[0],Object.assign(t,e),$(t.selector).val(t.label),MapComp.isLibre?MapComp.GetLocationInformation(t.poiId).then(e=>{Object.assign(t,{location:e.displayPosition});e=u(t);return t.point=e}):l.GetGoogleLocaition(t).then(e=>t.point=e)})},l.autoCompleteSource=function(e,n){return!(n=(n||e.text||"").trim())||n.length<resources.AutoCompleteNumCharacters?Promise.resolve($.ui.autocomplete.filter(i,n)):MapComp.isLibre?MapComp.GetPlacePrediction(n,t.RoutingModel.AutoCompleteCountryCode):((null==e.token||null==e.tokenCreatedTime||e.tokenCreatedTime<new Date(Date.now()-18e4))&&(e.token=new google.maps.places.AutocompleteSessionToken,e.tokenCreatedTime=Date.now()),e={input:n,bounds:o,componentRestrictions:{country:t.RoutingModel.AutoCompleteCountryCode.split(",")},sessionToken:e.token},s.getPlacePredictions(e).then(e=>{{e=googleResults=p(e.predictions);var o=n;let t=new RegExp("^"+$.ui.autocomplete.escapeRegex(o),"i");return $.grep(i,function(e){return t.test(e.label)}).concat(e)}}))},l.appendGoogleLogoToAutocompleteResults=function(e,t){MapComp.isGoogle&&$("ul.ui-autocomplete.ui-menu").append($("<div>").css("text-align","right").html($("<img>").attr("src","/Content/images/poweredByGoogle.png")))};let p=function(e){var t,o=[];for(t of e)o.push({label:t.description||t.name,poiId:t.place_id,isGoogle:!0,googleObj:t});return o},d=(l.GetCustomSimplePlace=function(e,t,o,n,i){return new c(e,t,o,n,i)},l.selectHandler=function(e,t){let o=this;MapComp.isLibre?(Object.assign(o,t.item),MapComp.GetLocationInformation(o.poiId).then(e=>{Object.assign(o,{location:e.displayPosition}),o.point=u(o),$(document).trigger("locationSelected-autocomplete",o)})):(o.poiId=t.item.poiId,o.isGoogle=!0,o.text=t.item.label,l.GetGoogleLocaition(o).then(e=>{o.point=e,$(document).trigger("locationSelected-autocomplete",o)}))},l.SetupAutoComplete=function(n,i,e){var t={locations:i,selector:n};$(n).autocomplete({minLength:resources.AutoCompleteNumCharacters,source:function(e,t){var o=this.locations.find(e=>e.selector==this.selector);l.autoCompleteSource(o,e.term).then(e=>{t(e)}).catch(d)}.bind(t),select:l.selectHandler.bind(t),open:l.appendGoogleLogoToAutocompleteResults,delay:150}).click(function(){$(this).select()}).attr({"data-exists":"undefined"!=e&&e}),$(n).off("focusout"),$(n).on("focusout",e=>{const t=i.find(e=>e.selector==n);var o=t.text;t.text=$(t.selector).val(),o!==t.text&&t.text&&t.text.length>=resources.AutoCompleteNumCharacters&&l.GetLocationDetails(t).then(()=>{$(document).trigger("locationSelected-autocomplete",t)})})},function(e){console.log(e)});return l};
var RoutePlannerStatus=new function(){var c={StatusTypes:{info:"alert-info",success:"alert-success",danger:"alert-danger"},updateStatus:function(t,e,o,a,r){var i,s,u,l,n=$("#statusBar"),d=$("#routePlannerDesc"),h=!1;for(i in c.StatusTypes)n.removeClass(c.StatusTypes[i]),e==c.StatusTypes[i]&&(h=!0);n.addClass(h?e:c.StatusTypes.info),0<$("#routeNotificationAlert").length?(s=$(".createRouteAlert"),u=$(".createRouteAlert .msg"),t&&1<t.length?(d.hide(),n.attr("style","display:block;"),n.html(t).show(),o&&a&&(u.html('<i class="fas fa-bell" aria-hidden="true"></i><a href= "/my511/routealert?routeID='+o+'">'+window.resources.CreateAlertLink),Modernizr.mq("(min-width: 993px)")?(l=$(".sideBarColContainer").width()+40,s.css("left",l+"px")):s.insertAfter("#routingInput #statusBar"),s.show())):(n.text("").hide(),u.html(""),s.hide())):t&&1<t.length?(d.hide(),n.attr("style","display:block;"),n.html(t).show(),o&&a&&("true"===resources.ShowSimplifyRouteNotificationModal?Cookies.get("_hideSimplifyRouteNotificationModal")||($("#subscriberRouteName").attr("data-subscriberRouteId",o).text(r),$(".routeNotificationMsg").show(),$(".doNotShowThisMessageAgain").show(),l="/my511/routealert?routeID="+o,$(".editRouteAlert").attr("href",l),$("#quickRouteNotificationModal").modal("show")):Cookies.get("_hideRouteNotificationModal")||($("#createAlterForRoute").attr("href","/my511/routealert?routeID="+o),$("#routeNotificationModal").modal("show")))):n.text("").hide()}};return c};
$(document).ready(function(){var e=!0,t=($("ul.nav-tabs > li").hasClass("active")||(t=""===window.location.hash||0<=window.location.hash.indexOf("-")?"#MyRoutes":window.location.hash.replace(":",""),1===(t=$("#MainTabs a[href='"+t+"']")).length?t.tab("show"):0===t.length&&$("#RoutesTab > a").trigger("click")),$("#MainTabs a").click(function(e){e.preventDefault(),$(this).tab("show"),"#MyRoutes"==$(this).attr("href")?window.DisplayMyCameras():"#Alerts"==$(this).attr("href")&&$(document).trigger("checkAlertsTab")}),$("ul.nav-tabs > li > a").on("shown.bs.tab",function(e){e=$(e.target).attr("href").substr(1);window.location.hash=":"+e}),window.location.hash.replace(":","")),a=(setTimeout(function(){$(".twitter-timeline").each(function(){var e=$(this).contents().find("head");e.length&&e.append('<style type="text/css">.timeline { max-width: 100% !important; } </style>')})},1e3),0<=t.toLowerCase().indexOf("route")),n=0<=t.toLowerCase().indexOf("camera"),o=0<=t.toLowerCase().indexOf("transitregion"),i=0<=t.toLocaleLowerCase().indexOf("news"),s=0<=t.toLocaleLowerCase().indexOf("alerts"),i=(a||n||o||i||0<=t.indexOf("-")?(e=!1,$("#RoutesTab").hasClass("active")||i||($("#RoutesTab > a").trigger("click"),a=window.location.hash.replace(":",""),n=t.lastIndexOf("#"),o=t.length,t=0===n?t:t.substring(n,o),a.toLowerCase()!==t&&(window.location.hash+=t))):(e=!0,!s&&0<=t.indexOf("#")&&AlertHelper.addAlertText(AlertType.Error,resources.InvalidHashUrl)),$(document).on("contentFiltered",function(){GetAlertContent(e),e=!1}),adjustHeight(),OrganizeRouting(),document.querySelector(".openInfoTab")),n=null!=document.getElementById("AlertsTab");i&&n&&(i.style.display="block")});
let RoutingPolyline=function(d,e,c,a){let y={},f=[],x=null,m=null,k=d.map,t={strokeWeight:4,strokeOpacity:1,strokeColor:resources.RoutePolylineColour,zIndex:-99},v=(y.AddRoute=function(e,n,i,l,r,a,s){("string"==typeof e||e instanceof String)&&(e=[e]);var p=o();i=h(i);for(let t in e){var u,g=e[t];l&&(i.map=k);let o;MapComp.isLibre?(u=MapComp.decodePolyline(g),o={pid:p,id:p+"_"+t,polyline:u,waypoints:n,strokeColor:i.strokeColor,isActive:!1,index:t,isTransit:r,routeNum:s,draggableRoutesEnabled:!0,addWaypoint:({latLng:e,lineIndex:o})=>{e={point:{latitude:e.lat,longitude:e.lng}};c.getNameForSimplePlace(e,function(e){c.clearLoationsWithoutPoints(),c.SetWaypoint(e,o,!1),c.AddWaypointToPlanner(e.name,!1),"True"!==resources.AutoGenerateDriveRoute&&c.calculateRoute()})}}):(g&&(i.path=google.maps.geometry.encoding.decodePath(g)),o={pid:p,id:p,polyline:new google.maps.Polyline(i),strokeColor:i.strokeColor,isActive:!1,index:t,isTransit:r},google.maps.event.addListener(o.polyline,"click",function(e){o.isActive||$('#routeTabs a[data-guids="'+o.id+'"]').click()}),a&&0<a.length&&0<a[t].length&&google.maps.event.addListener(o.polyline,"mouseover",function(e){o.isActive?d.appHelper.showInfoWindow(a[t],null,!0,e.latLng):d.appHelper.showInfoWindow('<span class="simpleToolTip"> Select route '+s+" to see details</span>",null,!0,e.latLng)}),!r&&"True"===resources.DraggableRoutesEnabled&&Modernizr.mq("(min-width: 992px)")&&(o.polyline.addListener("dragstart",function(e){var o=v(this),t=google.maps.geometry.encoding.decodePath(google.maps.geometry.encoding.encodePath(o.polyline.getPath())),t=new google.maps.Polyline({path:t,map:k,strokeColor:o.strokeColor,draggable:!1});o.copy=t,o.polyline.setOptions({strokeColor:"transparent"}),o.isActive&&(o.isMoving=!0,m=new google.maps.Marker({position:e.latLng,icon:{path:google.maps.SymbolPath.CIRCLE,scale:3},draggable:!1,map:k}),x=o)}),o.polyline.addListener("drag",function(e){x&&m&&m.setPosition(e.latLng)}),o.polyline.addListener("dragend",function(e){x&&(v(this).copy.setMap(null),y.isOnActivePolylines(e.latLng)||(e={point:{latitude:e.latLng.lat(),longitude:e.latLng.lng()}},c.getNameForSimplePlace(e,function(e){c.clearLoationsWithoutPoints(),c.SetWaypoint(e,x.index,!1),c.AddWaypointToPlanner(e.name,!1),"True"!==resources.AutoGenerateDriveRoute&&c.calculateRoute(),m.setMap(null),m=null,x=null})))}))),f.push(o)}return p},function(e){for(var o in f)if(f[o].polyline===e)return f[o]}),o=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var o=16*Math.random()|0;return("x"===e?o:3&o|8).toString(16)})},h=function(e){var o=JSON.parse(JSON.stringify(t));return e&&(o.strokeWeight=e.strokeWeight||o.strokeWeight,o.strokeOpacity=e.strokeOpacity||o.strokeOpacity,o.strokeColor=e.strokeColor||o.strokeColor,o.zIndex=e.zIndex||o.zIndex),o};return y.SetOptions=function(o,e){var t=$.grep(f,function(e){return e.pid==o});0<t.length&&(t=t[0].polyline,e=h(e),t.getMap()&&(e.Map=k),t.setOptions(e))},y.ToggleVisibility=function(o){var e=$.grep(f,function(e){return e.pid==o});0<e.length&&(e=e[0].polyline).setMap(e.getMap()?null:k)},y.HideAll=function(){for(var e in d.appHelper.closeInfoWindow(),f)MapComp.isLibre?MapComp.clearRouteLInes(f[e]):f[e].polyline.setMap(null)},y.ShowAll=function(){if(MapComp.isLibre){let e=[],o=[];for(var t in f)o.push(f[t].id),e=e.concat(f[t].polyline),MapComp.createRouteLine(f[t]);MapComp.fitRoutesOnMap({coords:e,ids:o})}else for(var e in f)f[e].polyline.setMap(k)},y.DeleteAll=function(){y.HideAll(),f=[],x=null},y.Delete=function(o){var e=$.grep(f,function(e){return e.pid==o});if(0<e.length){for(var t of e)t.polyline.setMap(null);f=$.grep(f,function(e){return e.pid==o},!0)}},y.MakeActive=function(e){var o,t=e.split(";");for(o in f){var n,i=f[o].polyline,l={zIndex:2,strokeWeight:3.5,strokeColor:f[o].strokeColor,defaultStrokeColor:f[o].strokeColor},r={zIndex:1,strokeWeight:3,strokeColor:"#6A6A6A",defaultStrokeColor:f[o].strokeColor};-1<t.indexOf(f[o].pid)?(f[o].isActive=!0,!f[o].isTransit&&"True"===resources.DraggableRoutesEnabled&&Modernizr.mq("(min-width: 992px)")&&(MapComp.isLibre?f[o].draggableRoutesEnabled=!0:i.setDraggable(!0)),MapComp.isLibre?f[o]={...f[o],...l,strokeColor:f[o].strokeColor||resources.RoutePolylineColour}:i.setOptions(l),MapComp.isLibre&&(2==f[o].waypoints.length?(a.adjustMarker(0,i[0][0]-1e-7,i[0][1]),l=i[i.length-1],a.adjustMarker(1,l[0]-1e-7,l[1])):(l=parseInt(f[o].index),n=i[i.length-1],0==l&&a.adjustMarker(l,i[0][0]-1e-7,i[0][1]),a.adjustMarker(l+1,n[0]-1e-7,n[1])))):(f[o].isActive=!1,MapComp.isLibre?(f[o].draggableRoutesEnabled=!1,f[o]={...f[o],...r}):(i.setDraggable(!1),i.setOptions(r)))}y.ShowAll()},y.getActivePolylines=function(){let e="";for(var o in f)f[o].isActive&&(e+=f[o].pid+";");return e},y.isOnActivePolylines=function(e){for(var o in f)if(f[o].isActive&&google.maps.geometry.poly.isLocationOnEdge(e,f[o].polyline))return!0;return!1},y};
var TransitDirections=function(s,l,u){function i(e,t,a){if($(u).html(t.summaryHtml),t.polyline&&0<t.polyline.length){for(j=0;j<t.polyline.length;j++)for(o=0;o<t.polyline[j].length;o++){var r=t.polyline[j][o].polyline,n={strokeWeight:4,strokeOpacity:1,strokeColor:"#252525",zIndex:2};t.polyline[j][o].transit_details&&(t.polyline[j][o].line_color&&-1==t.polyline[j][o].line_color.indexOf("#")&&(t.polyline[j][o].line_color="#"+t.polyline[j][o].line_color),n.strokeColor=t.polyline[j][o].line_color||"#00BFFF"),c=l.AddRoute(r,null,n,0==j,!0,[t.polyline[j][o].infoWindowInformation],j+1),a&&!$("#transitRouteTabs").length&&$("#routeTabs a").each(function(){$(this).attr("data-guids",$(this).attr("data-guids")+";"+c)},[c]),$("#transitRouteTabs").length&&(r=$("#transitRouteTabs :nth-child("+(j+1)+") a")).attr("data-guids",c+";"+r.attr("data-guids")),document.getElementsByClassName("directionStep")&&(document.getElementsByClassName("directionStep")[o].style.borderColor=n.strokeColor)}MapComp.isLibre&&l.ShowAll(),a||d.fitMapToRoute(s.map,e)}var o,i;for(o in t.enableMapLayers)(i=$("input[type='checkbox'][data-layerid = "+t.enableMapLayers[o]+"]",$("#layerSelection")))&&(i[0].checked=!0);for(o in t.disableMapLayers)(i=$("input[type='checkbox'][data-layerid = "+t.disableMapLayers[o]+"]",$("#layerSelection")))&&(i[0].checked=!1);$("#routeResults").show(),$("#transitRouteTabs").length&&($("#transitRouteTabs a").click(function(e){e.preventDefault(),$(this).tab("show"),l.MakeActive($(this).attr("data-guids")+p("#routeTabs li.active a"))}),$("#transitRouteTabs a:first").tab("show"),l.MakeActive($("#transitRouteTabs a:first").attr("data-guids")+p("#routeTabs li.active a"))),$("#routeResults").scrollTop(0),$("#routeResults").trigger("adjustRoutePlannerHeight"),$(".startPoint").text(t.waypoints[0].nameDirection),$(".endPoint").text(t.waypoints[t.waypoints.length-1].nameDirection),a&&$("#routeTabs a").each(function(){var e,t,a=+$(this).attr("data-travelTimeInSeconds")+ +$("#transitTimeInSeconds").val();$(this).find(".badge").text((a=a,e=Math.floor(a/3600),(t=Math.floor((a-3600*e)/60))<1&&0<a-3600*e-60*t&&(t=1),0<e?e+" "+window.resources.Hr+" "+t+" "+window.resources.Min:t+" "+window.resources.Min))})}var e={},c=null,d=new MapFctns;function p(e){var e=$(e),t="";return t=null!=e&&e.length&&e!=this?";"+e.attr("data-guids"):t}return e.Reset=function(){l.Delete(c),$(u).html(null)},e.Directions=function(r,n,o){$.ajax("/map/GetTransitRoute",{type:"POST",data:{Waypoints:r,travelMode:n.travelMode||n}}).done(function(e){"OK"==e.status?(o?$(document).trigger("driveTransitRouteGenerated-routePlanner",[e]):$(document).trigger("transitRouteGenerated-routePlanner",[e]),i(r,e,o),t={walking:"walking",bicycling:"bicycle",transit:"bus"},(a=document.getElementById("transitRouteResults").getElementsByTagName("i")[0])&&(a.className="far fa-"+t[n.travelMode]+" fa-2x",a.setAttribute("title",t[n.travelMode]))):o?($(document).trigger("clearRouteView-routePlanner"),RoutePlannerStatus.updateStatus(window.resources.DriveAndTransitRouteNotAvailable)):"ZERO_RESULTS"==e.status||"NOT_FOUND"==e.status||"PATH_NOT_FOUND"==e.status?($(document).trigger("clearRouteView-routePlanner"),RoutePlannerStatus.updateStatus(window.resources.RouteNotAvailable)):"OUTSIDE_BOUNDS"==e.status?($(document).trigger("clearRouteView-routePlanner"),RoutePlannerStatus.updateStatus(window.resources.AreaNotCovered)):($(document).trigger("clearRouteView-routePlanner"),RoutePlannerStatus.updateStatus(window.resources.ErrorRetrievingYourRoute,RoutePlannerStatus.StatusTypes.danger));var t,a=Array.from(document.getElementsByClassName("substeps"));a.forEach(e=>{arrowDirection.setTransitSubstepImg(e)}),0==a.length&&Array.from(document.getElementsByClassName("directionStep")).forEach(e=>{arrowDirection.setStepImg(e)})}).fail(function(){$(document).trigger("clearRouteView-routePlanner"),RoutePlannerStatus.updateStatus(window.resources.ErrorRetrievingYourRoute,RoutePlannerStatus.StatusTypes.danger),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")}).always(function(){loadBlockerApi.hideSpinner("calculateRoute")})},e.SaveRoute=function(e,t){$.ajax("/map/SaveTransitRoute",{type:"POST",data:{Waypoints:e}}).done(function(e){}).fail(function(){$(document).trigger("clearRouteView-routePlanner"),RoutePlannerStatus.updateStatus(window.resources.ErrorRetrievingYourRoute,RoutePlannerStatus.StatusTypes.danger),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")}).always(function(){loadBlockerApi.hideSpinner("calculateRoute")})},e};
var UserRoutePlanner=function(i){function n(){if(window.atisUserRoutes){var e,t=$(".atisUserDdVals");for(e in t.empty(),window.atisUserRoutes)t.append($('<li role="presentation">').append($('<a role="menuitem" tabindex="-1" href="">').attr("data-id",e).text(window.atisUserRoutes[e].routeName)))}$(document).trigger("dropdownPopulated-userRoutePlanner")}var u=null,l=$("#btnSaveRoute"),a=$(".routeName"),d=$("#routeName",a),c=null,r=null,t=null,s=function(){var e=$(".atisUserDd");$(".btn .atisUserDdBtnText",e).text(t).removeAttr("data-id")},o=!1;function p(e){var t;0<$("#btnSaveRoute").length&&(o=e,(t=$("#btnSaveRoute")[0]).disabled=e,t.classList.toggle("disabled",e))}var e,g,R=function(e){null!=e&&0<e.length&&(0<=e.indexOf("-")?(loadBlockerApi.showSpinner("loadSavedRoute"),$.ajax("/Api/Route/GetRouteByShareID?shareId="+e,{type:"POST"}).done(function(e){e?1==e.isTransit?i.displayTransitRoute(e):(i.displayRoute(w(e)),i.redrawWaypoints(!1)):(i.resetRoutePlanner(),RoutePlannerStatus.updateStatus(resources.SorryUnableToFetchRoute))}).fail(function(){RoutePlannerStatus.updateStatus(resources.SorryUnableToFetchRoute)}),loadBlockerApi.hideSpinner("loadSavedRoute")):window.location.href="my511/login?ReturnUrl=/map%23route-"+e)},S=function(e){var t,o=-1;for(t in window.atisUserRoutes=window.atisUserRoutes||[],window.atisUserRoutes)(window.atisUserRoutes[t].shareId==e.shareId||window.atisUserRoutes[t].routeName==e.routeName)&&(window.atisUserRoutes[t]=e,o=t);-1==o&&(window.atisUserRoutes.push(e),o=window.atisUserRoutes.length-1),s(),n(),$('.atisUserDd li a[data-id="'+o+'"]').click()},h=function(e){var t=urlHash.hash();return e||t&&0==t.toLowerCase().lastIndexOf("route-",0)?(t="route-{0}".replace("{0}",e||""),e?urlHash.hash(t):e=(e=urlHash.hash()).substring(e.indexOf("-")+1),e):null},f=function(){if(r&&r.shareId){let e=!1;bootbox.dialog({title:resources.LinkToYourRoute,message:`<input class="form-control linkToRoute" value="${window.location.protocol}//${window.location.host}/map#route-${r.shareId}"/> 
                          <p class="copyRouteLink">${resources.CopyFromBrowserText}</p>
                          <p class="copyRouteLinkFeedback">${resources.LinkCopied}</p>`,buttons:{copyBtn:{label:resources.CopyLink,className:"btn btn-info",callback:function(){return e||(e=!0,navigator.clipboard.writeText(document.querySelector(".linkToRoute").value),$(".copyRouteLinkFeedback").fadeIn(500).delay(500).fadeOut(1e3),setTimeout(()=>{e=!1},2e3)),!1}}}})}else RoutePlannerStatus.updateStatus(resources.SelectRouteFromDropdownText,RoutePlannerStatus.StatusTypes.danger)},m=function(e,t){e.statistics&&e.statistics.date&&new Date-e.statistics.date<6e4?t(e.statistics):$.ajax("/Api/Route/GetUserRouteStatistics?segmentId="+e.segmentId,{type:"POST"}).done(function(e){e.date=new Date,t(e)}).fail(function(){t(null)})},v=function(e){var t,o=null;for(t in window.atisUserRoutes){if(window.atisUserRoutes[t].shareId==e){o=t;break}if(window.atisUserRoutes[t].segmentId==e){o=t;break}}return o},w=function(e){var t={};return t.segmentId=e.segmentId,t.routeName=e.routeName,t.encodedPolyline=e.encodedPolyline,t.includesTollLink=e.includesTollLink,t.includesFerryLink=e.includesFerryLink,t.allLinks=e.allLinks,t.statistics=e.statistics,t.shareId=e.shareId,t.cacheId=e.cacheId,t.instructions=e.instructions,t.saveable=e.saveable,t.waypoints=y(e.encodedMarkers),t},y=function(e){var t=[];if(e){e=JSON.parse(e);for(var o=0;o<e.length;o++){var n=e[o],a={};a.linkId=n.location.LinkId,a.name=a.nameDirection=n.location.Name,a.isForward=n.location.IsForward,a.poiId=n.location.PoiId,a.point={latitude:n.lat,longitude:n.lng},t.push(a)}}return t},I=function(e,t){var o={},n=u;return o.shareId=n.shareId,o.routeName=e,o.fromAddress=n.waypoints[0].name,o.fromLat=n.waypoints[0].point.latitude,o.fromLong=n.waypoints[0].point.longitude,o.toAddress=n.waypoints[n.waypoints.length-1].name,o.toLat=n.waypoints[n.waypoints.length-1].point.latitude,o.toLong=n.waypoints[n.waypoints.length-1].point.longitude,o.options=t,o},k=function(e,t){var o={},t=u[t];return o.cacheId=t.cacheId,o.segmentId=t.segmentId,o.routeName=e,o.encodedPolyline=t.encodedPolyline,o.encodedMarkers=function(e){for(var t=[],o=0;o<e.length;o++){var n=e[o];var a={};var s=o==0?"A":o==e.length-1?"B":"W";a.lat=n.point.latitude;a.lng=n.point.longitude;a.letter=s;a.location={Name:n.nameDirection==null?n.name:n.nameDirection,X:n.point.longitude,Y:n.point.latitude,LinkId:n.linkId,IsForward:n.isForward,Letter:s,PoiId:n.poiId};t.push(a)}return JSON.stringify(t)}(t.waypoints),o.includesTollLink=t.includesTollLink,o.includesFerryLink=t.includesFerryLink,o.lengthMeters=t.statistics.lengthMeters,o.postedTravelTimeSeconds=t.statistics.postedTravelTimeSeconds,o.subscriberRouteId=t.subscriberRouteId,o.shareId=t.shareId,t.statistics.instructions&&(o.instructions=t.statistics.instructions),o.previousTransitShareId=u.shareId,o};if($(document).on("routeCleared-routePlanner.routeSave routingFail-routePlanner.routeSave driveTransitRouteGenerated-routePlanner.routeSave",function(e){r=u=null,a.toggle(!1),l.toggle(!1),d.val(null),s()}),$(document).on("clearRouteButtonClicked",function(e){c=null,p(!1)}),$(document).on("transitRouteGenerated-routePlanner.routeSave",function(e,t){"true"===resources.SaveTransit?(u=t,r&&(u.shareId=r.shareId),c="transit",a.toggle(!0),d.focus(),l.toggle(!0)):(a.toggle(!1),l.toggle(!1))}),$(document).on("routeGenerated-routePlanner.routeSave",function(e,t){var o=null!=u&&u.length&&u[0].segmentId?u[0].segmentId:null;c="drive",u=t,r&&(u.shareId=r.shareId),$(u).each(function(e,t){t.statistics.date=new Date}),o&&$(u).each(function(e,t){t.segmentId=o}),a.toggle(!0),d.focus(),!1===u[0].saveable?(l.toggle(!1),a.toggle(!1)):(l.toggle(!0),a.toggle(!0),d.focus())}),$(document).on("hashChanged-urlHash",function(e,t){var o=h(),n=null;o&&(n=v(o))?($('.atisUserDd li a[data-id="'+n+'"]').click(),l.text(resources.Update)):o&&(R(o),l.text(resources.Save))}),$(document).on("dropdownPopulated-userRoutePlanner",function(){var e=null!=window.atisUserRoutes&&0<window.atisUserRoutes.length;$(".atisUserDd").toggle(e),e&&$(document).trigger("UserRouteDropDownVisible")}),l.on("click.routeSave",function(e){var t=(t=d.val()||"").trim();if(RoutePlannerStatus.updateStatus(),t)if(loadBlockerApi.showSpinner("saveRoute"),"transit"==c){var o="";if("undefined"!=typeof TransitOptions){var n=TransitOptions.GetTransitOptions();try{o=JSON.stringify(n)}catch(e){o=n}}var a=I(t,o);$.ajax("/My511/SaveTransitRoute",{data:a,type:"POST"}).done(function(e){a.shareId=e.shareId,a.isTransit=!0,$(document).one("transitRouteGenerated-routePlanner.routeSave-msg",function(){RoutePlannerStatus.updateStatus(resources.YourRouteHasBeenSaved,RoutePlannerStatus.StatusTypes.success)}),S(a),l.text(resources.Update)}).fail(function(){RoutePlannerStatus.updateStatus(resources.SorryErrorSavingRoute)}).always(function(){loadBlockerApi.hideSpinner("saveRoute")})}else{var s=l.text()===resources.Save,r=i.getActiveRouteIndex(),a=k(t,r);$.ajax("/Api/Route/SaveUserRoute",{data:a,type:"POST"}).done(function(e){a.segmentId=e.segmentId,a.allLinks=e.allLinks,a.statistics=u[r].statistics,a.subscriberRouteId=e.subscriberRouteId,a.shareId=e.shareId,$(document).one("routeGenerated-routePlanner.routeSave-msg",function(){RoutePlannerStatus.updateStatus(resources.YourRouteHasBeenSaved,RoutePlannerStatus.StatusTypes.success,a.subscriberRouteId,s,a.routeName)}),S(a),l.text(resources.Update)}).fail(function(e){if(400==e.status){for(var t="",o=0;o<e.responseJSON.length;o++)t+=e.responseJSON[o].errorMessage+"<br>";RoutePlannerStatus.updateStatus(t)}else RoutePlannerStatus.updateStatus(resources.SorryErrorSavingRoute)}).always(function(){loadBlockerApi.hideSpinner("saveRoute")})}else RoutePlannerStatus.updateStatus(resources.PleaseEnterRouteNameToSave);return!1}),$(".linkRoute").click(f),$(".linkRoute").bind("keydown",function(e){13==e.keyCode&&f()}),document.querySelector("#routeName")){let t=document.querySelector("#statusBar");document.querySelector("#routeName").addEventListener("input",e=>{e.target.value.length>parseInt(resources.RouteNameLengthLimit)&&!o?($("#routeNameTooLong").show(),p(!0)):e.target.value.length<=parseInt(resources.RouteNameLengthLimit)&&o&&($("#routeNameTooLong").hide(),p(!1)),"none"!==t.style.display&&(t.style.display="none")}),document.querySelector(".atisUserDdVals").addEventListener("click",e=>{$("#routeNameTooLong").hide()})}return"undefined"!=typeof TransitOptions&&TransitOptions.init(),l.length&&(l.toggle(!1),a.toggle(!1),d.attr("placeholder",resources.EnterRouteNameToSave),e=$(".atisUserDd"),g=$(".btn .atisUserDdBtnText",e),t=g.text(),e.on("click","li a",function(e){var t,o,n,a=$(this),s=a.attr("data-id");(r=window.atisUserRoutes[s]).isTransit?(t=r.routeName,h((o=r).shareId),i.displayTransitRoute(r),r=o,d.val(t),g.text(a.text()).attr("data-id",s),l.text(resources.Update)):(loadBlockerApi.showSpinner("loadSavedRoute"),n=w(r),m(n,function(e){e?(r.statistics=e,n.statistics=e,i.displayRoute(n),r=window.atisUserRoutes[s],h(n.shareId),setTimeout(function(){g.text(a.text()).attr("data-id",s),u=[n],d.val(n.routeName)},0)):(i.resetRoutePlanner(),RoutePlannerStatus.updateStatus(resources.SorryUnableToFetchRoute)),i.redrawWaypoints(!1),loadBlockerApi.hideSpinner("loadSavedRoute"),l.text(resources.Update)})),e.preventDefault()}),n()),{}};
