=0&&this.preloadThumbnailPages(i,1)}};r(function(){b.init()})})(jQuery);(function(r){if(!r(".mortgage-calculator-main").length)return;let b=!1;r.fn.currencyInput=function(n=!0){return this.data("ci_show_symbol",n),b||(b=!0,r.fn._CIOriginalVal=r.fn.val,r.fn.val=function(c){if(r(this).data("_currencyInput"))if(arguments.length===0){var f=r(this)._CIOriginalVal();if(f=="")return"";var h=parseInt(f.replace(/[^0-9]/g,""));return h}else{if(c=String(c).replace(/[^0-9]/g,""),c!=""){var p=parseInt(c).toLocaleString("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:0});return r(this).data("ci_show_symbol")||(p=p.replace("$","")),r(this)._CIOriginalVal(p)}return r(this)._CIOriginalVal(c)}else if(r(this).data("_percentInput"))if(arguments.length===0){var f=r(this)._CIOriginalVal();if(f=="")return"";var h=parseFloat(f.replace(/[^0-9.]/g,""));return isNaN(h)?"":h}else{c=String(c).replace(/[^0-9.]/g,"");var v=c.split(".");return v.length>2&&(c=v[0]+"."+v.slice(1).join("")),r(this)._CIOriginalVal(c)}else return arguments.length===0?r(this)._CIOriginalVal():r(this)._CIOriginalVal(c)}),this.data("_currencyInput")?this:(this.data("_currencyInput",!0),this.on("focus",function(){r(this).select()}),this.on("input",function(c){var f=this.selectionStart,h=r(this)._CIOriginalVal(),p=h.length;r(this).val(h);var v=r(this)._CIOriginalVal().length;v>p?f+=v-p:v2&&(h=p[0]+"."+p.slice(1).join("")),r(this)._CIOriginalVal(h);var v=h.length;v0){var c=o/n*100;this.$downPaymentPercent._CIOriginalVal(c.toFixed(1))}},syncDownPaymentFromPercent:function(){var n=this.$homePrice.val(),o=this.$downPaymentPercent.val();if(n&&n>0&&o!==""&&o>=0){var c=Math.round(n*o/100);this.$downPayment.val(c)}},calculate:function(){var n=this.$homePrice.val()||0,o=this.$downPayment.val()||0,c=parseInt(this.$loanTerm.val(),10),f=this.$interestRate.val()||0,h=n-o;h<0&&(h=0);var p=f/100/12,v=c*12,t=0,e=0;if(h>0&&p>0&&v>0){var a=Math.pow(1+p,v);t=h*(p*a)/(a-1),e=t*v-h}else h>0&&p===0&&(t=h/v,e=0);this.$monthlyPayment.text(this.formatCurrencyDisplay(t)),this.$principalInterest.text(this.formatCurrencyDisplay(t)),this.$loanAmount.text(this.formatCurrencyDisplay(h)),this.$totalInterest.text(this.formatCurrencyDisplay(e))}};r(document).ready(function(){i.init()})})(jQuery);(function(r){r(function(){})})(jQuery);
+(function(r){var b=r(".menu-toggle"),i=r(".mobile-navigation");b.length&&(b.on("click",function(){var n=r(this).attr("aria-expanded")==="true";r(this).attr("aria-expanded",!n),i.toggleClass("is-open"),n?r("body").removeClass("mobile-menu-open"):r("body").addClass("mobile-menu-open")}),r(document).on("keydown",function(n){n.key==="Escape"&&i.hasClass("is-open")&&(b.attr("aria-expanded","false"),i.removeClass("is-open"),r("body").removeClass("mobile-menu-open"))}),r(document).on("click",function(n){i.hasClass("is-open")&&!r(n.target).closest(".mobile-navigation").length&&!r(n.target).closest(".menu-toggle").length&&(b.attr("aria-expanded","false"),i.removeClass("is-open"),r("body").removeClass("mobile-menu-open"))}))})(jQuery);(function(r){var b=6e3,i=1450,n=1e3,o=[],c=0,f=null,h=!1,p=!1,v=null;function t(){if(r(".Home_Page").length&&(v=r(".hero-split-image"),!!v.length)){var u=v.data("gallery-images");!u||!u.length||(o=u,e(),r(window).on("resize",g(e,150)))}}function e(){var u=r(window).width();u>=i?h||a():h&&s()}function a(){h=!0,p||(l(),p=!0),f=setInterval(d,b)}function s(){h=!1,f&&(clearInterval(f),f=null)}function l(){r.each(o,function(u,m){var y=new Image;y.src=m})}function d(){c=(c+1)%o.length;var u=o[c],m=r('');m.css({position:"absolute",top:0,left:0,right:0,bottom:0,"background-image":"url("+u+")","background-size":"cover","background-position":"center center","background-repeat":"no-repeat",opacity:0,transform:"scale(1.02)",transition:"opacity "+n+"ms ease-in-out, transform "+n+"ms ease-in-out","z-index":1}),v.css("position","relative"),v.append(m),m[0].offsetHeight,m.css({opacity:1,transform:"scale(1)"}),setTimeout(function(){v.css("background-image","url("+u+")"),m.remove()},n)}function g(u,m){var y;return function(){var P=this,I=arguments;clearTimeout(y),y=setTimeout(function(){u.apply(P,I)},m)}}r(document).ready(t)})(jQuery);(function(r){if(r("body").hasClass("Home_Page")){var b={grid:null,emptyMessage:null,listings:[],init:function(){this.grid=r("#featured-listings-grid"),this.emptyMessage=r("#featured-listings-empty"),this.grid.length&&(this.loadListingsData(),this.renderListings())},loadListingsData:function(){var i=document.getElementById("featured-mls-data");if(!i){this.listings=[];return}try{this.listings=JSON.parse(i.textContent)}catch(n){console.error("Failed to parse featured listings data:",n),this.listings=[]}},shuffleArray:function(i){for(var n=i.slice(),o=n.length-1;o>0;o--){var c=Math.floor(Math.random()*(o+1)),f=n[o];n[o]=n[c],n[c]=f}return n},renderListings:function(){if(!this.listings||this.listings.length===0){this.grid.hide(),this.emptyMessage.show();return}for(var i=[],n=[],o=0;o',i.bedrooms&&(c+=''+i.bedrooms+" "+n+""),i.bathrooms&&(c+=''+i.bathrooms+" "+o+""),i.sqft&&(c+=''+i.sqft.toLocaleString()+" sqft"),c+=""),'Active
'+this.escapeHtml(i.price_formatted)+'
'+this.escapeHtml(i.address)+"
"+c+'
View Details '},escapeHtml:function(i){if(!i)return"";var n=document.createElement("div");return n.textContent=i,n.innerHTML}};r(document).ready(function(){b.init()})}})(jQuery);(function(r){var b={pending:{clusters:null,properties:null},timeouts:{clusters:null,properties:null},requestIds:{clusters:0,properties:0},debounceDelay:200,queue:function(t,e,a,s,l){var d=this;this.timeouts[t]&&(clearTimeout(this.timeouts[t]),this.timeouts[t]=null),this.pending[t]&&(this.pending[t].abort(),this.pending[t]=null),this.requestIds[t]++;var g=this.requestIds[t];this.timeouts[t]=setTimeout(function(){d.timeouts[t]=null;var u=e(g);u&&u.then&&(d.pending[t]=u,u.done(function(m){g===d.requestIds[t]&&a(m,g)}),u.fail(function(m,y,P){l&&g===d.requestIds[t]&&y!=="abort"&&l(m,y,P)}),u.always(function(){d.pending[t]===u&&(d.pending[t]=null),s&&g===d.requestIds[t]&&s()}))},this.debounceDelay)},cancel:function(t){var e=t?[t]:["clusters","properties"],a=this;e.forEach(function(s){a.timeouts[s]&&(clearTimeout(a.timeouts[s]),a.timeouts[s]=null),a.pending[s]&&(a.pending[s].abort(),a.pending[s]=null)})},isLoading:function(t){return!!(this.pending[t]||this.timeouts[t])}},i={map:null,markers:{},markerData:{},densityLayer:null,clusterLayer:null,markerCluster:null,markerLayer:null,selectedPropertyId:null,isPinClickPan:!1,hoveredPropertyId:null,temporaryHoverMarker:null,baseZIndex:400,currentFilters:{},currentMode:null,init:function(t){var e=r("#property-map");if(!(!e.length||typeof L>"u")){this.currentFilters=t||{},this.map=L.map("property-map").setView([45,-93.5],7),L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© OpenStreetMap'}).addTo(this.map),this.densityLayer=L.layerGroup().addTo(this.map),this.clusterLayer=L.layerGroup().addTo(this.map),this.markerLayer=L.layerGroup().addTo(this.map),this.markerCluster=L.markerClusterGroup({maxClusterRadius:50,spiderfyOnMaxZoom:!0,showCoverageOnHover:!1,zoomToBoundsOnClick:!0,disableClusteringAtZoom:18,chunkedLoading:!0,chunkInterval:200,chunkDelay:50,iconCreateFunction:function(s){var l=s.getChildCount(),d="small";return l>=100?d="large":l>=10&&(d="medium"),L.divIcon({html:""+l+"
",className:"marker-cluster marker-cluster-"+d,iconSize:L.point(40,40)})}}),this.map.addLayer(this.markerCluster);var a=this;this.map.on("moveend zoomend",function(){a.loadClusters()}),this.bindCardHoverEvents(),this.loadClusters()}},loadClusters:function(){if(this.map){var t=this,e=this.map.getBounds(),a=this.map.getCenter(),s=this.map.getZoom(),l=[e.getSouthWest().lat,e.getSouthWest().lng,e.getNorthEast().lat,e.getNorthEast().lng],d=[a.lat,a.lng],g={action:"mls_get_clusters",zoom:s,bounds:l,status:this.currentFilters.status||"Active",property_type:this.currentFilters.property_type||"",city:this.currentFilters.city||"",min_price:this.currentFilters.min_price||"",max_price:this.currentFilters.max_price||"",min_beds:this.currentFilters.min_beds||""};o.updateFromMap(l,d),b.queue("clusters",function(u){return r.ajax({url:homeprozMapData.clusterEndpoint,type:"GET",data:g})},function(u,m){if(u.success){var y=u.data;switch(t.currentMode=y.type,y.type){case"density":t.renderDensity(y.dots);break;case"clusters":t.renderClusters(y.clusters);break;case"markers":t.renderMarkers(y.markers);break}}})}},clearAllLayers:function(){this.densityLayer.clearLayers(),this.clusterLayer.clearLayers(),this.markerCluster.clearLayers(),this.markerLayer.clearLayers(),this.markers={},this.temporaryHoverMarker&&(this.map.removeLayer(this.temporaryHoverMarker),this.temporaryHoverMarker=null)},renderDensity:function(t){this.clearAllLayers(),this.selectedPropertyId=null,this.isPinClickPan=!1,r(".property-card").removeClass("property-card-highlighted");var e=this,a=this.map.getZoom();t.forEach(function(s){var l=e.getDensityColor(s.count,a),d=e.getDensitySize(s.count,a),g=L.divIcon({html:'',className:"density-dot-container",iconSize:[d,d],iconAnchor:[d/2,d/2]}),u=L.marker([s.lat,s.lng],{icon:g});u.on("click",function(){e.map.setView([s.lat,s.lng],e.map.getZoom()+2)}),u.bindTooltip(s.count+" properties",{className:"density-tooltip"}),e.densityLayer.addLayer(u)})},getDensityThreshold:function(t){return Math.max(40,Math.round(600/Math.pow(1.4,t-3)))},getDensityColor:function(t,e){var a=this.getDensityThreshold(e),s=t/a;return s>=1.5?"rgba(180, 83, 9, 0.8)":s>=1?"rgba(217, 119, 6, 0.8)":s>=.6?"rgba(245, 158, 11, 0.8)":s>=.3?"rgba(234, 179, 8, 0.8)":s>=.15?"rgba(132, 204, 22, 0.8)":"rgba(34, 197, 94, 0.8)"},getDensitySize:function(t,e){var a=this.getDensityThreshold(e),s=t/a;return s>=1.5?11:s>=1?10:s>=.6?8:s>=.3?7:6},renderClusters:function(t){this.clearAllLayers(),this.selectedPropertyId=null,this.isPinClickPan=!1,r(".property-card").removeClass("property-card-highlighted");var e=this;t.forEach(function(a){var s="small";a.count>=100?s="large":a.count>=10&&(s="medium");var l=L.divIcon({html:""+a.count+"
",className:"marker-cluster marker-cluster-"+s+" server-cluster",iconSize:L.point(40,40)}),d=L.marker([a.lat,a.lng],{icon:l});d.on("click",function(){e.map.setView([a.lat,a.lng],e.map.getZoom()+2)});var g="$"+e.formatNumber(a.min_price);a.max_price!==a.min_price&&(g+=" - $"+e.formatNumber(a.max_price)),d.bindTooltip(a.count+" properties
"+g,{className:"cluster-tooltip"}),e.clusterLayer.addLayer(d)})},renderMarkers:function(t){var e=this.selectedPropertyId;this.clearAllLayers(),this.hoveredPropertyId=null;var a=this,s=[];t.forEach(function(l,d){if(l.lat&&l.lng){var g=l.id===e,u=g?"amber":"red",m=L.marker([l.lat,l.lng],{icon:a.createIcon(u),zIndexOffset:g?1e4:a.baseZIndex+d});m.propertyId=l.id,m.defaultZIndex=a.baseZIndex+d,a.markerData[l.id]={lat:l.lat,lng:l.lng,price:l.price,address:l.address},m.bindPopup(''),m.on("click",function(y){a.onMarkerClick(l.id)}),s.push(m),a.markers[l.id]=m}}),s.length<=30?s.forEach(function(l){a.markerLayer.addLayer(l)}):this.markerCluster.addLayers(s),this.isPinClickPan=!1,e&&this.markers[e]?this.selectedPropertyId=e:(this.selectedPropertyId=null,r(".property-card").removeClass("property-card-highlighted"))},updateFilters:function(t){this.currentFilters=t||{},this.loadClusters()},formatNumber:function(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")},createIcon:function(t){return t=t||"red",L.divIcon({className:"property-marker property-marker-"+t,html:'',iconSize:[17,22],iconAnchor:[8,22],popupAnchor:[0,-22]})},onMarkerClick:function(t){if(this.selectedPropertyId!==t){this.selectedPropertyId&&(this.setMarkerColor(this.selectedPropertyId,"red"),this.resetMarkerZIndex(this.selectedPropertyId),r("#property-"+this.selectedPropertyId).removeClass("property-card-highlighted"));var e=this.markerData[t];if(e){this.selectedPropertyId=t,this.setMarkerColor(t,"amber"),this.setMarkerZIndex(t,1e4);var a=r("#property-"+t);a.length&&a.addClass("property-card-highlighted"),this.isPinClickPan=!0,this.map.panTo([e.lat,e.lng])}}},flashCard:function(t){t.removeClass("property-card-highlighted"),setTimeout(function(){t.addClass("property-card-highlighted"),setTimeout(function(){t.removeClass("property-card-highlighted"),setTimeout(function(){t.addClass("property-card-highlighted")},150)},150)},50)},setMarkerColor:function(t,e){var a=this.markers[t];a&&a.setIcon(this.createIcon(e))},setMarkerZIndex:function(t,e){var a=this.markers[t];a&&a.setZIndexOffset(e)},resetMarkerZIndex:function(t){var e=this.markers[t];e&&e.setZIndexOffset(e.defaultZIndex)},bindCardHoverEvents:function(){var t=this;r(document).on("mouseenter",".property-card[data-property-id]",function(){var e=r(this),a=e.data("property-id");if(a!==t.selectedPropertyId)if(t.hoveredPropertyId=a,t.markers[a])t.setMarkerColor(a,"blue"),t.setMarkerZIndex(a,9e3);else{var s=e.data("lat"),l=e.data("lng");s&&l&&t.map&&(t.temporaryHoverMarker&&t.map.removeLayer(t.temporaryHoverMarker),t.temporaryHoverMarker=L.marker([s,l],{icon:t.createIcon("blue"),zIndexOffset:15e3}),t.temporaryHoverMarker.addTo(t.map))}}),r(document).on("mouseleave",".property-card[data-property-id]",function(){var e=r(this).data("property-id");e!==t.selectedPropertyId&&(t.hoveredPropertyId===e&&(t.hoveredPropertyId=null),t.temporaryHoverMarker&&(t.map.removeLayer(t.temporaryHoverMarker),t.temporaryHoverMarker=null),t.markers[e]&&(t.setMarkerColor(e,"red"),t.resetMarkerZIndex(e)))})}},n={$mainFilter:null,$stickyFilter:null,$mainForm:null,$stickyForm:null,observer:null,isVisible:!1,init:function(){window.innerWidth<1024||!r(".is-map-view").length||(this.$mainFilter=r("#property-filters"),this.$stickyFilter=r("#property-filters-sticky"),this.$mainForm=this.$mainFilter.find(".filters-form"),this.$stickyForm=this.$stickyFilter.find(".filters-form-sticky"),!(!this.$mainFilter.length||!this.$stickyFilter.length)&&(this.setupObserver(),this.bindEvents()))},setupObserver:function(){var t=this;this.observer=new IntersectionObserver(function(e){e.forEach(function(a){a.isIntersecting?t.hideStickyFilter():t.showStickyFilter()})},{root:null,rootMargin:"0px",threshold:0}),this.observer.observe(this.$mainFilter[0])},bindEvents:function(){var t=this;this.$mainForm.find("select, input").on("change input",function(){t.syncToSticky(this.name,r(this).val())}),this.$stickyForm.find("select").on("change",function(){t.syncToMain(this.name,r(this).val()),o.filterProperties(1)}),this.$stickyForm.find("input").on("change",function(){t.syncToMain(this.name,r(this).val()),o.filterProperties(1)}),this.$stickyForm.on("submit",function(e){e.preventDefault(),o.filterProperties(1)})},syncToSticky:function(t,e){var a=this.$stickyForm.find('[name="'+t+'"]');a.length&&a.val()!==e&&a.val(e)},syncToMain:function(t,e){var a=this.$mainForm.find('[name="'+t+'"]');a.length&&a.val()!==e&&a.val(e)},showStickyFilter:function(){this.isVisible||(this.isVisible=!0,this.$stickyFilter.removeClass("is-hiding").addClass("is-visible"))},hideStickyFilter:function(){if(this.isVisible){this.isVisible=!1,this.$stickyFilter.removeClass("is-visible").addClass("is-hiding");var t=this;setTimeout(function(){t.$stickyFilter.removeClass("is-hiding")},10)}},syncAllToSticky:function(){var t=this;this.$mainForm.find("select, input").each(function(){t.syncToSticky(this.name,r(this).val())})}},o={$form:null,$results:null,$filters:null,isFirstLoad:!0,mapBounds:null,mapCenter:null,isMapUpdate:!1,init:function(){this.$form=r(".filters-form"),this.$results=r("#property-results"),this.$filters=r("#property-filters"),!(!this.$form.length||!this.$results.length)&&(this.bindEvents(),this.initFromUrl())},bindEvents:function(){var t=this;this.$form.on("submit",function(e){e.preventDefault(),t.filterProperties(1)}),this.$form.find("select").on("change",function(){t.clearPinSelection(),t.filterProperties(1)}),r(".filters-reset").on("click",function(e){e.preventDefault(),t.resetFilters()}),this.$results.on("click",".pagination a",function(e){e.preventDefault();var a=t.getPageFromUrl(r(this).attr("href"));t.filterProperties(a)}),r(window).on("hashchange",function(){var e=t.getPageFromHash();t.filterProperties(e,!1)})},initFromUrl:function(){var t=new URLSearchParams(window.location.search);this.$form.find("select").each(function(){var a=r(this).attr("name");t.has(a)&&r(this).val(t.get(a))}),this.$form.find('input[type="text"]').each(function(){var a=r(this).attr("name");t.has(a)&&r(this).val(t.get(a))});var e=this.getPageFromHash();e>1&&this.filterProperties(e,!1)},updateFromMap:function(t,e){this.mapBounds=t,this.mapCenter=e,this.isMapUpdate=!0,i.isPinClickPan||this.clearPinSelection(),this.$results.html(''),h.isEnabled&&p.reset(),this.filterProperties(1,!1)},clearPinSelection:function(){i.selectedPropertyId&&(i.setMarkerColor(i.selectedPropertyId,"red"),i.resetMarkerZIndex(i.selectedPropertyId),r("#property-"+i.selectedPropertyId).removeClass("property-card-highlighted"),i.selectedPropertyId=null)},getPageFromHash:function(){var t=window.location.hash,e=t.match(/#page=(\d+)/);return e?parseInt(e[1]):1},filterProperties:function(t,e){e=e!==!1,t=t||1;var a=this,s=this.getFormData();this.$filters.addClass("is-loading"),this.isFirstLoad&&this.$results.html('');var l={action:"homeproz_filter_properties",nonce:homeprozAjax.nonce,property_type:s.property_type,property_location:s.property_location,zip:s.zip,min_price:s.min_price,max_price:s.max_price,beds:s.beds,paged:t};this.mapBounds&&(l.bounds=this.mapBounds),this.mapCenter&&(l.center=this.mapCenter);var d=this.isMapUpdate;this.isMapUpdate=!1,b.queue("properties",function(g){return r.ajax({url:homeprozAjax.ajaxUrl,type:"POST",data:l})},function(g,u){g.success&&(a.$results.html(g.data.html),a.isFirstLoad=!1,g.data.filters&&!d&&i.updateFilters(g.data.filters),typeof f<"u"&&f.calculate(),p.destroy(),setTimeout(function(){p.init()},100),e&&a.updateUrl(s,t),i.selectedPropertyId?setTimeout(function(){var m=r("#property-"+i.selectedPropertyId);m.length&&r("html, body").animate({scrollTop:m.offset().top-120},300,function(){m.addClass("property-card-highlighted")})},150):t>1&&r("html, body").animate({scrollTop:a.$filters.offset().top-100},300))},function(){a.$filters.removeClass("is-loading")},function(){a.$results.html('Error
Something went wrong. Please try again.
')})},getFormData:function(){return{property_type:this.$form.find('[name="property_type"]').val()||"",property_location:this.$form.find('[name="property_location"]').val()||"",zip:this.$form.find('[name="zip"]').val()||"",min_price:this.$form.find('[name="min_price"]').val()||"",max_price:this.$form.find('[name="max_price"]').val()||"",beds:this.$form.find('[name="beds"]').val()||""}},getFormState:function(){return this.getFormData()},setFormFromState:function(t){for(var e in t)this.$form.find('[name="'+e+'"]').val(t[e])},updateUrl:function(t,e){var a=new URL(homeprozAjax.archiveUrl);for(var s in t)t[s]&&a.searchParams.set(s,t[s]);e>1?a.hash="page="+e:a.hash="",history.replaceState(null,"",a.toString())},getPageFromUrl:function(t){var e=t.match(/#page=(\d+)/);if(e)return parseInt(e[1]);var a=t.match(/[?&]paged=(\d+)/);return a?parseInt(a[1]):1},resetFilters:function(){this.$form.find("select").val(""),this.filterProperties(1)}},c={breakpoint:1024,isMapView:!0,isAboveBreakpoint:!0,mapInitialized:!1,init:function(){var t=this;typeof homeprozMapData<"u"&&(this.isMapView=homeprozMapData.isMapView!==!1),this.isAboveBreakpoint=window.innerWidth>=this.breakpoint,this.isAboveBreakpoint&&this.isMapView&&typeof homeprozMapData<"u"&&(i.init(homeprozMapData.initialFilters||{}),this.mapInitialized=!0);var e;r(window).on("resize",function(){clearTimeout(e),e=setTimeout(function(){t.handleResize()},150)})},handleResize:function(){var t=this.isAboveBreakpoint;this.isAboveBreakpoint=window.innerWidth>=this.breakpoint;var e=r(".property-archive-main");t&&!this.isAboveBreakpoint&&h.isEnabled&&p.destroy(),!t&&this.isAboveBreakpoint&&(this.isMapView?(e.removeClass("is-grid-view").addClass("is-map-view"),!this.mapInitialized&&typeof homeprozMapData<"u"?(i.init(homeprozMapData.initialFilters||{}),this.mapInitialized=!0):i.map&&setTimeout(function(){i.map.invalidateSize()},100),setTimeout(function(){p.init()},200)):e.removeClass("is-map-view").addClass("is-grid-view"),typeof f<"u"&&setTimeout(function(){f.calculate()},150))},setMapView:function(t){this.isMapView=t}},f={cardWidth:400,cardGap:24,mapGap:32,mapRatio:.33,breakpoint:1024,containerPadding:24,init:function(){this.calculate();var t=this,e;r(window).on("resize",function(){clearTimeout(e),e=setTimeout(function(){t.calculate()},100)})},calculate:function(){if(window.innerWidth .container"),a=t.hasClass("is-map-view"),s=e.width();a?this.calculateMapLayout(s):this.calculateGridLayout(s)},calculateMapLayout:function(t){for(var e=5;e>=1;e--){var a=e*this.cardWidth+(e-1)*this.cardGap,s=(this.mapGap+a)/(1-this.mapRatio);if(s<=t){this.setProperties(s,e,".property-map-layout"),this.setProperties(s,e,".property-list-container");return}}var a=this.cardWidth,s=(this.mapGap+a)/(1-this.mapRatio);this.setProperties(Math.min(s,t),1,".property-map-layout"),this.setProperties(Math.min(s,t),1,".property-list-container")},calculateGridLayout:function(t){for(var e=6;e>=1;e--){var a=e*this.cardWidth+(e-1)*this.cardGap;if(a<=t){this.setProperties(a,e,".grid-view-container");return}}this.setProperties(this.cardWidth,1,".grid-view-container")},setProperties:function(t,e,a){var s=r(a);s.length&&(s.css("--layout-width",t+"px"),s.css("--card-columns",e))},clearProperties:function(){r(".property-map-layout, .grid-view-container, .property-list-container").css({"--layout-width":"","--card-columns":""})}},h={pages:{},totalPages:0,totalPosts:0,pendingPage:null,isEnabled:!1,cardsPerPage:12},p={$container:null,$grid:null,scrollTimeout:null,init:function(){if(window.innerWidth>=1024&&r(".is-map-view").length?this.$container=r(".property-list-container"):this.$container=r("#property-results"),this.$grid=this.$container.find(".properties-grid"),!(!this.$container.length||!this.$grid.length)){var t=this.$container.find(".properties-meta"),e=t.find(".properties-count strong").text().replace(/,/g,"");h.totalPosts=parseInt(e)||0,h.totalPages=Math.ceil(h.totalPosts/h.cardsPerPage),!(h.totalPages<=1)&&(h.pages={},h.pendingPage=null,this.wrapInitialCards(),this.bindScrollHandler(),h.isEnabled=!0,this.$container.addClass("infinite-scroll-enabled"),this.syncPages())}},wrapInitialCards:function(){var t=this.$grid.find(".property-card");if(t.length){var e=r('');t.wrapAll(e),h.pages[1]={state:"populated"}}},bindScrollHandler:function(){var t=this;r(window).on("scroll.infiniteScroll",function(){clearTimeout(t.scrollTimeout),t.scrollTimeout=setTimeout(function(){t.syncPages()},100)})},syncPages:function(){if(!(!this.$grid||!h.isEnabled)){var t=h.totalPages,e=this.calculateCurrentPage();e>t-2&&(e=t-2),e<1&&(e=1);var a=[e-2,e-1,e,e+1,e+2];a=a.filter(function(l){return l>=1&&l<=t});var s=this.getReferenceCardDimensions();this.ensurePagesExist(a),this.loadFirstUnloaded(a),this.syncPageStates(a,s)}},calculateCurrentPage:function(){var t=window.scrollY||window.pageYOffset,e=t+window.innerHeight,a=this.$grid.find(".infinite-scroll-page");if(!a.length)return 1;var s=1,l=1/0;return a.each(function(){var d=r(this),g=parseInt(d.data("page")),u=d.find(".property-card").first();if(u.length){var m=u[0].getBoundingClientRect(),y=m.top+t;if(y<=e){var P=e-y;P');e.insertPageInOrder(l,a),h.pages[a]||(h.pages[a]={state:"empty"})}})},insertPageInOrder:function(t,e){var a=this.$grid.find(".infinite-scroll-page"),s=!1;a.each(function(){var l=parseInt(r(this).data("page"));if(es&&window.scrollTo({top:s,behavior:"instant"})}},destroy:function(){h.isEnabled&&(r(window).off("scroll.infiniteScroll"),clearTimeout(this.scrollTimeout),this.$container&&this.$container.removeClass("infinite-scroll-enabled"),this.$grid&&(this.$grid.find('.infinite-scroll-page[data-state="populated"]').children().unwrap(),this.$grid.find('.infinite-scroll-page[data-state="placeholder"]').remove()),h.pages={},h.pendingPage=null,h.isEnabled=!1)}},v={_isRunning:!1,_activeLoads:0,MAX_PARALLEL:2,LOAD_DISTANCE:1e3,init:function(){this.process(),this.bindScrollEvent()},bindScrollEvent:function(){var t=this,e;r(window).on("scroll",function(){clearTimeout(e),e=setTimeout(function(){t.process()},50)})},process:function(){this._isRunning||(this._isRunning=!0,this._activeLoads=0,this._processNext())},_getNextElement:function(){var t=r(".property-card-image[data-bg]");if(!t.length)return null;var e=window.pageYOffset||document.documentElement.scrollTop,a=e,s=e+window.innerHeight,l=this.LOAD_DISTANCE,d=[],g=[];return t.each(function(){var u=this.getBoundingClientRect(),m=u.top+e,y=m+u.height;if(y>=a&&m<=s)d.push({el:this,position:m});else{var P;m>s?P=m-s:P=a-y,P<=l&&g.push({el:this,distance:P})}}),d.sort(function(u,m){return u.position-m.position}),g.sort(function(u,m){return u.distance-m.distance}),d.length?d[0].el:g.length?g[0].el:null},_processNext:function(){for(var t=this;this._activeLoads1&&this.startAutoplay())}},calculateThumbnailsPerPage:function(){r(window).width()<=640?this.thumbnailsPerPage=4:this.thumbnailsPerPage=5},bindEvents:function(){var i=this;this.$thumbnails.on("click",function(n){n.stopPropagation();var o=parseInt(r(this).data("index"));i.stopAutoplay(),i.setMainImage(o,!1)}),this.$playbackBtn.on("click",function(n){n.stopPropagation(),n.preventDefault(),i.isPlaying?i.stopAutoplay():i.startAutoplay()}),this.$prevBtn.on("click",function(){i.stopAutoplay(),i.prevThumbnailPage()}),this.$nextBtn.on("click",function(){i.stopAutoplay(),i.nextThumbnailPage()}),this.$gallery.find("[data-lightbox-trigger]").on("click",function(n){if(i.isSwiping){i.isSwiping=!1;return}i.stopAutoplay(),i.openLightbox(i.currentIndex)}),this.$lightbox.find(".lightbox-close, .lightbox-overlay").on("click",function(){i.closeLightbox()}),this.$lightbox.find(".lightbox-prev").on("click",function(){i.slideLightboxImage("prev")}),this.$lightbox.find(".lightbox-next").on("click",function(){i.slideLightboxImage("next")}),r(document).on("keydown",function(n){if(i.$lightbox.is('[aria-hidden="false"]'))switch(n.key){case"Escape":i.closeLightbox();break;case"ArrowLeft":i.slideLightboxImage("prev");break;case"ArrowRight":i.slideLightboxImage("next");break}}),r(window).on("resize",function(){i.calculateThumbnailsPerPage(),i.updateThumbnailNavigation()})},bindSwipeEvents:function(){var i=this;this.$mainImageContainer[0].addEventListener("touchstart",function(n){i.handleSwipeStart(n)},{passive:!0}),this.$mainImageContainer[0].addEventListener("touchend",function(n){i.handleMainGallerySwipeEnd(n)},{passive:!0}),this.$lightboxImageContainer[0].addEventListener("touchstart",function(n){i.handleSwipeStart(n)},{passive:!0}),this.$lightboxImageContainer[0].addEventListener("touchend",function(n){i.handleLightboxSwipeEnd(n)},{passive:!0})},handleSwipeStart:function(i){i.touches.length===1&&(this.swipeStartX=i.touches[0].clientX,this.swipeStartY=i.touches[0].clientY)},handleMainGallerySwipeEnd:function(i){if(i.changedTouches.length===1){var n=i.changedTouches[0].clientX-this.swipeStartX,o=i.changedTouches[0].clientY-this.swipeStartY;Math.abs(n)>Math.abs(o)&&Math.abs(n)>this.swipeThreshold&&(this.isSwiping=!0,this.stopAutoplay(),n>0?this.slideMainImage("prev"):this.slideMainImage("next"))}},handleLightboxSwipeEnd:function(i){if(i.changedTouches.length===1){var n=i.changedTouches[0].clientX-this.swipeStartX,o=i.changedTouches[0].clientY-this.swipeStartY;Math.abs(n)>Math.abs(o)&&Math.abs(n)>this.swipeThreshold&&(n>0?this.slideLightboxImage("prev"):this.slideLightboxImage("next"))}},startAutoplay:function(){var i=this;this.images.length<=1||(this.isPlaying=!0,this.$playbackBtn.addClass("is-playing"),this.$playbackBtn.attr("aria-label","Pause slideshow"),this.autoplayInterval=setInterval(function(){i.advanceImage()},this.autoplayDelay))},stopAutoplay:function(){this.isPlaying=!1,this.$playbackBtn.removeClass("is-playing"),this.$playbackBtn.attr("aria-label","Play slideshow"),this.autoplayInterval&&(clearInterval(this.autoplayInterval),this.autoplayInterval=null)},advanceImage:function(){if(!this.isTransitioning){var i=this.currentIndex+1;i>=this.images.length&&(i=0),this.setMainImage(i,!0)}},slideMainImage:function(i){var n=this;if(!(this.isTransitioning||this.images.length<=1)){var o;i==="prev"?(o=this.currentIndex-1,o<0&&(o=this.images.length-1)):(o=this.currentIndex+1,o>=this.images.length&&(o=0)),this.isTransitioning=!0;var c=this.images[o],f=i==="next"?"100%":"-100%",h=i==="next"?"-100%":"100%",p=r('
');p.attr("src",c.url),p.attr("alt",c.alt||"Property photo"),p.css({position:"absolute",top:0,left:0,width:"100%",height:"100%","object-fit":"cover",transform:"translateX("+f+")","z-index":2,"border-radius":"0.5rem"}),this.$mainImageContainer.css({position:"relative",overflow:"hidden"}),this.$mainImageContainer.append(p),this.$mainImage.css({transition:"transform "+this.slideDuration+"ms ease-out"}),p.css({transition:"transform "+this.slideDuration+"ms ease-out"}),p[0].offsetHeight,this.$mainImage.css("transform","translateX("+h+")"),p.css("transform","translateX(0)"),setTimeout(function(){n.$mainImage.attr("src",c.url),n.$mainImage.attr("alt",c.alt||"Property photo"),n.$mainImage.css({transition:"",transform:""}),p.remove(),n.isTransitioning=!1},this.slideDuration),this.currentIndex=o,this.$thumbnails.removeClass("is-active"),this.$thumbnails.filter('[data-index="'+o+'"]').addClass("is-active"),this.scrollToThumbnail(o)}},setMainImage:function(i,n){var o=this;if(!(i<0||i>=this.images.length)&&!this.isTransitioning){var c=this.images[i];if(n){this.isTransitioning=!0;var f=r('
');f.attr("src",c.url),f.attr("alt",c.alt||"Property photo"),f.css({position:"absolute",top:0,left:0,width:"100%",height:"100%","object-fit":"cover",opacity:0,transform:"scale(1.02)",transition:"opacity "+this.fadeDuration+"ms ease-in-out, transform "+this.fadeDuration+"ms ease-in-out","z-index":2,"border-radius":"0.5rem"}),this.$mainImageContainer.css("position","relative"),this.$mainImageContainer.append(f),f[0].offsetHeight,f.css({opacity:1,transform:"scale(1)"}),setTimeout(function(){o.$mainImage.attr("src",c.url),o.$mainImage.attr("alt",c.alt||"Property photo"),f.remove(),o.isTransitioning=!1},this.fadeDuration)}else this.$mainImage.attr("src",c.url),this.$mainImage.attr("alt",c.alt||"Property photo");this.currentIndex=i,this.$thumbnails.removeClass("is-active"),this.$thumbnails.filter('[data-index="'+i+'"]').addClass("is-active"),this.scrollToThumbnail(i)}},scrollToThumbnail:function(i){var n=Math.floor(i/this.thumbnailsPerPage);n!==this.thumbnailPage&&(this.thumbnailPage=n,this.scrollThumbnails())},scrollThumbnails:function(){var i=this.$gallery.find(".gallery-thumbnails"),n=this.$thumbnails.first().outerWidth(!0),o=this.thumbnailPage*this.thumbnailsPerPage*n;i.css("transform","translateX(-"+o+"px)"),this.updateThumbnailNavigation()},updateThumbnailNavigation:function(){var i=Math.ceil(this.images.length/this.thumbnailsPerPage);this.$prevBtn.prop("disabled",this.thumbnailPage===0),this.$nextBtn.prop("disabled",this.thumbnailPage>=i-1),i<=1?(this.$prevBtn.hide(),this.$nextBtn.hide()):(this.$prevBtn.show(),this.$nextBtn.show())},prevThumbnailPage:function(){this.thumbnailPage>0&&(this.thumbnailPage--,this.scrollThumbnails(),this.preloadPrevThumbnailPage())},nextThumbnailPage:function(){var i=Math.ceil(this.images.length/this.thumbnailsPerPage);this.thumbnailPage=this.images.length&&(o=0)),this.isTransitioning=!0;var c=this.images[o],f=i==="next"?"100%":"-100%",h=i==="next"?"-100%":"100%",p=r('
');p.attr("src",c.url),p.attr("alt",c.alt||"Property photo"),p.css({position:"absolute","max-width":"100%","max-height":"calc(100vh - 8rem)","object-fit":"contain",transform:"translateX("+f+")",left:"50%",top:"50%","margin-left":"-45vw","margin-top":"calc(-50vh + 4rem)"}),this.$lightboxImageContainer.css({position:"relative",overflow:"hidden"}),this.$lightboxImageContainer.append(p),this.$lightboxImage.css({transition:"transform "+this.slideDuration+"ms ease-out"}),p.css({transition:"transform "+this.slideDuration+"ms ease-out"}),p[0].offsetHeight,this.$lightboxImage.css("transform","translateX("+h+")"),p.css("transform","translateX(0)"),setTimeout(function(){n.$lightboxImage.attr("src",c.url),n.$lightboxImage.attr("alt",c.alt||"Property photo"),n.$lightboxImage.css({transition:"",transform:""}),p.remove(),n.isTransitioning=!1,n.$lightboxCounter.text(o+1)},this.slideDuration),this.currentIndex=o}},prevImage:function(){this.slideLightboxImage("prev")},nextImage:function(){this.slideLightboxImage("next")},updateLightboxImage:function(){var i=this.images[this.currentIndex];this.$lightboxImage.attr("src",i.url),this.$lightboxImage.attr("alt",i.alt||"Property photo"),this.$lightboxCounter.text(this.currentIndex+1)},setupThumbnailLoading:function(){this.$thumbnails.each(function(){var i=r(this),n=i.find("img");i.addClass("is-loading"),i.find(".thumbnail-spinner").length||i.append(''),n[0].complete?i.removeClass("is-loading"):(n.on("load",function(){i.removeClass("is-loading")}),n.on("error",function(){i.removeClass("is-loading")}))})},preloadThumbnailPages:function(i,n){for(var o=this,c=i*this.thumbnailsPerPage,f=Math.min((i+n)*this.thumbnailsPerPage,this.images.length),h=c;h=0&&this.preloadThumbnailPages(i,1)}};r(function(){b.init()})})(jQuery);(function(r){if(!r(".mortgage-calculator-main").length)return;let b=!1;r.fn.currencyInput=function(n=!0){return this.data("ci_show_symbol",n),b||(b=!0,r.fn._CIOriginalVal=r.fn.val,r.fn.val=function(c){if(r(this).data("_currencyInput"))if(arguments.length===0){var f=r(this)._CIOriginalVal();if(f=="")return"";var h=parseInt(f.replace(/[^0-9]/g,""));return h}else{if(c=String(c).replace(/[^0-9]/g,""),c!=""){var p=parseInt(c).toLocaleString("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:0});return r(this).data("ci_show_symbol")||(p=p.replace("$","")),r(this)._CIOriginalVal(p)}return r(this)._CIOriginalVal(c)}else if(r(this).data("_percentInput"))if(arguments.length===0){var f=r(this)._CIOriginalVal();if(f=="")return"";var h=parseFloat(f.replace(/[^0-9.]/g,""));return isNaN(h)?"":h}else{c=String(c).replace(/[^0-9.]/g,"");var v=c.split(".");return v.length>2&&(c=v[0]+"."+v.slice(1).join("")),r(this)._CIOriginalVal(c)}else return arguments.length===0?r(this)._CIOriginalVal():r(this)._CIOriginalVal(c)}),this.data("_currencyInput")?this:(this.data("_currencyInput",!0),this.on("focus",function(){r(this).select()}),this.on("input",function(c){var f=this.selectionStart,h=r(this)._CIOriginalVal(),p=h.length;r(this).val(h);var v=r(this)._CIOriginalVal().length;v>p?f+=v-p:v2&&(h=p[0]+"."+p.slice(1).join("")),r(this)._CIOriginalVal(h);var v=h.length;v0){var c=o/n*100;this.$downPaymentPercent._CIOriginalVal(c.toFixed(1))}},syncDownPaymentFromPercent:function(){var n=this.$homePrice.val(),o=this.$downPaymentPercent.val();if(n&&n>0&&o!==""&&o>=0){var c=Math.round(n*o/100);this.$downPayment.val(c)}},calculate:function(){var n=this.$homePrice.val()||0,o=this.$downPayment.val()||0,c=parseInt(this.$loanTerm.val(),10),f=this.$interestRate.val()||0,h=n-o;h<0&&(h=0);var p=f/100/12,v=c*12,t=0,e=0;if(h>0&&p>0&&v>0){var a=Math.pow(1+p,v);t=h*(p*a)/(a-1),e=t*v-h}else h>0&&p===0&&(t=h/v,e=0);this.$monthlyPayment.text(this.formatCurrencyDisplay(t)),this.$principalInterest.text(this.formatCurrencyDisplay(t)),this.$loanAmount.text(this.formatCurrencyDisplay(h)),this.$totalInterest.text(this.formatCurrencyDisplay(e))}};r(document).ready(function(){i.init()})})(jQuery);(function(r){r(function(){})})(jQuery);
diff --git a/wp-content/themes/homeproz/template-parts/property/property-filters.js b/wp-content/themes/homeproz/template-parts/property/property-filters.js
index b48ad074..c3b45666 100755
--- a/wp-content/themes/homeproz/template-parts/property/property-filters.js
+++ b/wp-content/themes/homeproz/template-parts/property/property-filters.js
@@ -1877,9 +1877,24 @@
_isRunning: false,
_activeLoads: 0,
MAX_PARALLEL: 2,
+ LOAD_DISTANCE: 1000, // Only load images within 1000px of viewport
init: function() {
this.process();
+ this.bindScrollEvent();
+ },
+
+ bindScrollEvent: function() {
+ var self = this;
+ var scrollTimeout;
+
+ $(window).on('scroll', function() {
+ // Debounce scroll events
+ clearTimeout(scrollTimeout);
+ scrollTimeout = setTimeout(function() {
+ self.process();
+ }, 50);
+ });
},
/**
@@ -1896,6 +1911,7 @@
/**
* Get the next element to load, prioritized by viewport proximity
* Returns element in viewport first, then by distance from viewport
+ * Only returns elements within LOAD_DISTANCE of viewport
*/
_getNextElement: function() {
var $elements = $('.property-card-image[data-bg]');
@@ -1904,6 +1920,7 @@
var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
var viewportTop = scrollTop;
var viewportBottom = scrollTop + window.innerHeight;
+ var maxDistance = this.LOAD_DISTANCE;
var inViewport = [];
var outOfViewport = [];
@@ -1924,14 +1941,20 @@
// Out of viewport - calculate distance
var distance;
if (elementTop > viewportBottom) {
+ // Element is below viewport
distance = elementTop - viewportBottom;
} else {
+ // Element is above viewport
distance = viewportTop - elementBottom;
}
- outOfViewport.push({
- el: this,
- distance: distance
- });
+
+ // Only include if within LOAD_DISTANCE
+ if (distance <= maxDistance) {
+ outOfViewport.push({
+ el: this,
+ distance: distance
+ });
+ }
}
});
@@ -1945,7 +1968,7 @@
return a.distance - b.distance;
});
- // Return first in-viewport, or closest out-of-viewport
+ // Return first in-viewport, or closest out-of-viewport within range
if (inViewport.length) return inViewport[0].el;
if (outOfViewport.length) return outOfViewport[0].el;
return null;