var AtisContextMenu=function(e,t){var s,n={populateMenu:function(e,r,a,i,u){var t=16;$.ajax("/api/route/getlocations?latitude="+i.lat()+"&longitude="+i.lng()+"&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="+e.lat()+"&longitude="+e.lng()+"&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()},m=(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=p(t);if(null!=o){o=s[o];m(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=p(t);if(null!=o){o=s[o];m(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")})}),p=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:a.lat(),longitude:a.lng()}}]),$("#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:a.lat(),longitude:a.lng()}}]),contextMenu.fadeOut(75)},setupEventHandlers:function(e){},getNearestLocations:function(e,t,o){var n=16;o&&(n=r.zoom),$.ajax("/api/route/getlocations?latitude="+e.lat()+"&longitude="+e.lng()+"&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()})})});var RoutePlanner=function(s,e,t){function n(o){o.preventDefault(),h=[],m=0;var e=$("#startLocationText").val(),t=$("#endLocationText").val();e.match(/^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$/g)&&t.match(/^(\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)$/g)?i([{point:{latitude:e.split(",")[0],longitude:e.split(",")[1]}},{point:{latitude:t.split(",")[0],longitude:t.split(",")[1]}}],o):u.getLocationArray().then(e=>{var t,n;y(e)?R(!0):(t=((n=e)[0].point.latitude||"rand")==n[n.length-1].point.latitude&&(n[0].point.longitude||"rand")==n[n.length-1].point.longitude,n=(n[0].linkId||"rand")==n[n.length-1].linkId,t||n?(I(resources.StartAndEndLocationCannotBeSame),R(!0)):(I(),i(e,o)))}).catch(()=>I(resources.PleaseCheckStartEndLocation)),d.getStreetView().setVisible(!1),$(document).off("keypress",null,WaypointManager.enterkeyHandler)}function o(){$(".waypointContainer").hide(),R(),h=[],m=0,T="",localStorage.setItem("routeGenerateButton",""),"undefined"!=typeof TransitOptions&&TransitOptions.reset(),u.clearAll(),$("#btnSaveRoute").text(resources.Save),$(document).trigger("routeCleared-routePlanner"),0<$("#Map_Index_RoutePlannerDescription > div").contents().length&&$("#routePlannerDesc").show(),$(document).off("keypress",null,u.enterkeyHandler)}function r(){$(document).trigger("routingFail-routePlanner")}function i(e,t){t.currentTarget.id=t.currentTarget.id||t.target.id,loadBlockerApi.showSpinner("calculateRoute"),R(),$("#routePlannerDesc").hide(),u.setDetails();var o,i,a={},r={};if("undefined"!=typeof TransitOptions){if(t&&"generateWalkOnlyRouteBtn"===t.currentTarget.id&&TransitOptions.UpdateTransitOptions("WALK"),t&&"generateBicycleOnlyRouteBtn"===t.currentTarget.id&&TransitOptions.UpdateTransitOptions("BICYCLE"),t&&"generateTransitRouteBtn"===t.currentTarget.id&&TransitOptions.UpdateTransitOptionsFromDropDown(),(r=TransitOptions.GetTransitOptions()).error)return loadBlockerApi.hideSpinner("calculateRoute"),RoutePlannerStatus.updateStatus(r.errMsg,RoutePlannerStatus.StatusTypes.danger);try{r=JSON.stringify(r)}catch(e){}}0<$("#avoidTollsCheckBox").length&&(a.AvoidTolls=$("#avoidTollsCheckBox").is(":checked")),0<$("#avoidFerriesCheckBox").length&&(a.AvoidFerries=$("#avoidFerriesCheckBox").is(":checked")),t.currentTarget.id&&""!=t.currentTarget.id?T=t.currentTarget.id:t.currentTarget.id=T,t&&"generateDriveTransitRouteBtn"===t.currentTarget.id?(r.travelMode="transit",$(".waypointContainer").hide(),loadBlockerApi.hideSpinner("calculateRoute"),$(".routeName").toggle(!1),$("#btnSaveRoute").toggle(!1),d.setZoom(12),d.panTo(new google.maps.LatLng(e[0].point.latitude,e[0].point.longitude)),I(resources.DriveTransitHelpText),o=resources.ParkAndRideLayers.split(","),i=[],o.forEach(function(e){$(document).on("layerRefreshed-iconsAdded."+e,function(e,t,n){-1<o.indexOf(t)&&($(document).off("layerRefreshed-iconsAdded."+t),t=(t=s.appHelper.iconManager.GetIconLayer(t)).GetIcons(),i=i.concat(t),t.forEach(function(o){o.listenerAdded||(o.listenerAdded=!0,o.addListener("mouseup",function(n){u.getLocationArray().then(e=>{var t;y(e)?(R(),w(i,"mouseup"),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")):(loadBlockerApi.showSpinner("calculateDriveTransitRoute"),t=c.GetCustomSimplePlace(o.title,null,n.latLng.lat(),n.latLng.lng(),!1),b(e,t,a,r),$("#transitRouteResults").addClass("padFix"),w(i,"mouseup"))})}))}))})}),D(o)):t&&"generateTransitRouteBtn"===t.currentTarget.id?(r.travelMode="transit",k(e,r,!1)):t&&"generateWalkOnlyRouteBtn"===t.currentTarget.id?(r.travelMode="walking",k(e,r,!1)):t&&"generateBicycleOnlyRouteBtn"===t.currentTarget.id?(r.travelMode="bicycling",k(e,r,!1)):($("#transitRouteResults").hide(),0<h.length&&h[m],b(e,!1,a))}function l(e,t,n){if($("#routePlannerDesc").hide(),0==e.length){r();var o=u.getLocations();I(o.length<=2?resources.RouteNotAvailable:resources.RouteNotAvailableWithWaypoints)}else{$(".waypointContainer").show(),$("#routeTabs").show(),$(document).trigger("routeGenerated-routePlanner",[e]),R(!0);for(var i=0;i<e.length;i++)S(e[i],i+1,t,n);$("#routeTabs a").click(function(e){e.preventDefault(),$(this).tab("show"),f.MakeActive($(this).attr("data-guids")+L("#transitRouteTabs li.active a"))}),f.MakeActive($("#routeTabs a:first").attr("data-guids")+L("#transitRouteTabs li.active a")),$("#routeTabs a:first").tab("show"),$("#routeResults").show(),$("#routeResults").scrollTop(0),0<e[0].waypoints.length&&v.fitMapToRoute(d,e[0].waypoints),$("#routeResults").trigger("adjustRoutePlannerHeight"),D(e[0].enableMapLayers),d.getStreetView().setVisible(!1),W(),$("#routeTabs a").on("shown.bs.tab",function(){W()}),$(".linkIcons").show()}}var a={},c=new RoutePlannerAutocomplete(s.map,t,window.extraPoi||[]),u=new WaypointManager(s.map,c,e,a),f=new RoutingPolyline(s,e,a),d=s.map,p=new UserGeolocation(c,u,e,s.map,s),g=new TransitDirections(s,f,document.getElementById("transitRouteResults")),v=new MapFctns,h=[],m=0,T="",y=(c.SetupAutoComplete("#startLocationText",u.getLocations()),c.SetupAutoComplete("#endLocationText",u.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}),R=function(e){f.DeleteAll(),$(".linkIcons").hide(),$("#routeResults").hide(),$("#routeTabContent").empty(),$("#routeTabs").empty(),e||I(),g.Reset()},k=($(document).on("clearRouteView-routePlanner",function(e){R()}),$(document).on("saveRoutePoints",function(){var e={locations:$.map(u.getLocations(),function(e){return e.point}),avoidToll:$("#avoidTollsCheckBox").is(":checked")};localStorage.setItem("routeLocations",JSON.stringify(e))}),function(e,t,n){$(".waypointContainer").hide(),$("#transitRouteResults").show(),T=n?"generateDriveTransitRouteBtn":"generateTransitRouteBtn",g.Directions(e,t,n),$("#routeResults").trigger("adjustTransitResultsHeight"),I(resources.TransitForImmediateDepartures),$(".linkIcons").show()}),b=function(e,n,t,o){var i,a=e;n&&(a=[e[0],n],i=[n,e[1]]),$.ajax("/api/route/getroutes",{type:"POST",data:{Waypoints:a,Options:t},transitHubLocation:n}).done(function(t){if(0<t.length){for(let e=0;e<t[0].waypoints.length&&(1!==e||!n);e++)u.adjustMarker(e,t[0].waypoints[e].point.latitude,t[0].waypoints[e].point.longitude);$(document).trigger("routeGenerated-loginModal")}l(t,!1!==n,n.name),n&&(k(i,o,!0),v.fitMapToRoute(d,e),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")),$(document).trigger("routingSuccess-routePlanner")}).fail(function(){r(),I(resources.ErrorRetrievingYourRoute),loadBlockerApi.hideSpinner("calculateDriveTransitRoute")}).always(function(){loadBlockerApi.hideSpinner("calculateRoute")})},w=function(e,t){e.forEach(function(e){e.listenerAdded=!1,google.maps.event.clearListeners(e,t)})};function L(e){var e=$(e),t="";return t=null!=e&&e.length&&e!=this?";"+e.attr("data-guids"):t}function S(e,t,n,o){var i=e.statistics,a="True"==resources.EnableRouteClosureDisclaimer&&e.statistics.includesClosures,r="True"==resources.EnableRouteConditionDisclaimer&&e.statistics.includesRouteConditions,s=f.AddRoute(e.encodedPolyline,a?{strokeColor:"#FF0000"}:null,!1,n),l="",c="",u=(1<e.waypoints.length&&(l=e.waypoints[0].nameDirection,c=e.waypoints[e.waypoints.length-1].nameDirection),a||r?"withDisclaimer":""),d=($("#routeTabs").append("<li class='routeTabHeader "+u+"' role='presentation'><a href='#"+(n?"transit":"")+"routeTab-"+t+"' data-id='"+t+"' data-guids='"+s+"' data-travelTimeInSeconds='"+i.postedTravelTimeSeconds+"'>"+resources.Route+" "+t+"  <span class='badge'>"+i.travelTimeDisplay+"</span></a></li>"),""),s=((a||r)&&(d=(d=(d=(d+='<div id="routeIncludesDisclaimerDiv'+t+'" class="alert alert-danger" role="alert">')+(a?r?"<p>"+resources.RouteIncludesClosuresAndConditionsDisclaimer+"</p>":"<p>"+resources.RouteIncludesClosuresDisclaimer+"</p>":"<p>"+resources.RouteIncludesConditionsDisclaimer+"</p>"))+'<button id="acceptRouteDisclaimerBtn'+t+'" type="button" class="btn btn-info">'+resources.OK+"</button></div >")+'<div class="hideRouteTab'+t+'" style="opacity: .10;">'),d=(d+="<div class='panel panel-default routeContent "+u+"'><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+" "+l+" "+resources.To+" "+c+"</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>"),[]),u=(e.includesTollLink&&s.push(resources.Tolls.toLowerCase()),e.includesFerryLink&&s.push(resources.Ferries.toLowerCase()),"");if(2==s.length?u=s[0]+" "+resources.And+" "+s[1]:1==s.length&&(u=s[0]),0<s.length&&(d+='<div class="route-alert"><i class="fas fa-exclamation-triangle" aria-hidden="true"></i> '+resources.ThisRouteIncludes+" "+u+".</div>"),d=d+"</div>"+"<ul class='list-group'>",o=o?" ("+o+")":"",i.instructions)for(var p=0;p<i.instructions.length;p++){var g=i.instructions[p],v=arrowDirection.getDriveImg(g.instruction);d+='<li class="list-group-item">',g.linkConditions&&0<g.linkConditions.length&&(d+='<div class="vLineBorder"></div>'),d+='<div class="directionArrow">'+v+"</div><div "+N(g.linkConditions)+">"+g.instruction+P(g.linkEvents,t,p)+A(g.linkCameras,t,p)+E(g.linkConditions)+"</div></li>"}else for(p=0;p<i.links.length;p++)p==i.links.length-1?d+="<li class='list-group-item'><b>"+i.links[p].nameDirection+o+"</b><br/>"+i.links[p].travelTimeDisplay+" ("+i.links[p].lengthDisplay+")"+P(i.links[p].linkEvents,t,p)+A(i.links[p].linkCameras,t,p)+"</li>":d+="<li class='list-group-item'><b>"+resources.From+" "+i.links[p].nameDirection+" "+resources.To+" "+i.links[p+1].nameDirection+"</b><br/>"+i.links[p].travelTimeDisplay+" ("+i.links[p].lengthDisplay+")"+P(i.links[p].linkEvents,t,p)+A(i.links[p].linkCameras,t,p)+"</li>";d+="</ul></div>",(a||r)&&(d+="</div>");let h;h=e.includesFerryLink||""!==resources.OutsideONTTDistanceTravelPortions?`<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> `:`<p class="routeNote"><b>${resources.NoteColon}</b> ${resources.AllTravelTimesBasedOnEstimates}</p>`,$("#routeTabContent").append('<div id="'+(n?"transit":"")+"routeTab-"+t+'" data-id="'+t+'" class="routeTab tab-pane fade">'+d+h+"</div>"),$("#cameraRouteToggle"+t+" , #eventRouteToggle"+t).on("click",function(){var e=$(this).data("id");$("i[id='"+e+"circle'").toggleClass("fa-plus-circle fa-minus-circle"),$("div[id='"+e+"div'").toggle(400),"eventRouteToggle"!=this.className||0<$(this).parent().find(".showMore").length||W(this)}),$("#acceptRouteDisclaimerBtn"+t).on("click",function(){$(".hideRouteTab"+t).css({opacity:"1"}),$("#routeIncludesDisclaimerDiv"+t).hide()})}function C(){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)}var D=function(e){for(var t in e){var n=$("input[type='checkbox'][data-layerid ="+e[t]+"]",$("#layerSelection"));n&&n[0]&&!n[0].checked?n[0].click():s.appHelper.iconManager.RefreshLayer(e[t],!0)}},B=(String.prototype.replaceAll=function(e,t){return this.split(e).join(t)},null),A=function(e,t,n){if(!e||!e.length)return"";var o,n=e[0].id+t+n,i=(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>',"");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&&(i='<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+"</div>"),i},x=null,P=function(e,t,n){if(!e||!e.length||"undefined"!=typeof SpecialEventData)return"";x||(i='<div class="route-tooltip routeLinkEvent">',i+="<button onclick=\"routeViewOnMap('{viewLink}','{layerId}')\" class=\"routeViewOnMap\">"+resources.ViewOnMap+"</button>",x=i=(i=i+'<h4><img src="{iconUrl}" alt="{heading}">&nbsp;{heading}</h4>'+'<div class="text">')+"{text}"+"</div></div>");var o,i,a="";for(o in e){var r,s,l="";for(r in e[o].orderedPiecesOfInfo)e[o].orderedPiecesOfInfo[r].title==resources.Description&&(s=(s='<div class="shorten">')+e[o].orderedPiecesOfInfo[r].text.trim().replace(/\s\s+/g," ").replace(" .",".")+"</div>",l+=x.replaceAll("{text}",s));a+=l.replaceAll("{iconUrl}",e[o].icon.url).replaceAll("{heading}",e[o].heading).replaceAll("{viewLink}",e[o].urlFriendlyName).replaceAll("{layerId}",e[o].urlFriendlyName+"-"+e[o].eventId)}return 1<e.length&&(a='<div class="eventRouteSection"><button id="eventRouteToggle'+t+'" class="eventRouteToggle" data-id="'+(i=e[0].id+t+n)+'" data-toggle="collapse" title="Toggle" aria-expanded="true" class=""> '+resources.Events+'<span class="badge">'+e.length+'</span><i id="'+i+'circle" class="far fa-plus-circle"></i></button><div id="'+i+'div" class="routeEvents" style="display:none;">'+a+"</div></div>"),a},E=function(e){if(!e||!e.length)return"";for(var t='<div class="route-tooltip routeLinkEvent">',n=(t=t+('<h4><img class="notMarker" src="/Content/Images/ic_wta.svg" alt="'+resources.RoadConditions+'">'+resources.RoadConditions+"</h4>")+'<ul class="wtaInfo">',e.reduce(function(e,t){return 0==e.filter(function(e){return t.id==e.id}).length&&e.push(t),e},[])),o=0;o<n.length;o++)t+='<li><span class="wtaDot" style="background-color: '+n[o].colour+'" aria-hidden="true"></span>'+n[o].statusName+"</li>";return t=t+"</ul>"+"</div>"},N=function(e){var t="";if(e&&0<e.length){for(var n=Math.round(100/e.length),o=0;o<e.length;o++){var i=n*o;t+=e[o].colour+" "+i+"%, "+e[o].colour+" "+(i+n)+"%",o+1!=e.length?t+=",":t+=", "+e[o].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, '+t+') 1 100%;"'}return'class="instructionText"'},I=RoutePlannerStatus.updateStatus,O=function(e,t){t=c.GetSimplePlace(t);t&&u.setLocation(!1,t,!0)},M=(a.SetWaypoint=function(e,t,n){u.setWaypoint(e,Number(t)+1,!0,n)},a.getActiveRouteIndex=function(){var e=$("#routeTabs li.active a").attr("data-id");return isNaN(e)?null:e-1},a.getNameForSimplePlace=function(e,t){u.getNameForSimplePlace(e,t)},a.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),u.setLocation(!0,e[0].waypoints[0],!0)):u.setAllLocations(e[0].waypoints)),c.SetupAutoComplete("#startLocationText",u.getLocations()),c.SetupAutoComplete("#endLocationText",u.getLocations()),l(e,!1)},a.displayRoute=function(e){a.displayRoutes([e],!1)},a.displayTransitRoute=function(t){o(),u.setStartEndPoint(new c.GetCustomSimplePlace(t.fromAddress,null,t.fromLat,t.fromLong,!1),new c.GetCustomSimplePlace(t.toAddress,null,t.toLat,t.toLong,!1)),u.getLocationArray().then(e=>{y(e)?R():k(e,t.options,!1)}),"undefined"!=typeof TransitOptions&&TransitOptions.SetTransitOptions(t.options)},a.resetRoutePlanner=o,a.calculateRoute=function(e){var t={};t.currentTarget={id:e},t.target={id:e},t.preventDefault=function(){},n(t)},a.clearLoationsWithoutPoints=function(){u.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");u.ClearWaypoint(e,null,!0)}),$("#setWaypointGeolocation-"+e).click(function(){var e=$(this).data("wpid");p.AttemptToSetWaypointWithUsersGeolocation(e)}),c.SetupAutoComplete("#waypointText-"+e,u.getLocations(),n)});a.redrawWaypoints=function(e,t){var n=u.getLocations();if(t){t=n.length-1;u.addWaypoint(t),M(t,e,!1)}else{$("#waypoints").html("");for(var o=1;o<n.length-1;o++)M(o,n[o].text,!0)}},a.AddWaypointToPlanner=function(e,t){a.redrawWaypoints(e,t)},$(document).on("UserRouteDropDownVisible",function(){$(".linkRoute").toggle(!0)}),setAllLocations=function(e){u.setStartEndPoint(e[0],e[e.length-1]);for(var t=1;t<e.length-1;++t)M(t,"",!1),u.setWaypoint(e[t],t,!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"),u.setLocation(!1,c.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),u.swapStartEnd(),u.setDetails(),"True"===resources.AutoGenerateDriveRoute)&&u.getLocationArray().then(e=>{null!=e&&n(t)})}),e=$.QueryString.placeId,t=$.QueryString.destination,e?O(null,parseInt(e)):t&&c.GetSimplePlaceByTextSearch(t,function(e){e&&u.setLocation(!1,e,!0)}),$(".printRoute").click(C),$(".printRoute").bind("keydown",function(e){13==e.keyCode&&C()}),0<$("#routeNotificationAlert").length&&$(".createRouteAlert .close").on("click",function(){$(".createRouteAlert").hide()}),$("#setStartGeolocation").click(function(){p.AttemptToSetLocationWithUsersGeolocation(!0,!0)}),$("#setEndGeolocation").click(function(){p.AttemptToSetLocationWithUsersGeolocation(!1,!0)}),$("#addWaypointBtn").click(function(){var e;null!=(e=$(".waypointText:last")).html()&&0===e.val().length||a.AddWaypointToPlanner(null,!0)}),$(document).on("checkEventOnRoutePlanner",W)}),a};$(document).on("appInitComplete",function(e,t,n){var o="true"==resources.DisplayLocationsInContextMenu?new AtisContextMenu(t.map,n):new NewAtisContextMenu(t,n),o=new ContextMenu(t.map,o),t=new RoutePlanner(t,o,n);new UserRoutePlanner(t);$(document).trigger("hashChanged-urlHash"),$(document).trigger("BeforeDisplayRoute")});
var RoutePlannerAutocomplete=function(e,t,n){function r(e,t,o,n,s,i,l,a){this.name=e,this.placeId=t,this.point={latitude:o,longitude:n},this.isGoogle=s,this.linkId=null,this.streetNumber=i,this.streetName=l,this.postalCode=a}var c={},o=(n&&$(n).each(function(e,t){t.isGoogle=!1}),new google.maps.LatLng(t.RoutingModel.MapBottomLeftBounds.Latitude,t.RoutingModel.MapBottomLeftBounds.Longitude)),s=new google.maps.LatLng(t.RoutingModel.MapTopRightBounds.Latitude,t.RoutingModel.MapTopRightBounds.Longitude),i=new google.maps.LatLngBounds(o,s),l=new google.maps.places.AutocompleteService,a=new google.maps.places.PlacesService(e),u=(c.GetLocationDetails=function(o){return o.point&&o.point.name==o.text?new Promise((e,t)=>{e(o.point)}):c.autoCompleteSource(o,o.text).then(e=>{if(e.length)return e=e[0],o.poiId=e.poiId,o.text=e.label,$(o.selector).val(o.text),c.GetGoogleLocaition(o).then(e=>o.point=e)})},c.GetGoogleLocaition=function(s){return new Promise((o,n)=>{s.poiId||n("invalid poiId"),a.getDetails({placeId:s.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:s.token},(e,t)=>{s.token=new google.maps.places.AutocompleteSessionToken,t!==google.maps.places.PlacesServiceStatus.OK?n(t):(e.formatted_address=s.text,o(d(e)))})})},c.selectHandler=function(e,t){const o=this.locations.find(e=>e.selector==this.selector);o.poiId=t.item.poiId,o.isGoogle=!0,o.text=t.item.label,c.GetGoogleLocaition(o).then(e=>{o.point=e,$(document).trigger("locationSelected-autocomplete",o)})},c.autoCompleteSource=function(e,o){if(!(o=(o||e.text||"").trim())||o.length<resources.AutoCompleteNumCharacters)return Promise.resolve($.ui.autocomplete.filter(n,o));(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:o,bounds:i,componentRestrictions:{country:t.RoutingModel.AutoCompleteCountryCode.split(",")},sessionToken:e.token};return l.getPlacePredictions(e).then(e=>{var t;return googleResults=u(e.predictions),e=googleResults,t=new RegExp("^"+$.ui.autocomplete.escapeRegex(o),"i"),$.grep(n,function(e){return t.test(e.label)}).concat(e)})},c.appendGoogleLogoToAutocompleteResults=function(e,t){$("ul.ui-autocomplete.ui-menu").append($("<div>").css("text-align","right").html($("<img>").attr("src","/Content/images/poweredByGoogle.png")))},function(e){for(var t,o=0,n=[];t=e[o];o++)n.push({label:t.description||t.name,poiId:t.place_id,isGoogle:!0,googleObj:t});return n}),d=(c.GetCustomSimplePlace=function(e,t,o,n,s){return new r(e,t,o,n,s)},function(e){for(var t=resources.PlaceOverrides.split(";"),o=0;o<t.length;o++){var n=t[o].split("|");e.formatted_address==n[0]&&(n=n[1].split(","),e.geometry.location=new google.maps.LatLng(n[0],n[1]))}var s=e.formatted_address||e.name,i=e.geometry.location.lat(),l=e.geometry.location.lng(),a=c.GetAddressDetails(e.address_components);return new r(s,e.place_id,i,l,!0,a.streetNumber,a.streetName,a.postalCode)}),p=(c.GetAddressDetails=function(e){for(var t,o,n,s,i=0;i<e.length;i++)-1<e[i].types.indexOf("route")&&(t=e[i].short_name),-1<e[i].types.indexOf("street_number")&&(o=e[i].long_name),-1<e[i].types.indexOf("postal_code")&&(n=e[i].long_name),-1<e[i].types.indexOf("administrative_area_level_1")&&(s=e[i].short_name);return{streetName:t,streetNumber:o,postalCode:n,state:s}},c.SetupAutoComplete=function(n,s,e){var t={locations:s,selector:n};$(n).autocomplete({minLength:resources.AutoCompleteNumCharacters,source:function(e,t){var o=this.locations.find(e=>e.selector==this.selector);c.autoCompleteSource(o,e.term).then(e=>{t(e)}).catch(p)}.bind(t),select:c.selectHandler.bind(t),open:c.appendGoogleLogoToAutocompleteResults,delay:150}).click(function(){$(this).select()}).attr({"data-exists":"undefined"!=e&&e}),$(n).off("focusout"),$(n).on("focusout",e=>{const t=s.find(e=>e.selector==n);var o=t.text;t.text=$(t.selector).val(),o!==t.text&&t.text&&t.text.length>=resources.AutoCompleteNumCharacters&&c.GetLocationDetails(t).then(()=>{$(document).trigger("locationSelected-autocomplete",t)})})},function(e){console.log(e)});return c};
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");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()});
var RoutingPolyline=function(g,e,u){var c={},d=[],f=null,x=null,y=g.map,n={strokeWeight:4,strokeOpacity:1,strokeColor:resources.RoutePolylineColour,zIndex:-99},v=(c.AddRoute=function(e,o,n,t,i,l){var r,a=h();for(r in e="string"==typeof e||e instanceof String?[e]:e){var s=e[r],p=(o=m(o),n&&(o.map=y),s&&(o.path=google.maps.geometry.encoding.decodePath(s)),{id:a,polyline:new google.maps.Polyline(o),strokeColor:o.strokeColor,isActive:!1,index:r,isTransit:t});google.maps.event.addListener(p.polyline,"click",function(e){p.isActive||$('#routeTabs a[data-guids="'+p.id+'"]').click()}),i&&0<i.length&&0<i[r].length&&google.maps.event.addListener(p.polyline,"mouseover",function(e){p.isActive?g.appHelper.showInfoWindow(i[r],null,!0,e.latLng):g.appHelper.showInfoWindow('<span class="simpleToolTip"> Select route '+l+" to see details</span>",null,!0,e.latLng)}),!t&&"True"===resources.DraggableRoutesEnabled&&Modernizr.mq("(min-width: 992px)")&&(p.polyline.addListener("dragstart",function(e){var o=v(this),n=google.maps.geometry.encoding.decodePath(google.maps.geometry.encoding.encodePath(o.polyline.getPath())),n=new google.maps.Polyline({path:n,map:y,strokeColor:o.strokeColor,draggable:!1});o.copy=n,o.polyline.setOptions({strokeColor:"transparent"}),o.isActive&&(o.isMoving=!0,x=new google.maps.Marker({position:e.latLng,icon:{path:google.maps.SymbolPath.CIRCLE,scale:3},draggable:!1,map:y}),f=o)}),p.polyline.addListener("drag",function(e){f&&x&&x.setPosition(e.latLng)}),p.polyline.addListener("dragend",function(e){f&&(v(this).copy.setMap(null),c.isOnActivePolylines(e.latLng)||(e={point:{latitude:e.latLng.lat(),longitude:e.latLng.lng()}},u.getNameForSimplePlace(e,function(e){u.clearLoationsWithoutPoints(),u.SetWaypoint(e,f.index,!1),u.AddWaypointToPlanner(e.name,!1),"True"!==resources.AutoGenerateDriveRoute&&u.calculateRoute(),x.setMap(null),f=x=null})))})),d.push(p)}return a},function(e){for(var o in d)if(d[o].polyline===e)return d[o]}),h=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)})},m=function(e){var o=JSON.parse(JSON.stringify(n));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 c.SetOptions=function(o,e){var n=$.grep(d,function(e){return e.id==o});0<n.length&&(n=n[0].polyline,e=m(e),n.getMap()&&(e.Map=y),n.setOptions(e))},c.ToggleVisibility=function(o){var e=$.grep(d,function(e){return e.id==o});0<e.length&&(e=e[0].polyline).setMap(e.getMap()?null:y)},c.HideAll=function(){for(var e in g.appHelper.closeInfoWindow(),d)d[e].polyline.setMap(null)},c.ShowAll=function(){for(var e in d)d[e].polyline.setMap(y)},c.DeleteAll=function(){c.HideAll(),d=[],f=null},c.Delete=function(o){var e=$.grep(d,function(e){return e.id==o});if(0<e.length){for(var n in e)e[n].polyline.setMap(null);d=$.grep(d,function(e){return e.id==o},!0)}},c.MakeActive=function(e){c.HideAll();var o,n=e.split(";");for(o in d){var t=d[o].polyline;-1<n.indexOf(d[o].id)?(d[o].isActive=!0,!d[o].isTransit&&"True"===resources.DraggableRoutesEnabled&&Modernizr.mq("(min-width: 992px)")&&t.setDraggable(!0),t.setOptions({strokeWeight:3.5,strokeColor:d[o].strokeColor,zIndex:2})):(d[o].isActive=!1,t.setDraggable(!1),t.setOptions({strokeWeight:3,strokeColor:"#6A6A6A",zIndex:1}))}c.ShowAll()},c.getActivePolylines=function(){var e,o="";for(e in d)d[e].isActive&&(o+=d[e].id+";");return o},c.isOnActivePolylines=function(e){for(var o in d)if(d[o].isActive&&google.maps.geometry.poly.isLocationOnEdge(e,d[o].polyline))return!0;return!1},c};
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,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)}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()),{}};
