{"version":3,"sources":["../../Default/js/components/a11ydialog/a11ydialog.js","nhs/views/SearchPages/configDefaultSearchParams.js","pwa/pages/communityResults/searchParams.js","libs/domHelper.js","libs/ajaxHelper.js","nhs/views/SearchPages/configResultsCounts.js","modules/searchTypeHelper.js","pwa/pages/communityResults/getCounts.js","pwa/pages/communityResults/getResults.js","pwa/pages/communityResults/paramsObserver.js","nhs/views/SearchPages/results.js","common/touchHelper.js","pwa/pages/communityResults/homeStatusList.js","pwa/pages/communityResults/amenitiesList.js","pwa/pages/communityResults/queryStringConfig.js","pwa/pages/communityResults/uriSegmentConfig.js","pwa/pages/communityResults/urlHelper.js","pwa/pages/communityResults/history.js","nhs/components/Favorites.js","modules/analyticsHelper.js","modules/performanceEventsQueue.js","common/eventLogger.js","nhs/views/AmenityResults/favoritesHandler.js","pwa/pages/communityResults/paramsConfig.js","pwa/pages/communityResults/sortByConfig.js","pwa/pages/communityResults/resultsSortBy.js","modules/SearchPagination/trackerSearchPagination.js","nhs/views/AmenityResults/pageSizeHandler.js","nhs/views/SearchPages/labelMoreSection.js","nhs/views/AmenityResults/Show.js","../../../../../../../../../../module-insertRequire.js"],"names":["global","factory","exports","module","define","amd","globalThis","self","A11yDialog","this","focusableSelectors","element","_show","show","bind","_hide","hide","_maintainFocus","_bindKeypress","$el","shown","_id","getAttribute","id","_previouslyFocused","_listeners","create","$$","selector","context","collection","document","querySelectorAll","Array","prototype","slice","call","moveFocusToDialog","node","querySelector","focus","instantiateDialogs","forEach","setAttribute","hasAttribute","_openers","opener","addEventListener","_closers","concat","closer","_fire","event","activeElement","removeAttribute","body","removeEventListener","destroy","on","type","handler","push","off","index","indexOf","splice","listeners","domEvent","CustomEvent","detail","dispatchEvent","listener","contains","which","preventDefault","focusableChildren","join","filter","child","offsetWidth","offsetHeight","getClientRects","length","getFocusableChildren","focusedItemIndex","shiftKey","trapTabKey","target","closest","readyState","window","requestAnimationFrame","setTimeout","cache","defaultSearchParams","activeAdult","regex","searchParam","Adult","AllowStateSearch","IncludeMpc","MarketId","luxuryHomes","LuxuryHomes","gatedCommunities","Gated","golfCourse","GolfCourse","getDefaultSearchParams","url","location","href","toLowerCase","value","values","Object","i","test","getDefaultSearchParamsMemoizer","configDefaultSearchParams","searchParametersElement","searchParameters","defaultParameters","AgeRestricted","Bathrooms","Bedrooms","BrandId","Brands","CommName","CommunityStatus","Custom","CustomResults","ExcludeBrandsFromResults","ExcludeRegularComms","Green","Qmi","HomeStatus","HotDeals","Mfr","MultiFamily","NatureAreas","NoBoyl","NumStory","Parks","Pool","PriceHigh","PriceLow","SchoolDistrictIds","SingleFamily","Sports","SqFtHigh","SqFtLow","Views","Waterfront","Garages","LivingAreas","Stories","MasterBedLocation","CommId","HasRVGarage","HasBuilderReviews","ComingSoon","getParametersConfig","assign","getSearchParameters","SortBy","JSON","parse","ExcludeBasicListings","ShouldExcludeBasicListings","default","radius","Radius","WebApiSearchType","City","County","PostalCode","get","getByKey","key","set","parameters","setByKey","uniqueDefaultParams","getPassiveOptions","passive","opts","attachEvent","eventName","callback","detachEvent","Element","removeEventFromElement","addEventToElement","Document","hasParent","parentNode","hasClass","className","classList","onClassListChange","Event","bubbles","addClass","add","removeClass","remove","insertAfter","nodeToInsert","insertBefore","nextSibling","style","display","isVisible","getComputedStyle","visibility","NodeList","DOMTokenList","TypeError","defineProperty","enumerable","configurable","writable","Node","replaceWith","currentElement","parent","arguments","removeChild","currentNode","createTextNode","replaceChild","AjaxHelper","root","requestsQueue","partnerElement","getElementsByClassName","siteRoot","getElementById","browserAcceptTypes","partnerUrl","replace","protocol","executeCallbacks","req","options","succeded","data","always","success","failed","queueIndex","HTMLFieldSetElement","serialize","field","l","notSerializableTypes","s","nodeName","len","elements","name","disabled","includes","j","selected","encodeURIComponent","checked","objectToQueryString","objectToConvert","baseQueryString","keyValuePair","entries","substring","getAcceptTypes","localStorage","getItem","getRequest","contentType","parametersToSend","optionalCallbacks","xhr","XMLHttpRequest","open","onreadystatechange","succededStatus","status","responseText","setRequestHeader","send","err","postRequest","abort","async","requestHeaders","noJsonStringify","stringify","request","Error","requestToAbort","find","r","requestForQueue","toUpperCase","response","e","getAbsolutePathRequest","siteUrl","convertToQueryString","require","domHelper","routes","urls","amenityResults","routeResults","getAmenityResults","routeCounts","getAmenityCounts","getUrls","getResults","getCounts","urlsToRequestMemoizer","searchTypeHelper","CONFIGURATION","objectToReturn","functions","CommunityResults","nhs","cna","CondoDevelopments","HomeResults","Floorplans","Model","CondoTownHomes","BuilderResults","BoylResults","CustomHomes","CustomBuilders","ManufacturedResults","ManufacturedHomes","AmenityResults","srpFunction","hasOwnProperty","freeze","getAllSrpFunctions","allFunctions","getAllFunctions","urlKey","currentFunctions","entry","localizedSrpFunction","keys","getSrpFunction","allSrpFunctions","currentFunction","isCustomSearchType","srpType","isCustomBuilderSearchType","isManufacturedSearchType","updateUrlFunction","newFunction","currentSrpFunction","newUrl","history","pushState","removeQueryParamFromUrl","parameter","thisParam","endsWith","getAllSrpTypes","getSrpType","srpFunctions","split","getSrpTypeFromUrl","isBuilderSearchType","isCommunitySearchType","isAnyCommunitySearchType","isHomeSearchType","isAnyHomeSearchType","isCustomOrManufacturedSearchType","ajaxHelper","configResultsCounts","defaultAjaxUrl","globalCallback","handleSuccessEvent","subscribers","searchResultType","ajaxUrl","currentSearchParams","isCommResults","getMarketUrl","marketBreadCrumbElement","marketUrl","IsMultiLocationSearch","searchParams","isLoadingMoreResults","searchParamsChanged","temporalSearchParameters","fireSubscribers","isArray","totalCallbacks","fn","publish","isMoreResults","parametersChanged","subscribersToFire","totalSubscribersToFire","commitChanges","totalParametersChanged","beforeResultsLoadData","setValueByKey","setValues","keysToExtend","currentKey","commit","discard","getParameter","getParameters","hasFilters","defaultParams","current","currentValue","preview","previewParameters","reset","setParameter","setParameters","subscribe","unsubscribe","pop","totalChanges","getUniqueParameters","paramsObserver","lazyLoad","resultsLoaded","init","newResults","createElement","resultList","innerHTML","onClickOrTap","startX","startY","distX","distY","changedTouches","pageX","pageY","Math","abs","cancelable","dispatchClickOrTab","touchstart","TouchEvent","touchend","NewHomeSource","previousHomeStatusList","HomeStatusList","Inventory","getAmenitiesFromHomeStatus","homeStatusList","statusValue","getHomeStatus","valueArray","keyName","noConflict","previousAmenitiesList","AmenitiesList","amenities","es","en","GreenProgram","isTruthy","Modular","language","documentElement","lang","getAmenityName","amenity","getAmenities","amenitiesArray","amenityName","getAmenityValue","originalValue","functionToEvaluate","getOriginalAmenities","getQuery","amenityWord","amenityObject","amenitiesList","processQueryString","query","addQueryString","removeQueryString","queryStringConfigs","[object Object]","HomeStatusAmenities","amenityValue","getQueryString","queryString","previousUriSegmentConfig","UriSegmentConfig","uriSegmentParameters","getUriSegmentHierarchy","hierarchy","getValueFromQueryString","URL","getValueFromUrlSegment","match","RegExp","exec","queryStringConfig","uriSegmentConfig","urlHelper","queryStringParameters","temporalFiltersModified","entrySrpFunction","searchResultFunctions","entryValue","uriSegments","srpFunctionKey","pageWord","uriSegmentParameter","insertQueryString","firstQuestion","queryStringToAppend","isStatePage","getUriSegmentRecursive","tree","path","shift","leaf","uriSegment","temporalValue","updatePaginationUrl","newPage","trim","previousPage","newPageAsQueryString","newPageAsUrlSegment","urlSegment","lastSlash","lastIndexOf","position","insertUrlSegment","updateQueryStringUrl","currentUrl","keysParameters","propIndex","getQueryStringsApplied","getUrlWithoutBrandParam","urlObject","urlCurrentItems","pathname","builderParam","urlItems","item","updatePostalCodeBuilderUrl","currentPostalCode","isBuilderSearch","postalCodePrimaryCity","newURL","pathNameValues","postalCodeIndex","findIndex","pageNumber","PageNumber","currentSrpType","SrpType","parametersForUri","indexOfHomeStatus","firstValue","temporalUriSegmentParameters","at","segments","x","newUrlFunction","updateUriSegment","text","urlSearchParams","URLSearchParams","search","params","fromEntries","paramsKeys","getNewLinkWithQueryStrings","cookie","validateRedirectToBeta","newSearchFunction","currentBrandId","updateBrandParameter","ajax","res","Favorites","instance","pendingItems","cookieFavorites","isLoggedIn","favoriteString","favoriteObject","saveElements","updateStylesToSaved","dataset","category","removeFromCookie","saveToFavs","favUnsaveHandler","stopPropagation","from","favUnsave","favSavedHandler","link","urlBase","favid","Saved","updateStylesToUnsaved","favSaved","mouseDownHandler","temporalSaveToFavorites","favLogin","dataLayer","adaptiveTemplate","click","urlparts","prefix","pars","replaceState","title","onResLoaded","result","_res","saveButtons","button","items","itemIndex","map","host","toString","temporalSavedItems","handlerAuth0","Id","favUnSaved","HTMLElement","nextElement","parentElement","previousElementSibling","logInfo","marketId","partnerId","planId","specificationId","communityId","logEvents","Type","FavoriteUrl","Title","log","logger","googlepush","logEventWithParameters","homeLogInfo","specId","SetDataLayerPair","analyticsHelper","constants","nhsTrackingId","getGoogleAnalyticsValues","trackers","ga","getAll","addAnalyticsUrlParameters","urlToWork","analyticsValues","gaClientId","undefined","clientId","gaUserId","userId","performanceEventsQueue","eventsQueue","onload","urlWithGaValues","indexOfQueryString","enqueueEvent","callAddThis","commIdHd","builderIdHd","_communityId","_builderId","_planId","_specId","_homeSearchViewMetricDisplayed","_homeSearchViewMetricHidden","fromPage","performanceLogUrl","performanceLog","eventLoggerUrl","isGaLoaded","handleLogEvent","isGaReady","isAsync","redirect","newWin","cancelBubble","navigator","userAgent","referLink","appendChild","logViewWithParameters","eventCode","builderId","commId","parentCommunityId","parentCommId","communityList","basicListingId","refer","totalHomes","builderCommunityList","basicListingList","homeList","logGoogleEcommerceEvent","logView","cid","bid","bsId","hdPage","logMetrics","logString","logsInChains","builderName","communitiesIdsList","homesIdsList","eval","EventLogger","createCookie","days","expires","date","Date","setTime","getTime","toGMTString","readCookie","nameEQ","ca","c","charAt","logListHubEvent","listHubProviderId","testkey","desckey","listingKey","ListHubTracker","provider","submit","logAndRedirect","pid","sid","mid","external","logEvent","logBasicListingAndRedirect","bsid","basiclistingId","logWithParametersAndRedirect","logBasicListingEvent","_timeOut","setAllowAddThis","logMultiEvent","logHomeResultsMetrics","flag","attachEventsToAddThis","addthis","evt","serviceShared","service","getLogInfo","commDetail","_parameters","homeDetail","optValue","finalUrl","tmpData","finalData","ex","events","action","label","eventCategory","eventAction","eventLabel","eventValue","handleFavorites","locationSelect","partner","Number","favoritesParameters","paramsConfigForTabs","CustomCommunities","paramsConfigForSortBy","bedroomsHighLow","bedroomsLowHigh","SortOrder","builderAToZ","builderZToA","cityAToZ","cityZToA","communityAToZ","communityZToA","matchingHomes","planNameAToZ","planNameZToA","priceLowHigh","priceHighLow","getConfigurationForTab","tab","getSortByParameters","order","getTabParameters","getConfigurationFromAnchor","searchResultFunction","searchResultParameters","alias","customOptions","communitiesOptions","homesOptions","getSortOptionsForCurrentPage","getSortOptions","isValid","paramsConfig","sortByConfig","sortBySelect","bindSortByEvent","sortOrderChanged","locationType","locationValue","sortOptionChosen","sortSecondOrder","isZipCodeLocation","isSortByRandom","SortFirstBy","SortSecondBy","SortSecondOrder","eventGa4","click_target","search_value","eventType","trackFilterPriceEvent","optionsString","sortByValue","config","selectedIndex","updateOptions","previousTrackerSearchPagination","TrackerSearchPagination","pageSizeSelectionTracker","pageSize","ga4Event","size","parseInt","morePanelTemplate","summaryMore","builderTemp","commName","divPanel","returnElements","getElements","firstLi","secondLi","all","more","showMoreLabel","facetSection","mapSection","containerCardResults","initFacets","filterAmenityComponent","forLabel","loadAds","onDomComplete","requestIdleCallback","timeout","initMap","mapAmenityResults","loadModal","freeBrochure","openModal"],"mappings":"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","file":"../show-f1aee411fc.js","sourceRoot":"..","sourcesContent":["(function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n typeof define === 'function' && define.amd ? define('a11ydialog',factory) :\r\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.A11yDialog = factory());\r\n}(this, (function () { 'use strict';\r\n\r\n var focusableSelectors = [\r\n 'a[href]:not([tabindex^=\"-\"])',\r\n 'area[href]:not([tabindex^=\"-\"])',\r\n 'input:not([type=\"hidden\"]):not([type=\"radio\"]):not([disabled]):not([tabindex^=\"-\"])',\r\n 'input[type=\"radio\"]:not([disabled]):not([tabindex^=\"-\"])',\r\n 'select:not([disabled]):not([tabindex^=\"-\"])',\r\n 'textarea:not([disabled]):not([tabindex^=\"-\"])',\r\n 'button:not([disabled]):not([tabindex^=\"-\"])',\r\n 'iframe:not([tabindex^=\"-\"])',\r\n 'audio[controls]:not([tabindex^=\"-\"])',\r\n 'video[controls]:not([tabindex^=\"-\"])',\r\n '[contenteditable]:not([tabindex^=\"-\"])',\r\n '[tabindex]:not([tabindex^=\"-\"])',\r\n ];\r\n\r\n var TAB_KEY = 9;\r\n var ESCAPE_KEY = 27;\r\n\r\n /**\r\n * Define the constructor to instantiate a dialog\r\n *\r\n * @constructor\r\n * @param {Element} element\r\n */\r\n function A11yDialog(element) {\r\n // Prebind the functions that will be bound in addEventListener and\r\n // removeEventListener to avoid losing references\r\n this._show = this.show.bind(this);\r\n this._hide = this.hide.bind(this);\r\n this._maintainFocus = this._maintainFocus.bind(this);\r\n this._bindKeypress = this._bindKeypress.bind(this);\r\n\r\n this.$el = element;\r\n this.shown = false;\r\n this._id = this.$el.getAttribute('data-a11y-dialog') || this.$el.id;\r\n this._previouslyFocused = null;\r\n this._listeners = {};\r\n\r\n // Initialise everything needed for the dialog to work properly\r\n this.create();\r\n }\r\n\r\n /**\r\n * Set up everything necessary for the dialog to be functioning\r\n *\r\n * @param {(NodeList | Element | string)} targets\r\n * @return {this}\r\n */\r\n A11yDialog.prototype.create = function () {\r\n this.$el.setAttribute('aria-hidden', true);\r\n this.$el.setAttribute('aria-modal', true);\r\n this.$el.setAttribute('tabindex', -1);\r\n\r\n if (!this.$el.hasAttribute('role')) {\r\n this.$el.setAttribute('role', 'dialog');\r\n }\r\n\r\n // Keep a collection of dialog openers, each of which will be bound a click\r\n // event listener to open the dialog\r\n this._openers = $$('[data-a11y-dialog-show=\"' + this._id + '\"]');\r\n this._openers.forEach(\r\n function (opener) {\r\n opener.addEventListener('click', this._show);\r\n }.bind(this)\r\n );\r\n\r\n // Keep a collection of dialog closers, each of which will be bound a click\r\n // event listener to close the dialog\r\n this._closers = $$('[data-a11y-dialog-hide]', this.$el).concat(\r\n $$('[data-a11y-dialog-hide=\"' + this._id + '\"]')\r\n );\r\n this._closers.forEach(\r\n function (closer) {\r\n closer.addEventListener('click', this._hide);\r\n }.bind(this)\r\n );\r\n\r\n // Execute all callbacks registered for the `create` event\r\n this._fire('create');\r\n\r\n return this\r\n };\r\n\r\n /**\r\n * Show the dialog element, disable all the targets (siblings), trap the\r\n * current focus within it, listen for some specific key presses and fire all\r\n * registered callbacks for `show` event\r\n *\r\n * @param {Event} event\r\n * @return {this}\r\n */\r\n A11yDialog.prototype.show = function (event) {\r\n // If the dialog is already open, abort\r\n if (this.shown) {\r\n return this\r\n }\r\n\r\n // Keep a reference to the currently focused element to be able to restore\r\n // it later\r\n this._previouslyFocused = document.activeElement;\r\n this.$el.removeAttribute('aria-hidden');\r\n this.shown = true;\r\n\r\n // Set the focus to the dialog element\r\n moveFocusToDialog(this.$el);\r\n\r\n // Bind a focus event listener to the body element to make sure the focus\r\n // stays trapped inside the dialog while open, and start listening for some\r\n // specific key presses (TAB and ESC)\r\n document.body.addEventListener('focus', this._maintainFocus, true);\r\n document.addEventListener('keydown', this._bindKeypress);\r\n\r\n // Execute all callbacks registered for the `show` event\r\n this._fire('show', event);\r\n\r\n return this\r\n };\r\n\r\n /**\r\n * Hide the dialog element, enable all the targets (siblings), restore the\r\n * focus to the previously active element, stop listening for some specific\r\n * key presses and fire all registered callbacks for `hide` event\r\n *\r\n * @param {Event} event\r\n * @return {this}\r\n */\r\n A11yDialog.prototype.hide = function (event) {\r\n // If the dialog is already closed, abort\r\n if (!this.shown) {\r\n return this\r\n }\r\n\r\n this.shown = false;\r\n this.$el.setAttribute('aria-hidden', 'true');\r\n\r\n // If there was a focused element before the dialog was opened (and it has a\r\n // `focus` method), restore the focus back to it\r\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/108\r\n if (this._previouslyFocused && this._previouslyFocused.focus) {\r\n this._previouslyFocused.focus();\r\n }\r\n\r\n // Remove the focus event listener to the body element and stop listening\r\n // for specific key presses\r\n document.body.removeEventListener('focus', this._maintainFocus, true);\r\n document.removeEventListener('keydown', this._bindKeypress);\r\n\r\n // Execute all callbacks registered for the `hide` event\r\n this._fire('hide', event);\r\n\r\n return this\r\n };\r\n\r\n /**\r\n * Destroy the current instance (after making sure the dialog has been hidden)\r\n * and remove all associated listeners from dialog openers and closers\r\n *\r\n * @return {this}\r\n */\r\n A11yDialog.prototype.destroy = function () {\r\n // Hide the dialog to avoid destroying an open instance\r\n this.hide();\r\n\r\n // Remove the click event listener from all dialog openers\r\n this._openers.forEach(\r\n function (opener) {\r\n opener.removeEventListener('click', this._show);\r\n }.bind(this)\r\n );\r\n\r\n // Remove the click event listener from all dialog closers\r\n this._closers.forEach(\r\n function (closer) {\r\n closer.removeEventListener('click', this._hide);\r\n }.bind(this)\r\n );\r\n\r\n // Execute all callbacks registered for the `destroy` event\r\n this._fire('destroy');\r\n\r\n // Keep an object of listener types mapped to callback functions\r\n this._listeners = {};\r\n\r\n return this\r\n };\r\n\r\n /**\r\n * Register a new callback for the given event type\r\n *\r\n * @param {string} type\r\n * @param {Function} handler\r\n */\r\n A11yDialog.prototype.on = function (type, handler) {\r\n if (typeof this._listeners[type] === 'undefined') {\r\n this._listeners[type] = [];\r\n }\r\n\r\n this._listeners[type].push(handler);\r\n\r\n return this\r\n };\r\n\r\n /**\r\n * Unregister an existing callback for the given event type\r\n *\r\n * @param {string} type\r\n * @param {Function} handler\r\n */\r\n A11yDialog.prototype.off = function (type, handler) {\r\n var index = (this._listeners[type] || []).indexOf(handler);\r\n\r\n if (index > -1) {\r\n this._listeners[type].splice(index, 1);\r\n }\r\n\r\n return this\r\n };\r\n\r\n /**\r\n * Iterate over all registered handlers for given type and call them all with\r\n * the dialog element as first argument, event as second argument (if any). Also\r\n * dispatch a custom event on the DOM element itself to make it possible to\r\n * react to the lifecycle of auto-instantiated dialogs.\r\n *\r\n * @access private\r\n * @param {string} type\r\n * @param {Event} event\r\n */\r\n A11yDialog.prototype._fire = function (type, event) {\r\n var listeners = this._listeners[type] || [];\r\n var domEvent = new CustomEvent(type, { detail: event });\r\n\r\n this.$el.dispatchEvent(domEvent);\r\n\r\n listeners.forEach(\r\n function (listener) {\r\n listener(this.$el, event);\r\n }.bind(this)\r\n );\r\n };\r\n\r\n /**\r\n * Private event handler used when listening to some specific key presses\r\n * (namely ESCAPE and TAB)\r\n *\r\n * @access private\r\n * @param {Event} event\r\n */\r\n A11yDialog.prototype._bindKeypress = function (event) {\r\n // This is an escape hatch in case there are nested dialogs, so the keypresses\r\n // are only reacted to for the most recent one\r\n if (!this.$el.contains(document.activeElement)) return\r\n\r\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\r\n // further effects from the ESCAPE key and hide the dialog, unless its role\r\n // is 'alertdialog', which should be modal\r\n if (\r\n this.shown &&\r\n event.which === ESCAPE_KEY &&\r\n this.$el.getAttribute('role') !== 'alertdialog'\r\n ) {\r\n event.preventDefault();\r\n this.hide(event);\r\n }\r\n\r\n // If the dialog is shown and the TAB key is being pressed, make sure the\r\n // focus stays trapped within the dialog element\r\n if (this.shown && event.which === TAB_KEY) {\r\n trapTabKey(this.$el, event);\r\n }\r\n };\r\n\r\n /**\r\n * Private event handler used when making sure the focus stays within the\r\n * currently open dialog\r\n *\r\n * @access private\r\n * @param {Event} event\r\n */\r\n A11yDialog.prototype._maintainFocus = function (event) {\r\n // If the dialog is shown and the focus is not within a dialog element (either\r\n // this one or another one in case of nested dialogs) or within an element\r\n // with the `data-a11y-dialog-focus-trap-ignore` attribute, move it back to\r\n // its first focusable child.\r\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/177\r\n if (\r\n this.shown &&\r\n !event.target.closest('[aria-modal=\"true\"]') &&\r\n !event.target.closest('[data-a11y-dialog-ignore-focus-trap]')\r\n ) {\r\n moveFocusToDialog(this.$el);\r\n }\r\n };\r\n\r\n /**\r\n * Convert a NodeList into an array\r\n *\r\n * @param {NodeList} collection\r\n * @return {Array}\r\n */\r\n function toArray(collection) {\r\n return Array.prototype.slice.call(collection)\r\n }\r\n\r\n /**\r\n * Query the DOM for nodes matching the given selector, scoped to context (or\r\n * the whole document)\r\n *\r\n * @param {String} selector\r\n * @param {Element} [context = document]\r\n * @return {Array}\r\n */\r\n function $$(selector, context) {\r\n return toArray((context || document).querySelectorAll(selector))\r\n }\r\n\r\n /**\r\n * Set the focus to the first element with `autofocus` with the element or the\r\n * element itself\r\n *\r\n * @param {Element} node\r\n */\r\n function moveFocusToDialog(node) {\r\n var focused = node.querySelector('[autofocus]') || node;\r\n\r\n focused.focus();\r\n }\r\n\r\n /**\r\n * Get the focusable children of the given element\r\n *\r\n * @param {Element} node\r\n * @return {Array}\r\n */\r\n function getFocusableChildren(node) {\r\n return $$(focusableSelectors.join(','), node).filter(function (child) {\r\n return !!(\r\n child.offsetWidth ||\r\n child.offsetHeight ||\r\n child.getClientRects().length\r\n )\r\n })\r\n }\r\n\r\n /**\r\n * Trap the focus inside the given element\r\n *\r\n * @param {Element} node\r\n * @param {Event} event\r\n */\r\n function trapTabKey(node, event) {\r\n var focusableChildren = getFocusableChildren(node);\r\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\r\n\r\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\r\n // the currently focused item is the first one, move the focus to the last\r\n // focusable item from the dialog element\r\n if (event.shiftKey && focusedItemIndex === 0) {\r\n focusableChildren[focusableChildren.length - 1].focus();\r\n event.preventDefault();\r\n // If the SHIFT key is not being pressed (moving forwards) and the currently\r\n // focused item is the last one, move the focus to the first focusable item\r\n // from the dialog element\r\n } else if (\r\n !event.shiftKey &&\r\n focusedItemIndex === focusableChildren.length - 1\r\n ) {\r\n focusableChildren[0].focus();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n function instantiateDialogs() {\r\n $$('[data-a11y-dialog]').forEach(function (node) {\r\n new A11yDialog(node);\r\n });\r\n }\r\n\r\n if (typeof document !== 'undefined') {\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', instantiateDialogs);\r\n } else {\r\n if (window.requestAnimationFrame) {\r\n window.requestAnimationFrame(instantiateDialogs);\r\n } else {\r\n window.setTimeout(instantiateDialogs, 16);\r\n }\r\n }\r\n }\r\n\r\n return A11yDialog;\r\n\r\n})));\r\n\n","define(\r\n 'configDefaultSearchParams',[\r\n ],\r\n () => {\r\n 'use strict';\r\n\r\n const cache = {};\r\n const defaultSearchParams =\r\n {\r\n activeAdult:\r\n {\r\n regex: /\\/state\\/[a-z-]*\\/active-adult*/,\r\n searchParam: {\r\n Adult: true,\r\n AllowStateSearch: 1,\r\n IncludeMpc: false,\r\n MarketId: 0\r\n }\r\n },\r\n luxuryHomes:\r\n {\r\n regex: /\\/state\\/[a-z-]*\\/luxury-homes*/,\r\n searchParam: {\r\n LuxuryHomes: true,\r\n AllowStateSearch: 1,\r\n IncludeMpc: false,\r\n MarketId: 0\r\n }\r\n },\r\n gatedCommunities:\r\n {\r\n regex: /\\/state\\/[a-z-]*\\/gated-communities*/,\r\n searchParam: {\r\n Gated: true,\r\n AllowStateSearch: 1,\r\n IncludeMpc: false,\r\n MarketId: 0\r\n }\r\n },\r\n golfCourse:\r\n {\r\n regex: /\\/state\\/[a-z-]*\\/golf-course-homes*/,\r\n searchParam: {\r\n GolfCourse: true,\r\n AllowStateSearch: 1,\r\n IncludeMpc: false,\r\n MarketId: 0\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * @private\r\n * getDefaultSearchParamsMemoizer: evaluate the url to get the search params.\r\n *\r\n */\r\n function getDefaultSearchParamsMemoizer(url) {\r\n const values = Object.values(defaultSearchParams);\r\n\r\n for (let i = 0; i < values.length; i += 1) {\r\n const value = values[i];\r\n if (value.regex.test(url)) {\r\n return value.searchParam;\r\n }\r\n }\r\n\r\n return {};\r\n }\r\n\r\n /**\r\n * @public\r\n * getSearchParams: get the search params according to the url.\r\n *\r\n */\r\n function getSearchParams() {\r\n const url = window.location.href.toLowerCase();\r\n const value = cache[url] || getDefaultSearchParamsMemoizer(url);\r\n\r\n if (value && !cache[url]) {\r\n cache[url] = value;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n return {\r\n getDefaultSearchParams: getSearchParams\r\n };\r\n }\r\n);\r\n\n","define('searchParams',['configDefaultSearchParams'], function (configDefaultSearchParams) {\r\n const searchParametersElement = document.querySelector('#searchParametersJSON, [data-search-params]');\r\n let searchParameters = {};\r\n let defaultParameters = {\r\n Adult: false,\r\n AgeRestricted: false,\r\n Bathrooms: 0,\r\n Bedrooms: 0,\r\n BrandId: 0,\r\n Brands: [],\r\n CommName: '',\r\n CommunityStatus: '',\r\n Custom: false,\r\n CustomResults: false,\r\n ExcludeBrandsFromResults: true,\r\n ExcludeRegularComms: false,\r\n Gated: false,\r\n GolfCourse: false,\r\n Green: false,\r\n Qmi: false,\r\n HomeStatus: '',\r\n HotDeals: false,\r\n IncludeMpc: true,\r\n LuxuryHomes: false,\r\n Mfr: false,\r\n MultiFamily: false,\r\n NatureAreas: false,\r\n NoBoyl: true,\r\n NumStory: 0,\r\n Parks: false,\r\n Pool: false,\r\n PriceHigh: 0,\r\n PriceLow: 0,\r\n SchoolDistrictIds: '',\r\n SingleFamily: false,\r\n Sports: false,\r\n SqFtHigh: 0,\r\n SqFtLow: 0,\r\n Views: false,\r\n Waterfront: false,\r\n Garages: 0,\r\n LivingAreas: 0,\r\n Stories: 0,\r\n MasterBedLocation: 0,\r\n CommId: 0,\r\n BrandId: 0,\r\n HasRVGarage: false,\r\n HasBuilderReviews: false,\r\n ComingSoon: false\r\n }\r\n\r\n defaultParameters = Object.assign(defaultParameters, getParametersConfig());\r\n\r\n if (searchParametersElement) {\r\n searchParameters = JSON.parse(searchParametersElement.value);\r\n\r\n if (!searchParameters.Brands) {\r\n searchParameters.Brands = [];\r\n }\r\n\r\n if (!searchParameters.CommName) {\r\n searchParameters.CommName = '';\r\n }\r\n\r\n if (!searchParameters.CommunityStatus) {\r\n searchParameters.CommunityStatus = '';\r\n }\r\n\r\n // Hack => ExcludeBasicListings has JsonIgnore attribute in the BDX Web API so we cannot init the value from the Json element.\r\n if (typeof searchParameters.ExcludeBasicListings === \"undefined\" && searchParameters.ShouldExcludeBasicListings) {\r\n searchParameters.ExcludeBasicListings = true;\r\n }\r\n else {\r\n searchParameters.ExcludeBasicListings = false;\r\n }\r\n\r\n if (!searchParameters.HomeStatus) {\r\n searchParameters.HomeStatus = '';\r\n }\r\n\r\n if (!searchParameters.SchoolDistrictIds) {\r\n searchParameters.SchoolDistrictIds = '';\r\n }\r\n } else {\r\n searchParameters = Object.assign({}, defaultParameters);\r\n }\r\n\r\n function defaultSearchParams() {\r\n var radius = { 'Radius': 0, 'WebApiSearchType': 'Exact' };\r\n\r\n if (searchParameters.City || searchParameters.County || searchParameters.PostalCode) {\r\n radius = { 'Radius': 25, 'WebApiSearchType': 'Radius' };\r\n }\r\n\r\n if (searchParameters.AllowStateSearch === 1) {\r\n radius = { 'WebApiSearchType': 'State' };\r\n }\r\n\r\n return Object.assign({}, defaultParameters, radius);\r\n }\r\n\r\n function getParametersConfig() {\r\n return Object.assign({}, configDefaultSearchParams.getDefaultSearchParams());\r\n }\r\n\r\n function getSearchParameters() {\r\n if ('Distance' === searchParameters.SortBy && !searchParameters.Mfr) {\r\n searchParameters.SortBy = 'Random';\r\n }\r\n\r\n return Object.assign({}, searchParameters);\r\n }\r\n\r\n function getValueByKey(key) {\r\n var parameters = getSearchParameters();\r\n return parameters[key];\r\n }\r\n\r\n function setValueByKey(key, value) {\r\n if (searchParameters[key] === value) {\r\n return;\r\n }\r\n\r\n searchParameters[key] = value;\r\n }\r\n\r\n function setSearchParameters(parameters) {\r\n Object.assign(searchParameters, parameters);\r\n }\r\n\r\n return {\r\n default: defaultSearchParams,\r\n get: getSearchParameters,\r\n getByKey: getValueByKey,\r\n set: setSearchParameters,\r\n setByKey: setValueByKey,\r\n uniqueDefaultParams: getParametersConfig\r\n }\r\n})\r\n;\n","define('domHelper',[], function () {\r\n var getPassiveOptions = function (passive) {\r\n var opts = new Object();\r\n opts.passive = !!passive;\r\n return opts;\r\n };\r\n\r\n /**\r\n * \r\n * Attaches a event to the DOM Element.\r\n * \r\n * @private \r\n * @param {string} event name that will be attached to the Element.\r\n * @param {function} callback JavaScript function to execute when the event is triggered.\r\n */\r\n function attachEvent(eventName, callback, passive) {\r\n var opts = getPassiveOptions(passive);\r\n\r\n if (document.addEventListener) {\r\n this.addEventListener(eventName, callback, opts);\r\n } else if (document.attachEvent) {\r\n this.attachEvent(eventName, callback, opts);\r\n }\r\n };\r\n\r\n /**\r\n * \r\n * Attaches a event to the DOM Element.\r\n * \r\n * @private \r\n * @param {string} event name that will be attached to the Element.\r\n * @param {function} callback JavaScript function to execute when the event is triggered.\r\n */\r\n function detachEvent(eventName, callback, passive) {\r\n var opts = getPassiveOptions(passive);\r\n\r\n if (document.removeEventListener) {\r\n this.removeEventListener(eventName, callback, opts);\r\n } else if (document.detachEvent) {\r\n this.detachEvent(eventName, callback, opts);\r\n }\r\n };\r\n\r\n Element.prototype.removeEventFromElement = detachEvent;\r\n Element.prototype.addEventToElement = attachEvent;\r\n\r\n Document.prototype.addEventToElement = attachEvent;\r\n Document.prototype.removeEventFromElement = detachEvent;\r\n\r\n /**\r\n * \r\n * Checks if an Element has a Parent with the given ID.\r\n * \r\n * @private \r\n * @param {string} id that will be searched in the parent nodes.\r\n */\r\n Element.prototype.hasParent = function (id) {\r\n if (this.id === id) {\r\n return true;\r\n }\r\n\r\n return this.parentNode && this.parentNode !== document.body && this.parentNode.hasParent(id);\r\n }\r\n\r\n /**\r\n * \r\n * Checks if an Element has a class associated.\r\n * \r\n * @private \r\n * @param {string} className that will be searched in the element.\r\n */\r\n Element.prototype.hasClass = function (className) {\r\n if (!this.classList) {\r\n return false;\r\n }\r\n\r\n return this.classList.contains(className);\r\n }\r\n\r\n if ((typeof window.CustomEvent === \"function\")) {\r\n var onClassListChange = new Event(\"onClassListChange\",\r\n {\r\n bubbles: true\r\n });\r\n\r\n\r\n Element.prototype.addClass = function (className) {\r\n if (this.hasClass(className)) {\r\n return true;\r\n }\r\n this.classList.add(className);\r\n this.dispatchEvent(onClassListChange);\r\n return this;\r\n }\r\n }\r\n\r\n Element.prototype.removeClass = function (className) {\r\n if (!this.hasClass(className)) {\r\n return true;\r\n }\r\n\r\n this.classList.remove(className);\r\n this.dispatchEvent(onClassListChange);\r\n return this;\r\n }\r\n\r\n Element.prototype.insertAfter = function (nodeToInsert) {\r\n this.parentNode.insertBefore(nodeToInsert, this.nextSibling);\r\n }\r\n /**\r\n * \r\n * Hides and element from the DOM.\r\n * \r\n * @private \r\n */\r\n Element.prototype.hide = function () {\r\n this.style.display = \"none\";\r\n return this;\r\n }\r\n\r\n /**\r\n * \r\n * Displays and element from the DOM.\r\n * \r\n * @private \r\n */\r\n Element.prototype.show = function () {\r\n this.style.display = \"block\";\r\n return this;\r\n }\r\n\r\n /**\r\n * \r\n * Checks if an Element is visible.\r\n * \r\n * @private \r\n */\r\n Element.prototype.isVisible = function () {\r\n var style = window.getComputedStyle(this);\r\n\r\n return ((style.display !== \"none\") && (style.visibility !== \"hidden\")) ? true : false;\r\n };\r\n\r\n // Start of ticket BDR-17\r\n // NodeList.forEach Pollyfill\r\n if (!NodeList.prototype.forEach || !DOMTokenList.prototype.forEach) {\r\n var propertyName = \"forEach\";\r\n var forEach = function (callback) {\r\n if (typeof callback !== \"function\") {\r\n throw new TypeError(typeof callback + \" is not a function\");\r\n }\r\n var enumerable = this;\r\n var index = 0;\r\n for (index; index < enumerable.length; index++) {\r\n if (callback(enumerable[index], index, enumerable) === false) {\r\n break;\r\n }\r\n }\r\n };\r\n if (!NodeList.prototype.forEach) {\r\n Object.defineProperty(NodeList.prototype, propertyName, {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: forEach\r\n });\r\n }\r\n if (!DOMTokenList.prototype.forEach) {\r\n Object.defineProperty(DOMTokenList.prototype, propertyName, {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: forEach\r\n });\r\n }\r\n }\r\n\r\n if (!Node.prototype.replaceWith || !Element.prototype.replaceWith) {\r\n var replaceWith = function () {\r\n var currentElement = this;\r\n var parent = currentElement.parentNode;\r\n if (!parent) {\r\n return false;\r\n }\r\n //Remove myself if parameters are empty\r\n var length = arguments.length;\r\n if (!length) {\r\n return parent.removeChild(currentElement);\r\n }\r\n var index = 0;\r\n var currentNode;\r\n for (index; index < length; index++) {\r\n currentNode = arguments[index];\r\n if (typeof currentNode !== 'object') {\r\n currentNode = document.createTextNode(currentNode);\r\n } else if (currentNode.parentNode) {\r\n currentNode.parentNode.removeChild(currentNode);\r\n }\r\n if (index === length - 1) {\r\n parent.replaceChild(currentNode, currentElement);\r\n } else {\r\n parent.insertBefore(currentNode, currentElement);\r\n }\r\n }\r\n };\r\n if (!Element.prototype.replaceWith) {\r\n Object.defineProperty(Element.prototype, 'replaceWith', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: replaceWith\r\n });\r\n }\r\n if (!Node.prototype.replaceWith) {\r\n Object.defineProperty(Node.prototype, 'replaceWith', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: replaceWith\r\n });\r\n }\r\n }\r\n //End of ticket BDR-17 \r\n});\n","(function(global, factory) {\r\n \"use strict\";\r\n if (\"function\" === typeof define && define.amd) {\r\n // If AMD is supported and the global object (window) in case any JS module is expecting\r\n // the AjaxHelper to exists on the window object.\r\n define('ajaxHelper',[],\r\n function() {\r\n return (global.AjaxHelper = factory(global));\r\n });\r\n } else if (\"object\" === typeof exports) {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code \r\n // is expected to work with this AjaxHelper.\r\n module.exports = (global.AjaxHelper = factory(global));\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.AjaxHelper = factory(global);\r\n }\r\n})(\"undefined\" !== typeof window ? window : {}, function(root) {\r\n\r\n var requestsQueue = [];\r\n var partnerElement = document.getElementsByClassName(\"brand-logo\");\r\n var siteRoot = document.getElementById(\"nhs_siteRoot\");\r\n let browserAcceptTypes = null;\r\n var partnerUrl;\r\n if (partnerElement && partnerElement.length > 0) {\r\n partnerUrl = partnerElement[0].href;\r\n partnerUrl = partnerUrl.replace(\"http:\", window.location.protocol);\r\n } else {\r\n partnerUrl = \"\";\r\n }\r\n\r\n if (siteRoot) {\r\n siteRoot = siteRoot.value;\r\n } else {\r\n siteRoot = \"\";\r\n }\r\n\r\n var executeCallbacks = function(req, options, succeded, data) {\r\n if (typeof options === \"undefined\" || options === null) {\r\n options = {};\r\n }\r\n\r\n // Always\r\n if (typeof options.always === \"function\") {\r\n options.always(data);\r\n }\r\n // Success\r\n if (succeded && typeof options.success === \"function\") {\r\n options.success(data);\r\n } else if (typeof options.failed === \"function\") { // Failed\r\n options.failed(data);\r\n }\r\n\r\n var queueIndex = requestsQueue.indexOf(req);\r\n if (queueIndex > -1) {\r\n requestsQueue.splice(queueIndex, 1);\r\n }\r\n\r\n };\r\n var getRequest = function(url, contentType, parametersToSend, optionalCallbacks) {\r\n var xhr = new XMLHttpRequest();\r\n var req = {\r\n url: url,\r\n type: \"GET\",\r\n xhr: xhr\r\n };\r\n requestsQueue.push(req);\r\n\r\n xhr.open(\"GET\", url, true);\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n\r\n var succededStatus = xhr.status === 200;\r\n executeCallbacks(req, optionalCallbacks, succededStatus, xhr.responseText);\r\n };\r\n xhr.setRequestHeader(\"Content-type\", contentType);\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n\r\n try {\r\n xhr.send(parametersToSend);\r\n } catch (err) {\r\n executeCallbacks(req, optionalCallbacks, false, err);\r\n }\r\n\r\n\r\n };\r\n\r\n var postRequest = function(url, options) {\r\n var xhr = new XMLHttpRequest();\r\n if (options.abort) {\r\n for (var i = 0; i < requestsQueue.length; i += 1) {\r\n if (requestsQueue[i].url === url) {\r\n requestsQueue[i].xhr.abort();\r\n requestsQueue.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n var req = {\r\n url: url,\r\n type: \"POST\",\r\n xhr: xhr\r\n };\r\n\r\n requestsQueue.push(req);\r\n\r\n if (typeof options === \"object\") {\r\n\r\n xhr.open(\"POST\", url, options.async ? options.async : true);\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n if (options.success || options.always || options.failed) {\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n\r\n var succededStatus = xhr.status === 200;\r\n executeCallbacks(req, options, succededStatus, xhr.responseText);\r\n };\r\n }\r\n var formatJson = true;\r\n if (options.requestHeaders && options.requestHeaders.length > 0) {\r\n for (var i = 0; i < options.requestHeaders.length; i += 1) {\r\n xhr.setRequestHeader(options.requestHeaders[i].name, options.requestHeaders[i].value);\r\n }\r\n }\r\n\r\n if (options.data) {\r\n var data = null;\r\n \r\n if (options.noJsonStringify) {\r\n data = options.data;\r\n } else {\r\n data = JSON.stringify(options.data);\r\n }\r\n \r\n\r\n try {\r\n xhr.send(data);\r\n } catch (err) {\r\n executeCallbacks(req, options, false, err);\r\n }\r\n\r\n } else {\r\n try {\r\n xhr.send();\r\n } catch (err) {\r\n executeCallbacks(req, options, false, err);\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n var request = function(options) {\r\n // Basic validation\r\n if (!options ||\r\n typeof options !== \"object\" ||\r\n !options.url ||\r\n typeof options.url !== \"string\" ||\r\n !options.type ||\r\n typeof options.type !== \"string\") {\r\n throw new Error(\"Invalid request options\");\r\n }\r\n var xhr = new XMLHttpRequest();\r\n if (options.abort) {\r\n var requestToAbort = requestsQueue.find(function(r) {\r\n return r.url === options.url;\r\n });\r\n\r\n if (requestToAbort) {\r\n requestToAbort.xhr.abort();\r\n requestsQueue.splice(requestToAbort.indexOf(requestToAbort, 1));\r\n }\r\n }\r\n\r\n var requestForQueue = {\r\n url: options.url,\r\n type: options.type,\r\n xhr: xhr\r\n };\r\n\r\n requestsQueue.push(requestForQueue);\r\n\r\n xhr.open(options.type.toUpperCase(), options.url, true);\r\n\r\n\r\n if (typeof options.success === \"function\" ||\r\n typeof options.failed === \"function\" ||\r\n typeof options.always === \"function\") {\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) return;\r\n\r\n requestsQueue.splice(requestsQueue.indexOf(requestForQueue), 1);\r\n\r\n var response;\r\n\r\n try {\r\n response = JSON.parse(xhr.responseText);\r\n } catch (e) {\r\n response = xhr.responseText;\r\n }\r\n\r\n if (xhr.status === 200 && typeof options.success === \"function\") {\r\n options.success(response);\r\n } else if (typeof options.failed === \"function\") {\r\n options.failed(response);\r\n }\r\n if (typeof options.always === \"function\") {\r\n options.always(response);\r\n }\r\n };\r\n }\r\n\r\n if (options.type.toUpperCase() !== \"GET\" && options.data && typeof options.data === \"object\") {\r\n xhr.setRequestHeader(\"Content-type\", \"application/json\");\r\n }\r\n\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n xhr.send(options.data && typeof options.data === \"object\"\r\n ? JSON.stringify(options.data)\r\n : options.data\r\n ? options.data\r\n : void (0));\r\n\r\n return xhr;\r\n };\r\n\r\n HTMLFieldSetElement.prototype.serialize = function() {\r\n var notSerializableTypes = [\"file\", \"reset\", \"submit\", \"button\"];\r\n var field, l, s = [];\r\n\r\n if (typeof this === \"object\" && this.nodeName === \"FIELDSET\") {\r\n var len = this.elements.length;\r\n\r\n for (var i = 0; i < len; i += 1) {\r\n field = this.elements[i];\r\n\r\n if (!field.name || field.disabled || notSerializableTypes.includes(field.type)) {\r\n continue;\r\n }\r\n if (field.type === \"select-multiple\") {\r\n l = this.elements[i].options.length;\r\n\r\n for (var j = 0; j < l; j += 1) {\r\n if (field.options[j].selected) {\r\n s[s.length] =\r\n encodeURIComponent(field.name) + \"=\" + encodeURIComponent(field.options[j].value);\r\n }\r\n }\r\n } else if ((field.type !== \"checkbox\" && field.type !== \"radio\") || field.checked) {\r\n s[s.length] = encodeURIComponent(field.name) +\r\n \"=\" +\r\n encodeURIComponent(field.value || field.checked);\r\n }\r\n }\r\n }\r\n return s.join(\"&\").replace(/%20/g, \"+\");\r\n };\r\n\r\n var getAbsolutePathRequest = function(url) {\r\n var siteUrl = siteRoot.slice(0, -1);\r\n if (siteUrl && url.indexOf(siteUrl) >= 0 && url.indexOf(partnerUrl) < 0) {\r\n url = url.replace(siteUrl, partnerUrl);\r\n } else if (url.indexOf(partnerUrl) < 0) {\r\n url = partnerUrl + url;\r\n }\r\n return url;\r\n };\r\n\r\n /**\r\n * Will return the Javascript Object as query string (e.g ?property1=value1&property2=value2)\r\n * @param {any} objectToConvert a Javascript Object that will follow the format of query string for each property.\r\n */\r\n var objectToQueryString = function (objectToConvert, baseQueryString) {\r\n var keyValuePair = Object.entries(objectToConvert);\r\n if (keyValuePair && keyValuePair.length > 0) {\r\n for (var i = 0; i < keyValuePair.length; i++) {\r\n if (typeof keyValuePair[i][1] !== \"undefined\") {\r\n baseQueryString += encodeURIComponent(keyValuePair[i][0]) + \"=\" + encodeURIComponent(keyValuePair[i][1]) + \"&\";\r\n }\r\n }\r\n }\r\n baseQueryString = baseQueryString.substring(0, baseQueryString.length - 1);\r\n return baseQueryString;\r\n }\r\n\r\n /**\r\n * Will return a string based on the object passed. It begins with ? as query string.\r\n * @param {any} objectToConvert a Javascript Object that will follow the format of query string for each property.\r\n */\r\n var convertToQueryString = function(objectToConvert)\r\n {\r\n var queryString = \"?\";\r\n if (objectToConvert) {\r\n if (!Object.entries) {\r\n //Including the polyfills from NHS.\r\n require([\"domHelper\"], function(domHelper) {\r\n return objectToQueryString(objectToConvert, queryString);\r\n });\r\n } else {\r\n return objectToQueryString(objectToConvert, queryString);\r\n }\r\n }\r\n return objectToConvert;\r\n }\r\n\r\n /**\r\n * @private\r\n * getAcceptTypes: get the accept types header for Ajax request.\r\n * \r\n * @returns {@String} with the mime types supported.\r\n */\r\n function getAcceptTypes() {\r\n if(browserAcceptTypes) {\r\n return browserAcceptTypes;\r\n }\r\n\r\n browserAcceptTypes = localStorage.getItem('browserAcceptTypes');\r\n\r\n return browserAcceptTypes || '*/*';\r\n }\r\n\r\n return {\r\n getRequest: getRequest,\r\n postRequest: postRequest,\r\n request: request,\r\n getAbsolutePathRequest: getAbsolutePathRequest,\r\n convertToQueryString: convertToQueryString\r\n };\r\n });\n","define(\r\n 'configResultsCounts',[\r\n 'routes'\r\n ],\r\n (\r\n routes\r\n ) => {\r\n 'use strict';\r\n\r\n const cache = {};\r\n const urls =\r\n {\r\n amenityResults:\r\n {\r\n regex: /\\/state\\/[a-z-]*\\/[a-z-]*/,\r\n routes: {\r\n routeResults: routes.getAmenityResults,\r\n routeCounts: routes.getAmenityCounts\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * @private\r\n * urlsToRequestMemoizer: we the url to get the results depending of the location.href\r\n *\r\n */\r\n function urlsToRequestMemoizer(url) {\r\n const values = Object.values(urls);\r\n\r\n for (let i = 0; i < values.length; i += 1) {\r\n const value = values[i];\r\n if (value.regex.test(url)) {\r\n return value.routes;\r\n }\r\n }\r\n\r\n return {\r\n routeResults: routes.getResults,\r\n routeCounts: routes.getCounts\r\n };\r\n }\r\n\r\n /**\r\n * @public\r\n * urlsToRequest: we the url to get the results depending of the location.href\r\n *\r\n */\r\n function urlsToRequest() {\r\n const url = window.location.href.toLowerCase();\r\n const value = cache[url] || urlsToRequestMemoizer(url);\r\n\r\n if (value && !cache[url]) {\r\n cache[url] = value;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n return {\r\n getUrls: urlsToRequest\r\n };\r\n }\r\n);\r\n\n","// This component should be updated in case we add a new srpType function in the future\r\n/* eslint-disable */\r\n(function (global, factory) {\r\n \"use strict\";\r\n\r\n if (\"function\" === typeof define && define.amd) {\r\n // If supports for AMD is available return the value to the AMD Loader\r\n // and to the global (window) object in case any JS module.\r\n define('searchTypeHelper',[], function () {\r\n global.searchTypeHelper = factory(global);\r\n return global.searchTypeHelper;\r\n });\r\n } else if (\"object\" === typeof exports) {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code \r\n // is expected to work\r\n module.exports = (global.searchTypeHelper = factory(global));\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.searchTypeHelper = factory(global);\r\n }\r\n})(\"undefined\" !== typeof window ? window : {}, function (root) {\r\n var CONFIGURATION = (function () {\r\n var objectToReturn = {};\r\n var functions = {\r\n CommunityResults: {\r\n \"nhs\": \"/communities/\",\r\n \"cna\": \"/comunidades/\",\r\n SingleFamily: {\r\n \"nhs\": \"/single-family-communities/\",\r\n \"cna\": \"/comunidades-unifamiliares/\"\r\n }\r\n },\r\n CondoDevelopments: {\r\n \"nhs\": \"/condo-developments/\",\r\n \"cna\": \"/condominios/\"\r\n },\r\n HomeResults: {\r\n \"nhs\": \"/homes/\",\r\n \"cna\": \"/casas/\",\r\n Floorplans: {\r\n \"nhs\": \"/floor-plans/\",\r\n \"cna\": \"/planos/\"\r\n },\r\n Model: {\r\n \"nhs\": \"/model-homes/\",\r\n \"cna\": \"/casas-modelo/\"\r\n },\r\n SingleFamily: {\r\n \"nhs\": \"/single-family-homes/\",\r\n \"cna\": \"/casas-unifamiliares/\"\r\n }\r\n },\r\n CondoTownHomes: {\r\n \"nhs\": \"/condo-townhomes/\",\r\n \"cna\": \"/complejos/\",\r\n Floorplans: {\r\n \"nhs\": \"/floor-plans/\",\r\n \"cna\": \"/planos/\"\r\n },\r\n Model: {\r\n \"nhs\": \"/model-homes/\",\r\n \"cna\": \"/casas-modelo/\"\r\n }\r\n },\r\n BuilderResults: {\r\n \"nhs\": \"/builders/\",\r\n \"cna\": \"/constructores/\"\r\n },\r\n BoylResults: {\r\n \"nhs\": \"/on-your-lot/\",\r\n \"cna\": \"/construya-en-su-lote/\"\r\n },\r\n CustomHomes: {\r\n \"nhs\": \"/custom-homes/\",\r\n \"cna\": \"/casas-personalizadas/\"\r\n },\r\n CustomBuilders: {\r\n \"nhs\": \"/custom-builders/\",\r\n \"cna\": \"/constructoras-personalizadas/\"\r\n },\r\n ManufacturedResults: {\r\n \"nhs\": \"/manufactured/\",\r\n \"cna\": \"/prefabricadas/\"\r\n },\r\n ManufacturedHomes: {\r\n \"nhs\": \"/manufactured-homes/\",\r\n \"cna\": \"/casasprefabricadas/\",\r\n Floorplans: {\r\n \"nhs\": \"/floor-plans/\",\r\n \"cna\": \"/planos/\"\r\n },\r\n Model: {\r\n \"nhs\": \"/model-homes/\",\r\n \"cna\": \"/casas-modelo/\"\r\n }\r\n },\r\n AmenityResults: {\r\n \"nhs\": \"/state/\"\r\n }\r\n };\r\n\r\n objectToReturn[\"getAllFunctions\"] = function () { return functions; };\r\n\r\n for (var srpFunction in functions) {\r\n if (functions.hasOwnProperty(srpFunction)) {\r\n objectToReturn[srpFunction] = srpFunction;\r\n }\r\n }\r\n\r\n return Object.freeze(objectToReturn);\r\n })();\r\n\r\n /**\r\n * Flag to determine if current page is NHS or CNA.\r\n * @private\r\n * @returns {boolean} True if url is NHS, false if not.\r\n */\r\n var isNhsPage = function () {\r\n return root.location.href.indexOf(\".newhomesource.com\") > -1;\r\n }\r\n\r\n /**\r\n * Gets an object with all srp function strings for NHS or for CNA.\r\n * @description For nhs returns {CommunityResults: \"/communities/\", CondoDevelopments: \"/condo-developments/\", ... }.\r\n * For cna returns {CommunityResults: \"/comunidades/\", CondoDevelopments: \"/condominios/\", ... }.\r\n * @returns {object} An object containing the srp functions.\r\n */\r\n var getAllSrpFunctions = function () {\r\n var allFunctions = CONFIGURATION.getAllFunctions();\r\n let urlKey = isNhsPage() ? 'nhs' : 'cna';\r\n var currentFunctions = {};\r\n\r\n for (var srpFunction in allFunctions) {\r\n const entry = allFunctions[srpFunction];\r\n const localizedSrpFunction = entry[urlKey];\r\n\r\n if (localizedSrpFunction) {\r\n currentFunctions[srpFunction] = localizedSrpFunction;\r\n }\r\n\r\n Object.keys(entry).forEach((key) => {\r\n \r\n if (typeof entry[key] === 'object' && entry[key][urlKey])\r\n {\r\n currentFunctions[`${srpFunction}__${key}`] = entry[key][urlKey];\r\n }\r\n })\r\n }\r\n\r\n return currentFunctions;\r\n }\r\n\r\n /**\r\n * Gets an object with the names of all srpTypes.\r\n * @example\r\n * // returns { CommunityResults: \"CommunityResults\", HomeResults: \"HomeResults\", CondoDevelopments: \"CondoDevelopments\", ... }\r\n * @returns {object} A json object with the key/values of all valid srpTypes.\r\n */\r\n var getAllSrpTypes = function () {\r\n var localCopy = Object.assign({}, CONFIGURATION);\r\n delete localCopy[\"getAllFunctions\"];\r\n return CONFIGURATION;\r\n }\r\n\r\n /**\r\n * Gets the srp function from the current srp url.\r\n * @returns {string} The current srp function, empty if the url doesn't match any current valid functions.\r\n */\r\n var getSrpFunction = function (url) {\r\n if (!url) {\r\n url = root.location.href;\r\n }\r\n\r\n var allSrpFunctions = getAllSrpFunctions();\r\n\r\n for (var srpFunction in allSrpFunctions) {\r\n if (allSrpFunctions.hasOwnProperty(srpFunction)) {\r\n var currentFunction = allSrpFunctions[srpFunction];\r\n\r\n if (url.indexOf(currentFunction) > -1) {\r\n return currentFunction;\r\n }\r\n }\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Get the srpType name based on the url search function. Uses the current url function if a function parameter is not provided.\r\n * @param {string} srpFunction The url search function.\r\n * @returns {string} The current srpType if the function matches any valid srpType, empty if otherwise.\r\n */\r\n var getSrpType = function (srpFunction) {\r\n if (!srpFunction) {\r\n srpFunction = getSrpFunction();\r\n }\r\n\r\n var srpFunctions = getAllSrpFunctions();\r\n\r\n for (var currentSrpFunction in srpFunctions) {\r\n if (srpFunctions.hasOwnProperty(currentSrpFunction) &&\r\n srpFunctions[currentSrpFunction] === srpFunction) {\r\n const hierarchy = currentSrpFunction.split('__');\r\n return hierarchy[0];\r\n }\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Takes an url and updates it with the new srp function part.\r\n * @param {string} newFunction The function to which we want to update the current url.\r\n * @param {string=} url The url to update. If not provided the current url is used. \r\n */\r\n var updateUrlFunction = function (newFunction, url) {\r\n if (!url) {\r\n url = root.location.href;\r\n }\r\n\r\n var currentSrpFunction = getSrpFunction(url);\r\n\r\n if (currentSrpFunction !== newFunction && newFunction !== \"\") {\r\n var newUrl = url.replace(currentSrpFunction, newFunction);\r\n root.history.pushState({}, \"\", newUrl);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Removes a query parameter from a url string.\r\n * @param {string} parameter The query parameter to remove from the url.\r\n * @param {string=} url The url from which the query parameter should be removed.\r\n * If not provided, the current url will be used instead.\r\n * @returns {string} Url with the query parameter removed.\r\n */\r\n var removeQueryParamFromUrl = function (parameter, url) {\r\n if (!url) {\r\n url = root.location.href;\r\n }\r\n\r\n var thisParam = \"?\" + parameter;\r\n\r\n // Case 1. There's only one query parameter.\r\n // Example: Query parameter \"test=1\" in url \"www.nhs.com/?test=1\".\r\n if (url.indexOf(thisParam) !== -1 && url.endsWith(thisParam)) {\r\n return url.replace(thisParam, \"\");\r\n }\r\n\r\n // Case 2. Query parameter is the first of several parameters.\r\n // Example: Query parameter \"one=true\" in \"www.nhs.com/?one=true&two=true\".\r\n thisParam = \"?\" + parameter + \"&\";\r\n\r\n if (url.indexOf(thisParam) !== -1) {\r\n return url.replace(parameter + \"&\", \"\");\r\n }\r\n\r\n // Case 3. Query parameter is between other parameters.\r\n // Example: Query parameter \"true=2\" in \"www.nhs.com/?one=1&two=2&three=3\".\r\n thisParam = \"&\" + parameter + \"&\";\r\n\r\n if (url.indexOf(thisParam) !== -1) {\r\n return url.replace(\"&\" + parameter, \"\");\r\n }\r\n\r\n // Case 4. Query parameter is the last of several parameters.\r\n // Example: Query parameter \"c=false\" in \"www.nhs.com/a=false&b=true&c=false\".\r\n thisParam = \"&\" + parameter;\r\n\r\n if (url.indexOf(thisParam) !== -1 && url.endsWith(thisParam)) {\r\n return url.replace(thisParam, \"\");\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is a regular community srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is a regular community srpType, false otherwise.\r\n */\r\n var isCommunitySearchType = function (srpType) {\r\n return srpType === CONFIGURATION.CommunityResults ||\r\n srpType === CONFIGURATION.CondoDevelopments;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is any type of community srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is any kind of community srpType, false otherwise.\r\n */\r\n var isAnyCommunitySearchType = function (srpType) {\r\n return srpType === CONFIGURATION.CommunityResults ||\r\n srpType === CONFIGURATION.CondoDevelopments ||\r\n srpType === CONFIGURATION.BoylResults ||\r\n srpType === CONFIGURATION.ManufacturedResults ||\r\n srpType === CONFIGURATION.AmenityResults;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is a regular home srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is a regular home srpType, false otherwise.\r\n */\r\n var isHomeSearchType = function (srpType) {\r\n return srpType === CONFIGURATION.HomeResults ||\r\n srpType === CONFIGURATION.CondoTownHomes;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is any type of home srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is any kind of home srpType, false otherwise.\r\n */\r\n var isAnyHomeSearchType = function (srpType) {\r\n return srpType === CONFIGURATION.HomeResults ||\r\n srpType === CONFIGURATION.CondoTownHomes ||\r\n srpType === CONFIGURATION.CustomHomes ||\r\n srpType === CONFIGURATION.ManufacturedHomes;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is a builder results srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is a builder results srpType, false otherwise.\r\n */\r\n var isBuilderSearchType = function (srpType) {\r\n return srpType === CONFIGURATION.BuilderResults;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is a custom srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is a custom srpType, false otherwise.\r\n */\r\n var isCustomSearchType = function (srpType) {\r\n return srpType === CONFIGURATION.BoylResults ||\r\n srpType === CONFIGURATION.CustomHomes;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is a custom builder srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is a custom builder srpType, false otherwise.\r\n */\r\n var isCustomBuilderSearchType = function (srpType) {\r\n return srpType === CONFIGURATION.CustomBuilders;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is a manufactured srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is a manufactured srpType, false otherwise.\r\n */\r\n var isManufacturedSearchType = function (srpType) {\r\n return srpType === CONFIGURATION.ManufacturedResults ||\r\n srpType === CONFIGURATION.ManufacturedHomes;\r\n }\r\n\r\n /**\r\n * Gets a flag indicating if the srpType is a manufactured or custom srpType.\r\n * @param {string} srpType The srpType to check.\r\n * @returns {boolean} True if the srp is a manufactured or custom srpType, false otherwise.\r\n */\r\n var isCustomOrManufacturedSearchType = function (srpType) {\r\n return isCustomSearchType(srpType) || isCustomBuilderSearchType(srpType) || isManufacturedSearchType(srpType)\r\n }\r\n\r\n /**\r\n * Gets the SRP type from the url.\r\n * @param {string} url The url we want to check.\r\n * @returns The SRP type string value of the url.\r\n */\r\n var getSrpTypeFromUrl = function (url){\r\n const srpFunction = this.getSrpFunction(url);\r\n const srpType = this.getSrpType(srpFunction);\r\n\r\n return srpType;\r\n }\r\n\r\n return {\r\n CommunityResults: CONFIGURATION.CommunityResults,\r\n CondoDevelopments: CONFIGURATION.CondoDevelopments,\r\n HomeResults: CONFIGURATION.HomeResults,\r\n CondoTownHomes: CONFIGURATION.CondoTownHomes,\r\n BuilderResults: CONFIGURATION.BuilderResults,\r\n BoylResults: CONFIGURATION.BoylResults,\r\n CustomHomes: CONFIGURATION.CustomHomes,\r\n CustomBuilders: CONFIGURATION.CustomBuilders,\r\n ManufacturedResults: CONFIGURATION.ManufacturedResults,\r\n ManufacturedHomes: CONFIGURATION.ManufacturedHomes,\r\n AmenityResults: CONFIGURATION.AmenityResults,\r\n getSrpFunction: getSrpFunction,\r\n getAllSrpFunctions: getAllSrpFunctions,\r\n updateUrlFunction: updateUrlFunction,\r\n removeQueryParamFromUrl: removeQueryParamFromUrl,\r\n getAllSrpTypes: getAllSrpTypes,\r\n getSrpType: getSrpType,\r\n getSrpTypeFromUrl: getSrpTypeFromUrl,\r\n isBuilderSearchType: isBuilderSearchType,\r\n isCommunitySearchType: isCommunitySearchType,\r\n isAnyCommunitySearchType: isAnyCommunitySearchType,\r\n isHomeSearchType: isHomeSearchType,\r\n isAnyHomeSearchType: isAnyHomeSearchType,\r\n isCustomSearchType: isCustomSearchType,\r\n isCustomBuilderSearchType: isCustomBuilderSearchType,\r\n isManufacturedSearchType: isManufacturedSearchType,\r\n isCustomOrManufacturedSearchType: isCustomOrManufacturedSearchType\r\n };\r\n});\n","define(\r\n 'getCounts',[\r\n 'ajaxHelper',\r\n 'configResultsCounts',\r\n 'searchTypeHelper'\r\n ],\r\n (\r\n ajaxHelper,\r\n configResultsCounts,\r\n searchTypeHelper\r\n ) => {\r\n 'use strict';\r\n\r\n const partnerUrl = document.querySelector('.brand-logo, #nhs_HeaderLogo').href;\r\n let defaultAjaxUrl;\r\n let globalCallback;\r\n\r\n /**\r\n * @private\r\n * handleSuccessEvent: callback to be executed after a request was success.\r\n *\r\n * @param {object} value that is returned from the request made.\r\n */\r\n function handleSuccessEvent(value) {\r\n if (typeof globalCallback !== 'function') {\r\n return;\r\n }\r\n\r\n const data = {\r\n subscribers: ['countsHandling'],\r\n response: JSON.parse(value)\r\n };\r\n\r\n globalCallback(data);\r\n }\r\n\r\n /**\r\n * @public\r\n * getResults: method to get the results from API.\r\n *\r\n * @param {object} parameters from search params object.\r\n * @param {function} callback to be excuted after a response end.\r\n */\r\n function getCounts(parameters, callback) {\r\n const searchResultType = searchTypeHelper.getSrpType();\r\n const ajaxUrl = defaultAjaxUrl;\r\n globalCallback = callback;\r\n\r\n ajaxHelper.postRequest(\r\n ajaxUrl,\r\n {\r\n async: true,\r\n abort: true,\r\n data: {\r\n currentSearchParams: parameters,\r\n isCommResults: searchTypeHelper.isAnyCommunitySearchType(searchResultType)\r\n },\r\n requestHeaders: [\r\n {\r\n name: 'Content-Type',\r\n value: 'application/json'\r\n }\r\n ],\r\n success: handleSuccessEvent\r\n }\r\n );\r\n }\r\n\r\n defaultAjaxUrl = partnerUrl + configResultsCounts.getUrls().routeCounts;\r\n\r\n return {\r\n get: getCounts\r\n };\r\n }\r\n);\r\n\n","define('getResults',['ajaxHelper', 'configResultsCounts'], (ajaxHelper, configResultsCounts) => {\r\n 'use strict';\r\n\r\n const partnerUrl = document.querySelector('.brand-logo, #nhs_HeaderLogo').href;\r\n let defaultAjaxUrl;\r\n let globalCallback;\r\n\r\n /**\r\n * @private\r\n * handleSuccessEvent: callback to be executed after a request was success.\r\n *\r\n * @param {object} value that is returned from the request made.\r\n */\r\n function handleSuccessEvent(value) {\r\n if (typeof globalCallback !== 'function') {\r\n return;\r\n }\r\n\r\n const data = {\r\n subscribers: ['resultsReady', 'resultsHandling', 'resultsLoaded'],\r\n response: value\r\n };\r\n\r\n globalCallback(data);\r\n }\r\n\r\n /**\r\n * Gets the market search url for the current location.\r\n * If there's no market breadcrumb url and location is not synthetic, returns the current url.\r\n * @returns {string} The market url.\r\n */\r\n function getMarketUrl(parameters) {\r\n const marketBreadCrumbElement = document.querySelector('[data-breadcrumb-area]');\r\n let marketUrl = '';\r\n\r\n if (marketBreadCrumbElement) {\r\n marketUrl = marketBreadCrumbElement.href;\r\n } else if (!parameters.IsMultiLocationSearch) {\r\n marketUrl = window.location.href;\r\n }\r\n\r\n return marketUrl;\r\n }\r\n\r\n /**\r\n * @public\r\n * getResults: method to get the results from API.\r\n *\r\n * @param {object} parameters from search params object.\r\n * @param {function} callback to be executed after a response end.\r\n */\r\n function getResults(parameters, callback) {\r\n globalCallback = callback;\r\n const ajaxUrl = defaultAjaxUrl;\r\n ajaxHelper.postRequest(\r\n ajaxUrl,\r\n {\r\n async: true,\r\n data: {\r\n currentSearchParams: parameters,\r\n marketUrl: getMarketUrl(parameters)\r\n },\r\n abort: true,\r\n requestHeaders: [\r\n {\r\n name: 'Content-Type',\r\n value: 'application/json'\r\n }\r\n ],\r\n success: handleSuccessEvent\r\n }\r\n );\r\n }\r\n\r\n defaultAjaxUrl = partnerUrl + configResultsCounts.getUrls().routeResults;\r\n\r\n return {\r\n get: getResults\r\n };\r\n});\r\n\n","define('paramsObserver',['searchParams', 'getCounts', 'getResults'], function (searchParams, getCounts, getResults) {\r\n 'use strict';\r\n\r\n let isLoadingMoreResults = false;\r\n let searchParamsChanged = {};\r\n let subscribers = {};\r\n let temporalSearchParameters = {};\r\n\r\n function removeSubscriber(eventName, callback) {\r\n if (subscribers && subscribers[eventName]) {\r\n subscribers[eventName].pop(callback);\r\n }\r\n }\r\n\r\n function addSubscriber(eventName, callback) {\r\n if (!Array.isArray(subscribers[eventName])) {\r\n subscribers[eventName] = [];\r\n }\r\n\r\n if (subscribers[eventName].indexOf(callback) === -1) {\r\n subscribers[eventName].push(callback);\r\n }\r\n }\r\n\r\n function fireSubscribers(eventName, response) {\r\n if (!Array.isArray(subscribers[eventName])) {\r\n return;\r\n }\r\n\r\n const totalCallbacks = subscribers[eventName].length;\r\n\r\n for (let i = 0; i < totalCallbacks; i += 1) {\r\n const fn = subscribers[eventName][i];\r\n\r\n if (typeof fn === 'function') {\r\n fn(response);\r\n }\r\n }\r\n }\r\n\r\n function publish(value) {\r\n const response = {\r\n data: value.response,\r\n isMoreResults: isLoadingMoreResults,\r\n parameters: searchParams.get(),\r\n parametersChanged: searchParamsChanged\r\n };\r\n\r\n const subscribersToFire = value.subscribers || [];\r\n const totalSubscribersToFire = subscribersToFire.length;\r\n\r\n for (let index = 0; index < totalSubscribersToFire; index += 1) {\r\n fireSubscribers(subscribersToFire[index], response);\r\n }\r\n }\r\n\r\n function commitChanges() {\r\n const totalParametersChanged = Object.keys(temporalSearchParameters).length;\r\n\r\n if (totalParametersChanged === 0) {\r\n return;\r\n }\r\n\r\n isLoadingMoreResults =\r\n totalParametersChanged === 1 &&\r\n Object.prototype.hasOwnProperty.call(temporalSearchParameters, 'PageNumber');\r\n\r\n const beforeResultsLoadData = {\r\n isMoreResults: isLoadingMoreResults,\r\n parametersChanged: temporalSearchParameters\r\n };\r\n fireSubscribers('beforeSetParams', beforeResultsLoadData);\r\n searchParams.set(temporalSearchParameters);\r\n fireSubscribers('beforeResultsLoad', beforeResultsLoadData);\r\n searchParamsChanged = Object.assign({}, temporalSearchParameters);\r\n temporalSearchParameters = {};\r\n getResults.get(searchParams.get(), publish);\r\n }\r\n\r\n function discardChanges() {\r\n fireSubscribers('parametersDiscarded');\r\n temporalSearchParameters = {};\r\n }\r\n\r\n function getChangesLength() {\r\n return Object.keys(temporalSearchParameters).length;\r\n }\r\n\r\n function getCurrentParameters() {\r\n return searchParams.get();\r\n }\r\n\r\n function getValueByKey(key) {\r\n const parameters = Object.assign({}, searchParams.get(), temporalSearchParameters);\r\n return parameters[key];\r\n }\r\n\r\n function hasFiltersActive() {\r\n const defaultParams = searchParams.default();\r\n const current = searchParams.get();\r\n\r\n for (let key in defaultParams) {\r\n if (!defaultParams.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (typeof defaultParams[key] === 'object' && JSON.stringify(defaultParams[key]) === JSON.stringify(current[key])) {\r\n continue;\r\n }\r\n\r\n let currentValue = current[key] || false;\r\n let defaultValue = defaultParams[key] || false;\r\n\r\n if (defaultValue !== currentValue) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function previewChanges() {\r\n fireSubscribers('beforeSetParams');\r\n let previewParameters = Object.assign({}, temporalSearchParameters);\r\n previewParameters = Object.assign(searchParams.get(), previewParameters);\r\n searchParamsChanged = Object.assign({}, temporalSearchParameters);\r\n isLoadingMoreResults = false;\r\n getCounts.get(previewParameters, publish);\r\n }\r\n\r\n function setValueByKey(key, value) {\r\n if (temporalSearchParameters[key] === value) {\r\n return;\r\n }\r\n\r\n if (searchParams.getByKey(key) === value && temporalSearchParameters[key] !== value) {\r\n delete temporalSearchParameters[key];\r\n return;\r\n }\r\n\r\n if (searchParams.getByKey(key) === value) {\r\n return;\r\n }\r\n\r\n temporalSearchParameters[key] = value;\r\n }\r\n\r\n function setValues(parameters) {\r\n if (!parameters) {\r\n return;\r\n }\r\n\r\n const keysToExtend = Object.keys(parameters);\r\n\r\n // Do not use object.assign here,\r\n // as we only want to have temporalSearchParameters that differs from the current searchParams\r\n\r\n for (let i = 0; i < keysToExtend.length; i += 1) {\r\n const currentKey = keysToExtend[i];\r\n const value = parameters[currentKey];\r\n setValueByKey(currentKey, value);\r\n }\r\n }\r\n\r\n function resetParameters() {\r\n const defaultParams = searchParams.default();\r\n\r\n setValues(defaultParams);\r\n fireSubscribers('resetInProgress', defaultParams);\r\n commitChanges();\r\n }\r\n\r\n function getUniqueParameters() {\r\n return searchParams.uniqueDefaultParams();\r\n }\r\n\r\n return {\r\n commit: commitChanges,\r\n discard: discardChanges,\r\n getParameter: getValueByKey,\r\n getParameters: getCurrentParameters,\r\n hasFilters: hasFiltersActive,\r\n preview: previewChanges,\r\n reset: resetParameters,\r\n setParameter: setValueByKey,\r\n setParameters: setValues,\r\n subscribe: addSubscriber,\r\n unsubscribe: removeSubscriber,\r\n totalChanges: getChangesLength,\r\n getUniqueParameters: getUniqueParameters\r\n };\r\n});\r\n\n","define(\r\n 'results',[\r\n 'paramsObserver',\r\n 'lazyLoad'\r\n ],\r\n (\r\n paramsObserver,\r\n lazyLoad\r\n ) => {\r\n 'use strict';\r\n\r\n /**\r\n * @private\r\n * resultsLoading: handler results when the results are ready.\r\n *\r\n * @param {object} value with the results to set on HTML.\r\n */\r\n function resultsLoading(value) {\r\n const newResults = document.createElement('div');\r\n const resultList = document.getElementById('nhs_ResultList');\r\n newResults.innerHTML = value.data;\r\n resultList.innerHTML = newResults.querySelector('#nhs_ResultList').innerHTML;\r\n document.querySelector('[data-template-facet-community-name]').innerHTML =\r\n newResults.querySelector('[data-template-facet-community-name]').innerHTML;\r\n document.querySelector('[data-template-facet-builder-name]').innerHTML =\r\n newResults.querySelector('[data-template-facet-builder-name]').innerHTML;\r\n }\r\n\r\n function resultsLoaded() {\r\n lazyLoad.init();\r\n }\r\n\r\n resultsLoaded();\r\n paramsObserver.subscribe('resultsLoaded', resultsLoaded);\r\n paramsObserver.subscribe('resultsHandling', resultsLoading);\r\n }\r\n);\r\n\n","define('touchHelper',[], () => {\r\n 'use strict';\r\n\r\n /**\r\n *\r\n * Run a callback after a click or tap, without running duplicate callbacks for the same event.\r\n *\r\n * @private\r\n * @param {Function} callback The callback function to run on a click or tap event.\r\n */\r\n function onClickOrTap(callback) {\r\n if (!callback || typeof (callback) !== 'function') {\r\n return;\r\n }\r\n\r\n if (typeof this.addEventListener !== 'function') {\r\n return;\r\n }\r\n\r\n let startX = 0;\r\n let startY = 0;\r\n let distX = 0;\r\n let distY = 0;\r\n\r\n /**\r\n * touchend event handler\r\n * @param {event} event The touchend event\r\n */\r\n const onTouchEndEvent = function (event) {\r\n distX = event.changedTouches[0].pageX - startX;\r\n distY = event.changedTouches[0].pageY - startY;\r\n\r\n if (Math.abs(distX) >= 7 || Math.abs(distY) >= 10) {\r\n return;\r\n }\r\n\r\n callback(event);\r\n\r\n if (event.cancelable) {\r\n event.target.removeEventListener('click', callback);\r\n }\r\n };\r\n\r\n /**\r\n * touchend event handler\r\n * @param {event} event The touchstart event\r\n */\r\n const onTouchStartEvent = function (event) {\r\n startX = event.changedTouches[0].pageX;\r\n startY = event.changedTouches[0].pageY;\r\n };\r\n\r\n // Event listeners\r\n this.addEventListener('touchstart', onTouchStartEvent, { passive: true });\r\n this.addEventListener('touchend', onTouchEndEvent, false);\r\n this.addEventListener('click', callback, false);\r\n }\r\n\r\n function dispatchClickOrTab(event) {\r\n if (event.type === 'touchend') {\r\n const touchstart = new TouchEvent('touchstart', {\r\n changedTouches: event.changedTouches\r\n });\r\n this.dispatchEvent(touchstart);\r\n\r\n const touchend = new TouchEvent('touchend', {\r\n changedTouches: event.changedTouches\r\n });\r\n this.dispatchEvent(touchend);\r\n return;\r\n }\r\n\r\n this.dispatchEvent(new Event('click'));\r\n }\r\n\r\n Element.prototype.onClickOrTap = onClickOrTap;\r\n Document.prototype.onClickOrTap = onClickOrTap;\r\n Element.prototype.dispatchClickOrTab = dispatchClickOrTab;\r\n});\r\n\n","(function (global, factory) {\r\n 'use strict';\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n // If supports for AMD is available return the value to the AMD Loader\r\n // and to the global (window) object in case any JS module is expecting\r\n // the homeStatusList to exists on the window object.\r\n define('homeStatusList',[], () => factory(global));\r\n } else if (typeof exports === 'object') {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code\r\n // is expected to work with this homeStatusList.\r\n module.exports = factory(global);\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n factory(global);\r\n }\r\n}(\r\n typeof window !== 'undefined' ? window : {},\r\n (global) => {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n\r\n const previousHomeStatusList = global.NewHomeSource.HomeStatusList;\r\n\r\n const HomeStatus = {\r\n Floorplans: 'R',\r\n Inventory: 'UC,A',\r\n Model: 'M',\r\n HotDeals: 'H'\r\n };\r\n\r\n /**\r\n * @constructs NewHomeSource.HomeStatusList\r\n */\r\n function HomeStatusList() {\r\n }\r\n\r\n HomeStatusList.getAmenitiesFromHomeStatus = function getAmenitiesFromHomeStatus(value) {\r\n const homeStatusList = {};\r\n Object.keys(HomeStatus).forEach((status) => {\r\n let statusValue = false;\r\n\r\n if (value && value.indexOf(HomeStatus[status]) >= 0) {\r\n statusValue = true;\r\n }\r\n homeStatusList[status] = statusValue;\r\n });\r\n\r\n return homeStatusList;\r\n };\r\n\r\n /**\r\n * @public\r\n *\r\n * getHomeStatus: returns an array of Home Status that are contained in the value parameter.\r\n * @param {string} value comma separated list of Home Status identificators.\r\n * @returns an array with the name of all the Home Status that were provided in the value parameter.\r\n */\r\n HomeStatusList.getHomeStatus = function getHomeStatusFromValue(value) {\r\n if (!value || typeof value !== 'string') {\r\n return [];\r\n }\r\n\r\n const valueArray = value.toLowerCase().split(',');\r\n const keyName = [];\r\n\r\n valueArray.forEach((element) => {\r\n const status = Object.keys(HomeStatus).find((key) => HomeStatus[key].toLowerCase().indexOf(element) >= 0);\r\n\r\n if (keyName.indexOf(status) < 0) {\r\n keyName.push(status);\r\n }\r\n });\r\n\r\n return keyName || [];\r\n };\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.HomeStatusList to the previous script.\r\n */\r\n HomeStatusList.noConflict = function noConflict() {\r\n global.NewHomeSource.HomeStatusList = previousHomeStatusList;\r\n return HomeStatusList;\r\n };\r\n\r\n global.NewHomeSource.HomeStatusList = HomeStatusList;\r\n\r\n return HomeStatusList;\r\n }\r\n));\r\n\n","(function (global, factory) {\r\n 'use strict';\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n // If supports for AMD is available return the value to the AMD Loader\r\n // and to the global (window) object in case any JS module is expecting\r\n // the amenitiesList to exists on the window object.\r\n define('amenitiesList',[], () => factory(global));\r\n } else if (typeof exports === 'object') {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code\r\n // is expected to work with this amenitiesList.\r\n module.exports = factory(global);\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n factory(global);\r\n }\r\n}(\r\n typeof window !== 'undefined' ? window : {},\r\n (global) => {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n\r\n const previousAmenitiesList = global.NewHomeSource.AmenitiesList;\r\n\r\n const amenities = {\r\n Adult: {\r\n es: 'adultomayor',\r\n en: 'adult',\r\n value: 'true'\r\n },\r\n Pool: {\r\n es: 'piscina',\r\n en: 'pool',\r\n value: 'true'\r\n },\r\n GreenProgram: {\r\n es: 'ecologica',\r\n en: 'greenprogram',\r\n value: 'true'\r\n },\r\n GolfCourse: {\r\n es: 'campodegolf',\r\n en: 'golfcourse',\r\n value: 'true'\r\n },\r\n Gated: {\r\n es: 'comunidadcerrada',\r\n en: 'gated',\r\n value: 'true'\r\n },\r\n NatureAreas: {\r\n es: 'espacionatural',\r\n en: 'natureareas',\r\n value: 'true'\r\n },\r\n Views: {\r\n es: 'vistas',\r\n en: 'views',\r\n value: 'true'\r\n },\r\n Waterfront: {\r\n es: 'frenteoceano',\r\n en: 'waterfront',\r\n value: 'true'\r\n },\r\n Sports: {\r\n es: 'deportivo',\r\n en: 'sports',\r\n value: 'true'\r\n },\r\n Parks: {\r\n es: 'parques',\r\n en: 'parks',\r\n value: 'true'\r\n },\r\n HotDeals: {\r\n es: 'ofertas',\r\n en: 'hotdeals',\r\n value: 'true',\r\n isTruthy(parameters) {\r\n return parameters.HotDeals || (parameters.HomeStatus && parameters.HomeStatus.indexOf('H') > -1);\r\n }\r\n },\r\n Inventory: {\r\n es: 'inventario',\r\n en: 'inventory',\r\n value: 'true',\r\n isTruthy(parameters) {\r\n return parameters.Inventory || (parameters.HomeStatus && parameters.HomeStatus.indexOf('UC,A') > -1);\r\n }\r\n },\r\n LuxuryHomes: {\r\n es: 'lujo',\r\n en: 'luxury',\r\n value: 'true'\r\n },\r\n Green: {\r\n es: 'ecologica',\r\n en: 'green',\r\n value: 'true'\r\n },\r\n AgeRestricted: {\r\n es: 'restriccionedad',\r\n en: 'agerestricted',\r\n value: 'true'\r\n },\r\n Modular: {\r\n es: 'modular',\r\n en: 'modular',\r\n value: 'true'\r\n },\r\n HasRVGarage: {\r\n es: 'rvgarage',\r\n en: 'rvgarage',\r\n value: 'true'\r\n },\r\n CommunityStatus: {\r\n es: 'pronto',\r\n en: 'comingsoon',\r\n value: 'true',\r\n isTruthy(parameters) {\r\n return parameters.CommunityStatus && parameters.CommunityStatus.indexOf('C') > -1;\r\n }\r\n }\r\n };\r\n const language = document.documentElement.lang;\r\n\r\n /**\r\n * @constructs NewHomeSource.AmenitiesList\r\n */\r\n function AmenitiesList() {\r\n }\r\n\r\n AmenitiesList.getAmenityName = function getAmenityName(name) {\r\n const amenity = amenities[name];\r\n if (!amenity) {\r\n return '';\r\n }\r\n return amenity[language];\r\n };\r\n\r\n AmenitiesList.getAmenities = function getAmenities() {\r\n const amenitiesArray = [];\r\n Object.keys(amenities).forEach((amenity) => {\r\n const amenityName = AmenitiesList.getAmenityName(amenity);\r\n amenitiesArray.push(amenityName);\r\n });\r\n\r\n return amenitiesArray;\r\n };\r\n\r\n AmenitiesList.getAmenityValue = function getAmenityValue(amenity, searchParameters) {\r\n const originalValue = searchParameters[amenity];\r\n const functionToEvaluate = amenities[amenity] && amenities[amenity].isTruthy;\r\n\r\n if (functionToEvaluate) {\r\n return functionToEvaluate(searchParameters);\r\n }\r\n\r\n return originalValue;\r\n };\r\n\r\n AmenitiesList.getOriginalAmenities = function getOriginalAmenities() {\r\n const amenitiesArray = Object.keys(amenities);\r\n\r\n return amenitiesArray;\r\n };\r\n\r\n AmenitiesList.getQuery = function getQuery(amenity) {\r\n const amenityWord = AmenitiesList.getAmenityName(amenity);\r\n const amenityObject = amenities[amenity];\r\n\r\n if (!amenity || !amenityObject) {\r\n return '';\r\n }\r\n\r\n const amenityValue = amenityObject.value;\r\n const query = `${amenityWord}=${amenityValue}`;\r\n\r\n return query;\r\n };\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.AmenitiesList to the previous script.\r\n */\r\n AmenitiesList.noConflict = function noConflict() {\r\n global.NewHomeSource.AmenitiesList = previousAmenitiesList;\r\n return AmenitiesList;\r\n };\r\n\r\n global.NewHomeSource.AmenitiesList = AmenitiesList;\r\n\r\n return AmenitiesList;\r\n }\r\n));\r\n\n","define('queryStringConfig',['amenitiesList', 'homeStatusList'], (amenitiesList, homeStatusList) => {\r\n 'use strict';\r\n\r\n function addQueryString(parameters, value) {\r\n const index = parameters.indexOf(value);\r\n\r\n if (index >= 0 || !value) {\r\n return;\r\n }\r\n\r\n parameters.push(value);\r\n }\r\n\r\n function removeQueryString(parameters, value) {\r\n const index = parameters.indexOf(value);\r\n\r\n if (index === -1 || value === '') {\r\n return;\r\n }\r\n\r\n parameters.splice(index, 1);\r\n }\r\n\r\n function processQueryString(parameters, value, key) {\r\n const query = amenitiesList.getQuery(key);\r\n\r\n if (value) {\r\n addQueryString(parameters, query);\r\n } else {\r\n removeQueryString(parameters, query);\r\n }\r\n }\r\n\r\n const queryStringConfigs = {\r\n Adult(parameters, value) {\r\n processQueryString(parameters, value, 'Adult');\r\n },\r\n AgeRestricted(parameters, value) {\r\n processQueryString(parameters, value, 'AgeRestricted');\r\n },\r\n CommunityStatus(parameters, value) {\r\n processQueryString(parameters, value, 'CoomingSoon');\r\n },\r\n Gated(parameters, value) {\r\n processQueryString(parameters, value, 'Gated');\r\n },\r\n GolfCourse(parameters, value) {\r\n processQueryString(parameters, value, 'GolfCourse');\r\n },\r\n Green(parameters, value) {\r\n processQueryString(parameters, value, 'Green');\r\n },\r\n HomeStatus(parameters, value) {\r\n const HomeStatusAmenities = homeStatusList.getAmenitiesFromHomeStatus(value);\r\n Object.keys(HomeStatusAmenities).forEach((amenity) => {\r\n const amenityValue = HomeStatusAmenities[amenity];\r\n processQueryString(parameters, amenityValue, amenity);\r\n });\r\n },\r\n LuxuryHomes(parameters, value) {\r\n processQueryString(parameters, value, 'LuxuryHomes');\r\n },\r\n NatureAreas(parameters, value) {\r\n processQueryString(parameters, value, 'NatureAreas');\r\n },\r\n Parks(parameters, value) {\r\n processQueryString(parameters, value, 'Parks');\r\n },\r\n Pool(parameters, value) {\r\n processQueryString(parameters, value, 'Pool');\r\n },\r\n Qmi(parameters, value) {\r\n processQueryString(parameters, value, 'Qmi');\r\n },\r\n SingleFamily(parameters, value) {\r\n processQueryString(parameters, value, 'SingleFamily');\r\n },\r\n Sports(parameters, value) {\r\n processQueryString(parameters, value, 'Sports');\r\n },\r\n Views(parameters, value) {\r\n processQueryString(parameters, value, 'Views');\r\n },\r\n Waterfront(parameters, value) {\r\n processQueryString(parameters, value, 'Waterfront');\r\n },\r\n HasRVGarage(parameters, value) {\r\n processQueryString(parameters, value, 'HasRVGarage');\r\n }\r\n };\r\n\r\n function getConfigurationForQueryStrings(parameters, key, value) {\r\n const queryString = queryStringConfigs[key];\r\n\r\n if (typeof queryString !== 'function') {\r\n return false;\r\n }\r\n\r\n const length = parameters.length;\r\n queryString(parameters, value);\r\n return parameters.length > length;\r\n }\r\n\r\n return {\r\n getQueryString: getConfigurationForQueryStrings\r\n };\r\n});\r\n\n","(function (global, factory) {\r\n 'use strict';\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n // If supports for AMD is available return the value to the AMD Loader\r\n // and to the global (window) object in case any JS module is expecting\r\n // the UriSegmentConfig to exists on the window object.\r\n define('uriSegmentConfig',[], () => factory(global));\r\n } else if (typeof exports === 'object') {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code\r\n // is expected to work with this UriSegmentConfig.\r\n module.exports = factory(global);\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n factory(global);\r\n }\r\n}(\r\n typeof window !== 'undefined' ? window : {},\r\n (global) => {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n\r\n const previousUriSegmentConfig = global.NewHomeSource.UriSegmentConfig;\r\n const uriSegmentParameters = {\r\n HomeStatus: 1,\r\n SingleFamily: 1,\r\n };\r\n\r\n /**\r\n * @constructs NewHomeSource.UriSegments\r\n */\r\n function UriSegmentConfig() {\r\n }\r\n\r\n /*\r\n * Gets the hierarchy of the filter applied.\r\n * @param {Object} List of applied filters.\r\n * @returns a list with the hierarchy of the parameters\r\n */\r\n UriSegmentConfig.getUriSegmentHierarchy = function getHierarchy(parameters) {\r\n // The hierarchy always starts at the SrpType.\r\n const hierarchy = ['SrpType'];\r\n\r\n Object.keys(parameters).forEach((key) => {\r\n const isAnUriSegment = !!uriSegmentParameters[key];\r\n\r\n if (isAnUriSegment && !!parameters[key]) {\r\n hierarchy.push(key);\r\n }\r\n });\r\n\r\n return hierarchy;\r\n };\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.UriSegmentConfig to the previous script.\r\n */\r\n UriSegmentConfig.noConflict = function noConflict() {\r\n global.NewHomeSource.UriSegmentConfig = previousUriSegmentConfig;\r\n return UriSegmentConfig;\r\n };\r\n\r\n global.NewHomeSource.UriSegmentConfig = UriSegmentConfig;\r\n\r\n return UriSegmentConfig;\r\n }\r\n));\r\n\n","define('urlHelper',[], function () {\r\n\r\n function getValueFromQueryString(parameter, url) {\r\n const params = new URL(url);\r\n const parameterValue = params.searchParams.get(parameter);\r\n return parameterValue;\r\n }\r\n\r\n function getValueFromUrlSegment(parameter, url) {\r\n const urlRegex = new RegExp(parameter + '(?:-([^&?\\/]*))?', 'i');\r\n const match = urlRegex.exec(url);\r\n return match != null ? match[1] : null;\r\n }\r\n\r\n return {\r\n getValueFromQueryString: getValueFromQueryString,\r\n getValueFromUrlSegment: getValueFromUrlSegment\r\n }\r\n});\n","define('history',[\r\n 'homeStatusList',\r\n 'paramsObserver',\r\n 'queryStringConfig',\r\n 'searchTypeHelper',\r\n 'uriSegmentConfig',\r\n 'urlHelper'],\r\n(\r\n homeStatusList,\r\n paramsObserver,\r\n queryStringConfig,\r\n searchTypeHelper,\r\n uriSegmentConfig,\r\n urlHelper\r\n) => {\r\n 'use strict';\r\n\r\n let queryStringParameters = [];\r\n let temporalFiltersModified = [];\r\n const entrySrpFunction = searchTypeHelper.getSrpFunction();\r\n const searchResultFunctions = searchTypeHelper.getAllSrpFunctions();\r\n const entryValue = Object.entries(searchResultFunctions).find((srpFunction) => srpFunction[1] === entrySrpFunction);\r\n const uriSegments = searchTypeHelper.getAllSrpTypes().getAllFunctions();\r\n const srpFunctionKey = document.documentElement.lang === 'en' ? 'nhs' : 'cna';\r\n // For an existing issue, https://builderhomesite.atlassian.net/browse/BDXNHS-8129,\r\n // we will keep the functionality only with the word 'page' in the url to avoid some issues with the pagination.\r\n // When the ticket 8129 is closed, we have to update this pageWord variable to translate the page 'word' when CNA.\r\n const pageWord = srpFunctionKey === 'nhs' ? 'page' : 'pagina';\r\n let uriSegmentParameter = entryValue[0].replace(searchTypeHelper.getSrpType(), '').replace('__', '');\r\n\r\n function clearTemporalFilters() {\r\n temporalFiltersModified = [];\r\n }\r\n\r\n function getQueryStringsApplied(data) {\r\n let filter;\r\n let index;\r\n const length = temporalFiltersModified.length;\r\n\r\n for (index = 0; index < length; index += 1) {\r\n filter = temporalFiltersModified[index];\r\n queryStringConfig.getQueryString(queryStringParameters, filter, data.parameters[filter]);\r\n }\r\n\r\n const keysParameters = Object.keys(data.parametersChanged);\r\n\r\n for (let propIndex = 0; propIndex < keysParameters.length; propIndex += 1) {\r\n if (Object.prototype.hasOwnProperty.call(data.parametersChanged, keysParameters[propIndex])) {\r\n queryStringConfig.getQueryString(queryStringParameters, keysParameters[propIndex],\r\n data.parametersChanged[keysParameters[propIndex]]);\r\n }\r\n }\r\n\r\n temporalFiltersModified = [];\r\n }\r\n\r\n function insertQueryString(url, queryString) {\r\n let firstQuestion = url.indexOf('?') + 1;\r\n let queryStringToAppend = queryString;\r\n const isStatePage = url.indexOf('/state/') > -1;\r\n\r\n if (!queryString) {\r\n queryStringToAppend = '';\r\n\r\n if (firstQuestion > 0) {\r\n firstQuestion -= 1;\r\n } else if (firstQuestion === 0) {\r\n firstQuestion = url.length;\r\n }\r\n }\r\n\r\n if (queryString && firstQuestion === 0) {\r\n queryStringToAppend = '?' + queryString;\r\n firstQuestion = url.length;\r\n }\r\n\r\n if (isStatePage) {\r\n queryStringToAppend = '';\r\n }\r\n\r\n return url.substring(0, firstQuestion) + queryStringToAppend;\r\n }\r\n\r\n // This function moves the Query strings from the actual link to a new link\r\n function getNewLinkWithQueryStrings(url) {\r\n let text = '';\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n const params = Object.fromEntries(urlSearchParams.entries());\r\n const paramsKeys = Object.keys(params);\r\n for (let index = 0; index < paramsKeys.length; index += 1) {\r\n if (index > 0) {\r\n text = `${text}&`;\r\n }\r\n text = `${text}${paramsKeys[index]}=${urlSearchParams.get(paramsKeys[index])}`;\r\n }\r\n\r\n return insertQueryString(url, text);\r\n }\r\n\r\n /*\r\n * Gets the URL function according to the filters\r\n * @param {Object} The \"tree\" of the filters with their SRP type.\r\n * @param {Object} The object with the path to the filter applied.\r\n * @param {Object} The list of parameters.\r\n * returns The new URL with the Function url updated.\r\n */\r\n function getUriSegmentRecursive(tree, path, parameters) {\r\n const key = path.shift();\r\n const valueToSearch = typeof parameters[key] === 'string' ? parameters[key] : key;\r\n const leaf = tree[valueToSearch];\r\n\r\n if (!leaf) {\r\n return '';\r\n }\r\n\r\n let uriSegment = leaf[srpFunctionKey];\r\n\r\n if (path.length) {\r\n const temporalValue = getUriSegmentRecursive(leaf, path, parameters);\r\n\r\n if (temporalValue) {\r\n uriSegment = temporalValue;\r\n }\r\n }\r\n\r\n return uriSegment;\r\n }\r\n\r\n function insertUrlSegment(url, urlSegment) {\r\n const firstQuestion = url.indexOf('?');\r\n const lastSlash = url.lastIndexOf('/') + 1;\r\n const length = url.length + 1;\r\n let position;\r\n\r\n if (lastSlash === length) {\r\n position = lastSlash;\r\n } else if (length > firstQuestion && firstQuestion > 0) {\r\n position = firstQuestion;\r\n } else {\r\n position = length;\r\n }\r\n\r\n return url.slice(0, position) + urlSegment + url.slice(position);\r\n }\r\n\r\n function resetFilters() {\r\n queryStringParameters = [];\r\n temporalFiltersModified = [];\r\n }\r\n\r\n /**\r\n * Validates if beta cookie it´s set as true.\r\n * @param {url} url The new page number of the search.\r\n */\r\n function validateRedirectToBeta(url) {\r\n const value = `; ${document.cookie}`;\r\n const parts = value.split(`; ${\"OptInBetaSite_1\"}=`);\r\n const needRedirect = parts.pop().split(';').shift();\r\n if (needRedirect.toLowerCase() === 'true') {\r\n location.href = url;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Gets the updated url with the new page.\r\n * @param {Number} newPage The new page number of the search.\r\n * @returns The url updated with the new information.\r\n */\r\n function updatePaginationUrl(newPage) {\r\n const url = window.location.href.trim().replace(/\\/$/, '');\r\n const previousPage = urlHelper.getValueFromQueryString(pageWord, window.location.href) ||\r\n urlHelper.getValueFromUrlSegment(pageWord, window.location.href);\r\n let newPageAsQueryString = `${pageWord}=${newPage}`;\r\n let newPageAsUrlSegment = `/${pageWord}-${newPage}`;\r\n\r\n if (newPage === 1) {\r\n newPageAsQueryString = '';\r\n newPageAsUrlSegment = '';\r\n }\r\n\r\n if (previousPage) {\r\n return url.replace(`${pageWord}=${previousPage}`, newPageAsQueryString)\r\n .replace(`/${pageWord}-${previousPage}`, newPageAsUrlSegment);\r\n }\r\n\r\n return insertUrlSegment(url, newPageAsUrlSegment);\r\n }\r\n\r\n function updateQueryStringUrl(data, currentUrl) {\r\n const url = currentUrl || window.location.href.trim('/').replace(/\\/$/, '');\r\n getQueryStringsApplied(data);\r\n\r\n const queryString = queryStringParameters.length > 0 ? queryStringParameters[0] : null;\r\n return insertQueryString(url, queryString);\r\n }\r\n\r\n /*\r\n * Excludes the brand parameter from the Url.\r\n * @param {String} The String with the current url.\r\n * @param {String} The current brand id value.\r\n * returns The new URL without the brand parameter.\r\n */\r\n function getUrlWithoutBrandParam(url) {\r\n const urlObject = new URL(url);\r\n const urlCurrentItems = urlObject.pathname.split('/');\r\n const isBrandPartnerNhs = document.documentElement.lang === 'en';\r\n const builderParam = isBrandPartnerNhs ? 'builder-' : 'constructor-';\r\n\r\n const urlItems = urlCurrentItems.filter(item => !item.includes(builderParam));\r\n\r\n urlObject.pathname = urlItems.join('/');\r\n\r\n return urlObject.href;\r\n }\r\n\r\n /*\r\n * Gets the URL with the brand id modified if it was modified.\r\n * @param {String} The String with the new function of the url.\r\n * @param {String} The String with the current url.\r\n * @param {Object} The list of parameters.\r\n * returns The new URL with the Function url updated.\r\n */\r\n function updateBrandParameter(newSearchFunction, currentUrl, data) {\r\n const currentSrpType = paramsObserver.getParameter('SrpType');\r\n const currentBrandId = paramsObserver.getParameter('BrandId');\r\n const isBrandPartnerNhs = document.documentElement.lang === 'en';\r\n const builderParam = isBrandPartnerNhs ? 'builder-' : 'constructor-';\r\n\r\n if (newSearchFunction === searchResultFunctions.BuilderResults ||\r\n (searchTypeHelper.isCustomBuilderSearchType(currentSrpType))) {\r\n\r\n var url = getUrlWithoutBrandParam(currentUrl);\r\n return insertQueryString(url);\r\n }\r\n\r\n // When the filter is cleared\r\n if (currentBrandId === 0 && currentUrl.includes(builderParam)) {\r\n return getUrlWithoutBrandParam(currentUrl);\r\n }\r\n\r\n if (currentBrandId > 0 &&\r\n (searchTypeHelper.isCommunitySearchType(currentSrpType)\r\n || searchTypeHelper.isHomeSearchType(currentSrpType))) {\r\n\r\n return currentUrl;\r\n }\r\n\r\n return currentUrl;\r\n }\r\n\r\n function updateTemporalFilters(data) {\r\n temporalFiltersModified = [];\r\n\r\n const keysParameters = Object.keys(data.parametersChanged);\r\n\r\n for (let index = 0; index < keysParameters.length; index += 1) {\r\n if (Object.prototype.hasOwnProperty.call(data.parametersChanged, keysParameters[index])) {\r\n temporalFiltersModified.push(keysParameters[index]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Updates the URL with the actual postal code if it has.\r\n * @param {String} currentUrl The current URL of the page.\r\n * @param {String} currentPostalCode The current postal code of the page.\r\n * @param {Boolean} isBuilderSearch The bollean value if the builder tab is selected or not.\r\n * @returns The updated URL if there is a currentPostalCode.\r\n */\r\n function updatePostalCodeBuilderUrl(currentUrl, currentPostalCode, isBuilderSearch) {\r\n const postalCodePrimaryCity = paramsObserver.getParameter('City').toLowerCase().replace(' ', '-');\r\n let url = currentUrl;\r\n if (url !== '') {\r\n if (currentPostalCode !== '') {\r\n if (isBuilderSearch) {\r\n url = currentUrl.replace(currentPostalCode, postalCodePrimaryCity);\r\n } else {\r\n const newURL = new URL(currentUrl);\r\n const pathNameValues = newURL.pathname.split('/');\r\n let postalCodeIndex = pathNameValues.findIndex((element) => element.includes(pageWord)) - 1;\r\n postalCodeIndex = postalCodeIndex > 0 ? postalCodeIndex : pathNameValues.length - 1;\r\n pathNameValues[postalCodeIndex] = currentPostalCode;\r\n newURL.pathname = pathNameValues.join('/');\r\n url = newURL.href;\r\n }\r\n }\r\n }\r\n return url;\r\n }\r\n\r\n /*\r\n * Updates the URL function according to the filters\r\n * @param {Object} List of parameters.\r\n * @param {String} String Current url value.\r\n * returns The new URL with the Function url updated.\r\n */\r\n function updateUriSegment(data, currentUrl) {\r\n const url = currentUrl || window.location.href.trim('/').replace(/\\/$/, '');\r\n const parametersForUri = uriSegmentConfig.getUriSegmentHierarchy(data.parameters);\r\n const indexOfHomeStatus = parametersForUri.indexOf('HomeStatus');\r\n\r\n if (indexOfHomeStatus >= 0) {\r\n // Hack, HomeStatus is a special parameter as its value is composed by multiple combined URLs.\r\n // HomeStatus can Model and Floorplans at the same time, so we need to translated this.\r\n // The translation is to grab the latest value, as it will be the first one selected by the user.\r\n const statusArray = homeStatusList.getHomeStatus(data.parameters.HomeStatus);\r\n const firstValue = statusArray.pop() || '';\r\n parametersForUri[indexOfHomeStatus] = firstValue;\r\n }\r\n\r\n const temporalUriSegmentParameters = parametersForUri.at(-1);\r\n\r\n if (!parametersForUri.includes(uriSegmentParameter)) {\r\n const newUrlFunction = getUriSegmentRecursive(uriSegments, parametersForUri, data.parameters);\r\n const hasChanged = searchTypeHelper.updateUrlFunction(newUrlFunction);\r\n\r\n if (hasChanged && temporalUriSegmentParameters !== 'SrpType') {\r\n uriSegmentParameter = temporalUriSegmentParameters;\r\n } else if (temporalUriSegmentParameters === 'SrpType') {\r\n uriSegmentParameter = '';\r\n }\r\n } else {\r\n const segments = searchResultFunctions[data.parameters.SrpType + '__' + uriSegmentParameter]\r\n ? ['SrpType', uriSegmentParameter]\r\n : parametersForUri.filter((x) => x !== uriSegmentParameter);\r\n const newUrlFunction = getUriSegmentRecursive(uriSegments, segments, data.parameters);\r\n searchTypeHelper.updateUrlFunction(newUrlFunction);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n function updateUrl(data) {\r\n const pageNumber = data.parameters.PageNumber;\r\n const currentPostalCode = paramsObserver.getParameter('PostalCode');\r\n const currentSrpType = data.parameters.SrpType;\r\n let url;\r\n\r\n if (data.isMoreResults && pageNumber) {\r\n url = updatePaginationUrl(pageNumber);\r\n } else {\r\n url = updateUriSegment(data, url);\r\n url = updatePaginationUrl(1);\r\n url = updateQueryStringUrl(data, url);\r\n\r\n const isCurrentLocation = url.indexOf('currentlocation');\r\n if (isCurrentLocation > 0) {\r\n url = getNewLinkWithQueryStrings(url);\r\n }\r\n }\r\n\r\n if (searchTypeHelper.isCommunitySearchType(currentSrpType)\r\n || searchTypeHelper.isHomeSearchType(currentSrpType)) {\r\n validateRedirectToBeta(url);\r\n }\r\n const newSearchFunction = searchResultFunctions[data.parameters.SrpType];\r\n\r\n if (newSearchFunction === searchResultFunctions.BuilderResults &&\r\n currentPostalCode !== '') {\r\n url = updatePostalCodeBuilderUrl(url, currentPostalCode, true);\r\n } else {\r\n url = updatePostalCodeBuilderUrl(url, currentPostalCode, false);\r\n }\r\n // https://builderhomesite.atlassian.net/browse/BDXNHS-4927\r\n url = updateBrandParameter(newSearchFunction, url, data);\r\n\r\n if (!url || url === window.location.href) {\r\n return;\r\n }\r\n\r\n window.history.pushState(data.parameters, '', url);\r\n }\r\n\r\n paramsObserver.subscribe('countsHandling', updateTemporalFilters);\r\n paramsObserver.subscribe('parametersDiscarded', clearTemporalFilters);\r\n paramsObserver.subscribe('resetInProgress', resetFilters);\r\n paramsObserver.subscribe('resultsReady', updateUrl);\r\n});\r\n\n","/**\r\n * @module\r\n */\r\ndefine('Favorites',[\"ajaxHelper\", \"windowModal\"], function (ajax) {\r\n var signIn;\r\n var res;\r\n /**\r\n * Creates a Favorites instance\r\n * @constructor\r\n * @param {*} params Page parameters\r\n */\r\n var Favorites = function (params) {\r\n /**\r\n * @property {*} params Page parameters\r\n */\r\n this.params = params;\r\n };\r\n\r\n /**\r\n * Initializes the Favorites functionality\r\n * @method\r\n */\r\n Favorites.prototype.init = function () {\r\n var instance = this;\r\n const pendingItems = document.cookie.match(new RegExp(\"pendingSaveItem=([^;]+)\"));\r\n var cookieFavorites = pendingItems ? JSON.parse(pendingItems[1]) : [];\r\n const isLoggedIn = document.querySelector('[data-isloggedin=\"True\"]');\r\n\r\n if (cookieFavorites) {\r\n for (let index = cookieFavorites.length - 1; index >= 0; index -= 1) {\r\n const favoriteString = cookieFavorites[index];\r\n const favoriteObject = JSON.parse(favoriteString);\r\n const saveElements = document.querySelectorAll(\"#\" + favoriteObject.element);\r\n\r\n if (isLoggedIn) {\r\n for (let element of saveElements) {\r\n Favorites.prototype.updateStylesToSaved(element.dataset.category, favoriteObject.id, element);\r\n }\r\n\r\n let element = document.querySelector(\"#\" + favoriteObject.element);\r\n if (!element) {\r\n element = {\r\n dataset : favoriteObject.dataset\r\n }\r\n }\r\n instance.removeFromCookie(cookieFavorites, favoriteObject.id);\r\n instance.saveToFavs(element, favoriteObject.category, favoriteObject.type, favoriteObject.id, favoriteObject.url, favoriteObject.name);\r\n }\r\n }\r\n }\r\n\r\n // On Click Save to Favorites\r\n var favUnsaveHandler = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (this.classList.contains(\"nhs_favLogin\")) {\r\n return false;\r\n }\r\n\r\n instance.saveToFavs(this, this.dataset.category, this.dataset.type, this.dataset.id, this.dataset.url, this.dataset.name);\r\n return false;\r\n };\r\n Array.from(document.querySelectorAll(\".nhs_favUnsave, .nhs_nbyFavUnsave\")).forEach(function (favUnsave) {\r\n favUnsave.addEventListener(\"click\", favUnsaveHandler);\r\n favUnsave.classList.add(\"nhs_noLink\");\r\n });\r\n\r\n var favSavedHandler = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n var link = this;\r\n var category = this.dataset.category;\r\n\r\n if (link.classList.contains(\"nhs_favLogin\")) {\r\n Favorites.prototype.updateStylesToUnsaved(category, link);\r\n return;\r\n }\r\n\r\n ajax.request({\r\n type: \"POST\",\r\n url: instance.params.urlBase + \"/favorites/delete\",\r\n data: {\r\n id: this.dataset.favid\r\n },\r\n success: function (data) {\r\n if (!data.Saved) return;\r\n\r\n Favorites.prototype.updateStylesToUnsaved(category, link);\r\n document.body.dispatchEvent &&\r\n document.body.dispatchEvent(new CustomEvent(\"trackIdentifySaveItems\", {\r\n detail: { data: link }\r\n }));\r\n }\r\n });\r\n return false;\r\n };\r\n\r\n Array.from(document.querySelectorAll(\".nhs_favSaved, .nhs_nbyFavUnsaved\")).forEach(function (favSaved) {\r\n favSaved.addEventListener(\"click\", favSavedHandler);\r\n favSaved.classList.add(\"nhs_noLink\");\r\n });\r\n\r\n var mouseDownHandler = function (event) {\r\n Favorites.prototype.temporalSaveToFavorites.call(this, event);\r\n };\r\n\r\n Array.from(document.querySelectorAll(\".nhs_favLogin\")).forEach(function (favLogin) {\r\n favLogin.addEventListener((dataLayer[0].adaptiveTemplate === \"M\") ? \"click\" : \"mousedown\", mouseDownHandler);\r\n favLogin.classList.add(\"nhs_noLink\");\r\n });\r\n\r\n // Save property when param is presented (after login)\r\n if (location.search.toLowerCase().indexOf(\"addtoprofile=true\") > -1) {\r\n var favUnsave = document.querySelector(\".nhs_favUnsave, .nhs_nbyFavUnsave\");\r\n if (favUnsave) {\r\n favUnsave.click();\r\n }\r\n\r\n var url = document.location.href;\r\n var urlparts = url.split(\"?\");\r\n\r\n if (urlparts.length >= 2) {\r\n var urlBase = urlparts.shift();\r\n var queryString = urlparts.join(\"?\");\r\n var prefix = encodeURIComponent(\"addtoprofile\") + \"=\";\r\n var pars = queryString.split(/[&;]/g);\r\n\r\n for (var i = pars.length; i-- > 0;) {\r\n if (pars[i].lastIndexOf(prefix, 0) !== -1) {\r\n pars.splice(i, 1);\r\n }\r\n }\r\n\r\n url = urlBase + \"?\" + pars.join(\"&\");\r\n }\r\n\r\n window.history.replaceState({}, document.title, url);\r\n }\r\n\r\n\r\n if (dataLayer[0].adaptiveTemplate === \"M\") {\r\n\r\n document.addEventListener(\"updateSavesWhenLoggedIn\",\r\n function () {\r\n var onResLoaded = function () {\r\n const pendingItems = document.cookie.match(new RegExp(\"pendingSaveItem=([^;]+)\"));\r\n var cookieFavorites = pendingItems ? JSON.parse(pendingItems[1]) : [];\r\n\r\n if (cookieFavorites) {\r\n for (let index = cookieFavorites.length - 1; index >= 0; index -= 1) {\r\n const favoriteString = cookieFavorites[index];\r\n const favoriteObject = JSON.parse(favoriteString);\r\n let element = document.querySelector(\"#\" + favoriteObject.element);\r\n instance.removeFromCookie(cookieFavorites, favoriteObject.id);\r\n instance.saveToFavs(element,\r\n favoriteObject.category,\r\n favoriteObject.type,\r\n favoriteObject.id,\r\n favoriteObject.url,\r\n favoriteObject.name);\r\n }\r\n };\r\n\r\n var element = document.querySelector(\"[id^=nhs_SaveItem]\"); \r\n ajax.request({\r\n type: \"POST\",\r\n url: instance.params.urlBase + \"/favorites/isSavedToFavorites\",\r\n data: {\r\n id: element.dataset.id,\r\n type: element.dataset.type\r\n },\r\n success: function(data) {\r\n if (!data) return;\r\n\r\n if (data.result) {\r\n Favorites.prototype.updateStylesToSaved(element.dataset.type.toLowerCase(), data, null);\r\n }\r\n }\r\n });\r\n }\r\n\r\n const saveElements = document.querySelectorAll(\"[id^=nhs_SaveItem], [id^=nhs_SavedItem]\");\r\n\r\n for (let element of saveElements) {\r\n element.classList.remove(\"nhs_favLogin\");\r\n }\r\n\r\n if (!res) {\r\n require([\"i18n!nls/res\"],\r\n function (_res) {\r\n res = _res;\r\n onResLoaded();\r\n });\r\n } else {\r\n onResLoaded();\r\n }\r\n });\r\n document.addEventListener(\"updateSavesWhenLoggedOut\",\r\n function () {\r\n var saveButtons = document.querySelectorAll(\"[id^=nhs_SaveItem], [id^=nhs_SavedItem]\");\r\n\r\n for (let button of saveButtons) {\r\n button.classList.add(\"nhs_favLogin\");\r\n Favorites.prototype.updateStylesToUnsaved(button.dataset.category, button);\r\n }\r\n });\r\n };\r\n };\r\n\r\n Favorites.prototype.removeFromCookie = function (items, id) {\r\n const itemIndex = items.map(function (item) { return JSON.parse(item).id; }).indexOf(id);\r\n\r\n if (itemIndex >= 0) {\r\n items.splice(itemIndex, 1);\r\n const cookie = [\"pendingSaveItem\", '=', JSON.stringify(items), '; domain=.', window.location.host.toString(), '; path=/;'].join('');\r\n document.cookie = cookie;\r\n }\r\n\r\n return itemIndex >= 0;\r\n };\r\n\r\n Favorites.prototype.temporalSaveToFavorites = function (event) {\r\n const pendingItems = document.cookie.match(new RegExp(\"pendingSaveItem=([^;]+)\"));\r\n const temporalSavedItems = pendingItems ? JSON.parse(pendingItems[1]) : [];\r\n\r\n event.preventDefault();\r\n\r\n if (temporalSavedItems.length > 0) {\r\n require(['handlerAuth0'],\r\n function(handlerAuth0) {\r\n var options = {};\r\n handlerAuth0.init(options);\r\n });\r\n } else {\r\n temporalSavedItems.push(JSON.stringify({\r\n element: this.id,\r\n category: this.dataset.category,\r\n type: this.dataset.type,\r\n id: this.dataset.id,\r\n url: this.dataset.url,\r\n name: this.dataset.name,\r\n dataset: this.dataset\r\n }));\r\n\r\n const cookie = [\"pendingSaveItem\", '=', JSON.stringify(temporalSavedItems), '; domain=.', window.location.host.toString(), '; path=/;'].join('');\r\n document.cookie = cookie;\r\n }\r\n };\r\n\r\n Favorites.prototype.updateStylesToSaved = function (category, data, link) {\r\n if (category === \"\" || category === \"mainviewer\" || category === \"commheader\" || !link) { // not comm results\r\n Array.from(document.querySelectorAll(\".nhs_favSaved, .nhs_nbyFavUnsaved\")).forEach(function (favSaved) {\r\n favSaved.style.display = \"block\";\r\n favSaved.dataset.favid = data.Id;\r\n });\r\n\r\n Array.from(document.querySelectorAll(\".nhs_favUnsave, .nhs_nbyFavUnsave\")).forEach(function (favUnSaved) {\r\n favUnSaved.style.display = \"none\";\r\n favUnSaved.dataset.favid = data.Id;\r\n });\r\n return;\r\n }\r\n\r\n if (link && link instanceof HTMLElement) { // results pages \r\n const nextElement = link.parentElement.querySelector(\".nhs_favSaved, .nhs_nbyFavUnsaved\");\r\n\r\n if (nextElement) {\r\n nextElement.dataset.favid = data.Id;\r\n nextElement.style.display = \"block\";\r\n }\r\n\r\n link.style.display = \"none\";\r\n }\r\n },\r\n\r\n Favorites.prototype.updateStylesToUnsaved = function (category, link) {\r\n if (category === \"\" || category === \"mainviewer\" || category === \"commheader\") {\r\n Array.from(document.querySelectorAll(\".nhs_favSaved, .nhs_nbyFavUnsaved\")).forEach(function (favSaved) {\r\n favSaved.style.display = \"none\";\r\n favSaved.removeAttribute(\"data-favid\");\r\n });\r\n\r\n Array.from(document.querySelectorAll(\".nhs_favUnsave, .nhs_nbyFavUnsave\")).forEach(function (favSaved) {\r\n favSaved.style.display = \"block\";\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (link) {\r\n link.style.display = \"none\";\r\n delete link.dataset.favid;\r\n\r\n if (link.previousElementSibling) {\r\n link.previousElementSibling.style.display = \"block\";\r\n }\r\n }\r\n };\r\n /**\r\n * Saves an element to favorites\r\n * @method\r\n * @param {String} link Link\r\n * @param {String} category Favorite category\r\n * @param {String} type Favorite type\r\n * @param {String} id Favorite id\r\n * @param {String} url Url\r\n * @param {String} name Favorite name\r\n */\r\n Favorites.prototype.saveToFavs = function (link, category, type, id, url, name) {\r\n var instance = this;\r\n\r\n if (typeof (instance.params.logInfo) === \"undefined\") {\r\n instance.params.logInfo = {\r\n marketId: instance.params.marketId,\r\n partnerId: instance.params.partnerId\r\n };\r\n\r\n if (category === \"homeresults\" && type === \"HomePlan\") {\r\n instance.params.logInfo.planId = id;\r\n } else if (category === \"homeresults\" && type === \"HomeSpec\") {\r\n instance.params.logInfo.specificationId = id;\r\n } else {\r\n instance.params.logInfo.communityId = id;\r\n }\r\n }\r\n\r\n instance.logEvents(category, type, id);\r\n\r\n ajax.request({\r\n type: \"POST\",\r\n url: instance.params.urlBase + \"/favorites/save\",\r\n data: {\r\n Type: type,\r\n Id: id,\r\n FavoriteUrl: url,\r\n Title: name\r\n },\r\n success: function (data) {\r\n if (!data.Saved) return;\r\n Favorites.prototype.updateStylesToSaved(category, data, link);\r\n document.body.dispatchEvent &&\r\n document.body.dispatchEvent(new CustomEvent(\"trackIdentifySaveItems\", {\r\n detail: { data: link }\r\n }));\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Logs events\r\n * @method\r\n * @param {String} category Favorite category\r\n * @param {String} type Favorite type\r\n * @param {String} id Favorite id\r\n */\r\n Favorites.prototype.logEvents = function (category, type, id) {\r\n var instance = this;\r\n var log = instance.params.logger || instance.params.logInfo;\r\n\r\n if (category === \"commheader\") {\r\n log.googlepush(\"Community Detail Events\", \"Community - Gallery\", \"Save to favorites\");\r\n log.logEventWithParameters(\"CDSTC\", instance.params.logInfo);\r\n } else if (category === \"commfooter\") {\r\n log.googlepush(\"Community Detail Events\", \"Community - Next Steps\", \"Save to favorites\");\r\n log.logEventWithParameters(\"CDNSSTF\", instance.params.logInfo);\r\n } else if (category === \"mpcheader\") {\r\n log.googlepush(\"Community Detail Events\", \"Master Plan Community - Header\", \"Save to favorites\");\r\n logger.logEventWithParameters(\"Save_Listing\", instance.params.logInfo);\r\n } else if (category === \"mpcfooter\") {\r\n log.googlepush(\"Community Detail Events\", \"Master Plan Community - Next Steps\", \"Save to favorites\");\r\n log.logEventWithParameters(\"Save_Listing\", instance.params.logInfo);\r\n } else if (category === \"homeheader\") {\r\n log.googlepush(\"Home Detail Events\", \"Home - Gallery\", \"Save to favorites\");\r\n log.logEventWithParameters(\"HOMSTC\", instance.params.logInfo);\r\n } else if (category === \"homefooter\") {\r\n log.googlepush(\"Home Detail Events\", \"Home - Next Steps\", \"Save to favorites\");\r\n log.logEventWithParameters(\"HDNSSTF\", instance.params.logInfo);\r\n } else if (category === \"mainviewer\") {\r\n log.googlepush(\"Image Viewer\", \"Image Viewer\", \"Image Viewer - Favorite\");\r\n if (type === \"Community\") {\r\n log.logEventWithParameters(\"CDSTC\", instance.params.logInfo);\r\n } else {\r\n log.logEventWithParameters(\"HOMSTC\", instance.params.logInfo);\r\n }\r\n } else if (category === \"homesgrid\") {\r\n var homeLogInfo = instance.params.logInfo;\r\n if (type === \"HomePlan\") {\r\n homeLogInfo.planId = id;\r\n } else if (type === \"HomeSpec\") {\r\n homeLogInfo.specId = id;\r\n }\r\n log.googlepush(\"Image Viewer\", \"Image Viewer\", \"Image Viewer - Homes Favorite\");\r\n log.logEventWithParameters(\"HOMSTC\", homeLogInfo);\r\n } else if (category === \"commresults\") {\r\n log.googlepush(\"Community Results Events\", \"Community Item\", \"Save to favorites\");\r\n log.googlepush(\"Search Events\", \"Search Results\", \"Favorite Community\");\r\n log.SetDataLayerPair(\"favoriteSaved\");\r\n log.logEventWithParameters(\"SAVETOFAV_CR\", instance.params.logInfo);\r\n } else if (category === \"homeresults\") {\r\n log.googlepush(\"Community Results Events\", \"Home Item\", \"Save to favorites\");\r\n log.logEventWithParameters(\"SAVETOFAV_HR\", instance.params.logInfo);\r\n } else if (category === \"builder\") {\r\n log.googlepush(\"Builder Showcase Events\", \"Builder Showcase\", \"Save to favorites\");\r\n log.logEventWithParameters(\"SAVETOFAV_BSC\", instance.params.logInfo);\r\n }\r\n };\r\n\r\n return Favorites;\r\n});\n","(function (global, factory) {\r\n 'use strict';\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n // If AMD is supported and the global object (window) in case any JS module is expecting\r\n // the analyticsHelper to exists on the window object.\r\n define('analyticsHelper',[],\r\n () => {\r\n global.analyticsHelper = factory(global);\r\n return global.analyticsHelper;\r\n });\r\n } else if (typeof exports === 'object') {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code\r\n // is expected to work with this analyticsHelper Module.\r\n global.analyticsHelper = factory(global);\r\n module.exports = global.analyticsHelper;\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.analyticsHelper = factory(global);\r\n }\r\n}(typeof window !== 'undefined' ? window : {}, (root) => {\r\n 'use strict';\r\n\r\n const CONFIGURATION = (function () {\r\n const constants = {\r\n nhsTrackingId: 'UA-40843711-4'\r\n };\r\n\r\n const get = function (key) {\r\n return constants[key];\r\n };\r\n\r\n return {\r\n get\r\n };\r\n }());\r\n\r\n /**\r\n * Helper to get values from google analytics trackers.\r\n * For reference:\r\n * {@link https://developers.google.com/analytics/devguides/collection/analyticsjs/ga-object-methods-reference}.\r\n * @param {array} keys Key Values we want to get from the tracker.\r\n * @returns {object} values Object with key/values pairs containing the requested key values.\r\n */\r\n const getGoogleAnalyticsValues = function (keys) {\r\n const nhsTrackingId = CONFIGURATION.get('nhsTrackingId');\r\n\r\n const trackers = root.ga.getAll().filter((element) => element.get('trackingId') === nhsTrackingId);\r\n const values = {};\r\n\r\n for (let i = 0; i < trackers.length; i += 1) {\r\n for (let j = 0; j < keys.length; j += 1) {\r\n if (values[keys[j]]) {\r\n // eslint-disable-next-line no-continue\r\n continue;\r\n }\r\n\r\n values[keys[j]] = trackers[i].get(keys[j]);\r\n }\r\n }\r\n\r\n return values;\r\n };\r\n\r\n const addAnalyticsUrlParameters = function (urlToWork) {\r\n let url = urlToWork;\r\n const analyticsValues = getGoogleAnalyticsValues(['clientId', 'userId']);\r\n\r\n const gaClientId = analyticsValues.clientId !== undefined\r\n ? analyticsValues.clientId\r\n : '';\r\n const gaUserId = analyticsValues.userId !== undefined\r\n ? analyticsValues.userId\r\n : '';\r\n\r\n if (gaClientId) {\r\n url = url + '/GAClientId-' + gaClientId;\r\n }\r\n\r\n if (gaUserId) {\r\n url = url + '/GAUserId-' + gaUserId;\r\n }\r\n\r\n return url;\r\n };\r\n\r\n return {\r\n addAnalyticsUrlParameters,\r\n getGoogleAnalyticsValues\r\n };\r\n}));\r\n\n","(function (global, factory) {\r\n \"use strict\";\r\n if (\"function\" === typeof define && define.amd) {\r\n // If supports for AMD is available return the value to the AMD Loader\r\n // // and to the global (window) object in case any JS module.\r\n define('performanceEventsQueue',[], function () {\r\n return (global.performanceEventsQueue = factory(global));\r\n });\r\n } else if (\"object\" === typeof exports) {\r\n // If supports for Common JS is available export the module\r\n // // and pass is value to the global (window) object in case non Common JS code\r\n // // is expected to work\r\n module.exports = (global.performanceEventsQueue = factory(global));\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.performanceEventsQueue = factory(global);\r\n }\r\n})(\"undefined\" !== typeof window ? window : {}, function (root) {\r\n /*\r\n * This queue is going to hold all the urls that needs GA values before GA has been downloaded by the browser\r\n */\r\n var eventsQueue = [];\r\n /*\r\n * This module exposes a function for queuing to the eventsQueue property\r\n */\r\n var enqueueEvent = function (url) {\r\n if (eventsQueue) {\r\n eventsQueue.push(url);\r\n }\r\n };\r\n /*\r\n * This function takes the values from GA and fires the logging of all the queued events considering these values as part of the request\r\n */\r\n function fireEvents() {\r\n if (eventsQueue.length > 0 && typeof (ga) === \"function\") {\r\n ga(function() {\r\n var urlWithGaValues = analyticsHelper.addAnalyticsUrlParameters(\"\");\r\n for (var i = eventsQueue.length - 1; i >= 0; i--) {\r\n var url = eventsQueue.pop();\r\n var xhr = new XMLHttpRequest();\r\n var indexOfQueryString = url.indexOf(\"?\");\r\n if (indexOfQueryString === -1) {\r\n url = url + urlWithGaValues;\r\n } else {\r\n url = url.substring(0, indexOfQueryString) +\r\n urlWithGaValues +\r\n url.substring(indexOfQueryString, url.length);\r\n }\r\n // the 3rd param sets async = true\r\n xhr.open(\"POST\", url, true);\r\n xhr.send();\r\n }\r\n delete eventsQueue;\r\n });\r\n }\r\n };\r\n\r\n window.onload = fireEvents;\r\n\r\n return {\r\n enqueueEvent: enqueueEvent\r\n }\r\n});\n","/**\r\n * @module\r\n */\r\ndefine('eventLogger',[\"routes\", \"ajaxHelper\", \"analyticsHelper\", \"performanceEventsQueue\"], function (routes, ajax, analyticsHelper, performanceEventsQueue) {\r\n var callAddThis = true;\r\n var commIdHd = 0;\r\n var builderIdHd = 0;\r\n var siteRoot = document.getElementById(\"nhs_siteRoot\").value;\r\n var marketId = document.getElementById(\"nhs_marketId\").value;\r\n var _communityId = document.getElementById(\"nhs_communityId\").value;\r\n var _builderId = document.getElementById(\"nhs_builderId\").value;\r\n var _planId = document.getElementById(\"nhs_planId\").value;\r\n var _specId = document.getElementById(\"nhs_specId\").value;\r\n var _homeSearchViewMetricDisplayed = null;\r\n var _homeSearchViewMetricHidden = null;\r\n var fromPage = null;\r\n var performanceLogUrl = routes.performanceLog;\r\n var eventLoggerUrl = \"eventlogger/logevent-\";\r\n\r\n /**\r\n * Checks if the Google Analytics library has been downloaded yet\r\n * @function\r\n */\r\n function isGaLoaded() {\r\n return typeof (ga) === \"function\" && typeof (ga.getAll) === \"function\" ;\r\n }\r\n\r\n /**\r\n * Handles the url event log, if GA is ready then we log the event,\r\n * otherwise we are going to enqueue it and wait for the pageLoad event before trying to log them\r\n * @function\r\n * @param {String} url String\r\n * @param {String} isGaReady String\r\n * @param {Boolean} isAsync Boolean\r\n */\r\n function handleLogEvent(url, isGaReady, isAsync) {\r\n if (!isGaReady) {\r\n performanceEventsQueue.enqueueEvent(url);\r\n } else {\r\n url = analyticsHelper.addAnalyticsUrlParameters(url);\r\n ajax.postRequest(url, { async: isAsync });\r\n }\r\n }\r\n\r\n /**\r\n * Redirects the window\r\n * @function\r\n * @param {Event} e Event\r\n * @param {String} url URL\r\n * @param {*} newWin New Window\r\n */\r\n function redirect(e, url, newWin) {\r\n try {\r\n e.cancelBubble = true;\r\n } catch (err) {}\r\n\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n\r\n if (!url) return;\r\n\r\n if (!!(navigator.userAgent.indexOf(\"Trident/\") >= 0 || navigator.userAgent.indexOf(\"MSIE \") >= 0)) {\r\n var referLink = document.createElement(\"a\");\r\n\r\n referLink.href = url;\r\n document.body.appendChild(referLink);\r\n\r\n //Begin Case: 79000\r\n if (newWin) {\r\n referLink.target = \"_blank\";\r\n referLink.click();\r\n } else {\r\n setTimeout(function () {\r\n referLink.click();\r\n }, 500);\r\n }\r\n //End Case: 79000\r\n } else {\r\n if (newWin) {\r\n window.open(url);\r\n } else {\r\n setTimeout(function () {\r\n window.location.href = url;\r\n }, 500);\r\n }\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Logs a view using parameters\r\n * @function\r\n * @param {String} url \r\n * @param {Number} eventCode \r\n * @param {*} parameters \r\n */\r\n function logViewWithParameters(url, eventCode, parameters) {\r\n var wturl = url;\r\n\r\n if (fromPage === \"communityresults\") {\r\n wturl = url;\r\n\r\n if (siteRoot === \"/\") {\r\n wturl = \"/NewHomeSource\" + url;\r\n }\r\n }\r\n\r\n var communityId = 0,\r\n specId = 0,\r\n planId = 0;\r\n\r\n if (parameters.builderId) {\r\n url = url + \"/builder-\" + parameters.builderId;\r\n }\r\n\r\n if (parameters.communityId || parameters.commId) {\r\n url = url + \"/community-\" + (parameters.communityId || parameters.commId);\r\n communityId = (parameters.communityId || parameters.commId);\r\n }\r\n\r\n if (parameters.parentCommunityId || parameters.parentCommId) {\r\n url = url + \"/parentcommunityid-\" + (parameters.parentCommunityId || parameters.parentCommunityId);\r\n }\r\n\r\n if (parameters.communityList) {\r\n url = url + \"/communitylist-\" + parameters.communityList;\r\n }\r\n\r\n if (parameters.marketId) {\r\n url = url + \"/market-\" + parameters.marketId;\r\n }\r\n\r\n if (parameters.planId) {\r\n url = url + \"/planid-\" + parameters.planId;\r\n planId = parameters.planId;\r\n }\r\n\r\n if (parameters.specId) {\r\n url = url + \"/specid-\" + parameters.specId;\r\n specId = parameters.specId;\r\n }\r\n\r\n if (parameters.basicListingId) {\r\n url = url + \"/basiclistingid-\" + parameters.basicListingId;\r\n }\r\n\r\n if (parameters.refer) {\r\n url = url + \"/refer-\" + parameters.refer;\r\n }\r\n\r\n if (parameters.totalHomes) {\r\n url = url + \"/totalhomes-\" + parameters.totalHomes;\r\n }\r\n\r\n if (parameters.builderCommunityList) {\r\n url = url + \"?buildercommunitylist=\" + parameters.builderCommunityList;\r\n }\r\n\r\n if (parameters.basicListingList) {\r\n url = url + \"?basiclistinglist=\" + parameters.basicListingList;\r\n }\r\n\r\n if (parameters.homeList) {\r\n url = url + \"?homeList=\" + parameters.homeList;\r\n }\r\n\r\n var isGaReady = isGaLoaded();\r\n handleLogEvent(url, isGaReady, true);\r\n\r\n //GA Performance event (with enhaced ecomm)\r\n logGoogleEcommerceEvent(eventCode, communityId, specId, planId, null, parameters.builderCommunityList, parameters.homeList);\r\n }\r\n\r\n /**\r\n * Logs a view\r\n * @function\r\n * @param {String} url URL\r\n * @param {Number} eventCode Event code\r\n * @param {Number} cid Community Id\r\n * @param {Number} bid Builder Id\r\n * @param {Number} planId Plan Id\r\n * @param {Number} specId Spec Id\r\n * @param {Number} bsId BS Id\r\n */\r\n function logView(url, eventCode, cid, bid, planId, specId, bsId) {\r\n if (url.indexOf(\"http://\") < 0) {\r\n url = url.replace(\" \", \"\").replace(\"//\", \"/\");\r\n }\r\n\r\n var hdPage = planId > 0 || specId > 0;\r\n\r\n if (cid === 0 && hdPage) {\r\n cid = commIdHd;\r\n }\r\n\r\n if (bid === 0 && hdPage) {\r\n bid = builderIdHd;\r\n }\r\n\r\n //Log to custom via http req \r\n if (bsId === 0) {\r\n url = url + \"/builder-\" + bid + \"/community-\" + cid + \"/planid-\" + planId + \"/specid-\" + specId + \"/market-\" + marketId;\r\n } else {\r\n url = url + \"/basiclistingid-\" + bsId + \"/market-\" + marketId;\r\n }\r\n\r\n var isGaReady = isGaLoaded();\r\n handleLogEvent(url, isGaReady, true);\r\n\r\n //GA Performance event (with enhaced ecomm)\r\n logGoogleEcommerceEvent(eventCode, cid, specId, planId, null);\r\n }\r\n\r\n /**\r\n * Logs Metrics\r\n * @function\r\n * @param {Event} event Event\r\n * @param {String} logString String to log\r\n */\r\n function logMetrics(event, logString) {\r\n ajax.request({\r\n type: \"POST\",\r\n url: \"https://\" + location.host + \"/metricseventlogger/\",\r\n data: {\r\n logsInChains: logString,\r\n eventName: event\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Logs a Google Ecommerce Event\r\n * @function\r\n * @param {String} eventName Event name\r\n * @param {Number} communityId Community Id\r\n * @param {Number} specId Spec Id\r\n * @param {Number} planId Plan Id\r\n * @param {String} builderName Builder's name\r\n * @param {Number[]} communitiesIdsList Communities Id List\r\n * @param {Number[]} homesIdsList Homes Id List\r\n */\r\n function logGoogleEcommerceEvent(eventName, communityId, specId, planId, builderName, communitiesIdsList, homesIdsList) {\r\n ajax.request({\r\n type: \"POST\",\r\n url: performanceLogUrl,\r\n data: {\r\n \"eventName\": eventName,\r\n \"communityId\": typeof (communityId) != \"undefined\" && communityId != null ? communityId : 0,\r\n \"specId\": typeof (specId) != \"undefined\" && specId != null ? specId : 0,\r\n \"planId\": typeof (planId) != \"undefined\" && planId != null ? planId : 0,\r\n \"builderName\": builderName,\r\n \"communitiesIdsList\": communitiesIdsList,\r\n \"homesIdsList\": homesIdsList\r\n },\r\n success: function (result) {\r\n // The GetDataLayerPush method of the Google Analytics Controller returns a js that needs to be executed\r\n eval(result);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates an EventLogger instance\r\n * @constructor\r\n */\r\n function EventLogger() {}\r\n\r\n /**\r\n * Logs List Hub Events\r\n * @method\r\n * @param {String} listHubProviderId List Hub provider Id\r\n * @param {String} testkey Test Key\r\n * @param {String} desckey Description Key\r\n * @param {String} listingKey Listing Key\r\n */\r\n EventLogger.prototype.logListHubEvent = function (listHubProviderId, testkey, desckey, listingKey) {\r\n try {\r\n var _lh = new ListHubTracker({\r\n provider: listHubProviderId,\r\n test: testkey\r\n });\r\n _lh.submit(desckey, listingKey);\r\n } catch (err) {}\r\n };\r\n\r\n /**\r\n * Logs and Redirects\r\n * @method\r\n * @param {Event} e Event\r\n * @param {String} url Url\r\n * @param {Number} eventCode Event code\r\n * @param {Number} cid Community Id\r\n * @param {Number} bid Builder Id\r\n * @param {Number} pid Plan Id\r\n * @param {Number} sid Spec Id\r\n * @param {Number} mid Market Id\r\n * @param {Boolean} external If the redirect is to an external page\r\n * @returns {Boolean} False\r\n */\r\n EventLogger.prototype.logAndRedirect = function (e, url, eventCode, cid, bid, pid, sid, mid, external) {\r\n marketId = mid;\r\n this.logEvent(eventCode, cid, bid, pid, sid);\r\n redirect(e, url, external);\r\n return false;\r\n };\r\n\r\n /**\r\n * Logs Basic Listing and Redirects\r\n * @method\r\n * @param {Event} e Event\r\n * @param {String} url Url\r\n * @param {Number} eventCode Event code\r\n * @param {Number} bsid Basic Id\r\n * @param {Number} mid Market Id\r\n * @returns {Boolean} False \r\n */\r\n EventLogger.prototype.logBasicListingAndRedirect = function (e, url, eventCode, bsid, mid) {\r\n var params = {\r\n basiclistingId: bsid,\r\n marketId: mid\r\n };\r\n this.logEventWithParameters(eventCode, params);\r\n redirect(e, url);\r\n return false;\r\n };\r\n\r\n /**\r\n * Logs using parameters and Redirects\r\n * @method\r\n * @param {Event} e Event\r\n * @param {String} url Url\r\n * @param {Number} eventCode Event code\r\n * @param {*} params Bs Id\r\n * @param {Boolean} external If the redirect is to an external page\r\n * @returns {Boolean} False\r\n */\r\n EventLogger.prototype.logWithParametersAndRedirect = function (e, url, eventCode, params, external) {\r\n this.logEventWithParameters(eventCode, params);\r\n redirect(e, url, external);\r\n return false;\r\n };\r\n\r\n /**\r\n * Logs Basic Listing event\r\n * @method\r\n * @param {Number} eventCode Event code\r\n * @param {Number} bsid Basic Id\r\n */\r\n EventLogger.prototype.logBasicListingEvent = function (eventCode, bsid) {\r\n if (!eventCode) return;\r\n var url = siteRoot + routes.logEvent + eventCode;\r\n\r\n if (siteRoot.substring(siteRoot.length - 1) !== \"/\") {\r\n url = \"/\" + url;\r\n }\r\n\r\n logView(url, eventCode, 0, 0, 0, 0, bsid);\r\n };\r\n\r\n /**\r\n * Logs an event\r\n * @method\r\n * @param {Number} eventCode Event code\r\n * @param {Number} cid Community Id\r\n * @param {Number} bid Builder Id\r\n * @param {Number} pid Partner Id\r\n * @param {Number} sid Spec Id\r\n */\r\n EventLogger.prototype.logEvent = function (eventCode, cid, bid, pid, sid) {\r\n if (!eventCode) return;\r\n var url = siteRoot + routes.logEvent + eventCode;\r\n\r\n if (siteRoot.substring(siteRoot.length - 1) !== \"/\") {\r\n url = \"/\" + url;\r\n }\r\n\r\n logView(url, eventCode, cid, bid, pid, sid, 0);\r\n };\r\n\r\n /**\r\n * Log events with parameters\r\n * @function\r\n * @param {Number} eventCode\r\n * @param {*} parameters\r\n */\r\n EventLogger.prototype.logEventWithParameters = function (eventCode, parameters) {\r\n var self = this;\r\n\r\n setTimeout(function () {\r\n if (eventCode) {\r\n var url = siteRoot + eventLoggerUrl + eventCode;\r\n\r\n if (siteRoot.substring(siteRoot.length - 1) != \"/\") {\r\n url = \"/\" + url;\r\n }\r\n\r\n logViewWithParameters(url, eventCode, parameters);\r\n }\r\n }, self._timeOut);\r\n };\r\n\r\n /**\r\n * Sets an allowance to add this\r\n * @method\r\n */\r\n EventLogger.prototype.setAllowAddThis = function () {\r\n callAddThis = false;\r\n setTimeout(function () {\r\n callAddThis = true;\r\n }, 2000);\r\n };\r\n\r\n /**\r\n * Logs Multiple events\r\n * @method\r\n * @param {Event} e Event\r\n * @param {String} url Url\r\n * @param {Number} eventCode Event code\r\n * @param {Number} bsid Bs Id\r\n * @param {Number} mid Market Id\r\n */\r\n EventLogger.prototype.logMultiEvent = function (eventCode, communityId, builderId, planId, specId) {\r\n if (eventCode) {\r\n var url = siteRoot + routes.logEvent + eventCode;\r\n\r\n if (siteRoot.substring(siteRoot.length - 1) !== \"/\") {\r\n url = \"/\" + url;\r\n }\r\n\r\n logView(url, eventCode, communityId, builderId, planId, specId, 0);\r\n }\r\n };\r\n\r\n /**\r\n * Logs Home Results metrics\r\n * @method\r\n * @param {String} eventCode Event Code\r\n * @param {Boolean} flag Flag\r\n */\r\n EventLogger.prototype.logHomeResultsMetrics = function (eventCode, flag) {\r\n if (eventCode) {\r\n var logString;\r\n\r\n if (flag === 1) {\r\n logString = _homeSearchViewMetricDisplayed;\r\n } else {\r\n logString = _homeSearchViewMetricHidden;\r\n }\r\n\r\n logMetrics(eventCode, logString);\r\n }\r\n };\r\n\r\n /**\r\n * Attaches Events to add this\r\n * @method\r\n */\r\n EventLogger.prototype.attachEventsToAddThis = function () {\r\n var instance = this;\r\n if (typeof addthis !== \"undefined\") {\r\n addthis.addEventListener(\"addthis.menu.share\", function (evt) { // TODO check this event \r\n if (!callAddThis) return;\r\n var serviceShared = evt.data.service.toString().toLowerCase();\r\n var eventCode, hdPage;\r\n\r\n if (serviceShared.indexOf(\"favorites\") === -1 && serviceShared.indexOf(\"print\") === -1 && serviceShared.indexOf(\"email\") === -1) {\r\n if (_planId === 0 && _specId === 0 && _communityId === 0) {\r\n eventCode = \"MHSMS\";\r\n } else {\r\n hdPage = _planId > 0 || _specId > 0;\r\n eventCode = hdPage ? \"HDSMS\" : \"CDSMS\";\r\n }\r\n\r\n instance.logMultiEvent(eventCode, _communityId, _builderId, _planId, _specId);\r\n } else if (serviceShared.indexOf(\"email\") > -1) {\r\n hdPage = _planId > 0 || _specId > 0;\r\n eventCode = hdPage ? \"HOMSTF\" : \"COMSTF\";\r\n instance.logMultiEvent(eventCode, _communityId, _builderId, _planId, _specId);\r\n instance.setAllowAddThis();\r\n } else if (serviceShared.indexOf(\"print\") > -1) {\r\n hdPage = _planId > 0 || _specId > 0;\r\n eventCode = hdPage ? \"HOMPR\" : \"COMPR\";\r\n\r\n if (this.classList.contains(\"nextStepsPrint\")) {\r\n eventCode = hdPage ? \"HDNSPRN\" : \"CDNSPRN\";\r\n }\r\n\r\n var logInfo = getLogInfo();\r\n\r\n instance.logEventWithParameters(eventCode, logInfo);\r\n instance.setAllowAddThis();\r\n }\r\n\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Gets log info\r\n */\r\n EventLogger.prototype.getLogInfo = function () {\r\n var logInformationObject;\r\n var logInfo = {\r\n communityId: _communityId,\r\n builderId: _builderId,\r\n planId: _planId,\r\n specId: _specId\r\n };\r\n\r\n if (typeof commDetail != \"undefined\") {\r\n logInformationObject = commDetail._parameters || commDetail.parameters;\r\n logInfo = logInformationObject.logInfo;\r\n }\r\n else if (typeof homeDetail != \"undefined\") {\r\n logInformationObject = homeDetail._parameters || homeDetail.parameters;\r\n logInfo = logInformationObject.logInfo;\r\n }\r\n\r\n return logInfo;\r\n };\r\n\r\n /**\r\n * Sets a Pair to the Data Layer\r\n * @method\r\n * @param {String} key Key\r\n * @param {*} optValue Optional value\r\n */\r\n EventLogger.prototype.SetDataLayerPair = function (key, optValue) {\r\n try {\r\n var finalUrl = \"/GoogleAnalytics/SetDataLayerPair\";\r\n\r\n if (typeof (optValue) == \"undefined\") {\r\n optValue = 0;\r\n }\r\n\r\n ajax.getRequest(finalUrl + \"?key=\" + key + \"&optValue=\" + optValue + \"\", null, null,\r\n {\r\n async: true,\r\n success: function(data) {\r\n if (!(data !== \"\" && typeof data === \"string\")) return;\r\n if (typeof (dataLayer) == \"undefined\") {\r\n var tmpData = data;\r\n var finalData = tmpData.replace(\"dataLayer\", \"window.parent.dataLayer\");\r\n eval(finalData);\r\n } else {\r\n eval(data);\r\n }\r\n }\r\n });\r\n } catch (ex) {}\r\n };\r\n\r\n /**\r\n * Creates a cookie\r\n * @method\r\n * @param {String} name Name\r\n * @param {String | Number | Boolean} value Value\r\n * @param {Number} days Days\r\n */\r\n function createCookie(name, value, days) {\r\n var expires;\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toGMTString();\r\n } else {\r\n expires = \"\";\r\n }\r\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\r\n };\r\n\r\n\r\n EventLogger.prototype.createCookie = createCookie;\r\n\r\n /**\r\n * reads the cookie with a given name\r\n *@method \r\n *\r\n * @param {string} name Name of the cookie\r\n * @returns\r\n */\r\n function readCookie(name) {\r\n var nameEQ = name + \"=\";\r\n var ca = document.cookie.split(\";\");\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == \" \") c = c.substring(1, c.length);\r\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\r\n }\r\n return null;\r\n };\r\n\r\n EventLogger.prototype.readCookie = readCookie;\r\n\r\n /**\r\n * Executes google push functionality\r\n * @method\r\n * @param {Event[]} events Event List\r\n * @param {String} action Action\r\n * @param {String} label Label\r\n * @param {String | Number | Boolean} value Value\r\n */\r\n EventLogger.prototype.googlepush = function (events, action, label, value) {\r\n createCookie(\"CTAName\", action);\r\n if (typeof dataLayer !== \"undefined\") {\r\n dataLayer.push({\r\n 'event': \"GAEvent\",\r\n 'eventCategory': events,\r\n 'eventAction': action,\r\n 'eventLabel': label,\r\n 'eventValue': undefined\r\n });\r\n } \r\n };\r\n\r\n return EventLogger;\r\n});\n","require(\r\n [\r\n 'paramsObserver',\r\n 'Favorites',\r\n 'eventLogger'\r\n ],\r\n function\r\n (\r\n paramsObserver,\r\n Favorites,\r\n EventLogger\r\n ) {\r\n 'use strict';\r\n\r\n function handleFavorites() {\r\n const locationSelect = document.querySelector('#marketId');\r\n const partner = Number(document.querySelector('#nhs_partnerID').value);\r\n const logger = new EventLogger();\r\n const favoritesParameters = {\r\n urlBase: '',\r\n partnerId: partner,\r\n marketId: locationSelect.value,\r\n logger: logger\r\n };\r\n const favs = new Favorites(favoritesParameters);\r\n \r\n favs.init();\r\n }\r\n\r\n handleFavorites();\r\n paramsObserver.subscribe('resultsLoaded', handleFavorites);\r\n }\r\n );\r\n \ndefine(\"favoritesHandler\", function(){});\n\n","define('paramsConfig',[\"urlHelper\", \"searchTypeHelper\"], function (urlHelper, searchTypeHelper) {\r\n var paramsConfigForTabs = {\r\n BoylResults: {\r\n SrpType: \"BoylResults\",\r\n Custom: true,\r\n CustomResults: true,\r\n SingleFamily: false\r\n },\r\n BuilderResults: {\r\n SrpType: \"BuilderResults\",\r\n CommName: null,\r\n SingleFamily: false,\r\n BrandId: 0\r\n },\r\n CommunityResults: {\r\n SrpType: \"CommunityResults\",\r\n Mfr: false\r\n },\r\n CondoDevelopments: {\r\n SrpType: \"CondoDevelopments\",\r\n SingleFamily: false\r\n },\r\n CondoTownHomes: {\r\n SrpType: \"CondoTownHomes\",\r\n SingleFamily: false\r\n },\r\n CustomBuilders: {\r\n SrpType: \"CustomBuilders\",\r\n BrandId: 0,\r\n Brands: []\r\n },\r\n CustomHomes: {\r\n ExcludeBasicListings: true,\r\n SrpType: \"CustomHomes\"\r\n },\r\n CustomCommunities: {\r\n ExcludeBasicListings: true,\r\n SrpType: \"CustomCommunities\"\r\n },\r\n HomeResults: {\r\n SrpType: \"HomeResults\"\r\n },\r\n ManufacturedHomes: {\r\n SrpType: \"ManufacturedHomes\"\r\n },\r\n ManufacturedResults: {\r\n SrpType: \"ManufacturedResults\"\r\n }\r\n };\r\n\r\n var paramsConfigForSortBy = {\r\n bedroomsHighLow: {\r\n SortBy: \"Bed\"\r\n },\r\n bedroomsLowHigh: {\r\n SortBy: \"Bed\",\r\n SortOrder: false\r\n },\r\n builderAToZ: {\r\n SortBy: \"Brand\",\r\n SortOrder: false\r\n },\r\n builderZToA: {\r\n SortBy: \"Brand\"\r\n },\r\n cityAToZ: {\r\n SortBy: \"City\",\r\n SortOrder: false\r\n },\r\n cityZToA: {\r\n SortBy: \"City\"\r\n },\r\n communityAToZ: {\r\n SortBy: \"Comm\",\r\n SortOrder: false\r\n },\r\n communityZToA: {\r\n SortBy: \"Comm\"\r\n },\r\n default: {\r\n SortBy: \"Random\",\r\n SortOrder: false\r\n },\r\n matchingHomes: {\r\n SortBy: \"NumHomes\"\r\n },\r\n planNameAToZ: {\r\n SortBy: \"Plan\",\r\n SortOrder: false\r\n },\r\n planNameZToA: {\r\n SortBy: \"Plan\"\r\n },\r\n priceLowHigh: {\r\n SortBy: \"Price\",\r\n SortOrder: false\r\n },\r\n priceHighLow: {\r\n SortBy: \"Price\"\r\n }\r\n }\r\n\r\n function getConfigurationForSortBy(order) {\r\n var defaultParams = {\r\n PageNumber: 1,\r\n SortOrder: true\r\n };\r\n\r\n return Object.assign(defaultParams, paramsConfigForSortBy[order]);\r\n }\r\n\r\n function getConfigurationForTab(tab) {\r\n var defaultParams = {\r\n ExcludeBasicListings: false,\r\n PageNumber: 1\r\n };\r\n\r\n return Object.assign(defaultParams, paramsConfigForTabs[tab]);\r\n }\r\n\r\n function getConfigurationFromAnchor(element) {\r\n let parameter = element.dataset.parameter;\r\n const url = element.href;\r\n\r\n if (!parameter || !url) {\r\n return { };\r\n }\r\n\r\n const searchResultFunction = searchTypeHelper.getSrpFunction(url);\r\n const searchResultType = searchTypeHelper.getSrpType(searchResultFunction);\r\n const searchResultParameters = getConfigurationForTab(searchResultType);\r\n let value = urlHelper.getValueFromQueryString(parameter, url) || urlHelper.getValueFromUrlSegment(parameter, url);\r\n const alias = element.dataset.alias;\r\n\r\n if (!value) {\r\n return {};\r\n }\r\n\r\n if (Array.isArray(searchResultParameters[parameter])) {\r\n value = [value];\r\n }\r\n\r\n parameter = alias || parameter;\r\n searchResultParameters[parameter] = value;\r\n return searchResultParameters;\r\n }\r\n\r\n return {\r\n getSortByParameters: getConfigurationForSortBy,\r\n getTabParameters: getConfigurationForTab,\r\n getConfigurationFromAnchor: getConfigurationFromAnchor\r\n }\r\n});\n","define('sortByConfig',[\"searchTypeHelper\", \"i18n!nls/res\"], function (searchTypeHelper, res) {\r\n \"use strict\";\r\n\r\n var customOptions = {\r\n default: res[\"default\"],\r\n priceLowHigh: res[\"priceLowHigh\"],\r\n priceHighLow: res[\"priceHighLow\"],\r\n builderAToZ: res[\"builderAToZ\"],\r\n builderZToA: res[\"builderZToA\"]\r\n };\r\n\r\n var communitiesOptions = {\r\n default: res[\"default\"],\r\n matchingHomes: res[\"matchingHomes\"],\r\n cityAToZ: res[\"cityAToZ\"],\r\n cityZToA: res[\"cityZToA\"],\r\n priceLowHigh: res[\"priceLowHigh\"],\r\n priceHighLow: res[\"priceHighLow\"],\r\n builderAToZ: res[\"builderAToZ\"],\r\n builderZToA: res[\"builderZToA\"],\r\n communityAToZ: res[\"communityAToZ\"],\r\n communityZToA: res[\"communityZToA\"]\r\n };\r\n\r\n var homesOptions = {\r\n default: res[\"default\"],\r\n cityAToZ: res[\"cityAToZ\"],\r\n cityZToA: res[\"cityZToA\"],\r\n priceLowHigh: res[\"priceLowHigh\"],\r\n priceHighLow: res[\"priceHighLow\"],\r\n bedroomsHighLow: res[\"bedroomsHighLow\"],\r\n bedroomsLowHigh: res[\"bedroomsLowHigh\"],\r\n builderAToZ: res[\"builderAToZ\"],\r\n builderZToA: res[\"builderZToA\"],\r\n planNameAToZ: res[\"planNameAToZ\"],\r\n planNameZToA: res[\"planNameZToA\"]\r\n };\r\n\r\n function getSortOptionsForCurrentPage(srpType) {\r\n var options = {};\r\n\r\n if (searchTypeHelper.isAnyHomeSearchType(srpType)) {\r\n options = homesOptions;\r\n }\r\n\r\n if (searchTypeHelper.isAnyCommunitySearchType(srpType)) {\r\n options = communitiesOptions;\r\n }\r\n\r\n if (searchTypeHelper.isCustomBuilderSearchType(srpType)) {\r\n options = customOptions;\r\n }\r\n\r\n return options;\r\n }\r\n\r\n function isValidSortOption(srpType, value) {\r\n var options = getSortOptionsForCurrentPage(srpType);\r\n return options.hasOwnProperty(value);\r\n }\r\n\r\n return {\r\n getSortOptions: getSortOptionsForCurrentPage,\r\n isValid: isValidSortOption\r\n };\r\n});\n","define(\r\n 'resultsSortBy',[\r\n 'paramsConfig',\r\n 'paramsObserver',\r\n 'sortByConfig',\r\n 'touchHelper'\r\n ],\r\n (\r\n paramsConfig,\r\n paramsObserver,\r\n sortByConfig\r\n ) => {\r\n 'use strict';\r\n\r\n const sortBySelect = document.getElementById('nhs_sortBySelect');\r\n\r\n function bindSortByEvent() {\r\n const sortBySelect = document.querySelector('#nhs_sortBySelect');\r\n\r\n if (sortBySelect) {\r\n sortBySelect.removeEventListener('change', sortOrderChanged);\r\n sortBySelect.addEventListener('change', sortOrderChanged);\r\n }\r\n }\r\n\r\n function trackFilterPriceEvent() {\r\n const eventGa4 = {\r\n eventName: 'search_filters',\r\n params: {\r\n click_target: 'Sort By',\r\n search_value: paramsObserver.getParameter('SortBy')\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 function sortOrderChanged(event) {\r\n const target = event.target;\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const value = target.value;\r\n const locationType = target.dataset.locationType;\r\n const locationValue = target.dataset.locationValue;\r\n const parameters = paramsConfig.getSortByParameters(value);\r\n\r\n /*\r\n * BDXNHS-8623: New rules for the sort functionality\r\n * We need to add the second sort property, when the location is selected,\r\n * sort by must match first sort by and first sort by should be the location\r\n * Also, the sort order should be applied to the second sort\r\n * Synthetic location not contains matchs for search result on the API Code\r\n */\r\n if (locationType && (locationType !== 'Market' && locationType !== 'SyntheticGeo')) {\r\n let sortOptionChosen = parameters.SortBy;\r\n const sortSecondOrder = parameters.SortOrder;\r\n\r\n // BDXWEBAPI-3018: we need to change the second sort property to apply the new rule\r\n const isZipCodeLocation = locationType && locationType === 'Zip';\r\n const isSortByRandom = sortOptionChosen && sortOptionChosen === 'Random';\r\n\r\n if (isZipCodeLocation && isSortByRandom) {\r\n sortOptionChosen = 'Distance';\r\n }\r\n\r\n // The Enum for SortBy doesn't contain the Zip element instead it's PostalCode\r\n parameters.SortBy = (isZipCodeLocation ? 'PostalCodeWithBasics' : locationType);\r\n parameters.SortFirstBy = locationValue;\r\n parameters.SortSecondBy = sortOptionChosen;\r\n parameters.SortSecondOrder = sortSecondOrder;\r\n parameters.SortOrder = false;\r\n }\r\n\r\n paramsObserver.setParameters(parameters);\r\n trackFilterPriceEvent();\r\n paramsObserver.commit();\r\n }\r\n\r\n function onUpdate(data) {\r\n const srpType = data.parametersChanged.SrpType;\r\n\r\n if (data.isMoreResults || !srpType) {\r\n return;\r\n }\r\n\r\n updateOptions(srpType);\r\n }\r\n\r\n function updateOptions(srpType) {\r\n let optionsString = '';\r\n let sortByValue = 'default';\r\n const options = sortByConfig.getSortOptions(srpType);\r\n\r\n for (const config in options) {\r\n if (options.hasOwnProperty(config)) {\r\n optionsString += \"';\r\n }\r\n }\r\n\r\n if (sortByConfig.isValid(srpType, sortBySelect.value)) {\r\n sortByValue = sortBySelect.value;\r\n }\r\n\r\n sortBySelect.innerHTML = optionsString;\r\n\r\n for (let index = 0; index < sortBySelect.options.length; index += 1) {\r\n if (sortBySelect.options[index].value === sortByValue) {\r\n sortBySelect.selectedIndex = index;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n bindSortByEvent();\r\n paramsObserver.subscribe('beforeResultsLoad', onUpdate);\r\n paramsObserver.subscribe('resultsLoaded', bindSortByEvent);\r\n }\r\n);\r\n\n","(function trackerSearchPagination(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n\r\n const previousTrackerSearchPagination = global.NewHomeSource.TrackerSearchPagination;\r\n\r\n /**\r\n * @constructs NewHomeSource.TrackerSearchPagination\r\n */\r\n function TrackerSearchPagination() { }\r\n\r\n /**\r\n * @public\r\n * pageSizeSelectionTracker: Tracks the events of the page size option selector.\r\n * @param {Number} pageSize Page size selected number.\r\n */\r\n TrackerSearchPagination.pageSizeSelectionTracker = function pageSizeSelectionTracker(pageSize) {\r\n const ga4Event = {\r\n eventType: 'GA4Event',\r\n eventName: 'pagination_events',\r\n params: {\r\n click_target: 'Page Count Select',\r\n // Ticket-BDXPERF-3351: We should send \"per page\" for both NHS and CNA\r\n search_value: `${pageSize} per page`\r\n }\r\n };\r\n\r\n document.body.dispatchEvent(new CustomEvent('trackOnDemandEvent', {\r\n detail: {\r\n data: ga4Event\r\n }\r\n }));\r\n };\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.SampleModule to the previous script.\r\n */\r\n TrackerSearchPagination.noConflict = function noConflict() {\r\n global.NewHomeSource.TrackerSearchPagination = previousTrackerSearchPagination;\r\n return TrackerSearchPagination;\r\n };\r\n\r\n global.NewHomeSource.TrackerSearchPagination = TrackerSearchPagination;\r\n}(window));\r\n\ndefine(\"trackerSearchPagination\", function(){});\n\n","define(\r\n 'pageSizeHandler',[\r\n 'paramsObserver',\r\n 'trackerSearchPagination'\r\n ],\r\n (paramsObserver) => {\r\n 'use strict';\r\n\r\n const resultList = document.querySelector('[data-container-results]');\r\n /**\r\n *Event delegation to handle global change events inside the results container\r\n *used this to avoid having to attach multiple events when new pages are loaded via ajax\r\n */\r\n resultList.addEventListener('change', (event) => {\r\n if (event.target.id === 'nhs_PageCountSelect') {\r\n const currentValue = paramsObserver.getParameter('PageSize');\r\n const size = parseInt(event.target.value, 10);\r\n\r\n if (size !== currentValue) {\r\n paramsObserver.setParameter('PageNumber', 1);\r\n paramsObserver.setParameter('PageSize', size);\r\n paramsObserver.commit();\r\n window.NewHomeSource.TrackerSearchPagination.pageSizeSelectionTracker(size);\r\n }\r\n }\r\n });\r\n }\r\n);\r\n\n","define(\r\n 'labelMoreSection',[\r\n 'i18n!nls/res',\r\n 'paramsObserver'\r\n ],\r\n (\r\n res,\r\n paramsObserver\r\n ) => {\r\n 'use strict';\r\n\r\n const defaultParams = paramsObserver.getUniqueParameters();\r\n\r\n function getElements(elements) {\r\n const returnElements = [];\r\n for (let index = 0; index < elements.length; index += 1) {\r\n const element = elements[index];\r\n if (!defaultParams[element.getAttribute('data-param')]) {\r\n returnElements.push(element);\r\n }\r\n }\r\n\r\n return returnElements;\r\n }\r\n\r\n function showMoreLabel() {\r\n const morePanelTemplate = document.querySelector('#nhs_FacetMore [data-template-facet]');\r\n const summaryMore = document.querySelector('[data-summary=\"more\"]');\r\n const builderTemp = document.querySelector('[data-template-facet-builder-name]');\r\n const commName = document.querySelector('[data-template-facet-community-name]');\r\n const divPanel = document.createElement('div');\r\n divPanel.innerHTML = morePanelTemplate.innerHTML + builderTemp.innerHTML + commName.innerHTML;\r\n const elements = getElements(divPanel.querySelectorAll(\r\n 'input:not([data-reset-value]):checked, option[selected]:not([data-reset-value])'\r\n ));\r\n\r\n const firstLi = document.createElement('li');\r\n const secondLi = document.createElement('li');\r\n if (elements.length === 0) {\r\n firstLi.innerHTML = res.all;\r\n }\r\n\r\n if (elements.length >= 1) {\r\n firstLi.innerHTML = elements[0].getAttribute('data-label');\r\n }\r\n\r\n if (elements.length === 2) {\r\n secondLi.innerHTML = elements[1].getAttribute('data-label');\r\n }\r\n\r\n if (elements.length > 2) {\r\n secondLi.innerHTML = (elements.length - 1) + ' ' + res.more;\r\n }\r\n summaryMore.appendChild(firstLi);\r\n summaryMore.appendChild(secondLi);\r\n }\r\n\r\n showMoreLabel();\r\n }\r\n);\r\n\n","require(\r\n [\r\n 'a11ydialog',\r\n 'results',\r\n 'touchHelper',\r\n 'history',\r\n 'favoritesHandler',\r\n 'resultsSortBy',\r\n 'pageSizeHandler',\r\n 'labelMoreSection'\r\n ],\r\n (A11yDialog) => {\r\n 'use strict';\r\n\r\n const facetSection = document.querySelectorAll('#nhs_ResFacets, [data-reset-filters]');\r\n const mapSection = document.querySelector('[data-static-map]');\r\n const locationSelect = document.querySelector('#marketId');\r\n const containerCardResults = document.querySelector('[data-card-container]');\r\n\r\n window.A11yDialog = A11yDialog;\r\n\r\n /**\r\n * @private\r\n * initFacets: load modules to facets.\r\n *\r\n * @param {Event} event with the information associated to the click event.\r\n */\r\n function initFacets(event) {\r\n for (let index = 0; index < facetSection.length; index += 1) {\r\n const element = facetSection[index];\r\n element.removeEventListener('click', initFacets);\r\n }\r\n require(['filterAmenityComponent'], (filterAmenityComponent) => {\r\n filterAmenityComponent.init();\r\n const forLabel = event.target.closest('[for]');\r\n if (forLabel && document.querySelector('#' + forLabel.getAttribute('for')).type === 'checkbox') {\r\n document.querySelector('#' + forLabel.getAttribute('for')).dispatchEvent(new Event('change'));\r\n } else {\r\n event.target.click();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * openFreeBrocure: open brochure modal.\r\n *\r\n * @param {Event} event with the information associated to the click or touch event.\r\n */\r\n function openFreeBrocure(event) {\r\n const target = event.target;\r\n\r\n if (!target.dataset.loadModal) {\r\n return;\r\n }\r\n\r\n // this should be there here to avoid two calls to the window modal functionality\r\n event.stopPropagation();\r\n\r\n require(\r\n ['freeBrochure'],\r\n (freeBrochure) => {\r\n freeBrochure.openModal(target);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * @private\r\n * loadAds: load ads and skeleton to page.\r\n *\r\n */\r\n function loadAds() {\r\n require(['onLoadedUtils'], () => { });\r\n }\r\n\r\n /**\r\n * @private\r\n * onDomComplete: handler event when dom complete is trigger.\r\n *\r\n */\r\n function onDomComplete() {\r\n if (typeof window.requestIdleCallback === 'function') {\r\n window.requestIdleCallback(loadAds, { timeout: 1000 });\r\n } else {\r\n setTimeout(loadAds, 1000);\r\n }\r\n }\r\n\r\n /**\r\n * @private\r\n * initMap: init the map when is clicked or market is change.\r\n *\r\n */\r\n function initMap() {\r\n this.removeEventListener('click', initMap);\r\n locationSelect.removeEventListener('change', initMap);\r\n require(['mapAmenityResults'], (mapAmenityResults) => {\r\n mapSection.setAttribute('hidden', '');\r\n mapAmenityResults.init();\r\n });\r\n }\r\n\r\n for (let index = 0; index < facetSection.length; index += 1) {\r\n const element = facetSection[index];\r\n element.addEventListener('click', initFacets);\r\n }\r\n\r\n if (document.readyState === 'complete') {\r\n onDomComplete();\r\n } else {\r\n window.addEventListener('load', onDomComplete);\r\n }\r\n\r\n mapSection.addEventListener('click', initMap);\r\n locationSelect.addEventListener('change', initMap);\r\n containerCardResults.addEventListener('click', openFreeBrocure);\r\n }\r\n);\r\n\ndefine(\"nhs/views/AmenityResults/Show\", function(){});\n\n","\nrequire([\"nhs/views/AmenityResults/Show\"]);\n"]}