{"version":3,"sources":["webpack:///webpack/bootstrap e5b5aefb63e34d606885","webpack:///./src/js/modules/utilities.js","webpack:///./src/js/components/modal.js","webpack:///./src/js/components/save-community.js","webpack:///./src/js/components/other-actions.js","webpack:///./src/js/components/quick-view.js","webpack:///./src/js/components/toast.js","webpack:///./src/js/api/compare.js","webpack:///./src/js/components/compare-community.js","webpack:///./src/js/api/dni.js","webpack:///./src/js/api/community.js","webpack:///./src/js/api/saved-items.js","webpack:///./src/js/components/load_recaptcha.js","webpack:///./src/js/components/lease-term.js","webpack:///./src/js/components/perq-controller.js","webpack:///./src/templates/components/schedule-appointment/schedule-appointment.js","webpack:///./src/js/components/render-communites.js","webpack:///./src/templates/components/market-header/market-header.js","webpack:///./src/templates/components/market-neighborhoods/market-neighborhoods.js","webpack:///./src/templates/components/maa-communities/maa-communities.js","webpack:///./src/js/api/quick-view.js","webpack:///./src/templates/components/compare-communities/compare-communities.js","webpack:///./src/templates/components/compare-view/compare-view.js","webpack:///./src/js/components/engrain-map.js","webpack:///./src/templates/components/available-apartments/available-apartments.js","webpack:///./src/js/components/cookie-functions.js","webpack:///./src/templates/components/why-choose/why-choose.js","webpack:///./src/templates/components/property-hero-gallery/property-hero-gallery.js","webpack:///./src/templates/components/video-gallery/video-gallery.js","webpack:///./src/templates/components/360-gallery/360-gallery.js","webpack:///./src/templates/components/property-perks/property-perks.js","webpack:///./src/templates/components/vertical-carousel/vertical-carousel.js","webpack:///./src/templates/components/complex-layout-carousel/complex-layout-carousel.js","webpack:///./src/templates/components/saved-items/saved-items.js","webpack:///./src/templates/components/footer/footer.js","webpack:///./src/templates/components/property-details-component/property-details-component.js","webpack:///./src/js/components/share-modal.js","webpack:///./src/templates/components/property-features/property-features.js","webpack:///./src/templates/components/photo-gallery/photo-gallery.js","webpack:///./src/templates/components/communities-near-you/communities-near-you.js","webpack:///./src/templates/components/communities-filter/communities-filter.js","webpack:///./src/js/components/dynamic-buttons.js","webpack:///./src/js/components/sticky-sections.js","webpack:///./src/templates/components/leasing-terms/leasing-terms.js","webpack:///./src/templates/components/lease-up-form/lease-up-form.js","webpack:///./src/templates/components/360-video-tour-landing/360-video-tour-landing.js","webpack:///./src/js/app.js","webpack:///./src/js/modules/polyfills.js","webpack:///./src/templates/components/around-neighborhood/around-neighborhood.js","webpack:///./src/templates/components/frequently-asked-questions/frequently-asked-questions.js","webpack:///./src/templates/components/global-modal/global-modal.js","webpack:///./src/templates/components/market-subnav/market-subnav.js","webpack:///./src/templates/components/modal/modal.js","webpack:///./src/templates/components/nav-header/nav-header.js","webpack:///./src/templates/components/nav-header/search.js","webpack:///./src/data/results.json","webpack:///./src/templates/components/search-hero/search-hero.js"],"names":[],"mappings":"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","file":"app.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 45);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap e5b5aefb63e34d606885","/**\r\n * @module utilities\r\n */\r\n\r\nimport { addToastMessage } from '../components/toast';\r\nimport { addToCompareHandler } from '../components/quick-view';\r\n\r\n/**\r\n * Runs a callback function after the DOM has finished loading\r\n * @param {genericCallback} [callback] - contains code to be executed after\r\n */\r\n\r\nexport function docReady(callback) {\r\n if (document.readyState !== 'loading') {\r\n callback();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', callback);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * A useful alias for querySelectorAll\r\n * @param {(string|Element)} target - The selector or target element\r\n * @param {string} [selector] - The selector to query against the target element\r\n */\r\n\r\nexport function _(target, selector) {\r\n if (typeof target === 'object') {\r\n return target.querySelectorAll(selector);\r\n }\r\n return document.querySelectorAll(target);\r\n}\r\n\r\n\r\n/**\r\n * Toggles a class on an element\r\n * @param {string} [className] - The class to toggle\r\n */\r\n\r\nexport function toggleClass(el, className) {\r\n if (el.classList) {\r\n el.classList.toggle(className);\r\n } else {\r\n const classes = el.className.split(' ');\r\n const existingIndex = classes.indexOf(className);\r\n if (existingIndex >= 0) {\r\n classes.splice(existingIndex, 1);\r\n } else {\r\n classes.push(className);\r\n }\r\n el.className = classes.join(' ');\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Ascertains if class exists on element\r\n * @param {Element} [el] - The element to target\r\n * @param {string} [selector] - The class to check for\r\n */\r\n\r\nexport function hasClass(el, selector) {\r\n const className = ` ${selector} `;\r\n if ((` ${el.className} `).replace(/[\\n\\t]/g, ' ').indexOf(className) > -1) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport const isLocalhost = () => {\r\n return ( window.location.hostname === 'localhost' || window.location.hostname === 'bs-local');\r\n}\r\n\r\nexport const isMobile = window.innerWidth < 768;\r\n\r\nexport const copyTextToClipboard = async (text = '') => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n } catch (err) {\r\n console.error('Failed to copy: ', err);\r\n }\r\n}\r\n\r\nexport const googleMapStyles = [\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#e9e9e9\"\r\n },\r\n {\r\n \"lightness\": 17\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"landscape\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f5f5f5\"\r\n },\r\n {\r\n \"lightness\": 20\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n },\r\n {\r\n \"lightness\": 17\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n },\r\n {\r\n \"lightness\": 29\r\n },\r\n {\r\n \"weight\": 0.2\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.arterial\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n },\r\n {\r\n \"lightness\": 18\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.local\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n },\r\n {\r\n \"lightness\": 16\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f5f5f5\"\r\n },\r\n {\r\n \"lightness\": 21\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.park\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#dedede\"\r\n },\r\n {\r\n \"lightness\": 21\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"on\"\r\n },\r\n {\r\n \"color\": \"#ffffff\"\r\n },\r\n {\r\n \"lightness\": 16\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"saturation\": 36\r\n },\r\n {\r\n \"color\": \"#333333\"\r\n },\r\n {\r\n \"lightness\": 40\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.icon\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f2f2f2\"\r\n },\r\n {\r\n \"lightness\": 19\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#fefefe\"\r\n },\r\n {\r\n \"lightness\": 20\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative\",\r\n \"elementType\": \"geometry.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#fefefe\"\r\n },\r\n {\r\n \"lightness\": 17\r\n },\r\n {\r\n \"weight\": 1.2\r\n }\r\n ]\r\n }\r\n]\r\n\r\nexport const getUnitType = (unitType) => {\r\n return unitType === 0 ? 'Studio' : `${unitType}bd`\r\n}\r\n\r\nexport const googleMapMarkerIcon = {\r\n point: 'data:image/svg+xml;charset=UTF-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNTVweCIgaGVpZ2h0PSI2OXB4IiB2aWV3Qm94PSIwIDAgNTUgNjkiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDQ5LjMgKDUxMTY3KSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5pY29ucy9waW4tYmx1ZS1sYXJnZTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJNQUFfQ29tcG9uZW50cy0iIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJGaW5hbC0tLVBEUC0tLU1hcCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTExNzQuMDAwMDAwLCAtMTMwOC4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9Ik5laWdoYm9yaG9vZC1Nb2R1bGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLCA0MTYuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0ibWFwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MjAuMDAwMDAwLCA1MjMuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imljb25zL3Bpbi1ibHVlLWxhcmdlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NTQuMDAwMDAwLCAzNjkuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQ1LjE0NjEsNjQuODEwNzE0MyBDNDUuMTQ2MSw2Ni44NTIxMjg2IDM3LjA4NzEsNjguNTA3MTQyOSAyNy4xNDYxLDY4LjUwNzE0MjkgQzE3LjIwNTEsNjguNTA3MTQyOSA5LjE0NjEsNjYuODUyMTI4NiA5LjE0NjEsNjQuODEwNzE0MyBDOS4xNDYxLDYyLjc2OTMgMTcuMjA1MSw2MS4xMTQyODU3IDI3LjE0NjEsNjEuMTE0Mjg1NyBDMzcuMDg3MSw2MS4xMTQyODU3IDQ1LjE0NjEsNjIuNzY5MyA0NS4xNDYxLDY0LjgxMDcxNDMiIGlkPSJGaWxsLTUiIGZpbGw9IiMxQzIwM0QiIG9wYWNpdHk9IjAuMiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTU0LjI5MjYsMjYuNDkxMDcxNCBDNTQuMjkyNiwzOS44NjMyNzE0IDMxLjYxMzYsNjEuMzY1NjQyOSAyNy43MTM2LDY1LjYxNTA1NzEgQzI3LjQwNTYsNjUuOTUxMTg1NyAyNi44ODc2LDY1Ljk1MTE4NTcgMjYuNTc4Niw2NS42MTUwNTcxIEMyMi42Nzg2LDYxLjM2NTY0MjkgMC4wMDA2LDM5Ljg2MzI3MTQgMC4wMDA2LDI2LjQ5MTA3MTQgQzAuMDAwNiwxMS44NjExIDEyLjE1MzYsMCAyNy4xNDY2LDAgQzQyLjEzODYsMCA1NC4yOTI2LDExLjg2MTEgNTQuMjkyNiwyNi40OTEwNzE0IiBpZD0iRmlsbC0xIiBmaWxsPSIjMDUwRjMyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzIuNzg2MywyMi4xNzg1NzE0IEMzMi43ODYzLDI1LjI0OTA3MTQgMzAuMjYxMywyNy43MzggMjcuMTQ2MywyNy43MzggQzI0LjAzMTMsMjcuNzM4IDIxLjUwNjMsMjUuMjQ5MDcxNCAyMS41MDYzLDIyLjE3ODU3MTQgQzIxLjUwNjMsMTkuMTA4MDcxNCAyNC4wMzEzLDE2LjYxOTE0MjkgMjcuMTQ2MywxNi42MTkxNDI5IEMzMC4yNjEzLDE2LjYxOTE0MjkgMzIuNzg2MywxOS4xMDgwNzE0IDMyLjc4NjMsMjIuMTc4NTcxNCIgaWQ9IkZpbGwtMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4K',\r\n activePoint: 'data:image/svg+xml;charset=UTF-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNTVweCIgaGVpZ2h0PSI2OXB4IiB2aWV3Qm94PSIwIDAgNTUgNjkiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDQ5LjMgKDUxMTY3KSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5pY29ucy9waW4tYmx1ZS1sYXJnZTwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJNQUFfQ29tcG9uZW50cy0iIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJGaW5hbC0tLVBEUC0tLU1hcCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwNTQuMDAwMDAwLCAtMTQzNC4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9Ik5laWdoYm9yaG9vZC1Nb2R1bGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLCA0MTYuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0ibWFwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MjAuMDAwMDAwLCA1MjMuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imljb25zL3Bpbi1vcmFuZ2UtbGFyZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQzNC4wMDAwMDAsIDQ5NS4xODg2NzkpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imljb25zL3Bpbi1ibHVlLWxhcmdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00NS4xNDYxLDY0LjgxMDcxNDMgQzQ1LjE0NjEsNjYuODUyMTI4NiAzNy4wODcxLDY4LjUwNzE0MjkgMjcuMTQ2MSw2OC41MDcxNDI5IEMxNy4yMDUxLDY4LjUwNzE0MjkgOS4xNDYxLDY2Ljg1MjEyODYgOS4xNDYxLDY0LjgxMDcxNDMgQzkuMTQ2MSw2Mi43NjkzIDE3LjIwNTEsNjEuMTE0Mjg1NyAyNy4xNDYxLDYxLjExNDI4NTcgQzM3LjA4NzEsNjEuMTE0Mjg1NyA0NS4xNDYxLDYyLjc2OTMgNDUuMTQ2MSw2NC44MTA3MTQzIiBpZD0iRmlsbC01IiBmaWxsPSIjMUMyMDNEIiBvcGFjaXR5PSIwLjIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01NC4yOTI2LDI2LjQ5MTA3MTQgQzU0LjI5MjYsMzkuODYzMjcxNCAzMS42MTM2LDYxLjM2NTY0MjkgMjcuNzEzNiw2NS42MTUwNTcxIEMyNy40MDU2LDY1Ljk1MTE4NTcgMjYuODg3Niw2NS45NTExODU3IDI2LjU3ODYsNjUuNjE1MDU3MSBDMjIuNjc4Niw2MS4zNjU2NDI5IDAuMDAwNiwzOS44NjMyNzE0IDAuMDAwNiwyNi40OTEwNzE0IEMwLjAwMDYsMTEuODYxMSAxMi4xNTM2LDAgMjcuMTQ2NiwwIEM0Mi4xMzg2LDAgNTQuMjkyNiwxMS44NjExIDU0LjI5MjYsMjYuNDkxMDcxNCIgaWQ9IkZpbGwtMSIgZmlsbD0iI0QwNDcxNiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTMyLjc4NjMsMjIuMTc4NTcxNCBDMzIuNzg2MywyNS4yNDkwNzE0IDMwLjI2MTMsMjcuNzM4IDI3LjE0NjMsMjcuNzM4IEMyNC4wMzEzLDI3LjczOCAyMS41MDYzLDI1LjI0OTA3MTQgMjEuNTA2MywyMi4xNzg1NzE0IEMyMS41MDYzLDE5LjEwODA3MTQgMjQuMDMxMywxNi42MTkxNDI5IDI3LjE0NjMsMTYuNjE5MTQyOSBDMzAuMjYxMywxNi42MTkxNDI5IDMyLjc4NjMsMTkuMTA4MDcxNCAzMi43ODYzLDIyLjE3ODU3MTQiIGlkPSJGaWxsLTMiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg==',\r\n}\r\nconst copyAddress = (e) => {\r\n const address = e.currentTarget.dataset.value;\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (address) {\r\n copyTextToClipboard(address.split('
').join(' '));\r\n }\r\n addToastMessage({\r\n body: 'Community address copied',\r\n });\r\n}\r\n\r\nconst addToCompareOptionClick = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n try {\r\n let item = e.currentTarget.closest('.item');\r\n let imgSrc;\r\n let nameText;\r\n if (!item) {\r\n const id = e.currentTarget.dataset.id;\r\n if (id) {\r\n item = document.querySelector(`.communities-list .item[data-id=\"${id}\"]`);\r\n }\r\n }\r\n if (item) {\r\n const imagesWrapper = item.querySelector('.images-wrapper');\r\n const imgEl = imagesWrapper && imagesWrapper.querySelector('img');\r\n const nameEl = item.querySelector('.community-name');\r\n imgSrc = imgEl.getAttribute('src');\r\n nameText = nameEl.innerHTML;\r\n }\r\n\r\n addToCompareHandler(e, imgSrc, nameText, 'right');\r\n\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n}\r\n\r\nexport const toggleEl = (event) => {\r\n const botao = event.currentTarget;\r\n const dropdown = botao.querySelector('.other-actions-dropdown-maa');\r\n if (dropdown) {\r\n dropdown.addEventListener('click', (e) => e.stopPropagation());\r\n }\r\n const parentDiv = botao.parentElement;\r\n const quickActionsEl = parentDiv.nextElementSibling;\r\n const item = event.currentTarget.closest('.item');\r\n const copyAddressOption = item.querySelector('#quick-action-copy-address');\r\n const addToCompareOption = item.querySelector('#quick-action-add-to-compare');\r\n\r\n if (quickActionsEl && quickActionsEl.classList.contains(\"active\")) {\r\n if (copyAddressOption) {\r\n copyAddressOption.removeEventListener('click', copyAddress);\r\n }\r\n if (addToCompareOption) {\r\n addToCompareOption.removeEventListener('click', addToCompareOptionClick)\r\n }\r\n } else {\r\n if (copyAddressOption) {\r\n copyAddressOption.addEventListener('click', copyAddress);\r\n }\r\n if (addToCompareOption) {\r\n addToCompareOption.addEventListener('click', addToCompareOptionClick)\r\n }\r\n }\r\n};\r\n\r\nexport const debounce = (func, timeout = 1000) => {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => {\r\n func.apply(this, args);\r\n }, timeout);\r\n };\r\n}\r\n\r\nexport const defaultSwiperOptions = {\r\n loop: true,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n dynamicBullets: true,\r\n dynamicMainBullets: 3,\r\n clickable: true,\r\n },\r\n spaceBetween: 10,\r\n}\r\n\r\nexport const communityCardClickHandler = (e) => {\r\n const link = e.currentTarget.querySelector('a.link');\r\n const target = e.target;\r\n const isActions = e.target.closest('.community-actions');\r\n const isSave = target.closest('a.apt-fav');\r\n const isPagination = target.closest('.swiper-pagination');\r\n if (isPagination || isActions || isSave) {\r\n return;\r\n }\r\n if (link) {\r\n window.open(link.getAttribute('href'), '_self');\r\n }\r\n}\r\n\r\nexport const getViewComparisonLink = () => {\r\n const compareWidget = document.getElementById('compare-communities');\r\n const compareFooter = compareWidget && compareWidget.querySelector('.compare-communities__footer');\r\n const aTag = compareFooter && compareFooter.querySelector('a');\r\n if (aTag) {\r\n return aTag.href;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/modules/utilities.js","import { isMobile } from \"../modules/utilities\";\r\n\r\nconst MODAL_CLOSE_BTN_ID = 'modal-close-btn';\r\n\r\nexport const GLOBAL_MODAL_ID = 'global-modal';\r\n\r\n//const isMobile = window.innerWidth < 768;\r\n\r\nexport const openModal = (e, modalId) => {\r\n if (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n const modalEl = document.getElementById(modalId);\r\n const body = document.body;\r\n if (modalId) {\r\n modalEl.style.display = 'block';\r\n body.style.overflow = 'hidden';\r\n }\r\n}\r\n\r\nexport const openModalGlobalConstructor = ({ content, height = '100%', disableModalGlobal = true, uniqueId }) => {\r\n openModalGlobal(content, height, disableModalGlobal, uniqueId);\r\n}\r\nexport const openModalGlobal = (content, height = '100%', disableModalGlobal = true, uniqueId = '') => {\r\n console.log('openModalGlobal');\r\n const modalGlobalEl = document.getElementById(GLOBAL_MODAL_ID);\r\n const body = document.body;\r\n if (modalGlobalEl) {\r\n modalGlobalEl.style.display = 'block';\r\n body.style.overflow = 'hidden';\r\n const modalContent = modalGlobalEl.querySelector('.modal-content');\r\n if (content && modalContent) {\r\n modalContent.style.height = isMobile ? '100%' : height;\r\n modalContent.appendChild(content);\r\n }\r\n modalGlobalEl.removeAttribute('data-unique-id');\r\n if (uniqueId) {\r\n modalGlobalEl.dataset.uniqueId = uniqueId;\r\n }\r\n if(disableModalGlobal){\r\n setTimeout(() => {\r\n document.addEventListener('click', closeModalGlobal);\r\n }, 0);\r\n }\r\n }\r\n}\r\n\r\nexport const clearContent = () => {\r\n const globalModalContent = document.querySelector('div.global-modal-wrapper > #modal-content');\r\n\r\n if (globalModalContent && globalModalContent.children) {\r\n [...globalModalContent.children].forEach((child, i) => {\r\n if (i !== 0) {\r\n child.remove();\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport const closeModalGlobal = () => {\r\n console.log('closeModalGlobal');\r\n const modalGlobalEl = document.getElementById(GLOBAL_MODAL_ID);\r\n let id = GLOBAL_MODAL_ID;\r\n const body = document.body;\r\n if (modalGlobalEl) {\r\n const uniqueId = modalGlobalEl.dataset.uniqueId;\r\n if (uniqueId) {\r\n id += `_${uniqueId}`;\r\n }\r\n }\r\n document.dispatchEvent(new CustomEvent(\"beforeCloseModalEvent\", {\r\n bubbles: true,\r\n detail: {\r\n id,\r\n }\r\n }));\r\n if (modalGlobalEl) {\r\n clearContent();\r\n modalGlobalEl.style.display = 'none';\r\n body.style.overflow = 'auto';\r\n document.removeEventListener('click', closeModalGlobal);\r\n }\r\n if (window.parent && window.parent.postMessage) {\r\n window.parent.postMessage(`close modal with id = ${id}`);\r\n }\r\n\r\n document.dispatchEvent(new CustomEvent(\"closeModalEvent\", {\r\n bubbles: true,\r\n detail: {\r\n id,\r\n }\r\n }));\r\n}\r\n\r\nexport const closeModal = (e, modalId) => {\r\n console.log('closeModal123123');\r\n console.log(e);\r\n console.log(modalId);\r\n const modalEl = document.getElementById(modalId);\r\n const body = document.body;\r\n if (modalEl) {\r\n modalEl.style.display = 'none';\r\n body.style.overflow = 'auto';\r\n }\r\n if (window.parent && window.parent.postMessage) {\r\n window.parent.postMessage(`close modal with id = ${modalId}`);\r\n }\r\n}\r\n\r\nexport const hideCloseBtn = () => {\r\n const modalCloseBtn = document.getElementById(MODAL_CLOSE_BTN_ID);\r\n if (modalCloseBtn) {\r\n modalCloseBtn.style.display = 'none';\r\n }\r\n}\r\nexport const showCloseBtn = () => {\r\n const modalCloseBtn = document.getElementById(MODAL_CLOSE_BTN_ID);\r\n if (modalCloseBtn) {\r\n modalCloseBtn.style.display = 'block';\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/modal.js","import { isLocalhost } from '../modules/utilities';\r\n\r\nexport const handleSaveEvent = (e) => {\r\n const saveUrl = '/maa-api/saveditems/v1/communities/';\r\n const saveFloorPlanUrl = '/maa-api/saveditems/v1/floorplans/';\r\n const target = e.currentTarget;\r\n const communityId = target.getAttribute('data-id');\r\n const isSaved = !target.classList.contains('saved');\r\n const useCookie = target.hasAttribute('data-cookie') ? true : false;\r\n let saveType;\r\n\r\n const toggleIcon = () => {\r\n document.querySelectorAll('[data-id=\"' + communityId + '\"][href=\"#save\"]').forEach((item) => {\r\n item.classList.toggle('saved');\r\n });\r\n }\r\n\r\n e.preventDefault();\r\n if (isLocalhost()) {\r\n toggleIcon();\r\n }\r\n\r\n const decreaseCounter = () => {\r\n document.querySelectorAll('.nav__quick-access--total').forEach(el => {\r\n if (el.dataset.total > 0) {\r\n el.dataset.total = (el.dataset.total - 1).toString();\r\n }\r\n });\r\n }\r\n\r\n const increaseCounter = () => {\r\n document.querySelectorAll('.nav__quick-access--total').forEach(el => {\r\n el.dataset.total = (+el.dataset.total + 1).toString();\r\n });\r\n }\r\n\r\n if(useCookie) { //FLOORPLAN\r\n saveType = \"floorplan\";\r\n // UPDATE BACKEND\r\n\r\n if(!isLocalhost()){\r\n fetch(saveFloorPlanUrl + communityId, {\r\n method: isSaved ? 'POST' : 'DELETE',\r\n })\r\n .then(response => response.json())\r\n .then((res) => {\r\n if (res !== \"No item was added!\" && res !== \"No item was removed!\") {\r\n toggleIcon();\r\n if (isSaved) {\r\n increaseCounter();\r\n } else {\r\n decreaseCounter();\r\n }\r\n }\r\n })\r\n .catch(console.error);\r\n } else {\r\n console.log('Localhost');\r\n }\r\n } else { // COMMUNITY\r\n saveType = \"community\";\r\n // UPDATE MASTER COMMUNITY ARRAY (if available)\r\n\r\n // UPDATE BACKEND\r\n if(!isLocalhost()){\r\n fetch(saveUrl + communityId, {\r\n method: isSaved ? 'POST' : 'DELETE',\r\n })\r\n .then(response => response.json())\r\n .then((res) => {\r\n console.log(res);\r\n toggleIcon();\r\n if (isSaved) {\r\n increaseCounter();\r\n } else {\r\n decreaseCounter();\r\n }\r\n })\r\n .catch(console.error);\r\n }\r\n }\r\n\r\n // DISPATCH EVENT FOR SAVED LIST (if available)\r\n document.dispatchEvent(new CustomEvent(\"updateSave\", {\r\n bubbles: true,\r\n detail: {\r\n Id: communityId,\r\n IsSaved: isSaved,\r\n Type: saveType\r\n }\r\n }));\r\n\r\n if (isLocalhost()) {\r\n if (isSaved) {\r\n increaseCounter();\r\n } else {\r\n decreaseCounter();\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/save-community.js","import { initMap } from \"./engrain-map\";\r\nimport { addToastMessage } from './toast';\r\nimport { isMobile } from \"../modules/utilities\";\r\nimport { initDNI } from \"../api/dni\";\r\n\r\n// let isMobile = window.innerWidth < 768;\r\n\r\n// window.addEventListener('resize', () => {\r\n// isMobile = window.innerWidth < 768;\r\n// })\r\n\r\nexport const handleOtherActions = (e) => {\r\n const dropdown = e.currentTarget.querySelector('.other-actions-dropdown');\r\n const dniId = e.currentTarget.getAttribute('data-dniId');\r\n e.preventDefault();\r\n if(dropdown) {\r\n if(!dropdown.hasAttribute('data-id')) dropdown.setAttribute('data-id', e.currentTarget.getAttribute('data-id'));\r\n if(!dropdown.dataset.listener) {\r\n dropdown.dataset.listener = 'true';\r\n dropdown.addEventListener('click', (e) => e.stopPropagation());\r\n }\r\n\r\n if(e.currentTarget.classList.contains('open')) {\r\n e.currentTarget.classList.remove('open');\r\n if(isMobile){\r\n e.currentTarget.append('.other-actions-dropdown.active');\r\n }\r\n document.querySelector('.other-actions-dropdown.active').classList.remove('active');\r\n } else {\r\n closeQuickAction();\r\n\r\n dropdown.classList.add('active');\r\n\r\n if(isMobile){\r\n if(!document.querySelectorAll('.other-overlay').length > 0){\r\n const overlay = document.createElement('DIV');\r\n overlay.classList.add('other-overlay');\r\n document.querySelector('body').append(overlay);\r\n }\r\n\r\n document.querySelector('.other-overlay').classList.add('active');\r\n document.querySelector('body').append(dropdown);\r\n } else {\r\n setTimeout(() => {\r\n document.addEventListener('click', closeQuickAction);\r\n }, 0);\r\n }\r\n\r\n initDNI(dniId);\r\n e.currentTarget.classList.add('open');\r\n }\r\n }\r\n}\r\n\r\nexport const closeQuickAction = () => {\r\n const openOther = document.querySelector('.other.open');\r\n if(openOther){\r\n openOther.classList.remove('open');\r\n\r\n const activeDropdown = document.querySelector('.other-actions-dropdown.active');\r\n activeDropdown.classList.remove('active');\r\n\r\n if(isMobile){\r\n openOther.append(activeDropdown);\r\n document.querySelector('.other-overlay').classList.remove('active');\r\n }\r\n }\r\n document.removeEventListener('click', closeQuickAction);\r\n}\r\n\r\nexport const handleAddToClipboard = (e) => {\r\n e.preventDefault();\r\n navigator.clipboard.writeText(e.currentTarget.getAttribute('data-address'));\r\n addToastMessage({\r\n body: 'Community address copied',\r\n });\r\n}\r\n\r\nexport const showLeasingInfo = (e) => {\r\n e.preventDefault();\r\n const leasingModal = document.querySelector(\".leasing-modal-wrapper\");\r\n leasingModal.classList.toggle('open');\r\n}\r\n\r\nexport const handleViewMap = (e) => {\r\n e.preventDefault();\r\n initMap(e.currentTarget.getAttribute('data-map-link'));\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/other-actions.js","import { getQuickViewDataById } from '../api/quick-view';\r\nimport {\r\n getUnitType,\r\n isMobile,\r\n googleMapStyles,\r\n defaultSwiperOptions,\r\n getViewComparisonLink\r\n} from '../modules/utilities';\r\nimport { closeModalGlobal, openModalGlobal, clearContent } from './modal';\r\nimport { handleSaveEvent } from './save-community';\r\nimport { handleAddToCompare } from '../api/compare';\r\nimport { openCompareWidget } from './compare-community';\r\nimport { addToastMessage } from './toast';\r\nimport { initDNI } from '../api/dni';\r\n\r\nconst maxCompare = 5;\r\n\r\nlet newPropertyContainer;\r\nlet fullScreenSwiperEl;\r\nlet fullScreenSwiper;\r\nlet counterEl;\r\nlet pinsize = screen.width > 767 ? 50 : 30;\r\n\r\nexport const initQuickViewModal = (id = '', dniId = '') => {\r\n clearContent();\r\n getQuickViewDataById(id)\r\n .then(quickViewData => {\r\n newPropertyContainer = document.createElement('div');\r\n newPropertyContainer.classList.add('property-container');\r\n let availableApartments = '';\r\n if (quickViewData.quickView && Array.isArray(quickViewData.quickView.AvailableApartments)) {\r\n quickViewData.quickView.AvailableApartments.forEach(aprt => {\r\n availableApartments += `${getUnitType(aprt)}`;\r\n })\r\n }\r\n let amenities = '';\r\n if (quickViewData.quickView && Array.isArray(quickViewData.quickView.Amenities)) {\r\n quickViewData.quickView.Amenities.forEach(amenity => {\r\n amenities += `\r\n
  • \r\n \r\n ${amenity.Name}\r\n
  • \r\n `;\r\n });\r\n }\r\n\r\n let imageFilters = '';\r\n let allImages = [];\r\n let imagesArray = [];\r\n if (quickViewData.quickView && quickViewData.quickView.Images) {\r\n imagesArray = Object.entries(quickViewData.quickView.Images);\r\n for (const [imgKey, images] of imagesArray) {\r\n allImages.push(...images);\r\n if(imgKey && imgKey != \"\"){\r\n imageFilters +=\r\n ``;\r\n }\r\n }\r\n imageFilters =\r\n `` + imageFilters;\r\n }\r\n\r\n let imageSliders = '';\r\n allImages.forEach((img, i) => {\r\n imageSliders += `\r\n
    \r\n \r\n
    \r\n `;\r\n })\r\n\r\n newPropertyContainer.innerHTML = `\r\n \r\n
    \r\n ${quickViewData.quickView && quickViewData.quickView.Name ? `

    ${quickViewData.quickView.Name}

    ` : ''}\r\n ${quickViewData.quickView && quickViewData.quickView.Address ? `

    ${quickViewData.quickView.Address}

    ` : ''}\r\n ${availableApartments ? `\r\n

    \r\n ${availableApartments}\r\n

    \r\n ` : ''}\r\n ${quickViewData.quickView && quickViewData.quickView.Description ? `\r\n

    ${quickViewData.quickView.Description}

    \r\n ` : ''}\r\n ${amenities ? `\r\n \r\n ` : ''}\r\n\r\n ${quickViewData.quickView && quickViewData.quickView.PageUrl && quickViewData.labels && quickViewData.labels.ViewCommunity ? `\r\n \r\n ${quickViewData.labels.ViewCommunity}\r\n \r\n ` : ''}\r\n ${quickViewData.quickView && quickViewData.quickView.PhoneNumber ? `\r\n

    \r\n \r\n \r\n ${quickViewData.labels.CallUs}: ${quickViewData.quickView.PhoneNumber}\r\n \r\n

    \r\n ` : ''}\r\n\r\n
    \r\n \r\n \r\n ${quickViewData.labels && quickViewData.labels.Favorite ? `\r\n ${quickViewData.labels.Favorite}\r\n `: ''}\r\n \r\n \r\n \r\n ${quickViewData.labels && quickViewData.labels.ScheduleATour ? `\r\n ${quickViewData.labels.ScheduleATour}\r\n `: ''}\r\n \r\n \r\n \r\n ${quickViewData.labels && quickViewData.labels.Compare ? `\r\n ${quickViewData.labels.Compare}\r\n ` : ''}\r\n \r\n ${isMobile ? `\r\n \r\n \r\n \r\n ${quickViewData.labels.CallUs}\r\n \r\n \r\n ` : ''}\r\n
    \r\n
    \r\n
    \r\n ${imagesArray.length !== 0 ?\r\n `\r\n
    \r\n
    \r\n ${imageFilters}\r\n
    \r\n
    \r\n
    \r\n ${imageSliders}\r\n
    \r\n
    \r\n ${!isMobile ? `\r\n
    \r\n
    \r\n ` : ''}\r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n ` : ''\r\n }\r\n
    \r\n
    \r\n
    \r\n ${imagesArray.length !== 0 || isMobile ? `\r\n ${quickViewData.labels.ExpandMap}\r\n ${quickViewData.labels.CollapseMap}\r\n \r\n ` : ''}\r\n
    \r\n

    \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n `;\r\n newPropertyContainer.querySelector('.apt-fav.save').addEventListener('click', (e) => {\r\n handleSaveEvent(e);\r\n });\r\n const swiper = newPropertyContainer.querySelector('.swiper');\r\n if (swiper) {\r\n swiper.addEventListener('click', attachImageGalleryClick);\r\n }\r\n newPropertyContainer.querySelector('.action-item.compare').addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n addToCompareHandler(e, allImages[0], quickViewData.quickView && quickViewData.quickView.Name);\r\n });\r\n newPropertyContainer.querySelector('#expand-collapse-map').addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n newPropertyContainer.querySelector('.media-container').classList.toggle('expanded-map');\r\n });\r\n newPropertyContainer.querySelector('.arrow-back').addEventListener('click', arrowBackHandler);\r\n newPropertyContainer.querySelector('.image-gallery-view-btn').addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n newPropertyContainer.querySelector('.image-gallery').classList.toggle('grid-view');\r\n newPropertyContainer.querySelector('.image-gallery-view-btn').classList.toggle('grid-view');\r\n });\r\n const imageGalleryContainerEl = newPropertyContainer.querySelector('.image-gallery');\r\n allImages.forEach((img, i) => {\r\n const imgEl = document.createElement('img');\r\n imgEl.setAttribute('src', img);\r\n imgEl.setAttribute('data-index', i);\r\n imageGalleryContainerEl.appendChild(imgEl);\r\n imgEl.addEventListener('click', imageGalleryElClick);\r\n\r\n })\r\n openModalGlobal(newPropertyContainer);\r\n initQuickViewMap(newPropertyContainer, quickViewData);\r\n imageSlider(newPropertyContainer, quickViewData);\r\n if(!isNaN(dniId)) initDNI(dniId);\r\n })\r\n .catch(console.error);\r\n}\r\n\r\nconst attachImageGalleryClick = (e) => {\r\n e.stopPropagation();\r\n if (newPropertyContainer && isMobile) {\r\n const target = e.currentTarget;\r\n newPropertyContainer.classList.add('image-gallery-opened');\r\n const activeSlide = target.querySelector('.swiper-slide-active');\r\n const index = activeSlide.dataset.swiperSlideIndex;\r\n const imageGallery = newPropertyContainer.querySelector('.image-gallery');\r\n if (index && index !== '0' && imageGallery) {\r\n const imageToScroll = imageGallery.querySelector(`[data-index=\"${index}\"]`);\r\n if (imageToScroll) {\r\n imageToScroll.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst arrowBackHandler = (e) => {\r\n e.stopPropagation();\r\n if (newPropertyContainer.classList.contains('image-gallery-full-screen')) {\r\n newPropertyContainer.classList.remove('image-gallery-full-screen');\r\n fullScreenSwiperEl.remove();\r\n counterEl.remove();\r\n if (fullScreenSwiper) {\r\n fullScreenSwiper.destroy();\r\n }\r\n } else {\r\n newPropertyContainer.classList.remove('image-gallery-opened');\r\n newPropertyContainer.querySelector('.image-gallery-view-btn').classList.remove('grid-view');\r\n newPropertyContainer.querySelector('.image-gallery').classList.remove('grid-view');\r\n }\r\n}\r\n\r\nexport const addToCompareHandler = (e, imgSrc, propertyName, position = 'middle') => {\r\n e.preventDefault();\r\n const isCompared = e.currentTarget.classList.contains('compared');\r\n const compareCount = document.querySelector('.compare-communities__list .community-list').getAttribute('data-count');\r\n handleAddToCompare(e)\r\n .then(() => {\r\n if (!isCompared && compareCount < maxCompare) {\r\n const props = {\r\n imgSrc: imgSrc,\r\n body: `${propertyName} added to your Compare list`,\r\n position,\r\n }\r\n const comparisonPageUrl = getViewComparisonLink();\r\n if (comparisonPageUrl) {\r\n props.btnText = 'View';\r\n props.btnHref = comparisonPageUrl;\r\n }\r\n addToastMessage(props);\r\n } else if (!isCompared && compareCount >= maxCompare) {\r\n addToastMessage({\r\n imgSrc: imgSrc,\r\n body: `You can only compare ${maxCompare} properties`,\r\n position,\r\n });\r\n } else {\r\n addToastMessage({\r\n imgSrc: imgSrc,\r\n body: `${propertyName} removed from your Compare list`,\r\n position,\r\n });\r\n }\r\n });\r\n}\r\n\r\nexport const imageGalleryElClick = (e) => {\r\n e.stopPropagation();\r\n if (newPropertyContainer) {\r\n const target = e.currentTarget;\r\n const targetIndex = target.getAttribute('data-index');\r\n newPropertyContainer.classList.add('image-gallery-full-screen');\r\n fullScreenSwiperEl = document.createElement('div');\r\n fullScreenSwiperEl.classList.add('full-screen-swiper');\r\n\r\n counterEl = document.createElement('span');\r\n counterEl.classList.add('swiper-full-screen-counter')\r\n const images = [...newPropertyContainer.querySelector('.image-gallery').children];\r\n counterEl.innerHTML = `${+targetIndex + 1} / ${images.length}`;\r\n newPropertyContainer.appendChild(counterEl);\r\n newPropertyContainer.appendChild(fullScreenSwiperEl);\r\n let imageSliders = '';\r\n images.forEach(img => {\r\n const imgSrc = img.getAttribute('src');\r\n const dataIndex = img.getAttribute('data-index');\r\n imageSliders += `\r\n
    \r\n \r\n
    \r\n `;\r\n });\r\n fullScreenSwiperEl.innerHTML = `\r\n
    \r\n ${imageSliders}\r\n
    \r\n `;\r\n const swiperOptions = {\r\n loop: true,\r\n spaceBetween: 10,\r\n initialSlide: +targetIndex,\r\n on: {\r\n slideChange: (e) => {\r\n counterEl.innerHTML = `${e.realIndex + 1} / ${images.length}`;\r\n }\r\n }\r\n };\r\n fullScreenSwiper = new Swiper('.full-screen-swiper', swiperOptions);\r\n }\r\n}\r\n\r\nconst initQuickViewMap = async (el, data) => {\r\n const { Map } = await google.maps.importLibrary(\"maps\");\r\n const lat = data && data.quickView && data.quickView.Coordinates && data.quickView.Coordinates.Lat || 40.6839597;\r\n const lng = data && data.quickView && data.quickView.Coordinates && data.quickView.Coordinates.Lon || -74.2163569;\r\n const mapOptions = {\r\n center: { lat, lng },\r\n zoom: 15,\r\n disableDefaultUI: true,\r\n zoomControl: true,\r\n styles: googleMapStyles,\r\n };\r\n const map = new Map(el.querySelector(\"#quick-view-map\"), mapOptions);\r\n const marker = new google.maps.Marker({\r\n position: { lat, lng },\r\n map: map,\r\n icon: {\r\n url: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHZpZXdCb3g9IjAgMCA4OCA4OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWx0ZXI9InVybCgjYSkiPjxjaXJjbGUgY3g9IjQ0IiBjeT0iNDQiIHI9IjIwIiBmaWxsPSIjMDUwRjMyIi8+PG1hc2sgaWQ9ImIiIHN0eWxlPSJtYXNrLXR5cGU6bHVtaW5hbmNlIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIzNCIgeT0iNDAiIHdpZHRoPSI4IiBoZWlnaHQ9IjgiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzcuODMzIDQwLjY1bDMuODE1IDMuMzYtMy44MTUgMy4zNEgzNHYtNi43aDMuODMzeiIgZmlsbD0iI2ZmZiIvPjwvbWFzaz48ZyBtYXNrPSJ1cmwoI2IpIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM3LjgzMyA0Ny4zNWwzLjgxNS0zLjM0LTMuODE1LTMuMzZIMzR2Ni43aDMuODMzeiIgZmlsbD0iI2ZmZiIvPjwvZz48bWFzayBpZD0iYyIgc3R5bGU9Im1hc2stdHlwZTpsdW1pbmFuY2UiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjM1IiB5PSI0NSIgd2lkdGg9IjkiIGhlaWdodD0iOSI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00Mi42NjQgNDUuNzVsLjk5NyA0Ljk2TDQxLjc1NCA1NGwtNS44MjgtMy4zNCAxLjkwNy0zLjMxIDQuODMtMS42eiIgZmlsbD0iI2ZmZiIvPjwvbWFzaz48ZyBtYXNrPSJ1cmwoI2MpIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQzLjY2MSA1MC43MWwtLjk5Ny00Ljk2LTQuODMgMS42LTEuOTA4IDMuMzFMNDEuNzU0IDU0bDEuOTA3LTMuMjl6IiBmaWxsPSIjZmZmIi8+PC9nPjxtYXNrIGlkPSJkIiBzdHlsZT0ibWFzay10eXBlOmx1bWluYW5jZSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iNDMiIHk9IjQ1IiB3aWR0aD0iOSIgaGVpZ2h0PSI5Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ0LjY3NSA0NS43NWw0LjgzIDEuNiAxLjkwOCAzLjMxTDQ1LjU4NSA1NGwtMS45MjUtMy4yOSAxLjAxNS00Ljk2eiIgZmlsbD0iI2ZmZiIvPjwvbWFzaz48ZyBtYXNrPSJ1cmwoI2QpIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ5LjUwNiA0Ny4zNWwtNC44My0xLjYtMS4wMTYgNC45Nkw0NS41ODUgNTRsNS44MjgtMy4zNC0xLjkwNy0zLjMxeiIgZmlsbD0iI2ZmZiIvPjwvZz48bWFzayBpZD0iZSIgc3R5bGU9Im1hc2stdHlwZTpsdW1pbmFuY2UiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjQ1IiB5PSI0MCIgd2lkdGg9IjkiIGhlaWdodD0iOCI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01My4zMjIgNDAuNjV2Ni43aC0zLjgxNWwtMy44MTYtMy4zNCAzLjgxNi0zLjM2aDMuODE1eiIgZmlsbD0iI2ZmZiIvPjwvbWFzaz48ZyBtYXNrPSJ1cmwoI2UpIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQ5LjUwNyA0MC42NWwtMy44MTYgMy4zNiAzLjgxNiAzLjM0aDMuODE1di02LjdoLTMuODE1eiIgZmlsbD0iI2ZmZiIvPjwvZz48bWFzayBpZD0iZiIgc3R5bGU9Im1hc2stdHlwZTpsdW1pbmFuY2UiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjQzIiB5PSIzNCIgd2lkdGg9IjkiIGhlaWdodD0iOSI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00NS41ODUgMzRsNS44MjggMy4zNi0xLjkwNyAzLjI5LTQuODMgMS42Mi0xLjAxNi00Ljk2NUw0NS41ODUgMzR6IiBmaWxsPSIjZmZmIi8+PC9tYXNrPjxnIG1hc2s9InVybCgjZikiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDMuNjYgMzcuMzA1bDEuMDE1IDQuOTY1IDQuODMtMS42MiAxLjkwOC0zLjI5TDQ1LjU4NSAzNGwtMS45MjUgMy4zMDV6IiBmaWxsPSIjZmZmIi8+PC9nPjxtYXNrIGlkPSJnIiBzdHlsZT0ibWFzay10eXBlOmx1bWluYW5jZSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMzUiIHk9IjM0IiB3aWR0aD0iOSIgaGVpZ2h0PSI5Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTQxLjc1NCAzNGwxLjkwNyAzLjMwNS0uOTk3IDQuOTY1LTQuODMtMS42Mi0xLjkwOC0zLjI5TDQxLjc1NCAzNHoiIGZpbGw9IiNmZmYiLz48L21hc2s+PGcgbWFzaz0idXJsKCNnKSI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNy44MzMgNDAuNjVsNC44MyAxLjYyLjk5OC00Ljk2NUw0MS43NTQgMzRsLTUuODI4IDMuMzYgMS45MDcgMy4yOXoiIGZpbGw9IiNmZmYiLz48L2c+PC9nPjxkZWZzPjxmaWx0ZXIgaWQ9ImEiIHg9IjAiIHk9IjAiIHdpZHRoPSI4OCIgaGVpZ2h0PSI4OCIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIiByZXN1bHQ9ImhhcmRBbHBoYSIvPjxmZU9mZnNldC8+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTIiLz48ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJvdXQiLz48ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMjUgMCIvPjxmZUJsZW5kIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18xMDcyXzI1MzQ4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzEwNzJfMjUzNDgiIHJlc3VsdD0ic2hhcGUiLz48L2ZpbHRlcj48L2RlZnM+PC9zdmc+',\r\n scaledSize: new google.maps.Size(pinsize, pinsize)\r\n },\r\n });\r\n}\r\n\r\nconst imageSlider = (el, data) => {\r\n const swiperOptions = Object.assign({}, defaultSwiperOptions);\r\n swiperOptions.navigation = {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n }\r\n let swiper = new Swiper('.swiper', swiperOptions);\r\n\r\n const filters = el.querySelectorAll(\".filter\");\r\n const swiperWrapper = el.querySelector(\".swiper-wrapper\");\r\n\r\n filters.forEach((filter) => {\r\n filter.addEventListener(\"click\", function (e) {\r\n const { category } = e.currentTarget.dataset;\r\n filters.forEach((otherFilter) => {\r\n if (otherFilter !== filter) {\r\n otherFilter.classList.remove(\"active\");\r\n } else {\r\n otherFilter.classList.add(\"active\");\r\n }\r\n });\r\n const slides = newPropertyContainer.querySelectorAll(\".swiper-slide\");\r\n const imageGallery = newPropertyContainer.querySelector('.image-gallery');\r\n slides.forEach(slide => slide.remove());\r\n if (imageGallery && imageGallery.children) {\r\n [...imageGallery.children].forEach((img) => img.remove());\r\n }\r\n let imagesToRender = [];\r\n if (category !== 'All') {\r\n imagesToRender = data.quickView.Images[category];\r\n } else if (category === 'All') {\r\n Object.values(data.quickView.Images).forEach(val => {\r\n imagesToRender.push(...val);\r\n })\r\n }\r\n imagesToRender.forEach((image, i) => {\r\n const imgEl = document.createElement('div');\r\n imgEl.classList.add('swiper-slide');\r\n const imgSrcEl = document.createElement('img');\r\n imgSrcEl.setAttribute('src', image);\r\n imgSrcEl.setAttribute('data-index', i);\r\n imgEl.appendChild(imgSrcEl);\r\n swiperWrapper.appendChild(imgEl);\r\n const imgGalleryEl = imgSrcEl.cloneNode(true);\r\n imgGalleryEl.addEventListener('click', imageGalleryElClick);\r\n imageGallery.appendChild(imgGalleryEl);\r\n })\r\n swiper.destroy();\r\n swiper = new Swiper('.swiper', swiperOptions);\r\n });\r\n });\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/quick-view.js","import { isMobile } from '../modules/utilities';\r\n\r\nconst TOAST_RIGHT_SECTION = 'toast-right';\r\nconst TOAST_MIDDLE_SECTION = 'toast-middle';\r\n\r\nconst TOAST_DURATION = 5000;\r\n\r\nexport const addToastMessage = ({ imgSrc, body, btnHref, btnText, btnCb, position = 'right' } = {}) => {\r\n const toastId = position === 'right' && !isMobile ? TOAST_RIGHT_SECTION : TOAST_MIDDLE_SECTION;\r\n const toastContainer = document.getElementById(toastId);\r\n if (toastContainer && (imgSrc || body || btnText)) {\r\n const toastItem = document.createElement('div');\r\n toastItem.classList.add('toast-item');\r\n if (imgSrc) {\r\n const imgEl = document.createElement('img');\r\n imgEl.classList.add('toast-img');\r\n imgEl.src = imgSrc;\r\n toastItem.appendChild(imgEl);\r\n }\r\n if (body) {\r\n const bodyEl = document.createElement('p');\r\n bodyEl.classList.add('toast-body');\r\n bodyEl.innerText = body;\r\n toastItem.appendChild(bodyEl);\r\n }\r\n if (btnText) {\r\n const btnEl = document.createElement('a');\r\n btnEl.classList.add('toast-btn');\r\n btnEl.innerText = btnText;\r\n if (!btnCb && btnHref) {\r\n btnEl.href = btnHref;\r\n }\r\n if (btnCb) {\r\n btnEl.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n closeToast();\r\n btnCb();\r\n });\r\n }\r\n toastItem.appendChild(btnEl);\r\n }\r\n toastContainer.appendChild(toastItem);\r\n requestAnimationFrame(() => {\r\n toastItem.classList.add('active');\r\n });\r\n const closeToast = () => {\r\n toastItem.classList.remove('active');\r\n toastItem.addEventListener('transitionend', () => {\r\n toastItem.remove();\r\n });\r\n }\r\n let timeout = setTimeout(() => {\r\n closeToast();\r\n }, TOAST_DURATION);\r\n toastItem.addEventListener('mouseover', () => {\r\n clearTimeout(timeout);\r\n });\r\n toastItem.addEventListener('mouseout', () => {\r\n timeout = setTimeout(() => {\r\n closeToast();\r\n }, TOAST_DURATION);\r\n });\r\n }\r\n}\r\n\r\nconst initToast = () => {\r\n const leftToastEl = document.createElement('div');\r\n leftToastEl.setAttribute('id', TOAST_RIGHT_SECTION);\r\n leftToastEl.classList.add(TOAST_RIGHT_SECTION);\r\n leftToastEl.addEventListener('click', e => e.stopPropagation());\r\n document.body.appendChild(leftToastEl);\r\n const middleToastEl = document.createElement('div');\r\n middleToastEl.setAttribute('id', TOAST_MIDDLE_SECTION);\r\n middleToastEl.classList.add(TOAST_MIDDLE_SECTION);\r\n middleToastEl.addEventListener('click', e => e.stopPropagation());\r\n document.body.appendChild(middleToastEl);\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", initToast);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/toast.js","import { isLocalhost } from '../modules/utilities';\r\n\r\nconst GET_COMPARE_URL = '/maa-api/compare/v1/list';\r\nconst COMPARE_URL = '/maa-api/compare/v1/';\r\nconst maxCompare = 5;\r\n\r\nexport const getComparedItems = async () => {\r\n if(!isLocalhost()){\r\n return fetch(GET_COMPARE_URL)\r\n .then(response => response.json())\r\n .then(response => {\r\n console.log(response);\r\n if (response.success != true) {\r\n return console.error('API error occurred');\r\n }\r\n return response.properties;\r\n })\r\n .catch(console.error);\r\n }\r\n}\r\n\r\nexport const toggleCompare = (id) => {\r\n document.querySelectorAll(`[data-id=\"${id}\"][href=\"#compare\"]`).forEach((item) => {\r\n item.classList.toggle('compared');\r\n });\r\n}\r\n\r\nconst removeFromCompareEvent = (id) => {\r\n document.dispatchEvent(new CustomEvent('removeFromCompare', {\r\n bubbles: true,\r\n detail: {\r\n Id: id,\r\n }\r\n }));\r\n}\r\n\r\nconst addToCompareEvent = (propertyDetails) => {\r\n document.dispatchEvent(new CustomEvent('addedToCompare', {\r\n bubbles: true,\r\n detail: propertyDetails,\r\n }));\r\n}\r\n\r\nexport const removeFromCompare = (id) => {\r\n if (isLocalhost()) {\r\n toggleCompare(id);\r\n removeFromCompareEvent(id);\r\n return Promise.resolve();\r\n }\r\n return fetch(COMPARE_URL + id, {\r\n method: 'DELETE',\r\n })\r\n .then(res => {\r\n if (res.status !== 200) {\r\n throw new Error(res.statusText);\r\n }\r\n toggleCompare(id);\r\n removeFromCompareEvent(id);\r\n });\r\n}\r\n\r\nexport const addToCompare = (id) => {\r\n const compareCount = document.querySelector('.compare-communities__list .community-list').getAttribute('data-count');\r\n if(compareCount < maxCompare){\r\n return fetch(COMPARE_URL + id, {\r\n method: 'POST',\r\n })\r\n .then(response => response.json())\r\n .then(response => {\r\n toggleCompare(id);\r\n addToCompareEvent(response);\r\n });\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport const handleAddToCompare = async (e) => {\r\n const target = e.currentTarget;\r\n const isCompared = target.classList.contains('compared')\r\n const id = target.getAttribute('data-id');\r\n const compareCount = document.querySelector('.compare-communities__list .community-list').getAttribute('data-count');\r\n\r\n if (isLocalhost()) {\r\n return Promise\r\n .resolve()\r\n .then(() => {\r\n const response = {\r\n \"Id\": id,\r\n \"Image\": \"-/media/images/properties/georgia/atlanta/maa-dunwoody/slides/2022/3-pool-3.jpg?w=84&h=56\",\r\n \"Neighborhood\": \"Dunwoody|Perimeter Center\",\r\n \"PropertyName\": \"MAA Dunwoody\",\r\n \"FloorplanName\": null,\r\n \"Url\": \"/georgia/atlanta/maa-dunwoody/\",\r\n \"UnitType\": null,\r\n \"Price\": 0.0,\r\n \"MoveInDate\": null,\r\n \"IsSaved\": true,\r\n };\r\n\r\n if (isCompared) {\r\n removeFromCompareEvent(id);\r\n toggleCompare(id);\r\n } else if(compareCount < maxCompare) {\r\n addToCompareEvent(response);\r\n toggleCompare(id);\r\n } else {\r\n return false;\r\n }\r\n })\r\n }\r\n return isCompared ? removeFromCompare(id) : addToCompare(id);\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/api/compare.js","export const openCompareWidget = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n const compareWrapper = document.querySelector('.compare-communities');\r\n const compareOverlay = document.querySelector('.compare-overlay');\r\n\r\n if (compareWrapper && compareOverlay) {\r\n compareWrapper.classList.remove('collapsed');\r\n compareOverlay.classList.remove('collapsed');\r\n document.body.style.overflow = 'hidden';\r\n }\r\n}\r\n\r\n\r\nexport const closeCompareWidget = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n const compareWrapper = document.querySelector('.compare-communities');\r\n const compareOverlay = document.querySelector('.compare-overlay');\r\n\r\n if (compareWrapper && compareOverlay) {\r\n compareWrapper.classList.add('collapsed');\r\n compareOverlay.classList.add('collapsed');\r\n document.body.style.overflow = null;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/compare-community.js","\r\nexport const initDNI = (FunnelCommunityID) => {\r\n try {\r\n const FunnelApiKey = window.FunnelApiKey;\r\n if(typeof FunnelApiKey === 'undefined' || FunnelApiKey === null || FunnelApiKey === '') {\r\n throw \"Funnel is not initialized\";\r\n }\r\n if(typeof FunnelDNI === 'function'){\r\n FunnelDNI(\r\n FunnelApiKey,\r\n FunnelCommunityID,\r\n function(data) {\r\n // this will fire when DNI occurs\r\n // $(\"#DNIValue\").val(data.lead_source_id);\r\n const DNIValue = document.getElementById(\"DNIValue\");\r\n if (DNIValue) {\r\n DNIValue.value = data.lead_source_id;\r\n }\r\n });\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/api/dni.js","import { isLocalhost } from '../modules/utilities';\r\n\r\nconst COMMUNITY_LIST_URL = '/api/location/CommunityList';\r\nconst COMMUNITIES_NEAR_YOU_URL = location.hostname === 'localhost' ? '/assets/data/communities.json?' : '/maa-api/nearby/v1/list?'; // TODO update url\r\n\r\nexport const getCommunityList = async (locationId, templateId, body = {}) => {\r\n if (isLocalhost()) {\r\n return testData;\r\n }\r\n return fetch(COMMUNITY_LIST_URL + '?' + new URLSearchParams({\r\n locationid: locationId,\r\n templateid: templateId,\r\n }), {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json;charset=utf-8'\r\n },\r\n body: JSON.stringify(body),\r\n })\r\n .then(response => response.json())\r\n .then(response => {\r\n if (response.success != true) {\r\n console.error('API error occurred');\r\n return {};\r\n }\r\n return response;\r\n });\r\n}\r\n\r\nexport const getCommunitiesNearYou = (longitude, latitude) => {\r\n return fetch(COMMUNITIES_NEAR_YOU_URL + new URLSearchParams({\r\n longitude,\r\n latitude,\r\n }))\r\n .then(response => response.json())\r\n .then(response => {\r\n return response;\r\n })\r\n .catch(console.error);\r\n}\r\n\r\nconst testData = {\r\n \"success\": true,\r\n \"amount\": 14,\r\n \"filters\": [\r\n {\r\n \"Title\": \"Bedroom\",\r\n \"FilterType\": \"Checkbox\",\r\n \"FilterColumn\": \"Bedroom\",\r\n \"Values\": [\r\n {\r\n \"Value\": \"Studio\",\r\n \"RawValue\": \"0\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"1 Bed\",\r\n \"RawValue\": \"1\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"2 Bed\",\r\n \"RawValue\": \"2\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"3 Bed\",\r\n \"RawValue\": \"3\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n }\r\n ]\r\n },\r\n {\r\n \"Title\": \"Max Price\",\r\n \"FilterType\": \"RadioButton\",\r\n \"FilterColumn\": \"MaxPrice\",\r\n \"Values\": [\r\n {\r\n \"Value\": \"Up to $1350\",\r\n \"RawValue\": \"1350\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Up to $1430\",\r\n \"RawValue\": \"1430\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Up to $1510\",\r\n \"RawValue\": \"1510\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Up to $1590\",\r\n \"RawValue\": \"1590\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Up to $1670\",\r\n \"RawValue\": \"1670\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Up to $1750\",\r\n \"RawValue\": \"1750\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Up to $1830\",\r\n \"RawValue\": \"1830\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n }\r\n ]\r\n },\r\n {\r\n \"Title\": \"Amenities\",\r\n \"FilterType\": \"Checkbox\",\r\n \"FilterColumn\": \"Amenities\",\r\n \"Values\": [\r\n {\r\n \"Value\": \"24/hr Fitness Center (6)\",\r\n \"RawValue\": \"24/hr Fitness Center\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Bark Park (5)\",\r\n \"RawValue\": \"Bark Park\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Cabana (2)\",\r\n \"RawValue\": \"Cabana\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Clubhouse (11)\",\r\n \"RawValue\": \"Clubhouse\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Concierge Service (1)\",\r\n \"RawValue\": \"Concierge Service\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Fitness Center (7)\",\r\n \"RawValue\": \"Fitness Center\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Garage Parking (4)\",\r\n \"RawValue\": \"Garage Parking\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Gated Community (1)\",\r\n \"RawValue\": \"Gated Community\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Grill & Picnic Area (13)\",\r\n \"RawValue\": \"Grill & Picnic Area\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"High Speed Internet (3)\",\r\n \"RawValue\": \"High Speed Internet\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"In unit Laundry (2)\",\r\n \"RawValue\": \"In unit Laundry\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"On-site Recycling (1)\",\r\n \"RawValue\": \"On-site Recycling\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Playground (7)\",\r\n \"RawValue\": \"Playground\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Pool (13)\",\r\n \"RawValue\": \"Pool\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Retail Access (2)\",\r\n \"RawValue\": \"Retail Access\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Running Trails (3)\",\r\n \"RawValue\": \"Running Trails\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Tennis (1)\",\r\n \"RawValue\": \"Tennis\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n }\r\n ]\r\n },\r\n {\r\n \"Title\": \"Neighborhood\",\r\n \"FilterType\": \"Checkbox\",\r\n \"FilterColumn\": \"Neighborhood\",\r\n \"Values\": [\r\n {\r\n \"Value\": \"CITY\",\r\n \"RawValue\": \"city\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"LAKE\",\r\n \"RawValue\": \"lake\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"NONA\",\r\n \"RawValue\": \"nona\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"PARK\",\r\n \"RawValue\": \"park\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"CREEK\",\r\n \"RawValue\": \"creek\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"BURTON\",\r\n \"RawValue\": \"burton\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"BALDWIN\",\r\n \"RawValue\": \"baldwin\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"HUNTERS\",\r\n \"RawValue\": \"hunters\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"MEDICAL\",\r\n \"RawValue\": \"medical\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"ORLANDO\",\r\n \"RawValue\": \"orlando\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"DOWNTOWN\",\r\n \"RawValue\": \"downtown\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n }\r\n ]\r\n },\r\n {\r\n \"Title\": \"Move-in\",\r\n \"FilterType\": \"RadioButton\",\r\n \"FilterColumn\": \"MoveIn\",\r\n \"Values\": [\r\n {\r\n \"Value\": \"Now\",\r\n \"RawValue\": \"now\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Within 2 weeks\",\r\n \"RawValue\": \"2weeks\",\r\n \"IsSelected\": true,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Within 1 month\",\r\n \"RawValue\": \"1month\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n },\r\n {\r\n \"Value\": \"Within 2 months\",\r\n \"RawValue\": \"2months\",\r\n \"IsSelected\": false,\r\n \"Render\": true\r\n }\r\n ]\r\n }\r\n ],\r\n \"communities\": [\r\n {\r\n \"UniqueId\": \"sitecore://web/{1bcc85e5-a799-402c-98aa-494a25f36ca2}?lang=en&ver=26&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652922\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Tiffany Oaks luxury apartment homes in Orlando , FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/assets/img/communities-preview.png\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"ec78261b-b360-4251-8646-e6842fd9cc92\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"No Rent Until June 1, 2023 on Select One Bedroom Units! Terms and Conditions apply.\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool deck at MAA Tiffany Oaks luxury apartment homes in Orlando , FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-tiffany-oaks/slides/2021/2-tiffany-oaks-pool-deck.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"2a4f57d7-0a67-48d2-ac4c-480813ecea44\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Relax on the patio or take a dip in the pool\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Leasing office at MAA Tiffany Oaks luxury apartment homes in Orlando , FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-tiffany-oaks/slides/2021/3-tiffany-oaks-leasing-office.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"b1152541-b915-417e-8a6f-8985f35eb108\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Enjoy the gorgeous, well-kept grounds\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Grilling area at MAA Tiffany Oaks luxury apartment homes in Orlando , FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-tiffany-oaks/slides/2021/4-tiffany-oaks-grills.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"903c7394-19b0-4953-9984-eeb730784ab6\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Grill out with family and friends in the picnic area\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Clubhouse at MAA Tiffany Oaks luxury apartment homes in Orlando , FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-tiffany-oaks/slides/2021/5-tiffany-oaks-clubhouse.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"28704f96-5210-4028-a988-c963bd7543d6\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"The clubhouse is the perfect spot for gatherings\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Clubhouse at MAA Tiffany Oaks luxury apartment homes in Orlando , FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-tiffany-oaks/slides/2021/6-tiffany-oaks-clubhouse-2.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"02f87d91-32ee-4f90-b8e1-dfeadb2d3a1d\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"A variety of spaces to suit your needs\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2\r\n ],\r\n \"CommunityMinPrice\": 1326,\r\n \"CommunityMaxPrice\": 3011,\r\n \"CommunityNeighborhood\": \"null\",\r\n \"CommunityName\": \"MAA Tiffany Oaks\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.6563,\r\n \"Lon\": -81.3843\r\n },\r\n \"CommunityAddress\": \"351 S Northlake Blvd.
    Altamonte Springs, FL 32701\",\r\n \"CommunityPhoneNumber\": \"(407) 901-9289\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-tiffany-oaks/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652922\",\r\n \"IsSaved\": true\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{5553e6f5-e199-4bc3-86ea-d7b817b08515}?lang=en&ver=27&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652915\",\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1388,\r\n \"CommunityMaxPrice\": 3743,\r\n \"CommunityNeighborhood\": \"\",\r\n \"CommunityName\": \"MAA Twin Lakes\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.7926,\r\n \"Lon\": -81.3355\r\n },\r\n \"CommunityAddress\": \"11500 Myrtlewood Drive
    Sanford, FL 32771\",\r\n \"CommunityPhoneNumber\": \"(407) 305-7696\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-twin-lakes/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652915\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{8159e45a-79d9-4b7d-bb1c-c442a9241c89}?lang=en&ver=39&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"1262882\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Exterior of MAA Robinson luxury apartments in Orlando, Florida\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-robinson/maa-robinson-exterior-twilight-no-banner-resized.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"19ef9cba-3add-41b3-b967-04f151365c2c\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home to MAA Robinson!\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"MAA Robinson Orlando Florida Apartments\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-robinson/mr-1.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"da601368-1ae3-4613-a8e0-c5640edbc481\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Beautiful rooftop pool\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Courtyard at MAA Robinson luxury apartments in Orlando, Florida\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-robinson/maa-robinson-courtyard.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"ddf16d1f-3057-4654-9f01-9a4ae7156553\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Gather with friends around the fire pits\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Courtyard at MAA Robinson luxury apartments in Orlando, Florida\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-robinson/maa-robinson-courtyard2.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"0e688d15-4ec6-4b7d-b86d-526f9a486248\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Amenities all around\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"MAA Robinson Orlando Florida Apartments\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-robinson/mr-dog-park.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"812dbc72-8a58-4252-a416-c962c22ccdd7\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Endless amenities\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Common area at MAA Robinson luxury apartments in Orlando, Florida\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-robinson/maa-robinson-leasing.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"77924dd0-95dd-4a83-b1ea-2e6b97f97fdd\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Gorgeous common areas where you can meet and mingle\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1463,\r\n \"CommunityMaxPrice\": 4733,\r\n \"CommunityNeighborhood\": \"Downtown Orlando\",\r\n \"CommunityName\": \"MAA Robinson\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.54594,\r\n \"Lon\": -81.37955\r\n },\r\n \"CommunityAddress\": \"310 N Orange Ave
    Orlando, FL 32801\",\r\n \"CommunityPhoneNumber\": \"(407) 305-6926\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-robinson/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/1262882\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{e5333a73-7429-45ff-941b-dcc40a90229b}?lang=en&ver=29&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"728009\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Randal Lakes luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-randal-lakes/slides/2021/maa-randal-lakes-pool.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"5a8254dc-9492-47f0-b232-962f235093cd\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home to MAA Randal Lakes\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Lake at MAA Randal Lakes luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-randal-lakes/slides/2021/maa-randal-lakes-lake.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"7a9eac67-dd41-4860-acf5-3075504baac9\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Take a walk around the peaceful lake\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Fitness center at MAA Randal Lakes luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-randal-lakes/slides/2021/maa-randal-lakes-fitness-center.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"f44c58ed-2002-4242-a95d-884d3a80667b\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"A variety of equipment in the cardio fitness center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Fitness center at MAA Randal Lakes luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-randal-lakes/slides/2021/maa-randal-lakes-fitness-center2.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"97805c44-b930-46de-99bf-852d415904ab\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Focus on wellness in the fitness center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Clubhouse at MAA Randal Lakes luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-randal-lakes/slides/2021/maa-randal-lakes-clubhouse.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"1f1fb330-ae3e-464d-a609-0893cd02e810\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"So many amenities to enjoy\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Business center at MAA Randal Lakes luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-randal-lakes/slides/2021/maa-randal-lakes-business-center.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"799c3647-4ac9-4865-b1d5-28d859561be3\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Tackle your to-do list in the business center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1528,\r\n \"CommunityMaxPrice\": 3948,\r\n \"CommunityNeighborhood\": \"Lake Nona|Medical City\",\r\n \"CommunityName\": \"MAA Randal Lakes\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.4321,\r\n \"Lon\": -81.234\r\n },\r\n \"CommunityAddress\": \"9200 Randal Park Blvd
    Orlando, FL 32832\",\r\n \"CommunityPhoneNumber\": \"(407) 809-8438\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-randal-lakes/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/728009\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{0cec8e1d-76db-4de9-a626-ed472dca7d0f}?lang=en&ver=19&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"655017\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Aerial view at MAA Town Park Reserve luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/2020/tp-23.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"5988c9f1-abc7-41a1-a5ab-591795bd808b\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"For a limited time, $99 application fees with approved credit. Terms and conditions apply.\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Store 2 at MAA Town Park Reserve luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/22cgtownparkreserve_store2-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"1412b740-3f47-4764-839c-6c5d81ee7908\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Take a stroll through the shops\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Patio at MAA Town Park luxury apartment homes in Lake Mary, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park/slides/9-colonial-grand-at-town-park-lake-mary-fl_patio-3-2-1200x525.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"dd21aeb9-4da1-4e33-a6b2-54d2fe012595\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Relax on the patio\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Town Park Reserve luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/2020/tp5web-use.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"74094350-9e18-4663-8b49-4d8bad215149\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Sparkling pool\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Fitness at MAA Town Park Reserve luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/6cgtownpark_fitness-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"b0bc8e63-e2e1-472e-be3c-2bfabc6897f3\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Fitness center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Lounge at MAA Town Park Reserve luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/5cgtownpark_lounge-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"5e3a504b-bc52-4282-ab0b-005c6bdb34c7\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Plenty of outdoor areas to relax\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2\r\n ],\r\n \"CommunityMinPrice\": 1623,\r\n \"CommunityMaxPrice\": 3763,\r\n \"CommunityNeighborhood\": \"\",\r\n \"CommunityName\": \"MAA Town Park Reserve\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.79164,\r\n \"Lon\": -81.36055\r\n },\r\n \"CommunityAddress\": \"1050 Colonial Grand Lane
    Lake Mary, FL 32746\",\r\n \"CommunityPhoneNumber\": \"(407) 214-3762\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-town-park-reserve/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/655017\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{bf57f39b-95af-46d4-bf70-7ef62e67deae}?lang=en&ver=23&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"611807\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Aerial View MAA Parkside Orlando Florida Apartments\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-parkside/slides/2021/mp-2.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"17b7b53a-3798-452a-8ec7-f3e70d79cfd7\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home to MAA Parkside\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Aerial View MAA Parkside Orlando Florida Apartments\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-parkside/slides/2021/mp-9.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"da1af279-b427-47ca-b42f-e0fe4c14f2dc\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Serene lake views await\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Exterior MAA Parkside Orlando Florida Apartments\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-parkside/slides/2021/mp-28-(2).jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"c7418a22-3775-4ae8-9aef-e39fbfb02d7c\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Lush landscaping and lakeside walking paths\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool MAA Parkside Orlando Florida Apartments\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-parkside/slides/2021/mp-4.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"649bec4a-bcf2-4c43-bf6d-817d3e1f7670\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Take a refreshing dip in the resort-style pool\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool 2 MAA Parkside Orlando Florida Apartments\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-parkside/slides/2021/mp-15.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"d266dd58-1d10-4341-a842-df6f5c71d94a\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Relax in the outdoor spaces\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Living Room with carpet at MAA Parkside Luxury Apartment Homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-parkside/slides/2022/3a4dininglivingcarpet.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"d3c59270-2094-4e26-ac35-f372898e945f\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Relax in comfortable living spaces\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1630,\r\n \"CommunityMaxPrice\": 5400,\r\n \"CommunityNeighborhood\": \"Downtown Orlando\",\r\n \"CommunityName\": \"MAA Parkside\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.5425,\r\n \"Lon\": -81.3718\r\n },\r\n \"CommunityAddress\": \"431 E. Central Blvd Ste A
    Orlando, FL 32801\",\r\n \"CommunityPhoneNumber\": \"(407) 214-5663\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-parkside/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/611807\",\r\n \"IsSaved\": true\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{a89b139d-38fb-49d8-934c-74d668e00075}?lang=en&ver=23&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652903\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool Area at MAA Windermere in Orlando, FL \",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-windermere/slides/2022/1-pool.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"56768e35-6488-4390-bcb1-ccb77746138e\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Great specials ...call or visit us today!\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool Lounge at MAA Windermere in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-windermere/slides/2022/2-pool-lounge.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"bcc3180a-c9e7-41a5-a50f-5b57c8eff604\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Gather around in the outdoor pool lounge\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Clubhouse at MAA Windermere in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-windermere/slides/2022/3-clubhouse.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"af587670-4f52-4c83-9144-9eceb1c12a8d\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Stylish clubhouse\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Lounge Area in MAA Windermere in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-windermere/slides/2022/4-lounge.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"db2f08e0-f65c-4928-98a0-d409c88d3aaf\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Visit with friends and family in the lounge\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Yoga Studio at MAA Windermere in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-windermere/slides/2022/5-yoga.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"8812af11-8700-4241-b7fd-02daf06f0792\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Reach your fitness goals in the yoga studio\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Fitness Center at MAA Windermere in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-windermere/slides/2022/6-fitness.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"7175317f-efc0-41aa-9ab4-20277b66b963\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Work up a sweat in the fitness center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1632,\r\n \"CommunityMaxPrice\": 4743,\r\n \"CommunityNeighborhood\": \"Lake Burton\",\r\n \"CommunityName\": \"MAA Windermere\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.4505,\r\n \"Lon\": -81.5602\r\n },\r\n \"CommunityAddress\": \"11598 Lachlan Lane
    Windermere, FL 34786\",\r\n \"CommunityPhoneNumber\": \"(407) 988-0952\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-windermere/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652903\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{831f2c24-3cd3-4ed5-a9b4-260a32b28edc}?lang=en&ver=22&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652916\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Heathrow luxury apartment homes in Heathrow, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heathrow/slides/cgh29web-use.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"8c626b02-a7d7-4421-9571-e40987a50853\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Reduced Rent on Select Apartment Homes! Terms and conditions may apply.\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"MAA Heathrow Luxury Apartments in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heathrow/slides/maa-heathrow-3.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"19bef0e0-b171-4944-9244-2b5f1e415eab\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": null,\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Grilling Station at MAA Heathrow luxury apartment homes in Heathrow, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heathrow/slides/2_colonial-grand-at-heathrow-pool-grill-1200x525.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"c76dd668-52da-4079-b049-cc3bb4d4d747\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Dine al fresco with poolside grilling stations\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Aerial 2 at MAA Heathrow luxury apartment homes in Heathrow, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heathrow/slides/cgh6web-use.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"3a2017f4-2c84-4559-a29f-88a6bc1c4525\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Amenities for everyone\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Aerial at MAA Heathrow luxury apartment homes in Heathrow, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heathrow/slides/cgh2web-use.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"0ab0a766-7ca6-494c-ac78-e11b82458784\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Beautiful views of Heathrow Golf Course\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Playground at MAA Heathrow luxury apartment homes in Heathrow, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heathrow/slides/cgh25web-use.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"6f9f1911-988f-413a-919f-63d12669c771\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Plenty of playground space for the kids to enjoy\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1683,\r\n \"CommunityMaxPrice\": 5003,\r\n \"CommunityNeighborhood\": \"\",\r\n \"CommunityName\": \"MAA Heathrow\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.7729,\r\n \"Lon\": -81.3664\r\n },\r\n \"CommunityAddress\": \"1122 Greenstone Boulevard
    Heathrow, FL 32746\",\r\n \"CommunityPhoneNumber\": \"(407) 753-1497\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-heathrow/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652916\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{b4dc2d6a-26c6-4a0f-ae34-16fa03d26c16}?lang=en&ver=27&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652913\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Heather Glen luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heather-glen/slides/1_hg-pool.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"fdb6d320-7f24-48b1-b3c8-9904a2a12fd1\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home to MAA Heather Glen\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Heather Glen luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heather-glen/slides/3_hg-grounds.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"b347c69b-f172-4344-b333-1905b64e200b\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Enjoy the beautiful scenery\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pond at MAA Heather Glen luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heather-glen/slides/4_hg-pond.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"4c4222b3-5603-4d12-a0d0-617bb2961a7d\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Lake and pond views just outside your door\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Playground at MAA Heather Glen luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heather-glen/slides/5_hg-playground.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"4cc14b2a-5114-4f9c-8bac-28b1e2c7be3c\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"There's something for everyone\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Clubhouse at MAA Heather Glen luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heather-glen/slides/6_hg-clubhouse.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"a5726f8b-86bb-40cf-b0ea-50f5f52c6956\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"The bright, spacious clubhouse is perfect for gathering with friends\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Business center at MAA Heather Glen luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-heather-glen/slides/7_hg-business-center.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"9b81936f-1974-422c-bcf5-63589899d1c3\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Tackle your to-do's in the business center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1693,\r\n \"CommunityMaxPrice\": 4913,\r\n \"CommunityNeighborhood\": \"Hunters Creek\",\r\n \"CommunityName\": \"MAA Heather Glen\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.3702,\r\n \"Lon\": -81.4313\r\n },\r\n \"CommunityAddress\": \"13184 Heather Moss Drive
    Orlando, FL 32837\",\r\n \"CommunityPhoneNumber\": \"(407) 214-5811\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-heather-glen/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652913\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{d5a03abd-c522-4f39-b215-ca4dc2ef6cb2}?lang=en&ver=27&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652920\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Clubhouse Exterior at MAA Lake Nona luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-nona/slides/1_ln-9_clubhouse-ext.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"3e839e87-0b63-4894-9836-a844710ffb43\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"For limited time, $99 application fees and waived processing fees with approved credit. Terms and conditions apply.\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Grounds at MAA Lake Nona luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-nona/slides/2_ln-21_drone-view.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"34052f59-8bc1-4f0c-b898-d1eb6c60530c\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Lush green grounds with plenty of amenities\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"MAA Lake Nona luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-nona/slides/3_ln-1_drone-view-2.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"3e0fbf04-e316-475f-b077-3e7d9191c35a\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Serene lakeside views\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Building exterior at MAA Lake Nona luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-nona/slides/4_ln-12_building-ext.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"05e86d40-8c22-486b-a53b-e88e847a8252\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Well-kept buildings and grounds\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Lake Nona luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-nona/slides/5_ln-14_pool.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"7adee3bb-f006-4a24-8f8f-e9a30e20118e\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Take a dip in the sparkling pool\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool deck at MAA Lake Nona luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-nona/slides/6_ln-4_pool-deck.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"acdfc7ac-dffa-4d00-b9d9-199ad1eff8c3\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Relax and unwind poolside\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1730,\r\n \"CommunityMaxPrice\": 5208,\r\n \"CommunityNeighborhood\": \"Lake Nona|Medical City\",\r\n \"CommunityName\": \"MAA Lake Nona\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.4131,\r\n \"Lon\": -81.2389\r\n },\r\n \"CommunityAddress\": \"10203 Falcon Parc Blvd
    Orlando, FL 32832\",\r\n \"CommunityPhoneNumber\": \"(407) 449-7149\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-lake-nona/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652920\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{e00f3744-19f4-430f-acb4-054eb656109d}?lang=en&ver=25&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652914\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Exterior MAA Town Park luxury apartment homes in Lake Mary, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park/slides/2020/tp-1-edit.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"45fb965e-5c75-48f0-9903-bb1338702e07\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home to MAA Town Park\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"MAA Town Park Luxury Apartments in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park/slides/2022/maa-town-park-1.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"4dc3e5f8-d852-4c42-9759-87d0a6149757\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": null,\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Town Park luxury apartment homes in Lake Mary, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park/slides/2020/tp-5-edit.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"447f36a3-f61e-4c12-9b2a-a18e9458bbe5\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Beautifully landscaped grounds\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Fitness at MAA Town Park Reserve luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/6cgtownpark_fitness-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"b0bc8e63-e2e1-472e-be3c-2bfabc6897f3\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Yoga studio\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Lounge at MAA Town Park Reserve luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/5cgtownpark_lounge-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"5e3a504b-bc52-4282-ab0b-005c6bdb34c7\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Serene outdoor areas \",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Tennis at MAA Town Park luxury apartment homes in Lake Mary, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-town-park/slides/2020/tp-7.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"c7257705-422c-48d5-bbf6-09997f1737a1\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Tennis court\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1748,\r\n \"CommunityMaxPrice\": 4153,\r\n \"CommunityNeighborhood\": \"\",\r\n \"CommunityName\": \"MAA Town Park\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.79164,\r\n \"Lon\": -81.36055\r\n },\r\n \"CommunityAddress\": \"1050 Colonial Grand Lane
    Lake Mary, FL 32746\",\r\n \"CommunityPhoneNumber\": \"(407) 456-7930\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-town-park/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652914\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{878a0e6e-bca4-423d-b58e-b961fa674337}?lang=en&ver=27&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"611810\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Crosswater luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-crosswater/slides/1postlakeside_pool3-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"d1021a2a-b6c5-403c-b88f-4e9e8451e095\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"$1000 Off Select Two Bedroom Units and $99 Application Fee Special When You Look and Lease on the Same Day. Certain exclusions may apply.\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool 4 at MAA Crosswater luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-crosswater/slides/1postlakeside_pool4-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"a9e4bd8f-0392-4773-9513-6b25fead4c5a\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Beautiful views\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Outdoor Seating at MAA Crosswater luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-crosswater/slides/2postlakeside_outdoorseating-sand-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"9f45e726-1625-4cfa-925d-abd25f4cfd12\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Lounge in the sun\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Outdoor Seating at MAA Crosswater luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-crosswater/slides/2postlakesideoutdoorseating2min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"040473ec-7525-4fb5-9bb1-c2405f6eca3b\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Comfortable outdoor seating\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Grill at MAA Crosswater luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-crosswater/slides/3postlakeside_grill-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"8e88980d-219d-4c09-8a09-868b8b26efc1\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Grilling areas\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Exterior at MAA Crosswater luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-crosswater/slides/4postlakeside_exterior-min.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"e00a7c3e-b78a-4b8a-b702-a1b88edc23a2\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1760,\r\n \"CommunityMaxPrice\": 5180,\r\n \"CommunityNeighborhood\": \"\",\r\n \"CommunityName\": \"MAA Crosswater\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.4483,\r\n \"Lon\": -81.562\r\n },\r\n \"CommunityAddress\": \"7826 Crosswater Trail
    Windermere, FL 34786\",\r\n \"CommunityPhoneNumber\": \"(407) 214-5799\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-crosswater/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/611810\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{413fa171-b572-4cd9-a32a-06a330f071c7}?lang=en&ver=32&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"611808\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Grounds at MAA Baldwin Park luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-baldwin-park/slides/2021/1-bp-grounds.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"19670c71-9c5e-4d0d-af7d-1268e5e45cf2\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home to MAA Baldwin Park\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Baldwin Park luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-baldwin-park/slides/2021/2-bp-pool.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"672b700c-a71a-49a9-8f8f-8bccd698c212\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Take in the gorgeous surroundings by the pool\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Lake view terrace at MAA Baldwin Park luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-baldwin-park/slides/2021/3-bp-lake-view.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"e5157498-bf05-4d91-b099-f0ee1a081033\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Enjoy lake views on the terrace\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Lakeside fountain at MAA Baldwin Park luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-baldwin-park/slides/2021/4-bp-fountain.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"3309d3b4-a0d9-4115-a85b-ef8983d56331\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Catch the sunset by the bubbling fountain\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Fitness center at MAA Baldwin Park luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-baldwin-park/slides/2021/5-bp-fitness.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"2d71259c-f1e3-4480-99bd-411d32e11e1f\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Reach your goals in the fitness center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Yoga and TRX studio at MAA Baldwin Park luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-baldwin-park/slides/2021/6-bp-fitness-studio.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"70301ccf-cc1a-4c5d-96e3-7902693c465a\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Make wellness a priority in the yoga and TRX studio\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1779,\r\n \"CommunityMaxPrice\": 4645,\r\n \"CommunityNeighborhood\": \"Baldwin Park\",\r\n \"CommunityName\": \"MAA Baldwin Park\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.5646,\r\n \"Lon\": -81.3292\r\n },\r\n \"CommunityAddress\": \"4688 New Broad Street
    Orlando, FL 32814\",\r\n \"CommunityPhoneNumber\": \"(866) 282-6645\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-baldwin-park/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/611808\",\r\n \"IsSaved\": false\r\n },\r\n {\r\n \"UniqueId\": \"sitecore://web/{de10bfd4-ec18-4680-b2fa-96d9a2cd20ea}?lang=en&ver=29&ndx=sitecore_web_index\",\r\n \"CommunityId\": \"652917\",\r\n \"CommunityImages\": [\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Pool at MAA Lake Mary luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-mary/slides/1_lm-7_pool.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"1e91d83c-24ed-43af-ab12-d97294d28aed\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Welcome home to MAA Lake Mary\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Signage at MAA Lake Mary luxury apartment homes in Lake Mary, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-mary/slides/signage-2022/maa-lake-mary.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"3fcd481b-1adb-4650-b853-abc199217992\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Visit us in the beautiful leasing office\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Business center at MAA Lake Mary luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-mary/slides/4_lm-17_business-center.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"569d2b68-449c-4104-b5e2-29acd89c1a18\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Well-equipped business center to help your productivity\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Fitness center at MAA Lake Mary luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-mary/slides/5_lm-20_fitness.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"1d351f01-a17e-4ee0-8485-3b768fbd9217\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Focus on wellness in the fitness center\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Kitchen at MAA Lake Mary luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-mary/slides/6_lm-14_kitchen.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"7676479f-ba9a-4081-a021-386f40f57c93\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Spacious kitchens with room to entertain\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n },\r\n {\r\n \"Image\": {\r\n \"Alt\": \"Living room at MAA Lake Mary luxury apartment homes in Orlando, FL\",\r\n \"Border\": null,\r\n \"Class\": null,\r\n \"Height\": 0,\r\n \"HSpace\": 0,\r\n \"Src\": \"/-/media/images/properties/florida/orlando/maa-lake-mary/slides/7_lm-23_living.jpg\",\r\n \"VSpace\": 0,\r\n \"Width\": 0,\r\n \"MediaId\": \"34ecbd0f-3bba-4d64-9bf3-6802de62b921\",\r\n \"Title\": null,\r\n \"Language\": null,\r\n \"MediaExists\": false\r\n },\r\n \"Description\": \"Open spaces with natural light\",\r\n \"Id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"Version\": 0,\r\n \"Language\": null,\r\n \"Name\": null,\r\n \"ContentPath\": null,\r\n \"FullPath\": null,\r\n \"Url\": null,\r\n \"DisplayName\": null,\r\n \"TemplateName\": null,\r\n \"TemplateId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"RendererId\": null\r\n }\r\n ],\r\n \"CommunityUnitTypes\": [\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"CommunityMinPrice\": 1783,\r\n \"CommunityMaxPrice\": 4153,\r\n \"CommunityNeighborhood\": \"\",\r\n \"CommunityName\": \"MAA Lake Mary\",\r\n \"CommunityCoordinate\": {\r\n \"Lat\": 28.7818,\r\n \"Lon\": -81.3597\r\n },\r\n \"CommunityAddress\": \"225 Sunlight Lane
    Lake Mary, FL 32746\",\r\n \"CommunityPhoneNumber\": \"(407) 759-7524\",\r\n \"CommunitySpecial\": null,\r\n \"CommunityPageUrl\": \"/florida/orlando/maa-lake-mary/\",\r\n \"AddToCompareUrl\": \"/maa-api/compare/v1/652917\",\r\n \"IsSaved\": false\r\n }\r\n ]\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/api/community.js","import { isLocalhost } from '../modules/utilities';\r\n\r\nconst GET_SAVED_ITEMS_URL = '/maa-api/saveditems/v1/list';\r\nconst SAVED_ITEMS_COMMUNITIES_URL = '/maa-api/saveditems/v1/communities';\r\nconst SAVED_ITEMS_FLOORPLANS_URL = '/maa-api/saveditems/v1/floorplans';\r\n\r\nconst savedItems = {\r\n \"communities\": [\r\n {\r\n \"Id\": \"652922\",\r\n \"PropertyName\": \"MAA Midtown Piedmont Park\",\r\n \"Neighborhood\": \"Midtown\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"Price\": 0.0,\r\n \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": true,\r\n \"IsCompare\": true,\r\n },\r\n {\r\n \"Id\": \"002\",\r\n \"PropertyName\": \"MAA Pleasant Hill\",\r\n \"Neighborhood\": \"Duluth\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"Price\": 0.0,\r\n \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n },\r\n {\r\n \"Id\": \"003\",\r\n \"PropertyName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"Price\": 0.0,\r\n \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n },\r\n {\r\n \"Id\": \"004\",\r\n \"PropertyName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"Price\": 0.0,\r\n \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": true,\r\n \"IsCompare\": false,\r\n },\r\n {\r\n \"Id\": \"005\",\r\n \"PropertyName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"Price\": 0.0,\r\n \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n },\r\n {\r\n \"Id\": \"006\",\r\n \"PropertyName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"Price\": 0.0,\r\n \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n },\r\n // {\r\n // \"Id\": \"009\",\r\n // \"PropertyName\": \"MAA River Oaks\",\r\n // \"Neighborhood\": \"Pleasant Hill\",\r\n // \"Image\": \"-/media/images/properties/georgia/atlanta/maa-river-oaks/slides/2020/ro-16.jpg\",\r\n // \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n // \"Price\": 0.0,\r\n // \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n // \"IsRecent\": true,\r\n // \"IsSaved\": false,\r\n // \"IsCompare\": false,\r\n // },\r\n // {\r\n // \"Id\": \"010\",\r\n // \"PropertyName\": \"MAA Jollyville\",\r\n // \"Neighborhood\": \"Jollyville\",\r\n // \"Image\": \"-/media/images/properties/texas/austin/maa-quarry-oaks/slides/2022/1-front-pool.jpg\",\r\n // \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n // \"Price\": 0.0,\r\n // \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n // \"IsRecent\": false,\r\n // \"IsSaved\": true,\r\n // \"IsCompare\": true,\r\n // },\r\n // {\r\n // \"Id\": \"011\",\r\n // \"PropertyName\": \"MAA Briarcliff\",\r\n // \"Neighborhood\": \"Downtown\",\r\n // \"Image\": \"-/media/images/properties/georgia/atlanta/maa-briarcliff/slides/16-post-briarcliff_model-living-1200x525.jpg\",\r\n // \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n // \"Price\": 0.0,\r\n // \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n // \"IsRecent\": false,\r\n // \"IsSaved\": true,\r\n // \"IsCompare\": false,\r\n // },\r\n // {\r\n // \"Id\": \"012\",\r\n // \"PropertyName\": \"MAA Glen\",\r\n // \"Neighborhood\": \"Downtown\",\r\n // \"Image\": \"-/media/images/properties/georgia/atlanta/maa-glen/slides/2022-repositioning/mg-2.jpg\",\r\n // \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n // \"Price\": 0.0,\r\n // \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n // \"IsRecent\": false,\r\n // \"IsSaved\": true,\r\n // \"IsCompare\": false,\r\n // },\r\n // {\r\n // \"Id\": \"013\",\r\n // \"PropertyName\": \"MAA Midtown\",\r\n // \"Neighborhood\": \"Downtown\",\r\n // \"Image\": \"-/media/images/properties/georgia/atlanta/maa-midtown/slides/2021/maa-midtown-pool.jpg\",\r\n // \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n // \"Price\": 0.0,\r\n // \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n // \"IsRecent\": false,\r\n // \"IsSaved\": true,\r\n // \"IsCompare\": false,\r\n // },\r\n // {\r\n // \"Id\": \"014\",\r\n // \"PropertyName\": \"MAA Quarry Oaks\",\r\n // \"Neighborhood\": \"Jollyville\",\r\n // \"Image\": \"-/media/images/properties/texas/austin/maa-quarry-oaks/slides/2022/1-front-pool.jpg\",\r\n // \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n // \"Price\": 0.0,\r\n // \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n // \"IsRecent\": true,\r\n // \"IsSaved\": true,\r\n // \"IsCompare\": true,\r\n // },\r\n // {\r\n // \"Id\": \"015\",\r\n // \"PropertyName\": \"MAA Centennial Park\",\r\n // \"Neighborhood\": \"Downtown\",\r\n // \"Image\": \"-/media/images/design-stock-images/home-page/our-difference-module/mmp_maa_outdoor_grill_0094_a.jpg\",\r\n // \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n // \"Price\": 0.0,\r\n // \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n // \"IsRecent\": false,\r\n // \"IsSaved\": false,\r\n // \"IsCompare\": true,\r\n // },\r\n ],\r\n \"floorplans\": [\r\n {\r\n \"Id\": \"f006\",\r\n \"FloorplanName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"LeasingInfoUrl\": \"/pages/leasing-terms.html\",\r\n \"Price\": 4440.0,\r\n \"MoveInDate\": \"2023-07-03T00:00:00Z\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n UnitType: \"1bed\",\r\n \"PropertyMapLink\": \"https://sightmap.com/share/rkwnok2zvd2?unit_id=1230544\",\r\n Phone: '(803) 592-3653',\r\n },\r\n {\r\n \"Id\": \"f002\",\r\n \"FloorplanName\": \"MAA Pleasant Hill\",\r\n \"Neighborhood\": \"Duluth\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"LeasingInfoUrl\": \"/pages/leasing-terms.html\",\r\n \"Price\": 5660.0,\r\n \"MoveInDate\": \"2023-01-03T00:00:00Z\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n UnitType: \"3bed\",\r\n \"PropertyMapLink\": \"https://sightmap.com/share/rkwnok2zvd2?unit_id=1230544\",\r\n Phone: '(803) 592-3653',\r\n },\r\n {\r\n \"Id\": \"f003\",\r\n \"FloorplanName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"LeasingInfoUrl\": \"/pages/leasing-terms.html\",\r\n \"Price\": 2340.0,\r\n \"MoveInDate\": \"2023-07-07T00:00:00Z\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n UnitType: \"Studio\",\r\n \"PropertyMapLink\": \"https://sightmap.com/share/rkwnok2zvd2?unit_id=1230544\",\r\n Phone: '(803) 592-3653',\r\n },\r\n {\r\n \"Id\": \"f004\",\r\n \"FloorplanName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"LeasingInfoUrl\": \"/pages/leasing-terms.html\",\r\n \"Price\": 2110.0,\r\n \"MoveInDate\": \"2023-17-03T00:00:00Z\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": true,\r\n \"IsCompare\": false,\r\n UnitType: \"2bed\",\r\n \"PropertyMapLink\": \"https://sightmap.com/share/rkwnok2zvd2?unit_id=1230544\",\r\n Phone: '(803) 592-3653',\r\n },\r\n {\r\n \"Id\": \"f005\",\r\n \"FloorplanName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"LeasingInfoUrl\": \"/pages/leasing-terms.html\",\r\n \"Price\": 1900.0,\r\n \"MoveInDate\": \"2023-07-03T00:00:00Z\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n UnitType: \"1bed\",\r\n \"PropertyMapLink\": \"https://sightmap.com/share/rkwnok2zvd2?unit_id=1230544\",\r\n Phone: '(803) 592-3653',\r\n },\r\n ],\r\n \"compare\": [\r\n {\r\n \"Id\": \"006\",\r\n \"PropertyName\": \"MAA Shiloh\",\r\n \"Neighborhood\": \"Kennesaw\",\r\n \"Image\": \"/assets/img/neighborhoods-preview.png\",\r\n \"Url\": \"/texas/austin/maa-quarry-oaks/\",\r\n \"Price\": 0.0,\r\n \"MoveInDate\": \"0001-01-01T00:00:00\",\r\n \"IsRecent\": true,\r\n \"IsSaved\": false,\r\n \"IsCompare\": false,\r\n Phone: '(803) 592-3653',\r\n }\r\n ],\r\n}\r\n\r\nexport const getAllSavedItems = async () => {\r\n if (isLocalhost()) {\r\n return savedItems;\r\n }\r\n return fetch(GET_SAVED_ITEMS_URL)\r\n .then(response => response.json())\r\n .then(response => {\r\n console.log(response);\r\n if (response.success != true) {\r\n console.error('API error occurred');\r\n return {};\r\n }\r\n return {\r\n communities: response.communities,\r\n floorplans: response.floorplans,\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n return {};\r\n });\r\n}\r\n\r\nexport const removeCommunity = async (id) => {\r\n return fetch(SAVED_ITEMS_COMMUNITIES_URL + id, {\r\n method: 'DELETE',\r\n })\r\n .then(response => response.json())\r\n .then((response) => {\r\n console.log(response);\r\n if (response.success != true) {\r\n return console.error('API error occurred');\r\n }\r\n const customEvent = new CustomEvent('communitiesUpdated', { bubbles: true });\r\n document.dispatchEvent(customEvent);\r\n })\r\n .catch(console.error);\r\n}\r\n\r\nexport const removeFloorplan = async (id) => {\r\n return fetch(SAVED_ITEMS_FLOORPLANS_URL + id, {\r\n method: 'DELETE',\r\n })\r\n .then(response => response.json())\r\n .then((response) => {\r\n console.log(response);\r\n if (response.success != true) {\r\n return console.error('API error occurred');\r\n }\r\n const customEvent = new CustomEvent('floorplansUpdated', { bubbles: true });\r\n document.dispatchEvent(customEvent);\r\n })\r\n .catch(console.error);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/api/saved-items.js","window.recaptchaIds = {};\r\n\r\nexport const loadRecaptcha = (id = '') => {\r\n console.log('loadRecaptcha');\r\n const recap_loaded = document.querySelector('script[src^=\"https://www.google.com/recaptcha/api.js\"]');\r\n\r\n if(!recap_loaded) {\r\n const head = document.getElementsByTagName('head')[0];\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = 'https://www.google.com/recaptcha/api.js?onload=reCaptchaLoad&render=explicit';\r\n head.appendChild(script);\r\n }\r\n\r\n window.reCaptchaLoad = () => {\r\n const recaptchas = document.querySelectorAll('.g-recaptcha');\r\n recaptchas.forEach((elem, index) => {\r\n const reid = elem.getAttribute('data-reid');\r\n if (elem.dataset.sitekey && reid) {\r\n recaptchaIds[reid] = grecaptcha.render(elem, {\r\n 'sitekey': elem.dataset.sitekey,\r\n 'callback': (e) => onReCaptchaSuccess(id, e),\r\n 'expired-callback': (e) => onExpiredCallback(id),\r\n });\r\n }\r\n });\r\n };\r\n\r\n window.onExpiredCallback = (id) => {\r\n document.dispatchEvent(new CustomEvent('g-captcha-expired', {\r\n bubbles: true,\r\n detail: {\r\n id,\r\n }\r\n }));\r\n }\r\n\r\n window.onReCaptchaSuccess = (id, e) => {\r\n document.dispatchEvent(new CustomEvent('g-captcha', {\r\n bubbles: true,\r\n detail: {\r\n id,\r\n captchaKey: e,\r\n }\r\n }));\r\n };\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/load_recaptcha.js","const leaseIframeContainerId = 'lease-term-iframe-container';\r\nexport const openLeaseTerm = (e) => {\r\n e.preventDefault();\r\n if (e.target.dataset.iframeUrl) {\r\n createIframe(e.target.dataset.iframeUrl);\r\n }\r\n}\r\n\r\nconst createIframe = (url) => {\r\n if (url) {\r\n const leaseIframeContainer = document.createElement('div');\r\n leaseIframeContainer.setAttribute('id', leaseIframeContainerId);\r\n const iframe = document.createElement('iframe');\r\n iframe.src = url;\r\n const divLoader = document.createElement('div');\r\n iframe.addEventListener('load', (e) => {\r\n divLoader.remove();\r\n });\r\n divLoader.classList.add('loader');\r\n divLoader.classList.add('active');\r\n divLoader.appendChild(document.createElement('span'));\r\n divLoader.appendChild(document.createElement('span'));\r\n divLoader.appendChild(document.createElement('span'));\r\n leaseIframeContainer.appendChild(divLoader);\r\n leaseIframeContainer.appendChild(iframe);\r\n leaseIframeContainer.classList.add('show');\r\n document.body.appendChild(leaseIframeContainer);\r\n document.body.style.overflow = 'hidden';\r\n window.addEventListener('message', onCloseLeaseTermsListener);\r\n }\r\n}\r\n\r\nconst onCloseLeaseTermsListener = (e) => {\r\n if (e.data && e.data.includes && e.data.includes('lease-term-modal')) {\r\n const leaseIframeContainer = document.getElementById(leaseIframeContainerId);\r\n if (leaseIframeContainer) {\r\n document.body.style.overflow = 'auto';\r\n leaseIframeContainer.remove();\r\n window.removeEventListener('message', onCloseLeaseTermsListener);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/lease-term.js","import { initAppointment } from '../../templates/components/schedule-appointment/schedule-appointment';\r\n\r\nlet tourYourWayArray;\r\nlet askAQuestionArray;\r\n\r\nexport const handQueryParams = () => {\r\n const searchParams = new URLSearchParams(window.location.search);\r\n const perqQueryParam = searchParams.get('prop_exp');\r\n if (PERQHub && perqQueryParam) {\r\n const typeKeysMap = new Map(\r\n Object.keys(PERQHub.experience.type).map((key) => [key.toLowerCase(), key])\r\n );\r\n if (typeKeysMap.has(perqQueryParam.toLowerCase())) {\r\n PERQHub.experience.launch(PERQHub.experience.type[typeKeysMap.get(perqQueryParam.toLowerCase())]);\r\n }\r\n }\r\n}\r\n\r\nexport const initPerqButtonsHandler = (el) => {\r\n console.log('initPerqButtonsHandler');\r\n if (el) {\r\n tourYourWayArray = el.querySelectorAll('#tour-your-way');\r\n askAQuestionArray = el.querySelectorAll('#ask-a-question');\r\n tourYourWayArray.forEach((btn) => {\r\n btn.addEventListener('click', initAppointment);\r\n });\r\n }\r\n}\r\n\r\nconst isPERQAvailable = () => {\r\n return typeof PERQHub !== 'undefined';\r\n}\r\n\r\nconst tourYourWayClickHandler = () => {\r\n if (isPERQAvailable()) {\r\n PERQHub.experience.launch(PERQHub.experience.type.Tour);\r\n } else {\r\n initAppointment();\r\n }\r\n}\r\n\r\nconst askAQuestionClickHandler = () => {\r\n if (isPERQAvailable()) {\r\n PERQHub.experience.launch(PERQHub.experience.type.Chat);\r\n }\r\n}\r\nwindow.addEventListener('PERQHubReady', function () {\r\n if (tourYourWayArray && tourYourWayArray.length > 0) {\r\n tourYourWayArray.forEach((btn) => {\r\n btn.removeEventListener('click', initAppointment);\r\n btn.addEventListener('click', tourYourWayClickHandler);\r\n btn.disabled = false;\r\n if (btn.classList.contains('dynamic')) {\r\n const inPageNav = document.querySelector('.inpage-nav');\r\n if (inPageNav) {\r\n const tourYourWayDynamic = inPageNav.querySelector('#tour-your-way');\r\n if (tourYourWayDynamic) {\r\n tourYourWayDynamic.disabled = false;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n if (askAQuestionArray && askAQuestionArray.length > 0) {\r\n askAQuestionArray.forEach((btn) => {\r\n btn.addEventListener('click', askAQuestionClickHandler);\r\n btn.disabled = false;\r\n if (btn.classList.contains('dynamic')) {\r\n const inPageNav = document.querySelector('.inpage-nav');\r\n if (inPageNav) {\r\n const askAQuestionDynamic = inPageNav.querySelector('#ask-a-question');\r\n if (askAQuestionDynamic) {\r\n askAQuestionDynamic.disabled = false;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n handQueryParams();\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/perq-controller.js","import { closeModalGlobal, openModalGlobal } from '../../../js/components/modal';\r\nimport { isLocalhost, isMobile } from \"../../../js/modules/utilities\";\r\nimport { loadRecaptcha } from '../../../js/components/load_recaptcha'\r\n\r\nconst queryString = window.location.search;\r\nconst urlParams = new URLSearchParams(queryString);\r\nconst scheduleRecaptchaId = 'schedule-appointment';\r\n\r\nconst modalContent = document.querySelector('.schedule-appointment');\r\nconst appt = document.querySelector('.schedule-appointment');\r\nconst next = document.querySelector('.appointment_request.next');\r\nconst prev = document.querySelector('.previous');\r\nconst submit = document.querySelector('button.submit');\r\nconst done = document.querySelector('button.done');\r\nconst dropitems = document.querySelectorAll('.date-sort__cta');\r\nconst dropLists = document.querySelectorAll('.date-sort__list');\r\nconst monthSelect = document.querySelectorAll('#month-options > button');\r\nconst step1 = document.querySelector('.schedule-appointment__container.step-1');\r\nconst step2 = document.querySelector('.schedule-appointment__container.step-2');\r\nconst step3 = document.querySelector('.schedule-appointment__confirmation');\r\nconst step1span = document.querySelectorAll('span.step-1');\r\nconst step2span = document.querySelectorAll('span.step-2');\r\nconst tourType = document.querySelectorAll('.infoButton');\r\nconst timeList = document.querySelector('.time-selector');\r\nconst weekNext = document.querySelector('.week-btn.next');\r\nconst weekPrev = document.querySelector('.week-btn.prev');\r\nconst dayNext = document.querySelector('.date-control.next');\r\nconst dayPrev = document.querySelector('.date-control.prev');\r\nconst dateDisplay = document.querySelector('.day .info');\r\nconst contactInputs = document.querySelectorAll('.maa-input');\r\n\r\nlet propertyId, propertyTitle, bedData, propertyBeds;\r\n\r\nif(modalContent){\r\n propertyId = modalContent.getAttribute('data-propertyid');\r\n propertyTitle = modalContent.getAttribute('data-propertyname');\r\n bedData = modalContent.getAttribute('data-bedrooms');\r\n propertyBeds = bedData.length > 0 ? bedData.split(\",\") : [];\r\n}\r\nconst confTitleText = \"We have received your info\";\r\nconst confResponseText = \"Thank you for your interest in scheduling a tour with us! Our leasing team will be in touch with you regarding a confirmed tour date and time. We look forward to welcoming you to our community!\";\r\nconst errTitleText = \"Uh oh! Something went wrong.\";\r\n\r\n//const timesUrl = '/assets/data/times.json';\r\nconst timesUrl = location.hostname == 'localhost' ? '/assets/data/times.json' : '/api/boardingpass/getavailableslots';\r\nconst boardingPassEndpoint = location.hostname == 'localhost' ? '/assets/data/boarding-pass.json' : '/api/boardingpass';\r\nconst boardingPassUrl = \"/boarding-pass\";\r\nconst boardingPassMethod = location.hostname == 'localhost' ? 'GET' : 'POST';\r\n\r\nconst formFields = ['first_name','last_name','email_address','phone_number'];\r\nconst MODAL_UNIQUE_ID = 'schedule-appointment';\r\n\r\nlet timeGroupSlides, timeGroupIndex, selectedDate, selectedTime, confBoardingPassUrl;\r\n\r\nlet step1Values = {\r\n tour_type: false,\r\n first_name: false,\r\n last_name: false,\r\n email_address: false,\r\n phone_number: false,\r\n tour_time: false,\r\n};\r\n\r\nlet step2Values = {\r\n bedrooms: false,\r\n moving_month: false,\r\n moving_day: false,\r\n moving_year: false,\r\n captchaResponse: false\r\n};\r\n\r\ndocument.addEventListener('setRecaptcha', ((e) => {\r\n step2Values.captchaResponse = e.detail.recaptcha;\r\n}));\r\n\r\nconst handleTimeSelect = (e) => {\r\n timeGroupSlides.forEach((slide) => {\r\n const timeBtns = slide.querySelectorAll('button.p1');\r\n timeBtns.forEach((btn) => {\r\n if(btn != e.currentTarget){\r\n btn.classList.remove('active');\r\n } else {\r\n btn.classList.add('active');\r\n selectedDate = btn.getAttribute('data-date');\r\n selectedTime = btn.getAttribute('data-time');\r\n }\r\n })\r\n document.querySelector('.week-selector').classList.remove('error');\r\n })\r\n\r\n step1Values.tour_time = { date: selectedDate, time: selectedTime};\r\n}\r\n\r\nconst resetForm = () => {\r\n step1.classList.remove('active');\r\n step2.classList.remove('active');\r\n step3.classList.remove('active');\r\n step1span.forEach((item) => {\r\n item.classList.add('active');\r\n })\r\n step2span.forEach((item) => {\r\n item.classList.remove('active');\r\n })\r\n tourType.forEach((item) => {\r\n item.classList.remove('buttonSchedTourACTIVE');\r\n item.classList.add('buttonSchedTourINACTIVE');\r\n })\r\n next.classList.add('active');\r\n prev.classList.remove('active');\r\n submit.classList.remove('active');\r\n done.classList.remove('active');\r\n}\r\n\r\nconst setDays = () => {\r\n document.getElementById('moving_day').classList.remove('valid');\r\n const dayOptions = document.getElementById(\"day-options\");\r\n const dayOptionsMobile = document.getElementById(\"moving_day_mobile\");\r\n dayOptions.innerHTML = \"\";\r\n dayOptionsMobile.innerHTML = \"\";\r\n\r\n let setMonth;\r\n\r\n if(isMobile){\r\n const monthSel = document.getElementById('moving_month_mobile');\r\n setMonth = monthSel.options[monthSel.selectedIndex].innerText;\r\n } else {\r\n //document.getElementById('moving_day').innerText = \"Day\";\r\n setMonth = document.getElementById('moving_month').innerText;\r\n }\r\n\r\n // BUILD DAYS\r\n const today = new Date();\r\n let setYear = today.getFullYear();\r\n\r\n if(isMobile){\r\n setYear = document.getElementById('moving_year_mobile').value;\r\n if(setYear == 0) setYear = today.getFullYear();\r\n } else {\r\n if(document.getElementById('moving_year').innerText != \"Year\") setYear = document.getElementById('moving_year').innerText;\r\n }\r\n\r\n const monthPtr = new Date(`${setMonth} 1, ${setYear}`);\r\n const lastDoM = new Date(monthPtr.getFullYear(), monthPtr.getMonth() + 1, 0);\r\n\r\n dayOptionsMobile.appendChild(createButtonMobile(\"Day\",0));\r\n\r\n for (let index = 1; index <= lastDoM.getDate(); index++) {\r\n dayOptions.appendChild(createButton(index, handleDropSelectDay));\r\n dayOptionsMobile.appendChild(createButtonMobile(index, index));\r\n }\r\n\r\n const checkDate = new Date(`${step2Values.moving_month} ${step2Values.moving_day}, ${step2Values.moving_year}`);\r\n if(checkDate.getDate() != step2Values.moving_day || !step2Values.moving_day) {\r\n if(isMobile){\r\n dayOptionsMobile.value = 0;\r\n } else {\r\n document.getElementById('moving_day').innerText = \"Day\";\r\n }\r\n step2Values.moving_day = false;\r\n } else {\r\n if(isMobile){\r\n dayOptionsMobile.value = step2Values.moving_day;\r\n } else {\r\n document.getElementById('moving_day').classList.add('valid');\r\n }\r\n }\r\n}\r\n\r\nconst handleDropSelectDay = (e) => {\r\n if(isMobile){\r\n step2Values.moving_day = document.getElementById('moving_day_mobile').value;\r\n } else {\r\n step2Values.moving_day = e.currentTarget.querySelector('.date-sort__list-cta').innerText;\r\n e.currentTarget.closest('.date-sort').querySelector('.date-sort__cta-text').innerText = step2Values.moving_day;\r\n e.currentTarget.closest('.date-sort').querySelector('.date-sort__cta-text').classList.add('valid');\r\n e.currentTarget.closest('.date-sort__list').classList.remove('active');\r\n }\r\n}\r\n\r\nconst handleYearSelect = (e) => {\r\n if(isMobile){\r\n step2Values.moving_year = document.getElementById('moving_year_mobile').value;\r\n } else {\r\n step2Values.moving_year = e.currentTarget.querySelector('.date-sort__list-cta').innerText;\r\n e.currentTarget.closest('.date-sort').querySelector('.date-sort__cta-text').innerText = step2Values.moving_year;\r\n e.currentTarget.closest('.date-sort').querySelector('.date-sort__cta-text').classList.add('valid');\r\n e.currentTarget.closest('.date-sort__list').classList.remove('active');\r\n }\r\n\r\n setDays();\r\n}\r\n\r\nexport const initAppointment = (e) => {\r\n resetForm();\r\n closeModalGlobal();\r\n openModalGlobal(modalContent, '100%', false, MODAL_UNIQUE_ID);\r\n modalContent.classList.add('active');\r\n loadRecaptcha(scheduleRecaptchaId);\r\n\r\n document.addEventListener('g-captcha', (e) => {\r\n if (e.detail.id === scheduleRecaptchaId) {\r\n step2Values.captchaResponse = e.detail.captchaKey;\r\n }\r\n });\r\n\r\n fetch(`${timesUrl}?propertyId=${propertyId}`)\r\n .then(res => res.json())\r\n .then(res => {\r\n if(res.success){\r\n timeList.innerHTML = '';\r\n res.availableSlots.forEach((times, index) => {\r\n const timeGroup = document.createElement('DIV');\r\n timeGroup.classList.add('time-group');\r\n timeGroup.setAttribute('data-date', times.ActualDate);\r\n timeGroup.setAttribute('data-title', times.DateDesc);\r\n if(index == 0) {\r\n timeGroup.classList.add('active');\r\n dateDisplay.innerText = times.DateDesc;\r\n }\r\n\r\n if(times.Hours.length > 0){\r\n times.Hours.forEach((time) => {\r\n const timeItem = document.createElement('DIV');\r\n const timeButton = document.createElement('BUTTON');\r\n timeItem.classList.add('time');\r\n timeButton.classList.add('p1');\r\n timeButton.textContent = time;\r\n timeButton.setAttribute('data-time', time);\r\n timeButton.setAttribute('data-date', times.ActualDate);\r\n timeButton.addEventListener('click', handleTimeSelect);\r\n timeItem.appendChild(timeButton);\r\n timeGroup.appendChild(timeItem)\r\n })\r\n } else {\r\n timeGroup.classList.add('no-times');\r\n }\r\n\r\n timeList.appendChild(timeGroup);\r\n timeGroupIndex = 0;\r\n })\r\n\r\n timeGroupSlides = document.querySelectorAll('.time-group');\r\n } else {\r\n timeList.innerText = \"An error occurred. Please try again later.\";\r\n dateDisplay.innerText = \"Error\";\r\n dayNext.classList.remove('active');\r\n weekNext.classList.remove('active');\r\n next.classList.remove('active');\r\n }\r\n })\r\n .catch(error => {\r\n timeList.innerText = \"A fetch error occurred. Please try again later.\";\r\n dateDisplay.innerText = \"Error\";\r\n dayNext.classList.remove('active');\r\n weekNext.classList.remove('active');\r\n next.classList.remove('active');\r\n });\r\n\r\n document.querySelector('.schedule-appointment__header > h3').innerText = `Request a tour at ${propertyTitle} below`;\r\n const bedList = document.getElementById('bedroom-list');\r\n bedList.innerHTML = \"\";\r\n\r\n const yearOptions = document.getElementById(\"year-options\");\r\n const yearOptionsMobile = document.getElementById(\"moving_year_mobile\");\r\n\r\n yearOptions.innerHTML = \"\";\r\n yearOptionsMobile.innerHTML = \"\";\r\n\r\n const addYear = new Date();\r\n\r\n yearOptionsMobile.appendChild(createButtonMobile('Year', 0));\r\n for (let index = 0; index < 2; index++) {\r\n addYear.setDate(addYear.getDate() + (365 * index));\r\n yearOptions.appendChild(createButton(addYear.getFullYear(), handleYearSelect));\r\n yearOptionsMobile.appendChild(createButtonMobile(addYear.getFullYear(), addYear.getFullYear()));\r\n }\r\n\r\n yearOptionsMobile.addEventListener('change', handleYearSelect);\r\n\r\n propertyBeds.forEach((bed, index) => {\r\n let bedSplit = bed.split(\" \");\r\n const bedItem = document.createElement('LI');\r\n bedItem.classList.add(\"bedroom-filters__option\");\r\n const bedWrapper = document.createElement('DIV');\r\n bedWrapper.classList.add(\"input-wrapper\");\r\n const bedCheckbox = document.createElement('INPUT');\r\n bedCheckbox.setAttribute(\"id\", bed.replace(\" \",\"\"));\r\n bedCheckbox.setAttribute(\"name\", index);\r\n bedCheckbox.setAttribute(\"role\", \"checkbox\");\r\n bedCheckbox.setAttribute(\"type\", \"checkbox\");\r\n bedCheckbox.setAttribute(\"value\", isNaN(bedSplit[0]) ? '0' : bedSplit[0] );\r\n const bedLabel = document.createElement(\"LABEL\");\r\n bedLabel.setAttribute(\"for\", bed.replace(\" \",\"\"));\r\n bedLabel.classList.add(\"checkbox-label\");\r\n bedLabel.innerText = bed;\r\n bedWrapper.appendChild(bedCheckbox);\r\n bedWrapper.appendChild(bedLabel)\r\n bedItem.appendChild(bedWrapper);\r\n bedList.appendChild(bedItem);\r\n })\r\n}\r\n\r\ndocument.querySelectorAll('#day-options button').forEach((item) => {\r\n item.addEventListener('click', handleDropSelectDay);\r\n})\r\n\r\ndocument.querySelectorAll('#moving_day_mobile').forEach((item) => {\r\n item.addEventListener('change', handleDropSelectDay);\r\n})\r\n\r\nconst createButton = (value, callback) => {\r\n const btn = document.createElement('BUTTON');\r\n btn.classList.add(\"date-sort__list-cta-wrapper\");\r\n const btnSpan = document.createElement('SPAN');\r\n btnSpan.classList.add(\"p1\", \"date-sort__list-cta\");\r\n btnSpan.innerText = value;\r\n const btnIcon = document.createElement('I');\r\n btnIcon.setAttribute(\"aria-hidden\",\"true\");\r\n btnIcon.classList.add(\"icon-checkmark\", \"date-sort__list-cta-icon\");\r\n btn.addEventListener('click', callback);\r\n btn.appendChild(btnSpan);\r\n btn.appendChild(btnSpan);\r\n return btn;\r\n}\r\n\r\nconst createButtonMobile = (value, index) => {\r\n const yearMobileOption = document.createElement('OPTION');\r\n yearMobileOption.setAttribute(\"value\", index);\r\n yearMobileOption.innerText = value;\r\n return yearMobileOption;\r\n}\r\n\r\nif(appt){\r\n formFields.forEach((item) => {\r\n let target = document.getElementById(item);\r\n let isComplete = target.value.length > 0;\r\n target.parentElement.classList.toggle('complete', isComplete);\r\n })\r\n\r\n const step1Valid = () => {\r\n let isValid = true;\r\n step1Values.first_name = document.getElementById('first_name').value.length > 0 ? document.getElementById('first_name').value : false;\r\n step1Values.last_name = document.getElementById('last_name').value.length > 0 ? document.getElementById('last_name').value : false;\r\n step1Values.email_address = document.getElementById('email_address').value.length > 0 && validEmail(document.getElementById('email_address').value) ? document.getElementById('email_address').value : false;\r\n step1Values.phone_number = document.getElementById('phone_number').value.length > 0 && validPhone(document.getElementById('phone_number').value) ? document.getElementById('phone_number').value : false;\r\n\r\n Object.keys(step1Values).forEach((key) => {\r\n if(!step1Values[key]){\r\n isValid = false;\r\n if(key != 'tour_type') document.getElementById(key).parentElement.classList.add('error');\r\n } else {\r\n if(key != 'tour_type') document.getElementById(key).parentElement.classList.remove('error');\r\n }\r\n });\r\n\r\n return isValid;\r\n }\r\n\r\n const step2Valid = () => {\r\n let isValid = true, bedrooms = [];\r\n const bedroomsInput = document.querySelectorAll('.schedule-appointment__bedrooms input[type=\"checkbox\"]');\r\n\r\n bedroomsInput.forEach((item) => {\r\n if(item.checked) bedrooms.push(item.value);\r\n });\r\n\r\n step2Values.bedrooms = bedrooms.length > 0 ? bedrooms : false;\r\n\r\n if(isMobile){\r\n step2Values.moving_month = document.getElementById('moving_month_mobile').value != 0 ? document.getElementById('moving_month_mobile').options[document.getElementById('moving_month_mobile').selectedIndex].text : false;\r\n step2Values.moving_day = document.getElementById('moving_day_mobile').value != 0 ? document.getElementById('moving_day_mobile').value : false;\r\n step2Values.moving_year = document.getElementById('moving_year_mobile').value != 0 ? document.getElementById('moving_year_mobile').value : false;\r\n } else {\r\n step2Values.moving_month = document.getElementById('moving_month').classList.contains('valid') ? document.getElementById('moving_month').innerText : false;\r\n step2Values.moving_day = document.getElementById('moving_day').classList.contains('valid') ? document.getElementById('moving_day').innerText : false;\r\n step2Values.moving_year = document.getElementById('moving_year').classList.contains('valid') ? document.getElementById('moving_year').innerText : false;\r\n }\r\n\r\n if(!step2Values.bedrooms){\r\n isValid = false;\r\n document.querySelector('.schedule-appointment__bedrooms').classList.add('error');\r\n } else {\r\n document.querySelector('.schedule-appointment__bedrooms').classList.remove('error');\r\n }\r\n\r\n if(!(step2Values.moving_month && step2Values.moving_day && step2Values.moving_year)){\r\n isValid = false;\r\n document.querySelector('.schedule-appointment__moving').classList.add('error');\r\n } else {\r\n const today = new Date();\r\n const movingDate = new Date(`${step2Values.moving_month} ${step2Values.moving_day}, ${step2Values.moving_year} ${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`);\r\n\r\n if(movingDate > today){\r\n document.querySelector('.schedule-appointment__moving').classList.remove('error');\r\n } else {\r\n isValid = false;\r\n document.querySelector('.schedule-appointment__moving').classList.add('error');\r\n }\r\n }\r\n\r\n if(!step2Values.captchaResponse){\r\n isValid = false;\r\n document.getElementById('myCaptcha').classList.add('error');\r\n } else {\r\n document.getElementById('myCaptcha').classList.remove('error');\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n const handleNext = (e) => {\r\n if(step1Valid()){\r\n e.currentTarget.classList.remove('active');\r\n step1.classList.remove('active');\r\n step2.classList.add('active');\r\n document.querySelector('.greeting').innerText = `Hello, ${step1Values.first_name}! You have requested to tour with us on ${step1Values.tour_time.date} at ${step1Values.tour_time.time}.`;\r\n\r\n prev.classList.add('active');\r\n submit.classList.add('active');\r\n step1span.forEach((item) => {\r\n item.classList.remove('active');\r\n })\r\n step2span.forEach((item) => {\r\n item.classList.add('active');\r\n })\r\n document.querySelector('.scroll-container').scrollTo(0,0);\r\n }\r\n }\r\n\r\n next.addEventListener('click', handleNext);\r\n\r\n const handlePrev = (e) => {\r\n prev.classList.remove('active');\r\n step1.classList.add('active');\r\n step2.classList.remove('active');\r\n next.classList.add('active');\r\n submit.classList.remove('active');\r\n step1span.forEach((item) => {\r\n item.classList.add('active');\r\n })\r\n step2span.forEach((item) => {\r\n item.classList.remove('active');\r\n })\r\n const scrollContainer = document.querySelector('.scroll-container');\r\n if(scrollContainer) scrollContainer.scrollTo(0,0);\r\n }\r\n\r\n prev.addEventListener('click', handlePrev);\r\n\r\n const handleSubmit = (e) => {\r\n if(step2Valid()){\r\n let dateParse = Date.parse(step1Values.tour_time.date);\r\n let date = new Date(dateParse);\r\n\r\n const submitDate = addHours(date, step1Values.tour_time.time);\r\n\r\n let formData = {};\r\n formData.PropertyId = propertyId;\r\n formData.FirstName = step1Values.first_name;\r\n formData.LastName = step1Values.last_name;\r\n formData.Email = step1Values.email_address;\r\n formData.Phone = step1Values.phone_number;\r\n formData.TextUpdates = document.getElementById('optin').checked;\r\n\r\n // This should change\r\n formData.VisitTime = submitDate ? submitDate.toISOString() : '';\r\n\r\n formData.selectedDate = date.toISOString();\r\n formData.selectedTime = step1Values.tour_time.time;\r\n formData.getTimezoneOffset = date.getTimezoneOffset();\r\n formData.agent = window.navigator.userAgent;\r\n formData.DNIValue = document.getElementById('DNIValue') ? document.getElementById('DNIValue').value : '';\r\n formData.CaptchaResponse = step2Values.captchaResponse;\r\n formData.tourType = step1Values.tour_type;\r\n formData.UTM = document.getElementById('utm') ? document.getElementById('utm').value : '';\r\n\r\n formData.Bedrooms = step2Values.bedrooms.toString();\r\n formData.Comments = document.querySelector('.schedule-appointment__notes textarea').value > 0 ? document.querySelector('.schedule-appointment__notes textarea').values : '';\r\n\r\n let moveDate = isValidDate({\r\n day: step2Values.moving_day,\r\n month: step2Values.moving_month,\r\n year: step2Values.moving_year\r\n });\r\n\r\n moveDate ? formData.MoveInDate = moveDate.toISOString() : null;\r\n\r\n let fetchOptions;\r\n\r\n if(isLocalhost()) {\r\n fetchOptions = {};\r\n } else {\r\n fetchOptions = {\r\n method: boardingPassMethod,\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(formData)\r\n }\r\n }\r\n\r\n fetch(boardingPassEndpoint, fetchOptions)\r\n .then(function (response) {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n })\r\n .then(function (json) {\r\n const confTitle = document.querySelector('.schedule-confirmation__title');\r\n const confDescription = document.querySelector('.schedule-confirmation__text');\r\n const confLink = document.querySelector('.schedule-confirmation__details');\r\n\r\n if (json && json.success) {\r\n confTitle.innerText = confTitleText;\r\n confDescription.innerText = confResponseText;\r\n confLink.innerText = \"View Tour Details\";\r\n // self.formState = 'success';\r\n json.boardingPassId ? confBoardingPassUrl = `${boardingPassUrl}?boardingpassid=${json.boardingPassId}` : null;\r\n confLink.setAttribute(\"href\", confBoardingPassUrl);\r\n window.uetq = window.uetq || [];\r\n window.uetq.push('event', 'ScheduleAVisit', { 'event_category': 'ScheduleAVisit', 'event_label': 'ScheduleAVisit', 'event_value': '1' });\r\n var metaEventNames = 'Lead, Schedule_MAA';\r\n metaEventNames.split(',').forEach(async (metaEventName) => {\r\n metaEvent(metaEventName);\r\n });\r\n } else {\r\n confTitle.innerText = errTitleText;\r\n confDescription.innerText = json.errResponse;\r\n confLink.style.display = \"none\";\r\n }\r\n\r\n step2.classList.remove('active');\r\n step3.classList.add('active');\r\n submit.classList.remove('active');\r\n done.classList.add('active');\r\n step2span.forEach((item) => {\r\n item.classList.remove('active');\r\n })\r\n prev.classList.remove('active');\r\n document.querySelector('.scroll-container').scrollTo(0,0);\r\n })\r\n }\r\n }\r\n\r\n submit.addEventListener('click', handleSubmit);\r\n done.addEventListener('click', closeModal);\r\n\r\n const handleDropdown = (e) => {\r\n dropLists.forEach((item) => {\r\n item == e.currentTarget.nextElementSibling ? item.classList.toggle('active') : item.classList.remove('active');\r\n })\r\n }\r\n\r\n dropitems.forEach((item) => {\r\n item.addEventListener('click', handleDropdown);\r\n })\r\n\r\n const handleTourType = (e) => {\r\n step1.classList.add('active');\r\n tourType.forEach((item) => {\r\n if(item == e.currentTarget) {\r\n item.classList.add('buttonSchedTourACTIVE');\r\n item.classList.remove('buttonSchedTourINACTIVE');\r\n step1Values.tour_type = item.innerText;\r\n } else {\r\n item.classList.remove('buttonSchedTourACTIVE');\r\n item.classList.add('buttonSchedTourINACTIVE');\r\n }\r\n })\r\n }\r\n\r\n tourType.forEach((item) => {\r\n item.addEventListener('click', handleTourType)\r\n })\r\n\r\n const handleDayNav = (e) => {\r\n document.querySelector('.time-group.active').classList.remove('active');\r\n\r\n if(e.currentTarget.classList.contains('next')){\r\n if(timeGroupIndex < timeGroupSlides.length - 1){\r\n timeGroupIndex++;\r\n dayPrev.classList.add('active');\r\n if(timeGroupIndex >= timeGroupSlides.length - 1) dayNext.classList.remove('active');\r\n } else {\r\n dayPrev.classList.add('active');\r\n }\r\n } else {\r\n if(timeGroupIndex > 0){\r\n timeGroupIndex--;\r\n dayNext.classList.add('active');\r\n if(timeGroupIndex == 0) dayPrev.classList.remove('active');\r\n } else {\r\n dayNext.classList.add('active');\r\n }\r\n }\r\n\r\n timeGroupSlides[timeGroupIndex].classList.add('active');\r\n dateDisplay.innerText = timeGroupSlides[timeGroupIndex].getAttribute('data-title');\r\n }\r\n\r\n dayNext.addEventListener('click', handleDayNav);\r\n dayPrev.addEventListener('click', handleDayNav);\r\n\r\n const handleWeekNav = (e) => {\r\n document.querySelector('.time-group.active').classList.remove('active');\r\n\r\n if(e.currentTarget.classList.contains('next')){\r\n timeGroupIndex = timeGroupSlides.length - 1;\r\n dayNext.classList.remove('active');\r\n weekNext.classList.remove('active');\r\n dayPrev.classList.add('active');\r\n weekPrev.classList.add('active');\r\n } else {\r\n timeGroupIndex = 0;\r\n dayPrev.classList.remove('active');\r\n weekPrev.classList.remove('active');\r\n dayNext.classList.add('active');\r\n weekNext.classList.add('active');\r\n }\r\n\r\n timeGroupSlides[timeGroupIndex].classList.add('active');\r\n dateDisplay.innerText = timeGroupSlides[timeGroupIndex].getAttribute('data-title');\r\n }\r\n\r\n weekNext.addEventListener('click', handleWeekNav);\r\n weekPrev.addEventListener('click', handleWeekNav);\r\n\r\n const handleContactInputs = (e) => {\r\n e.currentTarget.parentElement.classList.toggle('complete', e.currentTarget.value.length > 0);\r\n switch (e.currentTarget.getAttribute('id')) {\r\n case 'email_address':\r\n e.currentTarget.parentElement.classList.toggle('error', !(validEmail(e.currentTarget.value) && e.currentTarget.value.length > 0));\r\n break;\r\n case 'phone_number':\r\n e.currentTarget.parentElement.classList.toggle('error', !(validPhone(e.currentTarget.value) && e.currentTarget.value.length > 0));\r\n break\r\n default:\r\n e.currentTarget.parentElement.classList.toggle('error', !e.currentTarget.value.length > 0);\r\n break;\r\n }\r\n }\r\n\r\n contactInputs.forEach((input) => {\r\n input.addEventListener('blur', handleContactInputs);\r\n })\r\n\r\n const validEmail = (email) => {\r\n return email.match(/^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/);\r\n };\r\n\r\n const validPhone = (phone) => {\r\n return phone.match(/^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/);\r\n }\r\n\r\n const addHours = (date, time) => {\r\n if (!date || !time) {\r\n return;\r\n }\r\n\r\n let hour = 0,\r\n minute = 0,\r\n dayTime = 0;\r\n\r\n dayTime = time.split(' ')[1];\r\n hour = +time.split(' ')[0].split(':')[0];\r\n minute = +time.split(' ')[0].split(':')[1];\r\n\r\n if (dayTime === 'PM') hour += 12;\r\n\r\n date.setHours(hour, minute - date.getTimezoneOffset(), 0);\r\n\r\n return date;\r\n }\r\n\r\n const isValidDate = ({ year, month, day }) => {\r\n if (year && month && day) {\r\n let todayDate = new Date();\r\n let compareDate = new Date(`${month} ${day}, ${year}`); //new Date(year, month - 1, day);\r\n\r\n if (compareDate > todayDate) {\r\n return compareDate;\r\n }\r\n }\r\n }\r\n\r\n const closeModal = () => {\r\n const modalGlobalEl = document.getElementById('global-modal');\r\n const body = document.body;\r\n if (modalGlobalEl) {\r\n modalGlobalEl.style.display = 'none';\r\n body.style.overflow = 'auto';\r\n document.removeEventListener('click', closeModal);\r\n }\r\n if (window.parent && window.parent.postMessage) {\r\n window.parent.postMessage(`close modal with id = global-modal`);\r\n }\r\n }\r\n\r\n done.addEventListener('click', closeModal);\r\n\r\n const getSHA256Hash = async (input) => {\r\n const textAsBuffer = new TextEncoder().encode(input);\r\n const hashBuffer =await window.crypto.subtle.digest('SHA-256', textAsBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n const hash = hashArray\r\n .map((item) => item.toString(16).padStart(2, '0'))\r\n .join('');\r\n return hash;\r\n }\r\n\r\n const getMetaTestCode = async () => {\r\n const response = await fetch('/api/event/getmetatestcode');\r\n const metaTestCode = await response.text();\r\n return metaTestCode;\r\n }\r\n\r\n const TrackMetaEvent = (event, value) => {\r\n // Track Meta Pixel event\r\n if (typeof fbq !== 'undefined') {\r\n fbq('track', event, value.data[0].user_data, { eventID: value.data[0].event_id });\r\n }\r\n\r\n console.log('meta-events event: ' + event);\r\n console.log('meta-events value:');\r\n console.log(value);\r\n //Track Meta Server Event\r\n trackMetaServerEvent(value);\r\n }\r\n\r\n const trackMetaServerEvent = async (eventJson) => {\r\n try {\r\n const response = await fetch('/api/event/trackmetaserverevent', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(eventJson)\r\n });\r\n const data = await response.json();\r\n console.log(data);\r\n return data;\r\n } catch (error) {\r\n console.error('Error:', error);\r\n }\r\n }\r\n\r\n const getCookieValue= (cookieName) => {\r\n var cookieStr = decodeURIComponent(document.cookie);\r\n var cookieArr = cookieStr.split(';');\r\n for (var i = 0; i < cookieArr.length; i++) {\r\n var cookiePair = cookieArr[i].split('=');\r\n var name = cookiePair[0].trim();\r\n if (name === cookieName) {\r\n var value = cookiePair[1];\r\n return value;\r\n }\r\n } return null;\r\n }\r\n\r\n const generateUUID = () => {\r\n let dt = new Date().getTime();\r\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = ((dt + Math.random() * 16) % 16) | 0;\r\n dt = Math.floor(dt / 16);\r\n return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n return uuid;\r\n }\r\n\r\n const getClientIP = async () => {\r\n const response = await fetch('/api/event/getip');\r\n const ip = await response.text();\r\n return ip;\r\n }\r\n\r\n const metaEvent = async (metaEventName) => {\r\n var fbclid = getCookieValue('_fbc');\r\n var fbp = getCookieValue('_fbp');\r\n console.log('fbclid: ' + fbclid + '; fbp: ' + fbp);\r\n let self = this;\r\n\r\n var metaServerEvent = {\r\n 'data': [{\r\n 'event_name': metaEventName,\r\n 'event_time': Math.floor(Date.now() / 1000),\r\n 'action_source': 'website',\r\n 'event_id': generateUUID(),\r\n 'user_data': {\r\n 'client_ip_address':await getClientIP(),\r\n 'client_user_agent': navigator.userAgent\r\n }\r\n }]\r\n };\r\n\r\n var hashedFirstName = step1Values.first_name ? await getSHA256Hash(step1Values.first_name) : null;\r\n var hashedLastName = step1Values.last_name ? await getSHA256Hash(step1Values.last_name) : null;\r\n var hashedEmail = step1Values.email_address ? await getSHA256Hash(step1Values.email_address) : null;\r\n var hashedPhone = step1Values.phone_number ? await getSHA256Hash(step1Values.phone_number) : null;\r\n var testEventCode = await getMetaTestCode();\r\n\r\n if (hashedFirstName !== null) {\r\n metaServerEvent.data[0].user_data.fn = [hashedFirstName];\r\n }\r\n if (hashedLastName !== null) {\r\n metaServerEvent.data[0].user_data.ln = [hashedLastName];\r\n }\r\n if (hashedEmail !== null) {\r\n metaServerEvent.data[0].user_data.em = [hashedEmail];\r\n }\r\n if (hashedPhone !== null) {\r\n metaServerEvent.data[0].user_data.ph = [hashedPhone];\r\n }\r\n if (fbclid !== null) {\r\n metaServerEvent.data[0].user_data.fbc = fbclid;\r\n }\r\n if (fbp !== null) {\r\n metaServerEvent.data[0].user_data.fbp = fbp;\r\n }\r\n\r\n if (testEventCode !== null) {\r\n metaServerEvent.test_event_code = testEventCode;\r\n }\r\n\r\n console.log('Meta Server Event Built by Schedule_MAA Listener:');\r\n console.log(metaServerEvent);\r\n\r\n // Call Meta-Events Function\r\n TrackMetaEvent(metaEventName, metaServerEvent);\r\n }\r\n\r\n window.setTimeout(() => {\r\n if(urlParams.has(\"scheduleatour\") && urlParams.get('scheduleatour') == \"true\"){\r\n initAppointment();\r\n }\r\n }, 200);\r\n\r\n const handleDropSelectMonth = (e) => {\r\n let setMonth;\r\n\r\n if(isMobile){\r\n setMonth = document.getElementById('moving_month_mobile').value;\r\n } else {\r\n //document.getElementById('moving_day').innerText = \"Day\";\r\n setMonth = e.currentTarget.querySelector('.date-sort__list-cta').innerText;\r\n }\r\n\r\n step2Values.moving_month = setMonth;\r\n\r\n if(!isMobile){\r\n e.currentTarget.closest('.date-sort').querySelector('.date-sort__cta-text').innerText = setMonth;\r\n e.currentTarget.closest('.date-sort').querySelector('.date-sort__cta-text').classList.add('valid');\r\n e.currentTarget.closest('.date-sort__list').classList.remove('active');\r\n }\r\n\r\n setDays();\r\n }\r\n\r\n monthSelect.forEach((item) => {\r\n item.addEventListener('click', handleDropSelectMonth);\r\n })\r\n\r\n document.getElementById('moving_month_mobile').addEventListener('change', handleDropSelectMonth);\r\n //document.getElementById('moving_year_mobile').addEventListener('change', setDays);\r\n\r\n document.addEventListener('closeModalEvent', ((e) => {\r\n if(e.detail.id && e.detail.id.includes(MODAL_UNIQUE_ID)){\r\n handlePrev();\r\n }\r\n }));\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/schedule-appointment/schedule-appointment.js","import { communityCardClickHandler, defaultSwiperOptions, getUnitType, toggleEl } from '../modules/utilities';\r\nimport { closeQuickAction, handleOtherActions } from './other-actions';\r\nimport { handleSaveEvent } from './save-community';\r\nimport { initQuickViewModal } from './quick-view';\r\n\r\nexport const rerenderCommunityList = (section, communities = [], withActions = true) => {\r\n if (section) {\r\n section.innerHTML = '';\r\n communities.forEach((community) => {\r\n const address = community.CommunityAddress;\r\n const divItem = document.createElement('div');\r\n divItem.classList.add('item');\r\n divItem.dataset.id = community.CommunityId;\r\n if (community.CommunitySpecial) {\r\n divItem.innerHTML = `\r\n
    \r\n \r\n Move-in Special\r\n
    \r\n `;\r\n }\r\n divItem.innerHTML += `\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n ${(community.CommunityImages && community.CommunityImages.length) ? `\r\n ${community.CommunityImages.map((item => {\r\n return `\r\n
    \r\n ${item.Description}\r\n
    \r\n `;\r\n })).join('')}\r\n ` : ''}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n ${(community.CommunityUnitTypes && community.CommunityUnitTypes.length) ? `\r\n ${community.CommunityUnitTypes.map(unit => {\r\n return `${getUnitType(unit)}`\r\n }).join('')}\r\n ` : ''}\r\n \r\n

    \r\n $\r\n ${community.CommunityMinPrice} – ${community.CommunityMaxPrice}\r\n

    \r\n
    \r\n

    \r\n ${community.CommunityNeighborhood && community.CommunityNeighborhood != 'null' ? community.CommunityNeighborhood : ''}\r\n

    \r\n

    \r\n ${community.CommunityName}\r\n

    \r\n ${withActions ? `\r\n
    \r\n Quick View\r\n Tour Options\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n

    ${community.CommunityAddress}

    \r\n
    \r\n \r\n \r\n

    Add to compare

    \r\n

    Remove from compare

    \r\n
    \r\n View on Map\r\n Copy Address\r\n Call Us\r\n
    \r\n
    \r\n
    \r\n
    \r\n ` : ''}\r\n\r\n `;\r\n\r\n const closeQuickActionIcon = divItem.querySelector('.other-actions-dropdown__header [href=\"#close\"]');\r\n if (closeQuickActionIcon) {\r\n closeQuickActionIcon.addEventListener('click', (e) => {\r\n closeQuickAction(e);\r\n });\r\n }\r\n\r\n divItem.querySelector('.apt-fav')\r\n .addEventListener('click', (e) => {\r\n handleSaveEvent(e);\r\n });\r\n divItem.addEventListener('click', communityCardClickHandler);\r\n const quickAction = divItem.querySelector(\"#open-quick-actions\");\r\n if (quickAction) {\r\n quickAction.addEventListener(\"click\", toggleEl);\r\n quickAction.addEventListener(\"click\", handleOtherActions);\r\n }\r\n divItem.querySelectorAll(\".open-quick-view-modal\")\r\n .forEach((quickViewBtn) => {\r\n quickViewBtn.addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n const { id } = e.currentTarget.dataset;\r\n if (id) {\r\n initQuickViewModal(id);\r\n }\r\n });\r\n });\r\n section.appendChild(divItem);\r\n });\r\n if (Swiper) {\r\n const swiperOptions = Object.assign({}, defaultSwiperOptions);\r\n new Swiper('.community-list-swiper', swiperOptions);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/render-communites.js","// Content Scroller\r\nconst scrollBody = document.querySelector('.market-body');\r\nconst target = document.querySelector('.market-body__scroll');\r\nconst title = document.querySelector('.market-body__title');\r\nconst scrollLinks = document.querySelectorAll('.scroll-link');\r\n\r\nconst scrollItems = document.querySelectorAll('.market-body__scroll--item');\r\nconst scrollItemJump = 100 / scrollItems.length;\r\n\r\nconst targetMax = 0;\r\nconst targetMin = -80;\r\nlet targetScroll = targetMax;\r\nlet titleScroll = targetScroll;\r\nlet touchStartX;\r\nlet touchStartY;\r\n\r\nconst updateTargetPosition = () => {\r\n if (target) {\r\n target.style.transform = `translateX(${targetScroll}%)`;\r\n }\r\n if (title) {\r\n title.style.transform = `translateX(${titleScroll}%)`;\r\n }\r\n}\r\n\r\nconst updateActiveLink = () => {\r\n scrollItems.forEach((item) => {\r\n const bound = item.getBoundingClientRect();\r\n if (bound.left > 0 && bound.left < screen.width * 0.4) {\r\n document.querySelector('.scroll-link.active').classList.remove('active');\r\n document.querySelector('[href=\"#' + item.getAttribute('id') + '\"]').classList.add('active');\r\n }\r\n });\r\n}\r\n\r\nconst handleScroll = (e) => {\r\n let x = Math.abs(e.deltaY / 100);\r\n targetScroll = e.deltaY > 0 ? targetScroll - x : targetScroll + x;\r\n titleScroll = targetScroll / 2;\r\n\r\n if (targetScroll > targetMax) {\r\n targetScroll = targetMax;\r\n titleScroll = 0;\r\n } else if (targetScroll < targetMin) {\r\n targetScroll = targetMin;\r\n titleScroll = targetScroll / 2;\r\n } else {\r\n e.preventDefault();\r\n }\r\n\r\n updateTargetPosition();\r\n};\r\n\r\nconst handleScrollLink = (e) => {\r\n e.preventDefault();\r\n document.querySelector('.scroll-link.active').classList.remove('active');\r\n e.target.classList.add('active');\r\n targetScroll = ([...scrollLinks].indexOf(e.target) * scrollItemJump) * -1;\r\n titleScroll = targetScroll / 2;\r\n\r\n updateTargetPosition();\r\n};\r\n\r\nconst handleHorizontalTouchScroll = (e) => {\r\n const touchCurrentX = e.touches[0].clientX;\r\n const touchCurrentY = e.touches[0].clientY;\r\n const deltaX = touchStartX - touchCurrentX;\r\n const deltaY = touchStartY - touchCurrentY;\r\n touchStartX = touchCurrentX;\r\n touchStartY = touchCurrentY;\r\n\r\n // calculating the angle in radians\r\n const angle = Math.abs(Math.atan2(deltaY, deltaX));\r\n\r\n if (angle < 45 || angle > 135) {\r\n // 0.02 - adjustable value to adjust the touch scrolling speed/smoothness\r\n targetScroll -= deltaX * 0.02;\r\n titleScroll = targetScroll / 2;\r\n\r\n if (targetScroll > targetMax) {\r\n targetScroll = targetMax;\r\n titleScroll = 0;\r\n } else if (targetScroll < targetMin) {\r\n targetScroll = targetMin;\r\n titleScroll = targetScroll / 2;\r\n }\r\n\r\n updateActiveLink();\r\n updateTargetPosition();\r\n }\r\n}\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const eventListeners = () => {\r\n if (scrollBody != null) {\r\n scrollBody.addEventListener('wheel', handleScroll);\r\n\r\n scrollBody.addEventListener('touchstart', (e) => {\r\n touchStartX = e.touches[0].clientX;\r\n });\r\n\r\n // to update the active link after completing a quick long swipe or mouse scroll\r\n scrollBody.addEventListener('transitionend', updateActiveLink);\r\n\r\n scrollBody.addEventListener('touchmove', handleHorizontalTouchScroll);\r\n\r\n scrollLinks.forEach((item, index) => {\r\n item.linkIndex = index;\r\n item.addEventListener('click', handleScrollLink);\r\n });\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/market-header/market-header.js","// eslint-disable-next-line import/prefer-default-export\r\nexport const neighborhoodsCarousel = () => {\r\n const carouselWrapper = document.querySelector(\".market-neighborhoods\");\r\n\r\n if(carouselWrapper) {\r\n const carousel = carouselWrapper.querySelector(\".carousel\");\r\n const items = carousel && carousel.querySelectorAll(\".item\");\r\n const prevButton = carouselWrapper.querySelector(\".carousel-nav.prev\");\r\n const nextButton = carouselWrapper.querySelector(\".carousel-nav.next\");\r\n\r\n let currentIndex = 0;\r\n const itemsPerPage = 6;\r\n let itemWidth;\r\n\r\n function setupCarousel() {\r\n if(itemWidth * items.length < carousel.offsetWidth){\r\n carousel.classList.add('noscroll');\r\n } else {\r\n carousel.classList.remove('noscroll');\r\n }\r\n }\r\n\r\n const pageLoaded = () => {\r\n if (items && items[0]) {\r\n itemWidth = items[0].offsetWidth\r\n setupCarousel();\r\n }\r\n }\r\n\r\n function resize() {\r\n if (items && items[0]) {\r\n itemWidth = items[0].offsetWidth;\r\n setupCarousel();\r\n }\r\n }\r\n\r\n function updateCarousel() {\r\n items.forEach((item) => {\r\n item.style.transform = `translateX(-${\r\n currentIndex * itemWidth\r\n }px)`;\r\n })\r\n }\r\n\r\n function prevItem(e) {\r\n e.preventDefault();\r\n currentIndex = Math.max(currentIndex - 1, 0);\r\n updateCarousel();\r\n }\r\n\r\n function nextItem(e) {\r\n e.preventDefault();\r\n currentIndex = Math.min(currentIndex + 1, items.length - itemsPerPage);\r\n updateCarousel();\r\n }\r\n\r\n if (prevButton) {\r\n prevButton.addEventListener(\"click\", prevItem);\r\n\r\n }\r\n if (nextButton) {\r\n nextButton.addEventListener(\"click\", nextItem);\r\n }\r\n\r\n window.addEventListener(\"resize\", resize);\r\n window.addEventListener(\"load\", pageLoaded);\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/market-neighborhoods/market-neighborhoods.js","import {\r\n communityCardClickHandler,\r\n defaultSwiperOptions,\r\n getUnitType,\r\n googleMapMarkerIcon,\r\n googleMapStyles,\r\n isMobile,\r\n toggleEl,\r\n} from '../../../js/modules/utilities';\r\nimport { getCommunityList } from '../../../js/api/community';\r\nimport { initQuickViewModal } from '../../../js/components/quick-view';\r\n\r\nconst maaCommunitiesSection = document.querySelector('section.maa-communities');\r\nlet currentFiltersBody = {};\r\nconst renderCommunityMap = () => {\r\n if (maaCommunitiesSection) {\r\n maaCommunitiesSection.classList.add('map-view');\r\n const locationId = maaCommunitiesSection.dataset.locationId;\r\n const templateId = maaCommunitiesSection.dataset.templateId;\r\n getCommunityList(locationId, templateId, currentFiltersBody)\r\n .then(async (response) => {\r\n initCommunityMap(response);\r\n });\r\n }\r\n\r\n}\r\n\r\nconst initCommunityMap = async (data) => {\r\n\r\n const { Map } = await google.maps.importLibrary(\"maps\");\r\n const icons = {\r\n point: {\r\n url: googleMapMarkerIcon.point,\r\n scaledSize: new google.maps.Size(40, 40)\r\n },\r\n activePoint: {\r\n url: googleMapMarkerIcon.activePoint,\r\n scaledSize: new google.maps.Size(40, 40)\r\n },\r\n }\r\n const mapOptions = {\r\n disableDefaultUI: true,\r\n zoomControl: true,\r\n styles: googleMapStyles,\r\n };\r\n const markers = [];\r\n const map = new Map(maaCommunitiesSection.querySelector(\"#community-map\"), mapOptions);\r\n const bounds = new google.maps.LatLngBounds();\r\n const infoWindows = [];\r\n\r\n data.communities.forEach((community) => {\r\n const marker = new google.maps.Marker({\r\n position: { lat: community.CommunityCoordinate.Lat, lng: community.CommunityCoordinate.Lon },\r\n map: map,\r\n icon: icons.point\r\n });\r\n let swiper;\r\n bounds.extend(marker.getPosition());\r\n let infoWindow;\r\n if (!isMobile) {\r\n const divItem = document.createElement('div');\r\n divItem.classList.add('item');\r\n divItem.innerHTML = `\r\n ${community.CommunityImages && community.CommunityImages.length ? `\r\n
    \r\n
    \r\n
    \r\n ${community.CommunityImages.map(image => {\r\n return `\r\n
    \r\n \r\n
    \r\n `;\r\n }).join('')}\r\n
    \r\n
    \r\n
    \r\n
    \r\n ` : ''\r\n }\r\n
    \r\n ${community.CommunityUnitTypes && community.CommunityUnitTypes.length ? `\r\n \r\n ${community.CommunityUnitTypes.map(type => {\r\n return `${getUnitType(type)}`;\r\n }).join('')}\r\n \r\n ` : ''}\r\n

    Rent starting at

    \r\n

    $${community.CommunityMinPrice} – $${community.CommunityMaxPrice}\r\n

    \r\n
    \r\n

    \r\n ${community.CommunityNeighborhood}\r\n

    \r\n

    \r\n ${community.CommunityName}\r\n

    \r\n `;\r\n infoWindow = new google.maps.InfoWindow();\r\n divItem.addEventListener('click', communityCardClickHandler);\r\n infoWindow.setContent(divItem);\r\n }\r\n infoWindows.push(infoWindow);\r\n marker.addListener('click', () => {\r\n if (!isMobile) {\r\n infoWindows.forEach(el => el.close());\r\n infoWindow.open({\r\n anchor: marker,\r\n map,\r\n });\r\n infoWindow.addListener(\"domready\", function() {\r\n if (swiper) {\r\n swiper.destroy();\r\n }\r\n swiper = initSlider(`#swiper${-community.CommunityId}`);\r\n });\r\n } else {\r\n markers.forEach((marker) => marker.setIcon(icons.point));\r\n marker.setIcon(icons.activePoint);\r\n const items = maaCommunitiesSection.querySelectorAll('.item');\r\n // communitiesList.classList.add('map-view-mobile');\r\n maaCommunitiesSection.classList.add('map-view-mobile');\r\n items.forEach((item) => {\r\n if (item.dataset.id === community.CommunityId) {\r\n item.classList.add('force-display')\r\n } else {\r\n item.classList.remove('force-display')\r\n }\r\n });\r\n }\r\n });\r\n markers.push(marker);\r\n });\r\n\r\n if (bounds.getNorthEast().equals(bounds.getSouthWest())) {\r\n var extendPoint1 = new google.maps.LatLng(bounds.getNorthEast().lat() + 0.01, bounds.getNorthEast().lng() + 0.01);\r\n var extendPoint2 = new google.maps.LatLng(bounds.getNorthEast().lat() - 0.01, bounds.getNorthEast().lng() - 0.01);\r\n bounds.extend(extendPoint1);\r\n bounds.extend(extendPoint2);\r\n }\r\n\r\n map.fitBounds(bounds);\r\n}\r\nconst destroyCommunityMap = () => {\r\n if (maaCommunitiesSection) {\r\n maaCommunitiesSection.classList.remove('map-view');\r\n maaCommunitiesSection.classList.remove('map-view-mobile');\r\n const map = maaCommunitiesSection.querySelector('#community-map')\r\n if (map) {\r\n map.innerHTML = '';\r\n }\r\n }\r\n}\r\n\r\nconst initSlider = (selector) => {\r\n const swiperOptions = Object.assign({}, defaultSwiperOptions);\r\n return new Swiper(selector, swiperOptions);\r\n}\r\n\r\nconst initListSliders = () => {\r\n initSlider('.community-list-swiper');\r\n}\r\n\r\nexport const communityList = () => {\r\n if (maaCommunitiesSection) {\r\n const mapButton = maaCommunitiesSection.querySelector('#community-map-btn');\r\n if (mapButton) {\r\n mapButton.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n if (maaCommunitiesSection.classList.contains('map-view')) {\r\n destroyCommunityMap();\r\n } else {\r\n renderCommunityMap();\r\n }\r\n });\r\n }\r\n initListSliders();\r\n maaCommunitiesSection.querySelectorAll('.communities-list .item')\r\n .forEach((item) => {\r\n item.addEventListener('click', communityCardClickHandler);\r\n })\r\n }\r\n}\r\n\r\nexport const toggleCommunitiesQuickActions = () => {\r\n\r\n // const copyAddress = (e) => {\r\n // const address = e.currentTarget.dataset.value;\r\n // e.stopPropagation();\r\n // e.preventDefault();\r\n // if (address) {\r\n // copyTextToClipboard(address);\r\n // }\r\n // addToastMessage({\r\n // body: 'Community address copied',\r\n // });\r\n // }\r\n //\r\n // const addToCompareOptionClick = (e) => {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n // try {\r\n // const item = e.currentTarget.closest('.item');\r\n // const imagesWrapper = item.querySelector('.images-wrapper');\r\n // const imgEl = imagesWrapper.querySelector('img');\r\n // const nameEl = item.querySelector('.community-name');\r\n // const imgSrc = imgEl.getAttribute('src');\r\n // const nameText = nameEl.innerHTML;\r\n // addToCompareHandler(e, imgSrc, nameText, 'right');\r\n //\r\n // } catch (e) {\r\n // console.error(e);\r\n // }\r\n // }\r\n //\r\n // const toggleEl = (event) => {\r\n // const botao = event.currentTarget;\r\n // const dropdown = botao.querySelector('.other-actions-dropdown-maa');\r\n // if (dropdown) {\r\n // dropdown.addEventListener('click', (e) => e.stopPropagation());\r\n // }\r\n // const parentDiv = botao.parentElement;\r\n // const quickActionsEl = parentDiv.nextElementSibling;\r\n // const item = event.currentTarget.closest('.item');\r\n // const copyAddressOption = item.querySelector('#quick-action-copy-address');\r\n // const addToCompareOption = item.querySelector('#quick-action-add-to-compare');\r\n //\r\n // if (quickActionsEl && quickActionsEl.classList.contains(\"active\")) {\r\n // if (copyAddressOption) {\r\n // copyAddressOption.removeEventListener('click', copyAddress);\r\n // }\r\n // if (addToCompareOption) {\r\n // addToCompareOption.removeEventListener('click', addToCompareOptionClick)\r\n // }\r\n // } else {\r\n // if (copyAddressOption) {\r\n // copyAddressOption.addEventListener('click', copyAddress);\r\n // }\r\n // if (addToCompareOption) {\r\n // addToCompareOption.addEventListener('click', addToCompareOptionClick)\r\n // }\r\n // }\r\n // };\r\n\r\n const botoes = document.querySelectorAll(\"#open-quick-actions\");\r\n\r\n botoes.forEach((botao) => {\r\n botao.addEventListener(\"click\", toggleEl);\r\n });\r\n};\r\n\r\nexport const toggleFilters = () => {\r\n const button = document.querySelector(\"#community-filters-btn\");\r\n if (button) {\r\n button.addEventListener(\"click\", (e) => {\r\n document.dispatchEvent(new CustomEvent(\"openFilters\", {\r\n bubbles: true,\r\n detail: e.currentTarget,\r\n }));\r\n });\r\n }\r\n\r\n document.addEventListener('communitiesRendered', (e) => {\r\n if (e.detail) {\r\n currentFiltersBody = e.detail;\r\n }\r\n destroyCommunityMap();\r\n });\r\n};\r\n\r\n\r\nconst openQuickViewModal = (e) => {\r\n e.preventDefault();\r\n const { id, dniid } = e.currentTarget.dataset;\r\n if (id) {\r\n initQuickViewModal(id, dniid);\r\n }\r\n};\r\n\r\nexport const handleQuickViewModal = () => {\r\n const openQuickViewModalButton = document.querySelectorAll(\r\n \".open-quick-view-modal\"\r\n );\r\n\r\n openQuickViewModalButton.forEach(quickView => {\r\n quickView.addEventListener(\"click\", openQuickViewModal);\r\n });\r\n};\r\n\r\n\r\n/*\r\nexport const initQuickViewModal = (id = '') => {\r\n console.log('');\r\n getQuickViewDataById(id)\r\n .then(quickViewData => {\r\n newPropertyContainer = document.createElement('div');\r\n newPropertyContainer.classList.add('property-container');\r\n let availableApartments = '';\r\n if (quickViewData.quickView && Array.isArray(quickViewData.quickView.AvailableApartments)) {\r\n quickViewData.quickView.AvailableApartments.forEach(aprt => {\r\n availableApartments += `${getUnitType(aprt)}`;\r\n })\r\n }\r\n let amenities = '';\r\n if (quickViewData.quickView && Array.isArray(quickViewData.quickView.Amenities)) {\r\n quickViewData.quickView.Amenities.forEach(amenity => {\r\n amenities += `\r\n
  • \r\n \r\n ${amenity.Name}\r\n
  • \r\n `;\r\n });\r\n }\r\n\r\n let imageFilters = '';\r\n let allImages = [];\r\n let imagesArray = [];\r\n if (quickViewData.quickView && quickViewData.quickView.Images) {\r\n imagesArray = Object.entries(quickViewData.quickView.Images);\r\n for (const [imgKey, images] of imagesArray) {\r\n allImages.push(...images);\r\n imageFilters +=\r\n ``;\r\n }\r\n imageFilters =\r\n `` + imageFilters;\r\n }\r\n\r\n let imageSliders = '';\r\n allImages.forEach((img, i) => {\r\n imageSliders += `\r\n
    \r\n \r\n
    \r\n `;\r\n })\r\n\r\n newPropertyContainer.innerHTML = `\r\n \r\n
    \r\n ${quickViewData.quickView && quickViewData.quickView.Name ? `

    ${quickViewData.quickView.Name}

    ` : ''}\r\n ${quickViewData.quickView && quickViewData.quickView.Address ? `

    ${quickViewData.quickView.Address}

    ` : ''}\r\n ${availableApartments ? `\r\n

    \r\n ${availableApartments}\r\n

    \r\n ` : ''}\r\n ${quickViewData.quickView && quickViewData.quickView.Description ? `\r\n

    ${quickViewData.quickView.Description}

    \r\n ` : ''}\r\n ${amenities ? `\r\n \r\n ` : ''}\r\n\r\n ${quickViewData.quickView && quickViewData.quickView.PageUrl && quickViewData.labels && quickViewData.labels.ViewCommunity ? `\r\n \r\n ${quickViewData.labels.ViewCommunity}\r\n \r\n ` : ''}\r\n ${quickViewData.quickView && quickViewData.quickView.PhoneNumber ? `\r\n

    \r\n \r\n \r\n ${quickViewData.labels.CallUs}: ${quickViewData.quickView.PhoneNumber}\r\n \r\n

    \r\n ` : ''}\r\n\r\n
    \r\n \r\n \r\n ${quickViewData.labels && quickViewData.labels.Favorite ? `\r\n ${quickViewData.labels.Favorite}\r\n `: ''}\r\n \r\n \r\n \r\n ${quickViewData.labels && quickViewData.labels.ScheduleATour ? `\r\n ${quickViewData.labels.ScheduleATour}\r\n `: ''}\r\n \r\n \r\n \r\n ${quickViewData.labels && quickViewData.labels.Compare ? `\r\n ${quickViewData.labels.Compare}\r\n ` : ''}\r\n \r\n ${isMobile ? `\r\n \r\n \r\n \r\n ${quickViewData.labels.CallUs}\r\n \r\n \r\n ` : ''}\r\n
    \r\n
    \r\n
    \r\n ${imagesArray.length !== 0 ?\r\n `\r\n
    \r\n
    \r\n ${imageFilters}\r\n
    \r\n
    \r\n
    \r\n ${imageSliders}\r\n
    \r\n
    \r\n ${!isMobile ? `\r\n
    \r\n
    \r\n ` : ''}\r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n ` : ''\r\n }\r\n
    \r\n
    \r\n
    \r\n ${imagesArray.length !== 0 || isMobile ? `\r\n ${quickViewData.labels.ExpandMap}\r\n ${quickViewData.labels.CollapseMap}\r\n \r\n ` : ''}\r\n
    \r\n

    \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n `;\r\n newPropertyContainer.querySelector('.apt-fav.save').addEventListener('click', (e) => {\r\n handleSaveEvent(e);\r\n });\r\n const swiper = newPropertyContainer.querySelector('.swiper');\r\n if (swiper) {\r\n swiper.addEventListener('click', attachImageGalleryClick);\r\n }\r\n newPropertyContainer.querySelector('.action-item.compare').addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n addToCompareHandler(e, allImages[0], quickViewData.quickView && quickViewData.quickView.Name);\r\n });\r\n newPropertyContainer.querySelector('#expand-collapse-map').addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n newPropertyContainer.querySelector('.media-container').classList.toggle('expanded-map');\r\n });\r\n newPropertyContainer.querySelector('.arrow-back').addEventListener('click', arrowBackHandler);\r\n newPropertyContainer.querySelector('.image-gallery-view-btn').addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n newPropertyContainer.querySelector('.image-gallery').classList.toggle('grid-view');\r\n newPropertyContainer.querySelector('.image-gallery-view-btn').classList.toggle('grid-view');\r\n });\r\n const imageGalleryContainerEl = newPropertyContainer.querySelector('.image-gallery');\r\n allImages.forEach((img, i) => {\r\n const imgEl = document.createElement('img');\r\n imgEl.setAttribute('src', img);\r\n imgEl.setAttribute('data-index', i);\r\n imageGalleryContainerEl.appendChild(imgEl);\r\n imgEl.addEventListener('click', imageGalleryElClick);\r\n\r\n })\r\n openModalGlobal(newPropertyContainer);\r\n initQuickViewMap(newPropertyContainer, quickViewData);\r\n imageSlider(newPropertyContainer, quickViewData);\r\n })\r\n .catch(console.error);\r\n}\r\n\r\nconst arrowBackHandler = (e) => {\r\n e.stopPropagation();\r\n if (newPropertyContainer.classList.contains('image-gallery-full-screen')) {\r\n newPropertyContainer.classList.remove('image-gallery-full-screen');\r\n fullScreenSwiperEl.remove();\r\n counterEl.remove();\r\n if (fullScreenSwiper) {\r\n fullScreenSwiper.destroy();\r\n }\r\n } else {\r\n newPropertyContainer.classList.remove('image-gallery-opened');\r\n newPropertyContainer.querySelector('.image-gallery-view-btn').classList.remove('grid-view');\r\n newPropertyContainer.querySelector('.image-gallery').classList.remove('grid-view');\r\n }\r\n}\r\n\r\nconst initQuickViewMap = async (el, data) => {\r\n const { Map } = await google.maps.importLibrary(\"maps\");\r\n const lat = data && data.quickView && data.quickView.Coordinates && data.quickView.Coordinates.Lat || 40.6839597;\r\n const lng = data && data.quickView && data.quickView.Coordinates && data.quickView.Coordinates.Lon || -74.2163569;\r\n const mapOptions = {\r\n center: { lat, lng },\r\n zoom: 15,\r\n disableDefaultUI: true,\r\n zoomControl: true,\r\n styles: googleMapStyles,\r\n };\r\n const map = new Map(el.querySelector(\"#quick-view-map\"), mapOptions);\r\n const marker = new google.maps.Marker({\r\n position: { lat, lng },\r\n map: map,\r\n icon: {\r\n url: '/assets/img/maa-icon.svg',\r\n scaledSize: new google.maps.Size(pinsize, pinsize)\r\n },\r\n });\r\n}\r\n\r\nexport const imageGalleryElClick = (e) => {\r\n e.stopPropagation();\r\n if (newPropertyContainer) {\r\n const target = e.currentTarget;\r\n const targetIndex = target.getAttribute('data-index');\r\n newPropertyContainer.classList.add('image-gallery-full-screen');\r\n fullScreenSwiperEl = document.createElement('div');\r\n fullScreenSwiperEl.classList.add('full-screen-swiper');\r\n\r\n counterEl = document.createElement('span');\r\n counterEl.classList.add('swiper-full-screen-counter')\r\n const images = [...newPropertyContainer.querySelector('.image-gallery').children];\r\n counterEl.innerHTML = `${+targetIndex + 1} / ${images.length}`;\r\n newPropertyContainer.appendChild(counterEl);\r\n newPropertyContainer.appendChild(fullScreenSwiperEl);\r\n let imageSliders = '';\r\n images.forEach(img => {\r\n const imgSrc = img.getAttribute('src');\r\n const dataIndex = img.getAttribute('data-index');\r\n imageSliders += `\r\n
    \r\n \r\n
    \r\n `;\r\n });\r\n fullScreenSwiperEl.innerHTML = `\r\n
    \r\n ${imageSliders}\r\n
    \r\n `;\r\n const swiperOptions = {\r\n loop: true,\r\n spaceBetween: 50,\r\n initialSlide: +targetIndex,\r\n on: {\r\n slideChange: (e) => {\r\n counterEl.innerHTML = `${e.realIndex + 1} / ${images.length}`;\r\n }\r\n }\r\n };\r\n fullScreenSwiper = new Swiper('.full-screen-swiper', swiperOptions);\r\n }\r\n}\r\n\r\nexport const attachImageGalleryClick = (e) => {\r\n e.stopPropagation();\r\n if (newPropertyContainer && isMobile) {\r\n const target = e.currentTarget;\r\n newPropertyContainer.classList.add('image-gallery-opened');\r\n const activeSlide = target.querySelector('.swiper-slide-active');\r\n const index = activeSlide.dataset.swiperSlideIndex;\r\n const imageGallery = newPropertyContainer.querySelector('.image-gallery');\r\n if (index && index !== '0' && imageGallery) {\r\n const imageToScroll = imageGallery.querySelector(`[data-index=\"${index}\"]`);\r\n if (imageToScroll) {\r\n imageToScroll.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst imageSlider = (el, data) => {\r\n const swiperOptions = {\r\n loop: true,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n dynamicBullets: true,\r\n dynamicMainBullets: 3,\r\n },\r\n spaceBetween: 50,\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n },\r\n };\r\n let swiper = new Swiper('.swiper', swiperOptions);\r\n\r\n const filters = el.querySelectorAll(\".filter\");\r\n const swiperWrapper = el.querySelector(\".swiper-wrapper\");\r\n\r\n filters.forEach((filter) => {\r\n filter.addEventListener(\"click\", function (e) {\r\n const { category } = e.currentTarget.dataset;\r\n filters.forEach((otherFilter) => {\r\n if (otherFilter !== filter) {\r\n otherFilter.classList.remove(\"active\");\r\n } else {\r\n otherFilter.classList.add(\"active\");\r\n }\r\n });\r\n const slides = newPropertyContainer.querySelectorAll(\".swiper-slide\");\r\n const imageGallery = newPropertyContainer.querySelector('.image-gallery');\r\n slides.forEach(slide => slide.remove());\r\n if (imageGallery && imageGallery.children) {\r\n [...imageGallery.children].forEach((img) => img.remove());\r\n }\r\n let imagesToRender = [];\r\n if (category !== 'All') {\r\n imagesToRender = data.quickView.Images[category];\r\n } else if (category === 'All') {\r\n Object.values(data.quickView.Images).forEach(val => {\r\n imagesToRender.push(...val);\r\n })\r\n }\r\n imagesToRender.forEach((image, i) => {\r\n const imgEl = document.createElement('div');\r\n imgEl.classList.add('swiper-slide');\r\n const imgSrcEl = document.createElement('img');\r\n imgSrcEl.setAttribute('src', image);\r\n imgSrcEl.setAttribute('data-index', i);\r\n imgEl.appendChild(imgSrcEl);\r\n swiperWrapper.appendChild(imgEl);\r\n const imgGalleryEl = imgSrcEl.cloneNode(true);\r\n imgGalleryEl.addEventListener('click', imageGalleryElClick);\r\n imageGallery.appendChild(imgGalleryEl);\r\n })\r\n swiper.destroy();\r\n swiper = new Swiper('.swiper', swiperOptions);\r\n });\r\n });\r\n};\r\n*/\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/maa-communities/maa-communities.js","import { isLocalhost } from '../modules/utilities';\r\n\r\nconst QUICK_VIEW_URL = '/maa-api/community/v1/quick-view/';\r\n\r\nexport const getQuickViewDataById = async (id = '') => {\r\n if (isLocalhost()) {\r\n return testData;\r\n }\r\n return fetch(window.location.origin + QUICK_VIEW_URL + id, {\r\n credentials: 'include',\r\n })\r\n .then(response => response.json())\r\n .then(response => {\r\n if (response.success !== true) {\r\n console.error('API error occurred');\r\n return {};\r\n }\r\n return response;\r\n });\r\n}\r\n\r\nconst testData = {\r\n \"success\": true,\r\n \"quickView\": {\r\n \"Id\": \"611790\",\r\n \"Name\": \"MAA Gardens\",\r\n \"Address\": \"1020 Lenox Park Blvd NE\",\r\n \"AvailableApartments\": [\r\n 0,\r\n 1,\r\n 2,\r\n 3\r\n ],\r\n \"Description\": \"Tour our pet-friendly luxury apartments at MAA Gardens. Rent starts at ${MinRent} for 1-3 bedroom units. Amenities include a fitness center and a yoga studio.\\n\",\r\n \"Amenities\": [\r\n {\r\n \"Icon\": \"icon-24hr-fitness-center\",\r\n \"Name\": \"24/hr Fitness Center\"\r\n },\r\n {\r\n \"Icon\": \"icon-pool\",\r\n \"Name\": \"Pool\"\r\n },\r\n {\r\n \"Icon\": \"icon-tennis\",\r\n \"Name\": \"Tennis\"\r\n },\r\n {\r\n \"Icon\": \"icon-on-site-recycling\",\r\n \"Name\": \"On-site Recycling\"\r\n },\r\n {\r\n \"Icon\": \"icon-grill-and-picnic-area\",\r\n \"Name\": \"Grill & Picnic Area\"\r\n },\r\n {\r\n \"Icon\": \"icon-in-unit-laundry\",\r\n \"Name\": \"In unit Laundry\"\r\n }\r\n ],\r\n \"PageUrl\": \"/georgia/atlanta/test-maa-gardens/\",\r\n \"PhoneNumber\": \"(404) 390-2146\",\r\n \"ScheduleTourUrl\": \"/pages/page-tiles.html?prop_exp=tour\",\r\n \"Coordinates\": {\r\n \"Lat\": 33.84997,\r\n \"Lon\": -84.3505\r\n },\r\n \"Images\": {\r\n \"Bathrooms\": [\r\n \"/assets/img/communities-preview.png\",\r\n \"/assets/img/apartment-tour-image.jpg\"\r\n ],\r\n \"Outdoors\": [\r\n \"/assets/img/image-7.png\"\r\n ],\r\n \"Kitchen\": [\r\n \"/assets/img/image-7.png\"\r\n ],\r\n \"Qwe\": [\r\n \"/assets/img/image-7.png\"\r\n ]\r\n },\r\n \"IsCompare\": true,\r\n \"IsSaved\": true\r\n },\r\n \"labels\": {\r\n \"ViewCommunity\": \"View Community\",\r\n \"CallUs\": \"Call us\",\r\n \"CallUsMobile\": \"Call Us Mobile\",\r\n \"Favorite\": \"Favorite\",\r\n \"ScheduleATour\": \"Schedule Tour\",\r\n \"Compare\": \"Compare\",\r\n \"ExpandMap\": \"Expand Map\",\r\n \"CollapseMap\": \"Collapse Map\"\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/api/quick-view.js","import { handleSaveEvent } from \"../../../js/components/save-community\";\r\nimport { openCompareWidget, closeCompareWidget } from \"../../../js/components/compare-community\";\r\nimport { removeFromCompare, toggleCompare } from '../../../js/api/compare';\r\nimport { isLocalhost } from '../../../js/modules/utilities';\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const compareCommunities = () => {\r\n const maxCompare = 5;\r\n const compareCount = document.querySelector('.compare-communities__header--count');\r\n\r\n const compareWrapper = document.querySelector('.compare-communities');\r\n const compareOverlay = document.querySelector('.compare-overlay');\r\n const closeCompare = document.querySelector('.close-compare');\r\n const viewList = document.querySelectorAll('.view-list');\r\n\r\n const viewedList = document.querySelector('#viewed-list .community-list');\r\n const savedList = document.querySelector('#saved-list .community-list');\r\n const compareList = document.querySelector('.compare-communities__list .community-list');\r\n\r\n const clearAll = document.querySelectorAll('.clear-compare');\r\n const viewCompare = document.querySelector('.view-compare');\r\n const toTop = document.querySelectorAll('.to-top');\r\n\r\n const compareManageUrl = '/maa-api/compare/v1/';\r\n\r\n // const handleOpen = (e) => {\r\n // e.stopPropagation();\r\n // e.preventDefault();\r\n // compareWrapper.classList.remove('collapsed');\r\n // compareOverlay.classList.remove('collapsed');\r\n // };\r\n\r\n // const handleClose = (e) => {\r\n // e.stopPropagation();\r\n // e.preventDefault();\r\n // compareWrapper.classList.add('collapsed');\r\n // compareOverlay.classList.add('collapsed');\r\n // };\r\n\r\n const handleClick = ((e) => {\r\n e.preventDefault();\r\n const anchor = e.target.closest(\"a\");\r\n if (!anchor) return;\r\n const pdpLink = anchor.getAttribute(\"href\");\r\n window.location.href = pdpLink;\r\n });\r\n\r\n const buildListItem = ((property, isInitial = true) => {\r\n const li = document.createElement('li');\r\n li.classList.add('community-list__item');\r\n li.setAttribute('data-id', property.Id);\r\n\r\n const { Neighborhood, PropertyName } = property;\r\n const item = document.createElement('a');\r\n item.classList.add('community-list__item--link');\r\n item.setAttribute('href', property.Url);\r\n item.innerHTML = `\r\n \"${property.PropertyName}\"/\r\n
    \r\n ${Neighborhood ? `
    ${Neighborhood}
    ` : ''}\r\n ${PropertyName ? `
    ${PropertyName}
    ` : ''}\r\n
    \r\n `;\r\n item.addEventListener('click', handleClick);\r\n\r\n const saveLink = document.createElement('a');\r\n saveLink.classList.add('community-list__item--favorite');\r\n saveLink.setAttribute('data-id', property.Id);\r\n saveLink.setAttribute('href', '#save');\r\n saveLink.innerHTML = '';\r\n if (!isInitial) {\r\n bindEvent(saveLink, 'click', handleSaveEvent);\r\n }\r\n\r\n if (property.IsSaved) saveLink.classList.add('saved');\r\n\r\n const removeLink = document.createElement('a');\r\n removeLink.classList.add('community-list__item--remove');\r\n removeLink.setAttribute('data-id', property.Id);\r\n removeLink.setAttribute('href','#remove');\r\n removeLink.innerHTML = '';\r\n if (!isInitial) {\r\n bindEvent(removeLink, 'click', handleRemove);\r\n }\r\n\r\n const addLink = document.createElement('a');\r\n addLink.classList.add('community-list__item--add');\r\n addLink.setAttribute('data-id', property.Id);\r\n addLink.setAttribute('href','#add');\r\n addLink.innerHTML = '';\r\n\r\n const added = document.createElement('div');\r\n added.classList.add('community-list__item--added');\r\n added.innerHTML = 'Added to Compare';\r\n\r\n if(property.IsCompare) li.classList.add('added');\r\n\r\n li.appendChild(item);\r\n li.appendChild(saveLink);\r\n li.appendChild(removeLink);\r\n li.appendChild(addLink);\r\n li.appendChild(added);\r\n\r\n return li;\r\n });\r\n\r\n\r\n const bindEvent = (target, evt, act) => {\r\n target.addEventListener(evt, act);\r\n }\r\n\r\n const updateCompareCount = () => {\r\n compareCount.textContent = compareList.getAttribute('data-count') + ' of ' + maxCompare;\r\n };\r\n\r\n const updatePropCount = () => {\r\n const propCount = compareList.children.length;\r\n viewCompare.classList.toggle('valid', propCount > 1);\r\n document.querySelectorAll('.compare-communities__add--list').forEach((item) => {\r\n item.classList.toggle('not-available', propCount >= 5);\r\n });\r\n\r\n if(propCount <= maxCompare){\r\n compareList.setAttribute('data-count', propCount);\r\n updateCompareCount();\r\n }\r\n };\r\n\r\n const removeCompareItem = ((target, itemId) => {\r\n const dataCommunity = '[data-id=\"' + itemId + '\"].added';\r\n document.querySelectorAll(dataCommunity).forEach((el) => {\r\n el.classList.remove('added');\r\n })\r\n\r\n const communityIndex = communitiesArray && communitiesArray.communities && communitiesArray.communities.findIndex( obj => {\r\n return obj.Id === itemId;\r\n });\r\n\r\n if (communityIndex > -1) {\r\n communitiesArray.communities[communityIndex].IsCompare = false;\r\n }\r\n\r\n if (isLocalhost()) {\r\n toggleCompare(itemId);\r\n if (target) {\r\n target.remove();\r\n }\r\n updatePropCount();\r\n } else {\r\n fetch(compareManageUrl + itemId, {\r\n method: 'DELETE',\r\n })\r\n .then(_ => {\r\n toggleCompare(itemId);\r\n if (target) {\r\n target.remove();\r\n }\r\n updatePropCount();\r\n });\r\n }\r\n });\r\n\r\n const handleRemove = ((e) => {\r\n e.preventDefault();\r\n const target = e.currentTarget.closest('.community-list__item');\r\n const communityIndex = e.currentTarget.getAttribute('data-id');\r\n removeCompareItem(target, communityIndex);\r\n });\r\n\r\n const handleTop = (e) => {\r\n e.preventDefault();\r\n document.querySelector('.compare-communities').scrollTop = 0;\r\n }\r\n\r\n toTop.forEach((item) => {\r\n item.addEventListener('click', handleTop);\r\n });\r\n\r\n if(compareWrapper){\r\n compareWrapper.addEventListener('click', openCompareWidget);\r\n closeCompare.addEventListener('click', closeCompareWidget);\r\n compareOverlay.addEventListener('click', closeCompareWidget);\r\n\r\n const handleView = (e) => {\r\n e.preventDefault();\r\n document.querySelector('.view-list.active').classList.remove('active');\r\n document.querySelector('.compare-communities__add--list.active').classList.remove('active');\r\n const target = e.target.getAttribute('href');\r\n e.target.classList.add('active');\r\n document.querySelector(target).classList.add('active');\r\n };\r\n\r\n viewList.forEach((item) => {\r\n item.addEventListener('click', handleView);\r\n });\r\n\r\n const log = ((mutations) => {\r\n for (let mutation of mutations) {\r\n if (mutation.type === 'childList') {\r\n updatePropCount();\r\n }\r\n }\r\n });\r\n\r\n let observer = new MutationObserver(log);\r\n\r\n observer.observe(compareList, {\r\n childList: true\r\n });\r\n\r\n const handleClear = ((e) => {\r\n e.preventDefault();\r\n // [].slice.call(compareList.children).forEach((item) => {\r\n // removeCompareItem(item);\r\n // });\r\n compareList.querySelectorAll('.community-list__item').forEach((item) => {\r\n removeCompareItem(item, item.getAttribute('data-id'));\r\n })\r\n });\r\n\r\n clearAll.forEach(clear => clear.addEventListener('click', handleClear));\r\n\r\n const compareView = (e) => {\r\n console.log('clicked');\r\n if(!e.currentTarget.classList.contains('valid')){\r\n console.log('not going');\r\n e.preventDefault();\r\n } else {\r\n window.location.href = e.currentTarget.getAttribute('href');\r\n }\r\n }\r\n\r\n viewCompare.addEventListener('click', compareView);\r\n\r\n const handleAdd = ((e) => {\r\n e.preventDefault();\r\n const target = e.currentTarget.closest('.community-list__item');\r\n const compareItem = target.cloneNode(true);\r\n const communityId = e.currentTarget.getAttribute('data-id');\r\n compareItem.querySelector('[href=\"#remove\"]').addEventListener('click', handleRemove);\r\n compareItem.querySelector('[href=\"#save\"]').addEventListener('click', handleSaveEvent);\r\n compareList.appendChild(compareItem);\r\n document.querySelectorAll('[data-id=\"' + communityId + '\"]').forEach((item) => {\r\n item.classList.toggle('added');\r\n });\r\n\r\n if (communitiesArray && communitiesArray.communities) {\r\n const communityIndex = communitiesArray.communities.findIndex( obj => {\r\n return obj.Id === communityId;\r\n });\r\n\r\n const com = communitiesArray.communities[communityIndex];\r\n if (com) {\r\n com.IsCompare = true;\r\n }\r\n }\r\n\r\n if(isLocalhost()) {\r\n toggleCompare(communityId);\r\n updatePropCount();\r\n } else {\r\n fetch(compareManageUrl + communityId, {\r\n method: 'POST',\r\n })\r\n .then(_ => {\r\n toggleCompare(communityId);\r\n updatePropCount();\r\n });\r\n }\r\n });\r\n\r\n const bindEvents = () => {\r\n document.querySelectorAll('[href=\"#save\"]').forEach((saveLink) => {\r\n bindEvent(saveLink, 'click', handleSaveEvent);\r\n });\r\n\r\n document.querySelectorAll('[href=\"#remove\"]').forEach((removeLink) => {\r\n bindEvent(removeLink, 'click', handleRemove);\r\n });\r\n\r\n document.querySelectorAll('[href=\"#add\"]').forEach((addLink) => {\r\n bindEvent(addLink, 'click', handleAdd);\r\n });\r\n\r\n document.querySelectorAll(\".community-list__item--link\").forEach((itemLink) => {\r\n bindEvent(itemLink, 'click', handleClick);\r\n });\r\n };\r\n\r\n document.addEventListener(\"updateSave\", ((e) => {\r\n if(!Object.is(savedList, null)){\r\n const savedEl = savedList.querySelector('[data-id=\"' + e.detail.Id + '\"]');\r\n if(e.detail.IsSaved && !savedEl){\r\n const communityIndex = communitiesArray.communities.findIndex( obj => {\r\n return obj.Id === e.detail.Id;\r\n });\r\n const li = buildListItem(communitiesArray.communities[communityIndex]);\r\n\r\n bindEvent(li.querySelector('[href=\"#save\"]'), 'click', handleSaveEvent);\r\n bindEvent(li.querySelector('[href=\"#remove\"]'), 'click', handleRemove);\r\n bindEvent(li.querySelector('[href=\"#add\"]'), 'click', handleAdd);\r\n\r\n savedList.appendChild(li);\r\n } else {\r\n if(!Object.is(savedEl, null)) savedEl.remove();\r\n }\r\n }\r\n }));\r\n\r\n // LOAD Viewed\r\n const buildCommunityList = () => {\r\n let propertyCount = 0;\r\n communitiesArray.communities.forEach((property) => {\r\n let li = buildListItem(property);\r\n\r\n if(property.IsRecent) {\r\n viewedList.appendChild(li.cloneNode(true));\r\n }\r\n\r\n if(property.IsSaved) savedList.appendChild(li.cloneNode(true));\r\n if(property.IsCompare) compareList.appendChild(li.cloneNode(true));\r\n\r\n propertyCount++;\r\n });\r\n\r\n viewedList.setAttribute('data-count', propertyCount)\r\n viewedList.classList.remove('loading');\r\n\r\n savedList.setAttribute('data-count', propertyCount)\r\n savedList.classList.remove('loading');\r\n\r\n compareList.setAttribute('data-count', propertyCount)\r\n compareList.classList.remove('loading');\r\n\r\n updatePropCount();\r\n bindEvents();\r\n };\r\n\r\n buildCommunityList();\r\n }\r\n\r\n document.addEventListener(\"addedToCompare\", (e) => {\r\n if (compareWrapper) {\r\n let li = buildListItem(e.detail, false);\r\n compareList.appendChild(li);\r\n }\r\n });\r\n\r\n document.addEventListener(\"removeFromCompare\", (e) => {\r\n const { Id } = e.detail;\r\n if (Id && compareWrapper) {\r\n const target = compareWrapper.querySelector(`li[data-id=\"${Id}\"]`);\r\n if (target) {\r\n target.remove();\r\n }\r\n }\r\n });\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/compare-communities/compare-communities.js","import { handleSaveEvent } from \"../../../js/components/save-community\";\r\nimport { handleOtherActions } from \"../../../js/components/other-actions\";\r\nimport { openCompareWidget } from \"../../../js/components/compare-community\";\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const compareView = () => {\r\n let isSticky = false;\r\n const header = document.querySelector('.compare-view__body--thead');\r\n const body = document.querySelector('.compare-view__body');\r\n const save = document.querySelectorAll('[href=\"#save\"]');\r\n const remove = document.querySelectorAll('[href=\"#remove\"]');\r\n const clearAll = document.querySelectorAll('.clear-compare');\r\n const otherActions = document.querySelectorAll('.other');\r\n const addCommunity = document.querySelectorAll('[href=\"#add-community\"]');\r\n\r\n if(body){\r\n const sticky = header.offsetTop - 100;\r\n\r\n function handleSticky() {\r\n if (window.scrollY > sticky) {\r\n header.classList.add('sticky');\r\n } else {\r\n header.classList.remove('sticky');\r\n }\r\n }\r\n\r\n window.onscroll = () => { handleSticky(); };\r\n\r\n body.onscroll = (e) => {\r\n const communityDetail = document.querySelectorAll('.compare-view__body--thead.sticky .community-detail');\r\n communityDetail.forEach((item) => {\r\n item.style.transform = 'translateX(-' + e.target.scrollLeft + 'px)';\r\n });\r\n }\r\n\r\n save.forEach((item) => {\r\n item.addEventListener('click', handleSaveEvent);\r\n });\r\n\r\n const removeCommunity = (id) => {\r\n document.querySelectorAll('[data-id=\"' + id + '\"').forEach((item) => {\r\n item.remove();\r\n });\r\n\r\n let communityDetail = document.createElement('DIV');\r\n communityDetail.classList.add('community-detail', 'empty');\r\n\r\n let communityLink = document.createElement('A');\r\n communityLink.href = '#add-community';\r\n communityLink.innerHTML = 'Add Community';\r\n communityLink.addEventListener('click', openCompareWidget);\r\n communityDetail.appendChild(communityLink);\r\n document.querySelector('.compare-view__body--thead').appendChild(communityDetail);\r\n\r\n const communityIndex = communitiesArray.communities.findIndex( obj => {\r\n return obj.Id === id;\r\n });\r\n\r\n communitiesArray.communities[communityIndex].IsCompare = false;\r\n }\r\n\r\n const handleRemove = (e) => {\r\n e.preventDefault();\r\n removeCommunity(e.currentTarget.getAttribute('data-id'));\r\n }\r\n\r\n remove.forEach((item) => {\r\n item.addEventListener('click', handleRemove);\r\n });\r\n\r\n const handleClearAll = () => {\r\n document.querySelectorAll('.community-detail[data-id]').forEach((item) => {\r\n removeCommunity(item.getAttribute('data-id'));\r\n });\r\n }\r\n\r\n clearAll.forEach(clear => clear.addEventListener('click', handleClearAll));\r\n\r\n addCommunity.forEach((item) => {\r\n item.addEventListener('click', openCompareWidget);\r\n });\r\n\r\n window.addEventListener('beforeprint', function () {\r\n const amount = header.querySelectorAll(\".community-detail:not(.empty)\");\r\n if (amount.length === 2) {\r\n header.classList.add('two-print-items');\r\n } else if (amount.length === 3) {\r\n header.classList.add('three-print-items');\r\n } else if (amount.length === 4) {\r\n header.classList.add('four-print-items');\r\n } else if (amount.length === 5) {\r\n header.classList.add('five-print-items');\r\n }\r\n document.body.classList.add('compare-print');\r\n });\r\n window.addEventListener('afterprint', function () {\r\n document.body.classList.remove('compare-print');\r\n });\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/compare-view/compare-view.js","import { closeModalGlobal, openModalGlobal, clearContent } from './modal';\r\n\r\nexport const initMap = (mapLink) => {\r\n clearContent();\r\n const mapFrame = document.createElement('IFRAME');\r\n mapFrame.setAttribute(\"allfullscreen\", \"allowfullscreen\");\r\n mapFrame.setAttribute(\"src\", mapLink);\r\n mapFrame.classList.add('frameTour');\r\n openModalGlobal(mapFrame);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/engrain-map.js","import { handleOtherActions, handleAddToClipboard, handleViewMap } from \"../../../js/components/other-actions\";\r\nimport { handleSaveEvent } from \"../../../js/components/save-community\";\r\nimport { resetCookie } from \"../../../js/components/cookie-functions\";\r\nimport { initQuickViewModal } from '../../../js/components/quick-view';\r\nimport { removeFloorplan } from \"../../../js/api/saved-items\";\r\nimport { openLeaseTerm } from '../../../js/components/lease-term';\r\nimport { showLeasingInfo } from \"../../../js/components/other-actions\";\r\n\r\n// eslint-disable-next-line import/prefer-default-export\r\nexport const availableApartments = () => {\r\n const filters = document.querySelectorAll('.aa-filter');\r\n const scrollLeft = document.querySelector('[href=\"#left\"]');\r\n const scrollRight = document.querySelector('[href=\"#right\"]');\r\n const aptList = document.querySelectorAll('.available-apartments__body--apt');\r\n const closeOther = document.querySelectorAll('.other-actions-dropdown__header [href=\"#close\"]');\r\n const save = document.querySelectorAll('.apt-fav');\r\n const copy = document.querySelectorAll('.add-clipboard');\r\n const reset = document.querySelector('.reset');\r\n const availableApartmentsSection = document.querySelector('section#available-apartments');\r\n const otherActions = document.querySelectorAll('.other');\r\n const leasingInfo = document.querySelectorAll('.open-leasing-info');\r\n\r\n const floorPlanIds = [];\r\n\r\n let scrollCount = 0;\r\n let maxScroll = aptList.length;\r\n let viewWidth = 1440;\r\n\r\n const initWidth = (e) => {\r\n if(screen.width < 1440) {\r\n viewWidth = screen.width;\r\n }\r\n\r\n maxScroll = maxScroll - Math.ceil(viewWidth / 304);\r\n }\r\n\r\n window.addEventListener('resize', () => {\r\n initWidth();\r\n }, true);\r\n\r\n initWidth();\r\n\r\n const showOtherActions = (e) => {\r\n e.preventDefault();\r\n const openActions = document.querySelectorAll(\".available-apartments__body--apt.open\");\r\n openActions.forEach((item) => {\r\n if(item != e.currentTarget) item.classList.remove('open');\r\n })\r\n const availableApartmentsBody = e.currentTarget && e.currentTarget.closest(\".available-apartments__body--apt\");\r\n if (availableApartmentsBody) {\r\n availableApartmentsBody.classList.toggle('open');\r\n }\r\n handleOtherActions(e);\r\n }\r\n\r\n if (otherActions) {\r\n otherActions.forEach((item) => {\r\n item.addEventListener('click', showOtherActions);\r\n });\r\n }\r\n\r\n const applyFilter = (type) => {\r\n aptList.forEach((item) => {\r\n item.style.transform = 'translateX(0)';\r\n if(type !== 'all'){\r\n item.classList.toggle('hide', item.getAttribute('data-filter') !== type);\r\n } else {\r\n item.classList.remove('hide');\r\n }\r\n })\r\n\r\n // RESET ANY SCROLLING\r\n if(scrollLeft) {\r\n scrollLeft.classList.add('disabled');\r\n }\r\n if(scrollRight) {\r\n scrollRight.classList.remove('disabled');\r\n }\r\n scrollCount = 0;\r\n }\r\n\r\n const handleFilter = (e) => {\r\n e.preventDefault();\r\n document.querySelector('.aa-filter.active').classList.remove('active');\r\n e.currentTarget.classList.add('active');\r\n const type = e.currentTarget.dataset.type;\r\n\r\n applyFilter(type);\r\n }\r\n\r\n filters.forEach((item) => {\r\n item.addEventListener('click', handleFilter);\r\n })\r\n\r\n const handleScrollRight = (e) => {\r\n if(scrollCount < maxScroll){\r\n scrollCount++;\r\n const scrollAmt = scrollCount * 304;\r\n aptList.forEach((item) => {\r\n item.style.transform = `translateX(-${scrollAmt}px)`;\r\n })\r\n scrollLeft.classList.remove('disabled');\r\n scrollRight.classList.toggle('disabled', scrollCount === maxScroll);\r\n }\r\n }\r\n\r\n const handleScrollLeft = (e) => {\r\n if(scrollCount > 0){\r\n scrollCount--;\r\n const scrollAmt = scrollCount * 304;\r\n aptList.forEach((item) => {\r\n item.style.transform = `translateX(-${scrollAmt}px)`;\r\n })\r\n scrollRight.classList.remove('disabled');\r\n scrollLeft.classList.toggle('disabled', scrollCount === 0);\r\n }\r\n }\r\n\r\n if(scrollLeft) {\r\n scrollLeft.addEventListener('click', handleScrollLeft);\r\n }\r\n\r\n if(scrollRight) {\r\n scrollRight.addEventListener('click', handleScrollRight);\r\n }\r\n\r\n const handleClose = (e) => {\r\n e.preventDefault();\r\n const openOther = document.querySelector('.other.open');\r\n const activeDropdown = document.querySelector('.other-actions-dropdown.active');\r\n openOther.append(activeDropdown);\r\n openOther.classList.remove('open');\r\n activeDropdown.classList.remove('active');\r\n document.querySelector('.other-overlay').classList.remove('active');\r\n }\r\n\r\n closeOther.forEach((item) => {\r\n item.addEventListener('click', handleClose);\r\n })\r\n\r\n save.forEach((item) => {\r\n if(item.classList.contains('saved')) floorPlanIds.push(item.getAttribute('data-id'));\r\n item.addEventListener('click', handleSaveEvent);\r\n })\r\n\r\n copy.forEach((item) => {\r\n item.addEventListener('click', handleAddToClipboard);\r\n })\r\n\r\n if(reset){\r\n reset.addEventListener('click', () => {\r\n resetCookie();\r\n console.log('Cookie reset');\r\n })\r\n }\r\n\r\n // const openQuickViewModal = (e) => {\r\n // e.preventDefault();\r\n // const { id } = e.currentTarget.dataset;\r\n // if (id) {\r\n // initQuickViewModal(id);\r\n // }\r\n // };\r\n\r\n // const handleQuickViewModal = () => {\r\n // const openQuickViewModalButton = document.querySelectorAll(\r\n // \".open-quick-view-modal\"\r\n // );\r\n\r\n // openViewMapModalButton.forEach(quickView => {\r\n // quickView.addEventListener(\"click\", handleViewMap);\r\n // });\r\n // };\r\n\r\n const handleViewMapModal = () => {\r\n const openViewMapModalButton = document.querySelectorAll(\r\n \".open-view-map-modal\"\r\n );\r\n\r\n openViewMapModalButton.forEach(quickView => {\r\n quickView.addEventListener(\"click\", handleViewMap);\r\n });\r\n };\r\n\r\n leasingInfo.forEach((item) => {\r\n item.addEventListener(\"click\", showLeasingInfo);\r\n });\r\n\r\n handleViewMapModal();\r\n\r\n const handleQueryParams = () => {\r\n const searchParams = new URLSearchParams(window.location.search);\r\n if (searchParams.has('unit_type')) {\r\n const unitTypeValue = searchParams.get('unit_type');\r\n const tab = availableApartmentsSection.querySelector(`li > p[data-type=\"${unitTypeValue}\"].aa-filter`);\r\n if (tab) {\r\n document.querySelector('.aa-filter.active').classList.remove('active');\r\n tab.classList.add('active');\r\n applyFilter(unitTypeValue);\r\n }\r\n }\r\n }\r\n\r\n if (availableApartmentsSection) {\r\n const leaseTermsItems = availableApartmentsSection.querySelectorAll('.leasing-terms_list_item');\r\n leaseTermsItems.forEach((el) => {\r\n el.addEventListener('click', openLeaseTerm);\r\n });\r\n handleQueryParams();\r\n }\r\n\r\n // commented due to adding one listener twice\r\n // same listener is added in maa-communities controller\r\n // handleQuickViewModal();\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/available-apartments/available-apartments.js","export const getCookie = (cname) => {\r\n let name = cname + \"=\";\r\n let decodedCookie = decodeURIComponent(document.cookie);\r\n let ca = decodedCookie.split(';');\r\n for(let i = 0; i {\r\n const d = new Date();\r\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n let expires = \"expires=\"+d.toUTCString();\r\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\r\n}\r\n\r\nexport const resetCookie = () => {\r\n setCookie('maac-main','TimeZoneOffset=4&LastActivity=09/27/2023 11:22:46&ViewedCityIds=9511f2e3-9ace-45a4-9a76-6b105567a228&ViewedPropertyIds=611790','30');\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/cookie-functions.js","export const whyChoose = () => {\r\n\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/why-choose/why-choose.js","const HERO_IFRAME_ID = 'hero-gallery-iframe';\r\nconst SHOW_IFRAME_CLASS = 'property-hero-gallery-iframe-show';\r\nconst PHOTO_GALLERY_BTN_ID = 'photo_gallery_btn';\r\nconst VIDEO_GALLERY_BTN_ID = 'video_gallery_btn';\r\nconst GALLERY_360_BTN_ID = '360_gallery_btn';\r\nconst JOIN_VIP_LIST_ID = 'join-vip-list';\r\n\r\nexport const propertyHeroSlider = () => {\r\n if (!document.querySelector('.hero-slider')) return;\r\n\r\n let heroIframeContainer;\r\n let totalSlides;\r\n\r\n const prev_btn = document.querySelector('.hero-prev-slide');\r\n const next_btn = document.querySelector('.hero-next-slide');\r\n const nav_by_tag = document.querySelectorAll('.word-carousel li');\r\n\r\n if (!next_btn || !prev_btn) return;\r\n\r\n let photo_gallery_btn;\r\n let video_gallery_btn;\r\n let gallery_360_btn;\r\n let joinVIPList;\r\n\r\n function setCurrentSlide(slideNum) {\r\n const currentSlide = document.querySelector('.word-counter .current-slide');\r\n currentSlide.textContent = `${slideNum}`;\r\n }\r\n\r\n function slidesAmount() {\r\n const ul = document.querySelector('.word-carousel ul');\r\n totalSlides = !ul ? 0 : ul.children.length;\r\n const wordCounter = document.querySelector('.word-counter .total-amount');\r\n if (wordCounter) {\r\n wordCounter.textContent = `${totalSlides}`;\r\n }\r\n if(totalSlides > 0){\r\n prev_btn.classList.add('disabled');\r\n next_btn.classList.remove('disabled');\r\n } else {\r\n prev_btn.classList.add('disabled');\r\n next_btn.classList.add('disabled');\r\n }\r\n }\r\n\r\n function navigateSlide(direction) {\r\n const currentSlide = document.querySelector('.property.hero-slide.active');\r\n const currentSlideIndex = parseInt(currentSlide.getAttribute('data-slide'));\r\n\r\n let nextSlideIndex;\r\n if (direction === 'next') {\r\n nextSlideIndex = currentSlideIndex + 1;\r\n } else if (direction === 'prev') {\r\n nextSlideIndex = currentSlideIndex - 1;\r\n }\r\n\r\n next_btn.classList.toggle('disabled', nextSlideIndex >= totalSlides);\r\n prev_btn.classList.toggle('disabled', nextSlideIndex <= 1);\r\n\r\n if (totalSlides < nextSlideIndex || nextSlideIndex < 1) return;\r\n\r\n const nextSlide = document.querySelector(\r\n `.hero-slide[data-slide=\"${nextSlideIndex}\"]`\r\n );\r\n\r\n setCurrentSlide(nextSlideIndex);\r\n\r\n if (nextSlide) {\r\n currentSlide.classList.remove('active');\r\n\r\n nav_by_tag.forEach((item, index) => {\r\n if (index !== nextSlideIndex - 1) {\r\n item.classList.remove('active');\r\n } else {\r\n item.classList.add('active');\r\n }\r\n });\r\n\r\n moveSlide(nextSlideIndex);\r\n nextSlide.classList.add('active');\r\n }\r\n }\r\n\r\n function moveSlide(nextSlideIndex){\r\n let slideOffset = 0;\r\n window.setTimeout(() => {\r\n nav_by_tag.forEach((item, index) => {\r\n if(index < (nextSlideIndex - 1)) slideOffset += item.offsetWidth + 6;\r\n })\r\n\r\n nav_by_tag.forEach((item) => {\r\n item.style.transform = `translateX(${slideOffset * -1}px)`;\r\n })\r\n }, 200);\r\n }\r\n\r\n function navigateNextSlide() {\r\n navigateSlide('next');\r\n }\r\n\r\n function navigatePrevSlide() {\r\n navigateSlide('prev');\r\n }\r\n\r\n function navigateSlideByLi(li) {\r\n const slideIndex = parseInt(li.target.getAttribute('data-slide'));\r\n const slides = document.querySelectorAll('.property.hero-slide');\r\n const currentSlide = document.querySelector('.property.hero-slide.active');\r\n setCurrentSlide(slideIndex);\r\n\r\n if (slideIndex && slideIndex <= slides.length) {\r\n currentSlide.classList.remove('active');\r\n slides[slideIndex - 1].classList.add('active');\r\n }\r\n\r\n nav_by_tag.forEach((item, index) => {\r\n if (index !== slideIndex - 1) {\r\n item.classList.remove('active');\r\n } else {\r\n item.classList.add('active');\r\n }\r\n });\r\n\r\n //moveSlide(slideIndex);\r\n }\r\n\r\n function onCloseModalMessageListener(e) {\r\n if (heroIframeContainer && e.data && e.data.includes && e.data.includes('gallery-modal')) {\r\n heroIframeContainer.classList.remove(SHOW_IFRAME_CLASS);\r\n const iframe = heroIframeContainer.querySelector('iframe');\r\n if (iframe) {\r\n iframe.remove();\r\n }\r\n document.body.style.overflow = 'auto';\r\n heroIframeContainer.innerHTML = '';\r\n window.removeEventListener('message', onCloseModalMessageListener);\r\n }\r\n }\r\n\r\n function createGalleryIframe(iframeSrc) {\r\n const iframe = document.createElement('iframe');\r\n iframe.src = iframeSrc;\r\n const divLoader = document.createElement('div');\r\n iframe.addEventListener('load', (e) => {\r\n divLoader.remove();\r\n })\r\n divLoader.classList.add('loader');\r\n divLoader.classList.add('active');\r\n divLoader.appendChild(document.createElement('span'));\r\n divLoader.appendChild(document.createElement('span'));\r\n divLoader.appendChild(document.createElement('span'));\r\n heroIframeContainer.appendChild(divLoader);\r\n heroIframeContainer.appendChild(iframe);\r\n heroIframeContainer.classList.add(SHOW_IFRAME_CLASS);\r\n document.body.style.overflow = 'hidden';\r\n window.addEventListener('message', onCloseModalMessageListener);\r\n }\r\n\r\n function onPhotoGalleryClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n let iframeSrc =\r\n photo_gallery_btn && photo_gallery_btn.getAttribute('data-iframe-url');\r\n if (heroIframeContainer && iframeSrc) {\r\n createGalleryIframe(iframeSrc);\r\n }\r\n }\r\n\r\n function onVideoGalleryClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n let iframeSrc =\r\n video_gallery_btn && video_gallery_btn.getAttribute('data-iframe-url');\r\n if (heroIframeContainer && iframeSrc) {\r\n createGalleryIframe(iframeSrc);\r\n }\r\n }\r\n\r\n function onGallery360Click(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n let iframeSrc =\r\n gallery_360_btn && gallery_360_btn.getAttribute('data-iframe-url');\r\n if (heroIframeContainer && iframeSrc) {\r\n createGalleryIframe(iframeSrc);\r\n }\r\n }\r\n\r\n function onJoinVipListClick() {\r\n const leaseUpForm = document.querySelector('section#lease-up-form');\r\n if (leaseUpForm) {\r\n if (leaseUpForm.classList.contains('show')) {\r\n leaseUpForm.classList.remove('show');\r\n } else {\r\n leaseUpForm.classList.add('show');\r\n let position = leaseUpForm.getBoundingClientRect();\r\n window.scrollTo({\r\n left: position.left,\r\n top: position.top + window.scrollY - 150,\r\n behavior: 'smooth',\r\n });\r\n document.dispatchEvent(new CustomEvent('leasUpFormOpened', {\r\n bubbles: true,\r\n }));\r\n }\r\n }\r\n }\r\n\r\n slidesAmount();\r\n photo_gallery_btn = document.getElementById(PHOTO_GALLERY_BTN_ID);\r\n video_gallery_btn = document.getElementById(VIDEO_GALLERY_BTN_ID);\r\n gallery_360_btn = document.getElementById(GALLERY_360_BTN_ID);\r\n joinVIPList = document.getElementById(JOIN_VIP_LIST_ID);\r\n heroIframeContainer = document.getElementById(HERO_IFRAME_ID);\r\n\r\n if (photo_gallery_btn) {\r\n photo_gallery_btn.addEventListener('click', onPhotoGalleryClick);\r\n }\r\n\r\n // if (video_gallery_btn) {\r\n // video_gallery_btn.addEventListener('click', onVideoGalleryClick);\r\n // }\r\n\r\n if (gallery_360_btn) {\r\n gallery_360_btn.addEventListener('click', onGallery360Click);\r\n }\r\n\r\n if (joinVIPList) {\r\n joinVIPList.addEventListener('click', onJoinVipListClick);\r\n }\r\n\r\n next_btn.addEventListener('click', navigateNextSlide);\r\n prev_btn.addEventListener('click', navigatePrevSlide);\r\n\r\n nav_by_tag.forEach((item) => {\r\n item.addEventListener('click', navigateSlideByLi);\r\n });\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/property-hero-gallery/property-hero-gallery.js","const VIDEO_GALLERY_PLAYER_ID = 'video-gallery-iframe';\r\nconst DATA_VIDEO_URL = 'data-iframe-url';\r\nconst ACTIVE_VIDEO = 'video-gallery_video-list_item-active';\r\n\r\nexport const videoGallery = () => {\r\n let videos = [];\r\n let player;\r\n\r\n const onVideoClickHandler = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const videoUrl = e.currentTarget && e.currentTarget.getAttribute(DATA_VIDEO_URL);\r\n if (videoUrl && player) {\r\n player.src = videoUrl;\r\n videos.forEach(video => {\r\n if (video.classList.contains(ACTIVE_VIDEO)) {\r\n video.classList.remove(ACTIVE_VIDEO);\r\n }\r\n })\r\n e.currentTarget.classList.add(ACTIVE_VIDEO);\r\n }\r\n }\r\n\r\n const initListeners = () => {\r\n if (videos.length) {\r\n videos.forEach(video => {\r\n video.addEventListener('click', onVideoClickHandler);\r\n })\r\n }\r\n }\r\n\r\n const init = () => {\r\n videos = [...document.querySelectorAll('.video-gallery_video-list_item')];\r\n player = document.getElementById(VIDEO_GALLERY_PLAYER_ID);\r\n initListeners();\r\n }\r\n\r\n init();\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/video-gallery/video-gallery.js","const GALLERY_360_PLAYER_ID = 'gallery-360-iframe';\r\nconst DATA_VIDEO_URL = 'data-iframe-url';\r\nconst ACTIVE_TOUR = 'gallery-360_list_item-active';\r\n\r\nexport const gallery360 = () => {\r\n let tours = [];\r\n let player;\r\n\r\n const on360ClickHandler = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const iframeUrl = e.currentTarget && e.currentTarget.getAttribute(DATA_VIDEO_URL);\r\n if (iframeUrl && player) {\r\n player.src = iframeUrl;\r\n tours.forEach(video => {\r\n if (video.classList.contains(ACTIVE_TOUR)) {\r\n video.classList.remove(ACTIVE_TOUR);\r\n }\r\n })\r\n e.currentTarget.classList.add(ACTIVE_TOUR);\r\n }\r\n }\r\n\r\n const initListeners = () => {\r\n if (tours.length) {\r\n tours.forEach(video => {\r\n video.addEventListener('click', on360ClickHandler);\r\n })\r\n }\r\n }\r\n\r\n const init = () => {\r\n tours = [...document.querySelectorAll('.gallery-360_list_item')];\r\n player = document.getElementById(GALLERY_360_PLAYER_ID);\r\n initListeners();\r\n }\r\n\r\n init();\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/360-gallery/360-gallery.js","const openFeaturesModal = (e) => {\r\n e.preventDefault();\r\n const featuresModal = document.querySelector('#features-modal');\r\n featuresModal.classList.add('active');\r\n document.body.classList.add('body--scroll-locked');\r\n};\r\n\r\nconst closeFeaturesModal = () => {\r\n const featuresModal = document.querySelector('#features-modal');\r\n featuresModal.classList.remove('active');\r\n document.body.classList.remove('body--scroll-locked');\r\n};\r\n\r\nexport const handleFeaturesModal = () => {\r\n const featuresModal = document.querySelector('#features-modal');\r\n if (!featuresModal) return;\r\n\r\n const openFeaturesModalButton = document.querySelector(\r\n '.open-features-modal'\r\n );\r\n const closeFeaturesModalButton = document.querySelector(\r\n '#close-features-modal'\r\n );\r\n\r\n closeFeaturesModalButton.addEventListener('click', closeFeaturesModal);\r\n\r\n featuresModal.addEventListener('click', (event) => {\r\n if (event.target === featuresModal) {\r\n closeFeaturesModal();\r\n }\r\n });\r\n\r\n openFeaturesModalButton.addEventListener('click', openFeaturesModal);\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/property-perks/property-perks.js","export const verticalCarousel = () => {\r\n const scrollArea = document.getElementById('vertical-carousel_slides');\r\n if (scrollArea) {\r\n scrollArea.addEventListener('touchstart', () => {\r\n if (!isTouchedBottom(scrollArea) && !isTouchedTop(scrollArea)) {\r\n scrollArea.style.overscrollBehavior = 'none';\r\n } else {\r\n scrollArea.style.overscrollBehavior = 'auto';\r\n }\r\n });\r\n\r\n scrollArea.addEventListener('touchend', () => {\r\n if (isTouchedBottom(scrollArea) || isTouchedTop(scrollArea)) {\r\n scrollArea.style.overscrollBehavior = 'auto';\r\n } else {\r\n scrollArea.style.overscrollBehavior = 'none';\r\n }\r\n });\r\n }\r\n\r\n const isTouchedTop = (el) => {\r\n return el.scrollTop === 0;\r\n }\r\n const isTouchedBottom = (el) => {\r\n return (el.scrollTop + el.clientHeight) === el.scrollHeight;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/vertical-carousel/vertical-carousel.js","export const handleComplexLayoutCarousel = () => {\r\n const slidesList = document.querySelectorAll('.carousel-items-list li');\r\n const imagesList = document.querySelectorAll('.carousel-image-grid');\r\n const textList = document.querySelectorAll('.carousel-items-text .item-text');\r\n\r\n const setActiveSlide = (el) => {\r\n const slideIndex = parseInt(el.target.getAttribute('data-slide'));\r\n\r\n slidesList.forEach((item, index) => {\r\n item.classList.toggle('active', index === slideIndex - 1);\r\n });\r\n\r\n handleActiveImage(slideIndex);\r\n handleActiveText(slideIndex);\r\n };\r\n\r\n const handleActiveImage = (slideNum) => {\r\n imagesList.forEach((item, index) => {\r\n item.classList.toggle('active', index === slideNum - 1);\r\n });\r\n };\r\n\r\n const handleActiveText = (slideNum) => {\r\n textList.forEach((item, index) => {\r\n item.classList.toggle('active', index === slideNum - 1);\r\n });\r\n };\r\n\r\n slidesList.forEach((item) => {\r\n item.addEventListener('click', setActiveSlide);\r\n });\r\n\r\n const init = () => {\r\n imagesList.forEach((image) => {\r\n if (image.childElementCount === 3) {\r\n image.classList.add('three-item-layout');\r\n } else if (image.childElementCount === 2) {\r\n image.classList.add('two-item-layout');\r\n } else if (image.childElementCount === 1) {\r\n image.classList.add('one-item-layout');\r\n }\r\n });\r\n }\r\n\r\n init();\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/complex-layout-carousel/complex-layout-carousel.js","import { getAllSavedItems } from \"../../../js/api/saved-items\";\r\nimport { addToCompare, getComparedItems, handleAddToCompare } from '../../../js/api/compare';\r\nimport { closeQuickAction, handleOtherActions, handleViewMap } from '../../../js/components/other-actions';\r\nimport { handleSaveEvent } from \"../../../js/components/save-community\";\r\nimport { addToastMessage } from '../../../js/components/toast';\r\nimport { openLeaseTerm } from '../../../js/components/lease-term';\r\nimport { getViewComparisonLink } from '../../../js/modules/utilities';\r\nimport { addToCompareHandler } from '../../../js/components/quick-view';\r\n\r\nconst SAVED_ITEMS_CONTAINER_ID = 'saved-items-container';\r\nconst SAVED_ITEMS_COMMUNITIES_LIST_ID = 'saved-items-communities-list';\r\nconst SAVED_ITEMS_FLOORPLANS_LIST_ID = 'saved-items-floorplans-list';\r\nconst COMMUNITIES_ARROW_LEFT_ID = 'saved-items-communities-arrow-left';\r\nconst COMMUNITIES_ARROW_RIGHT_ID = 'saved-items-communities-arrow-right';\r\nconst FLOORPLAN_ARROW_LEFT_ID = 'saved-items-floorplan-arrow-left';\r\nconst FLOORPLAN_ARROW_RIGHT_ID = 'saved-items-floorplan-arrow-right';\r\nconst SAVED_ITEMS_COMMUNITIES_EMPTY_ID = 'saved-items-communities-empty';\r\nconst SAVED_ITEMS_FLOORPLANS_EMPTY_ID = 'saved-items-floorplans-empty';\r\n\r\nexport const savedItems = () => {\r\n\r\n const savedItemsContainer = document.getElementById(SAVED_ITEMS_CONTAINER_ID);\r\n const communitiesList = document.getElementById(SAVED_ITEMS_COMMUNITIES_LIST_ID);\r\n const communityArrowLeft = document.getElementById(COMMUNITIES_ARROW_LEFT_ID);\r\n const communityArrowRight = document.getElementById(COMMUNITIES_ARROW_RIGHT_ID);\r\n\r\n const floorplansList = document.getElementById(SAVED_ITEMS_FLOORPLANS_LIST_ID);\r\n const floorplanArrowLeft = document.getElementById(FLOORPLAN_ARROW_LEFT_ID);\r\n const floorplanArrowRight = document.getElementById(FLOORPLAN_ARROW_RIGHT_ID);\r\n const communitiesEmptyArea = document.getElementById(SAVED_ITEMS_COMMUNITIES_EMPTY_ID);\r\n const floorplansEmptyArea = document.getElementById(SAVED_ITEMS_FLOORPLANS_EMPTY_ID);\r\n let savedItemsBackBtn;\r\n\r\n if (savedItemsContainer) {\r\n savedItemsBackBtn = savedItemsContainer.querySelector('#saved-items-back');\r\n }\r\n\r\n const communitiesArrowCounter = {\r\n value: 0,\r\n };\r\n\r\n const floorplansArrowCounter = {\r\n value: 0,\r\n };\r\n\r\n const onSavedItemsContainerClickHandler = (e) => {\r\n e.stopPropagation();\r\n }\r\n\r\n const addToCompareClickListener = (e, communityEl, community) => {\r\n e.stopPropagation();\r\n const id = e.currentTarget && e.currentTarget.dataset && e.currentTarget.dataset.id;\r\n if (id) {\r\n handleAddToCompare(e)\r\n .then((res) => {\r\n if (res !== false) {\r\n const addToCompareBtn = communityEl.querySelector('.plus-btn');\r\n if (addToCompareBtn) {\r\n addToCompareBtn.remove();\r\n }\r\n const actionsDiv = communityEl.querySelector('.saved-items-content__communities-list__item-actions');\r\n if (actionsDiv) {\r\n const div = document.createElement('div');\r\n div.classList.add('added-to-compare');\r\n div.innerHTML = `\r\n \r\n Added to Compare\r\n `;\r\n actionsDiv.appendChild(div);\r\n }\r\n const props = {\r\n body: `${community.PropertyName} added to your Compare list`,\r\n imgSrc: community.Image,\r\n };\r\n const comparisonPageUrl = getViewComparisonLink();\r\n if (comparisonPageUrl) {\r\n props.btnText = 'View';\r\n props.btnHref = comparisonPageUrl;\r\n }\r\n addToastMessage(props);\r\n }\r\n });\r\n }\r\n }\r\n\r\n const initCommunities = (communities = []) => {\r\n communitiesArrowCounter.value = 0;\r\n if (communitiesList) {\r\n communitiesList.scrollLeft = 0;\r\n if (communitiesList.children) {\r\n [...communitiesList.children].forEach(child => {\r\n child.remove();\r\n })\r\n }\r\n communities.forEach((community) => {\r\n const div = document.createElement('div');\r\n div.classList.add('saved-items-content__communities-list__item');\r\n div.innerHTML = `\r\n \r\n \"\"\r\n ${community.Neighborhood ?\r\n `
    ${community.Neighborhood}
    `\r\n : ''}\r\n

    ${community.PropertyName}

    \r\n
    \r\n
    \r\n \r\n \r\n \r\n ${community.IsCompare ?\r\n `\r\n
    \r\n \r\n Added to Compare\r\n
    \r\n ` :\r\n `\r\n
    \r\n \r\n
    \r\n `\r\n }\r\n
    \r\n `;\r\n communitiesList.appendChild(div);\r\n div.querySelector('.apt-fav')\r\n .addEventListener('click', (e) => {\r\n handleSaveEvent(e);\r\n div.classList.add('remove');\r\n div.addEventListener('transitionend', () => {\r\n div.remove();\r\n renderCommunityArrows();\r\n checkIfEmpty();\r\n // decreaseCounter();\r\n });\r\n })\r\n const addToCompareBtn = div.querySelector('.plus-btn');\r\n if (addToCompareBtn) {\r\n addToCompareBtn.addEventListener('click', (e) => addToCompareClickListener(e, div, community));\r\n }\r\n });\r\n }\r\n if (communitiesEmptyArea) {\r\n if (communities.length > 0) {\r\n communitiesEmptyArea.classList.remove('show');\r\n } else {\r\n communitiesEmptyArea.classList.add('show');\r\n }\r\n }\r\n }\r\n\r\n const initFloorplans = (floorplans = []) => {\r\n floorplansArrowCounter.value = 0;\r\n if (floorplansList) {\r\n if (floorplansList.children) {\r\n [...floorplansList.children].forEach(child => {\r\n child.remove();\r\n })\r\n }\r\n floorplans.forEach((floorplan) => {\r\n const div = document.createElement('div');\r\n div.classList.add('saved-items-content__floorplans-list__item');\r\n if (floorplan.IsAvailable === true) {\r\n div.innerHTML = `\r\n \r\n \"\"\r\n
    ${(floorplan.Neighborhood !== null && floorplan.Neighborhood !== undefined) ? floorplan.Neighborhood : ''}
    \r\n

    ${floorplan.PropertyName}

    \r\n
    \r\n

    Unit #${floorplan.FloorplanName}

    \r\n
    \r\n ${floorplan.UnitType}\r\n $${floorplan.Price}\r\n
    \r\n
    \r\n Move-in\r\n ${floorplan.MoveInDate}\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n `;\r\n }\r\n else {\r\n div.innerHTML = `\r\n \r\n \"\"\r\n
    ${(floorplan.Neighborhood !== null && floorplan.Neighborhood !== undefined) ? floorplan.Neighborhood : ''}
    \r\n

    ${floorplan.PropertyName}

    \r\n
    \r\n
    \r\n ${floorplan.UnitType}\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n `;\r\n }\r\n\r\n div.querySelector('.apt-fav').addEventListener('click', (e) => {\r\n handleSaveEvent(e);\r\n div.classList.add('remove');\r\n div.addEventListener('transitionend', () => {\r\n div.remove();\r\n renderFloorplansArrows();\r\n checkIfEmpty();\r\n });\r\n });\r\n\r\n if (floorplan.IsAvailable === true) {\r\n div.querySelector('.other').addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n let x = e.clientX;\r\n let y = e.clientY;\r\n handleOtherActions(e);\r\n const otherAction = e.currentTarget.querySelector('.active');\r\n if (otherAction) {\r\n otherAction.style.left = `${x}px`;\r\n otherAction.style.position = 'fixed';\r\n otherAction.style.top = `${y - 280}px`;\r\n }\r\n });\r\n\r\n div.querySelector('.leasing-terms_list_item').addEventListener('click', (e) => {\r\n openLeaseTerm(e);\r\n });\r\n\r\n div.querySelector(\".open-view-map-modal\").addEventListener('click', (e) => {\r\n handleViewMap(e);\r\n });\r\n }\r\n\r\n if (savedItemsContainer) {\r\n savedItemsContainer.addEventListener('click', closeQuickAction);\r\n }\r\n\r\n floorplansList.appendChild(div);\r\n });\r\n floorplansList.scrollLeft = 0;\r\n }\r\n if (floorplansEmptyArea) {\r\n if (floorplans.length > 0) {\r\n floorplansEmptyArea.classList.remove('show');\r\n } else {\r\n floorplansEmptyArea.classList.add('show');\r\n }\r\n }\r\n }\r\n\r\n const checkIfEmpty = () => {\r\n if (communitiesList && communitiesList.children && communitiesList.children.length === 0) {\r\n communitiesEmptyArea.classList.add('show');\r\n }\r\n if (floorplansList && floorplansList.children && floorplansList.children.length === 0) {\r\n floorplansEmptyArea.classList.add('show');\r\n }\r\n }\r\n\r\n const savedItemsOpenHandler = async () => {\r\n const savedItems = await getAllSavedItems();\r\n initCommunities(savedItems.communities);\r\n initFloorplans(savedItems.floorplans);\r\n renderCommunityArrows();\r\n renderFloorplansArrows();\r\n }\r\n\r\n const onCommunityArrowLeftClick = (e) => {\r\n e.stopPropagation();\r\n if (communitiesList) {\r\n communitiesList.scrollBy({\r\n top: 0,\r\n left: -152,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n\r\n const onCommunityArrowRightClick = (e) => {\r\n e.stopPropagation();\r\n if (communitiesList) {\r\n communitiesList.scrollBy({\r\n top: 0,\r\n left: 152,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n\r\n const onFloorplansArrowLeftClick = (e) => {\r\n e.stopPropagation();\r\n if (floorplansList) {\r\n floorplansList.scrollBy({\r\n top: 0,\r\n left: -152,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n\r\n const onFloorplansArrowRightClick = (e) => {\r\n e.stopPropagation();\r\n if (floorplansList) {\r\n floorplansList.scrollBy({\r\n top: 0,\r\n left: 152,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n\r\n const renderCommunityArrows = () => {\r\n if (communitiesList) {\r\n const canScrollLeft = communitiesList.scrollLeft > 0;\r\n const canScrollRight = communitiesList.scrollLeft !== communitiesList.scrollWidth - communitiesList.clientWidth;\r\n if (canScrollLeft && communityArrowLeft) {\r\n communityArrowLeft.classList.add('active')\r\n } else if (communityArrowLeft) {\r\n communityArrowLeft.classList.remove('active');\r\n }\r\n if (canScrollRight && communityArrowRight) {\r\n communityArrowRight.classList.add('active');\r\n } else if (communityArrowRight) {\r\n communityArrowRight.classList.remove('active');\r\n }\r\n }\r\n }\r\n\r\n const renderFloorplansArrows = () => {\r\n if (floorplansList) {\r\n const canScrollLeft = floorplansList.scrollLeft > 0;\r\n const canScrollRight = floorplansList.scrollLeft !== floorplansList.scrollWidth - floorplansList.clientWidth;\r\n if (canScrollLeft && floorplanArrowLeft) {\r\n floorplanArrowLeft.classList.add('active')\r\n } else if (floorplanArrowLeft) {\r\n floorplanArrowLeft.classList.remove('active');\r\n }\r\n if (canScrollRight && floorplanArrowRight) {\r\n floorplanArrowRight.classList.add('active');\r\n } else if (floorplanArrowRight) {\r\n floorplanArrowRight.classList.remove('active');\r\n }\r\n }\r\n\r\n }\r\n\r\n const closeSavedItemsContainer = () => {\r\n if (savedItemsContainer) {\r\n savedItemsContainer.classList.remove('show');\r\n }\r\n }\r\n\r\n const init = () => {\r\n if (savedItemsContainer) {\r\n savedItemsContainer.addEventListener('click', onSavedItemsContainerClickHandler);\r\n savedItemsContainer.addEventListener('savedItemsOpened', savedItemsOpenHandler);\r\n }\r\n if (communityArrowLeft) {\r\n communityArrowLeft.addEventListener('click', onCommunityArrowLeftClick)\r\n }\r\n if (communityArrowRight) {\r\n communityArrowRight.addEventListener('click', onCommunityArrowRightClick)\r\n }\r\n if (floorplanArrowLeft) {\r\n floorplanArrowLeft.addEventListener('click', onFloorplansArrowLeftClick)\r\n }\r\n if (floorplanArrowRight) {\r\n floorplanArrowRight.addEventListener('click', onFloorplansArrowRightClick)\r\n }\r\n if (communitiesList) {\r\n communitiesList.addEventListener('scrollend', renderCommunityArrows);\r\n }\r\n if (floorplansList) {\r\n floorplansList.addEventListener('scrollend', renderFloorplansArrows);\r\n }\r\n if (savedItemsBackBtn) {\r\n savedItemsBackBtn.addEventListener('click', closeSavedItemsContainer);\r\n }\r\n }\r\n\r\n init();\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/saved-items/saved-items.js","export const footer = () => {\r\n\r\n const footer = document.querySelector('footer');\r\n const MQL = window.matchMedia('(min-width: 768px)');\r\n\r\n let desktopColumns;\r\n let mobileColumns;\r\n let height;\r\n let offset;\r\n\r\n if (footer) {\r\n const dropdown = footer.querySelector('.js-communities-dropdown');\r\n const communitiesList = footer.querySelector('.js-communities-list');\r\n MQL.addListener(resizeHandler);\r\n\r\n function resizeHandler() {\r\n desktopColumns = (MQL.matches) ? 4 : 2;\r\n mobileColumns = (MQL.matches) ? 4 : 1;\r\n offset = (MQL.matches) ? 150 : 100;\r\n dropdown.classList.remove('open');\r\n communitiesList.classList.remove('show');\r\n }\r\n resizeHandler();\r\n\r\n function updateColumns() {\r\n let newHeight = height / desktopColumns + offset;\r\n communitiesList.style.height = newHeight + 'px';\r\n }\r\n\r\n const dropdownClickListener = (e) => {\r\n e.stopPropagation();\r\n dropdown.classList.toggle('open');\r\n communitiesList.classList.toggle('show');\r\n communitiesList.style.height = 'auto';\r\n height = communitiesList.getBoundingClientRect().height;\r\n updateColumns();\r\n }\r\n\r\n if (dropdown) {\r\n dropdown.addEventListener('click', dropdownClickListener);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/footer/footer.js","import { addToastMessage } from '../../../js/components/toast';\r\nimport { handQueryParams, initPerqButtonsHandler } from '../../../js/components/perq-controller';\r\nimport { handleAddToCompare } from '../../../js/api/compare';\r\nimport { initAppointment } from '../schedule-appointment/schedule-appointment';\r\nimport { shareModal } from '../../../js/components/share-modal';\r\nimport { initDNI } from '../../../js/api/dni';\r\n\r\nconst propertyDetailsEl = document.querySelector('section.property-details');\r\n\r\nexport const propertyDetails = () => {\r\n if (propertyDetailsEl) {\r\n const addToCompareBtn = propertyDetailsEl.querySelector(`#add-to-compare-btn`);\r\n const propertyAddress = propertyDetailsEl.querySelector('#property-address');\r\n const printBtn = propertyDetailsEl.querySelector('#print-btn');\r\n if (addToCompareBtn) {\r\n addToCompareBtn.addEventListener('click', addToCompareClickHandler);\r\n }\r\n if (propertyAddress) {\r\n propertyAddress.addEventListener('click', addressClickHandler);\r\n }\r\n if (printBtn) {\r\n printBtn.addEventListener('click', printHandler);\r\n }\r\n initPerqButtonsHandler(propertyDetailsEl);\r\n shareModal();\r\n window.addEventListener('beforeprint', function () {\r\n beforePrint();\r\n });\r\n window.addEventListener('afterprint', function () {\r\n afterPrint();\r\n });\r\n }\r\n}\r\n\r\nconst beforePrint = () => {\r\n document.body.classList.add('print-pdp');\r\n}\r\n\r\nconst afterPrint = () => {\r\n document.body.classList.remove('print-pdp');\r\n}\r\n\r\nconst addressClickHandler = (e) => {\r\n e.preventDefault();\r\n if (e.currentTarget.innerHTML) {\r\n window.open(e.currentTarget.href, '_blank');\r\n }\r\n}\r\n\r\nconst printHandler = () => {\r\n window.print();\r\n}\r\n\r\nconst addToCompareClickHandler = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleAddToCompare(e)\r\n .then(() => {\r\n let body;\r\n if (e.currentTarget.classList.contains('compared')) {\r\n body = 'Added to your Compare list';\r\n } else {\r\n body = 'Removed from your Compare list';\r\n }\r\n addToastMessage({\r\n body,\r\n });\r\n })\r\n}\r\n\r\nconst dniPhone = document.querySelector('.DCRPhoneHref')\r\nif(dniPhone) initDNI(dniPhone.getAttribute('data-dniId'));\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/property-details-component/property-details-component.js","import { loadRecaptcha } from './load_recaptcha.js';\r\nimport { copyTextToClipboard } from '../modules/utilities';\r\n\r\nexport const shareModal = () => {\r\n const OPEN_CLASS = 'open';\r\n const shareModal = document.querySelector('.share-modal');\r\n const shareOverlay = document.querySelector('.share-modal-overlay');\r\n const shareBtn = document.querySelectorAll('.js-open-share-btn');\r\n const closeIcon = document.querySelector('.js-close-share-btn');\r\n const closeBtn = document.querySelector('.input-actions__close');\r\n const emailBtn = document.querySelector('.share-modal__actions-email');\r\n const linkBtn = document.querySelector('.share-modal__actions-link');\r\n const sendBtn = document.querySelector('.input-actions__send');\r\n const propertyIds = document.querySelector('[name=\"propertyIds\"]');\r\n\r\n if (shareBtn) {\r\n\r\n shareBtn.forEach((elem, index) => {\r\n elem.addEventListener('click', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n if(!this.classList.contains('disabled')){\r\n loadRecaptcha();\r\n\r\n propertyIds.value = this.getAttribute('data-share');\r\n elem.classList.add(OPEN_CLASS);\r\n shareModal.classList.add(OPEN_CLASS);\r\n shareOverlay.classList.add(OPEN_CLASS);\r\n closeIcon.addEventListener('click', closeOverlay);\r\n closeBtn.addEventListener('click', closeOverlay);\r\n emailBtn.addEventListener('click', showEmail);\r\n linkBtn.addEventListener('click', showLink);\r\n sendBtn.addEventListener('click', sendEmail);\r\n\r\n\r\n };\r\n });\r\n });\r\n }\r\n\r\n if (sendBtn) {\r\n sendBtn.addEventListener('click', sendEmail);\r\n }\r\n\r\n function closeOverlay() {\r\n shareBtn.forEach((elem) => {\r\n elem.classList.remove(OPEN_CLASS);\r\n });\r\n\r\n shareModal.classList.remove(OPEN_CLASS);\r\n shareOverlay.classList.remove(OPEN_CLASS);\r\n\r\n var tabs = document.querySelectorAll('.share-modal__tab');\r\n tabs.forEach((elem, index) => {\r\n if (index == 0) {\r\n elem.classList.add('selected');\r\n } else {\r\n elem.classList.remove('selected');\r\n }\r\n });\r\n clearForm();\r\n }\r\n\r\n function showEmail() {\r\n showTab(this.getAttribute('data-view'));\r\n }\r\n\r\n function showLink() {\r\n copyLink();\r\n showTab(this.getAttribute('data-view'));\r\n }\r\n\r\n function showTab(tab) {\r\n var tabs = document.querySelectorAll('.share-modal__tab');\r\n\r\n tabs.forEach((elem, index) => {\r\n if (elem.classList.contains(tab)) {\r\n elem.classList.add('selected');\r\n } else {\r\n elem.classList.remove('selected');\r\n }\r\n });\r\n }\r\n\r\n function copyLink() {\r\n console.log('copyLink');\r\n const text = window.location.href;\r\n copyTextToClipboard(text);\r\n }\r\n\r\n function sendEmail() {\r\n var valid = true;\r\n var fName = document.querySelector('[name=\"first_name\"]');\r\n var lName = document.querySelector('[name=\"last_name\"]');\r\n var tAddress = document.querySelector('[name=\"send_to\"]');\r\n var fAddress = document.querySelector('[name=\"send_from\"]');\r\n var mailformat = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/;\r\n\r\n if (fName.value.length < 1) {\r\n valid = false;\r\n fName.classList.add('not-valid');\r\n } else {\r\n fName.classList.remove('not-valid');\r\n }\r\n\r\n if (lName.value.length < 1) {\r\n valid = false;\r\n lName.classList.add('not-valid');\r\n } else {\r\n lName.classList.remove('not-valid');\r\n }\r\n\r\n if (tAddress.value.length < 1) {\r\n valid = false;\r\n tAddress.classList.add('not-valid');\r\n } else if (!tAddress.value.match(mailformat)) {\r\n valid = false;\r\n tAddress.classList.add('not-valid');\r\n } else {\r\n tAddress.classList.remove('not-valid');\r\n }\r\n\r\n if (fAddress.value.length < 1) {\r\n valid = false;\r\n fAddress.classList.add('not-valid');\r\n } else if (!fAddress.value.match(mailformat)) {\r\n valid = false;\r\n fAddress.classList.add('not-valid');\r\n } else {\r\n fAddress.classList.remove('not-valid');\r\n }\r\n\r\n if (valid) {\r\n\r\n var data = {};\r\n data.firstName = fName.value.replace(\"&\",\"and\").replace(\"?\",\".\").replace(\"//\",\"|\");\r\n data.lastName = lName.value.replace(\"&\", \"and\").replace(\"?\", \".\").replace(\"//\", \"|\");\r\n data.fromAddress = fAddress.value.replace(\"&\", \"and\").replace(\"?\", \".\").replace(\"//\", \"|\");\r\n data.toAddress = tAddress.value.replace(\"&\", \"and\").replace(\"?\", \".\").replace(\"//\", \"|\");\r\n data.message = document.querySelector('[name=\"send_message\"]').value.replace(\"&\", \"and\").replace(\"?\", \".\").replace(\"//\", \"|\");\r\n data.shareUrl = window.location.href;\r\n data.propertyids = document.querySelector('[name=\"propertyIds\"]').value;\r\n data.isPdp = document.querySelector('[name=\"isPdp\"]').value;\r\n data.licenseNumber = document.querySelector('[name=\"licenseNumber\"]').value;\r\n\r\n const recap = document.querySelector('.share-modal .g-recaptcha');\r\n\r\n if(recap){\r\n const reid = recap.getAttribute('data-reid');\r\n data.grecaptchaResponse = grecaptcha.getResponse(recaptchaIds[reid]);\r\n }\r\n\r\n console.log('data');\r\n console.log(data);\r\n\r\n console.log('shareModal.dataset.url');\r\n console.log(shareModal.dataset.url);\r\n\r\n if (shareModal.dataset.url) {\r\n $.ajax({\r\n url: shareModal.dataset.url,\r\n type: \"POST\",\r\n data: data\r\n }).then(function (x) {\r\n if (x) {\r\n closeOverlay();\r\n } else {\r\n //console.log('Endpoint returned: ' + x);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n function clearForm() {\r\n document.querySelector('[name=\"send_message\"]').value = \"\";\r\n }\r\n};\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/share-modal.js","import { openModalGlobal } from '../../../js/components/modal';\r\nimport { handleViewMap } from '../../../js/components/other-actions';\r\n\r\nconst VIEW_ALL_BTN_ID = 'view-all-apartment-features-btn';\r\nconst VIEW_PROP_MAP_ID = 'view-property-map-btn';\r\n\r\nexport const propertyFeatures = () => {\r\n\r\n const viewAllBtnHandler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const featureDetails = e.currentTarget.closest('.features-details');\r\n if (featureDetails) {\r\n const titleEl = featureDetails.querySelector('h2');\r\n const listEl = featureDetails.querySelector('ul');\r\n const div = document.createElement('div');\r\n div.classList.add('property-modal-content');\r\n div.appendChild(titleEl.cloneNode(true));\r\n div.appendChild(listEl.cloneNode(true));\r\n openModalGlobal(div, 'auto');\r\n }\r\n }\r\n\r\n document.querySelectorAll(`#${VIEW_ALL_BTN_ID}`).forEach((btn) => {\r\n btn.addEventListener('click', viewAllBtnHandler);\r\n });\r\n\r\n document.querySelectorAll(`#${VIEW_PROP_MAP_ID}`).forEach((btn) => {\r\n btn.addEventListener('click', handleViewMap);\r\n });\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/property-features/property-features.js","import { hideCloseBtn } from \"../../../js/components/modal\";\r\nimport { showCloseBtn } from \"../../../js/components/modal\";\r\nimport { defaultSwiperOptions, isMobile } from '../../../js/modules/utilities';\r\n\r\nconst CURRENT_IMAGE = 'current-image-counter';\r\nconst IMAGE_COUNT = 'image-count';\r\n\r\nconst PHOTO_GALLERY_SWIPER_ID = 'photo-gallery__swiper';\r\nconst MOBILE_VIEW_BTN_ID = 'photo-gallery-mobile-view-btn';\r\nconst PHOTO_GALLEY_ID = 'photo-gallery';\r\nconst MOBILE_BACK_BTN_ID = 'photo-gallery-back-btn';\r\n\r\nlet imageSwiper;\r\nlet imageSlides = [];\r\nlet currentImageCounter;\r\nlet imageCount;\r\nlet mobileViewBtn;\r\nlet photoGallery;\r\nlet swiper;\r\n\r\nconst mobileViewClassnames = ['photo-gallery-grid-view', 'photo-gallery-list-view', 'photo-gallery-slider-view'];\r\nconst mobileViewOptions = {\r\n grid: {\r\n name: 'grid',\r\n className: mobileViewClassnames[0],\r\n },\r\n list: {\r\n name: 'list',\r\n className: mobileViewClassnames[1],\r\n },\r\n slider: {\r\n name: 'slider',\r\n className: mobileViewClassnames[2],\r\n },\r\n}\r\nlet prevMobileView;\r\nlet currentMobileView = {\r\n _value: '',\r\n get value() {\r\n return this._value;\r\n },\r\n set value(viewOption) {\r\n prevMobileView = this._value;\r\n this._value = viewOption;\r\n updateMobileGalleryView();\r\n },\r\n};\r\n\r\nconst onMobileBackBtnClick = (e) => {\r\n e.stopPropagation();\r\n currentMobileView.value = prevMobileView;\r\n}\r\n\r\nconst onImageMobileClick = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n currentMobileView.value = mobileViewOptions.slider;\r\n if (swiper && e.target) {\r\n swiper.slideTo(e.target.dataset.id);\r\n }\r\n\r\n}\r\n\r\nconst setCounterValue = (value) => {\r\n if (currentImageCounter && value) {\r\n currentImageCounter.innerText = value;\r\n }\r\n}\r\n\r\nconst updateMobileGalleryView = () => {\r\n if (photoGallery) {\r\n mobileViewClassnames.forEach(className => photoGallery.classList.remove(className))\r\n }\r\n\r\n if (currentMobileView.value.name === mobileViewOptions.slider.name) {\r\n if (photoGallery) {\r\n photoGallery.classList.remove(mobileViewOptions.grid.className);\r\n photoGallery.classList.remove(mobileViewOptions.list.className);\r\n photoGallery.classList.add(mobileViewOptions.slider.className);\r\n }\r\n hideCloseBtn();\r\n } else if (currentMobileView.value.name === mobileViewOptions.grid.name) {\r\n photoGallery.classList.add(mobileViewOptions.grid.className);\r\n showCloseBtn();\r\n } else if (currentMobileView.value.name === mobileViewOptions.list.name) {\r\n photoGallery.classList.add(mobileViewOptions.list.className);\r\n showCloseBtn();\r\n }\r\n}\r\n\r\nconst onMobileViewBtnClick = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (currentMobileView.value.name === mobileViewOptions.list.name) {\r\n currentMobileView.value = mobileViewOptions.grid;\r\n } else if (currentMobileView.value.name === mobileViewOptions.grid.name) {\r\n currentMobileView.value = mobileViewOptions.list;\r\n }\r\n}\r\n\r\nexport const initPhotoGallery = () => {\r\n imageSwiper = document.getElementById(PHOTO_GALLERY_SWIPER_ID);\r\n const imageWrapper = document.getElementById('photo-gallery__images');\r\n if (imageSwiper && imageWrapper) {\r\n imageSlides = imageSwiper.querySelectorAll('.swiper-slide');\r\n imageSlides.forEach((slide, i) => {\r\n const img = slide.firstElementChild.cloneNode(true);\r\n img.setAttribute('data-id', i);\r\n img.addEventListener('click', onImageMobileClick);\r\n imageWrapper.appendChild(img);\r\n });\r\n if (!isMobile) {\r\n const prevDiv = document.createElement('div');\r\n prevDiv.classList.add('swiper-button-prev');\r\n const nextDiv = document.createElement('div');\r\n nextDiv.classList.add('swiper-button-next');\r\n imageSwiper.appendChild(prevDiv);\r\n imageSwiper.appendChild(nextDiv);\r\n }\r\n }\r\n currentImageCounter = document.getElementById(CURRENT_IMAGE);\r\n imageCount = document.getElementById(IMAGE_COUNT);\r\n mobileViewBtn = document.getElementById(MOBILE_VIEW_BTN_ID);\r\n photoGallery = document.getElementById(PHOTO_GALLEY_ID);\r\n const mobileBackBtn = document.getElementById(MOBILE_BACK_BTN_ID);\r\n if (mobileBackBtn) {\r\n mobileBackBtn.addEventListener('click', onMobileBackBtnClick);\r\n }\r\n if (mobileViewBtn) {\r\n mobileViewBtn.addEventListener('click', onMobileViewBtnClick);\r\n }\r\n if (imageCount && imageSlides) {\r\n imageCount.innerText = imageSlides.length;\r\n }\r\n if (isMobile && imageWrapper) {\r\n currentMobileView.value = mobileViewOptions.list;\r\n }\r\n const swiperOptions = Object.assign({}, defaultSwiperOptions);\r\n swiperOptions.on = {\r\n slideChange: (e) => {\r\n setCounterValue(e.realIndex + 1);\r\n }\r\n }\r\n if (!isMobile) {\r\n swiperOptions.navigation = {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n }\r\n }\r\n setCounterValue(1);\r\n swiper = new Swiper(imageSwiper, swiperOptions);\r\n}\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/photo-gallery/photo-gallery.js","import { getCommunitiesNearYou } from '../../../js/api/community';\r\nimport { rerenderCommunityList } from '../../../js/components/render-communites';\r\n\r\nconst communitiesNearYouEl = document.querySelector('section.communities-near-you');\r\nlet locationPicker;\r\nlet locationPickerInput;\r\nlet locationCards;\r\nlet locationPickerWrapper;\r\nlet locationPickerBtn;\r\nlet initialValue;\r\nlet currentLocation;\r\nlet locationButtonSubmit;\r\nlet closeLocationPickerIcon;\r\nlet communitiesList;\r\n\r\nexport const communitiesNearYou = () => {\r\n if (!communitiesNearYouEl) return;\r\n locationPickerBtn = communitiesNearYouEl.querySelector('#location-picker');\r\n closeLocationPickerIcon = communitiesNearYouEl.querySelector('#close-location-icon');\r\n locationPicker = communitiesNearYouEl.querySelector('.location-picker');\r\n locationPickerInput = communitiesNearYouEl.querySelector('#location-picker-input');\r\n locationCards = communitiesNearYouEl.querySelector('#location-cards');\r\n locationPickerWrapper = communitiesNearYouEl.querySelector('.location-picker__wrapper');\r\n locationButtonSubmit = communitiesNearYouEl.querySelector('#location-button-submit');\r\n currentLocation = communitiesNearYouEl.querySelector('#current-location');\r\n communitiesList = communitiesNearYouEl.querySelector('.communities-list');\r\n\r\n if (locationPickerBtn) {\r\n locationPickerBtn.addEventListener('click', locationPickerHandler);\r\n initialValue = locationPickerBtn.innerHTML;\r\n }\r\n if (closeLocationPickerIcon) {\r\n closeLocationPickerIcon.addEventListener('click', closeLocationPicker);\r\n }\r\n if (locationButtonSubmit) {\r\n locationButtonSubmit.addEventListener('click', locationButtonSubmitHandler);\r\n }\r\n if (locationPickerInput) {\r\n locationPickerInput.addEventListener('input', () => locationPickerInputHandler('change'));\r\n locationPickerInput.addEventListener('keydown', (event) => {\r\n if (event.key === 'Enter') {\r\n locationButtonSubmitHandler();\r\n }\r\n })\r\n }\r\n if (locationPickerWrapper) {\r\n locationPickerWrapper.addEventListener('click', (e) => e.stopPropagation());\r\n }\r\n if (currentLocation) {\r\n currentLocation.addEventListener('click', currentLocationHandler);\r\n }\r\n}\r\n\r\nconst currentLocationHandler = () => {\r\n closeLocationPicker();\r\n locationPickerBtn.innerHTML = initialValue;\r\n if (currentLocation && currentLocation.dataset.latitude && currentLocation.dataset.longitude) {\r\n renderCommunities(currentLocation.dataset.longitude, currentLocation.dataset.latitude);\r\n }\r\n}\r\n\r\nconst locationPickerInputHandler = (type) => {\r\n if (type === 'change') {\r\n if (locationCards) {\r\n locationCards.innerHTML = '';\r\n }\r\n }\r\n}\r\n\r\nconst locationPickerHandler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (locationPicker) {\r\n if (locationPicker.classList.contains('active')) {\r\n closeLocationPicker();\r\n } else {\r\n openLocationPicker();\r\n }\r\n }\r\n}\r\n\r\nconst clickOutsideLocationListener = () => {\r\n closeLocationPicker();\r\n}\r\n\r\nconst openLocationPicker = () => {\r\n if (locationPicker) {\r\n locationPicker.classList.add('active');\r\n document.addEventListener('click', clickOutsideLocationListener);\r\n }\r\n if (locationPickerInput) {\r\n locationPickerInput.value = '';\r\n }\r\n if (locationCards) {\r\n clearLocationCards();\r\n }\r\n}\r\n\r\nconst clearLocationCards = () => {\r\n locationCards.innerHTML = '';\r\n}\r\n\r\nconst closeLocationPicker = () => {\r\n if (locationPicker) {\r\n locationPicker.classList.remove('active');\r\n document.removeEventListener('click', clickOutsideLocationListener);\r\n }\r\n}\r\n\r\nconst locationButtonSubmitHandler = () => {\r\n const { googleApiKey } = communitiesNearYouEl.dataset;\r\n if (locationPickerInput && googleApiKey) {\r\n const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${locationPickerInput.value}&components=country:US&key=${googleApiKey}`;\r\n fetch(url)\r\n .then(res => res.json())\r\n .then(res => {\r\n const parsedResult = parseGeocodingResult(res);\r\n clearLocationCards();\r\n addLocationCard(parsedResult);\r\n })\r\n .catch(console.error);\r\n }\r\n}\r\n\r\nconst addLocationCard = (location) => {\r\n console.log('location1');\r\n console.log(location);\r\n if (locationCards && (location.state || location.city)) {\r\n const liEl = document.createElement('li');\r\n const text = location.city + `${location.city ? `, ${location.state}` : `${location.state}`}`\r\n liEl.innerHTML = text;\r\n locationCards.appendChild(liEl);\r\n liEl.addEventListener('click', () => {\r\n locationPickerBtn.innerHTML = text;\r\n closeLocationPicker();\r\n renderCommunities(location.longitude, location.latitude);\r\n });\r\n }\r\n}\r\n\r\nconst renderCommunities = (longitude, latitude) => {\r\n return getCommunitiesNearYou(longitude, latitude)\r\n .then((communities) => {\r\n console.log('communities');\r\n console.log(communities);\r\n rerenderCommunityList(communitiesList, communities, false);\r\n });\r\n}\r\n\r\nconst parseGeocodingResult = (data) => {\r\n let city = '';\r\n let state = '';\r\n let latitude = '';\r\n let longitude = '';\r\n\r\n if (data && data.results && data.results.length > 0) {\r\n const addressComponents = data.results[0].address_components;\r\n const geometry = data.results[0].geometry;\r\n\r\n for (let component of addressComponents) {\r\n if (component.types.includes('locality')) {\r\n city = component.long_name;\r\n }\r\n if (component.types.includes('administrative_area_level_1')) {\r\n state = component.short_name;\r\n }\r\n }\r\n latitude = geometry && geometry.location && geometry.location.lat;\r\n longitude = geometry && geometry.location && geometry.location.lng;\r\n }\r\n\r\n return {\r\n city,\r\n state,\r\n latitude,\r\n longitude,\r\n };\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/communities-near-you/communities-near-you.js","import { communityCardClickHandler, defaultSwiperOptions, getUnitType, toggleEl } from '../../../js/modules/utilities';\r\nimport { handleSaveEvent } from '../../../js/components/save-community';\r\nimport {closeQuickAction, handleOtherActions} from '../../../js/components/other-actions';\r\nimport { initQuickViewModal } from '../../../js/components/quick-view';\r\nimport { getCommunityList } from '../../../js/api/community';\r\nimport { rerenderCommunityList } from '../../../js/components/render-communites';\r\n\r\nexport const communitiesFilter = () => {\r\n let currentCommunitySection;\r\n const communitiesFilter = document.querySelector('aside.communities-filter')\r\n if (communitiesFilter) {\r\n let initialSelectedFilters;\r\n const buttonClose = document.querySelector(\"#close-community-filters\");\r\n const applyButton = communitiesFilter.querySelector('#apply-btn');\r\n const clearAllButton = communitiesFilter.querySelector('#clear-all-btn');\r\n const selectedFilterContainer = communitiesFilter.querySelector('.selected-filters');\r\n const inputs = communitiesFilter.querySelectorAll('input:not(#show-more)');\r\n const container = communitiesFilter.querySelector('.container');\r\n\r\n const applyFilters = (body) => {\r\n const { templateId, locationId } = currentCommunitySection.dataset;\r\n return getCommunityList(locationId, templateId, body);\r\n }\r\n const applyHandler = () => {\r\n const selectedFilters = [...selectedFilterContainer.querySelectorAll('.selected-filters-value')];\r\n const InputFilters = [];\r\n selectedFilters.forEach((filter) => {\r\n const { rawValue, name } = filter.dataset;\r\n const inputFilter = InputFilters.find(el => el.FilterColumn === name);\r\n const filterValue = {\r\n RawValue: rawValue,\r\n IsSelected: true,\r\n Render: true,\r\n }\r\n if (inputFilter) {\r\n inputFilter.Values.push(filterValue);\r\n } else {\r\n InputFilters.push({\r\n Title: name,\r\n FilterColumn: name,\r\n Values: [filterValue],\r\n });\r\n }\r\n })\r\n const body = { InputFilters }\r\n communitiesFilter.classList.add('spinner')\r\n applyFilters(body)\r\n .then((res) => {\r\n closeFilters(null, true);\r\n if (res && res.communities) {\r\n const communitiesList = currentCommunitySection.querySelector('.communities-list');\r\n rerenderCommunityList(communitiesList, res.communities, true);\r\n const counter = currentCommunitySection.querySelector('#communities-counter');\r\n if (counter) {\r\n counter.dataset.counter = res.communities.length;\r\n }\r\n document.dispatchEvent(new CustomEvent(\"communitiesRendered\", {\r\n bubbles: true,\r\n detail: body,\r\n }));\r\n }\r\n })\r\n .finally(() => {\r\n communitiesFilter.classList.remove('spinner')\r\n });\r\n }\r\n const clearAllHandler = () => {\r\n inputs.forEach((input) => {\r\n input.checked = false;\r\n })\r\n if (selectedFilterContainer) {\r\n selectedFilterContainer.innerHTML = '';\r\n }\r\n }\r\n const containerClickHandler = (e) => {\r\n if (!selectedFilterContainer) return;\r\n const addSelectedFilter = (key, value, name, rawValue) => {\r\n const span = document.createElement('span');\r\n span.classList.add('selected-filters-value');\r\n span.dataset.name = name;\r\n span.dataset.key = key;\r\n span.dataset.rawValue = rawValue;\r\n span.innerHTML = `\r\n ${value}\r\n \r\n `;\r\n selectedFilterContainer.appendChild(span);\r\n }\r\n const { tagName, classList, id } = e.target\r\n if (tagName === 'INPUT' && id !== 'show-more') {\r\n const { name, type } = e.target;\r\n const { value, key, rawValue } = e.target.dataset;\r\n const selectedFilterItems = [...selectedFilterContainer.querySelectorAll('span')];\r\n if (type === 'radio') {\r\n selectedFilterItems.forEach((item) => {\r\n if (item.dataset.name === name) {\r\n item.remove();\r\n }\r\n })\r\n }\r\n let isAdded = false;\r\n let selectedItem;\r\n selectedFilterItems.forEach((item) => {\r\n if (item.dataset.name === name && item.dataset.key === key) {\r\n isAdded = true;\r\n selectedItem = item;\r\n }\r\n });\r\n if (isAdded) {\r\n selectedItem.remove();\r\n e.target.checked = false;\r\n } else {\r\n addSelectedFilter(key, value, name, rawValue);\r\n }\r\n }\r\n const spanHandler = (span) => {\r\n const { name, key } = span.dataset;\r\n const input = communitiesFilter.querySelector(`input[data-key=\"${key}\"][name=\"${name}\"]`);\r\n if (input) {\r\n input.checked = false;\r\n span.remove();\r\n }\r\n }\r\n if (tagName === 'SPAN' && classList.contains('selected-filters-value')) {\r\n spanHandler(e.target);\r\n }\r\n if ((tagName === 'svg' && classList.contains('close-icon')) ||\r\n (tagName === 'use' && e.target.getAttribute('xlink:href') === '#close')) {\r\n const span = e.target.closest('span');\r\n if (span) {\r\n spanHandler(span);\r\n }\r\n }\r\n }\r\n if (applyButton) {\r\n applyButton.addEventListener('click', applyHandler);\r\n }\r\n if (clearAllButton) {\r\n clearAllButton.addEventListener('click', clearAllHandler)\r\n }\r\n const outsideClickHandler = (e) => {\r\n if (e.target.classList.contains('communities-filter')) {\r\n closeFilters();\r\n }\r\n }\r\n const toggleEl = () => {\r\n const valueToHide = \"none\";\r\n const filtersModal = document.querySelector(\".communities-filter\");\r\n\r\n filtersModal.addEventListener('click', outsideClickHandler)\r\n\r\n if (filtersModal) {\r\n const filtersModalStyles = window.getComputedStyle(filtersModal);\r\n const isHidden = filtersModalStyles.display === valueToHide;\r\n filtersModal.style.display = isHidden ? \"block\" : valueToHide;\r\n if (isHidden) {\r\n document.body.classList.add('body--scroll-locked');\r\n } else {\r\n document.body.classList.remove('body--scroll-locked');\r\n filtersModal.removeEventListener('click', outsideClickHandler);\r\n }\r\n }\r\n };\r\n const closeFilters = (e, apply = false) => {\r\n const filtersModal = document.querySelector(\".communities-filter\");\r\n\r\n if (filtersModal) {\r\n filtersModal.style.display = \"none\";\r\n document.body.classList.remove('body--scroll-locked');\r\n filtersModal.removeEventListener('click', outsideClickHandler);\r\n if (!apply && selectedFilterContainer) {\r\n selectedFilterContainer.innerHTML = '';\r\n initialSelectedFilters.forEach((item) => selectedFilterContainer.appendChild(item));\r\n }\r\n }\r\n };\r\n if (buttonClose) {\r\n buttonClose.addEventListener(\"click\", closeFilters);\r\n }\r\n if (container) {\r\n container.addEventListener('click', containerClickHandler);\r\n }\r\n document.addEventListener('openFilters', ((e) => {\r\n currentCommunitySection = e.detail.closest('.maa-communities');\r\n if (communitiesFilter) {\r\n toggleEl();\r\n const selectedFilters = selectedFilterContainer.querySelectorAll('.selected-filters-value');\r\n initialSelectedFilters = [...selectedFilters];\r\n updateCounter();\r\n inputs.forEach((input) => {\r\n input.checked = false;\r\n });\r\n selectedFilters.forEach((selectedFilter) => {\r\n const { key, name } = selectedFilter.dataset;\r\n const input = communitiesFilter.querySelector(`input[data-key=\"${key}\"][name=\"${name}\"]`);\r\n if (input) {\r\n input.checked = true;\r\n }\r\n });\r\n }\r\n }));\r\n\r\n if(selectedFilterContainer) {\r\n selectedFilterContainer.addEventListener('wheel', (e) => {\r\n selectedFilterContainer.scrollLeft += e.deltaY;\r\n });\r\n }\r\n const updateCounter = () => {\r\n const selectedFilters = selectedFilterContainer.querySelectorAll('.selected-filters-value');\r\n if (selectedFilters.length > 0) {\r\n clearAllButton.dataset.counter = `(${selectedFilters.length})`;\r\n } else {\r\n clearAllButton.dataset.counter = '';\r\n }\r\n }\r\n const setObserver = () => {\r\n const mutationConfig = { attributes: true, childList: true };\r\n const observer = new MutationObserver((mutations) => {\r\n updateCounter();\r\n });\r\n\r\n observer.observe(selectedFilterContainer, mutationConfig);\r\n }\r\n setObserver();\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/communities-filter/communities-filter.js","export const initDynamicButtons = () => {\r\n const dynamicButtons = document.querySelectorAll('.dynamic');\r\n const inPageNav = document.getElementById('inPageNav');\r\n let btnArray = [];\r\n\r\n const observerOptions = {\r\n root: null,\r\n rootmargin: '0px',\r\n threshold: 1.0\r\n }\r\n\r\n const dynamicWatch = (entries) => {\r\n entries.forEach((entry) => {\r\n let itemClone;\r\n let item = entry.target;\r\n if(!entry.isIntersecting){\r\n // itemClone = $(item).clone(true);\r\n itemClone = item.cloneNode(true);\r\n btnArray.push([item, itemClone]);\r\n itemClone.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n item.click();\r\n });\r\n const inPageButtons = document.querySelector('.in-page-button');\r\n if (inPageButtons) {\r\n inPageButtons.appendChild(itemClone);\r\n }\r\n // $('.in-page-button').append(itemClone);\r\n item.classList.add('cloned');\r\n } else {\r\n itemClone = btnArray.map((btn, index) => {\r\n if(btn[0] == item) {\r\n let target = btn[1];\r\n btnArray.splice(index,1);\r\n return target;\r\n }\r\n })\r\n // $(itemClone[0]).remove();\r\n if (itemClone[0]) {\r\n itemClone[0].remove();\r\n }\r\n item.classList.remove('cloned');\r\n }\r\n })\r\n }\r\n\r\n const observer = new IntersectionObserver(dynamicWatch, observerOptions);\r\n\r\n dynamicButtons.forEach((btn) => {\r\n observer.observe(btn);\r\n })\r\n\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/dynamic-buttons.js","export const setStickySectionsTop = () => {\r\n let totalHeight = 0;\r\n\r\n // Start with the element having ID 'navigation'\r\n const navigation = document.getElementById('navigation');\r\n if (navigation) {\r\n navigation.style.top = `${totalHeight}px`;\r\n totalHeight += navigation.offsetHeight;\r\n }\r\n\r\n // Then, iterate through the rest of the elements with the 'sticky' class\r\n const stickyElements = document.querySelectorAll('.sticky');\r\n stickyElements.forEach(el => {\r\n if (el.id !== 'navigation') {\r\n el.style.top = `${totalHeight}px`;\r\n totalHeight += el.offsetHeight;\r\n }\r\n });\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/sticky-sections.js","const leasingModal = document.querySelector(\".leasing-modal-wrapper\");\r\n\r\nexport const leasingTerms = () => {\r\n const leasingTermsContainer = document.querySelector('div.leasing-modal-wrapper');\r\n if (leasingTermsContainer) {\r\n const closeBtn = leasingTermsContainer.querySelector('svg.close');\r\n if (closeBtn) {\r\n closeBtn.addEventListener('click', () => {\r\n //window.parent.postMessage(`leasing_terms_close_clicked`);\r\n leasingModal.classList.toggle('open');\r\n });\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/leasing-terms/leasing-terms.js","import { loadRecaptcha } from '../../../js/components/load_recaptcha';\r\nimport { isMobile } from '../../../js/modules/utilities';\r\n\r\nexport const leaseUpForm = () => {\r\n const leaseUpFormWrapper = document.querySelector('section#lease-up-form');\r\n const leaseUpForm = leaseUpFormWrapper && leaseUpFormWrapper.querySelector('.lease-up-form');\r\n\r\n if (leaseUpForm) {\r\n const dropdownList = leaseUpForm.querySelectorAll('.dropdown');\r\n const submitBtn = leaseUpForm.querySelector('#submit_btn');\r\n const body = document.body;\r\n\r\n const fields = {\r\n FirstName: leaseUpForm.querySelector('input[name=\"FirsName\"]'),\r\n LastName: leaseUpForm.querySelector('input[name=\"LastName\"]'),\r\n Email: leaseUpForm.querySelector('input[name=\"Email\"]'),\r\n Phone: leaseUpForm.querySelector('input[name=\"Phone\"]'),\r\n Floorplan: leaseUpForm.querySelector('input[name=\"Floorplan\"]'),\r\n MoveInDate: leaseUpForm.querySelector('input[name=\"MoveInDate\"]'),\r\n SmsInput: leaseUpForm.querySelector('input[name=\"sms\"]'),\r\n PropertyID: leaseUpForm.querySelector('input[name=\"PropertyID\"]'),\r\n }\r\n\r\n const successModalWrapper = leaseUpFormWrapper.querySelector('#lease-up-form-success-modal');\r\n const modalCloseBtn = successModalWrapper && successModalWrapper.querySelector('#lease-up-form-success-modal__close-btn');\r\n\r\n const closeBtnHandler = (e) => {\r\n e.stopPropagation();\r\n successModalWrapper.classList.remove('show');\r\n leaseUpForm.classList.remove('submitting');\r\n document.body.classList.remove('body--scroll-locked');\r\n leaseUpFormWrapper.classList.remove('show');\r\n }\r\n\r\n if (modalCloseBtn) {\r\n modalCloseBtn.addEventListener('click', closeBtnHandler);\r\n }\r\n\r\n const toggleDropdown = (event, dropdown) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n if (dropdown.classList.contains('opened')) {\r\n dropdown.classList.remove('opened');\r\n } else {\r\n closeDropdownFromOutside();\r\n dropdown.classList.add('opened');\r\n dropdown.classList.remove('error');\r\n }\r\n };\r\n\r\n const selectOption = (event, input) => {\r\n input.value = event.currentTarget.textContent;\r\n input.dataset.key = event.currentTarget.dataset.key;\r\n closeDropdownFromOutside();\r\n };\r\n\r\n const closeDropdownFromOutside = () => {\r\n dropdownList.forEach((dropdown) => dropdown.classList.remove('opened'));\r\n };\r\n\r\n body.addEventListener('click', closeDropdownFromOutside);\r\n\r\n dropdownList.forEach((dropdown) => {\r\n const label = dropdown.querySelector('label#dropdown');\r\n const input = dropdown.querySelector('input#dropdown');\r\n const listOfOptions = dropdown.querySelectorAll('.option');\r\n const options = dropdown.querySelector('ul.options');\r\n\r\n options.addEventListener('click', (e) => e.stopPropagation());\r\n listOfOptions.forEach((option) => {\r\n option.addEventListener('click', (e) => selectOption(e, input));\r\n });\r\n label.addEventListener('click', (e) => toggleDropdown(e, dropdown));\r\n });\r\n let isGcaptchaSuccess = false;\r\n\r\n const gcaptcha = leaseUpForm.querySelector('.g-recaptcha');\r\n if (gcaptcha) {\r\n const gcaptchaId = 'lease-up';\r\n loadRecaptcha(gcaptchaId);\r\n document.addEventListener('g-captcha', (e) => {\r\n if (e.detail.id === gcaptchaId) {\r\n isGcaptchaSuccess = true;\r\n if (submitBtn) {\r\n submitBtn.removeAttribute('disabled');\r\n }\r\n }\r\n });\r\n document.addEventListener('g-captcha-expired', (e) => {\r\n if (e.detail.id === gcaptchaId) {\r\n isGcaptchaSuccess = false;\r\n if (submitBtn) {\r\n submitBtn.setAttribute('disabled', 'disabled');\r\n }\r\n }\r\n });\r\n }\r\n\r\n const setInputErrorValue = (input, value) => {\r\n const inputWrapper = input.closest('div');\r\n if (inputWrapper) {\r\n inputWrapper.classList.add('error');\r\n const errorWrapper = inputWrapper.querySelector('div');\r\n const errorValue = errorWrapper && errorWrapper.querySelector('span');\r\n if (errorValue) {\r\n errorValue.innerHTML = value;\r\n }\r\n }\r\n }\r\n\r\n const validateForm = () => {\r\n let isValid = true;\r\n if (gcaptcha) {\r\n isValid = isGcaptchaSuccess;\r\n }\r\n const body = {\r\n firstName: fields.FirstName.value,\r\n lastName: fields.LastName.value,\r\n email: fields.Email.value,\r\n phone: fields.Phone.value,\r\n floorplan: fields.Floorplan.dataset.key,\r\n moveInDate: fields.MoveInDate.dataset.key,\r\n sms: fields.SmsInput.checked,\r\n PropertyID: fields.PropertyID.value,\r\n }\r\n return {\r\n isValid,\r\n body,\r\n }\r\n }\r\n\r\n const setModalValues = (body = {}, successMessage = {}) => {\r\n const dynamicMessage = successModalWrapper.querySelector('#dynamic-message');\r\n const line1 = dynamicMessage.querySelector('.line-1');\r\n if (line1) {\r\n line1.innerHTML = successMessage.Line1.replace('{FirstName}', body.firstName);\r\n }\r\n const line2 = dynamicMessage.querySelector('.line-2');\r\n if (line2) {\r\n line2.innerHTML = successMessage.Line2;\r\n }\r\n const line3 = dynamicMessage.querySelector('.line-3');\r\n if (line3) {\r\n line3.innerHTML = successMessage.Line3;\r\n }\r\n const line4 = dynamicMessage.querySelector('.line-4');\r\n if (line4) {\r\n line4.innerHTML = successMessage.Line4.replace('{Email}', body.email);\r\n }\r\n }\r\n\r\n const submitFormRequest = (body) => {\r\n return fetch('/maa-api/forms/v1/lease-up/submit', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json;charset=utf-8'\r\n },\r\n body: JSON.stringify(body),\r\n })\r\n .then(response => response.json())\r\n .then(response => {\r\n return response;\r\n })\r\n }\r\n\r\n const submitForm = (body) => {\r\n leaseUpForm.classList.add('submitting');\r\n submitFormRequest(body)\r\n // Promise.resolve()\r\n .then((response) => {\r\n // response = {\r\n // \"IsSuccess\": true,\r\n // \"StatusCode\": 400,\r\n // \"ValidationErrors\": [\r\n // {\r\n // \"Errors\": [\r\n // \"This field is required\"\r\n // ],\r\n // \"FieldName\": \"formData.FirstName\"\r\n // },\r\n // {\r\n // \"Errors\": [\r\n // \"This field is required\"\r\n // ],\r\n // \"FieldName\": \"formData.LastName\"\r\n // },\r\n // {\r\n // \"Errors\": [\r\n // \"Invalid Value\"\r\n // ],\r\n // \"FieldName\": \"formData.Email\"\r\n // },\r\n // {\r\n // \"Errors\": [\r\n // \"Invalid Value\"\r\n // ],\r\n // \"FieldName\": \"formData.Phone\"\r\n // },\r\n // {\r\n // \"Errors\": [\r\n // \"This field is required\"\r\n // ],\r\n // \"FieldName\": \"formData.Floorplan\"\r\n // },\r\n // {\r\n // \"Errors\": [\r\n // \"This field is required\"\r\n // ],\r\n // \"FieldName\": \"formData.MoveInDate\"\r\n // }\r\n // ],\r\n // \"SuccessMessage\": {\r\n // \"Line1\": 'Welcome, {FirstName}!',\r\n // \"Line2\": 'You have successfully joined our VIP List',\r\n // \"Line3\": 'An email confirmation will be sent to ',\r\n // \"Line4\": '{Email}',\r\n // },\r\n // \"ErrorMessage\": \"Bad Request\"\r\n // }\r\n if (response.IsSuccess === true) {\r\n setModalValues(body, response.SuccessMessage);\r\n submitBtn.innerHTML = submitBtn.dataset.successText;\r\n if (isMobile) {\r\n document.body.classList.add('body--scroll-locked');\r\n }\r\n successModalWrapper.classList.add('show');\r\n } else if (response.ValidationErrors && response.ValidationErrors.length) {\r\n leaseUpForm.classList.remove('submitting');\r\n response.ValidationErrors.forEach((field) => {\r\n const fieldNameArray = field.FieldName.split('.');\r\n if (fieldNameArray.length === 2 && field.Errors.length > 0) {\r\n const fieldName = fieldNameArray[1];\r\n const [error] = field.Errors;\r\n setInputErrorValue(fields[fieldName], error);\r\n }\r\n })\r\n } else {\r\n leaseUpForm.classList.remove('submitting');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n leaseUpForm.classList.remove('submitting');\r\n });\r\n }\r\n\r\n const submitBtnHandler = () => {\r\n const { isValid, body } = validateForm();\r\n if (isValid) {\r\n submitForm(body);\r\n }\r\n }\r\n\r\n if (submitBtn) {\r\n submitBtn.addEventListener('click', submitBtnHandler);\r\n }\r\n\r\n const openFormHandler = () => {\r\n fields.FirstName.value = '';\r\n fields.LastName.value = '';\r\n fields.Email.value = '';\r\n fields.Phone.value = '';\r\n fields.SmsInput.checked = false;\r\n fields.Floorplan.dataset.key = '';\r\n fields.Floorplan.value = '';\r\n fields.MoveInDate.dataset.key = '';\r\n fields.MoveInDate.value = '';\r\n isGcaptchaSuccess = false;\r\n submitBtn.innerHTML = submitBtn.dataset.initialText;\r\n if (gcaptcha) {\r\n window.grecaptcha.reset();\r\n }\r\n }\r\n\r\n document.addEventListener('leasUpFormOpened', openFormHandler);\r\n\r\n const removeInputError = (input) => {\r\n const inputWrapper = input.closest('div');\r\n if (inputWrapper) {\r\n inputWrapper.classList.remove('error');\r\n }\r\n }\r\n\r\n fields.FirstName.addEventListener('keypress', (e) => {\r\n removeInputError(fields.FirstName);\r\n })\r\n fields.LastName.addEventListener('keypress', () => {\r\n removeInputError(fields.LastName);\r\n })\r\n fields.Email.addEventListener('keypress', () => {\r\n removeInputError(fields.Email);\r\n })\r\n fields.Phone.addEventListener('keypress', (e) => {\r\n const regex = /[\\d()+-]+/;\r\n if (!e.key.match(regex)) {\r\n e.preventDefault();\r\n } else {\r\n removeInputError(fields.Phone);\r\n }\r\n })\r\n\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/lease-up-form/lease-up-form.js","import { initPerqButtonsHandler } from '../../../js/components/perq-controller';\r\nimport { isMobile } from '../../../js/modules/utilities';\r\nimport { GLOBAL_MODAL_ID, openModalGlobal, openModalGlobalConstructor } from '../../../js/components/modal';\r\n\r\nexport const video360TourLanding = () => {\r\n const video360tourEl = document.querySelector('div.video-360-tour');\r\n let items;\r\n let videos;\r\n let playerContainer;\r\n const MODAL_UNIQUE_ID = 'video-landing-modal';\r\n\r\n const rerenderVideoSection = (el) => {\r\n if (el && el.dataset) {\r\n const srcUrl = el.dataset.srcUrl;\r\n const previewUrl = el.dataset.previewUrl;\r\n const isVideo = el.classList.contains('video');\r\n const isTour = el.classList.contains('tour');\r\n playerContainer.style.borderRadius = null;\r\n\r\n if (srcUrl && playerContainer) {\r\n playerContainer.innerHTML = '';\r\n items.forEach(item => {\r\n if (item.classList.contains('active')) {\r\n item.classList.remove('active');\r\n }\r\n })\r\n el.classList.add('active');\r\n if (isVideo) {\r\n const video = document.createElement('video');\r\n video.setAttribute('poster', previewUrl);\r\n video.setAttribute('src', srcUrl);\r\n const customPlayBtn = document.createElement('div');\r\n customPlayBtn.innerText = 'play';\r\n customPlayBtn.classList.add('custom-play-btn');\r\n customPlayBtn.setAttribute('role', 'button');\r\n playerContainer.appendChild(video);\r\n playerContainer.appendChild(customPlayBtn);\r\n initCustomPlayButton();\r\n }\r\n\r\n if (isTour) {\r\n if (isMobile) {\r\n const div = document.createElement('div');\r\n div.dataset.srcUrl = srcUrl;\r\n div.classList.add('tour-360-thumbnail-mobile');\r\n const customPlayBtn = document.createElement('div');\r\n customPlayBtn.innerText = 'play';\r\n customPlayBtn.classList.add('custom-play-btn');\r\n customPlayBtn.setAttribute('role', 'button');\r\n const img = document.createElement('img');\r\n img.src = previewUrl;\r\n img.setAttribute('alt', '360-tour')\r\n div.appendChild(img);\r\n div.appendChild(customPlayBtn);\r\n playerContainer.appendChild(div);\r\n initCustomPlayButton();\r\n } else {\r\n const iframe = document.createElement('iframe');\r\n const src = isMobile ? `${srcUrl}?play=1` : srcUrl;\r\n iframe.setAttribute('src', src);\r\n iframe.setAttribute('allow', 'fullscreen');\r\n playerContainer.appendChild(iframe);\r\n if (src.includes('360ac')) {\r\n playerContainer.style.borderRadius = '20px';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const onItemClickHandler = (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n //rerenderVideoSection(e.currentTarget);\r\n items.forEach(item => {\r\n item.classList.toggle('active', item === e.currentTarget);\r\n })\r\n const target = e.currentTarget.dataset.targetId;\r\n const targetEl = document.querySelector(`[data-video-id=\"${target}\"]`);\r\n videos.forEach(video => {\r\n video.classList.toggle('active', video === targetEl);\r\n })\r\n }\r\n\r\n const initListeners = () => {\r\n if (items.length) {\r\n items.forEach(item => {\r\n item.addEventListener('click', onItemClickHandler);\r\n })\r\n }\r\n }\r\n\r\n const videoPausePlayHandler = (e, videoPlayer, customPlayBtn) => {\r\n // const videoPlayer = playerContainer.querySelector('video');\r\n // const customPlayBtn = playerContainer.querySelector('.custom-play-btn');\r\n if (videoPlayer && customPlayBtn) {\r\n if (e.type === 'playing') {\r\n customPlayBtn.classList.add('hide');\r\n videoPlayer.setAttribute('controls', '');\r\n } else if (e.type === 'pause') {\r\n // customPlayBtn.classList.remove('hide');\r\n // videoPlayer.removeAttribute('controls', '');\r\n }\r\n }\r\n }\r\n\r\n const initMobileModal = (srcUrl) => {\r\n const src = `${srcUrl}&play=1`;\r\n const container = document.createElement('div');\r\n container.classList.add('tour-iframe-container');\r\n const iframe = document.createElement('iframe');\r\n iframe.setAttribute(\"allow\", \"fullscreen\");\r\n iframe.setAttribute(\"frameborder\", \"0\");\r\n iframe.setAttribute(\"src\", `${src}`);\r\n container.appendChild(iframe);\r\n const actionsContainer = document.createElement('div');\r\n actionsContainer.classList.add('actions-container');\r\n const actions = document.createElement('div');\r\n actions.classList.add('actions');\r\n const applyNowBtn = video360tourEl.querySelector('.property-options-buttons .apply-cta');\r\n const tourYourWayBtn = video360tourEl.querySelector('.property-options-buttons .tour-your-way');\r\n const askQuestionBtn = video360tourEl.querySelector('.property-options-buttons .ask-question-btn');\r\n const viewCommunityBtn = video360tourEl.querySelector('.vlp-view-community-button');\r\n const callUsBtn = video360tourEl.querySelector('.property-options-buttons .vlp-call-us');\r\n const actionToggle = document.createElement('button');\r\n actionToggle.innerHTML = 'Learn More';\r\n actionToggle.classList.add('actions-toggle');\r\n actionToggle.addEventListener('click', () => {\r\n if (actionToggle.classList.contains('show-actions')) {\r\n actionToggle.classList.remove('show-actions');\r\n actionToggle.innerText = 'Actions';\r\n } else {\r\n actionToggle.classList.add('show-actions');\r\n actionToggle.innerText = 'Close';\r\n }\r\n })\r\n if (applyNowBtn) {\r\n actions.appendChild(applyNowBtn);\r\n }\r\n if (tourYourWayBtn) {\r\n actions.appendChild(tourYourWayBtn);\r\n }\r\n if (askQuestionBtn) {\r\n actions.appendChild(askQuestionBtn);\r\n }\r\n if (viewCommunityBtn) {\r\n actions.appendChild(viewCommunityBtn);\r\n }\r\n if (callUsBtn) {\r\n actions.appendChild(callUsBtn);\r\n }\r\n actionsContainer.appendChild(actions);\r\n actionsContainer.appendChild(actionToggle);\r\n container.appendChild(actionsContainer);\r\n\r\n openModalGlobalConstructor({ content: container, uniqueId: MODAL_UNIQUE_ID });\r\n // container.addEventListener('click', () => {\r\n // console.log('!!11');\r\n // });\r\n }\r\n\r\n const customPlayBtnClickHandler = (e) => {\r\n // const videoPlayer = playerContainer.querySelector('video');\r\n // const tour = playerContainer.querySelector('.tour-360-thumbnail-mobile');\r\n const btn = e.currentTarget;\r\n const isVideo = btn.classList.contains('video') ? true : false;\r\n console.log('isVideo', isVideo, 'btn', btn);\r\n\r\n if (isVideo) {\r\n const videoPlayer = btn.previousElementSibling;\r\n videoPlayer.addEventListener('playing', function(e) { videoPausePlayHandler(e, videoPlayer, btn) }, false);\r\n videoPlayer.addEventListener('pause', function(e) { videoPausePlayHandler(e, videoPlayer, btn) }, false);\r\n if (videoPlayer.paused === true) {\r\n videoPlayer.play();\r\n }\r\n } else {\r\n const srcUrl = btn.parentElement.dataset.srcUrl;\r\n console.log('srcUrl', srcUrl, 'dataset', btn.dataset);\r\n if (srcUrl) {\r\n initMobileModal(srcUrl);\r\n }\r\n }\r\n }\r\n\r\n const initCustomPlayButton = () => {\r\n const customPlayBtn = playerContainer.querySelectorAll('.custom-play-btn');\r\n if (customPlayBtn) {\r\n customPlayBtn.forEach(btn => {\r\n btn.addEventListener('click', customPlayBtnClickHandler);\r\n })\r\n }\r\n }\r\n\r\n function determineStickyState() {\r\n const video = video360tourEl.querySelector('.list-item-header-video');\r\n const tour = video360tourEl.querySelector('.list-item-header-tour');\r\n if (video && tour) {\r\n const top = tour.offsetTop - video.offsetTop;\r\n video.classList.toggle('stuck', top === 44);\r\n }\r\n }\r\n\r\n const initActiveListItem = () => {\r\n if (video360tourEl) {\r\n const activeItem = video360tourEl.querySelector('.list-items .list-item.active');\r\n //rerenderVideoSection(activeItem);\r\n }\r\n }\r\n\r\n const init = () => {\r\n if (video360tourEl) {\r\n items = [...video360tourEl.querySelectorAll('.list-item')];\r\n playerContainer = video360tourEl.querySelector('#video-360-player-container');\r\n videos = [...playerContainer.querySelectorAll('.video-360-player__item')];\r\n initPerqButtonsHandler(video360tourEl);\r\n initListeners();\r\n initCustomPlayButton();\r\n //initActiveListItem();\r\n\r\n if (!isMobile) {\r\n document.querySelector('.list-items').addEventListener('scroll', determineStickyState);\r\n } else {\r\n document.addEventListener('beforeCloseModalEvent', ((e) => {\r\n if(e.detail.id && e.detail.id.includes(MODAL_UNIQUE_ID)){\r\n const modalGlobalEl = document.getElementById(GLOBAL_MODAL_ID);\r\n const applyNowBtn = modalGlobalEl.querySelector('.actions-container .apply-cta');\r\n const tourYourWayBtn = modalGlobalEl.querySelector('.actions-container .tour-your-way');\r\n const askQuestionBtn = modalGlobalEl.querySelector('.actions-container .ask-question-btn');\r\n const viewCommunityBtn = modalGlobalEl.querySelector('.actions-container .vlp-view-community-button');\r\n const callUsBtn = modalGlobalEl.querySelector('.actions-container .vlp-call-us');\r\n\r\n const propertyOptionsButtons = video360tourEl.querySelector('.property-options-buttons');\r\n const viewCommunityInfo = video360tourEl.querySelector('.video-360-tour-community-info');\r\n\r\n propertyOptionsButtons.appendChild(tourYourWayBtn);\r\n if (applyNowBtn) {\r\n propertyOptionsButtons.appendChild(applyNowBtn);\r\n }\r\n if (tourYourWayBtn) {\r\n propertyOptionsButtons.appendChild(tourYourWayBtn);\r\n }\r\n if (askQuestionBtn) {\r\n propertyOptionsButtons.appendChild(askQuestionBtn);\r\n }\r\n if (viewCommunityBtn) {\r\n viewCommunityInfo.appendChild(viewCommunityBtn);\r\n }\r\n if (callUsBtn) {\r\n propertyOptionsButtons.appendChild(callUsBtn);\r\n }\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n\r\n init();\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/360-video-tour-landing/360-video-tour-landing.js","//import polyfill from './modules/polyfills';\r\n//import { docReady } from './modules/utilities';\r\nimport { eventListeners } from '../templates/components/market-header/market-header';\r\nimport { neighborhoodsCarousel } from '../templates/components/market-neighborhoods/market-neighborhoods';\r\nimport { toggleCommunitiesQuickActions, toggleFilters, handleQuickViewModal, communityList } from '../templates/components/maa-communities/maa-communities';\r\nimport { compareCommunities } from '../templates/components/compare-communities/compare-communities';\r\nimport { compareView } from '../templates/components/compare-view/compare-view';\r\nimport { availableApartments } from '../templates/components/available-apartments/available-apartments';\r\nimport { whyChoose } from '../templates/components/why-choose/why-choose';\r\nimport { propertyHeroSlider } from '../templates/components/property-hero-gallery/property-hero-gallery';\r\nimport { videoGallery } from '../templates/components/video-gallery/video-gallery';\r\nimport { gallery360 } from '../templates/components/360-gallery/360-gallery';\r\n// import { saveCommunity } from \"./components/save-community\";\r\nimport { handleFeaturesModal } from '../templates/components/property-perks/property-perks';\r\nimport { verticalCarousel } from '../templates/components/vertical-carousel/vertical-carousel';\r\nimport { handleComplexLayoutCarousel } from '../templates/components/complex-layout-carousel/complex-layout-carousel';\r\nimport { savedItems } from '../templates/components/saved-items/saved-items';\r\nimport { footer } from '../templates/components/footer/footer';\r\nimport { propertyDetails } from '../templates/components/property-details-component/property-details-component';\r\nimport { propertyFeatures } from '../templates/components/property-features/property-features';\r\nimport { initPhotoGallery } from '../templates/components/photo-gallery/photo-gallery';\r\nimport { communitiesNearYou } from '../templates/components/communities-near-you/communities-near-you';\r\nimport { communitiesFilter } from '../templates/components/communities-filter/communities-filter';\r\nimport { initDynamicButtons } from './components/dynamic-buttons';\r\nimport { setStickySectionsTop } from \"./components/sticky-sections\";\r\nimport { leasingTerms } from '../templates/components/leasing-terms/leasing-terms';\r\nimport { leaseUpForm } from '../templates/components/lease-up-form/lease-up-form';\r\nimport { video360TourLanding } from '../templates/components/360-video-tour-landing/360-video-tour-landing';\r\n\r\nconst components = [\r\n setStickySectionsTop,\r\n eventListeners,\r\n neighborhoodsCarousel,\r\n toggleCommunitiesQuickActions,\r\n toggleFilters,\r\n compareCommunities,\r\n compareView,\r\n availableApartments,\r\n whyChoose,\r\n propertyHeroSlider,\r\n videoGallery,\r\n gallery360,\r\n handleFeaturesModal,\r\n verticalCarousel,\r\n handleComplexLayoutCarousel,\r\n savedItems,\r\n handleQuickViewModal,\r\n footer,\r\n propertyDetails,\r\n propertyFeatures,\r\n communityList,\r\n initPhotoGallery,\r\n communitiesNearYou,\r\n neighborhoodsCarousel,\r\n communitiesFilter,\r\n initDynamicButtons,\r\n leasingTerms,\r\n leaseUpForm,\r\n video360TourLanding,\r\n];\r\n\r\n// eslint-disable-next-line func-names, prefer-arrow-callback, no-undef\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n for (let component of components) {\r\n try {\r\n component();\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/app.js","/**\r\n * @module polyfills\r\n */\r\n\r\nfunction objectAssign() {\r\n if (typeof Object.assign !== 'function') {\r\n Object.assign = (target, varArgs) => {\r\n if (target == null) {\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n const to = Object(target);\r\n\r\n for (let i = 1; i < arguments.length; i++) {\r\n // eslint-disable-next-line prefer-rest-params\r\n const nextSource = arguments[i];\r\n\r\n if (nextSource != null) {\r\n const keys = Object.keys(nextSource);\r\n keys.forEach((nextKey) => {\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n });\r\n }\r\n }\r\n return to;\r\n };\r\n }\r\n}\r\n\r\nexport default function polyfill(only = []) {\r\n if (only.length) {\r\n const polyfills = Object.keys(only);\r\n polyfills.forEach((fn) => {\r\n fn();\r\n });\r\n return;\r\n }\r\n\r\n objectAssign();\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/modules/polyfills.js","const tabs = document.querySelectorAll('.locations');\r\nconst filterTabs = document.querySelectorAll('.filter-tabs');\r\nconst picture = document.querySelector('.tab-picture');\r\nconst aroundNeighborhoodSection = document.getElementById('around-neighborhood');\r\nlet markers = [];\r\nlet googleMap;\r\nlet markerCount = 0;\r\nlet currentTab;\r\nlet pinsize = screen.width > 767 ? 50 : 30;\r\n\r\nconst imageRoute = '/assets/img/';\r\nlet icons;\r\n\r\nif(typeof google != 'undefined' && aroundNeighborhoodSection){\r\n\r\n const handlePinClick = (e) => {\r\n e.preventDefault();\r\n const pinID = e.currentTarget.getAttribute('data-id');\r\n setActivePin(pinID);\r\n }\r\n\r\n const setActivePin = (ID) => {\r\n const checkSelected = document.querySelector('.locations-item.selected');\r\n if(checkSelected) checkSelected.classList.remove('selected');\r\n document.querySelector(`.locations-item[data-id=\"${ID}\"]`).classList.add('selected');\r\n\r\n markers[currentTab].forEach((item) => {\r\n if(item.ID == ID){\r\n item.marker.setIcon(icons.activePoint);\r\n } else {\r\n item.marker.setIcon(icons.point);\r\n }\r\n })\r\n }\r\n\r\n async function initMap() {\r\n const { Map } = await google.maps.importLibrary(\"maps\");\r\n const target = document.getElementById(\"neighborhoodMap\");\r\n\r\n let bounds = new google.maps.LatLngBounds();\r\n\r\n icons = {\r\n property: {\r\n url: imageRoute + 'MAA_logo-pin.svg',\r\n scaledSize: new google.maps.Size(pinsize, pinsize)\r\n },\r\n point: {\r\n url: imageRoute + 'pin-blue-large.svg',\r\n scaledSize: new google.maps.Size(pinsize, pinsize)\r\n },\r\n activePoint: {\r\n url: imageRoute + 'pin-orange-large.svg',\r\n scaledSize: new google.maps.Size(pinsize, pinsize)\r\n }\r\n }\r\n\r\n if (target) {\r\n googleMap = new Map(target, {\r\n center: {\r\n lat: Number(aroundNeighborhoodSection.dataset.propLat),\r\n lng: Number(aroundNeighborhoodSection.dataset.propLng),\r\n },\r\n zoom: 14,\r\n });\r\n\r\n tabs.forEach((tab) => {\r\n let selectedTab = false;\r\n let arrayName = tab.getAttribute('data-category');\r\n\r\n if(tab.classList.contains('selected')){\r\n currentTab = arrayName;\r\n selectedTab = true;\r\n }\r\n\r\n let tabMarkers = [];\r\n const tabItems = tab.querySelectorAll('.locations-item');\r\n tabItems.forEach((item) => {\r\n const ID = item.getAttribute('data-ID');\r\n const lat = item.getAttribute('data-lat');\r\n const lng = item.getAttribute('data-lng');\r\n const title = item.querySelector('.locations-item__name').innerText;\r\n let marker = createMarker(lat, lng, title, item);\r\n\r\n marker.addListener('click', () => {\r\n setActivePin(ID);\r\n })\r\n\r\n if(selectedTab){\r\n marker.setMap(googleMap);\r\n bounds.extend(marker.position);\r\n }\r\n\r\n item.addEventListener('click', handlePinClick);\r\n\r\n let tabMarker = { ID: ID, marker: marker };\r\n tabMarkers.push(tabMarker);\r\n markerCount++;\r\n })\r\n markers[arrayName] = tabMarkers;\r\n })\r\n\r\n if (bounds.getNorthEast().equals(bounds.getSouthWest())) {\r\n var extendPoint1 = new google.maps.LatLng(bounds.getNorthEast().lat() + 0.01, bounds.getNorthEast().lng() + 0.01);\r\n var extendPoint2 = new google.maps.LatLng(bounds.getNorthEast().lat() - 0.01, bounds.getNorthEast().lng() - 0.01);\r\n bounds.extend(extendPoint1);\r\n bounds.extend(extendPoint2);\r\n }\r\n\r\n if(googleMap && markers[currentTab].length > 0) googleMap.fitBounds(bounds);\r\n }\r\n }\r\n initMap();\r\n\r\n const createMarker = (lat, lng, title, tab) => {\r\n const itemLatLng = { lat: Number(lat), lng: Number(lng) };\r\n\r\n const marker = new google.maps.Marker({\r\n position: itemLatLng,\r\n map: null,\r\n title: title,\r\n icon: icons.point\r\n })\r\n return marker;\r\n }\r\n\r\n const handleTabClick = (e) => {\r\n e.preventDefault();\r\n\r\n currentTab = e.currentTarget.getAttribute('data-target');\r\n const tabTitle = e.currentTarget.innerText;\r\n const tabDescription = e.currentTarget.getAttribute('data-description');\r\n const img = e.currentTarget.getAttribute('data-image');\r\n const imgSmall = e.currentTarget.getAttribute('data-imageSmall');\r\n\r\n picture.innerHTML = `\r\n \r\n ${currentTab}\r\n `;\r\n const target = document.querySelector(`[data-category=\"${currentTab}\"]`);\r\n target.classList.add('selected');\r\n\r\n document.querySelector('.tab-title').innerText = target.dataset.title || tabTitle;\r\n document.querySelector('.tab-description').innerText = tabDescription;\r\n document.querySelector('.filter-tabs.selected').classList.remove('selected');\r\n e.currentTarget.classList.add('selected');\r\n document.querySelector('.locations.selected').classList.remove('selected');\r\n\r\n\r\n const bounds = new google.maps.LatLngBounds();\r\n\r\n for (const [key, value] of Object.entries(markers)) {\r\n const showMarker = key == currentTab;\r\n value.forEach((item) => {\r\n if (showMarker) {\r\n item.marker.setMap(googleMap);\r\n bounds.extend(item.marker.position);\r\n } else {\r\n item.marker.setMap(null);\r\n }\r\n })\r\n }\r\n\r\n if (bounds.getNorthEast().equals(bounds.getSouthWest()) && markers[currentTab].length > 0) {\r\n var extendPoint1 = new google.maps.LatLng(bounds.getNorthEast().lat() + 0.01, bounds.getNorthEast().lng() + 0.01);\r\n var extendPoint2 = new google.maps.LatLng(bounds.getNorthEast().lat() - 0.01, bounds.getNorthEast().lng() - 0.01);\r\n bounds.extend(extendPoint1);\r\n bounds.extend(extendPoint2);\r\n }\r\n\r\n if(googleMap) {\r\n if (markers[currentTab].length === 0) {\r\n googleMap.panTo({lat: Number(aroundNeighborhoodSection.dataset.propLat), lng: Number(aroundNeighborhoodSection.dataset.propLng)});\r\n googleMap.setZoom(14);\r\n } else {\r\n googleMap.fitBounds(bounds);\r\n }\r\n }\r\n }\r\n\r\n filterTabs.forEach((tab) => {\r\n tab.addEventListener('click', handleTabClick);\r\n })\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/around-neighborhood/around-neighborhood.js","const faqHeader = document.querySelector('.faqs__header');\r\nconst faqBody = document.querySelector('.faqs__body');\r\n\r\nconst tabs = faqHeader && faqHeader.querySelectorAll('.tab');\r\nconst questions = faqBody && faqBody.querySelectorAll('.faq-list__item--question');\r\n\r\nconst handleTabClick = (e) => {\r\n e.preventDefault();\r\n if (faqBody && faqHeader) {\r\n const selectedHeader = faqHeader.querySelector('.tab.selected');\r\n const selectedBody = faqBody.querySelector('.faq-list.selected');\r\n if (selectedHeader) {\r\n selectedHeader.classList.remove('selected');\r\n }\r\n if (selectedBody) {\r\n selectedBody.classList.remove('selected');\r\n }\r\n }\r\n e.currentTarget.classList.add('selected');\r\n const targetCategory = e.currentTarget.getAttribute('data-category');\r\n if (targetCategory) {\r\n faqBody.querySelector(`#${targetCategory}`);\r\n const targetBody = faqBody.querySelector(`#${targetCategory}`);\r\n if (targetBody) {\r\n targetBody.classList.add('selected');\r\n }\r\n }\r\n}\r\n\r\nif (tabs) {\r\n tabs.forEach((tab) => {\r\n tab.addEventListener('click', handleTabClick);\r\n });\r\n}\r\n\r\nconst handleQuestionClick = (e) => {\r\n e.preventDefault();\r\n e.currentTarget.classList.toggle('open');\r\n}\r\n\r\nif (questions) {\r\n questions.forEach((question) => {\r\n question.addEventListener('click', handleQuestionClick);\r\n });\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/frequently-asked-questions/frequently-asked-questions.js","import { closeModalGlobal} from '../../../js/components/modal';\r\n\r\nconst init = () => {\r\n const globalModalWrapper = document.createElement('div');\r\n globalModalWrapper.classList.add('global-modal-wrapper');\r\n globalModalWrapper.setAttribute('id', 'global-modal');\r\n\r\n globalModalWrapper.innerHTML = `\r\n
    \r\n \r\n
    \r\n `;\r\n document.body.appendChild(globalModalWrapper);\r\n\r\n const modalContent = globalModalWrapper.querySelector('#modal-content');\r\n const close_btn = globalModalWrapper.querySelector('#modal-close-btn');\r\n if (close_btn) {\r\n close_btn.addEventListener('click', closeModalGlobal);\r\n }\r\n if (modalContent && globalModalWrapper) {\r\n modalContent.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n })\r\n }\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", init);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/global-modal/global-modal.js","// eslint-disable-next-line import/prefer-default-export\r\nexport const buildLinks = () => {\r\n throw new Error(\"This component should not be used.\")\r\n};\r\n\r\nconst inPageNav = document.querySelector('.inpage-nav');\r\nconst inPageButton = document.querySelector('.in-page-button');\r\nlet parentSection = inPageNav;\r\n\r\n// the same as colors in section.scss\r\nconst SECTION_COLORS = {\r\n gray: 'rgb(247, 247, 247)',\r\n blue: 'rgb(5, 16, 50)',\r\n lightBlue: 'rgb(39, 49, 78)',\r\n noBGColor: 'rgba(0, 0, 0, 0)',\r\n}\r\n\r\nif (inPageNav) {\r\n while (parentSection.parentNode) {\r\n if (parentSection.parentNode.tagName === 'SECTION') {\r\n parentSection = parentSection.parentNode;\r\n break;\r\n }\r\n parentSection = parentSection.parentNode;\r\n }\r\n\r\n const sectionBackgroundColor = window.getComputedStyle(parentSection).getPropertyValue('background-color');\r\n\r\n for (const key in SECTION_COLORS) {\r\n if (sectionBackgroundColor === SECTION_COLORS[key]) {\r\n inPageButton.classList.add(key);\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/market-subnav/market-subnav.js","import { closeModal, openModal } from \"../../../js/components/modal\";\r\n\r\nlet modalId;\r\nlet close_btn;\r\n\r\nconst onCloseBtnClick = (e) => {\r\n closeModal(e, modalId)\r\n}\r\nconst init = () => {\r\n const modalWrapper = document.querySelector('div.modal-wrapper');\r\n console.log('modalWrapper1');\r\n console.log(modalWrapper);\r\n if (!modalWrapper) return;\r\n const modalContent = modalWrapper.querySelector('#modal-content');\r\n close_btn = document.querySelector('#modal-close-btn');\r\n if (close_btn) {\r\n close_btn.addEventListener('click', onCloseBtnClick);\r\n document.addEventListener('click', onCloseBtnClick);\r\n }\r\n if (modalContent && modalWrapper) {\r\n modalContent.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n })\r\n modalId = modalWrapper.getAttribute('id');\r\n const isOpen = modalWrapper.getAttribute('data-initial-state');\r\n if (isOpen === 'true' && modalId) {\r\n openModal('', modalId);\r\n }\r\n }\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", init);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/modal/modal.js","import { getAllSavedItems } from \"../../../js/api/saved-items\";\r\nimport { handleAddToCompare } from '../../../js/api/compare';\r\nimport { isMobile } from '../../../js/modules/utilities';\r\nimport { closeQuickAction } from '../../../js/components/other-actions';\r\n\r\n// main navigation\r\nconst body = document.querySelector('body');\r\nconst navItems = document.querySelectorAll('.nav__item.has-subnav');\r\nconst stateItems = document.querySelectorAll('.communities__states--link');\r\nconst marketItems = document.querySelectorAll('[data-metroareaname]');\r\nconst communitiesNavBack = document.querySelector('.communities__markets--back .nav-back');\r\nconst subNavBack = document.querySelectorAll('.nav__item--subnav-actions .nav-back');\r\nconst subNavs = document.querySelectorAll('.nav__item--subnav');\r\n\r\nconst navSearch = document.querySelector('.nav__search');\r\nconst searchModal = document.querySelector('.modal-search');\r\nconst searchModalClose = document.querySelector('.modal-search__close');\r\nconst filterGroup = document.querySelectorAll('.apartment-filters__group');\r\nconst toggleFilters = document.querySelector('.toggleFilters');\r\n\r\nconst ctaContainer = document.querySelector('.communities__markets--cta');\r\nconst ctaSource = document.querySelector('.communities__markets--cta picture source');\r\nconst ctaImage = document.querySelector('.communities__markets--cta picture img');\r\nconst ctaContent = document.querySelector('.communities__markets--cta .cta-text p');\r\n\r\nconst savedItemsContainer = document.getElementById('saved-items-container');\r\nconst savedItemsBtn = document.getElementById('quick-access-button');\r\nconst savedItemsBtnMobile = document.getElementById('quick-access-button-mobile');\r\n\r\nconst recentlyViewedBtn = document.getElementById('recently-viewed-button');\r\nconst recentlyViewedBackBtn = document.getElementById('recently-viewed-back')\r\nconst recentlyViewedCloseBtn = document.getElementById('recently-viewed-close')\r\nconst recentlyViewedList = document.getElementById('recently-viewed-list');\r\n\r\nconst hamburger = document.querySelector('.hamburger');\r\nconst nav = document.querySelector('.nav');\r\n\r\nlet navMenu;\r\nlet recentlyViewedCommunitiesList;\r\nlet recentlyViewedArrowLeft;\r\nlet recentlyViewedArrowRight;\r\n\r\nif (recentlyViewedList) {\r\n recentlyViewedCommunitiesList = recentlyViewedList.querySelector('.saved-items-content__communities-list');\r\n recentlyViewedArrowLeft = recentlyViewedList.querySelector('#recently-viewed-arrow-left');\r\n recentlyViewedArrowRight = recentlyViewedList.querySelector('#recently-viewed-arrow-right');\r\n recentlyViewedList.addEventListener('click', (e) => e.stopPropagation());\r\n}\r\n\r\nconst communities = document.querySelector('.communities');\r\nlet defaultImg;\r\nlet defaultImgAlt;\r\nlet defaultTitle;\r\nlet defaultText;\r\nlet defaultHref;\r\nif (communities) {\r\n defaultImg = communities.getAttribute('data-genericctaimage');\r\n defaultImgAlt = communities.getAttribute('data-genericimagealt');\r\n defaultTitle = communities.getAttribute('data-genericctatitle');\r\n defaultText = communities.getAttribute('data-genericctatext');\r\n defaultHref = communities.getAttribute('data-genericctahref');\r\n}\r\n\r\nlet stateCtaImgSrc;\r\nlet stateCtaTitle;\r\nlet stateCtaText;\r\nlet stateCtaImgAlt;\r\nlet stateCtaHref;\r\nlet activeSubnav = null;\r\n\r\n// const cloudinary = 'https://res.cloudinary.com/maa/image/upload/c_lfill,g_center,f_auto,q_auto:eco,h_451,w_689/v1/maac';\r\n\r\nif (nav) {\r\n navMenu = nav.querySelector('.nav__menu');\r\n}\r\n\r\nconst preloadImage = (url, callback) => {\r\n const img = new Image();\r\n img.src = url;\r\n img.onload = callback;\r\n};\r\n\r\nconst handleNavClick = (el) => {\r\n el.preventDefault();\r\n el.stopPropagation();\r\n closeSavedItems();\r\n const li = el.target.closest('li');\r\n // const subNav = el.target.nextElementSibling;\r\n const subNav = li && li.querySelector('.nav__item--subnav');\r\n const subNavActive = document.querySelector('.nav__item--subnav.active');\r\n if (subNavActive && subNavActive !== subNav) subNavActive.classList.remove('active');\r\n\r\n if (subNav) {\r\n if (subNav.classList.contains('active')) {\r\n subNav.classList.remove('active');\r\n navSearch.classList.remove('nav__search--hidden');\r\n } else {\r\n navSearch.classList.add('nav__search--hidden');\r\n subNav.classList.add('active');\r\n setTimeout(() => {\r\n document.body.addEventListener('click', closeSubNav);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nconst closeSubNav = () => {\r\n const subNavActive = document.querySelectorAll('.nav__item--subnav.active');\r\n subNavActive.forEach(item => item.classList.remove('active'));\r\n navSearch.classList.remove('nav__search--hidden');\r\n document.body.removeEventListener('click', closeSubNav);\r\n}\r\n\r\nconst handleStateClick = (e) => {\r\n e.preventDefault();\r\n const toggleState = e.srcElement === activeSubnav;\r\n const currentState = document.querySelectorAll('.communities__states ul li .active');\r\n let target;\r\n\r\n const stateText = e.srcElement.innerText;\r\n document.querySelector('.communities__markets > h3 > span').innerText = stateText;\r\n\r\n currentState.forEach((item) => {\r\n item.classList.remove('active');\r\n target = document.querySelector(item.attributes.href.textContent);\r\n target.classList.remove('active');\r\n });\r\n\r\n if (!toggleState) {\r\n const el = e.srcElement;\r\n stateCtaImgSrc = el.getAttribute('data-statectaimage');\r\n stateCtaTitle = el.getAttribute('data-statectatitle');\r\n stateCtaText = el.getAttribute('data-statectatext');\r\n stateCtaImgAlt = el.getAttribute('data-statectaimagealt');\r\n stateCtaHref = el.getAttribute('data-statectahref');\r\n\r\n const srcset = stateCtaImgSrc.length > 0 ? stateCtaImgSrc : `${defaultImg} 1X`;\r\n const src = stateCtaImgSrc.length > 0 ? stateCtaImgSrc : defaultImg;\r\n const alt = stateCtaImgAlt.length > 0 ? stateCtaImgAlt : defaultImgAlt;\r\n const cta = `${stateCtaTitle}${stateCtaText}`;\r\n const href = stateCtaHref && stateCtaHref.length > 0 ? stateCtaHref : defaultHref;\r\n\r\n ctaContainer.setAttribute('href', href);\r\n ctaContainer.classList.add('imgTransition');\r\n\r\n preloadImage(stateCtaImgSrc.length > 0 ? stateCtaImgSrc : defaultImg, () => {\r\n ctaSource.setAttribute('srcset', srcset);\r\n ctaImage.setAttribute('src', src);\r\n ctaImage.setAttribute('alt', alt);\r\n ctaContent.innerHTML = cta;\r\n ctaContent.parentElement.classList.toggle('active', stateCtaText.length > 0 && stateCtaTitle.length > 0);\r\n ctaContainer.classList.remove('imgTransition');\r\n });\r\n\r\n el.classList.add('active');\r\n target = document.querySelector(el.attributes.href.textContent);\r\n target.classList.add('active');\r\n document.querySelector('.communities__markets').classList.add('active');\r\n activeSubnav = el;\r\n\r\n // const propertyLinks = target.querySelectorAll('a');\r\n // const linkArray = [];\r\n // const scrollLinks = document.querySelectorAll('.communities__markets--scroll > a');\r\n\r\n // propertyLinks.forEach((item) => {\r\n // if (linkArray.indexOf(item.textContent.substring(0, 1)) === -1) linkArray.push(item.textContent.substring(0, 1));\r\n // });\r\n\r\n // scrollLinks.forEach((link) => {\r\n // linkArray.indexOf(link.getAttribute('data-letter')) !== -1 ? link.classList.add('active') : link.classList.remove('active');\r\n // });\r\n } else {\r\n document.querySelector('.communities__markets').classList.remove('active');\r\n activeSubnav = null;\r\n }\r\n};\r\n\r\nconst handleHamburger = (e) => {\r\n if (navMenu.classList.contains('nav__menu-open')) {\r\n document.body.classList.remove('body--scroll-locked');\r\n recentlyViewedCloseAction();\r\n handleCommunitiesBack(e);\r\n } else {\r\n document.body.classList.add('body--scroll-locked');\r\n }\r\n if (e) {\r\n if (e.currentTarget.classList.contains('is-active')) {\r\n e.currentTarget.classList.remove('is-active');\r\n if (savedItemsContainer) {\r\n savedItemsContainer.classList.remove('hide-actions');\r\n }\r\n } else {\r\n e.currentTarget.classList.add('is-active');\r\n }\r\n } else {\r\n const hamburger = document.querySelector('.hamburger.hamburger--spin');\r\n if (hamburger) {\r\n hamburger.classList.toggle('is-active');\r\n }\r\n }\r\n nav.classList.toggle('nav-open');\r\n navMenu.classList.toggle('nav__menu-open');\r\n};\r\n\r\nconst handleCommunitiesBack = (e) => {\r\n e.preventDefault();\r\n const activeMarkets = document.querySelector('.markets.active');\r\n if (activeMarkets) {\r\n activeMarkets.classList.remove('active');\r\n }\r\n const communitiesMarkets = document.querySelector('.communities__markets');\r\n if (communitiesMarkets) {\r\n communitiesMarkets.classList.remove('active');\r\n }\r\n};\r\n\r\nconst handleStatesBack = (e) => {\r\n const navItem = document.querySelector('.nav__item--subnav.active');\r\n if (navItem) {\r\n e.preventDefault();\r\n navItem.classList.remove('active');\r\n navSearch.classList.remove('nav__search--hidden');\r\n }\r\n};\r\n\r\nconst handleMarketHover = (e) => {\r\n const el = e.srcElement;\r\n const marketCtaImgSrc = el.getAttribute('data-metroareactaimage');\r\n const marketCtaTitle = el.getAttribute('data-metroareactatitle');\r\n const marketCtaText = el.getAttribute('data-metroareactatext');\r\n const marketCtaImgAlt = el.getAttribute('data-metroareactaimagealt');\r\n\r\n let src;\r\n let alt;\r\n let title;\r\n let text;\r\n\r\n if (marketCtaImgSrc && marketCtaImgSrc.length > 0) {\r\n src = marketCtaImgSrc;\r\n } else if (stateCtaImgSrc && stateCtaImgSrc.length > 0) {\r\n src = stateCtaImgSrc;\r\n } else {\r\n src = defaultImg;\r\n }\r\n\r\n const srcset = `${src} 1X`;\r\n\r\n if (marketCtaImgAlt && marketCtaImgAlt.length > 0) {\r\n alt = marketCtaImgAlt;\r\n } else if (stateCtaImgAlt && stateCtaImgAlt.length > 0) {\r\n alt = stateCtaImgAlt;\r\n } else {\r\n alt = defaultImgAlt;\r\n }\r\n\r\n if (marketCtaTitle && marketCtaTitle.length > 0) {\r\n title = marketCtaTitle;\r\n } else if (stateCtaTitle && stateCtaTitle.length > 0) {\r\n title = stateCtaTitle;\r\n } else {\r\n title = defaultTitle;\r\n }\r\n\r\n if (marketCtaText && marketCtaText.length > 0) {\r\n text = marketCtaText;\r\n } else if (stateCtaText.length > 0) {\r\n text = stateCtaText;\r\n } else {\r\n text = defaultText;\r\n }\r\n\r\n const cta = `${title}${text}`;\r\n\r\n ctaContainer.classList.add('imgTransition');\r\n\r\n preloadImage(marketCtaImgSrc.length > 0 ? marketCtaImgSrc : defaultImg, () => {\r\n ctaSource.setAttribute('srcset', srcset);\r\n ctaImage.setAttribute('src', src);\r\n ctaImage.setAttribute('alt', alt);\r\n ctaContent.innerHTML = cta;\r\n ctaContent.parentElement.classList.toggle('active', marketCtaText.length > 0 && marketCtaTitle.length > 0);\r\n ctaContainer.classList.remove('imgTransition');\r\n });\r\n};\r\n\r\nconst onRecentlyViewedBtnClickHandler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n closeSubNav();\r\n if (savedItemsBtn) {\r\n savedItemsBtn.classList.remove('nav__quick-access-active');\r\n }\r\n if (savedItemsContainer) {\r\n savedItemsContainer.classList.remove('show');\r\n }\r\n if (recentlyViewedList && recentlyViewedBtn) {\r\n recentlyViewedClickAction();\r\n }\r\n}\r\n\r\nconst recentlyViewedCloseAction = () => {\r\n recentlyViewedBtn.classList.remove('nav__quick-access-active');\r\n recentlyViewedList.classList.remove('show');\r\n}\r\n\r\nconst recentlyViewedClickAction = () => {\r\n if (recentlyViewedList.classList.contains('show')) {\r\n recentlyViewedCloseAction();\r\n } else {\r\n recentlyViewedBtn.classList.add('nav__quick-access-active');\r\n recentlyViewedList.classList.add('show');\r\n recentlyViewedList.querySelector('.saved-items-content__communities-list').scrollLeft = 0;\r\n if (!isMobile) {\r\n renderArrows();\r\n setTimeout(() => {\r\n document.addEventListener('click', closeSavedItems);\r\n }, 0);\r\n }\r\n }\r\n}\r\n\r\nconst closeSavedItems = () => {\r\n if (savedItemsBtn) {\r\n savedItemsBtn.classList.remove('nav__quick-access-active');\r\n }\r\n if (savedItemsContainer) {\r\n savedItemsContainer.classList.remove('show');\r\n }\r\n if (recentlyViewedBtn) {\r\n recentlyViewedBtn.classList.remove('nav__quick-access-active');\r\n }\r\n if (recentlyViewedList) {\r\n recentlyViewedList.classList.remove('show');\r\n }\r\n document.removeEventListener('click', closeSavedItems);\r\n}\r\n\r\nconst onSavedItemsMobileClickHandler = (e) => {\r\n handleHamburger();\r\n onSavedItemsClickHandler(e);\r\n if (savedItemsContainer) {\r\n savedItemsContainer.classList.add('hide-actions');\r\n }\r\n}\r\n\r\nconst onSavedItemsClickHandler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n closeSubNav();\r\n closeQuickAction();\r\n if (recentlyViewedBtn) {\r\n recentlyViewedBtn.classList.remove('nav__quick-access-active');\r\n }\r\n if (recentlyViewedList) {\r\n recentlyViewedList.classList.remove('show');\r\n }\r\n if (savedItemsContainer && savedItemsBtn) {\r\n savedItemsBtn.classList.toggle('nav__quick-access-active');\r\n\r\n if (savedItemsContainer.classList.contains('show')) {\r\n savedItemsContainer.classList.remove('show');\r\n } else {\r\n savedItemsContainer.classList.add('show');\r\n const customEvent = new CustomEvent('savedItemsOpened', { bubbles: true });\r\n savedItemsContainer.dispatchEvent(customEvent);\r\n setTimeout(() => {\r\n document.addEventListener('click', closeSavedItems);\r\n }, 0);\r\n }\r\n }\r\n}\r\n\r\nstateItems.forEach((item) => {\r\n item.addEventListener('click', handleStateClick);\r\n});\r\n\r\nif (communitiesNavBack) {\r\n communitiesNavBack.addEventListener('click', handleCommunitiesBack);\r\n}\r\n\r\nsubNavBack.forEach((item) => {\r\n item.addEventListener('click', handleStatesBack);\r\n});\r\n\r\nsubNavs.forEach((item) => item.addEventListener('click', (e) => e.stopPropagation()));\r\n\r\nnavItems.forEach((item) => {\r\n item.addEventListener('click', handleNavClick);\r\n});\r\n\r\nif (hamburger) {\r\n hamburger.addEventListener('click', handleHamburger);\r\n}\r\n\r\nmarketItems.forEach((item) => {\r\n item.addEventListener('mouseover', handleMarketHover);\r\n});\r\n\r\nif (savedItemsBtn) {\r\n savedItemsBtn.addEventListener('click', onSavedItemsClickHandler);\r\n}\r\n\r\nif (savedItemsBtnMobile) {\r\n savedItemsBtnMobile.addEventListener('click', onSavedItemsMobileClickHandler);\r\n}\r\n\r\nif (recentlyViewedBtn) {\r\n recentlyViewedBtn.addEventListener('click', onRecentlyViewedBtnClickHandler)\r\n}\r\n\r\nif (recentlyViewedBackBtn) {\r\n recentlyViewedBackBtn.addEventListener('click', recentlyViewedClickAction);\r\n}\r\n\r\nif (recentlyViewedCloseBtn) {\r\n recentlyViewedCloseBtn.addEventListener('click', recentlyViewedClickAction);\r\n}\r\n\r\nif (recentlyViewedArrowLeft) {\r\n recentlyViewedArrowLeft.addEventListener('click', () => {\r\n recentlyViewedCommunitiesList.scrollBy({\r\n top: 0,\r\n left: -152,\r\n behavior: 'smooth',\r\n });\r\n });\r\n}\r\n\r\nif (recentlyViewedArrowRight) {\r\n recentlyViewedArrowRight.addEventListener('click', () => {\r\n recentlyViewedCommunitiesList.scrollBy({\r\n top: 0,\r\n left: 152,\r\n behavior: 'smooth',\r\n });\r\n });\r\n}\r\n\r\nif (recentlyViewedCommunitiesList) {\r\n recentlyViewedCommunitiesList.addEventListener('scrollend', () => {\r\n renderArrows();\r\n });\r\n}\r\n\r\nif (recentlyViewedList) {\r\n recentlyViewedList.querySelectorAll('.plus-btn').forEach(el => {\r\n el.addEventListener('click', (e) => {\r\n const item = e.currentTarget.closest('.saved-items-content__communities-list__item-actions');\r\n const communityId = e.currentTarget.getAttribute('data-id');\r\n\r\n e.currentTarget.remove();\r\n const divAddedToCompare = document.createElement('div');\r\n divAddedToCompare.classList.add('added-to-compare');\r\n divAddedToCompare.innerHTML = `\r\n \r\n Added to Compare\r\n `;\r\n item.appendChild(divAddedToCompare);\r\n const communityIndex = communitiesArray && communitiesArray.communities && communitiesArray.communities.findIndex( obj => {\r\n return obj.Id === communityId;\r\n });\r\n\r\n if (communityIndex > -1) {\r\n communitiesArray.communities[communityIndex].IsCompare = true;\r\n }\r\n\r\n\r\n if(window.location.hostname !== 'localhost'){\r\n handleAddToCompare(communityId);\r\n }\r\n })\r\n })\r\n}\r\n\r\nconst renderArrows = () => {\r\n if (recentlyViewedList) {\r\n const el = recentlyViewedList.querySelector('.saved-items-content__communities-list');\r\n const leftArrow = recentlyViewedList.querySelector('#recently-viewed-arrow-left');\r\n const rightArrow = recentlyViewedList.querySelector('#recently-viewed-arrow-right');\r\n const canScrollLeft = el.scrollLeft > 0;\r\n const canScrollRight = el.scrollLeft !== el.scrollWidth - el.clientWidth;\r\n if (canScrollLeft && leftArrow) {\r\n leftArrow.classList.add('active')\r\n } else {\r\n leftArrow.classList.remove('active');\r\n }\r\n if (canScrollRight && rightArrow) {\r\n rightArrow.classList.add('active');\r\n } else {\r\n rightArrow.classList.remove('active');\r\n }\r\n }\r\n}\r\n\r\nconst searchOpen = () => {\r\n searchModal.classList.add('modal-search--open');\r\n body.classList.add('body--scroll-locked');\r\n}\r\n\r\nif (navSearch) {\r\n navSearch.addEventListener('click', searchOpen);\r\n}\r\n\r\nconst searchClose = () => {\r\n searchModal.classList.remove('modal-search--open');\r\n body.classList.remove('body--scroll-locked');\r\n}\r\n\r\nif (searchModalClose) {\r\n searchModalClose.addEventListener('click', searchClose);\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/nav-header/nav-header.js","import '../../../data/results.json';\r\nimport { debounce, isLocalhost } from '../../../js/modules/utilities';\r\n\r\nconst siteSearch = document.getElementById('site-search');\r\nconst loading = document.querySelector('.search-control__loader');\r\nconst results = document.querySelector('.results-search');\r\nconst resultsList = document.querySelectorAll('.results-search__list');\r\nconst locations = document.querySelector('.results-locations__wrapper');\r\nconst pages = document.querySelector('.results-search__additional--pages ul');\r\nconst aptFilters = document.querySelector('.apartment-filters');\r\nconst filters = document.querySelector('.apartment-filters__content');\r\nconst searchUrl = location.hostname == 'localhost' ? '/assets/data/results.json?' : '/maa-api/search/v2/get?';\r\nconst errorSearch = results && results.querySelector('.error-search');\r\n\r\nconst mobileTabs = document.querySelectorAll('.result-tabs li a');\r\nconst mobileCommunities = document.querySelector('.results-communities');\r\nconst mobileLocations = document.querySelector('.results-locations');\r\n\r\nconst resultMax = 2;\r\nconst resultsHeader = document.querySelector('.results-communities__header h4');\r\nconst resultsCommunities = document.querySelector('.results-communities .results-categories');\r\nconst bestMatch = document.querySelector('.result-item.bestmatch');\r\nconst toggleFilters = document.querySelector('.toggleFilters');\r\n\r\nlet query;\r\nlet loadFilters = false;\r\nlet slideActive = 0;\r\nlet slidePosition = 0;\r\n\r\nlet USDollar = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n});\r\n\r\nconst handleShow = (e) => {\r\n e.preventDefault();\r\n e.currentTarget.parentElement.previousSibling.querySelectorAll('.results-categories__result.hide').forEach((item) => {\r\n item.classList.remove('hide');\r\n })\r\n e.currentTarget.remove();\r\n}\r\n\r\nconst handleToggleFilters = (e) => {\r\n e.preventDefault();\r\n const span = e.currentTarget.querySelector('span');\r\n if (span) {\r\n span.classList.toggle('open');\r\n }\r\n const div = document.querySelector('.apartment-filters > div');\r\n if (div) {\r\n div.classList.toggle('hide');\r\n }\r\n}\r\n\r\nif (toggleFilters) {\r\n toggleFilters.addEventListener('click', handleToggleFilters);\r\n}\r\n\r\nconst handleSearch = () => {\r\n if (siteSearch.value.length > 2) {\r\n loadFilters = false;\r\n loading.style.display = 'block';\r\n resultsCommunities.innerHTML = '';\r\n query = 'query=' + siteSearch.value;\r\n fetchResults(query);\r\n } else {\r\n results.style.visibility = 'hidden';\r\n }\r\n}\r\n\r\nif (siteSearch) siteSearch.addEventListener('keyup', debounce(() => handleSearch()));\r\n\r\nconst fetchResults = (query) => {\r\n fetch(searchUrl + query)\r\n .then(response => response.json())\r\n .then(response => {\r\n // just for local testing\r\n if (query === 'query=ooops' && isLocalhost()) {\r\n response.BestMatch = null;\r\n response.Data = [];\r\n response.Pages = [];\r\n response.Filters = [];\r\n }\r\n if (query === 'query=error' && isLocalhost()) {\r\n response = {\r\n \"Message\": \"An error has occurred.\",\r\n \"ExceptionMessage\": \"Object reference not set to an instance of an object.\",\r\n \"ExceptionType\": \"System.NullReferenceException\",\r\n \"StackTrace\": \" at MAA.Business.Cache.PropertyCacheManager.SetSearchSettings(SiteSearchSettings model) in C:\\\\src\\\\MAA.Business\\\\Cache\\\\PropertyCacheManager.cs:line 57\\r\\n at MAA.Business.SiteSearch.SiteSearchService.DoSearch(SiteSearchRequest request) in C:\\\\src\\\\MAA.Business\\\\SiteSearch\\\\SiteSearchService.cs:line 170\\r\\n at MAA.Web.Controllers.SearchApiController.Index(String query, String[] bedrooms, Nullable`1 maxPrice, String[] amenities, String[] locations, Int32 top) in C:\\\\src\\\\MAA.Web\\\\Controllers\\\\SearchApiController.cs:line 28\\r\\n at lambda_method(Closure , Object , Object[] )\\r\\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_1.b__3(Object instance, Object[] methodParameters)\\r\\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Controllers.ApiControllerActionInvoker.d__1.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Controllers.ActionFilterResult.d__5.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Filters.AuthorizationFilterAttribute.d__3.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.Cors.CorsMessageHandler.d__2.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at Sitecore.Services.Infrastructure.Security.TokenDelegatingHandler.d__6.MoveNext()\\r\\n--- End of stack trace from previous location where exception was thrown ---\\r\\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\\r\\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n at System.Web.Http.HttpServer.d__24.MoveNext()\"\r\n };\r\n }\r\n loading.style.display = 'none';\r\n results.style.visibility = 'visible';\r\n\r\n if (\r\n (!(response.Properties) || response.Properties.Results.length === 0) &&\r\n (!(response.Pages) || response.Pages.length === 0)) {\r\n errorSearch && errorSearch.classList.remove('hide');\r\n } else {\r\n errorSearch && errorSearch.classList.add('hide');\r\n }\r\n\r\n if (response.hasOwnProperty('Locations') && response.Locations) {\r\n aptFilters.classList.add('active');\r\n resultsList.forEach((item) => {\r\n item.classList.add('active');\r\n });\r\n\r\n // LOAD LOCATIONS\r\n addLocations(response.Locations.Results);\r\n }\r\n\r\n // LOAD RESULT METRICS\r\n\r\n // LOAD CITIES\r\n if (response.hasOwnProperty('Properties') && response.Properties) {\r\n resultsHeader.innerHTML = `${response.Properties.TotalResults} communities and ${response.Pages.length} pages found for \"${siteSearch.value}\"`;\r\n\r\n resultsCommunities.innerHTML = '';\r\n response.Properties.Results.forEach((city) => {\r\n resultsCommunities.append(addCity(city));\r\n });\r\n }\r\n\r\n // LOAD BEST MATCH\r\n if (response.hasOwnProperty('BestMatch') && response.BestMatch) {\r\n addBestmatch(response.BestMatch);\r\n\r\n const nextImage = document.querySelector('button.next');\r\n const prevImage = document.querySelector('button.prev');\r\n nextImage.addEventListener('click', navCarousel);\r\n prevImage.addEventListener('click', navCarousel);\r\n document.querySelector('.results-search__list.bestmatch').classList.add('active');\r\n } else {\r\n document.querySelector('.results-search__list.bestmatch').classList.remove('active');\r\n }\r\n\r\n const showButton = document.querySelectorAll('.results-categories__show-button');\r\n\r\n if (showButton) {\r\n showButton.forEach((item) => {\r\n item.addEventListener('click', handleShow);\r\n })\r\n }\r\n\r\n // LOAD PAGES\r\n if (response.hasOwnProperty('Pages')) {\r\n addPages(response.Pages);\r\n }\r\n\r\n // LOAD FILTERS\r\n if (response.hasOwnProperty('Filters') && !loadFilters) {\r\n addFilters(response.Filters);\r\n\r\n const filterGroup = document.querySelectorAll('.apartment-filters__group');\r\n\r\n if (filterGroup) {\r\n filterGroup.forEach((item) => {\r\n item.addEventListener('click', (e) => {\r\n const openFilters = document.querySelectorAll('.apartment-filters__group.open');\r\n if (openFilters) {\r\n openFilters.forEach((item) => {\r\n if (item != e.currentTarget) {\r\n item.classList.remove('open');\r\n }\r\n });\r\n }\r\n e.currentTarget.classList.toggle('open');\r\n })\r\n })\r\n }\r\n }\r\n })\r\n .catch(console.error);\r\n}\r\n\r\nconst addCity = (city) => {\r\n const communities = document.createElement('UL');\r\n let maxReached = false;\r\n\r\n city.Items.forEach((item, index) => {\r\n maxReached = index > resultMax;\r\n const communityItem = addCommunity(item);\r\n communityItem.classList.toggle('hide', maxReached);\r\n communities.append(communityItem);\r\n })\r\n\r\n const container = document.createElement('DIV');\r\n container.setAttribute('role', 'group');\r\n container.classList.add(\"results-categories__container\");\r\n container.innerHTML = `
    ${city.City}, ${city.State} (${city.ItemsTotal})
    ${communities.outerHTML}`;\r\n\r\n container.innerHTML += maxReached ? '
    ' : '
    ';\r\n\r\n return container;\r\n}\r\n\r\nconst addCommunity = (community) => {\r\n const amenitylist = document.createElement('UL');\r\n\r\n if (typeof community.AmenityIconList == 'string') {\r\n addAmenities(JSON.parse(community.AmenityIconList), amenitylist);\r\n }\r\n\r\n const communityItem = document.createElement('LI');\r\n communityItem.classList.add(\"results-categories__result\");\r\n communityItem.innerHTML = `\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n ${community.Title}\r\n
    Rent starting at ${community.Starting}
    \r\n
    \r\n
    \r\n ${community.Description ? `\r\n
    ${community.Description}
    \r\n ` : ''}\r\n ${community.Bedrooms ? `\r\n
    ${community.Bedrooms}
    \r\n ` : ''}\r\n
    \r\n ${amenitylist.outerHTML ? `\r\n
    \r\n ${amenitylist.outerHTML}\r\n
    \r\n ` : ''}\r\n
    \r\n
    \r\n
    \r\n
    \r\n ${community.Title}\r\n
    ${community.Description}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n ${community.Title}\r\n ${community.Description ? `\r\n
    ${community.Description}
    \r\n ` : ''}\r\n
    \r\n
    \r\n ${community.Starting ? `\r\n
    Rent starting at ${community.Starting}
    \r\n ` : ''}\r\n ${community.Bedrooms ? `\r\n
    ${community.Bedrooms}
    \r\n ` : ''}\r\n
    \r\n
    \r\n ${amenitylist.outerHTML}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    `;\r\n return communityItem;\r\n}\r\n\r\nconst addAmenities = (list, target) => {\r\n if (list) {\r\n list.forEach((item) => {\r\n const amenityItem = document.createElement('LI');\r\n amenityItem.innerHTML = `
    ${item.Name}`;\r\n target.append(amenityItem);\r\n })\r\n return list;\r\n }\r\n}\r\n\r\nconst addLocations = (list) => {\r\n document.querySelectorAll('.results-categories__result.community').forEach((el) => {\r\n el.remove();\r\n })\r\n\r\n Array.from(locations.getElementsByClassName(\"results-categories\")).forEach((el) => {\r\n el.remove();\r\n })\r\n\r\n list.forEach((location) => {\r\n const locationGroup = document.createElement('DIV');\r\n locationGroup.classList.add('results-categories');\r\n const communityList = document.createElement('UL');\r\n let maxReached = false;\r\n\r\n location.Items.forEach((community, index) => {\r\n maxReached = index > resultMax;\r\n const communityItem = document.createElement('LI');\r\n communityItem.classList.add('results-categories__result', 'community');\r\n communityItem.classList.toggle('hide', maxReached);\r\n communityItem.innerHTML = `${community.Title} (${community.Count})`;\r\n communityList.append(communityItem);\r\n })\r\n\r\n let locationGroupHTML = `
    \r\n
    \r\n
    \r\n ${location.City}, ${location.State}\r\n ${communityList.outerHTML}`;\r\n\r\n locationGroupHTML += maxReached ? '
    ' : '';\r\n\r\n locationGroup.innerHTML = locationGroupHTML;\r\n\r\n locations.append(locationGroup);\r\n })\r\n}\r\n\r\nconst addBestmatch = (list) => {\r\n const imgCarousel = document.createElement('DIV');\r\n imgCarousel.classList.add('carousel', 'clip');\r\n\r\n const imgNav = document.createElement('DIV');\r\n imgNav.classList.add('carousel-info__nav-dots');\r\n\r\n let imgItem = '';\r\n let imgDot = '';\r\n let imgMobile = '';\r\n\r\n list.Images.forEach((img, index) => {\r\n imgItem += `
    `;\r\n imgDot += ``;\r\n\r\n if (index == 0) {\r\n imgMobile = ``;\r\n }\r\n })\r\n\r\n imgCarousel.innerHTML = imgItem;\r\n imgNav.innerHTML = imgDot;\r\n\r\n const bestMatchAmenitylist = document.createElement('UL');\r\n\r\n if (typeof list.AmenityIconList == 'string') {\r\n addAmenities(JSON.parse(list.AmenityIconList), bestMatchAmenitylist);\r\n }\r\n\r\n const searchCarousel = `
    ${imgCarousel.outerHTML}
    \r\n
    \r\n \r\n ${imgNav.outerHTML}\r\n \r\n
    `;\r\n\r\n const bestMatchContent = `\r\n
    \r\n
    ${searchCarousel}
    \r\n
    \r\n
    \r\n ${list.Title}\r\n
    Rent starting at ${list.Starting}
    \r\n
    \r\n
    \r\n ${list.Description ? `\r\n
    ${list.Description}
    \r\n ` : ''}\r\n ${list.Bedrooms ? `\r\n
    ${list.Bedrooms}
    \r\n ` : ''}\r\n
    \r\n ${bestMatchAmenitylist.outerHTML ? `\r\n
    ${bestMatchAmenitylist.outerHTML}
    \r\n ` : ''}\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n ${list.Title}\r\n
    ${list.Description}
    \r\n
    \r\n
    \r\n
    ${imgMobile}
    \r\n
    \r\n
    \r\n ${list.Title}\r\n ${list.Description ? `\r\n
    ${list.Description}
    \r\n ` : ''}\r\n
    \r\n
    \r\n ${list.Starting ? `\r\n
    Rent starting at ${list.Starting}
    \r\n ` : ''}\r\n ${list.Bedrooms ? `\r\n
    ${list.Bedrooms}
    \r\n ` : ''}\r\n
    \r\n ${bestMatchAmenitylist.outerHTML ? `\r\n
    ${bestMatchAmenitylist.outerHTML}
    \r\n ` : ''}\r\n
    \r\n
    \r\n
    `;\r\n\r\n bestMatch.innerHTML = bestMatchContent;\r\n document.querySelector('.results-search__list.bestmatch').classList.remove('hide');\r\n}\r\n\r\nconst addPages = (list) => {\r\n const currentPageList = pages.querySelectorAll('li');\r\n if (currentPageList) {\r\n currentPageList.forEach((el) => {\r\n el.remove();\r\n });\r\n }\r\n\r\n list.forEach((item) => {\r\n const pageItem = document.createElement('LI');\r\n pageItem.innerHTML = `${item.Title}`;\r\n pages.append(pageItem);\r\n });\r\n\r\n const qwe = results.querySelector('.results-search__additional--pages');\r\n const pageTitle = qwe && qwe.querySelector('h3');\r\n if (list.length === 0) {\r\n pageTitle && pageTitle.classList.add('hide');\r\n } else {\r\n pageTitle && pageTitle.classList.remove('hide');\r\n }\r\n}\r\n\r\nconst addFilters = (list) => {\r\n document.querySelectorAll('.apartment-filters__group').forEach((item) => {\r\n item.remove();\r\n })\r\n\r\n list.forEach((item) => {\r\n const filterGroup = document.createElement('DIV');\r\n filterGroup.setAttribute('role', 'group');\r\n filterGroup.classList.add('apartment-filters__group');\r\n\r\n const filterList = document.createElement('UL');\r\n filterList.setAttribute('id', item.FieldName);\r\n filterList.classList.add('apartment-filters__options-container');\r\n\r\n if (item.FieldName == 'maxPrice') {\r\n Object.keys(item.Values).forEach((key, index) => {\r\n filterList.append(addFilterItem('radio', item.FieldName, key, item.Values[key], index, 'Up to '));\r\n })\r\n } else {\r\n Object.keys(item.Values).forEach((key, index) => {\r\n filterList.append(addFilterItem('checkbox', item.FieldName, key, item.Values[key], index, ''));\r\n })\r\n }\r\n\r\n filterGroup.innerHTML = `
    \r\n \r\n ${filterList.outerHTML}\r\n
    `\r\n\r\n filters.append(filterGroup);\r\n\r\n document.querySelectorAll('.filter-input').forEach((el) => {\r\n el.addEventListener('change', handleFilter);\r\n })\r\n })\r\n\r\n loadFilters = true;\r\n}\r\n\r\nconst handleFilter = (e) => {\r\n //console.log('change', e.currentTarget.checked);\r\n query = 'query=' + siteSearch.value;\r\n document.querySelectorAll('.filter-input').forEach((item) => {\r\n if (item.checked) {\r\n query += `&${item.getAttribute('name')}=${item.value}`;\r\n }\r\n })\r\n\r\n fetchResults(query);\r\n}\r\n\r\nconst addFilterItem = (type, name, key, value, id, prefix) => {\r\n if (name == 'maxPrice') value = USDollar.format(value);\r\n const filterItem = document.createElement('LI');\r\n filterItem.classList.add(\"apartment-filters__option\");\r\n filterItem.innerHTML = `
    `;\r\n return filterItem;\r\n}\r\n\r\nconst navCarousel = (e) => {\r\n e.stopPropagation();\r\n let carousel = e.currentTarget.parentElement.previousElementSibling;\r\n let slides = carousel.querySelectorAll('.carousel-item');\r\n let slideWidth = 100;\r\n let slideCount = slides.length;\r\n let dots = null;\r\n let nav = e.currentTarget.classList.contains('next') ? 'next' : 'prev';\r\n\r\n console.log(slides, carousel.children);\r\n\r\n if (nav === 'next' && Math.abs(slidePosition) < slideWidth * (slideCount - 1)) {\r\n slidePosition -= 100;\r\n slideActive++;\r\n dots = e.currentTarget.previousElementSibling.children;\r\n } else if (nav === 'prev' && slidePosition < 0) {\r\n slidePosition += 100;\r\n slideActive--;\r\n dots = e.currentTarget.nextElementSibling.children;\r\n }\r\n\r\n carousel.setAttribute('data-active', slideActive);\r\n carousel.setAttribute('data-position', slidePosition);\r\n\r\n carousel.style.transform = 'translateX(' + slidePosition + '%)';\r\n\r\n if (dots != null) {\r\n for (var i = 0; i < dots.length; i++) {\r\n if (i === slideActive) {\r\n dots[i].classList.add('active');\r\n } else {\r\n dots[i].classList.remove('active');\r\n }\r\n }\r\n }\r\n}\r\n\r\ndocument.addEventListener(\"openSearchWithValue\", ((e) => {\r\n siteSearch.value = e.detail.value;\r\n siteSearch.focus();\r\n debounce(() => handleSearch());\r\n}));\r\n\r\nconst switchTabs = (e) => {\r\n mobileTabs.forEach((item) => {\r\n item.classList.remove('active');\r\n });\r\n\r\n mobileCommunities.classList.remove('active');\r\n mobileLocations.classList.remove('active');\r\n\r\n const targetLabel = '.results-' + e.currentTarget.getAttribute('data-target');\r\n const target = document.querySelector(targetLabel);\r\n e.currentTarget.classList.add('active');\r\n target.classList.add('active');\r\n}\r\n\r\nmobileTabs.forEach((item) => {\r\n item.addEventListener('click', switchTabs);\r\n})\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/nav-header/search.js","module.exports = {\"BestMatch\":{\"Description\":\"1020 Lenox Park Blvd NE, Atlanta, GA 30319\",\"ImageUrl\":\"-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/2023/pool2edit.jpg\",\"Starting\":\"$1,420\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[{\"Type\":\"GALLERY\",\"Description\":\"Beautiful pool\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/2023/pool2edit.jpg\"},{\"Type\":\"GALLERY\",\"Description\":\"Welcome home\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/pdp-gallery-lifestyle-images/lifestyle-images/340a2762_a.jpg\"},{\"Type\":\"GALLERY\",\"Description\":\"Fitness center\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/mg-12.jpg\"},{\"Type\":\"GALLERY\",\"Description\":\"Tennis court\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/2023/outsideloungeedit.jpg\"},{\"Type\":\"GALLERY\",\"Description\":\"Lighted tennis courts\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/pdp-gallery-lifestyle-images/lifestyle-images/istock-519709446.jpg\"},{\"Type\":\"GALLERY\",\"Description\":\"Beautiful landscaping throughout Post Gardens\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/mg-7.jpg\"},{\"Type\":\"EXTERIOR\",\"Description\":\"Beautiful pool\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/2023/pool2edit.jpg\"},{\"Type\":\"EXTERIOR\",\"Description\":\"Welcome home\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/pdp-gallery-lifestyle-images/lifestyle-images/340a2762_a.jpg\"},{\"Type\":\"EXTERIOR\",\"Description\":\"Fitness center\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/mg-12.jpg\"},{\"Type\":\"EXTERIOR\",\"Description\":\"Tennis court\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/2023/outsideloungeedit.jpg\"},{\"Type\":\"EXTERIOR\",\"Description\":\"Lighted tennis courts\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/pdp-gallery-lifestyle-images/lifestyle-images/istock-519709446.jpg\"},{\"Type\":\"EXTERIOR\",\"Description\":\"Beautiful landscaping throughout Post Gardens\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/mg-7.jpg\"},{\"Type\":\"INTERIOR\",\"Description\":\"Beautiful pool\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/2023/pool2edit.jpg\"},{\"Type\":\"INTERIOR\",\"Description\":\"Welcome home\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/pdp-gallery-lifestyle-images/lifestyle-images/340a2762_a.jpg\"},{\"Type\":\"INTERIOR\",\"Description\":\"Fitness center\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/mg-12.jpg\"},{\"Type\":\"INTERIOR\",\"Description\":\"Tennis court\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/2023/outsideloungeedit.jpg\"},{\"Type\":\"INTERIOR\",\"Description\":\"Lighted tennis courts\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/pdp-gallery-lifestyle-images/lifestyle-images/istock-519709446.jpg\"},{\"Type\":\"INTERIOR\",\"Description\":\"Beautiful landscaping throughout Post Gardens\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_234,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-garden-atl/slides/mg-7.jpg\"}],\"Id\":\"b5ce4123-bb15-47f7-8b21-009771ec2557\",\"Key\":\"b5ce4123-bb15-47f7-8b21-009771ec2557\",\"Title\":\"MAA Gardens\",\"Url\":\"/georgia/atlanta/maa-gardens/\",\"IsBestMatch\":true,\"IsPage\":false},\"Filters\":[{\"DisplayName\":\"Locations\",\"FieldName\":\"locations\",\"Values\":{\"Atlanta, GA\":\"Atlanta, GA\",\"Austin, TX\":\"Austin, TX\",\"Charleston, SC\":\"Charleston, SC\",\"Charlotte, NC\":\"Charlotte, NC\",\"Coral Springs, FL\":\"Coral Springs, FL\",\"Dallas/Fort Worth, TX\":\"Dallas/Fort Worth, TX\",\"DC Metro, VA\":\"DC Metro, VA\",\"Denver, CO\":\"Denver, CO\",\"Durham, NC\":\"Durham, NC\",\"Greenville, SC\":\"Greenville, SC\",\"Houston, TX\":\"Houston, TX\",\"Jacksonville, FL\":\"Jacksonville, FL\",\"Lexington, KY\":\"Lexington, KY\",\"Nashville, TN\":\"Nashville, TN\",\"Orlando, FL\":\"Orlando, FL\",\"Phoenix, AZ\":\"Phoenix, AZ\",\"Raleigh/Cary, NC\":\"Raleigh/Cary, NC\",\"Savannah, GA\":\"Savannah, GA\",\"Tampa, FL\":\"Tampa, FL\"}},{\"DisplayName\":\"Bedrooms\",\"FieldName\":\"bedrooms\",\"Values\":{\"0\":\"Studio\",\"1\":\"1 Bedroom\",\"2\":\"2 Bedrooms\",\"3\":\"3 Bedrooms\"}},{\"DisplayName\":\"Max Price\",\"FieldName\":\"maxPrice\",\"Values\":{\"1000.0\":\"1000.0\",\"1100.0\":\"1100.0\",\"1200.0\":\"1200.0\",\"1300.0\":\"1300.0\",\"1400.0\":\"1400.0\",\"1500.0\":\"1500.0\",\"1600.0\":\"1600.0\",\"1700.0\":\"1700.0\",\"1800.0\":\"1800.0\",\"1900.0\":\"1900.0\",\"2000.0\":\"2000.0\",\"2100.0\":\"2100.0\",\"2200.0\":\"2200.0\",\"2300.0\":\"2300.0\",\"3200.0\":\"3200.0\"}},{\"DisplayName\":\"Amenities\",\"FieldName\":\"amenities\",\"Values\":{\"3d7e32c09e824338bfa06c4754dfe78d\":\"24/hr Fitness Center\",\"080438135f174ee79702706331abbd06\":\"Bark Park\",\"940f76850de74b4aa0f435f63c5842a1\":\"Basketball\",\"1ae39a7859d04c84a089e42678e678da\":\"Business Center\",\"f6e494a8b08c45a4988ad41273c99510\":\"Cabana\",\"3f7903ab8ef94983be4e480f66d2daca\":\"Clubhouse\",\"b79639c2ce714bf9bf56cfbf7e97df96\":\"Concierge Service\",\"67962288f8c44275afb123c16e9fd563\":\"Courtyard Fireplace\",\"dd35df4a8290437ea875493db699f593\":\"Coworking Space\",\"9a68d9ceb73b484697a0f36b7ce0b18e\":\"Dog Run\",\"1e01fe2b5f404be7a30edcde0ce4c901\":\"E.V. Charging Station\",\"3216302682094524bd857a64684bde55\":\"Energy Star Appliances\",\"6d5450e5cea7497b8f2e7b2878ad1dc5\":\"Fitness Center\",\"1c97ff7b613a4b38ab0c9af36720a2a5\":\"Fitness Center with MIRROR\",\"e9daa8b744894734a6453d6b8b8ac1eb\":\"Garage Parking\",\"2c08115e53f6490a8822624dd7464871\":\"Gated Community\",\"eeaef1f296d846ffafb1c4a2940b2845\":\"Google Fiber\",\"48fdb013d9e84e33862379f0f1c1a3ed\":\"Granite Countertops\",\"28e0d7272057419e92aa34d63c27604b\":\"Grill & Picnic Area\",\"132c9c3da25740a98e22cad66dd143bb\":\"High Speed Internet\",\"66eecf3564814ea49ece19fa921b8810\":\"In unit Laundry\",\"7762ab316cbf418584535410ca8487dc\":\"On-site Recycling\",\"334f09c344924838aae78914d09f259e\":\"Outdoor Kitchen\",\"3d465336c64342fea0aa2cdcb7c74aa8\":\"Package Lockers\",\"62107d6ff3aa49e09d24f088314ba83d\":\"Park Access\",\"ea6371fcdb244a15a681dff39942b088\":\"Pet Wash Station\",\"bd2587ba415141dc8508bb32cf959d85\":\"Playground\",\"55e3c27e837a476b892ea13bda11cb5a\":\"Pool\",\"747316d7b0c84efd8be390e73275989e\":\"Resident Lounge\",\"f599fd6593c44e41a3941f61ff59cf02\":\"Retail Access\",\"43da77c4b8454e77b13175f001ab2f1a\":\"Rooftop Lounge\",\"f44ee95e12c5427fa4388a182977a17e\":\"Running Trails\",\"e1dd3745446c4e8dbd7c5598636690e4\":\"Smart Home Technology\",\"09a34d1b518b4f72b40cdc48ffdc4223\":\"Social Outings\",\"5745f5babcdf49feb971116da696cf23\":\"Sports Court\",\"9982914bec884bd297d3a7d2526718ed\":\"Stainless Steel Appliances\",\"ff84a828ae3748c4b28939075c555102\":\"Sun Deck\",\"e26c8f4f89ac455cb9589dd0421cec46\":\"Tennis\",\"3e342769401e4b9f861921380372ccbc\":\"Valet Trash\",\"e29694c6cf034ad0999c67cb0f29220d\":\"Volleyball\",\"a741d0bc5c834214817cd3b1f6d65fb7\":\"WiFi Cafe\"}}],\"Data\":[{\"Key\":\"3ef8b410-af88-44be-9971-1571e590b6ca\",\"Title\":\"Locations\",\"Icon\":\"icon-city-state\",\"TotalResults\":0,\"Results\":[{\"Id\":\"2f6ddad2-690e-4b27-be2c-7922b4981739\",\"Key\":\"2f6ddad2-690e-4b27-be2c-7922b4981739\",\"City\":\"Phoenix\",\"State\":\"AZ\",\"Url\":\"/arizona/phoenix\",\"ItemsTotal\":null,\"Items\":[{\"Count\":2,\"Id\":\"7760c483-4f1e-4e8c-9602-046f7f36fdcd\",\"Key\":\"7760c483-4f1e-4e8c-9602-046f7f36fdcd\",\"Title\":\"Gilbert\",\"Url\":\"/arizona/phoenix/gilbert\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"eb5f152d-5809-4446-8c5b-11ab77e71606\",\"Key\":\"eb5f152d-5809-4446-8c5b-11ab77e71606\",\"Title\":\"Old Town\",\"Url\":\"/arizona/phoenix/old-town\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"690d4a63-acea-49d9-a512-8a73ea72afb4\",\"Key\":\"690d4a63-acea-49d9-a512-8a73ea72afb4\",\"Title\":\"Phoenix\",\"Url\":\"/arizona/phoenix/phoenix\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"1f21eef3-7f7b-4e0a-8ff5-cd71eeebeccc\",\"Key\":\"1f21eef3-7f7b-4e0a-8ff5-cd71eeebeccc\",\"Title\":\"Scottsdale\",\"Url\":\"/arizona/phoenix/scottsdale\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"11c59ad8-44d7-4dc8-9639-3712e7262f6b\",\"Key\":\"11c59ad8-44d7-4dc8-9639-3712e7262f6b\",\"City\":\"Denver\",\"State\":\"CO\",\"Url\":\"/colorado/denver\",\"ItemsTotal\":null,\"Items\":[{\"Count\":2,\"Id\":\"7a3f5f8f-a805-4c70-a673-9a0b3f8f72f0\",\"Key\":\"7a3f5f8f-a805-4c70-a673-9a0b3f8f72f0\",\"Title\":\"Denver\",\"Url\":\"/colorado/denver/denver\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"3aa8b174-0b06-42cf-b723-e3f2c4563eb1\",\"Key\":\"3aa8b174-0b06-42cf-b723-e3f2c4563eb1\",\"Title\":\"Westminster\",\"Url\":\"/colorado/denver/westminster\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"7ad1a8b3-a0a2-4361-9da0-5e84056bbb00\",\"Key\":\"7ad1a8b3-a0a2-4361-9da0-5e84056bbb00\",\"City\":\"Orlando\",\"State\":\"FL\",\"Url\":\"/florida/orlando\",\"ItemsTotal\":null,\"Items\":[{\"Count\":2,\"Id\":\"fcf2c4e0-459f-4c0e-a7f4-c452b03574fc\",\"Key\":\"fcf2c4e0-459f-4c0e-a7f4-c452b03574fc\",\"Title\":\"Downtown Orlando\",\"Url\":\"/florida/orlando/downtown-orlando\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"4f8b3e1f-d067-4f0a-8197-7e68770e2143\",\"Key\":\"4f8b3e1f-d067-4f0a-8197-7e68770e2143\",\"Title\":\"Lake Mary\",\"Url\":\"/florida/orlando/lake-mary\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"8503e53c-4050-44cc-9c26-55c96947f4a8\",\"Key\":\"8503e53c-4050-44cc-9c26-55c96947f4a8\",\"Title\":\"Lake Nona\",\"Url\":\"/florida/orlando/lake-nona\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"715965ce-f3d0-475b-a16d-6eacb15bbf7c\",\"Key\":\"715965ce-f3d0-475b-a16d-6eacb15bbf7c\",\"Title\":\"Medical City\",\"Url\":\"/florida/orlando/medical-city\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":6,\"Id\":\"c2e32238-c217-4ea7-9478-a54aead77a84\",\"Key\":\"c2e32238-c217-4ea7-9478-a54aead77a84\",\"Title\":\"Orlando\",\"Url\":\"/florida/orlando/orlando\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"5f8f963d-f478-4fe5-8a98-1a89b7ad1992\",\"Key\":\"5f8f963d-f478-4fe5-8a98-1a89b7ad1992\",\"Title\":\"Windermere\",\"Url\":\"/florida/orlando/windermere\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"742d1c3f-a94c-4589-b8a2-48d243555d70\",\"Key\":\"742d1c3f-a94c-4589-b8a2-48d243555d70\",\"City\":\"Tampa\",\"State\":\"FL\",\"Url\":\"/florida/tampa\",\"ItemsTotal\":null,\"Items\":[{\"Count\":2,\"Id\":\"0acb6d53-f16e-41fc-bb3a-8c7b6c4634a5\",\"Key\":\"0acb6d53-f16e-41fc-bb3a-8c7b6c4634a5\",\"Title\":\"Brandon\",\"Url\":\"/florida/tampa/brandon\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":8,\"Id\":\"e25ad9d1-e434-41ef-8b07-0b1d36b95785\",\"Key\":\"e25ad9d1-e434-41ef-8b07-0b1d36b95785\",\"Title\":\"Tampa\",\"Url\":\"/florida/tampa/tampa\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"82a4811c-b007-4b91-9ca2-dc9179e5688a\",\"Key\":\"82a4811c-b007-4b91-9ca2-dc9179e5688a\",\"City\":\"Atlanta\",\"State\":\"GA\",\"Url\":\"/georgia/atlanta\",\"ItemsTotal\":null,\"Items\":[{\"Count\":1,\"Id\":\"8ae9bf9a-8bb6-4f86-a972-617e683c0ea3\",\"Key\":\"8ae9bf9a-8bb6-4f86-a972-617e683c0ea3\",\"Title\":\"Ashford Park\",\"Url\":\"/georgia/atlanta/ashford-park\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":16,\"Id\":\"534f1160-cdbf-420d-874f-680cfb434b93\",\"Key\":\"534f1160-cdbf-420d-874f-680cfb434b93\",\"Title\":\"Atlanta\",\"Url\":\"/georgia/atlanta/atlanta\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"0d228ed0-c3a2-4167-a7cb-facaa5509d9a\",\"Key\":\"0d228ed0-c3a2-4167-a7cb-facaa5509d9a\",\"Title\":\"Brookhaven\",\"Url\":\"/georgia/atlanta/brookhaven\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":8,\"Id\":\"20649f90-5caa-49dc-9fa8-4634ed1b0e50\",\"Key\":\"20649f90-5caa-49dc-9fa8-4634ed1b0e50\",\"Title\":\"Buckhead\",\"Url\":\"/georgia/atlanta/buckhead\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"de51139f-6b5b-4e08-8ca3-eecdd647ed24\",\"Key\":\"de51139f-6b5b-4e08-8ca3-eecdd647ed24\",\"Title\":\"Decatur\",\"Url\":\"/georgia/atlanta/decatur\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"cc949b79-2fc9-46f1-b1e6-3e1126c8a425\",\"Key\":\"cc949b79-2fc9-46f1-b1e6-3e1126c8a425\",\"Title\":\"Downtown\",\"Url\":\"/georgia/atlanta/downtown\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":6,\"Id\":\"48bb7688-d38a-47ac-b37b-c3cd88a93b31\",\"Key\":\"48bb7688-d38a-47ac-b37b-c3cd88a93b31\",\"Title\":\"Duluth\",\"Url\":\"/georgia/atlanta/duluth\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"0b676d85-cf1b-415f-ba1d-29328d74d1a9\",\"Key\":\"0b676d85-cf1b-415f-ba1d-29328d74d1a9\",\"Title\":\"Dunwoody\",\"Url\":\"/georgia/atlanta/dunwoody\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"1fad497b-c5ee-47fd-99d5-0ae12bcea493\",\"Key\":\"1fad497b-c5ee-47fd-99d5-0ae12bcea493\",\"Title\":\"Emory\",\"Url\":\"/georgia/atlanta/emory\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"1add8395-0e70-4a92-8f03-0d60777ecbbb\",\"Key\":\"1add8395-0e70-4a92-8f03-0d60777ecbbb\",\"Title\":\"Gainesville\",\"Url\":\"/georgia/atlanta/gainesville\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"ac537923-a137-4611-913a-5718ba48b3de\",\"Key\":\"ac537923-a137-4611-913a-5718ba48b3de\",\"Title\":\"Kennesaw\",\"Url\":\"/georgia/atlanta/kennesaw\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"1310fa7f-cbe6-421c-a62e-1e5ba8f06fa3\",\"Key\":\"1310fa7f-cbe6-421c-a62e-1e5ba8f06fa3\",\"Title\":\"Lake Lanier Club\",\"Url\":\"/georgia/atlanta/lake-lanier\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"7acddf96-fecd-4d77-96de-27aab8ab3f90\",\"Key\":\"7acddf96-fecd-4d77-96de-27aab8ab3f90\",\"Title\":\"Lenox Park\",\"Url\":\"/georgia/atlanta/lenox-park\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"ae5fc969-1ed0-46db-8f23-56e945cabc0e\",\"Key\":\"ae5fc969-1ed0-46db-8f23-56e945cabc0e\",\"Title\":\"Marietta\",\"Url\":\"/georgia/atlanta/marietta\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"305252fa-d931-456f-98c1-419226f96058\",\"Key\":\"305252fa-d931-456f-98c1-419226f96058\",\"Title\":\"Midtown\",\"Url\":\"/georgia/atlanta/midtown\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"6fcb048c-b7df-42b4-a96f-25e455858429\",\"Key\":\"6fcb048c-b7df-42b4-a96f-25e455858429\",\"Title\":\"Perimeter Center\",\"Url\":\"/georgia/atlanta/perimeter-center\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"bf13039b-1079-4e12-9133-45bf09582a16\",\"Key\":\"bf13039b-1079-4e12-9133-45bf09582a16\",\"Title\":\"Sandy Springs\",\"Url\":\"/georgia/atlanta/sandy-springs\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"ba917cd2-a4c0-493b-8820-a59168ff1f71\",\"Key\":\"ba917cd2-a4c0-493b-8820-a59168ff1f71\",\"Title\":\"Smyrna\",\"Url\":\"/georgia/atlanta/smyrna\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"bf1e73d5-0533-4579-99a7-ec8c17ed7703\",\"Key\":\"bf1e73d5-0533-4579-99a7-ec8c17ed7703\",\"City\":\"Savannah\",\"State\":\"GA\",\"Url\":\"/georgia/savannah\",\"ItemsTotal\":null,\"Items\":[{\"Count\":5,\"Id\":\"c98104b9-7162-4246-92a0-75384e919b9f\",\"Key\":\"c98104b9-7162-4246-92a0-75384e919b9f\",\"Title\":\"Savannah\",\"Url\":\"/georgia/savannah/savannah\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"61878812-ffbf-45bd-8da5-37a98bd80531\",\"Key\":\"61878812-ffbf-45bd-8da5-37a98bd80531\",\"Title\":\"Southside\",\"Url\":\"/georgia/savannah/southside\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"8cee65ff-52b6-4d67-b5a7-d37075739f6d\",\"Key\":\"8cee65ff-52b6-4d67-b5a7-d37075739f6d\",\"City\":\"Lexington\",\"State\":\"KY\",\"Url\":\"/kentucky/lexington\",\"ItemsTotal\":null,\"Items\":[{\"Count\":4,\"Id\":\"2420fe96-089b-4fda-962e-203072227912\",\"Key\":\"2420fe96-089b-4fda-962e-203072227912\",\"Title\":\"Lexington\",\"Url\":\"/kentucky/lexington/lexington\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"459b4959-38cf-4b48-afe2-fe01cfc550b6\",\"Key\":\"459b4959-38cf-4b48-afe2-fe01cfc550b6\",\"City\":\"Charlotte\",\"State\":\"NC\",\"Url\":\"/north-carolina/charlotte\",\"ItemsTotal\":null,\"Items\":[{\"Count\":17,\"Id\":\"868d8e3a-42a2-4547-9fef-0ee99aa8ec4d\",\"Key\":\"868d8e3a-42a2-4547-9fef-0ee99aa8ec4d\",\"Title\":\"Charlotte\",\"Url\":\"/north-carolina/charlotte/charlotte\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"a0616bf8-529a-4e27-a8f4-36715e299055\",\"Key\":\"a0616bf8-529a-4e27-a8f4-36715e299055\",\"Title\":\"Matthews\",\"Url\":\"/north-carolina/charlotte/matthews\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":4,\"Id\":\"96fb7c49-7fdd-4ade-9bd5-a92bde3fc2d3\",\"Key\":\"96fb7c49-7fdd-4ade-9bd5-a92bde3fc2d3\",\"Title\":\"South End\",\"Url\":\"/north-carolina/charlotte/south-end\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":5,\"Id\":\"c31a4277-d8b7-457d-a039-9af70c2af257\",\"Key\":\"c31a4277-d8b7-457d-a039-9af70c2af257\",\"Title\":\"University City\",\"Url\":\"/north-carolina/charlotte/the-university\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"6deed62a-413d-423f-a86f-7a0903442cba\",\"Key\":\"6deed62a-413d-423f-a86f-7a0903442cba\",\"Title\":\"Uptown Charlotte\",\"Url\":\"/north-carolina/charlotte/uptown\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"8f0e08ac-f5f7-4e1c-95ae-52c70ee81155\",\"Key\":\"8f0e08ac-f5f7-4e1c-95ae-52c70ee81155\",\"City\":\"Durham\",\"State\":\"NC\",\"Url\":\"/north-carolina/durham\",\"ItemsTotal\":null,\"Items\":[{\"Count\":2,\"Id\":\"f8d1183b-302e-459f-9bd0-98575831d59c\",\"Key\":\"f8d1183b-302e-459f-9bd0-98575831d59c\",\"Title\":\"Duke Forest\",\"Url\":\"/north-carolina/durham/duke-forest\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"68511989-ded1-4d85-9e42-e40227f26763\",\"Key\":\"68511989-ded1-4d85-9e42-e40227f26763\",\"Title\":\"Durham\",\"Url\":\"/north-carolina/durham/durham\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"4b03a9ab-03c8-4199-8206-f1843c646fa4\",\"Key\":\"4b03a9ab-03c8-4199-8206-f1843c646fa4\",\"City\":\"Raleigh/Cary\",\"State\":\"NC\",\"Url\":\"/north-carolina/raleigh-cary\",\"ItemsTotal\":null,\"Items\":[{\"Count\":5,\"Id\":\"4f2fe2d7-97aa-48f3-b282-775a39a8b7f3\",\"Key\":\"4f2fe2d7-97aa-48f3-b282-775a39a8b7f3\",\"Title\":\"Brier Creek\",\"Url\":\"/north-carolina/raleigh-cary/brier-creek\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"406fe904-4e3c-4080-b982-a801cf33b15a\",\"Key\":\"406fe904-4e3c-4080-b982-a801cf33b15a\",\"Title\":\"Cary\",\"Url\":\"/north-carolina/raleigh-cary/cary\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":9,\"Id\":\"570b9f0a-c1a9-46e7-ab45-0dfa05ac087f\",\"Key\":\"570b9f0a-c1a9-46e7-ab45-0dfa05ac087f\",\"Title\":\"Raleigh\",\"Url\":\"/north-carolina/raleigh-cary/raleigh\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"dfaae866-5972-4bf7-9e26-d54f076bc95b\",\"Key\":\"dfaae866-5972-4bf7-9e26-d54f076bc95b\",\"Title\":\"Wade Park\",\"Url\":\"/north-carolina/raleigh-cary/wade-park\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"1c8ac46b-6314-47a8-a128-403030b0ec87\",\"Key\":\"1c8ac46b-6314-47a8-a128-403030b0ec87\",\"City\":\"Charleston\",\"State\":\"SC\",\"Url\":\"/south-carolina/charleston\",\"ItemsTotal\":null,\"Items\":[{\"Count\":4,\"Id\":\"aedb6b9a-b698-4f50-8950-95a3de66a4f3\",\"Key\":\"aedb6b9a-b698-4f50-8950-95a3de66a4f3\",\"Title\":\"Charleston\",\"Url\":\"/south-carolina/charleston/charleston\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"f81ce4d6-4110-475e-91ba-b041f2773d9f\",\"Key\":\"f81ce4d6-4110-475e-91ba-b041f2773d9f\",\"Title\":\"Crowfield Plantation\",\"Url\":\"/south-carolina/charleston/crowfield-plantation\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"fb0e8833-4b43-47e3-9969-f92d7e300402\",\"Key\":\"fb0e8833-4b43-47e3-9969-f92d7e300402\",\"Title\":\"Dorchester County\",\"Url\":\"/south-carolina/charleston/dorchester-county\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"b25b407e-28e9-4971-acd7-09226ab27fe7\",\"Key\":\"b25b407e-28e9-4971-acd7-09226ab27fe7\",\"Title\":\"Folly Beach\",\"Url\":\"/south-carolina/charleston/folly-beach\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"47994259-f384-4ed1-b962-d7924603193a\",\"Key\":\"47994259-f384-4ed1-b962-d7924603193a\",\"Title\":\"Goose Creek\",\"Url\":\"/south-carolina/charleston/goose-creek\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"61196af5-2b70-4fd3-a87a-e348157a8fe2\",\"Key\":\"61196af5-2b70-4fd3-a87a-e348157a8fe2\",\"Title\":\"I on\",\"Url\":\"/south-carolina/charleston/i-on\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"7df0c145-c9e3-46ad-b3d6-928238737313\",\"Key\":\"7df0c145-c9e3-46ad-b3d6-928238737313\",\"Title\":\"Ladson\",\"Url\":\"/south-carolina/charleston/ladson\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"90e4f53a-0e18-477e-ad6b-e681cc35ea5d\",\"Key\":\"90e4f53a-0e18-477e-ad6b-e681cc35ea5d\",\"Title\":\"Midtown Mt Pleasant\",\"Url\":\"/south-carolina/charleston/midtown-mt-pleasant\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"a50f3c33-944a-4400-866b-2705b1bb26a5\",\"Key\":\"a50f3c33-944a-4400-866b-2705b1bb26a5\",\"Title\":\"Mt Pleasant\",\"Url\":\"/south-carolina/charleston/mt-pleasant\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"6506bfd9-4fe0-4794-b247-83774f2efee2\",\"Key\":\"6506bfd9-4fe0-4794-b247-83774f2efee2\",\"Title\":\"Palmetto Commerce Park\",\"Url\":\"/south-carolina/charleston/palmetto-commerce-park\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"6de49183-fe65-46d0-804b-f611f2d82abb\",\"Key\":\"6de49183-fe65-46d0-804b-f611f2d82abb\",\"Title\":\"Summerville\",\"Url\":\"/south-carolina/charleston/summerville\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"1f198fdc-0b44-4b82-95f3-85111452cd4f\",\"Key\":\"1f198fdc-0b44-4b82-95f3-85111452cd4f\",\"Title\":\"West Ashley Neighborhood\",\"Url\":\"/south-carolina/charleston/west-ashley-neighborhood\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"c951e4fe-ecf2-45f4-9537-6109500701c6\",\"Key\":\"c951e4fe-ecf2-45f4-9537-6109500701c6\",\"City\":\"Greenville\",\"State\":\"SC\",\"Url\":\"/south-carolina/greenville\",\"ItemsTotal\":null,\"Items\":[{\"Count\":5,\"Id\":\"185be079-5953-48a2-a2bf-219d3fffd0e0\",\"Key\":\"185be079-5953-48a2-a2bf-219d3fffd0e0\",\"Title\":\"Greenville\",\"Url\":\"/south-carolina/greenville/greenville\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"b01c337b-adf5-4de7-a19d-22249b98ab46\",\"Key\":\"b01c337b-adf5-4de7-a19d-22249b98ab46\",\"Title\":\"Mauldin\",\"Url\":\"/south-carolina/greenville/mauldin\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"caa09600-0171-49a1-9732-47617ae0633a\",\"Key\":\"caa09600-0171-49a1-9732-47617ae0633a\",\"Title\":\"Simpsonville\",\"Url\":\"/south-carolina/greenville/simpsonville\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"1c22b90a-4665-4021-b30d-81f3651004b8\",\"Key\":\"1c22b90a-4665-4021-b30d-81f3651004b8\",\"City\":\"Nashville\",\"State\":\"TN\",\"Url\":\"/tennessee/nashville\",\"ItemsTotal\":null,\"Items\":[{\"Count\":2,\"Id\":\"4c9c7588-7a84-46c0-a106-673fccb26123\",\"Key\":\"4c9c7588-7a84-46c0-a106-673fccb26123\",\"Title\":\"Bellevue\",\"Url\":\"/tennessee/nashville/bellevue\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"97109b5d-7035-4029-b9cb-905e9880cb31\",\"Key\":\"97109b5d-7035-4029-b9cb-905e9880cb31\",\"Title\":\"Hendersonville\",\"Url\":\"/tennessee/nashville/hendersonville\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":6,\"Id\":\"2db52deb-675b-41fd-87f9-0e99ffd2d756\",\"Key\":\"2db52deb-675b-41fd-87f9-0e99ffd2d756\",\"Title\":\"Nashville\",\"Url\":\"/tennessee/nashville/nashville\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"8394c9b7-00b1-4fc4-bb32-8c4d239be70a\",\"Key\":\"8394c9b7-00b1-4fc4-bb32-8c4d239be70a\",\"Title\":\"West Nashville\",\"Url\":\"/tennessee/nashville/west-nashville\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"56d110aa-9833-4dce-b36e-f9e5d3930046\",\"Key\":\"56d110aa-9833-4dce-b36e-f9e5d3930046\",\"City\":\"Austin\",\"State\":\"TX\",\"Url\":\"/texas/austin\",\"ItemsTotal\":null,\"Items\":[{\"Count\":1,\"Id\":\"d90faac5-c4b7-4db3-90f7-398e1dffa119\",\"Key\":\"d90faac5-c4b7-4db3-90f7-398e1dffa119\",\"Title\":\"Arboretum Area\",\"Url\":\"/texas/austin/arboretum-area\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":15,\"Id\":\"7eee8df9-5d69-4921-9ebe-751fa1c5c5bd\",\"Key\":\"7eee8df9-5d69-4921-9ebe-751fa1c5c5bd\",\"Title\":\"Austin\",\"Url\":\"/texas/austin/austin\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"0c2973f7-1ab5-4ec1-97b5-7f5f0ea3fc99\",\"Key\":\"0c2973f7-1ab5-4ec1-97b5-7f5f0ea3fc99\",\"Title\":\"Barton Hills\",\"Url\":\"/texas/austin/barton-hills\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"29c2a755-4046-407d-8eaf-188425efe16c\",\"Key\":\"29c2a755-4046-407d-8eaf-188425efe16c\",\"Title\":\"Canyon Creek\",\"Url\":\"/texas/austin/canyon-creek\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"6f266219-213f-484d-9108-63933f40da45\",\"Key\":\"6f266219-213f-484d-9108-63933f40da45\",\"Title\":\"Cedar Park\",\"Url\":\"/texas/austin/cedar-park\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"f0cf5b4d-1ab8-4c46-bedc-4b3ebe94bc7e\",\"Key\":\"f0cf5b4d-1ab8-4c46-bedc-4b3ebe94bc7e\",\"Title\":\"Circle C Ranch\",\"Url\":\"/texas/austin/circle-c-ranch\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"4df4cdb4-5a89-4e36-ba27-cbcb7b1b1be6\",\"Key\":\"4df4cdb4-5a89-4e36-ba27-cbcb7b1b1be6\",\"Title\":\"Downtown Austin\",\"Url\":\"/texas/austin/downtown-austin\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"e9e419de-9a6a-42cf-b220-790e45bda2bf\",\"Key\":\"e9e419de-9a6a-42cf-b220-790e45bda2bf\",\"Title\":\"Georgetown\",\"Url\":\"/texas/austin/georgetown\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"14741b26-3bb2-46b1-a3a9-09b7b37f4653\",\"Key\":\"14741b26-3bb2-46b1-a3a9-09b7b37f4653\",\"Title\":\"Jollyville\",\"Url\":\"/texas/austin/jollyville\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"8b0d7262-8c04-4617-a7bb-cb35b212aa2a\",\"Key\":\"8b0d7262-8c04-4617-a7bb-cb35b212aa2a\",\"Title\":\"Northwest Hills\",\"Url\":\"/texas/austin/northwest-hills\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"deb326e8-8e37-4150-96ca-f59e5b9fe4cd\",\"Key\":\"deb326e8-8e37-4150-96ca-f59e5b9fe4cd\",\"Title\":\"Rollingwood\",\"Url\":\"/texas/austin/rollingwood\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"ae71053e-7062-49e7-aecd-c6b6d3b9069f\",\"Key\":\"ae71053e-7062-49e7-aecd-c6b6d3b9069f\",\"Title\":\"Round Rock\",\"Url\":\"/texas/austin/round-rock\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"aa582b83-27f8-4504-ad33-4822354deca5\",\"Key\":\"aa582b83-27f8-4504-ad33-4822354deca5\",\"Title\":\"Slaughter South\",\"Url\":\"/texas/austin/slaughter-south\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"857da40e-b587-45bb-b94c-8b6a1d418e6f\",\"Key\":\"857da40e-b587-45bb-b94c-8b6a1d418e6f\",\"Title\":\"South Austin\",\"Url\":\"/texas/austin/south-austin\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"fd2f8ac8-6d70-4353-ac21-acd9a08fb8da\",\"Key\":\"fd2f8ac8-6d70-4353-ac21-acd9a08fb8da\",\"Title\":\"Southpark Meadows\",\"Url\":\"/texas/austin/southpark-meadows\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"2a453d50-1ea4-4dfe-93c2-2f7c3ecdf942\",\"Key\":\"2a453d50-1ea4-4dfe-93c2-2f7c3ecdf942\",\"Title\":\"Sunset Valley\",\"Url\":\"/texas/austin/sunset-valley\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"4da5fffe-05ba-4436-b977-f3154bb815be\",\"Key\":\"4da5fffe-05ba-4436-b977-f3154bb815be\",\"Title\":\"Travis Heights\",\"Url\":\"/texas/austin/travis-heights\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"a607eb15-8c01-4c6e-bd9c-4cd698e854f2\",\"Key\":\"a607eb15-8c01-4c6e-bd9c-4cd698e854f2\",\"Title\":\"University Hills\",\"Url\":\"/texas/austin/university-hills\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"8fd24ea2-4139-4d5f-9385-ff6a4a6d7ca6\",\"Key\":\"8fd24ea2-4139-4d5f-9385-ff6a4a6d7ca6\",\"Title\":\"Wells Branch\",\"Url\":\"/texas/austin/wells-branch\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":1,\"Id\":\"e474a7bf-4a73-49af-b2c7-10d584ebc4d9\",\"Key\":\"e474a7bf-4a73-49af-b2c7-10d584ebc4d9\",\"Title\":\"Western Oaks\",\"Url\":\"/texas/austin/western-oaks\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"4c073efe-54f9-42f0-9880-d9e84b7a2c2e\",\"Key\":\"4c073efe-54f9-42f0-9880-d9e84b7a2c2e\",\"Title\":\"Zilker Park\",\"Url\":\"/texas/austin/zilker-park\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"38a86313-381e-4d25-b820-35cbb8cec613\",\"Key\":\"38a86313-381e-4d25-b820-35cbb8cec613\",\"City\":\"Dallas/Fort Worth\",\"State\":\"TX\",\"Url\":\"/texas/dallas\",\"ItemsTotal\":null,\"Items\":[{\"Count\":2,\"Id\":\"f8263dbc-79e2-41ce-8ab3-c4feb7ad983f\",\"Key\":\"f8263dbc-79e2-41ce-8ab3-c4feb7ad983f\",\"Title\":\"Bedford\",\"Url\":\"/texas/dallas/bedford\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":11,\"Id\":\"6d04fc5c-78af-450a-b715-b30beefca813\",\"Key\":\"6d04fc5c-78af-450a-b715-b30beefca813\",\"Title\":\"Dallas\",\"Url\":\"/texas/dallas/dallas\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"c00d8735-65c4-4e7d-ac3d-02db4be52b84\",\"Key\":\"c00d8735-65c4-4e7d-ac3d-02db4be52b84\",\"Title\":\"Frisco\",\"Url\":\"/texas/dallas/frisco\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":4,\"Id\":\"37d72325-7001-45c2-9bff-a41898d77cea\",\"Key\":\"37d72325-7001-45c2-9bff-a41898d77cea\",\"Title\":\"Irving\",\"Url\":\"/texas/dallas/irving\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"7e7ed85c-6662-4d40-9988-366ed7da62ee\",\"Key\":\"7e7ed85c-6662-4d40-9988-366ed7da62ee\",\"Title\":\"Las Colinas\",\"Url\":\"/texas/dallas/las-colinas\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"ecd19538-11d0-44ba-a434-4eda8d648501\",\"Key\":\"ecd19538-11d0-44ba-a434-4eda8d648501\",\"Title\":\"McKinney\",\"Url\":\"/texas/dallas/mckinney\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"4a6c619a-bff2-4a1c-af23-cf779f827441\",\"Key\":\"4a6c619a-bff2-4a1c-af23-cf779f827441\",\"Title\":\"Mid-Cities\",\"Url\":\"/texas/dallas/mid-cities\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"c2b16c5d-c5a2-4a9c-81ed-56021237e0d2\",\"Key\":\"c2b16c5d-c5a2-4a9c-81ed-56021237e0d2\",\"Title\":\"North Dallas\",\"Url\":\"/texas/dallas/north-dallas\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":4,\"Id\":\"b1af147b-122d-43fa-a940-b3f7e4dc1b28\",\"Key\":\"b1af147b-122d-43fa-a940-b3f7e4dc1b28\",\"Title\":\"Plano\",\"Url\":\"/texas/dallas/plano\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":3,\"Id\":\"ad0adca0-e1a8-4f1a-bce7-e48133959820\",\"Key\":\"ad0adca0-e1a8-4f1a-bce7-e48133959820\",\"Title\":\"Roanoke\",\"Url\":\"/texas/dallas/roanoke\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":9,\"Id\":\"9fa96e28-7c1a-47fe-9884-213fe9121417\",\"Key\":\"9fa96e28-7c1a-47fe-9884-213fe9121417\",\"Title\":\"Uptown\",\"Url\":\"/texas/dallas/uptown\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":7,\"Id\":\"3e34a8a6-7f27-43c1-bf85-8ce26bdc9d36\",\"Key\":\"3e34a8a6-7f27-43c1-bf85-8ce26bdc9d36\",\"Title\":\"Uptown Dallas\",\"Url\":\"/texas/dallas/maa-leasing-center\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0},{\"Id\":\"bfee73a2-91db-4c3a-82bc-8349125f98b1\",\"Key\":\"bfee73a2-91db-4c3a-82bc-8349125f98b1\",\"City\":\"Houston\",\"State\":\"TX\",\"Url\":\"/texas/houston\",\"ItemsTotal\":null,\"Items\":[{\"Count\":4,\"Id\":\"d4eaf1f7-8181-4430-b51a-7a3d7fdc03af\",\"Key\":\"d4eaf1f7-8181-4430-b51a-7a3d7fdc03af\",\"Title\":\"Houston\",\"Url\":\"/texas/houston/houston\",\"IsBestMatch\":false,\"IsPage\":false},{\"Count\":2,\"Id\":\"4756b69e-2124-41ea-b24f-45bf7cf29bc5\",\"Key\":\"4756b69e-2124-41ea-b24f-45bf7cf29bc5\",\"Title\":\"River Oaks\",\"Url\":\"/texas/houston/river-oaks\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":0}]},{\"Key\":\"7b90e841-e1c5-49dc-ab62-27fd71611a25\",\"Title\":\"Communities\",\"Icon\":\"icon-communities\",\"TotalResults\":214,\"Results\":[{\"Id\":\"40ffd584-1b85-4184-ad8f-aa750377685f\",\"Key\":\"40ffd584-1b85-4184-ad8f-aa750377685f\",\"City\":\"Phoenix\",\"State\":\"AZ\",\"Url\":\"/arizona/phoenix\",\"ItemsTotal\":\"9 communities\",\"Items\":[{\"Description\":\"32615 North Valley Parkway, Phoenix, AZ 85085\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/maa-foothills/slides/2021/talus-ranch-pool.jpg\",\"Starting\":\"$1,303\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"80e8fff6-0dc2-43a3-93a3-2da93e6fac69\",\"Key\":\"80e8fff6-0dc2-43a3-93a3-2da93e6fac69\",\"Title\":\"MAA Foothills\",\"Url\":\"/arizona/phoenix/maa-foothills/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"6400 East Thomas Road, Scottsdale, AZ 85251\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/maa-camelback/slides/2023/part-2/123101-maa-camelback-pool-3.jpg\",\"Starting\":\"$1,633\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"0fca0952-9609-46c6-bae8-b12837b706ca\",\"Key\":\"0fca0952-9609-46c6-bae8-b12837b706ca\",\"Title\":\"MAA Camelback\",\"Url\":\"/arizona/phoenix/maa-camelback/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2520 South Plaza Drive, Tempe, AZ 85282\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/maa-fountainhead/slides/2022/1-pool.jpg\",\"Starting\":\"$1,768\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Cabana\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"3a21f911-e8ea-404a-b83e-17adc6909bf7\",\"Key\":\"3a21f911-e8ea-404a-b83e-17adc6909bf7\",\"Title\":\"MAA Fountainhead\",\"Url\":\"/arizona/phoenix/maa-fountainhead/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1301 N. Scottsdale Road, Scottsdale, AZ 85257\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/maa-skysong/slides/2023/100214-skysong-pool.jpg\",\"Starting\":\"$1,668\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"26b78159-e8c6-4aab-8248-9ec1cdc878c2\",\"Key\":\"26b78159-e8c6-4aab-8248-9ec1cdc878c2\",\"Title\":\"MAA SkySong\",\"Url\":\"/arizona/phoenix/maa-skysong/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"400 E. Earll Drive, Phoenix, AZ 85012\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/maamidtownphoenix/slides/1-dsc2880-edit_evening-pool.jpg\",\"Starting\":\"$1,388\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-energy-star-appliances\\\",\\\"Name\\\":\\\"Energy Star Appliances\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-high-speed-internet\\\",\\\"Name\\\":\\\"High Speed Internet\\\"}]\",\"Images\":[],\"Id\":\"1d5b329d-5315-4096-b48c-168e6eb99a87\",\"Key\":\"1d5b329d-5315-4096-b48c-168e6eb99a87\",\"Title\":\"MAA Midtown Phoenix\",\"Url\":\"/arizona/phoenix/maa-midtown-phoenix/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3301 E Ray Rd, Gilbert, AZ 85296\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/pdp-carousel-photo-additions/additional-images-10--18--18/edge-at-lyons-gate/1-edge-at-lyons-gate-pool-2-1200x525.jpg\",\"Starting\":\"$1,388\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ddc6e343-f9c4-45c9-a9c0-81dd95884360\",\"Key\":\"ddc6e343-f9c4-45c9-a9c0-81dd95884360\",\"Title\":\"MAA Lyons Gate\",\"Url\":\"/arizona/phoenix/maa-lyons-gate/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5332 East Baseline Road, Mesa, AZ 85206\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/maa-city-gate/slides/3_124001-maa-city-gate_pool-area-1-1200x525.jpg\",\"Starting\":\"$1,388\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"46c968ae-31a5-4df9-b51b-5e1829ecfedc\",\"Key\":\"46c968ae-31a5-4df9-b51b-5e1829ecfedc\",\"Title\":\"MAA City Gate\",\"Url\":\"/arizona/phoenix/maa-city-gate/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4632 E Germann Rd., Gilbert, AZ 85297\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/sky-view-ranch/slides/2_010132-sky-view-ranch_pool-1200x525.jpg\",\"Starting\":\"$1,608\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"eade514c-ab26-406d-9ddf-c29c08a3147c\",\"Key\":\"eade514c-ab26-406d-9ddf-c29c08a3147c\",\"Title\":\"MAA Sky View\",\"Url\":\"/arizona/phoenix/maa-sky-view/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2929 N. 70th Street, Scottsdale, AZ 85251\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/arizona/phoenix/maa-old-town_scottsdale/slides/2023/maa-old-town-scottsdale-lounge-1.jpg\",\"Starting\":\"$1,468\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"bab3381f-9777-4522-85da-f90572627232\",\"Key\":\"bab3381f-9777-4522-85da-f90572627232\",\"Title\":\"MAA Old Town Scottsdale\",\"Url\":\"/arizona/phoenix/maa-old-town-scottsdale/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"d6b3f4c7-4caf-4706-92c2-d81ebd573861\",\"Key\":\"d6b3f4c7-4caf-4706-92c2-d81ebd573861\",\"City\":\"Denver\",\"State\":\"CO\",\"Url\":\"/colorado/denver\",\"ItemsTotal\":\"4 communities\",\"Items\":[{\"Description\":\"6963 W 109th Ave., Westminster, CO 80020\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/colorado/denver/maa-promenade/slides/2021/sync-36-fire-pit.jpg\",\"Starting\":\"$1,945\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"5ad518d5-e14a-4feb-b8d7-4fe8ff221c9a\",\"Key\":\"5ad518d5-e14a-4feb-b8d7-4fe8ff221c9a\",\"Title\":\"MAA Promenade\",\"Url\":\"/colorado/denver/maa-promenade/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9030 Wadsworth Blvd, Westminster, CO 80021\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/colorado/denver/maa-westglenn/slides/2021/maa-westglenn-pool.jpg\",\"Starting\":\"$1,808\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_electric_car_charging_station\\\",\\\"Name\\\":\\\"E.V. Charging Station\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"c3ce5e14-ac26-479b-9e94-0abcc415db50\",\"Key\":\"c3ce5e14-ac26-479b-9e94-0abcc415db50\",\"Title\":\"MAA Westglenn\",\"Url\":\"/colorado/denver/maa-westglenn/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1859 28th Street, Denver, CO 80216\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/colorado/denver/maa-river-north/slides/1postrivernorth_sittingarea-min.jpg\",\"Starting\":\"$1,355\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"388bdcbd-96eb-492d-816a-8c231e6354c4\",\"Key\":\"388bdcbd-96eb-492d-816a-8c231e6354c4\",\"Title\":\"MAA River North\",\"Url\":\"/colorado/denver/maa-river-north/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4692 N Beeler Ct., Denver, CO 80238\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/colorado/denver/maa-milepost/2023/1.png\",\"Starting\":\"\",\"Bedrooms\":null,\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_electric_car_charging_station\\\",\\\"Name\\\":\\\"E.V. Charging Station\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-park-access\\\",\\\"Name\\\":\\\"Park Access\\\"}]\",\"Images\":[],\"Id\":\"362588c0-f4f6-470a-8d58-453b74517f32\",\"Key\":\"362588c0-f4f6-470a-8d58-453b74517f32\",\"Title\":\"MAA Milepost 35\",\"Url\":\"/colorado/denver/maa-milepost-35/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"f3b17acd-603b-4599-b1ec-06408296f549\",\"Key\":\"f3b17acd-603b-4599-b1ec-06408296f549\",\"City\":\"Orlando\",\"State\":\"FL\",\"Url\":\"/florida/orlando\",\"ItemsTotal\":\"14 communities\",\"Items\":[{\"Description\":\"7826 Crosswater Trail, Windermere, FL 34786\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-crosswater/slides/1postlakeside_pool3-min.jpg\",\"Starting\":\"$1,600\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"424ee973-d499-41a5-ac2b-a1fbb9e97fa1\",\"Key\":\"424ee973-d499-41a5-ac2b-a1fbb9e97fa1\",\"Title\":\"MAA Crosswater\",\"Url\":\"/florida/orlando/maa-crosswater/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"431 E. Central Blvd Ste A, Orlando, FL 32801\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-parkside/slides/2021/mp-2.jpg\",\"Starting\":\"$1,470\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d02ca308-b534-4ed8-adcb-33d461522e25\",\"Key\":\"d02ca308-b534-4ed8-adcb-33d461522e25\",\"Title\":\"MAA Parkside\",\"Url\":\"/florida/orlando/maa-parkside/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"310 N Orange Ave, Orlando, FL 32801\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-robinson/maa-robinson-exterior-twilight-no-banner-resized.jpg\",\"Starting\":\"$1,723\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-concierge-services\\\",\\\"Name\\\":\\\"Concierge Service\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"}]\",\"Images\":[],\"Id\":\"59c48678-f255-4c80-aad4-da5ecd6dd7d9\",\"Key\":\"59c48678-f255-4c80-aad4-da5ecd6dd7d9\",\"Title\":\"MAA Robinson\",\"Url\":\"/florida/orlando/maa-robinson/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1122 Greenstone Boulevard, Heathrow, FL 32746\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-heathrow/slides/cgh29web-use.jpg\",\"Starting\":\"$1,773\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"bbd0bd6c-4434-47d5-a9cc-ef283ea8d482\",\"Key\":\"bbd0bd6c-4434-47d5-a9cc-ef283ea8d482\",\"Title\":\"MAA Heathrow\",\"Url\":\"/florida/orlando/maa-heathrow/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"11598 Lachlan Lane, Windermere, FL 34786\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-windermere/slides/2022/1-pool.jpg\",\"Starting\":\"$1,578\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"cfbea361-2bfc-428d-a036-6e2cf864aed8\",\"Key\":\"cfbea361-2bfc-428d-a036-6e2cf864aed8\",\"Title\":\"MAA Windermere\",\"Url\":\"/florida/orlando/maa-windermere/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4688 New Broad Street, Orlando, FL 32814\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-baldwin-park/slides/2021/1-bp-grounds.jpg\",\"Starting\":\"$1,835\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e7d86738-8c1b-40dd-84af-74dc6fcc56c8\",\"Key\":\"e7d86738-8c1b-40dd-84af-74dc6fcc56c8\",\"Title\":\"MAA Baldwin Park\",\"Url\":\"/florida/orlando/maa-baldwin-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"13184 Heather Moss Drive, Orlando, FL 32837\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-heather-glen/slides/1_hg-pool.jpg\",\"Starting\":\"$1,393\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ef185a7b-cbf0-480d-9bf1-8fdae0586e1c\",\"Key\":\"ef185a7b-cbf0-480d-9bf1-8fdae0586e1c\",\"Title\":\"MAA Heather Glen\",\"Url\":\"/florida/orlando/maa-heather-glen/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"10203 Falcon Parc Blvd, Orlando, FL 32832\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-lake-nona/slides/1_ln-9_clubhouse-ext.jpg\",\"Starting\":\"$1,478\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"9275638e-d141-4f8a-a05d-43e39ab3fe9e\",\"Key\":\"9275638e-d141-4f8a-a05d-43e39ab3fe9e\",\"Title\":\"MAA Lake Nona\",\"Url\":\"/florida/orlando/maa-lake-nona/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"351 S Northlake Blvd., Altamonte Springs, FL 32701\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-tiffany-oaks/slides/2021/1-tiffany-oaks-pool.jpg\",\"Starting\":\"$1,276\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e248d372-c915-4706-b013-a1c7c23eb1ca\",\"Key\":\"e248d372-c915-4706-b013-a1c7c23eb1ca\",\"Title\":\"MAA Tiffany Oaks\",\"Url\":\"/florida/orlando/maa-tiffany-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"225 Sunlight Lane, Lake Mary, FL 32746\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-lake-mary/slides/1_lm-7_pool.jpg\",\"Starting\":\"$1,413\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"12b793c5-a1f5-4af3-90f7-f89dcc199285\",\"Key\":\"12b793c5-a1f5-4af3-90f7-f89dcc199285\",\"Title\":\"MAA Lake Mary\",\"Url\":\"/florida/orlando/maa-lake-mary/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9200 Randal Park Blvd, Orlando, FL 32832\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-randal-lakes/slides/2021/maa-randal-lakes-pool.jpg\",\"Starting\":\"$1,483\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"af29c21f-631a-4661-b66b-f4bea79a1af0\",\"Key\":\"af29c21f-631a-4661-b66b-f4bea79a1af0\",\"Title\":\"MAA Randal Lakes\",\"Url\":\"/florida/orlando/maa-randal-lakes/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"11500 Myrtlewood Drive, Sanford, FL 32771\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-twin-lakes/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,508\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ac8027fb-b0b5-4eba-a17b-bb05cf347f5a\",\"Key\":\"ac8027fb-b0b5-4eba-a17b-bb05cf347f5a\",\"Title\":\"MAA Twin Lakes\",\"Url\":\"/florida/orlando/maa-twin-lakes/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1050 Colonial Grand Lane, Lake Mary, FL 32746\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-town-park/slides/2020/tp-1-edit.jpg\",\"Starting\":\"$1,618\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"fc28779d-6297-41b7-a70d-0a75d9c52ea7\",\"Key\":\"fc28779d-6297-41b7-a70d-0a75d9c52ea7\",\"Title\":\"MAA Town Park\",\"Url\":\"/florida/orlando/maa-town-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1050 Colonial Grand Lane, Lake Mary, FL 32746\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/orlando/maa-town-park-reserve/slides/2020/tp-23.jpg\",\"Starting\":\"$1,360\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"aeffe451-2f1b-450a-b369-d855dc1e0835\",\"Key\":\"aeffe451-2f1b-450a-b369-d855dc1e0835\",\"Title\":\"MAA Town Park Reserve\",\"Url\":\"/florida/orlando/maa-town-park-reserve/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"9a58bb2f-30f1-4112-be3e-0abed00a8743\",\"Key\":\"9a58bb2f-30f1-4112-be3e-0abed00a8743\",\"City\":\"Tampa\",\"State\":\"FL\",\"Url\":\"/florida/tampa\",\"ItemsTotal\":\"14 communities\",\"Items\":[{\"Description\":\"921 Paddock Club Drive, Brandon, FL 33511\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-brandon/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,688\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"2eaedb1d-e613-4828-84c4-b2ced7830708\",\"Key\":\"2eaedb1d-e613-4828-84c4-b2ced7830708\",\"Title\":\"MAA Brandon\",\"Url\":\"/florida/tampa/maa-brandon/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"14009 Clubhouse Circle, Tampa, FL 33618\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/the-links-at-carrollwood/slides/2021/1-links-at-carrollwood-pool.jpg\",\"Starting\":\"$1,543\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"2b12b5bf-8105-41c2-87e0-9327a5a618a9\",\"Key\":\"2b12b5bf-8105-41c2-87e0-9327a5a618a9\",\"Title\":\"MAA Carrollwood\",\"Url\":\"/florida/tampa/maa-carrollwood/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5102 Belmere Parkway, Tampa, FL 33624\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/belmere/slides/1belmere_pool2.jpg\",\"Starting\":\"$1,358\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b8d077bb-3a3b-496f-8ab3-ab1e9adb1316\",\"Key\":\"b8d077bb-3a3b-496f-8ab3-ab1e9adb1316\",\"Title\":\"MAA Belmere\",\"Url\":\"/florida/tampa/maa-belmere/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2400 Clubside Court, Palm Harbor, FL 34683\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-palm-harbor/slides/2023/10133-maa-palm-harbor-pool-1.jpg\",\"Starting\":\"$1,553\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"43cd3df0-7919-45ce-b623-88bef3ffae20\",\"Key\":\"43cd3df0-7919-45ce-b623-88bef3ffae20\",\"Title\":\"MAA Palm Harbor\",\"Url\":\"/florida/tampa/maa-palm-harbor/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"712 South Howard Ave., Tampa, FL 33606\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-soho/slides/2023/maa-soho-square-pool-1.jpg\",\"Starting\":\"$2,270\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1be9f693-fe6f-4f3e-bd6e-4f8a3ba18f7e\",\"Key\":\"1be9f693-fe6f-4f3e-bd6e-4f8a3ba18f7e\",\"Title\":\"MAA SoHo Square\",\"Url\":\"/florida/tampa/maa-soho-square/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1850 Providence Lakes, Brandon, FL 33511\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/indigo-point/slides/2023/part-2/maa-indigo-point-pool.jpg\",\"Starting\":\"$1,453\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"6a7bbf2d-c29d-41a5-8dec-4196223163d7\",\"Key\":\"6a7bbf2d-c29d-41a5-8dec-4196223163d7\",\"Title\":\"MAA Indigo Point\",\"Url\":\"/florida/tampa/maa-indigo-point/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"8425 Montravail Circle, Temple Terrace, FL 33637\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-tampa-oaks/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,688\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"7be52d91-d6ff-41bd-bcd9-b77ebe71810b\",\"Key\":\"7be52d91-d6ff-41bd-bcd9-b77ebe71810b\",\"Title\":\"MAA Tampa Oaks\",\"Url\":\"/florida/tampa/maa-tampa-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3101 N Rocky Point Dr E, Tampa, FL 33607\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-rocky-point/slides/2022/1-1---pool.jpg\",\"Starting\":\"$1,695\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"0bdf2e4a-16e2-4f77-95eb-3f322d46fa10\",\"Key\":\"0bdf2e4a-16e2-4f77-95eb-3f322d46fa10\",\"Title\":\"MAA Rocky Point\",\"Url\":\"/florida/tampa/maa-rocky-point/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"800 Harbour Post Drive, Tampa, FL 33602\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-harbour-island/slides/2022/2-pool-2.jpg\",\"Starting\":\"$1,755\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"8ba8e2a4-c6e3-43fd-bb25-dc1f17ae037a\",\"Key\":\"8ba8e2a4-c6e3-43fd-bb25-dc1f17ae037a\",\"Title\":\"MAA Harbour Island\",\"Url\":\"/florida/tampa/maa-harbour-island/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"8100 Natures Way, Lakewood Ranch, FL 34202\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-lakewood-ranch/slides/2023/103201-maa-lakewood-ranch-grilling-pool.jpg\",\"Starting\":\"$1,688\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"bf2f7eef-2fa7-4f6c-8296-8aa2b786913a\",\"Key\":\"bf2f7eef-2fa7-4f6c-8296-8aa2b786913a\",\"Title\":\"MAA Lakewood Ranch\",\"Url\":\"/florida/tampa/maa-lakewood-ranch/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"502 S. Fremont Avenue, Tampa, FL 33606\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-hyde-park/slides/2023/pool-1.jpg\",\"Starting\":\"$1,855\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"93c4d9bf-f15e-45a6-8016-090e6c609706\",\"Key\":\"93c4d9bf-f15e-45a6-8016-090e6c609706\",\"Title\":\"MAA Hyde Park\",\"Url\":\"/florida/tampa/maa-hyde-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2042 Arrowgrass Drive, Wesley Chapel, FL 33544\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-seven-oaks/slides/2022/1-11---pool.jpg\",\"Starting\":\"$1,313\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"3b01798f-b548-49d8-bcb0-610400542d6b\",\"Key\":\"3b01798f-b548-49d8-bcb0-610400542d6b\",\"Title\":\"MAA Seven Oaks\",\"Url\":\"/florida/tampa/maa-seven-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"6398 Colonial Grand Drive, Tampa, FL 33647\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-hampton-preserve/slides/2022/2-pool-aerial-1.jpg\",\"Starting\":\"$1,578\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"5595f579-0c06-44c6-a14f-209d2cc43697\",\"Key\":\"5595f579-0c06-44c6-a14f-209d2cc43697\",\"Title\":\"MAA Hampton Preserve\",\"Url\":\"/florida/tampa/maa-hampton-preserve/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2600 North Rocky Point Drive, Tampa, FL 33607\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/tampa/maa-bay-view/slides/2022/1-pool.jpg\",\"Starting\":\"$1,795\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"247fbd9b-1413-4dac-8458-45456886c76f\",\"Key\":\"247fbd9b-1413-4dac-8458-45456886c76f\",\"Title\":\"MAA Bay View\",\"Url\":\"/florida/tampa/maa-bay-view/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"5e0d786b-9354-46ea-8cd9-abe1561efc64\",\"Key\":\"5e0d786b-9354-46ea-8cd9-abe1561efc64\",\"City\":\"Atlanta\",\"State\":\"GA\",\"Url\":\"/georgia/atlanta\",\"ItemsTotal\":\"28 communities\",\"Items\":[{\"Description\":\"600 Phipps Boulevard, Atlanta, GA 30326\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-lenox-1/slides/pool-rooftop-post-alexander.jpg\",\"Starting\":\"$1,430\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":null,\"Images\":[],\"Id\":\"4fd2692d-1c43-4520-8e78-9af6a6d822cf\",\"Key\":\"4fd2692d-1c43-4520-8e78-9af6a6d822cf\",\"Title\":\"MAA Lenox\",\"Url\":\"/georgia/atlanta/maa-lenox/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3070 Ashford Dunwoody Rd, Atlanta, GA 30319\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-oglethorpe/slides/2023/010128---maa-oglethorpe---pool-1.jpg\",\"Starting\":\"$1,838\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"916fff28-79fd-423a-ab00-43f75ffac1c6\",\"Key\":\"916fff28-79fd-423a-ab00-43f75ffac1c6\",\"Title\":\"MAA Oglethorpe\",\"Url\":\"/georgia/atlanta/maa-oglethorpe/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"360 Pharr Rd, Atlanta, GA 30305\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-buckhead/slides/2021/maa-buckhead-courtyard.jpg\",\"Starting\":\"$1,258\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_fitness_center_mirror\\\",\\\"Name\\\":\\\"Fitness Center with MIRROR\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"31aea97e-fee4-4f0b-b2b9-bb962ec3c980\",\"Key\":\"31aea97e-fee4-4f0b-b2b9-bb962ec3c980\",\"Title\":\"MAA Buckhead\",\"Url\":\"/georgia/atlanta/maa-buckhead/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1655 Centerview Drive, Duluth, GA 30096\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-prescott/slides/2020/pr-1.jpg\",\"Starting\":\"$1,488\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"}]\",\"Images\":[],\"Id\":\"22b2e0b1-fba9-4db5-9590-f5d6e31c93b3\",\"Key\":\"22b2e0b1-fba9-4db5-9590-f5d6e31c93b3\",\"Title\":\"MAA Prescott\",\"Url\":\"/georgia/atlanta/maa-prescott/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"40 Peachtree Valley Road NE, Atlanta, GA 30309\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-brookwood/slides/2021/1-mb-pool.jpg\",\"Starting\":\"$1,328\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a72e76ed-3aeb-4f5e-ac29-6a9de2cc1e5b\",\"Key\":\"a72e76ed-3aeb-4f5e-ac29-6a9de2cc1e5b\",\"Title\":\"MAA Brookwood\",\"Url\":\"/georgia/atlanta/maa-brookwood/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3355 George Busbee Pkwy, Kennesaw, GA 30144\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-milstead/slides/2022/1-pool.jpg\",\"Starting\":\"$1,518\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pet-friendly\\\",\\\"Name\\\":\\\"Pet Friendly\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"70ac8479-e004-4bbc-830a-bd130e4eb48b\",\"Key\":\"70ac8479-e004-4bbc-830a-bd130e4eb48b\",\"Title\":\"MAA Milstead\",\"Url\":\"/georgia/atlanta/maa-milstead/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"500 Briarvista Way, Atlanta, GA 30329\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-briarcliff/slides/2023/207400---maa-briarcliff---main-pool.jpg\",\"Starting\":\"$1,380\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"040fbc92-01e6-4c00-b587-4947edf2fc3a\",\"Key\":\"040fbc92-01e6-4c00-b587-4947edf2fc3a\",\"Title\":\"MAA Briarcliff\",\"Url\":\"/georgia/atlanta/maa-briarcliff/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1750 Shiloh Road NW, Kennesaw, GA 30144\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-shiloh/slides/2020/5.jpg\",\"Starting\":\"$1,358\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Cabana\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e41a1eae-2ee6-4ee8-9233-bcd5767aab57\",\"Key\":\"e41a1eae-2ee6-4ee8-9233-bcd5767aab57\",\"Title\":\"MAA Shiloh\",\"Url\":\"/georgia/atlanta/maa-shiloh/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3400 Stratford Road, Atlanta, GA 30326\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-stratford/slides/2021/maa-stratford-entrance.jpg\",\"Starting\":\"$1,525\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_electric_car_charging_station\\\",\\\"Name\\\":\\\"E.V. Charging Station\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1f7fcabe-58bb-4b45-b27a-9fa2fcd12e4a\",\"Key\":\"1f7fcabe-58bb-4b45-b27a-9fa2fcd12e4a\",\"Title\":\"MAA Stratford\",\"Url\":\"/georgia/atlanta/maa-stratford/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4120 Peachtree Rd NE, Atlanta, GA 30319\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-glen/slides/2022-repositioning/mg-2.jpg\",\"Starting\":\"$1,540\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a5a29f5f-8d43-4cc2-af5d-f1f76bd4fc1b\",\"Key\":\"a5a29f5f-8d43-4cc2-af5d-f1f76bd4fc1b\",\"Title\":\"MAA Glen\",\"Url\":\"/georgia/atlanta/maa-glen/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"33 11th Street, Atlanta, GA 30309\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-midtown/slides/2021/maa-midtown-pool.jpg\",\"Starting\":\"$1,965\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-high-speed-internet\\\",\\\"Name\\\":\\\"High Speed Internet\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"020e7dba-4414-4fa6-bea6-f509e3296cfd\",\"Key\":\"020e7dba-4414-4fa6-bea6-f509e3296cfd\",\"Title\":\"MAA Midtown\",\"Url\":\"/georgia/atlanta/maa-midtown/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4777 Ashford Dunwoody Road, Atlanta, GA 30338\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-dunwoody/slides/2022/3-pool-3.jpg\",\"Starting\":\"$1,330\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-high-speed-internet\\\",\\\"Name\\\":\\\"High Speed Internet\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ae210a69-7ef9-498b-8c20-f5263a569a5f\",\"Key\":\"ae210a69-7ef9-498b-8c20-f5263a569a5f\",\"Title\":\"MAA Dunwoody\",\"Url\":\"/georgia/atlanta/maa-dunwoody/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3375 Spring Hill Pkwy, SE, Smyrna, GA 30080\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-spring/slides/2021/maa-spring-pool.jpg\",\"Starting\":\"$1,555\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"cd7e374b-62fb-4752-aa63-71f35df0ddfb\",\"Key\":\"cd7e374b-62fb-4752-aa63-71f35df0ddfb\",\"Title\":\"MAA Spring\",\"Url\":\"/georgia/atlanta/maa-spring/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4403 Northside Pkwy., Atlanta, GA 30327\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-riverside/slides/2020/pr-29-%282%29.jpg\",\"Starting\":\"$1,570\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"93ab1f60-b802-4433-ab89-20b7e8b62708\",\"Key\":\"93ab1f60-b802-4433-ab89-20b7e8b62708\",\"Title\":\"MAA Riverside\",\"Url\":\"/georgia/atlanta/maa-riverside/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2829 Caldwell Road, Atlanta, GA 30319\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-brookhaven/slides/2023/202300---maa-brookhaven---pool-1.jpg\",\"Starting\":\"$1,250\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-on-site-recycling\\\",\\\"Name\\\":\\\"On-site Recycling\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"6bbe542a-7390-4e1b-857b-364a9e595b7a\",\"Key\":\"6bbe542a-7390-4e1b-857b-364a9e595b7a\",\"Title\":\"MAA Brookhaven\",\"Url\":\"/georgia/atlanta/maa-brookhaven/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4090 Roswell Road NE, Atlanta, GA 30342\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-chastain/slides/2020-photos/pc-4.jpg\",\"Starting\":\"$1,355\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a0433238-b64f-4394-816f-5496ff489420\",\"Key\":\"a0433238-b64f-4394-816f-5496ff489420\",\"Title\":\"MAA Chastain\",\"Url\":\"/georgia/atlanta/maa-chastain/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"250 10th Street, NE, Atlanta, GA 30309\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-piedmont-park/slides/2022/1.jpg\",\"Starting\":\"$1,520\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-high-speed-internet\\\",\\\"Name\\\":\\\"High Speed Internet\\\"}]\",\"Images\":[],\"Id\":\"621d11ad-8890-47d0-ba32-d0914b7a2ee1\",\"Key\":\"621d11ad-8890-47d0-ba32-d0914b7a2ee1\",\"Title\":\"MAA Piedmont Park\",\"Url\":\"/georgia/atlanta/maa-piedmont-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2500 Pleasant Hill Road, Duluth, GA 30096\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/pdp-carousel-photo-additions/additional-images-10--18--18/cg-at-pleasant-hill/1_cg-at-pleasanthill-pool-1200x525.jpg\",\"Starting\":\"$1,303\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"57cbd98e-e76d-4441-acd4-3cb5646c1d8f\",\"Key\":\"57cbd98e-e76d-4441-acd4-3cb5646c1d8f\",\"Title\":\"MAA Pleasant Hill\",\"Url\":\"/georgia/atlanta/maa-pleasant-hill/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"305 Centennial Olympic Park Dr, Atlanta, GA 30313\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-stratford/slides/2020/cent_park__mg_8124-pano-3_w2b_lowres.jpg\",\"Starting\":\"$1,390\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b2f3beb5-7f5d-4b91-89db-189f119dfcde\",\"Key\":\"b2f3beb5-7f5d-4b91-89db-189f119dfcde\",\"Title\":\"MAA Centennial Park\",\"Url\":\"/georgia/atlanta/maa-centennial-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4400 Pleasant Hill Road, Duluth, GA 30096\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-river-oaks/slides/2020/ro-16.jpg\",\"Starting\":\"$1,733\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"6f88db46-5ce1-40fa-af48-b935227ac03e\",\"Key\":\"6f88db46-5ce1-40fa-af48-b935227ac03e\",\"Title\":\"MAA River Oaks\",\"Url\":\"/georgia/atlanta/maa-river-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4600 West Village Place, Smyrna, GA 30080\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-west-village/slides/2023/010204---maa-west-village---pool-2.jpg\",\"Starting\":\"$1,398\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-live-work-play\\\",\\\"Name\\\":\\\"Live. Work. Play.\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b8689ee4-0b23-4d6a-bc8b-9a3165dc41e3\",\"Key\":\"b8689ee4-0b23-4d6a-bc8b-9a3165dc41e3\",\"Title\":\"MAA West Village\",\"Url\":\"/georgia/atlanta/maa-west-village/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1701 Dawsonville Hwy, Gainesville, GA 30501\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-lake-lanier/slides/2020/ll-15.jpg\",\"Starting\":\"$1,273\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"866d9010-7be1-4ab5-9348-a25ef154cb2e\",\"Key\":\"866d9010-7be1-4ab5-9348-a25ef154cb2e\",\"Title\":\"MAA Lake Lanier\",\"Url\":\"/georgia/atlanta/maa-lake-lanier/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4130 Plantation Trace Drive, Duluth, GA 30096\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-river-place/slides/1_kitchen_rp5.jpg\",\"Starting\":\"$1,578\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pet-friendly\\\",\\\"Name\\\":\\\"Pet Friendly\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"4fd88e09-d1a6-4f88-b5a9-2ce2489bb73b\",\"Key\":\"4fd88e09-d1a6-4f88-b5a9-2ce2489bb73b\",\"Title\":\"MAA River Place\",\"Url\":\"/georgia/atlanta/maa-river-place/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2400 Barrett Creek Boulevard, Marietta, GA 30066\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-barrett-creek/slides/1_121601_colonialgrandbarretcreek_mariettaga_poollounge_1-1200x525.jpg\",\"Starting\":\"$1,288\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pet-friendly\\\",\\\"Name\\\":\\\"Pet Friendly\\\"}]\",\"Images\":[],\"Id\":\"3d2d1866-ea9e-499e-9ac1-35399980cb6d\",\"Key\":\"3d2d1866-ea9e-499e-9ac1-35399980cb6d\",\"Title\":\"MAA Barrett Creek\",\"Url\":\"/georgia/atlanta/maa-barrett-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"350 Peachtree Hills Ave NE, Atlanta, GA 30305\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-peachtree-hills/slides/2020/ph-1.jpg\",\"Starting\":\"$1,210\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"507d7728-24ce-42ad-82e8-8bdc7eeae048\",\"Key\":\"507d7728-24ce-42ad-82e8-8bdc7eeae048\",\"Title\":\"MAA Peachtree Hills\",\"Url\":\"/georgia/atlanta/maa-peachtree-hills/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"100 Bradford Creek Trail, Duluth, GA 30096\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-berkeley-lake/slides/1-cg-at-berkeley-lake_pool_extras-1200x525.jpg\",\"Starting\":\"$1,553\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-high-speed-internet\\\",\\\"Name\\\":\\\"High Speed Internet\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"69fb399d-f1d4-43f5-9cb4-5f6b60fbb528\",\"Key\":\"69fb399d-f1d4-43f5-9cb4-5f6b60fbb528\",\"Title\":\"MAA Berkeley Lake\",\"Url\":\"/georgia/atlanta/maa-berkeley-lake/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3355 McDaniel Road, Duluth, GA 30096\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-mcdaniel-farm/slides/ext_pool-1.jpg\",\"Starting\":\"$1,523\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"55ab5639-f7b2-4ac1-b113-864715099edd\",\"Key\":\"55ab5639-f7b2-4ac1-b113-864715099edd\",\"Title\":\"MAA McDaniel Farm\",\"Url\":\"/georgia/atlanta/maa-mcdaniel-farm/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"100 Preston Woods Trail, Sandy Springs, GA 30338\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/atlanta/maa-mount-vernon/slides/2021/maa-mount-vernon-living3.jpg\",\"Starting\":\"$1,753\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b2436539-0290-43f9-a7cf-42f738e5346d\",\"Key\":\"b2436539-0290-43f9-a7cf-42f738e5346d\",\"Title\":\"MAA Mount Vernon\",\"Url\":\"/georgia/atlanta/maa-mount-vernon/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"909ea787-5870-4865-b35f-6412a3722a57\",\"Key\":\"909ea787-5870-4865-b35f-6412a3722a57\",\"City\":\"Savannah\",\"State\":\"GA\",\"Url\":\"/georgia/savannah\",\"ItemsTotal\":\"6 communities\",\"Items\":[{\"Description\":\"300 Blue Moon Crossing, Pooler, GA 31322\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/savannah/maa-avala/slides/2021/maa-avala-pool2.jpg\",\"Starting\":\"$1,403\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"99886023-1521-49c0-b88b-e95af31b612c\",\"Key\":\"99886023-1521-49c0-b88b-e95af31b612c\",\"Title\":\"MAA Avala\",\"Url\":\"/georgia/savannah/maa-avala/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1475 Benton Blvd, Savannah, GA 31407\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/savannah/maa_benton/slides/2022/2-pool-2.jpg\",\"Starting\":\"$1,363\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ee64359d-24b4-4350-b8a5-274b324e5575\",\"Key\":\"ee64359d-24b4-4350-b8a5-274b324e5575\",\"Title\":\"MAA Benton\",\"Url\":\"/georgia/savannah/maa-benton/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"25 Johnny Mercer Blvd, Savannah, GA 31410\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/savannah/maa-hammocks/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,748\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a5bc6c8e-eaaf-4f10-a519-5e533e663331\",\"Key\":\"a5bc6c8e-eaaf-4f10-a519-5e533e663331\",\"Title\":\"MAA Hammocks\",\"Url\":\"/georgia/savannah/maa-hammocks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"505 Mall Blvd, Savannah, GA 31406\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/savannah/maa-huntington/slides/2022/1-pool.jpg\",\"Starting\":\"$1,310\",\"Bedrooms\":\"1 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ac2da63c-e970-4ae3-9c28-c29cdf7657f1\",\"Key\":\"ac2da63c-e970-4ae3-9c28-c29cdf7657f1\",\"Title\":\"MAA Huntington\",\"Url\":\"/georgia/savannah/maa-huntington/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1800 Grove Point Rd., Savannah, GA 31419\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/savannah/maa-georgetown-grove/slides/2022/1-pool.jpg\",\"Starting\":\"$1,418\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a79b00fc-accc-468f-ac91-701f022613c7\",\"Key\":\"a79b00fc-accc-468f-ac91-701f022613c7\",\"Title\":\"MAA Georgetown Grove\",\"Url\":\"/georgia/savannah/maa-georgetown-grove/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"909 Penn Waller Rd, Savannah, GA 31410\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/georgia/savannah/maa-wilmington-island/slides/1_pool-clubhouse.jpg\",\"Starting\":\"$1,703\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"118fbd86-029d-42c2-9833-67d8a1f055aa\",\"Key\":\"118fbd86-029d-42c2-9833-67d8a1f055aa\",\"Title\":\"MAA Wilmington Island\",\"Url\":\"/georgia/savannah/maa-wilmington-island/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"6cf356a1-7a30-4ed1-a811-00d115d218d7\",\"Key\":\"6cf356a1-7a30-4ed1-a811-00d115d218d7\",\"City\":\"Lexington\",\"State\":\"KY\",\"Url\":\"/kentucky/lexington\",\"ItemsTotal\":\"4 communities\",\"Items\":[{\"Description\":\"3820 Nicholasville Rd., Lexington, KY 40503\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/kentucky/lexington/the-mansion/slides/2022/1-pool.jpg\",\"Starting\":\"$1,063\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"08ac47dc-b0d4-4f34-9d52-1fb72d067cea\",\"Key\":\"08ac47dc-b0d4-4f34-9d52-1fb72d067cea\",\"Title\":\"MAA Mansion\",\"Url\":\"/kentucky/lexington/maa-mansion/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4390 Clearwater Way, Lexington, KY 40515\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/kentucky/lexington/grand-reserve-lex/slides/01_010090_grandreservepinnacle_pool_1-1200x525.jpg\",\"Starting\":\"$1,188\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"cd3f9082-7466-423e-8f03-042fe9f9816d\",\"Key\":\"cd3f9082-7466-423e-8f03-042fe9f9816d\",\"Title\":\"MAA Pinnacle\",\"Url\":\"/kentucky/lexington/maa-pinnacle/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2334 Lake Park Rd., Lexington, KY 40502\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/kentucky/lexington/lakepointe/slides/1_016409-lakepointe_pool-1-1200x525.jpg\",\"Starting\":\"$1,038\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-pet-friendly\\\",\\\"Name\\\":\\\"Pet Friendly\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"2d1577e0-2f37-4438-86d5-452d7354699b\",\"Key\":\"2d1577e0-2f37-4438-86d5-452d7354699b\",\"Title\":\"MAA Lakepointe\",\"Url\":\"/kentucky/lexington/maa-lakepointe/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"151 S. Locust Hill Dr., Lexington, KY 40517\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/kentucky/lexington/the-village/slides/2021/village-pool.jpg\",\"Starting\":\"$1,098\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a443b41c-27c2-465a-903c-877cc7740514\",\"Key\":\"a443b41c-27c2-465a-903c-877cc7740514\",\"Title\":\"MAA Village\",\"Url\":\"/kentucky/lexington/maa-village/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"8e130c58-d7a1-4ca9-99f5-7ef759096f10\",\"Key\":\"8e130c58-d7a1-4ca9-99f5-7ef759096f10\",\"City\":\"Charlotte\",\"State\":\"NC\",\"Url\":\"/north-carolina/charlotte\",\"ItemsTotal\":\"21 communities\",\"Items\":[{\"Description\":\"735 W 5th St, Charlotte, NC 28202\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-gateway/slides/2023/leasing-exterior---entrance-2.jpg\",\"Starting\":\"$1,245\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"8310d069-e45b-4059-bab4-8f1427d8431d\",\"Key\":\"8310d069-e45b-4059-bab4-8f1427d8431d\",\"Title\":\"MAA Gateway\",\"Url\":\"/north-carolina/charlotte/maa-gateway/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"305 N. Graham Street, Charlotte, NC 28202\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-uptown/slides/2023/6.jpg\",\"Starting\":\"$1,385\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"c4adba12-17bb-4a5a-8e2a-c0588bbbc47a\",\"Key\":\"c4adba12-17bb-4a5a-8e2a-c0588bbbc47a\",\"Title\":\"MAA Uptown\",\"Url\":\"/north-carolina/charlotte/maa-uptown/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4015 Craft St, Charlotte, NC 28217\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-loso/slides/2023/0a9af8ca-14a8-4c32-9e81-6fcd2aae6363_1_100_o.jpg\",\"Starting\":\"$1,433\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_coworking_space\\\",\\\"Name\\\":\\\"Coworking Space\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_fitness_center_mirror\\\",\\\"Name\\\":\\\"Fitness Center with MIRROR\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e7f94077-f22b-4bb6-9e32-425388ef1d3a\",\"Key\":\"e7f94077-f22b-4bb6-9e32-425388ef1d3a\",\"Title\":\"MAA LoSo\",\"Url\":\"/north-carolina/charlotte/maa-loso/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"19401 Carrington Club Drive, Cornelius, NC 28031\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-cornelius/slides/maa-cornelius-1.jpg\",\"Starting\":\"$1,268\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"651369c9-77a5-486c-a4d7-804d37c21514\",\"Key\":\"651369c9-77a5-486c-a4d7-804d37c21514\",\"Title\":\"MAA Cornelius\",\"Url\":\"/north-carolina/charlotte/maa-cornelius/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9721 Rose Commons Drive, Huntersville, NC 28078\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-huntersville/slides/2023/122901---maa-huntersville---pool-aerial.jpg\",\"Starting\":\"$1,238\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"7711ec96-a772-4d60-a636-a4d42d353e58\",\"Key\":\"7711ec96-a772-4d60-a636-a4d42d353e58\",\"Title\":\"MAA Huntersville\",\"Url\":\"/north-carolina/charlotte/maa-huntersville/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9005 Lenox Pointe Drive, Charlotte, NC 28273\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-ayrsley/slides/2022/1-pool-sunrise.jpg\",\"Starting\":\"$1,218\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"f0e367aa-e0c1-4098-84f9-3f1e1f0a0692\",\"Key\":\"f0e367aa-e0c1-4098-84f9-3f1e1f0a0692\",\"Title\":\"MAA Ayrsley\",\"Url\":\"/north-carolina/charlotte/maa-ayrsley/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2720 South Boulevard, Charlotte, NC 28209\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-reserve/slides/2021/maa-reserve-pool.jpg\",\"Starting\":\"$1,273\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"fac48b19-c19d-4bc4-a890-7faf503d363a\",\"Key\":\"fac48b19-c19d-4bc4-a890-7faf503d363a\",\"Title\":\"MAA Reserve\",\"Url\":\"/north-carolina/charlotte/maa-reserve/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"710 East 7th Street, Suite 126, Charlotte, NC 28202\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-enclave/slides/2021/maa-enclave-pool.jpg\",\"Starting\":\"$1,603\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"cd16541f-b78f-485e-a716-cf2b195f96b8\",\"Key\":\"cd16541f-b78f-485e-a716-cf2b195f96b8\",\"Title\":\"MAA Enclave\",\"Url\":\"/north-carolina/charlotte/maa-enclave/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1225 S Church Street, Charlotte, NC 28203\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-1225/slides/1_1225southchurch_pool-night-1-1200x525.jpg\",\"Starting\":\"$1,258\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"79556d24-bf08-4d60-954c-c60bfcdc6cf3\",\"Key\":\"79556d24-bf08-4d60-954c-c60bfcdc6cf3\",\"Title\":\"MAA 1225\",\"Url\":\"/north-carolina/charlotte/maa-1225/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"14205 Ballantyne Lake Road, Charlotte, NC 28277\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-ballantyne/slides/1-post-ballantyne-pool-1200x525.jpg\",\"Starting\":\"$1,500\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"988d2807-1e0f-45e7-ad41-e75b0e1941ed\",\"Key\":\"988d2807-1e0f-45e7-ad41-e75b0e1941ed\",\"Title\":\"MAA Ballantyne\",\"Url\":\"/north-carolina/charlotte/maa-ballantyne/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"8810 Legacy Park Drive, Charlotte, NC 28269\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-legacy-park/slides/maa-legacy-1.jpg\",\"Starting\":\"$1,133\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"f47ea2d4-9646-4365-842b-7d28f70b0f93\",\"Key\":\"f47ea2d4-9646-4365-842b-7d28f70b0f93\",\"Title\":\"MAA Legacy Park\",\"Url\":\"/north-carolina/charlotte/maa-legacy-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9401 Grove Hill Drive, Charlotte, NC 28262\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-university-lake/slides/1_pool_lu-2.jpg\",\"Starting\":\"$1,323\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"bb08e1c6-c4c5-4867-a59a-48482200ab3b\",\"Key\":\"bb08e1c6-c4c5-4867-a59a-48482200ab3b\",\"Title\":\"MAA University Lake\",\"Url\":\"/north-carolina/charlotte/maa-university-lake/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"8215 University Ridge, Charlotte, NC 28213\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-chancellor-park/slides/2022/1-pool.jpg\",\"Starting\":\"$1,148\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e9f24ef8-0454-419d-b84f-326eba0feb4e\",\"Key\":\"e9f24ef8-0454-419d-b84f-326eba0feb4e\",\"Title\":\"MAA Chancellor Park\",\"Url\":\"/north-carolina/charlotte/maa-chancellor-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1301 Crescent Lane, Matthews, NC 28105\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-fifty-one/slides/2021/maa-fifty-one-pool.jpg\",\"Starting\":\"$1,173\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"c654b8da-75e4-48d4-b354-37d048830cce\",\"Key\":\"c654b8da-75e4-48d4-b354-37d048830cce\",\"Title\":\"MAA Fifty-One\",\"Url\":\"/north-carolina/charlotte/maa-fifty-one/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"608 McCullough Drive, Charlotte, NC 28262\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-city-grand/slides/2023/1-pool-1.jpg\",\"Starting\":\"$1,518\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"0b37249c-6bd0-47bc-929a-0691db0eefc6\",\"Key\":\"0b37249c-6bd0-47bc-929a-0691db0eefc6\",\"Title\":\"MAA City Grand\",\"Url\":\"/north-carolina/charlotte/maa-city-grand/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"7601 Holliswood Court, Charlotte, NC 28217\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-south-tryon/slides/maa-south-tryon-1.jpg\",\"Starting\":\"$1,213\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"6e191075-67ac-4fa7-afc0-40bc8d496c27\",\"Key\":\"6e191075-67ac-4fa7-afc0-40bc8d496c27\",\"Title\":\"MAA South Tryon\",\"Url\":\"/north-carolina/charlotte/maa-south-tryon/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"7201 Shannopin Drive, Charlotte, NC 28270\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-beverly-crest/slides/2022/1-pool-aerial-1.jpg\",\"Starting\":\"$1,293\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Cabana\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a8d01030-8786-4a2d-89a9-47fd4e8cc72d\",\"Key\":\"a8d01030-8786-4a2d-89a9-47fd4e8cc72d\",\"Title\":\"MAA Beverly Crest\",\"Url\":\"/north-carolina/charlotte/maa-beverly-crest/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"905 Matthews Commons Drive, Matthews, NC 28105\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-matthews-commons/slides/2021/matthews-commons-pool.jpg\",\"Starting\":\"$1,488\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"c02e51c1-9878-4390-8725-79f52070229b\",\"Key\":\"c02e51c1-9878-4390-8725-79f52070229b\",\"Title\":\"MAA Matthews Commons\",\"Url\":\"/north-carolina/charlotte/maa-matthews-commons/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3025 Mallard Hill Drive, Charlotte, NC 28269\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-prosperity-creek/slides/2020/mc-2-%282%29.jpg\",\"Starting\":\"$1,263\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"7e40ce8a-54c3-483c-a343-9a81ed6ad3ba\",\"Key\":\"7e40ce8a-54c3-483c-a343-9a81ed6ad3ba\",\"Title\":\"MAA Prosperity Creek \",\"Url\":\"/north-carolina/charlotte/maa-prosperity-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4835 Cameron Valley Pkwy., Charlotte, NC 28210\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-south-park/slides/1_205600_postpark_phillipsplace_pool_1-1200x525.jpg\",\"Starting\":\"$1,430\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d52c9b61-08a6-4528-9106-8ed55643df39\",\"Key\":\"d52c9b61-08a6-4528-9106-8ed55643df39\",\"Title\":\"MAA South Park\",\"Url\":\"/north-carolina/charlotte/maa-south-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"222 East Bland Street, Charlotte, NC 28203\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/charlotte/maa-south-line/slides/1_151201-post-charlotte-south-pool-2-1200x525.jpg\",\"Starting\":\"$1,285\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"cd5de332-dfe9-4eb4-95e0-cea565f889c4\",\"Key\":\"cd5de332-dfe9-4eb4-95e0-cea565f889c4\",\"Title\":\"MAA South Line\",\"Url\":\"/north-carolina/charlotte/maa-south-line/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"2bab6586-f280-4823-bdb3-7bd9382fd862\",\"Key\":\"2bab6586-f280-4823-bdb3-7bd9382fd862\",\"City\":\"Durham\",\"State\":\"NC\",\"Url\":\"/north-carolina/durham\",\"ItemsTotal\":\"3 communities\",\"Items\":[{\"Description\":\"100 North Creek Drive, Durham, NC 27707\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/durham/colonial-grand-at-patterson-place/slides/2023/1-pool-1.jpg\",\"Starting\":\"$1,153\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1cb40421-782a-42f1-a1f8-dc5209e6014b\",\"Key\":\"1cb40421-782a-42f1-a1f8-dc5209e6014b\",\"Title\":\"MAA Patterson\",\"Url\":\"/north-carolina/durham/maa-patterson/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"400 Stone Lion Drive, Durham, NC 27703\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/durham/maa-research-park/slides/2_120601_maa-research-park-exterior-standard-apartment-3-1200x525.jpg\",\"Starting\":\"$1,006\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Cabana\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1790e3ff-e3aa-484b-8a7f-c8735a765a57\",\"Key\":\"1790e3ff-e3aa-484b-8a7f-c8735a765a57\",\"Title\":\"MAA Research Park\",\"Url\":\"/north-carolina/durham/maa-research-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"910 Constitution Drive, Durham, NC 27705\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/durham/colonial-village-at-deerfield/slides/1_pool_maa-duke-forest.jpg\",\"Starting\":\"$1,353\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"734d5aad-124c-4c6d-8e6f-b70f67948a5d\",\"Key\":\"734d5aad-124c-4c6d-8e6f-b70f67948a5d\",\"Title\":\"MAA Duke Forest\",\"Url\":\"/north-carolina/durham/maa-duke-forest/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"c70fa478-2925-499a-9957-c2852afe92fb\",\"Key\":\"c70fa478-2925-499a-9957-c2852afe92fb\",\"City\":\"Raleigh/Cary\",\"State\":\"NC\",\"Url\":\"/north-carolina/raleigh-cary\",\"ItemsTotal\":\"13 communities\",\"Items\":[{\"Description\":\"300 West Hargett Street, Raleigh, NC 27601\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-hue/slides/2022/1-pool.jpg\",\"Starting\":\"$1,298\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"072c8d99-f4c7-4663-8a10-59887488f0c1\",\"Key\":\"072c8d99-f4c7-4663-8a10-59887488f0c1\",\"Title\":\"MAA Hue\",\"Url\":\"/north-carolina/raleigh-cary/maa-hue/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"10100 Donerail Way, Raleigh, NC 27617\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-providence/slides/2023/1-pool-1.jpg\",\"Starting\":\"$1,253\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"fb141b2a-5236-48ab-be94-dff88d344052\",\"Key\":\"fb141b2a-5236-48ab-be94-dff88d344052\",\"Title\":\"MAA Providence\",\"Url\":\"/north-carolina/raleigh-cary/maa-providence/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"10210 Hillston Ridge Road, Raleigh, NC 27617\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-brierdale/slides/1_124701_maa-brierdale_raleighnc_pool_2-1200x525.jpg\",\"Starting\":\"$1,238\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Attached Garages\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a85909a8-d769-4524-a81b-d1a527cdaaab\",\"Key\":\"a85909a8-d769-4524-a81b-d1a527cdaaab\",\"Title\":\"MAA Brierdale\",\"Url\":\"/north-carolina/raleigh-cary/maa-brierdale/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"8400 Brass Mill Lane, Raleigh, NC 27617\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-preserve/slides/1_010120_maa-preserve_raleighnc_upperpool_1-1200x525.jpg\",\"Starting\":\"$1,223\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ccef4f0e-2531-4382-a119-c0bdfd25598e\",\"Key\":\"ccef4f0e-2531-4382-a119-c0bdfd25598e\",\"Title\":\"MAA Preserve\",\"Url\":\"/north-carolina/raleigh-cary/maa-preserve/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"100 Hempstead Court, Cary, NC 27513\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-hermitage/slides/1_maa-hermitage-2_pool.jpg\",\"Starting\":\"$1,108\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"cbbede90-5130-401b-bcd5-06f2b5e7e1d0\",\"Key\":\"cbbede90-5130-401b-bcd5-06f2b5e7e1d0\",\"Title\":\"MAA Hermitage\",\"Url\":\"/north-carolina/raleigh-cary/maa-hermitage/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3300 Grove at Crabtree Crescent, Raleigh, NC 27613\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-crabtree/slides/cc-1.jpg\",\"Starting\":\"$1,199\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"83faeef0-f0a7-439c-bb1e-e6dc4ebbce8b\",\"Key\":\"83faeef0-f0a7-439c-bb1e-e6dc4ebbce8b\",\"Title\":\"MAA Crabtree\",\"Url\":\"/north-carolina/raleigh-cary/maa-crabtree/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1140 Trinity Pine Lane, Raleigh, NC 27607\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-trinity/slides/tc-1.jpg\",\"Starting\":\"$1,128\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-basketball\\\",\\\"Name\\\":\\\"Basketball\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"0e7b4110-9be8-4f54-817d-41b604f54f71\",\"Key\":\"0e7b4110-9be8-4f54-817d-41b604f54f71\",\"Title\":\"MAA Trinity\",\"Url\":\"/north-carolina/raleigh-cary/maa-trinity/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5710 Arringdon Park Drive, Morrisville, NC 27560\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-arringdon/slides/1_pool.jpg\",\"Starting\":\"$1,113\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"f941a159-0949-45fe-9d78-a6ab1f8f91e1\",\"Key\":\"f941a159-0949-45fe-9d78-a6ab1f8f91e1\",\"Title\":\"MAA Arringdon\",\"Url\":\"/north-carolina/raleigh-cary/maa-arringdon/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1250 Hitchings Way, Raleigh, NC 27709\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-nixie/2023/rendering-1-%281%29.png\",\"Starting\":\"\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-y-maa_icons_electric_car_charging_station\\\",\\\"Name\\\":\\\"E.V. Charging Station\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-park-access\\\",\\\"Name\\\":\\\"Park Access\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"25c543d3-934e-4d6f-910d-9269654bf749\",\"Key\":\"25c543d3-934e-4d6f-910d-9269654bf749\",\"Title\":\"MAA Nixie\",\"Url\":\"/north-carolina/raleigh-cary/maa-nixie/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"900 Waterford Forest Circle, Cary, NC 27513\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-900-waterford/slides/2023/10119---maa-900-waterford---pool-aerial-1.jpg\",\"Starting\":\"$1,273\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-energy-star-appliances\\\",\\\"Name\\\":\\\"Energy Star Appliances\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"11725b0e-5687-4a41-966f-9b1e5954cc60\",\"Key\":\"11725b0e-5687-4a41-966f-9b1e5954cc60\",\"Title\":\"MAA 900 Waterford\",\"Url\":\"/north-carolina/raleigh-cary/maa-900-waterford/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"10200 Crichton Street, Raleigh, NC 27617\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-brier-falls/slides/2023/1-pool.jpg\",\"Starting\":\"$1,258\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"3603ca8d-17ad-472f-befb-a418718f936a\",\"Key\":\"3603ca8d-17ad-472f-befb-a418718f936a\",\"Title\":\"MAA Brier Falls\",\"Url\":\"/north-carolina/raleigh-cary/maa-brier-falls/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5443 Wade Park Blvd., Raleigh, NC 27607\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-wade-park/slides/2020/maa-wade-park-7.jpg\",\"Starting\":\"$1,257\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"8d811d38-3193-4b78-a0d4-ad4af7e7ca4b\",\"Key\":\"8d811d38-3193-4b78-a0d4-ad4af7e7ca4b\",\"Title\":\"MAA Wade Park\",\"Url\":\"/north-carolina/raleigh-cary/maa-wade-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1000 Creekside Hills Drive, Apex, NC 27502\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/north-carolina/raleigh-cary/maa-beaver-creek/slides/2023/1-pool.jpg\",\"Starting\":\"$1,453\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"81c0441a-ed40-4b7f-a63a-6a4e323fef99\",\"Key\":\"81c0441a-ed40-4b7f-a63a-6a4e323fef99\",\"Title\":\"MAA Beaver Creek\",\"Url\":\"/north-carolina/raleigh-cary/maa-beaver-creek/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"d7f5f113-3870-4646-b1b1-042e1660b093\",\"Key\":\"d7f5f113-3870-4646-b1b1-042e1660b093\",\"City\":\"Charleston\",\"State\":\"SC\",\"Url\":\"/south-carolina/charleston\",\"ItemsTotal\":\"11 communities\",\"Items\":[{\"Description\":\"101 Bridgetown Road, Goose Creek, SC 29445\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-crowfield/slides/2021/maa-crowfield-pool.jpg\",\"Starting\":\"$1,403\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-park-access\\\",\\\"Name\\\":\\\"Park Access\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ded2db57-e7a9-41e6-8026-0d8b3bc1dab6\",\"Key\":\"ded2db57-e7a9-41e6-8026-0d8b3bc1dab6\",\"Title\":\"MAA Crowfield\",\"Url\":\"/south-carolina/charleston/maa-crowfield/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1 Westchase Drive, Charleston, SC 29407\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-westchase/slides/wc-12.jpg\",\"Starting\":\"$1,223\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"dca5fa54-5cad-4be7-8bcb-fbc1f7578a01\",\"Key\":\"dca5fa54-5cad-4be7-8bcb-fbc1f7578a01\",\"Title\":\"MAA Westchase\",\"Url\":\"/south-carolina/charleston/maa-westchase/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3785 Ladson Road, Ladson, SC 29456\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-commerce-park/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,403\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"3625d0a7-d7e4-4d94-b862-804d2d4369b8\",\"Key\":\"3625d0a7-d7e4-4d94-b862-804d2d4369b8\",\"Title\":\"MAA Commerce Park\",\"Url\":\"/south-carolina/charleston/maa-commerce-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1201 Central Haven Drive, Mt. Pleasant, SC 29464\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-1201-midtown/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,740\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1688e822-8ece-4701-946f-be49f510aec0\",\"Key\":\"1688e822-8ece-4701-946f-be49f510aec0\",\"Title\":\"MAA 1201 Midtown\",\"Url\":\"/south-carolina/charleston/maa-1201-midtown/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3590 Mary Ader Avenue, Charleston, SC 29414\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-cypress-cove/slides/2023/1-clubhouse-1.jpg\",\"Starting\":\"$1,578\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"aec607f0-f350-445c-8210-8cfbed416f45\",\"Key\":\"aec607f0-f350-445c-8210-8cfbed416f45\",\"Title\":\"MAA Cypress Cove\",\"Url\":\"/south-carolina/charleston/maa-cypress-cove/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2100 Farm Springs Road, Summerville, SC 29483\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-farm-springs/slides/1_pool_fv.jpg\",\"Starting\":\"$1,348\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d93ad19e-f248-4fd0-bcac-ac67a085e4d0\",\"Key\":\"d93ad19e-f248-4fd0-bcac-ac67a085e4d0\",\"Title\":\"MAA Farm Springs\",\"Url\":\"/south-carolina/charleston/maa-farm-springs/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1916 Sam Rittenberg Blvd, Charleston, SC 29407\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-hampton-pointe/slides/6crop.jpg\",\"Starting\":\"$1,388\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a5f06615-2c1d-4103-b6ba-a61a8f2e4870\",\"Key\":\"a5f06615-2c1d-4103-b6ba-a61a8f2e4870\",\"Title\":\"MAA Hampton Pointe\",\"Url\":\"/south-carolina/charleston/maa-hampton-pointe/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"550 Harbor Cove Lane, Charleston, SC 29412\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-james-island/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,798\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"8bf55884-3d0b-4870-877c-4a5968cf0a7d\",\"Key\":\"8bf55884-3d0b-4870-877c-4a5968cf0a7d\",\"Title\":\"MAA James Island\",\"Url\":\"/south-carolina/charleston/maa-james-island/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"301 Seaport Lane, Mt. Pleasant, SC 29464\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-rivers-walk/slides/1_pool_maarw.jpg\",\"Starting\":\"$1,723\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"652bc1b4-688f-4081-9763-38cba0816555\",\"Key\":\"652bc1b4-688f-4081-9763-38cba0816555\",\"Title\":\"MAA Rivers Walk\",\"Url\":\"/south-carolina/charleston/maa-rivers-walk/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"800 Runaway Bay Drive, Mt Pleasant, SC 29464\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-runaway-bay/slides/2020/rb-2.jpg\",\"Starting\":\"$2,358\",\"Bedrooms\":\"2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"eb68484d-284e-49ac-b0f8-b62a93fe237d\",\"Key\":\"eb68484d-284e-49ac-b0f8-b62a93fe237d\",\"Title\":\"MAA Runaway Bay\",\"Url\":\"/south-carolina/charleston/maa-runaway-bay/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9989 Dorchester Road, Summerville, SC 29485\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/charleston/maa-waters-edge/slides/2020/we-5.jpg\",\"Starting\":\"$1,508\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1c9751a5-cb7e-43dc-8504-3b8c2cb5a9a1\",\"Key\":\"1c9751a5-cb7e-43dc-8504-3b8c2cb5a9a1\",\"Title\":\"MAA Waters Edge\",\"Url\":\"/south-carolina/charleston/maa-waters-edge/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"1e8412d5-0d3e-49fc-ad56-4e89a9763c26\",\"Key\":\"1e8412d5-0d3e-49fc-ad56-4e89a9763c26\",\"City\":\"Greenville\",\"State\":\"SC\",\"Url\":\"/south-carolina/greenville\",\"ItemsTotal\":\"10 communities\",\"Items\":[{\"Description\":\"75 Innovation Drive, Greenville, SC 29607\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-innovation/slides/2022/1-pool.jpg\",\"Starting\":\"$1,368\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_electric_car_charging_station\\\",\\\"Name\\\":\\\"E.V. Charging Station\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e9811ca8-af88-4ad9-a701-68d1f835e399\",\"Key\":\"e9811ca8-af88-4ad9-a701-68d1f835e399\",\"Title\":\"MAA Innovation\",\"Url\":\"/south-carolina/greenville/maa-innovation/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"245 Congaree Road, Greenville, SC 29607\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-haywood/slides/1-maahaywood_pool-1200x525.jpg\",\"Starting\":\"$948\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d022e0c4-b51e-4db5-9f76-544f3d7b632a\",\"Key\":\"d022e0c4-b51e-4db5-9f76-544f3d7b632a\",\"Title\":\"MAA Haywood\",\"Url\":\"/south-carolina/greenville/maa-haywood/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1108 South Main Street, Greenville, SC 29601\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-greene/3_1200x525.jpg\",\"Starting\":\"$1,463\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_electric_car_charging_station\\\",\\\"Name\\\":\\\"E.V. Charging Station\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-on-site-recycling\\\",\\\"Name\\\":\\\"On-site Recycling\\\"}]\",\"Images\":[],\"Id\":\"0bfcfe03-ef62-4ce4-b9cf-f4a90b5a6da3\",\"Key\":\"0bfcfe03-ef62-4ce4-b9cf-f4a90b5a6da3\",\"Title\":\"MAA Greene\",\"Url\":\"/south-carolina/greenville/maa-greene/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2418 Marchbanks Ave., Anderson, SC 29621\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-tanglewood/slides/1_maa_tanglewood_pool-1200x525.jpg\",\"Starting\":\"$1,603\",\"Bedrooms\":\"2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-high-speed-internet\\\",\\\"Name\\\":\\\"High Speed Internet\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"75a7cc72-e689-4ad3-a43c-b7e8f68fa427\",\"Key\":\"75a7cc72-e689-4ad3-a43c-b7e8f68fa427\",\"Title\":\"MAA Tanglewood\",\"Url\":\"/south-carolina/greenville/maa-tanglewood/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"10 Capewood Road, Simpsonville, SC 29680\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-spring-creek/slides/1-maa-spring-creek_pool-1200x525.jpg\",\"Starting\":\"$1,023\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pet-friendly\\\",\\\"Name\\\":\\\"Pet Friendly\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d6a4337e-de32-4f1a-9725-98f1a847ddd3\",\"Key\":\"d6a4337e-de32-4f1a-9725-98f1a847ddd3\",\"Title\":\"MAA Spring Creek\",\"Url\":\"/south-carolina/greenville/maa-spring-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"535 Brookwood Pointe Place, Simpsonville, SC 29681\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maapointplace/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,163\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"326e0cae-7af6-40c0-bb29-13d72361e2af\",\"Key\":\"326e0cae-7af6-40c0-bb29-13d72361e2af\",\"Title\":\"MAA Point Place\",\"Url\":\"/south-carolina/greenville/maa-point-place/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3549 Rutherford Road, Taylors, SC 29687\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-highland-ridge/slides/1_highlandridge_pool-1200x525.jpg\",\"Starting\":\"$1,028\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1a845043-e82c-4348-9a68-232047eeac72\",\"Key\":\"1a845043-e82c-4348-9a68-232047eeac72\",\"Title\":\"MAA Highland Ridge\",\"Url\":\"/south-carolina/greenville/maa-highland-ridge/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"110 Southport Road, Spartanburg, SC 29306\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-park-place/slides/pp-5.jpg\",\"Starting\":\"$883\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"c6e8c31d-5df5-4622-969c-e4d47a2403ee\",\"Key\":\"c6e8c31d-5df5-4622-969c-e4d47a2403ee\",\"Title\":\"MAA Park Place\",\"Url\":\"/south-carolina/greenville/maa-park-place/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"150 Howell Circle, Greenville, SC 29615\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-howell-commons/slides/1-pool-1.jpg\",\"Starting\":\"$1,103\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"2c4123e2-0bb4-4400-a9d5-2f8c9436e7aa\",\"Key\":\"2c4123e2-0bb4-4400-a9d5-2f8c9436e7aa\",\"Title\":\"MAA Howell Commons\",\"Url\":\"/south-carolina/greenville/maa-howell-commons/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"50 Rocky Creek Road, Greenville, SC 29615\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/south-carolina/greenville/maa-paddock-club/slides/2023/1-pool.jpg\",\"Starting\":\"$1,173\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"9db546d6-f443-4221-a12d-c370d06e53c5\",\"Key\":\"9db546d6-f443-4221-a12d-c370d06e53c5\",\"Title\":\"MAA Paddock Club\",\"Url\":\"/south-carolina/greenville/maa-paddock-club/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"44656e27-0b4b-4dfe-9bbc-e50955227a39\",\"Key\":\"44656e27-0b4b-4dfe-9bbc-e50955227a39\",\"City\":\"Nashville\",\"State\":\"TN\",\"Url\":\"/tennessee/nashville\",\"ItemsTotal\":\"12 communities\",\"Items\":[{\"Description\":\"111 Acklen Park Drive, Nashville, TN 37203\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-acklen/slides/1_maa_acklen_nashvilletn_skylounge_1-1200x525.jpg\",\"Starting\":\"$1,364\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"03cd707d-14e8-427a-a7a1-d048685b8130\",\"Key\":\"03cd707d-14e8-427a-a7a1-d048685b8130\",\"Title\":\"MAA Acklen\",\"Url\":\"/tennessee/nashville/maa-acklen/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"150 West Thompson Lane, Murfreesboro, TN 37129\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-murfreesboro/slides/1_010191-maa-murfreesboro_pool-1-1200x525.jpg\",\"Starting\":\"$1,328\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"fcd8a83f-937f-4e79-9534-32b49a9783fa\",\"Key\":\"fcd8a83f-937f-4e79-9534-32b49a9783fa\",\"Title\":\"MAA Murfreesboro\",\"Url\":\"/tennessee/nashville/maa-murfreesboro/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5900 Old Hickory Blvd., Hermitage, TN 37076\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-park/slides/1_010066-maa-park_pool-3-1200x525.jpg\",\"Starting\":\"$1,163\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"9e084d5a-eee6-4e74-a818-3bb1688ae760\",\"Key\":\"9e084d5a-eee6-4e74-a818-3bb1688ae760\",\"Title\":\"MAA Park\",\"Url\":\"/tennessee/nashville/maa-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"One Derby Trace, Nashville, TN 37211\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-brentwood/slides/1-maa-brentwood_pooltwilight2.jpg\",\"Starting\":\"$1,423\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"326ffd5f-03d0-4e13-814f-6b96b21f022e\",\"Key\":\"326ffd5f-03d0-4e13-814f-6b96b21f022e\",\"Title\":\"MAA Brentwood\",\"Url\":\"/tennessee/nashville/maa-brentwood/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2828 Old Hickory Boulevard, Nashville, TN 37221\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-bellevue/slides/1_122201-colonial-grand-at-bellvue_pool-3-1200x525.jpg\",\"Starting\":\"$1,472\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"82ccd4b7-ee01-4a59-86bc-4901d6e0c3d6\",\"Key\":\"82ccd4b7-ee01-4a59-86bc-4901d6e0c3d6\",\"Title\":\"MAA Bellevue\",\"Url\":\"/tennessee/nashville/maa-bellevue/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"7100 Sonya Dr, Nashville, TN 37209\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-nashville-west/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,648\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"65fb26d4-8d8e-4074-a6d0-c8e2f52daa24\",\"Key\":\"65fb26d4-8d8e-4074-a6d0-c8e2f52daa24\",\"Title\":\"MAA Nashville West\",\"Url\":\"/tennessee/nashville/maa-nashville-west/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1000 Colonnade Drive, Smyrna, TN 37167\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-sam-ridley/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,428\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"81076360-fff4-493b-99d4-4984ba6cd907\",\"Key\":\"81076360-fff4-493b-99d4-4984ba6cd907\",\"Title\":\"MAA Sam Ridley\",\"Url\":\"/tennessee/nashville/maa-sam-ridley/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1001 Midwood St, Franklin, TN 37067\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/venue-at-cool-springs/slides/1maacoolsprings_pool2-min.jpg\",\"Starting\":\"$1,618\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b22df551-cc7c-4006-906d-2e41b51bee82\",\"Key\":\"b22df551-cc7c-4006-906d-2e41b51bee82\",\"Title\":\"MAA Cool Springs\",\"Url\":\"/tennessee/nashville/maa-cool-springs/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1060 Kennesaw Blvd, Gallatin, TN 37066\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-kennesaw-farms/slides/2021/ak-8.jpg\",\"Starting\":\"$1,223\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"c2c05588-87df-462c-b9f8-0f92a65504a1\",\"Key\":\"c2c05588-87df-462c-b9f8-0f92a65504a1\",\"Title\":\"MAA Kennesaw Farms\",\"Url\":\"/tennessee/nashville/maa-kennesaw-farms/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2400 Charlotte Avenue, Nashville, TN 37203\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-charlotte-ave/slides/2022/1-pool.jpg\",\"Starting\":\"$1,478\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b6c76451-eda6-48ae-84d7-3f3fdcd17654\",\"Key\":\"b6c76451-eda6-48ae-84d7-3f3fdcd17654\",\"Title\":\"MAA Charlotte Ave\",\"Url\":\"/tennessee/nashville/maa-charlotte-ave/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"126 Monthaven Blvd, Hendersonville, TN 37075\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-monthaven-park/slides/2023/10111---maa-monthaven-park---pool-aerial.jpg\",\"Starting\":\"$1,573\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pet-friendly\\\",\\\"Name\\\":\\\"Pet Friendly\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"95e1c983-832c-41be-800a-43687f6148d3\",\"Key\":\"95e1c983-832c-41be-800a-43687f6148d3\",\"Title\":\"MAA Monthaven Park\",\"Url\":\"/tennessee/nashville/maa-monthaven-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"245 Indian Lake Blvd, Hendersonville, TN 37075\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/tennessee/nashville/maa-indian-lake/slides/1maa-indian_pool-2-min.jpg\",\"Starting\":\"$1,308\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"78943b09-7945-4539-bafb-7c07e980ed29\",\"Key\":\"78943b09-7945-4539-bafb-7c07e980ed29\",\"Title\":\"MAA Indian Lake\",\"Url\":\"/tennessee/nashville/maa-indian-lake/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"d837ae76-7dc9-4d90-bbf7-f34a260aa28a\",\"Key\":\"d837ae76-7dc9-4d90-bbf7-f34a260aa28a\",\"City\":\"Dallas/Fort Worth\",\"State\":\"TX\",\"Url\":\"/texas/dallas\",\"ItemsTotal\":\"36 communities\",\"Items\":[{\"Description\":\"150 Parish Lane, Roanoke, TX 76262\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-watermark/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,283\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"22a84868-a61c-457d-b64b-500dbaeb7140\",\"Key\":\"22a84868-a61c-457d-b64b-500dbaeb7140\",\"Title\":\"MAA Watermark\",\"Url\":\"/texas/dallas/maa-watermark/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"6805 Lebanon Rd, Frisco, TX 75034\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-starwood/slides/2022/1-maa-starwood---pool-angle-2.jpg\",\"Starting\":\"$1,273\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"0bfbdee7-89bc-4ccc-b7cf-879eeef1bd4d\",\"Key\":\"0bfbdee7-89bc-4ccc-b7cf-879eeef1bd4d\",\"Title\":\"MAA Starwood\",\"Url\":\"/texas/dallas/maa-starwood/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2300 Grayson Drive, Grapevine, TX 76051\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-grapevine/slides/mg-21.jpg\",\"Starting\":\"$1,143\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d49fa39e-4dc6-42e9-b01c-33bc1bf546ff\",\"Key\":\"d49fa39e-4dc6-42e9-b01c-33bc1bf546ff\",\"Title\":\"MAA Grapevine\",\"Url\":\"/texas/dallas/maa-grapevine/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"344 Murray Farm Road, Fairview, TX 75069\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-fairview/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,273\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d1bb4555-a688-4d62-91f1-a0c7759bfa95\",\"Key\":\"d1bb4555-a688-4d62-91f1-a0c7759bfa95\",\"Title\":\"MAA Fairview\",\"Url\":\"/texas/dallas/maa-fairview/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3006 Woodside Street, Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-gallery/slides/maa-gallery-1.jpg\",\"Starting\":\"$3,150\",\"Bedrooms\":\"2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"0602a4da-660c-43cd-9c7e-b89fa6545126\",\"Key\":\"0602a4da-660c-43cd-9c7e-b89fa6545126\",\"Title\":\"MAA Gallery\",\"Url\":\"/texas/dallas/maa-gallery/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2401 Ohio Drive, Plano, TX 75093\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-highwood/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,323\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"3712de12-5303-4668-b6b6-f69d5944d1f3\",\"Key\":\"3712de12-5303-4668-b6b6-f69d5944d1f3\",\"Title\":\"MAA Highwood\",\"Url\":\"/texas/dallas/maa-highwood/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5741 Martin Road, Plano, TX 75024\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-legacy/slides/1_245700-post-legacy-plano-pool_2-1200x525.jpg\",\"Starting\":\"$1,175\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"370c9c1d-7dc7-495a-8752-bb371a2d0530\",\"Key\":\"370c9c1d-7dc7-495a-8752-bb371a2d0530\",\"Title\":\"MAA Legacy\",\"Url\":\"/texas/dallas/maa-legacy/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3015 State Street, Suite 111, Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-heights/slides/2021/maa-heights_pool.jpg\",\"Starting\":\"$1,450\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"6b26c70f-71d0-42dc-8447-5e68b4cf42b3\",\"Key\":\"6b26c70f-71d0-42dc-8447-5e68b4cf42b3\",\"Title\":\"MAA Heights\",\"Url\":\"/texas/dallas/maa-heights/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2427 Allen Street, Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-meridian/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,610\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b478d465-dbe6-425b-9526-1e38219bda7e\",\"Key\":\"b478d465-dbe6-425b-9526-1e38219bda7e\",\"Title\":\"MAA Meridian\",\"Url\":\"/texas/dallas/maa-meridian/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1701 Hebron Pkwy East, Carrollton, TX 75010\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-hebron/slides/2022/1-pool-angle-2.jpg\",\"Starting\":\"$1,393\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d61ba63f-cc52-4372-bb7b-7347957b19ad\",\"Key\":\"d61ba63f-cc52-4372-bb7b-7347957b19ad\",\"Title\":\"MAA Hebron\",\"Url\":\"/texas/dallas/maa-hebron/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2808 McKinney Ave., Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-worthington/slides/2021/maa-worthington-pool.jpg\",\"Starting\":\"$1,645\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_business_center\\\",\\\"Name\\\":\\\"Business Center\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_granite_countertops\\\",\\\"Name\\\":\\\"Granite Countertops\\\"},{\\\"Icon\\\":\\\"icon-live-work-play\\\",\\\"Name\\\":\\\"Live. Work. Play.\\\"}]\",\"Images\":[],\"Id\":\"eb8efa3d-a9b1-414c-9862-73846c928c32\",\"Key\":\"eb8efa3d-a9b1-414c-9862-73846c928c32\",\"Title\":\"MAA Worthington\",\"Url\":\"/texas/dallas/maa-worthington/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1801 N. Greenville Ave Suite 300, Richardson, TX 75081\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-eastside/slides/2022/1-property-aerial.jpg\",\"Starting\":\"$1,225\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"24ec586b-a584-4997-9730-5406dc24bb00\",\"Key\":\"24ec586b-a584-4997-9730-5406dc24bb00\",\"Title\":\"MAA Eastside\",\"Url\":\"/texas/dallas/maa-eastside/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2525 Worthington, Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-abbey/slides/2021/maa-abbey-sign.jpg\",\"Starting\":\"$1,960\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"}]\",\"Images\":[],\"Id\":\"0f1fc0ca-5ec0-428f-826b-f91dcecc87a8\",\"Key\":\"0f1fc0ca-5ec0-428f-826b-f91dcecc87a8\",\"Title\":\"MAA Abbey\",\"Url\":\"/texas/dallas/maa-abbey/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2222 Medical District Dr, Dallas, TX 75235\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-medical-district/slides/maa-medical-district--pool.jpg\",\"Starting\":\"$1,198\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"227cb77b-9ba7-4503-a6c7-46956799489b\",\"Key\":\"227cb77b-9ba7-4503-a6c7-46956799489b\",\"Title\":\"MAA Medical District\",\"Url\":\"/texas/dallas/maa-medical-district/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2001 Holley Parkway, Roanoke, TX 76262\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-copper-ridge/slides/2020/6_018130-copper-ridge_outdoor-seating-fireplace-1-1200x525.jpg\",\"Starting\":\"$1,213\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pet-friendly\\\",\\\"Name\\\":\\\"Pet Friendly\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1152af98-3b14-4419-bc3e-2e7af94d46ed\",\"Key\":\"1152af98-3b14-4419-bc3e-2e7af94d46ed\",\"Title\":\"MAA Copper Ridge\",\"Url\":\"/texas/dallas/maa-copper-ridge/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1201 Meadow Creek Drive, Irving, TX 75038\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-remington-hills/slides/2021/maa-remington-hills-pool.jpg\",\"Starting\":\"$1,103\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-in-unit-laundry\\\",\\\"Name\\\":\\\"In unit Laundry\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a760baa2-f563-4425-9f50-2bd6ece983c9\",\"Key\":\"a760baa2-f563-4425-9f50-2bd6ece983c9\",\"Title\":\"MAA Remington Hills\",\"Url\":\"/texas/dallas/maa-remington-hills/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"525 W. Westchester Parkway, Grand Prairie, TX 75052\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-grand-courtyards/slides/1_018124-grand-courtyards-pool-4-1200x525.jpg\",\"Starting\":\"$1,438\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"f1980793-b399-493f-a96d-134d846e9a32\",\"Key\":\"f1980793-b399-493f-a96d-134d846e9a32\",\"Title\":\"MAA Grand Courtyards\",\"Url\":\"/texas/dallas/maa-grand-courtyards/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"16500 Lauder Lane, Dallas, TX 75248\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-highlands-north/slides/2021/1-courtyards-at-campbell-pool.jpg\",\"Starting\":\"$1,253\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"4aa78f64-e2be-48a4-bc08-a7856016e12f\",\"Key\":\"4aa78f64-e2be-48a4-bc08-a7856016e12f\",\"Title\":\"MAA Highlands North\",\"Url\":\"/texas/dallas/maa-highlands-north/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4701 14th Street, Plano, TX 75074\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-los-rios/slides/2021/lr-3.jpg\",\"Starting\":\"$1,243\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"7dd3b501-5056-4f18-ab09-6aa3dd690066\",\"Key\":\"7dd3b501-5056-4f18-ab09-6aa3dd690066\",\"Title\":\"MAA Los Rios\",\"Url\":\"/texas/dallas/maa-los-rios/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"7555 Warren Parkway, Frisco, TX 75034\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-frisco-bridges/2020/slides/2_fb_drone-sunset.jpg\",\"Starting\":\"$1,278\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d6030148-e862-4b78-a4aa-1296ee12c043\",\"Key\":\"d6030148-e862-4b78-a4aa-1296ee12c043\",\"Title\":\"MAA Frisco Bridges\",\"Url\":\"/texas/dallas/maa-frisco-bridges/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5009 Addison Circle, Addison, TX 75001\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-addison-circle/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,155\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"fc0cc0fe-0484-4697-9ced-0afb7e87f597\",\"Key\":\"fc0cc0fe-0484-4697-9ced-0afb7e87f597\",\"Title\":\"MAA Addison Circle\",\"Url\":\"/texas/dallas/maa-addison-circle/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1200 Fuller Wiser Road, Euless, TX 76039\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-bear-creek/slides/1-pool-1-aerial.jpg\",\"Starting\":\"$1,213\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"88ff93e8-68e4-4545-8e3b-3ae9c8e53f2b\",\"Key\":\"88ff93e8-68e4-4545-8e3b-3ae9c8e53f2b\",\"Title\":\"MAA Bear Creek\",\"Url\":\"/texas/dallas/maa-bear-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"851 Lake Carolyn Pkwy, Irving, TX 75039\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-bella-casita/slides/mb-10.jpg\",\"Starting\":\"$1,503\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e39ac630-116c-4f8b-91a5-1ff54fcba314\",\"Key\":\"e39ac630-116c-4f8b-91a5-1ff54fcba314\",\"Title\":\"MAA Bella Casita\",\"Url\":\"/texas/dallas/maa-bella-casita/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1400 N State Hwy 360, Mansfield, TX 76063\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-lowes-farm/slides/1_018158-legends-at-loews-farm_pool-panorama-1200x525.jpg\",\"Starting\":\"$1,268\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"dc5250b5-ac57-43f1-bf5f-88b4955601be\",\"Key\":\"dc5250b5-ac57-43f1-bf5f-88b4955601be\",\"Title\":\"MAA Lowes Farm\",\"Url\":\"/texas/dallas/maa-lowes-farm/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1515 Cannon Parkway, Roanoke, TX 76262\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-boulder-ridge/slides/1_018120-boulder-ridge_pool-1-1200x525.jpg\",\"Starting\":\"$1,188\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"44462e4a-c868-4536-819b-f39affd53230\",\"Key\":\"44462e4a-c868-4536-819b-f39affd53230\",\"Title\":\"MAA Boulder Ridge\",\"Url\":\"/texas/dallas/maa-boulder-ridge/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2121 Routh Street, Dallas, TX 75201\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-uptown-village/slides/2021/maa-uptown-village-pool3.jpg\",\"Starting\":\"$1,175\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"c27aecf1-0d0a-4331-a193-9067983b8190\",\"Key\":\"c27aecf1-0d0a-4331-a193-9067983b8190\",\"Title\":\"MAA Uptown Village\",\"Url\":\"/texas/dallas/maa-uptown-village/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2500 Central Park Boulevard, Bedford, TX 76022\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-shoal-creek/slides/2021/maa-shoal-creek-pool.jpg\",\"Starting\":\"$1,338\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1fa8753a-9221-4965-a363-7cf0acd57e36\",\"Key\":\"1fa8753a-9221-4965-a363-7cf0acd57e36\",\"Title\":\"MAA Shoal Creek\",\"Url\":\"/texas/dallas/maa-shoal-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"8001 North MacArthur Blvd, Irving, TX 75063\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-valley-ranch/slides/1_149901-colonial-grand-at-valley-ranch_pool-seating-3-1200x525.jpg\",\"Starting\":\"$1,518\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"1b112879-3c4d-4ea3-9849-075d7ad59d7d\",\"Key\":\"1b112879-3c4d-4ea3-9849-075d7ad59d7d\",\"Title\":\"MAA Valley Ranch\",\"Url\":\"/texas/dallas/maa-valley-ranch/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2801 Airport Freeway, Bedford, TX 76021\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-willow-creek/slides/5.jpg\",\"Starting\":\"$1,213\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e009dce8-898f-454e-8061-68208ef58f32\",\"Key\":\"e009dce8-898f-454e-8061-68208ef58f32\",\"Title\":\"MAA Willow Creek\",\"Url\":\"/texas/dallas/maa-willow-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"6530 Virginia Pkwy, McKinney, TX 75070\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-stonebridge-ranch/slides/2020/6530virginiaparkway_027.jpg\",\"Starting\":\"$1,148\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"5c3dc5e8-30ed-4772-a786-bad00a8c04e5\",\"Key\":\"5c3dc5e8-30ed-4772-a786-bad00a8c04e5\",\"Title\":\"MAA Stonebridge Ranch\",\"Url\":\"/texas/dallas/maa-stonebridge-ranch/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"350 East Las Colinas Boulevard, Irving, TX 75039\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-las-colinas/slides/lc-10.jpg\",\"Starting\":\"$1,363\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"777a588d-e59e-4269-8824-65b2c5daf553\",\"Key\":\"777a588d-e59e-4269-8824-65b2c5daf553\",\"Title\":\"MAA Las Colinas\",\"Url\":\"/texas/dallas/maa-las-colinas/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3096 N. Hall Street Suite 173, Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-north-hall/slides/1_240601-post-coles-corner_pool-1200x525.jpg\",\"Starting\":\"$1,320\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"fe64e59f-fd6a-457a-9ad7-d6c3bdb1b6ec\",\"Key\":\"fe64e59f-fd6a-457a-9ad7-d6c3bdb1b6ec\",\"Title\":\"MAA North Hall\",\"Url\":\"/texas/dallas/maa-north-hall/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3825 Mapleshade Ln, Plano, TX 75075\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-market-center/slides/2021/camc-pool.jpg\",\"Starting\":\"$1,308\",\"Bedrooms\":\"Studio | 1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"9010db69-0b52-4dad-b91f-a089591c8517\",\"Key\":\"9010db69-0b52-4dad-b91f-a089591c8517\",\"Title\":\"MAA Market Center\",\"Url\":\"/texas/dallas/maa-market-center/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3223 Lemmon Avenue, Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-katy-trail/slides/2023/244200---maa-katy-trail---pool-1.jpg\",\"Starting\":\"$1,615\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"b14a29cf-0ce2-4bb4-a0e6-c3a50fe128ea\",\"Key\":\"b14a29cf-0ce2-4bb4-a0e6-c3a50fe128ea\",\"Title\":\"MAA Katy Trail\",\"Url\":\"/texas/dallas/maa-katy-trail/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"7951 Collin McKinney Pkwy, McKinney, TX 75070\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-times-square/slides/2022/9-property-aerial.jpg\",\"Starting\":\"$1,378\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"040ab90a-8a0c-4fbc-a64d-407acb7f9238\",\"Key\":\"040ab90a-8a0c-4fbc-a64d-407acb7f9238\",\"Title\":\"MAA Times Square\",\"Url\":\"/texas/dallas/maa-times-square/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3000 McKinney Ave, Dallas, TX 75204\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/dallas-ft-worth/maa-mckinney/slides/2021/maa-mckinney-pool2.jpg\",\"Starting\":\"$1,425\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-y-maa_icons_courtyard_fireplace\\\",\\\"Name\\\":\\\"Courtyard Fireplace\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_package_lockers\\\",\\\"Name\\\":\\\"Package Lockers\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_rooftop_lounge\\\",\\\"Name\\\":\\\"Rooftop Lounge\\\"},{\\\"Icon\\\":\\\"icon-y-maa_icons_smarthome_technology\\\",\\\"Name\\\":\\\"Smart Home Technology\\\"}]\",\"Images\":[],\"Id\":\"5709b0f0-1aea-47af-8e46-b847107bc4da\",\"Key\":\"5709b0f0-1aea-47af-8e46-b847107bc4da\",\"Title\":\"MAA McKinney Avenue\",\"Url\":\"/texas/dallas/maa-mckinney-avenue/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":6.224667},{\"Id\":\"05ebe099-3304-4c75-940f-95f7eaf215eb\",\"Key\":\"05ebe099-3304-4c75-940f-95f7eaf215eb\",\"City\":\"Coral Springs\",\"State\":\"FL\",\"Url\":\"/florida/coral-springs\",\"ItemsTotal\":\"1 community\",\"Items\":[{\"Description\":\"9111 Ramblewood Drive, Coral Springs, FL 33071\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/coral-springs/the-preserve-at-coral-square/slides/2022/2-pool-aerial-.jpg\",\"Starting\":\"$2,048\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"3d19ab1d-2430-46cf-be1e-e36f6e239d4a\",\"Key\":\"3d19ab1d-2430-46cf-be1e-e36f6e239d4a\",\"Title\":\"MAA Coral Springs\",\"Url\":\"/florida/coral-springs/maa-coral-springs/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":5.554691},{\"Id\":\"548dfdcc-fbdf-45d0-949b-3a4b9fed3e8a\",\"Key\":\"548dfdcc-fbdf-45d0-949b-3a4b9fed3e8a\",\"City\":\"Jacksonville\",\"State\":\"FL\",\"Url\":\"/florida/jacksonville\",\"ItemsTotal\":\"1 community\",\"Items\":[{\"Description\":\"11001 Old St.augustine Rd., Jacksonville, FL 32257\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/florida/jacksonville/st-augustine/slides/sa-6.jpg\",\"Starting\":\"$1,158\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"5764bb3e-b0f1-41c0-b45d-babe6963c620\",\"Key\":\"5764bb3e-b0f1-41c0-b45d-babe6963c620\",\"Title\":\"MAA Mandarin Lakes\",\"Url\":\"/florida/jacksonville/maa-mandarin-lakes/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":5.554691},{\"Id\":\"d2dac4bc-e69e-432f-8e63-22078cba3ca9\",\"Key\":\"d2dac4bc-e69e-432f-8e63-22078cba3ca9\",\"City\":\"Austin\",\"State\":\"TX\",\"Url\":\"/texas/austin\",\"ItemsTotal\":\"21 communities\",\"Items\":[{\"Description\":\"1501 Blue Ridge Drive, Georgetown, TX 78626\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-windmill-hill/slides/2022/1.jpg\",\"Starting\":\"$1,398\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"80fb0172-398b-4703-aaf7-8298bebf3c05\",\"Key\":\"80fb0172-398b-4703-aaf7-8298bebf3c05\",\"Title\":\"MAA Windmill Hill\",\"Url\":\"/texas/austin/maa-windmill-hill/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"6600 Ed Bluestein, Austin, TX 78723\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/sixty-600/slides/2023/20230111-aarondoughertyphoto-irsaneousinteriors-0399-hdre.jpg\",\"Starting\":\"$1,103\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Cabana\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"}]\",\"Images\":[],\"Id\":\"84a1ef39-6f16-4db2-881c-43b22d436da1\",\"Key\":\"84a1ef39-6f16-4db2-881c-43b22d436da1\",\"Title\":\"MAA East Austin\",\"Url\":\"/texas/austin/maa-east-austin/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9715 FM 620 North, Austin, TX 78726\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/colonial-grand-at-canyon-pointe/slides/2021/1-cg-canyon-pointe-pool.jpg\",\"Starting\":\"$1,163\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"f82ce892-4d25-4e21-86de-330b9c5cb202\",\"Key\":\"f82ce892-4d25-4e21-86de-330b9c5cb202\",\"Title\":\"MAA Canyon Pointe\",\"Url\":\"/texas/austin/maa-canyon-pointe/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"11001 South 1st Street, Austin, TX 78748\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-double-creek/slides/2021/maa-double-creek-pool.jpg\",\"Starting\":\"$1,178\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"9a6be75b-c729-439b-9738-2d1eff490de5\",\"Key\":\"9a6be75b-c729-439b-9738-2d1eff490de5\",\"Title\":\"MAA Double Creek\",\"Url\":\"/texas/austin/maa-double-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"4330 Bull Creek Road, Austin, TX 78731\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-west-austin/slides/2022/1-pool.jpg\",\"Starting\":\"$1,400\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"666c6e21-70c7-4b06-879f-08230b54af48\",\"Key\":\"666c6e21-70c7-4b06-879f-08230b54af48\",\"Title\":\"MAA West Austin\",\"Url\":\"/texas/austin/maa-west-austin/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5811 Mesa Drive, Austin, TX 78731\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-mesa/slides/2_247200-maa-park-mesa_2nd-floor-balcony-view-2-1200x525.jpg\",\"Starting\":\"$1,945\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"884e411a-029c-461e-8188-3739d28bf15a\",\"Key\":\"884e411a-029c-461e-8188-3739d28bf15a\",\"Title\":\"MAA Park Mesa\",\"Url\":\"/texas/austin/maa-park-mesa/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"6263 McNeil Drive, Austin, TX 78729\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-quarry-oaks/slides/2022/15-signage.jpg\",\"Starting\":\"$1,163\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"9660dd98-c5ed-4523-8e94-824c90153640\",\"Key\":\"9660dd98-c5ed-4523-8e94-824c90153640\",\"Title\":\"MAA Quarry Oaks\",\"Url\":\"/texas/austin/maa-quarry-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"8801 La Cresada Dr, Austin, TX 78749\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-western-oaks/slides/2022/1-pool-aerial.jpg\",\"Starting\":\"$1,468\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"7b19b9da-8861-402e-93b9-ad7b8de97c45\",\"Key\":\"7b19b9da-8861-402e-93b9-ad7b8de97c45\",\"Title\":\"MAA Western Oaks\",\"Url\":\"/texas/austin/maa-western-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1111 South Creek Drive, Round Rock, TX 78664\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-sierra-vista/slides/2021/maa-sierra-vista-pool.jpg\",\"Starting\":\"$1,153\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-gated-community\\\",\\\"Name\\\":\\\"Gated Community\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"2813516b-ef66-40ae-b00c-6520707d5201\",\"Key\":\"2813516b-ef66-40ae-b00c-6520707d5201\",\"Title\":\"MAA Sierra Vista\",\"Url\":\"/texas/austin/maa-sierra-vista/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1901 Onion Creek Parkway, Austin, TX 78748\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-onion-creek/slides/2023/121701---maa-onion-creek---pool-aerial.jpg\",\"Starting\":\"$1,218\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a8130c79-a062-4c4e-9cee-68b1f8815d29\",\"Key\":\"a8130c79-a062-4c4e-9cee-68b1f8815d29\",\"Title\":\"MAA Onion Creek\",\"Url\":\"/texas/austin/maa-onion-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"5800 Brodie Lane, Austin, TX 78745\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-sunset-valley/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,363\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"d7cbcedd-bd74-4e0d-ae58-1b670ee6d38e\",\"Key\":\"d7cbcedd-bd74-4e0d-ae58-1b670ee6d38e\",\"Title\":\"MAA Sunset Valley\",\"Url\":\"/texas/austin/maa-sunset-valley/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1500 South Lamar, Austin, TX 78704\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-south-lamar/slides/247600-maa-south-lamar_roof-top-patio-view-low-res.jpg\",\"Starting\":\"$1,505\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"6e0d8ed7-dcbb-4bdf-999a-83d11180fd33\",\"Key\":\"6e0d8ed7-dcbb-4bdf-999a-83d11180fd33\",\"Title\":\"MAA South Lamar\",\"Url\":\"/texas/austin/maa-south-lamar/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2001 S. Mopac Expressway, Austin, TX 78746\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-barton-creek/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,730\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"5ff8567e-5178-43da-a982-c0dce5144d90\",\"Key\":\"5ff8567e-5178-43da-a982-c0dce5144d90\",\"Title\":\"MAA Barton Creek\",\"Url\":\"/texas/austin/maa-barton-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1630 Wells Branch Parkway, Austin, TX 78728\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-wells-branch/slides/1-pool-1.jpg\",\"Starting\":\"$1,078\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"9e255a23-fdb0-4114-89b9-1c2aad9c506d\",\"Key\":\"9e255a23-fdb0-4114-89b9-1c2aad9c506d\",\"Title\":\"MAA Wells Branch\",\"Url\":\"/texas/austin/maa-wells-branch/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"11300 W. Parmer Lane, Cedar Park, TX 78613\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-brushy-creek/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,283\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"01adeab1-42cf-4e9b-8483-b6e0c47d3f51\",\"Key\":\"01adeab1-42cf-4e9b-8483-b6e0c47d3f51\",\"Title\":\"MAA Brushy Creek\",\"Url\":\"/texas/austin/maa-brushy-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"300 South A.W. Grimes Blvd, Round Rock, TX 78664\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-ashton-oaks/slides/ao-pool.jpg\",\"Starting\":\"$1,433\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"3fcfcf36-9e7d-430a-bf3c-146df442f5fd\",\"Key\":\"3fcfcf36-9e7d-430a-bf3c-146df442f5fd\",\"Title\":\"MAA Ashton Oaks\",\"Url\":\"/texas/austin/maa-ashton-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"1800 Plateau Vista Boulevard, Round Rock, TX 78664\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-round-rock/slides/2023/1-pool.jpg\",\"Starting\":\"$1,348\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"e1db85ca-9001-405d-8093-de59af2e9619\",\"Key\":\"e1db85ca-9001-405d-8093-de59af2e9619\",\"Title\":\"MAA Round Rock\",\"Url\":\"/texas/austin/maa-round-rock/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"2901 Barton Skyway, Austin, TX 78746\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-barton-skyway/slides/1_018688-maa-barton-skyway_pool-1-1200x525.jpg\",\"Starting\":\"$1,348\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"4f4e6c15-d938-4c5c-92d2-cf37bf695857\",\"Key\":\"4f4e6c15-d938-4c5c-92d2-cf37bf695857\",\"Title\":\"MAA Barton Skyway\",\"Url\":\"/texas/austin/maa-barton-skyway/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"9501 N FM 620, Austin, TX 78726\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/colonial-grand-at-canyon-creek/slides/2020/161202-colonial-grand-at-canyon-creek_pool-1200x525.jpg\",\"Starting\":\"$1,168\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"8747b0a9-70d9-4cea-9105-eccd23a2b81e\",\"Key\":\"8747b0a9-70d9-4cea-9105-eccd23a2b81e\",\"Title\":\"MAA Canyon Creek\",\"Url\":\"/texas/austin/maa-canyon-creek/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3000 Colonial Parkway, Cedar Park, TX 78613\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/maa-cedar-park/slides/2022/1-1---clubhouse-exterior.jpg\",\"Starting\":\"$1,123\",\"Bedrooms\":\"1 BR | 2 BR | 3 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Cabana\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ba63a8c6-e98c-41cf-8a60-58272ddcb86e\",\"Key\":\"ba63a8c6-e98c-41cf-8a60-58272ddcb86e\",\"Title\":\"MAA Cedar Park\",\"Url\":\"/texas/austin/maa-cedar-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"11215 Research Blvd., Austin, TX 78759\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/austin/balcones-woods/slides/2021/balcones-woods-pool.jpg\",\"Starting\":\"$943\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"7fac21b6-bf85-41e1-909a-5d81cfc54c9d\",\"Key\":\"7fac21b6-bf85-41e1-909a-5d81cfc54c9d\",\"Title\":\"MAA Balcones Woods\",\"Url\":\"/texas/austin/maa-balcones-woods/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":5.554691},{\"Id\":\"0407d6b1-c0f3-494d-83d1-207b31ac727d\",\"Key\":\"0407d6b1-c0f3-494d-83d1-207b31ac727d\",\"City\":\"Houston\",\"State\":\"TX\",\"Url\":\"/texas/houston\",\"ItemsTotal\":\"4 communities\",\"Items\":[{\"Description\":\"8850 Long Point Rd Suite 106 , Houston, TX 77055\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/houston/maa-park-point/pp1staged.jpg\",\"Starting\":\"$1,313\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Clubhouse\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"a29887ce-9dc1-4e92-ae0f-cec8a4bbbf8e\",\"Key\":\"a29887ce-9dc1-4e92-ae0f-cec8a4bbbf8e\",\"Title\":\"MAA Park Point\",\"Url\":\"/texas/houston/maa-park-point/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"3131 West Loop South, Houston, TX 77027\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/houston/maa-afton-oaks/slides/2022/1-pool-%286%29.jpg\",\"Starting\":\"$1,190\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-cabana\\\",\\\"Name\\\":\\\"Cabana\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"ff562265-2b1b-49f6-8ca8-2e736ab3f0b7\",\"Key\":\"ff562265-2b1b-49f6-8ca8-2e736ab3f0b7\",\"Title\":\"MAA Afton Oaks\",\"Url\":\"/texas/houston/maa-afton-oaks/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"15200 Park Row, Houston, TX 77084\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/houston/maa-energy-park/slides/2022/1-pool-1.jpg\",\"Starting\":\"$1,073\",\"Bedrooms\":\"1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"03be1e63-2e8e-4227-88fe-c7cbbed0eb2c\",\"Key\":\"03be1e63-2e8e-4227-88fe-c7cbbed0eb2c\",\"Title\":\"MAA Energy Park\",\"Url\":\"/texas/houston/maa-energy-park/\",\"IsBestMatch\":false,\"IsPage\":false},{\"Description\":\"655 Yale Street, Houston, TX 77007\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/texas/houston/maa-greater-heights/slides/12.jpg\",\"Starting\":\"$1,458\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-24hr-fitness-center\\\",\\\"Name\\\":\\\"24/hr Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-bark-park\\\",\\\"Name\\\":\\\"Bark Park\\\"},{\\\"Icon\\\":\\\"icon-grill-and-picnic-area\\\",\\\"Name\\\":\\\"Grill & Picnic Area\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"6d5e7859-0482-419c-9540-0c41db3ce84a\",\"Key\":\"6d5e7859-0482-419c-9540-0c41db3ce84a\",\"Title\":\"MAA Greater Heights\",\"Url\":\"/texas/houston/maa-greater-heights/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":5.554691},{\"Id\":\"1ae88370-6426-4097-bc04-603b1aed76d9\",\"Key\":\"1ae88370-6426-4097-bc04-603b1aed76d9\",\"City\":\"DC Metro\",\"State\":\"VA\",\"Url\":\"/virginia/dc-metro\",\"ItemsTotal\":\"1 community\",\"Items\":[{\"Description\":\"1201 South Joyce Street Suite C-1, Arlington, VA 22202\",\"ImageUrl\":\"https://res.cloudinary.com/maa/image/upload/c_lfill,g_auto,h_350,w_350/v1/maac/-/media/images/properties/washington-dc-area/maa-national-landing/slides/2021/maa-national-landing-rpstn-lobby3.jpg\",\"Starting\":\"$2,080\",\"Bedrooms\":\"Studio | 1 BR | 2 BR\",\"AmenityIconList\":\"[{\\\"Icon\\\":\\\"icon-running-trails\\\",\\\"Name\\\":\\\"Active\\\"},{\\\"Icon\\\":\\\"icon-fitness-center\\\",\\\"Name\\\":\\\"Fitness Center\\\"},{\\\"Icon\\\":\\\"icon-garage-parking\\\",\\\"Name\\\":\\\"Garage Parking\\\"},{\\\"Icon\\\":\\\"icon-pool\\\",\\\"Name\\\":\\\"Pool\\\"}]\",\"Images\":[],\"Id\":\"5a69be0b-5472-4207-b6f8-40f910aa5919\",\"Key\":\"5a69be0b-5472-4207-b6f8-40f910aa5919\",\"Title\":\"MAA National Landing\",\"Url\":\"/virginia/dc-metro/maa-national-landing/\",\"IsBestMatch\":false,\"IsPage\":false}],\"HighestScore\":5.554691}]}],\"Pages\":[{\"Id\":\"85d210d2-9e35-4eb8-8805-b54cf097cc76\",\"Key\":\"85d210d2-9e35-4eb8-8805-b54cf097cc76\",\"Title\":\"Barton Hills\",\"Url\":\"/texas/austin/barton-hills\",\"IsBestMatch\":true,\"IsPage\":true},{\"Id\":\"e2e6be76-f5d6-4679-a422-553c2a310f12\",\"Key\":\"e2e6be76-f5d6-4679-a422-553c2a310f12\",\"Title\":\"Bellevue\",\"Url\":\"/tennessee/nashville/bellevue\",\"IsBestMatch\":false,\"IsPage\":true},{\"Id\":\"944a7418-7cb9-42bc-8f7a-e3ee7033981e\",\"Key\":\"944a7418-7cb9-42bc-8f7a-e3ee7033981e\",\"Title\":\"Midtown\",\"Url\":\"/georgia/atlanta/midtown\",\"IsBestMatch\":false,\"IsPage\":true},{\"Id\":\"efcc8e90-0ebf-4d61-b007-b1195d355a23\",\"Key\":\"efcc8e90-0ebf-4d61-b007-b1195d355a23\",\"Title\":\"Temple Terrace\",\"Url\":\"/florida/tampa/temple-terrace\",\"IsBestMatch\":false,\"IsPage\":true},{\"Id\":\"08f2a4cf-4215-463e-9b4b-226a0e278838\",\"Key\":\"08f2a4cf-4215-463e-9b4b-226a0e278838\",\"Title\":\"Ladson\",\"Url\":\"/south-carolina/charleston/ladson\",\"IsBestMatch\":false,\"IsPage\":true}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/data/results.json\n// module id = 57\n// module chunks = 0","const body = document.querySelector('body');\r\nconst scrollBody = document.querySelector('.search-hero');\r\nlet scrollContainer;\r\nlet searchHeroInput;\r\nlet searchHeroInputIcon;\r\n\r\nif(scrollBody){\r\n scrollContainer = scrollBody.querySelector('.container');\r\n searchHeroInput = scrollBody && scrollBody.querySelector('#search-hero-input');\r\n searchHeroInputIcon = scrollBody && scrollBody.querySelector('#search-hero-input-icon');\r\n}\r\n\r\nconst searchModal = document.querySelector('.modal-search');\r\nconst skip = document.querySelector('.skip-hero');\r\nconst targetMax = 0;\r\nconst targetMin = -75;\r\nconst loader = document.querySelector('.search-control__loader');\r\n\r\nlet targetScroll = targetMax;\r\nlet touchStartTargetScroll;\r\nlet touchStart = 0;\r\nlet canScroll = true;\r\nconst video = document.querySelector('video');\r\nlet isPaused = false;\r\n\r\nconst initHero = () => {\r\n if(scrollBody) {\r\n scrollContainer.classList.add('active');\r\n loader.classList.remove('active');\r\n\r\n const scrollFrames = {\r\n 'slides':[\r\n {\r\n 'target': '.image-1',\r\n 'animations': [\r\n {\r\n 'type': 'transform',\r\n 'values': []\r\n },\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'right',\r\n 'start': 0,\r\n 'end': 0,\r\n 'scrollStart': -0,\r\n 'scrollEnd': -30,\r\n 'unit': '%',\r\n },\r\n {\r\n 'attribute': 'top',\r\n 'start': 0,\r\n 'end': -100,\r\n 'scrollStart': -20,\r\n 'scrollEnd': -30,\r\n 'unit': '%',\r\n },\r\n {\r\n 'attribute': 'width',\r\n 'start': 100,\r\n 'end': 50,\r\n 'scrollStart': -1,\r\n 'scrollEnd': -20,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.image-2',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'top',\r\n 'start': 100,\r\n 'end': -100,\r\n 'scrollStart': -5,\r\n 'scrollEnd': -40,\r\n 'unit': '%',\r\n },\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.image-3',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'top',\r\n 'start': 100,\r\n 'end': -100,\r\n 'scrollStart': -30,\r\n 'scrollEnd': -50,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.image-4',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'top',\r\n 'start': 100,\r\n 'end': -100,\r\n 'scrollStart': -32,\r\n 'scrollEnd': -42,\r\n 'unit': '%',\r\n },\r\n {\r\n 'attribute': 'left',\r\n 'start': 10,\r\n 'end': 10,\r\n 'scrollStart': -32,\r\n 'scrollEnd': -52,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.image-5',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'top',\r\n 'start': 100,\r\n 'end': -100,\r\n 'scrollStart': -35,\r\n 'scrollEnd': -48,\r\n 'unit': '%',\r\n },\r\n {\r\n 'attribute': 'right',\r\n 'start': 8,\r\n 'end': 8,\r\n 'scrollStart': -33,\r\n 'scrollEnd': -53,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.image-6',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'top',\r\n 'start': 100,\r\n 'end': -100,\r\n 'scrollStart': -40,\r\n 'scrollEnd': -60,\r\n 'unit': '%',\r\n },\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.image-7',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'top',\r\n 'start': 100,\r\n 'end': 0,\r\n 'scrollStart': -49,\r\n 'scrollEnd': -59,\r\n 'unit': '%',\r\n },\r\n {\r\n 'attribute': 'width',\r\n 'start': 150,\r\n 'end': 100,\r\n 'scrollStart': -60,\r\n 'scrollEnd': -75,\r\n 'unit': '%',\r\n },\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.text-1',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'top',\r\n 'start': 100,\r\n 'end': -10,\r\n 'scrollStart': -10,\r\n 'scrollEnd': -50,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.text-2__top',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'opacity',\r\n 'start': 0,\r\n 'end': 1,\r\n 'scrollStart': -20,\r\n 'scrollEnd': -30,\r\n 'reverseStart': -40,\r\n 'reverseEnd': -50,\r\n 'unit': '%',\r\n },\r\n {\r\n 'attribute': 'left',\r\n 'start': 1,\r\n 'end': 100,\r\n 'scrollStart': -20,\r\n 'scrollEnd': -50,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.text-2__bottom',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'opacity',\r\n 'start': 0,\r\n 'end': 1,\r\n 'scrollStart': -20,\r\n 'scrollEnd': -30,\r\n 'reverseStart': -40,\r\n 'reverseEnd': -50,\r\n 'unit': '%',\r\n },\r\n {\r\n 'attribute': 'right',\r\n 'start': 1,\r\n 'end': 100,\r\n 'scrollStart': -20,\r\n 'scrollEnd': -50,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.text-3',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'opacity',\r\n 'start': 0,\r\n 'end': 1,\r\n 'scrollStart': -45,\r\n 'scrollEnd': -50,\r\n 'reverseStart': -54,\r\n 'reverseEnd': -59,\r\n 'unit': '',\r\n },\r\n {\r\n 'attribute': 'top',\r\n 'start': 0,\r\n 'end': 25,\r\n 'scrollStart': -45,\r\n 'scrollEnd': -50,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.text-4',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'opacity',\r\n 'start': 0,\r\n 'end': 1,\r\n 'scrollStart': -54,\r\n 'scrollEnd': -59,\r\n 'reverseStart': -64,\r\n 'reverseEnd': -69,\r\n 'unit': '',\r\n },\r\n {\r\n 'attribute': 'top',\r\n 'start': 0,\r\n 'end': 25,\r\n 'scrollStart': -54,\r\n 'scrollEnd': -59,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'target': '.text-5',\r\n 'animations': [\r\n {\r\n 'type': 'css',\r\n 'values': [\r\n {\r\n 'attribute': 'opacity',\r\n 'start': 0,\r\n 'end': 1,\r\n 'scrollStart': -64,\r\n 'scrollEnd': -69,\r\n 'unit': '',\r\n },\r\n {\r\n 'attribute': 'top',\r\n 'start': 0,\r\n 'end': 20,\r\n 'scrollStart': -64,\r\n 'scrollEnd': -69,\r\n 'unit': '%',\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n ]\r\n };\r\n\r\n scrollFrames.slides.forEach((item) => {\r\n const target = document.querySelector(item.target);\r\n\r\n if (target) {\r\n item.animations.forEach((anim) => {\r\n let animation = '';\r\n if(anim.type === 'transform'){\r\n anim.values.forEach((prop) => {\r\n animation += prop.attribute + '(' + prop.start + prop.unit + ') ';\r\n })\r\n target.style.transform = animation;\r\n } else {\r\n let step = null;\r\n anim.values.forEach((prop) => {\r\n step = prop.start;\r\n\r\n switch(prop.attribute){\r\n case 'opacity':\r\n target.style.opacity = step;\r\n break;\r\n case 'top':\r\n target.style.top = step + prop.unit;\r\n break;\r\n case 'bottom':\r\n target.style.bottom = step + prop.unit;\r\n break;\r\n case 'left':\r\n target.style.left = step + prop.unit;\r\n break;\r\n case 'right':\r\n target.style.right = step + prop.unit;\r\n break;\r\n case 'width':\r\n target.style.width = step + prop.unit;\r\n break;\r\n }\r\n })\r\n }\r\n })\r\n\r\n }\r\n })\r\n\r\n const handleScroll = (e) => {\r\n let x = Math.abs(e.deltaY / 100);\r\n targetScroll = e.deltaY > 0 ? targetScroll - x : targetScroll + x;\r\n\r\n if (targetScroll > targetMax){\r\n canScroll = true;\r\n targetScroll = targetMax;\r\n } else if (targetScroll < targetMin){\r\n canScroll = false;\r\n body.style.overflow = 'auto';\r\n targetScroll = targetMin;\r\n } else if(window.scrollY == 0){\r\n canScroll = true;\r\n body.style.overflow = 'hidden';\r\n e.preventDefault();\r\n }\r\n\r\n scrollContent(targetScroll);\r\n }\r\n\r\n const handleTouch = (e) => {\r\n if(touchStart == 0) {\r\n touchStart = e.targetTouches[0].screenY;\r\n } else {\r\n if(touchStart < e.targetTouches[0].screenY && targetScroll < targetMax && window.scrollY == 0) {\r\n targetScroll++;\r\n touchStart = e.targetTouches[0].screenY;\r\n } else if(targetScroll > targetMin && window.scrollY == 0) {\r\n targetScroll--;\r\n touchStart = e.targetTouches[0].screenY;\r\n }\r\n }\r\n\r\n if (targetScroll > targetMax){\r\n canScroll = true;\r\n targetScroll = targetMax;\r\n } else if (targetScroll <= targetMin){\r\n canScroll = false;\r\n body.style.overflow = 'auto';\r\n targetScroll = targetMin;\r\n } else if(window.scrollY == 0){\r\n canScroll = true;\r\n body.style.overflow = 'hidden';\r\n }\r\n\r\n scrollContent(targetScroll);\r\n }\r\n\r\n const handleTouchStart = (e) => {\r\n touchStartTargetScroll = targetScroll;\r\n touchStart = 0;\r\n if (window.scrollY <= 0 && canScroll) {\r\n e.preventDefault();\r\n } else {\r\n document.body.style.overflow = 'auto';\r\n }\r\n }\r\n\r\n const handleTouchEnd = (e) => {\r\n if (e.target === searchHeroInput && touchStartTargetScroll === targetScroll) {\r\n searchHeroInput.focus();\r\n }\r\n if (e.target === searchHeroInputIcon && touchStartTargetScroll === targetScroll) {\r\n openSearch();\r\n }\r\n }\r\n\r\n const scrollContent = (targetScroll) => {\r\n if(canScroll){\r\n scrollFrames.slides.forEach((item) => {\r\n const target = document.querySelector(item.target);\r\n if (target) {\r\n item.animations.forEach((anim) => {\r\n let animation = '';\r\n\r\n if(anim.type === 'transform'){\r\n let frame = 0;\r\n let step = 0;\r\n\r\n anim.values.forEach((prop) => {\r\n if(prop.scrollStart >= targetScroll && prop.scrollEnd <= targetScroll){\r\n frame = (Math.abs(targetScroll) - Math.abs(prop.scrollStart));\r\n\r\n if(prop.start < prop.end){\r\n step = frame * ((prop.end - prop.start) / (Math.abs(prop.scrollEnd) - Math.abs(prop.scrollStart)));\r\n } else {\r\n step = prop.start - (frame * ((prop.start - prop.end) / (Math.abs(prop.scrollEnd) - Math.abs(prop.scrollStart))));\r\n }\r\n\r\n animation += prop.attribute + '(' + step + prop.unit + ') ';\r\n } else if(prop.scrollEnd > targetScroll) {\r\n animation += prop.attribute + '(' + prop.end + prop.unit + ') ';\r\n } else {\r\n animation += prop.attribute + '(' + prop.start + prop.unit + ') ';\r\n }\r\n })\r\n target.style.transform = animation;\r\n } else {\r\n let step = null;\r\n let frame = 0;\r\n\r\n anim.values.forEach((prop) => {\r\n if(prop.scrollStart >= targetScroll && prop.scrollEnd <= targetScroll){\r\n step = 0;\r\n frame = (Math.abs(targetScroll) - Math.abs(prop.scrollStart));\r\n\r\n if(prop.start < prop.end){\r\n step = frame * ((prop.end - prop.start) / (Math.abs(prop.scrollEnd) - Math.abs(prop.scrollStart)));\r\n } else {\r\n step = prop.start - (frame * ((prop.start - prop.end) / (Math.abs(prop.scrollEnd) - Math.abs(prop.scrollStart))));\r\n }\r\n } else if(prop.reverseStart >= targetScroll && prop.reverseEnd <= targetScroll){\r\n step = 0;\r\n frame = (Math.abs(targetScroll) - Math.abs(prop.reverseStart));\r\n\r\n if(prop.start > prop.end){\r\n step = frame * ((prop.start - prop.end) / (Math.abs(prop.reverseEnd) - Math.abs(prop.reverseStart)));\r\n } else {\r\n step = prop.end - (frame * ((prop.end - prop.start) / (Math.abs(prop.reverseEnd) - Math.abs(prop.reverseStart))));\r\n }\r\n } else if(prop.reverseEnd > targetScroll) {\r\n step = prop.start;\r\n } else if(prop.scrollEnd > targetScroll) {\r\n step = prop.end;\r\n } else {\r\n step = prop.start;\r\n }\r\n\r\n switch(prop.attribute){\r\n case 'opacity':\r\n target.style.opacity = step;\r\n break;\r\n case 'top':\r\n target.style.top = step + prop.unit;\r\n break;\r\n case 'bottom':\r\n target.style.bottom = step + prop.unit;\r\n break;\r\n case 'left':\r\n target.style.left = step + prop.unit;\r\n break;\r\n case 'right':\r\n target.style.right = step + prop.unit;\r\n break;\r\n case 'width':\r\n target.style.width = step + prop.unit;\r\n break;\r\n }\r\n //let setProp = styleObject.setProperty(prop.attribute, step);\r\n })\r\n }\r\n })\r\n }\r\n })\r\n\r\n scrollBody.setAttribute('data-frame', targetScroll);\r\n } else {\r\n body.style.overflow = 'auto';\r\n }\r\n }\r\n\r\n if (scrollBody != null) {\r\n scrollContainer.addEventListener('wheel', handleScroll);\r\n scrollContainer.addEventListener('touchmove', handleTouch);\r\n scrollContainer.addEventListener('touchstart', handleTouchStart, { passive: false });\r\n scrollContainer.addEventListener('touchend', handleTouchEnd, { passive: false });\r\n document.addEventListener('touchstart', () => {\r\n if (window.scrollY !== 0) {\r\n document.body.style.overflow = 'auto';\r\n }\r\n });\r\n }\r\n\r\n const handleSkip = (e) => {\r\n e.preventDefault();\r\n while (targetScroll >= targetMin) {\r\n targetScroll--;\r\n scrollContent(targetScroll);\r\n }\r\n\r\n body.style.overflow = 'auto';\r\n window.scrollTo(0, 100);\r\n }\r\n\r\n skip.addEventListener('click', handleSkip);\r\n\r\n if(!!window.IntersectionObserver && video){\r\n //video.pause();\r\n let observer = new IntersectionObserver((entries, observer) => {\r\n\r\n entries.forEach((entry) => {\r\n if(!entry.isIntersecting && !video.paused){\r\n video.pause();\r\n isPaused = true;\r\n } else if(isPaused) {\r\n video.play();\r\n isPaused=false\r\n }\r\n });\r\n });\r\n observer.observe(video);\r\n }\r\n\r\n const openSearch = () => {\r\n searchModal.classList.add('modal-search--open');\r\n body.classList.add('body--scroll-locked');\r\n document.dispatchEvent(new CustomEvent(\"openSearchWithValue\", {\r\n bubbles: true,\r\n detail: {\r\n value: searchHeroInput.value,\r\n }\r\n }));\r\n searchHeroInput.value = '';\r\n }\r\n\r\n if (searchHeroInput) {\r\n searchHeroInput.addEventListener('keydown', (event) => {\r\n if (event.key === 'Enter') {\r\n openSearch();\r\n }\r\n });\r\n }\r\n\r\n if (searchHeroInputIcon) {\r\n searchHeroInputIcon.addEventListener('click', openSearch);\r\n }\r\n }\r\n}\r\n\r\nconst ready = (fn) => {\r\n if (document.readyState !== 'loading') {\r\n fn();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', fn);\r\n }\r\n}\r\n\r\nready(initHero);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/templates/components/search-hero/search-hero.js"],"sourceRoot":""}