1!function initRvFloorplanFilterUtils(){const e="rv-floorplan-list-filters";function getSelectedValuesForFilter(e,t){const n=[];return null==e||e.querySelectorAll('input[type="checkbox"][data-filter-dimension="'+t+'"]:checked').forEach(function(e){n.push(e.value)}),n}function parsePriceFilter(){const e=document.getElementById("floorplan-filter-price-min"),t=document.getElementById("floorplan-filter-price-max"),n=e?e.value.trim():"",l=t?t.value.trim():"";if(""!==n||""!==l){let e=parseFloat(n),t=parseFloat(l);if(Number.isFinite(e)||(e=-1/0),Number.isFinite(t)||(t=1/0),e>t){const n=e;e=t,t=n}return{priceFilterLow:e,priceFilterHigh:t}}return null}function getFilterStateFromToolbar(e){return{selectedUnitTypes:getSelectedValuesForFilter(e,"unit-type"),selectedBedCounts:getSelectedValuesForFilter(e,"bed-count"),selectedPetTypes:getSelectedValuesForFilter(e,"pets"),selectedAmenities:getSelectedValuesForFilter(e,"amenities").map(function(e){return e.trim().toLowerCase()}),selectedFloorplans:getSelectedValuesForFilter(e,"floorplan"),selectedPriceRange:parsePriceFilter()}}function attributeInSelection(e,t){return 0===t.length||-1!==t.indexOf(e||"")}function priceRangeOverlapsFilter(e,t,n){if(null==n)return!0;if(null==e&&null==t)return!0;let l=e,r=t;return(null!=l||null!=r)&&(null!=l&&null==r?r=l:null==l&&null!=r&&(l=r),n.priceFilterLow<=r&&n.priceFilterHigh>=l)}function petTypeMatches(e,t){if(0===t.length)return!0;const n=e||"";return"CATDOG"===n?-1!==t.indexOf("CATS")||-1!==t.indexOf("DOGS"):-1!==t.indexOf(n)}function amenitiesMatch(e,t){if(0===t.length)return!0;const n=e??[];return t.every(function(e){return-1!==n.indexOf(e)})}function readStoredFilters(){try{const t=sessionStorage.getItem(e);if(null==t||""===t)return null;const n=JSON.parse(t);return null==n||"object"!=typeof n?null:n}catch(e){return null}}function restoreFiltersToToolbar(e,t){if(null!=e&&null!=t&&(null!=t.checkboxes&&"object"==typeof t.checkboxes&&Object.keys(t.checkboxes).forEach(function(n){const l=t.checkboxes[n];if(!Array.isArray(l))return;const r=e.querySelectorAll('input[type="checkbox"][data-filter-dimension="'+n+'"]');0!==r.length&&(r.forEach(function(e){e.checked=!1}),l.forEach(function(e){r.forEach(function(t){t.value===e&&(t.checked=!0)})}))}),null!=t.price&&"object"==typeof t.price)){const e=document.getElementById("floorplan-filter-price-min"),n=document.getElementById("floorplan-filter-price-max");e&&"string"==typeof t.price.min&&(e.value=t.price.min),n&&"string"==typeof t.price.max&&(n.value=t.price.max)}}function getSelectedLabelsForFilter(e,t){const n=[];return null==e||e.querySelectorAll('input[type="checkbox"][data-filter-dimension="'+t+'"]:checked').forEach(function(e){const t=e.closest(".filter-item"),l=t?t.querySelector("label"):null;l&&l.getAttribute("data-filter-bubble-label")?n.push(l.getAttribute("data-filter-bubble-label").trim()):l&&l.textContent.trim()?n.push(l.textContent.trim()):n.push(e.value)}),n}function formatPriceFilterBubbleAmount(e){const t=parseFloat(e);return Number.isFinite(t)?"$"+t.toLocaleString("en-US",{maximumFractionDigits:0}):"$"+e}function buildActiveFilterBubbles(e,t){const n=[];function pushCommaSeparatedDimensionFilterBubble(t,l){const r=getSelectedLabelsForFilter(e,t);0!==r.length&&n.push({dimension:t,filterLabel:l,text:r.join(", ")})}function pushSingleOrCountSummaryFilterBubble(t,l){const r=getSelectedLabelsForFilter(e,t);1===r.length?n.push({dimension:t,filterLabel:l,text:r[0]}):r.length>1&&n.push({dimension:t,filterLabel:l,text:r.length+" "+l})}pushCommaSeparatedDimensionFilterBubble("unit-type","Unit Type");const l=function buildBedCountFilterBubbleText(e){const t=getSelectedLabelsForFilter(e,"bed-count");return 0===t.length?null:t.join(", ").replace(/\sBed(?=.*\sBed)/g,"")}(e);null!=l&&n.push({dimension:"bed-count",filterLabel:"Bed Count",text:l});const r=function buildPriceFilterBubbleText(){const e=document.getElementById("floorplan-filter-price-min"),t=document.getElementById("floorplan-filter-price-max"),n=e?e.value.trim():"",l=t?t.value.trim():"";return""===n&&""===l?null:""!==n&&""!==l?formatPriceFilterBubbleAmount(n)+" â "+formatPriceFilterBubbleAmount(l):""!==n?"From "+formatPriceFilterBubbleAmount(n):"Up to "+formatPriceFilterBubbleAmount(l)}();return null!==r&&n.push({dimension:"price",filterLabel:"Price",text:r}),pushCommaSeparatedDimensionFilterBubble("pets","Pets"),pushSingleOrCountSummaryFilterBubble("amenities","Amenities"),pushSingleOrCountSummaryFilterBubble("floorplan",t),n}function clearCheckboxFilter(e,t){null!=e&&(e.querySelectorAll('input[type="checkbox"][data-filter-dimension="'+t+'"]').forEach(function(e){e.checked=!1}
1),e.dispatchEvent(new Event("change",{bubbles:!0})))}function clearPriceFilter(e){const t=document.getElementById("floorplan-filter-price-min"),n=document.getElementById("floorplan-filter-price-max");t&&(t.value=""),n&&(n.value=""),null!=e&&e.dispatchEvent(new Event("change",{bubbles:!0}))}function clearAllFilters(e,t){if(null==e)return;e.querySelectorAll('input[type="checkbox"][data-filter-dimension]').forEach(function(e){e.checked=!1});const n=document.getElementById("floorplan-filter-price-min"),l=document.getElementById("floorplan-filter-price-max");n&&(n.value=""),l&&(l.value=""),t||e.dispatchEvent(new Event("change",{bubbles:!0}))}function initActiveFilterStrip(e,t){const n=document.getElementById("floorplan-list-active-filters"),l=document.getElementById("floorplan-list-reset-all-filters");null!=n&&n.addEventListener("click",function(t){const l=t.target.closest("[data-floorplan-list-filter-dimension]");if(null==l||!n.contains(l))return;const r=l.getAttribute("data-floorplan-list-filter-dimension");"function"==typeof trackGA4Event&&null!=r&&trackGA4Event("clear_filter_"+r.replace("-","_")),"price"===r?clearPriceFilter(e):null!=r&&clearCheckboxFilter(e,r)}),null!=l&&l.addEventListener("click",function(){"function"==typeof trackGA4Event&&trackGA4Event("reset_filters"),clearAllFilters(e)})}window.RvFloorplanFilterUtils={SESSION_STORAGE_KEY:e,getSelectedValuesForFilter:getSelectedValuesForFilter,getSelectedLabelsForFilter:getSelectedLabelsForFilter,parsePriceFilter:parsePriceFilter,getFilterStateFromToolbar:getFilterStateFromToolbar,filterStateHasActiveSelections:function filterStateHasActiveSelections(e){return null!=e&&(e.selectedUnitTypes.length>0||e.selectedBedCounts.length>0||e.selectedPetTypes.length>0||e.selectedAmenities.length>0||e.selectedFloorplans.length>0||null!=e.selectedPriceRange)},floorplanElementMatchesFilters:function floorplanElementMatchesFilters(e,t){return!!attributeInSelection(e.getAttribute("data-property-type"),t.selectedUnitTypes)&&(!!attributeInSelection(e.getAttribute("data-bedrooms"),t.selectedBedCounts)&&(!(t.selectedPriceRange&&!function floorplanRentRangeOverlapsPriceFilter(e,t){let n=e.getAttribute("data-price-min"),l=e.getAttribute("data-price-max");if(n=n?n.trim():"",l=l?l.trim():"",""===n&&""===l)return!0;let r=parseFloat(n),i=parseFloat(l);if(!Number.isFinite(r)&&!Number.isFinite(i))return!1;Number.isFinite(r)&&!Number.isFinite(i)?i=r:!Number.isFinite(r)&&Number.isFinite(i)&&(r=i);return priceRangeOverlapsFilter(r,i,t)}(e,t.selectedPriceRange))&&(!!function floorplanPetTypeMatch(e,t){return petTypeMatches(e.getAttribute("data-pet-type"),t)}(e,t.selectedPetTypes)&&(!!function floorplanAmenitiesMatch(e,t){return amenitiesMatch(function getFloorplanAmenityNames(e){return(e.getAttribute("data-amenities")||"").split("|").map(function(e){return e.trim().toLowerCase()}).filter(Boolean)}(e),t)}(e,t.selectedAmenities)&&!!attributeInSelection(e.getAttribute("data-floorplan-id"),t.selectedFloorplans)))))},unitMatchesFilters:function unitMatchesFilters(e,t){return!!attributeInSelection(String(e.propertyTypeId),t.selectedUnitTypes)&&(!!attributeInSelection(String(e.numBedrooms),t.selectedBedCounts)&&(!(t.selectedPriceRange&&!function unitRentRangeOverlapsPriceFilter(e,t){const n=function getUnitPriceRange(e){return e.hasTempPricing?{priceMin:e.temporaryPriceMin??e.temporaryPriceMax??null,priceMax:e.temporaryPriceMax??e.temporaryPriceMin??null}:e.rentPriceOverride&&e.rentPriceStartsWith?{priceMin:e.rentPriceLow??null,priceMax:e.rentPriceHigh??null}:e.rentPriceOverride?{priceMin:null,priceMax:null}:{priceMin:e.rentPriceLow??null,priceMax:e.rentPriceHigh??null}}(e);return priceRangeOverlapsFilter(n.priceMin,n.priceMax,t)}(e,t.selectedPriceRange))&&(!!petTypeMatches(e.petTypeCodename,t.selectedPetTypes)&&(!!amenitiesMatch(e.amenityNames,t.selectedAmenities)&&!!attributeInSelection(String(e.rentvisionFloorplanId),t.selectedFloorplans)))))},readStoredFilters:readStoredFilters,restoreFiltersToToolbar:restoreFiltersToToolbar,saveFiltersToSessionStorage:function saveFiltersToSessionStorage(t){if(null==t)return;const n={};t.querySelectorAll('input[type="checkbox"][data-filter-dimension]').forEach(function(e){if(!e.checked)return;const t=e.getAttribute("data-filter-dimension");null!=t&&""!==t&&(n[t]||(n[t]=[]),n[t].push(e.value))});const l=document.getElementById("floorplan-filter-price-min"),r=document.getElementById("floorplan-filter-price-max"),i=l?l.value.trim():"",o=r?r.value.trim():"",c={checkboxes:n};""===i&&""===o||(c.price={min:i,max:o});try{if(!Object.keys(n).some(function(e){return n[e].length>0})&&null==c.price)return void sessionStorage.removeItem(e);sessionStorage.setItem(e,JSON.stringify(c))}catch(e){}},syncActiveFilterBubbles:function syncActiveFilterBubbles(e,t){const n=document.getElementById("floorplan-list-active-filters"),l=document.getElementById("floorplan-list-filter-bubbles"),r=t?.filterPopupResetAllButton??document.getElementById("floorplan-list-popup-reset-filters"),i=t?.floorplansPlural
1Label??function getFloorplansPluralLabel(){return"undefined"!=typeof FLOORPLANS_PLURAL_LABEL&&""!==FLOORPLANS_PLURAL_LABEL?FLOORPLANS_PLURAL_LABEL:"Floorplans"}();if(null==n||null==l)return;const o=buildActiveFilterBubbles(e,i);l.innerHTML="",o.forEach(function(e){const t=document.createElement("button");t.className="blueButton fixedHoverEffect floorplan-list-filter-bubble",t.type="button",t.setAttribute("title","Clear Filter"),t.setAttribute("data-floorplan-list-filter-dimension",e.dimension);const n=document.createElement("span");n.className="floorplan-list-filter-bubble-text",n.textContent=e.text;const r=document.createElement("span");r.className="floorplan-list-filter-bubble-x",r.textContent="Ã";const i=document.createElement("span");i.className="hiddenIR",i.textContent="Clear "+e.filterLabel+" Filter",t.appendChild(n),t.appendChild(r),t.appendChild(i),l.appendChild(t)}),0===o.length?(n.classList.add("hidden"),null!=r&&r.classList.add("hidden")):(n.classList.remove("hidden"),null!=r&&r.classList.remove("hidden"))},clearCheckboxFilter:clearCheckboxFilter,clearPriceFilter:clearPriceFilter,clearAllFilters:clearAllFilters,initActiveFilterStrip:initActiveFilterStrip,initFilterToolbar:function initFilterToolbar(e){const t=e?.filterToolbar??document.getElementById("floorplan-list-filters-container");if(null==t)return null;const n=e?.onFiltersChanged,l=e?.onToolbarChange,r=!1!==e?.restoreFromSession,i=e?.priceDebounceMs??150;let o;function scheduleDebouncedApply(){clearTimeout(o),o=setTimeout(function(){"function"==typeof n&&n()},i)}initActiveFilterStrip(t),t.addEventListener("change",function(e){!function trackApplyFilterEvent(e){if(null==e||""===e)return;const t="rv-tracked-fl-filter-"+e;"true"!==sessionStorage.getItem(t)&&("function"==typeof trackGA4Event&&trackGA4Event("apply_filter_"+e.replace("-","_")),sessionStorage.setItem(t,"true"))}(e.target.dataset.filterDimension),"function"==typeof l&&l(e),"function"==typeof n&&n()});const c=document.getElementsByClassName("floorplan-filter-price");return Array.from(c).forEach(function(e){e.addEventListener("input",scheduleDebouncedApply)}),r&&restoreFiltersToToolbar(t,readStoredFilters()),t.dispatchEvent(new Event("change",{bubbles:!0})),{filterToolbar:t,getFilterState:function(){return getFilterStateFromToolbar(t)},clearAllFilters:function(e){clearAllFilters(t,e)}}}}}(); 2//# sourceMappingURL=floorplan-filter-utils.min.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.