{"version":3,"sources":["../../default/js/modules/arrowHandler.js","../../../GlobalResourcesMvc/Default/js/SiteIndex/trackerHousingMarkets.js","modules/SEOContent/trackerSeoContent.js","modules/Map/MapInitiator.js","nhs/views/SiteIndex/StateIndex.js"],"names":["global","NewHomeSource","Modules","eventTrigger","Object","prototype","hasOwnProperty","call","ArrowHandler","[object Object]","parameters","container","this","arrowRight","arrowLeft","firstCollection","lastCollection","scrollElement","move","limitRight","limitLeft","arrowsReference","arrowReferenceSelector","collectionsReference","collectionsReferenceSelector","querySelector","bindedCalculateMoveCallback","bindedCalculateMove","bind","bindedOnChangeCallback","onChange","addEventListener","getLimits","observeVisibility","event","requestAnimationFrame","calculateMove","IntersectionObserver","entries","forEach","entry","isIntersecting","showArrows","observe","Math","floor","getBoundingClientRect","left","right","changeLimits","style","display","classList","add","remove","element","target","closest","dataset","moveArrow","scrollBy","self","querySelectorAll","scrolledCarousel","parentElement","dispatchEvent","Event","removeEventListener","window","define","houseMarketsContainer","document","amenitiesLinks","amenityLinkClick","tagName","eventGa4","eventName","params","position","click_target","index","destination","href","eventType","body","CustomEvent","detail","data","innerText","seoContainer","contains","clickedElement","linkClicked","googleAnalyticsEvent","search_value","textContent","click_target1","Map","scriptBundleElement","isMobileDevice","NHS","loadJs","google","maps","BaseMap","previousMapInitiator","MapInitiator","mapConfiguration","mapContainer","require","bundle","bundleName","loadMapResourcesMobile","value","isMapCreated","loadMapResourcesDesktop","removeChild","noConflict","lazyLoad","searchText","getElementById","searchOptions","init","priceFormatter","number","Intl","NumberFormat","currency","minimumFractionDigits","format","priceLowValue","priceNumber","replace","parseInt","length","slice","priceHighValue","pinsElement","pins","JSON","parse","innerHTML","observer","configuration","center","lat","lng","zoom","disconnect"],"mappings":"CAWA,SAAAA,QACA,aAEAA,OAAAC,cAAAD,OAAAC,eAAA,GACAD,OAAAC,cAAAC,QAAAF,OAAAC,cAAAC,SAAA,GACA,MACAC,aADAC,OAAAC,UAAAC,eAAAC,KAAAP,OAAA,gBACA,WAAA,QA6HAA,OAAAC,cAAAC,QAAAM,aA3HA,MACAC,YAAAC,YACAA,WAAAC,YAGAC,KAAAD,UAAA,KACAC,KAAAC,WAAA,KACAD,KAAAE,UAAA,KACAF,KAAAG,gBAAA,KACAH,KAAAI,eAAA,KACAJ,KAAAK,cAAA,KACAL,KAAAM,KAAA,EACAN,KAAAO,WAAA,EACAP,KAAAQ,UAAA,EACAR,KAAAS,gBACAX,WAAAY,uBAAAZ,WAAAY,uBAAA,GACAV,KAAAW,qBACAb,WAAAc,6BAAAd,WAAAc,6BAAA,GACAZ,KAAAD,UAAAD,WAAAC,UACAC,KAAAC,WAAAD,KAAAD,UAAAc,cAAA,GAAAb,KAAAS,qCACAT,KAAAE,UAAAF,KAAAD,UAAAc,cAAA,GAAAb,KAAAS,oCACAT,KAAAK,cAAAL,KAAAD,UAAAc,cAAA,kBAAAb,KAAAD,UACAC,KAAAG,gBACAH,KAAAD,UAAAc,cAAA,GAAAb,KAAAW,+CACAX,KAAAI,eACAJ,KAAAD,UAAAc,cAAA,GAAAb,KAAAW,0DACAX,KAAAC,YAAAD,KAAAE,WAAAF,KAAAK,gBAIAL,KAAAc,4BAAAd,KAAAe,oBAAAC,KAAAhB,MACAA,KAAAiB,uBAAAjB,KAAAkB,SAAAF,KAAAhB,MAEAA,KAAAD,UAAAoB,iBAAA5B,aAAAS,KAAAc,6BACAd,KAAAD,UAAAoB,iBAAA,oBAAAnB,KAAAiB,wBACA7B,OAAA+B,iBAAA,oBAAAnB,KAAAiB,wBACAjB,KAAAoB,YACApB,KAAAqB,sBAGAxB,oBAAAyB,OACAC,sBAAAvB,KAAAwB,cAAAR,KAAAhB,KAAAsB,QAIAzB,oBACA,IAAA4B,sBAAAC,UACAA,QAAAC,SAAAC,QACAA,MAAAC,gBACA7B,KAAA8B,mBAKAC,QAAA/B,KAAAD,WAGAF,eACAG,KAAAQ,UAAAwB,KAAAC,MAAAjC,KAAAD,UAAAmC,wBAAAC,MACAnC,KAAAO,WAAAyB,KAAAC,MAAAjC,KAAAD,UAAAmC,wBAAAE,OACApC,KAAA8B,aAGAjC,YACA0B,sBAAAvB,KAAAqC,aAAArB,KAAAhB,OAGAH,WACA0B,sBAAAvB,KAAAoB,UAAAJ,KAAAhB,OAGAH,aACA0B,uBAAA,KACAS,KAAAC,MAAAjC,KAAAG,gBAAA+B,wBAAAC,MAAAnC,KAAAQ,WACAR,KAAAE,UAAAoC,MAAAC,QAAA,QACAvC,KAAAD,UAAAyC,UAAAC,IAAA,sBAEAzC,KAAAE,UAAAoC,MAAAC,QAAA,OACAvC,KAAAD,UAAAyC,UAAAE,OAAA,qBAGAV,KAAAC,MAAAjC,KAAAI,eAAA8B,wBAAAE,OAAApC,KAAAO,YACAP,KAAAC,WAAAqC,MAAAC,QAAA,QACAvC,KAAAD,UAAAyC,UAAAC,IAAA,uBAEAzC,KAAAC,WAAAqC,MAAAC,QAAA,OACAvC,KAAAD,UAAAyC,UAAAE,OAAA,yBAKA7C,cAAAyB,OACAtB,KAAAQ,UAAAwB,KAAAC,MAAAjC,KAAAD,UAAAmC,wBAAAC,MACAnC,KAAAO,WAAAyB,KAAAC,MAAAjC,KAAAD,UAAAmC,wBAAAE,OACA,MAAAO,QAAArB,OAAAA,MAAAsB,OAAAC,QAAA,GAAA7C,KAAAS,oCACA,GAAAkC,QAAA,CACA3C,KAAAM,MAAAqC,QAAAG,QAAAC,UACA/C,KAAAK,cAAA2C,SAAAhD,KAAAM,KAAA,GACA,MAAA2C,KAAAjD,KACAuB,uBAAA,KACA0B,KAAAnB,WAAAmB,MACAjD,KAAAD,UAAAmD,iBAAA,iBAEAvB,SAAAwB,mBACAA,kBAAAA,iBAAAC,eACAD,iBAAAC,cAAAC,cAAA,IAAAC,MAAA,iCAKA/B,uBAAA,KACAvB,KAAA8B,WAAA9B,SAKAH,UACAG,KAAAD,UAAAwD,oBAAAhE,aAAAS,KAAAc,6BACAd,KAAAD,UAAAwD,oBAAA,oBAAAvD,KAAAiB,wBACA7B,OAAAmE,oBAAA,oBAAAvD,KAAAiB,0BA/HA,CAoIAuC,QAEAC,OAAA,gBAAA,eAEA,WClJA,aAEA,MAAAC,sBAAAC,SAAA9C,cAAA,qBACA+C,eAAAD,SAAAT,iBAAA,yBAmCA,SAAAW,iBAAAvC,OACA,MAAAsB,OAAAtB,MAAAsB,OACA,GAAA,MAAAA,OAAAkB,QACA,OAGA,MAAAC,SAAA,CACAC,UAAA,mBACAC,OAAA,CACAC,SAAA,kCACAC,aAAAnE,KAAAoE,MAAA,EACAC,YAAAzB,OAAA0B,MAEAC,UAAA,YAEAZ,SAAAa,KAAAnB,cAAA,IAAAoB,YAAA,qBAAA,CACAC,OAAA,CAAAC,KAAAZ,aAiBAL,uBACAA,sBAAAvC,iBAAA,SA7DA,SAAAG,OACA,MAAAsB,OAAAtB,MAAAsB,OAEA,GAAA,MAAAA,OAAAkB,QACA,OAGA,MAAAC,SAAA,CACAC,UAAA,aACAC,OAAA,CACAC,SAAA,uBACAC,aAAAvB,OAAAgC,UACAP,YAAAzB,OAAA0B,MAEAC,UAAA,YAEAZ,SAAAa,KAAAnB,cAAA,IAAAoB,YAAA,qBAAA,CACAC,OAAA,CAAAC,KAAAZ,gBA+CAH,eAAAjC,SAVA,SAAAgB,QAAAyB,OACAzB,QAAAxB,iBAAA,QAAA0C,iBAAA7C,KAAA,CACAoD,YD+EA,GCpEAX,OAAA,yBAAA,eAEA,SAAArE,QChFA,aAiCAA,OAAAuE,SAAAxC,iBAAA,SA3BA,SAAAG,OACA,MAAAuD,aAAAzF,OAAAuE,SAAA9C,cAAA,gCACA,KAAAS,OAAAA,MAAAsB,QAAAtB,MAAAsB,OAAA0B,MAAAO,cAAAA,aAAAC,SAAAxD,MAAAsB,SACA,OAGA,MAAAmC,eAAAzD,MAAAsB,OACAoC,YAAAD,eAAAT,KAGAW,qBAAA,CACAV,UAAA,WACAP,UAAA,gBACAC,OAAA,CACAE,aAAA,mBACAe,aAPAH,eAAAI,YAQAC,cAAAJ,cAIArB,SAAAa,KAAAnB,cAAA,IAAAoB,YAAA,qBAAA,CACAC,OAAA,CACAC,KAAAM,4BDoDA,CC9CAzB,QAEAC,OAAA,qBAAA,eC/BA,SAAArE,QACA,aAEAA,OAAAC,cAAAD,OAAAC,eAAA,GACAD,OAAAC,cAAAgG,IAAAjG,OAAAC,cAAAgG,KAAA,GACA,MAAAC,oBAAA3B,SAAA9C,cAAA,cACA0E,eAAA5B,SAAA9C,cAAA,gCAEA,KAAA0E,gBAAAD,qBACAlG,OAAAoG,KAAApG,OAAAoG,IAAAC,QACArG,OAAAsG,QAAAtG,OAAAsG,OAAAC,MAAAvG,OAAAC,cAAAuG,SACA,OAIA,MAAAC,qBAAAzG,OAAAC,cAAAgG,IAAAS,aAgDA,SAAAA,aAAAC,kBACAA,kBAAAA,iBAAAC,eAIA5G,OAAAC,cAAAgG,IAAAO,QACAxG,OAAAC,cAAAgG,IAAAO,QAAAG,kBAKAR,gBAAA,oBAAAU,QArBA,SAAAF,kBACA,MAAAG,OAAAH,iBAAAI,WAAAJ,iBAAAI,WAAA,6BACAF,QAAA,CAAAC,SAAA,KACA9G,OAAAC,cAAAgG,IAAAO,QAAAG,qBAmBAK,CAAAL,oBA1DA,SAAAA,kBACA3G,OAAAsG,QAAAtG,OAAAsG,OAAAC,KACAH,IAAAC,OAAAH,oBAAAe,MACA,aACA,KACAjH,OAAAC,cAAAgG,IAAAO,QAAAG,sBAGApC,SAAAa,KAAArD,iBAAA,qCAAA,KACA,GAAA/B,OAAAC,cAAAgG,IAAAO,QACAxG,OAAAC,cAAAgG,IAAAO,QAAAG,uBAIA,GAAA,SAAAA,iBAAAC,aAAA5C,cAAAA,cAAAd,MAAAC,QAAA,CACA,GAAAnD,OAAAC,cAAAgG,IAAAO,QACA,OAAAxG,OAAAC,cAAAgG,IAAAO,QAAAU,oBACA,OAEAlH,OAAAC,cAAAgG,IAAAO,QAAAG,kBAKAP,IAAAC,OAAAH,oBAAAe,MACA,aACA,KACAjH,OAAAC,cAAAgG,IAAAO,QAAAG,yBAKApC,SAAAa,KAAAnB,cAAA,IAAAoB,YAAA,wBA4BA8B,CAAAR,kBACAT,oBAAAlC,cAAAoD,YAAAlB,uBASAQ,aAAAW,WAAA,WAEA,OADArH,OAAAC,cAAAgG,IAAAS,aAAAD,qBACAC,cAGA1G,OAAAC,cAAAgG,IAAAS,aAAAA,aA5FA,CA6FAtC,QAEAC,OAAA,gBAAA,eCpGAwC,QACA,CACA,WACA,eACA,wBACA,oBACA,iBAGAS,WAEA,aAEA,MAAAC,WAAAhD,SAAAiD,eAAA,cACAC,cAAAlD,SAAAiD,eAAA,0BAEAD,YAAAE,eACAF,WAAAxF,iBAAA,SAAA,KACA0F,cAAAvE,MAAAC,QAAA,WAOAmE,SAAAI,OAKA,MAAAC,eAAA,SAAAC,QACA,GAAA,oBAAAC,KACA,OAAAD,OAQA,OANA,IAAAC,KAAAC,aAAA,QAAA,CACA5E,MAAA,WACA6E,SAAA,MACAC,sBAAA,IACAC,OAAAL,SAKAM,cAAA3D,SAAAiD,eAAA,YAEAU,eACAA,cAAAnG,iBAAA,SAAA,KACA,MAAAoG,YAAAD,cAAAjB,MAAAmB,QAAA,MAAA,IAEAF,cAAAjB,MAAA,KAAAkB,YAAA,GAAAR,eAAAU,SAAAF,YAAA,KAEAA,YAAAG,OAAA,IACAJ,cAAAjB,MAAAU,eAAAU,SAAAF,YAAAI,MAAA,EAAA,GAAA,SAKA,MAAAC,eAAAjE,SAAAiD,eAAA,aAEAgB,gBACAA,eAAAzG,iBAAA,SAAA,KACA,MAAAoG,YAAAK,eAAAvB,MAAAmB,QAAA,MAAA,IAEAI,eAAAvB,MAAA,KAAAkB,YAAA,GAAAR,eAAAU,SAAAF,YAAA,KAEAA,YAAAG,OAAA,IACAE,eAAAvB,MAAAU,eAAAU,SAAAF,YAAAI,MAAA,EAAA,GAAA,SAKA,IAAAnE,OAAAnE,cAAAC,QAAAM,aAAA,CACAG,UAAA4D,SAAA9C,cAAA,8BAGA,MAAAgH,YAAAlE,SAAA9C,cAAA,mBACAiH,KAAAC,KAAAC,MAAAH,YAAAI,WAEArF,OAAAe,SAAA9C,cAAA,wBAuBA,IAAAY,sBArBA,SAAAC,QAAAwG,UACAxG,QAAAC,SAAAC,QACA,GAAAA,MAAAC,eAAA,CACA,MAAAsG,cAAA,CACAnC,aAAArC,SAAA9C,cAAA,wBACAsF,WAAA,sBACA2B,KAEAM,OAAA,CACAC,IAAA,UACAC,KAAA,SAEAC,KAAA,GAGA/E,OAAAnE,cAAAgG,IAAAS,aAAAqC,eACAD,SAAAM,oBAMAzG,QAAAa,WAIAa,OAAA,cAAA","file":"../stateindex-70ad858d84.js","sourceRoot":"..","sourcesContent":["/**\r\n * Module to move by the scroll using arrows.\r\n *\r\n * Need to add the following attributes:\r\n * data-scroll: to the element scrolled\r\n * data-arrow-right: to the arrow right button\r\n * data-arrow-left: to the arrow left button\r\n * data-move-arrow: to the arrows with the number of pixels to be move.\r\n * data-element-scrolled: all elements that are inside the container\r\n * need to have the property to get the first and last element in the collection.\r\n */\r\n(function arrowHandler(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n global.NewHomeSource.Modules = global.NewHomeSource.Modules || {};\r\n const isTouchScreen = Object.prototype.hasOwnProperty.call(global, 'ontouchstart');\r\n const eventTrigger = isTouchScreen ? 'touchend' : 'click';\r\n\r\n class ArrowHandler {\r\n constructor(parameters) {\r\n if (!parameters.container) {\r\n return;\r\n }\r\n this.container = null;\r\n this.arrowRight = null;\r\n this.arrowLeft = null;\r\n this.firstCollection = null;\r\n this.lastCollection = null;\r\n this.scrollElement = null;\r\n this.move = 0;\r\n this.limitRight = 0;\r\n this.limitLeft = 0;\r\n this.arrowsReference =\r\n parameters.arrowReferenceSelector ? parameters.arrowReferenceSelector : '';\r\n this.collectionsReference =\r\n parameters.collectionsReferenceSelector ? parameters.collectionsReferenceSelector : '';\r\n this.container = parameters.container;\r\n this.arrowRight = this.container.querySelector(`${this.arrowsReference}[data-arrow-right]`);\r\n this.arrowLeft = this.container.querySelector(`${this.arrowsReference}[data-arrow-left]`);\r\n this.scrollElement = this.container.querySelector('[data-scroll]') || this.container;\r\n this.firstCollection =\r\n this.container.querySelector(`${this.collectionsReference}[data-element-scrolled]`);\r\n this.lastCollection =\r\n this.container.querySelector(`${this.collectionsReference}[data-element-scrolled]:last-child`);\r\n if (!this.arrowRight || !this.arrowLeft || !this.scrollElement) {\r\n return;\r\n }\r\n\r\n this.bindedCalculateMoveCallback = this.bindedCalculateMove.bind(this);\r\n this.bindedOnChangeCallback = this.onChange.bind(this);\r\n\r\n this.container.addEventListener(eventTrigger, this.bindedCalculateMoveCallback);\r\n this.container.addEventListener('recalculateLimits', this.bindedOnChangeCallback);\r\n global.addEventListener('orientationchange', this.bindedOnChangeCallback);\r\n this.getLimits();\r\n this.observeVisibility();\r\n }\r\n\r\n bindedCalculateMove(event) {\r\n requestAnimationFrame(this.calculateMove.bind(this, event));\r\n }\r\n\r\n /** Used to show the arrows after a container is set as visible after being hidden */\r\n observeVisibility() {\r\n const observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n this.showArrows();\r\n }\r\n });\r\n });\r\n\r\n observer.observe(this.container);\r\n }\r\n\r\n changeLimits() {\r\n this.limitLeft = Math.floor(this.container.getBoundingClientRect().left);\r\n this.limitRight = Math.floor(this.container.getBoundingClientRect().right);\r\n this.showArrows();\r\n }\r\n\r\n getLimits() {\r\n requestAnimationFrame(this.changeLimits.bind(this));\r\n }\r\n\r\n onChange() {\r\n requestAnimationFrame(this.getLimits.bind(this));\r\n }\r\n\r\n showArrows() {\r\n requestAnimationFrame(() => {\r\n if (Math.floor(this.firstCollection.getBoundingClientRect().left) < this.limitLeft) {\r\n this.arrowLeft.style.display = 'block';\r\n this.container.classList.add('tab-shadow--left');\r\n } else {\r\n this.arrowLeft.style.display = 'none';\r\n this.container.classList.remove('tab-shadow--left');\r\n }\r\n\r\n if (Math.floor(this.lastCollection.getBoundingClientRect().right) > this.limitRight) {\r\n this.arrowRight.style.display = 'block';\r\n this.container.classList.add('tab-shadow--right');\r\n } else {\r\n this.arrowRight.style.display = 'none';\r\n this.container.classList.remove('tab-shadow--right');\r\n }\r\n });\r\n }\r\n\r\n calculateMove(event) {\r\n this.limitLeft = Math.floor(this.container.getBoundingClientRect().left);\r\n this.limitRight = Math.floor(this.container.getBoundingClientRect().right);\r\n const element = event && event.target.closest(`${this.arrowsReference}[data-move-arrow]`);\r\n if (element) {\r\n this.move = +element.dataset.moveArrow;\r\n this.scrollElement.scrollBy(this.move, 0);\r\n const self = this;\r\n requestAnimationFrame(() => {\r\n self.showArrows(self);\r\n const scrolledCarousels = this.container.querySelectorAll('[data-scroll]');\r\n\r\n scrolledCarousels.forEach((scrolledCarousel) => {\r\n if (scrolledCarousel && scrolledCarousel.parentElement) {\r\n scrolledCarousel.parentElement.dispatchEvent(new Event('recalculateLimits'));\r\n }\r\n });\r\n });\r\n } else {\r\n requestAnimationFrame(() => {\r\n this.showArrows(this);\r\n });\r\n }\r\n }\r\n\r\n dispose() {\r\n this.container.removeEventListener(eventTrigger, this.bindedCalculateMoveCallback);\r\n this.container.removeEventListener('recalculateLimits', this.bindedOnChangeCallback);\r\n global.removeEventListener('orientationchange', this.bindedOnChangeCallback);\r\n }\r\n }\r\n\r\n global.NewHomeSource.Modules.ArrowHandler = ArrowHandler;\r\n}(window));\r\n\ndefine(\"arrowHandler\", function(){});\n\n","(function trackerHousingMarkets() {\r\n 'use strict';\r\n\r\n const houseMarketsContainer = document.querySelector('#nhs_HouseMarkets');\r\n const amenitiesLinks = document.querySelectorAll('[data-amenity-card] a');\r\n\r\n /**\r\n * @private\r\n * housingLinkClick: track event when housing anchor is clicked.\r\n *\r\n * @param {Event} event with the click information.\r\n */\r\n function housingLinkClick(event) {\r\n const target = event.target;\r\n\r\n if (target.tagName !== 'A') {\r\n return;\r\n }\r\n\r\n const eventGa4 = {\r\n eventName: 'site_links',\r\n params: {\r\n position: 'New homes in markets',\r\n click_target: target.innerText,\r\n destination: target.href\r\n },\r\n eventType: 'GA4Event'\r\n };\r\n document.body.dispatchEvent(new CustomEvent('trackOnDemandEvent', {\r\n detail: { data: eventGa4 }\r\n }));\r\n }\r\n\r\n /**\r\n * @private\r\n * amenityLinkClick: track event when amenity anchor is clicked.\r\n *\r\n * @param {Event} event with the click information.\r\n */\r\n function amenityLinkClick(event) {\r\n const target = event.target;\r\n if (target.tagName !== 'A') {\r\n return;\r\n }\r\n\r\n const eventGa4 = {\r\n eventName: 'amenities_search',\r\n params: {\r\n position: 'special real estate communities',\r\n click_target: this.index + 1,\r\n destination: target.href\r\n },\r\n eventType: 'GA4Event'\r\n };\r\n document.body.dispatchEvent(new CustomEvent('trackOnDemandEvent', {\r\n detail: { data: eventGa4 }\r\n }));\r\n }\r\n\r\n /**\r\n * @private\r\n * addListenerAmenityLink: add event to amenity link.\r\n *\r\n * @param {Node} element to attach the listener.\r\n * @param {Number} index position of the element in the array.\r\n */\r\n function addListenerAmenityLink(element, index) {\r\n element.addEventListener('click', amenityLinkClick.bind({\r\n index\r\n }));\r\n }\r\n\r\n if (houseMarketsContainer) {\r\n houseMarketsContainer.addEventListener('click', housingLinkClick);\r\n }\r\n\r\n amenitiesLinks.forEach(addListenerAmenityLink);\r\n}());\r\n\ndefine(\"trackerHousingMarkets\", function(){});\n\n","(function trackerSeoContent(global) {\r\n 'use strict';\r\n\r\n /**\r\n * trackSeoContentLinkClickEvent: tracks the click event when some SEO link is clicked.\r\n * @param {object} event object result from the event triggered.\r\n */\r\n function trackSeoContentLinkClickEvent(event) {\r\n const seoContainer = global.document.querySelector('[data-seo-content-container]');\r\n if (!event || !event.target || !event.target.href || !seoContainer || !seoContainer.contains(event.target)) {\r\n return;\r\n }\r\n\r\n const clickedElement = event.target;\r\n const linkClicked = clickedElement.href;\r\n const elementText = clickedElement.textContent;\r\n\r\n const googleAnalyticsEvent = {\r\n eventType: 'GA4Event',\r\n eventName: 'search_events',\r\n params: {\r\n click_target: 'Seo Content Area',\r\n search_value: elementText,\r\n click_target1: linkClicked\r\n }\r\n };\r\n\r\n document.body.dispatchEvent(new CustomEvent('trackOnDemandEvent', {\r\n detail: {\r\n data: googleAnalyticsEvent\r\n }\r\n }));\r\n }\r\n\r\n global.document.addEventListener('click', trackSeoContentLinkClickEvent);\r\n}(window));\r\n\ndefine(\"trackerSeoContent\", function(){});\n\n","/*\r\n * map initiator is in charge of download the needed dependencies for having\r\n * a map in your page. Include this JS in the bundle of your page and call the\r\n * MapInitiator with the configuration you want for the map. Check out the\r\n * readMe file for details about the configuration object.\r\n */\r\n(function mapInitiator(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n global.NewHomeSource.Map = global.NewHomeSource.Map || {};\r\n const scriptBundleElement = document.querySelector('#mapBundle');\r\n const isMobileDevice = document.querySelector('[data-ismobiledevice=\"true\"]');\r\n\r\n if (!isMobileDevice && !scriptBundleElement &&\r\n (!global.NHS || !global.NHS.loadJs)) {\r\n if (!global.google || !global.google.maps || !global.NewHomeSource.BaseMap) {\r\n return;\r\n }\r\n }\r\n\r\n const previousMapInitiator = global.NewHomeSource.Map.MapInitiator;\r\n\r\n function loadMapResourcesDesktop(mapConfiguration) {\r\n if (global.google && global.google.maps) {\r\n NHS.loadJs(scriptBundleElement.value,\r\n 'mapBundle',\r\n () => {\r\n global.NewHomeSource.Map.BaseMap(mapConfiguration);\r\n });\r\n } else {\r\n document.body.addEventListener('googleScriptLoadedAcknowledgement', () => {\r\n if (global.NewHomeSource.Map.BaseMap) {\r\n global.NewHomeSource.Map.BaseMap(mapConfiguration);\r\n return;\r\n }\r\n\r\n if (mapConfiguration.mapContainer.parentElement.parentElement.style.display !== 'none') {\r\n if (global.NewHomeSource.Map.BaseMap) {\r\n if (global.NewHomeSource.Map.BaseMap.isMapCreated()) {\r\n return;\r\n } else {\r\n global.NewHomeSource.Map.BaseMap(mapConfiguration);\r\n return;\r\n }\r\n }\r\n\r\n NHS.loadJs(scriptBundleElement.value,\r\n 'mapBundle',\r\n () => {\r\n global.NewHomeSource.Map.BaseMap(mapConfiguration);\r\n });\r\n }\r\n });\r\n\r\n document.body.dispatchEvent(new CustomEvent('askForGoogleScript'));\r\n }\r\n }\r\n\r\n function loadMapResourcesMobile(mapConfiguration) {\r\n const bundle = mapConfiguration.bundleName ? mapConfiguration.bundleName : 'mobileMapBundlePlaceHolder';\r\n require([bundle], () => {\r\n global.NewHomeSource.Map.BaseMap(mapConfiguration);\r\n });\r\n }\r\n\r\n /**\r\n * @constructs NewHomeSource.Map.MapInitiator\r\n */\r\n function MapInitiator(mapConfiguration) {\r\n if (!mapConfiguration || !mapConfiguration.mapContainer) {\r\n return;\r\n }\r\n\r\n if (global.NewHomeSource.Map.BaseMap) {\r\n global.NewHomeSource.Map.BaseMap(mapConfiguration);\r\n return;\r\n }\r\n\r\n // if we're on mobile devices or require is defined, load the mobile resources.\r\n if (isMobileDevice || typeof require !== 'undefined') {\r\n loadMapResourcesMobile(mapConfiguration);\r\n } else {\r\n loadMapResourcesDesktop(mapConfiguration);\r\n scriptBundleElement.parentElement.removeChild(scriptBundleElement);\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.Map.MapInitiator to the previous script.\r\n */\r\n MapInitiator.noConflict = function noConflict() {\r\n global.NewHomeSource.Map.MapInitiator = previousMapInitiator;\r\n return MapInitiator;\r\n };\r\n\r\n global.NewHomeSource.Map.MapInitiator = MapInitiator;\r\n}(window));\r\n\ndefine(\"mapInitiator\", function(){});\n\n","// Global Class for State Index Page\r\nrequire(\r\n [\r\n 'lazyLoad',\r\n 'arrowHandler',\r\n 'trackerHousingMarkets',\r\n 'trackerSeoContent',\r\n 'mapInitiator'\r\n ],\r\n (\r\n lazyLoad\r\n ) => {\r\n 'use strict';\r\n\r\n const searchText = document.getElementById('SearchText');\r\n const searchOptions = document.getElementById('nhs_IndexSearchOptions');\r\n\r\n if (searchText && searchOptions) {\r\n searchText.addEventListener('click', () => {\r\n searchOptions.style.display = 'block';\r\n });\r\n }\r\n\r\n /**\r\n * Initializes the lazy load\r\n */\r\n lazyLoad.init();\r\n\r\n /**\r\n * Price Formatter\r\n */\r\n const priceFormatter = function (number) {\r\n if (typeof Intl === 'undefined') {\r\n return number;\r\n }\r\n const formatted = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n minimumFractionDigits: 0\r\n }).format(number);\r\n\r\n return formatted;\r\n };\r\n\r\n const priceLowValue = document.getElementById('PriceLow');\r\n\r\n if (priceLowValue) {\r\n priceLowValue.addEventListener('input', () => {\r\n const priceNumber = priceLowValue.value.replace(/\\D/g, '');\r\n\r\n priceLowValue.value = priceNumber === '' ? '' : priceFormatter(parseInt(priceNumber, 10));\r\n\r\n if (priceNumber.length > 6) {\r\n priceLowValue.value = priceFormatter(parseInt(priceNumber.slice(0, 7), 10));\r\n }\r\n });\r\n }\r\n\r\n const priceHighValue = document.getElementById('PriceHigh');\r\n\r\n if (priceHighValue) {\r\n priceHighValue.addEventListener('input', () => {\r\n const priceNumber = priceHighValue.value.replace(/\\D/g, '');\r\n\r\n priceHighValue.value = priceNumber === '' ? '' : priceFormatter(parseInt(priceNumber, 10));\r\n\r\n if (priceNumber.length > 6) {\r\n priceHighValue.value = priceFormatter(parseInt(priceNumber.slice(0, 7), 10));\r\n }\r\n });\r\n }\r\n\r\n new window.NewHomeSource.Modules.ArrowHandler({\r\n container: document.querySelector('[data-markets-container]')\r\n });\r\n\r\n const pinsElement = document.querySelector('[data-map-pins]');\r\n const pins = JSON.parse(pinsElement.innerHTML);\r\n\r\n const target = document.querySelector('[data-map-container]');\r\n\r\n function handleIntersection(entries, observer) {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const configuration = {\r\n mapContainer: document.querySelector('[data-map-container]'),\r\n bundleName: 'stateIndexMapBundle',\r\n pins,\r\n // These coordinates are the geographic center of the United States\r\n center: {\r\n lat: 39.828175,\r\n lng: -98.5795,\r\n },\r\n zoom: 4\r\n };\r\n\r\n window.NewHomeSource.Map.MapInitiator(configuration);\r\n observer.disconnect();\r\n }\r\n });\r\n }\r\n\r\n const observer = new IntersectionObserver(handleIntersection);\r\n observer.observe(target);\r\n }\r\n);\r\n\ndefine(\"StateIndex\", function(){});\n\n"]}