!function(e){Array.prototype.forEach||(e.forEach=e.forEach||function(e,t){for(var o=0,a=this.length;o<a;o++)o in this&&e.call(t,this[o],o,this)})}(Array.prototype);var marker,mapObject,idleTimeout,drawBtn,clearBtn,markers=[],activePolygons=[],torontocentered={lat:43.6802745,lng:-79.4069471},singleListingZoomLevel=15,blockHandler=!1,mapFirstLoad=!0,CustomMarker=function(){};function getPropertyListCard(e){var t="";return e.forEach(function(e){t+="<div class='unit'>"+getPropertyCard(e)+"</div>"}),t="<div class='units'>"+t+"</div>"}function getPropertyCard(e){var t='<div class="container map_container"><div class="row"><div class="col-md-12 px-0"><a href="'+e.url+'"><div class="marker-info" id="marker_info"><img class="'+e.blur+'" src="'+e.image+'" alt="..."/><div class = "marker_price trend-open"><p class="'+e.blur+'">'+(e.realized?'<span class="old-price--map">'+(e.soldPrice!=e.price?e.price:"")+"</span>"+e.soldPrice:e.price)+"<span></span></p></div>";return e.realized?(t+='<ul class="feature_text">',"Lsd"===e.lastStatus?t+='<li class="featured_btn--lsd"><span>Leased '+e.realized+" ago</span></li>":t+='<li class="featured_btn--sld"><span>Sold '+e.realized+" ago</span></li>",t+="</ul>"):(t+='<ul class="feature_text">',e.isNew&&(t+='<li class="feature_new"><span>New</span></li>'),"lease"===e.type?t+='<li class="feature_cb"><span>For Lease</span></li>':t+='<li class="feature_or"><span>For Sale</span></li>',t+="</ul>"),t+='</div></a><a href="'+e.url+'"><div class="marker-text"><h3 class="marker_title">'+e.address.street+"</h3><span>"+e.address.location+'</span><ul class ="map_property_info '+e.blur+'">',e.bedrooms&&(t+="<li>"+e.bedrooms+"<span>Bed</span></li>"),e.bathrooms&&(t+="<li>"+e.bathrooms+"<span>Bath</span></li>"),e.sqft&&(t+="<li>"+e.sqft+"<span>Sq Ft</span></li>"),e.garages&&(t+="<li>"+e.garages+"<span>Garage</span></li>"),t+="</ul></div></a></div></div></div>"}function addListingsToMap(e){if(0==e.length)return Object.keys(window.mapMarkers).forEach(function(e){window.mapMarkers[e].setMap(null)}),void(window.mapMarkers=[]);var t,o=new google.maps.LatLngBounds,a=mapObject.getZoom();t=a<13?20:10,e.forEach(function(e){e.id=e.lat+"_"+e.long});var i=_.groupBy(e,function(e){return e.id}),n=Object.keys(i).length,s={};Object.keys(i).forEach(function(e,r){var l=i[e],d=l[0],c="";l.length>1?(d.items=l,c=l.length+(l.length>1?" units":" unit")):(d=l[0],c=priceLabelFormatter(d.price.replace(/\D+/g,""),1));var p=!0;(a>13&&n<30||r%t==0)&&(p=!1);var g,h=d.blur&&!isRegistered?"blur":"",w=new google.maps.LatLng(d.lat,d.long),m=d.items?getPropertyListCard(d.items):getPropertyCard(d);mapMarkers[e]?mapMarkers[e].isDot_!=p?(mapMarkers[e].setMap(null),g=new CustomMarker(mapObject,w,m,p,c,h)):g=mapMarkers[e]:g=new CustomMarker(mapObject,w,m,p,c,h),s[e]=g,o.extend(w)}),Object.keys(mapMarkers).forEach(function(e){s[e]||mapMarkers[e].setMap(null)}),mapMarkers=s,e.length>0&&mapFirstLoad?(blockHandler=!0,mapFirstLoad=!1,mapObject.fitBounds(o),1===e.length&&google.maps.event.addListenerOnce(mapObject,"bounds_changed",()=>{mapObject.setZoom(singleListingZoomLevel)})):!0===window.markersBounds&&(blockHandler=!0,mapObject.fitBounds(o),window.markersBounds=!1),window.lastCenter=mapObject.getCenter().toString()}function getLocationPolygon(e,t){var o="city"===t?window.allCities:window.allNeighborhoods;for(const t of o)if(e.includes(t.name)&&t.coordinates&&t.coordinates.length>0)return t.coordinates[0]}function drawPolygons(e,t,o){localStorage.removeItem("polygons"),removePolygons();var a,i=new google.maps.LatLngBounds,n=[];("city"===t?window.allCities:window.allNeighborhoods).forEach(t=>{e.includes(t.name)&&(t.coordinates&&t.coordinates.length>0&&n.push(t.coordinates[0]),a=t.location)});for(var s=0;s<n.length;s++){for(var r=n[s],l=[],d=0;d<r.length;d++)l.push({lng:r[d][0],lat:r[d][1]}),i.extend({lat:r[d][1],lng:r[d][0]});var c=new google.maps.Polygon({paths:l,strokeColor:"#FF6347",strokeOpacity:.8,strokeWeight:2,fillColor:"#FFA07A",fillOpacity:.35});c.setMap(mapObject),activePolygons.push(c)}blockHandler=!0,!1===o&&0!==window.listings.length||(n.length>0?(mapObject.fitBounds(i),mapObject.setCenter(i.getCenter())):a&&(mapObject.setCenter(a),mapObject.setZoom("city"===t?12:13)))}function getLocationObj(e,t){var o="city"===t?window.allCities:window.allNeighborhoods;for(const t of o)if(e.includes(t.name))return t}function removePolygons(){if(activePolygons.length>0){for(var e=0;e<activePolygons.length;e++)activePolygons[e].setMap(null);activePolygons=[]}}function removeAllMarkers(){Object.keys(window.mapMarkers).forEach(function(e){window.mapMarkers[e].setMap(null)})}function initMap(){const e=new URLSearchParams(window.location.search);let t=torontocentered,o=8;if(e.has("searchId")){e.delete("searchId");const t=`${window.location.pathname}?${e.toString()}`;window.history.replaceState({path:t},"",t)}const a=document.querySelector('input[name="map-settings-json"]');if(a&&a.value)try{const{originalMap:e,center:i,zoom:n}=JSON.parse(a.value);e?window.localStorage.setItem("polygons",JSON.stringify(e)):i&&(t=i,o=n)}catch(e){console.error(e)}var i=e.get("location");if(i){var n=i.split(",");3===n.length&&(t={lat:Number(n[0]),lng:Number(n[1])},o=Number(n[2]),mapFirstLoad=!1)}console.log({mapCenter:t,mapZoom:o}),mapObject=new google.maps.Map(document.getElementById("map_right_listing"),{restriction:{latLngBounds:{east:-50.2067020920879,north:81.42607903916304,south:-16.052040257144483,west:-153.91763959208788}},mapTypeControl:!1,center:t,zoom:o,zoomControlOptions:{position:google.maps.ControlPosition.RIGHT_CENTER},streetViewControlOptions:{position:google.maps.ControlPosition.RIGHT_CENTER},clickableIcons:!1,gestureHandling:"greedy"}),window.drawingManager=new google.maps.drawing.DrawingManager({drawingMode:null,drawingControl:!1,drawingControlOptions:{drawingModes:[google.maps.drawing.OverlayType.POLYGON]},polygonOptions:{strokeColor:"#FF6347",strokeOpacity:.8,strokeWeight:2,fillColor:"#FFA07A",fillOpacity:.35,zIndex:1}}),window.drawingManager.setMap(mapObject),google.maps.event.addListener(mapObject,"idle",function(){if(!0!==drawingMode)if(mapFirstLoad)try{const t=JSON.parse(document.getElementById("initialListings").textContent),o=JSON.parse(document.getElementById("initialPagination").textContent);window.listings=t,window.pageSize=30,window.page=o.page,Cookies.set("page",window.page),addListingsToMap(t),updateUrl(),setFilterSummary(),setStatisticsSummary();var e=new URLSearchParams(window.location.search).toString();e=applySingeUseFilters(e),updateStatistics(e),+$("#total-listings").text()<=window.saveSearchThreshold?validateSearch():hideSaveSearch(),window.allNeighborhoods||getAllNeighborhoods()}catch(e){console.error(e),applyFilter()}else!1===blockHandler?applyFilter():blockHandler=!1});var s=data.city,r=data.neighborhood;if(!(s&&s.length||r&&r.length)){var l=localStorage.getItem("polygons");if(l&&0===window.activeShapesList.length){l=JSON.parse(l);var d=new google.maps.LatLngBounds;for(let e of l){for(var c=[],p=0;p<e.length;p++)c.push({lng:e[p][0],lat:e[p][1]}),d.extend({lat:e[p][1],lng:e[p][0]});var g=new google.maps.Polygon({paths:c,strokeColor:"#FF6347",strokeOpacity:.8,strokeWeight:2,fillColor:"#FFA07A",fillOpacity:.35,zIndex:1});g.setMap(mapObject),mapObject.fitBounds(d),window.activeShapesList.push(g)}}}!r&&s&&s.length>0&&drawPolygons(s,"city");const h=window.getDrawingControls&&window.getDrawingControls({drawingManager:window.drawingManager,onChange:e=>{e?(window.activeShapesList.push(e),$("#city-select").val().length>0&&($("#city-select").val(""),$("#city-select")[0].sumo.reload(),Cookies.remove("city")),$("#neighborhood-select").val().length>0&&($("#neighborhood-select").val(""),$("#neighborhood-select")[0].sumo.reload(),Cookies.remove("neighborhood"))):(window.activeShapesList.forEach(e=>{e.setMap(null)}),window.activeShapesList=[],localStorage.removeItem("polygons")),saveShapes(),applyFilter()},onStateChange:e=>{e.isDrawing?(drawingMode=!0,Object.keys(window.mapMarkers).forEach(function(e){window.mapMarkers[e].setMap(null)})):drawingMode=!1,e.canceled&&Object.keys(window.mapMarkers).forEach(function(e){window.mapMarkers[e].setMap(window.mapObject)})}});if(mapObject.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(h),isMobile()){const e=getSaveSearchMapControl();mapObject.controls[google.maps.ControlPosition.LEFT_TOP].push(e)}(CustomMarker=function(e,t,o,a,i,n){this.latlon_=t,this.iconLabel_=i,this.blur_=n,this.markerContent_=o,this.isDot_=a,this.markerLayer=jQuery("<div />").addClass("overlay"),this.setMap(e)}).prototype=new google.maps.OverlayView,CustomMarker.prototype.onAdd=function(){jQuery(this.getPanes().floatPane).append(this.markerLayer)},CustomMarker.prototype.onRemove=function(){this.markerLayer.remove()},CustomMarker.prototype.draw=function(){var e=new google.maps.InfoWindow({pixelOffset:new google.maps.Size(0,200)}),t=this.getProjection(),o=document.createDocumentFragment();this.markerLayer.empty();var a,i=t.fromLatLngToDivPixel(this.latlon_);i&&(a=this.isDot_?$('<div class="map-point dot-label" style="left:'+i.x+"px; top:"+i.y+'px;"></div>'):$('<div class="map-point full-label" style="left:'+i.x+"px; top:"+i.y+'px;"><div class="label-wrapper"><div class="label-text '+this.blur_+'">'+this.iconLabel_+'</div><div class="label-triangle"><div class="inner-triangle"></div></div></div>'),o.appendChild(a.get(0)),this.markerLayer.append(o),a.on("click",()=>{e.setPosition(mapObject.getCenter()),e.setContent(this.markerContent_),e.open(mapObject)}))}}function saveShapes(){if(window.activeShapesList.length>0){var e=[];window.activeShapesList.forEach(t=>{var o=[];t.getPath().forEach(e=>{o.push([e.lng(),e.lat()])}),e.push(o)}),localStorage.setItem("polygons",JSON.stringify(e))}}function redrawHandler(){window.clearTimeout(idleTimeout),idleTimeout=window.setTimeout(function(){!1===blockHandler?applyFilter():blockHandler=!1},100)}function getAllNeighborhoods(){$.ajax({url:"/listings/all-neighborhoods",method:"GET",success:function(e){window.allNeighborhoods=e.allNeighborhoods,getInitialAggregates(),drawInitalNeighborhoods()},error:function(e){console.log(e)}})}function applySingeUseFilters(e){var t=Cookies.get("keywords");t||(t=$("input[name=skeyword]").val());var o=Cookies.get("status"),a=window.aggregationField;return t&&(e+="&keywords="+t,Cookies.remove("keywords")),o&&(e+="&status="+o,Cookies.remove("status")),a&&(e+="&aggregationField="+a,delete window.aggregationField),e}function applyMapBounds(e){if(!0===window.skipMapBounds)return window.skipMapBounds=!1,e;var t=[];return window.activeShapesList.length>0?(window.activeShapesList.forEach(e=>{var o=[];e.getPath().forEach(e=>{o.push([e.lng(),e.lat()])}),t.push(o)}),t=JSON.stringify(t)):(t=getMapPolygon(),t=JSON.stringify([t])),e+="&map="+t}function getMapPolygon(){if(mapObject){var e=mapObject.getBounds();return[[e.getNorthEast().lng(),e.getNorthEast().lat()],[e.getNorthEast().lng(),e.getSouthWest().lat()],[e.getSouthWest().lng(),e.getSouthWest().lat()],[e.getSouthWest().lng(),e.getNorthEast().lat()]]}}function updateUrl(){var e=new URLSearchParams,t=$("#type-select").val();t?(Cookies.set("type",t),e.append("type",t)):Cookies.remove("type");var o=$("#style-select").val();o?(o.forEach(t=>{t&&e.append("propertyType",t)}),Cookies.set("propertyType",o)):Cookies.remove("propertyType");var a=$("#city-select").val();a?(a.forEach(t=>{t&&e.append("city",t)}),Cookies.set("city",a)):Cookies.remove("city");var i=$("#neighborhood-select").val();i?(i.forEach(t=>{t&&e.append("neighborhood",t)}),Cookies.set("neighborhood",i)):Cookies.remove("neighborhood");var n=$("#minBeds").val();n?(Cookies.set("minBeds",n),e.append("minBeds",n)):Cookies.remove("minBeds");var s=$("#minBaths").val();s?(Cookies.set("minBaths",s),e.append("minBaths",s)):Cookies.remove("minBaths");var r=$("#minPriceSelect").val();r?(e.set("minPrice",r),Cookies.set("minPrice",r)):Cookies.remove("minPrice");var l=$("#maxPriceSelect").val();l?(e.set("maxPrice",l),Cookies.set("maxPrice",l)):Cookies.remove("maxPrice");var d=Cookies.get("sortBy");d?e.set("sortBy",d):Cookies.remove("sortBy");var c=Cookies.get("page");c?e.set("page",c):Cookies.remove("page");var p="/search";e.toString()?(p=window.location.protocol+"//"+window.location.host+window.location.pathname+"?"+e.toString(),window.history.pushState({path:p},"",p)):(newurl=window.location.protocol+"//"+window.location.host+window.location.pathname,window.history.pushState({path:p},"",p)),window.history.pushState({path:p},"",p),window.firstLoad=!1}function applyFilter(){window.filterChanged=!0,window.page=1,Cookies.set("page",window.page),"true"===Cookies.get("resetFilters")&&resetFilters(),updateUrl(),setFilterSummary(),setStatisticsSummary(),retrieveListings()}function setStatisticsSummary(){var e=getFiltersSummary();$(".stats-summary").text(e)}function retrieveListings(){var e=window.retreiveListingsCalls,t=new URLSearchParams(window.location.search).toString();if(t=applySingeUseFilters(t),!0===window.viewAll?window.viewAll=!1:t=applyMapBounds(t),e.push($.ajax({url:`/listings?${t}`,method:"GET",success:function(o){window.allNeighborhoods||getAllNeighborhoods(),$(".search-page-listings").removeClass("blur"),$(".listings-grid.spinner").remove(),e.shift();var a=o.pagination.total;window.listings=o.listings,window.pageSize=o.pageSize,window.page=1,addListingsToMap(o.listings),sortListing($("#filter-sorting").val()),updateAggregates(t),updateStatistics(t),$(".top-filters").animate({scrollTop:0},800),$("#total-listings").text(a),a<=window.saveSearchThreshold?validateSearch():hideSaveSearch(),$(".drawing-controls").show()},error:function(e){console.log("Error",e)}})),e.length>1){var o=e.shift();o&&o.abort()}}function showSaveSearch(){$(".save-search").prop("disabled",!1)}function hideSaveSearch(){$(".save-search").prop("disabled",!0)}function isFilterValid(){var e=!0;return parseInt($("#minPriceSelect").val())>parseInt($("#maxPriceSelect").val())&&(e=!1),e}window.isRegistered="false"!=$("#profile").val(),window.saveSearchThreshold=$("#saveSearchThreshold").val(),window.allCities=data.allCities,window.allCitiesName=data.allCities.map(e=>e.name),window.retreiveListingsCalls=[],window.maxPaginationDistance=data.maxPaginationDistance,window.totalPages=data.pagination.totalPages,window.drawingManager,window.activeShapesList=[],window.drawingMode=!1,window.cancelDrawing=!1,window.mapMarkers={},$(document).ready(function(){});const parseParams=e=>{const t=new URLSearchParams(e),o={};for(const e of t.keys())t.getAll(e).length>1?o[e]=t.getAll(e):o[e]=t.get(e);return o};function drawInitalNeighborhoods(){var e=data.neighborhood;e&&e.length>0&&drawPolygons(e,"neighborhood",!1)}function getInitialAggregates(){var e=new URLSearchParams(window.location.search).toString();e=applySingeUseFilters(e),updateAggregates(e)}function getListingsUrl(){var e,t,o,a,i,n,s=new URLSearchParams(window.location.search);""===s.toString()||s.has("searchId")?(e=Cookies.get("price"),t=Cookies.get("minBeds"),o=Cookies.get("minBaths"),a=Cookies.get("propertyType")?Cookies.get("propertyType").split(","):"",i=Cookies.get("keywords"),n=Cookies.get("status")):(e=s.get("price"),t=s.get("minBeds"),o=s.get("minBaths"),a=s.getAll("propertyType"),i=s.get("keywords"),n=s.get("status"));var r=data.type,l=data.city,d=data.neighborhood;if(s.delete("city"),s.delete("neighborhood"),r&&s.set("type",r),e&&s.set("price",e),t&&s.set("minBeds",t),o&&s.set("minBaths",o),a&&a.length>0)for(var c of(Cookies.set("propertyType",a),a))s.append("propertyType",c);if(l&&l.length>0)for(var p of(Cookies.set("city",l),l))s.append("city",p);if(d&&d.length>0)for(var g of(Cookies.set("neighborhood",d),d))s.append("neighborhood",g);i&&s.set("keywords",i),n&&s.set("status",n);var h=`/listings?${s.toString().toString()}`;return data.streetNumber&&(h=h+"&streetNumber="+data.streetNumber),data.streetName&&(h=h+"&streetName="+data.streetName),h}function isMobile(){return window.innerWidth<768}function getSaveSearchMapControl(){const e=document.createElement("button");e.classList.add("btn"),e.classList.add("save-search"),e.dataset.toggle="modal",e.dataset.target="#save-search-popup",e.disabled=!0,e.innerHTML="Save Search";const t=document.createElement("div");return t.classList.add("drawing-controls"),t.appendChild(e),t}