{"version":3,"sources":["nhs/views/BuilderShowcaseRedesign/Sections/frequentlyAskedQuestionsHandler.js","nhs/views/BuilderShowcaseRedesign/Sections/builderShowcaseState.js","../../Default/js/modules/eventBus.js","nhs/views/BuilderShowcaseRedesign/Sections/builderShowcaseObserver.js","../../default/js/modules/event.js","nhs/views/BuilderShowcaseRedesign/Sections/searchBoxHandler.js","nhs/views/BuilderShowcaseRedesign/Sections/dependenciesLoader.js","nhs/views/BuilderShowcaseRedesign/Sections/favoritesLoader.js","modules/analyticsHelper.js","nhs/views/BuilderShowcaseRedesign/Sections/longTextHandler.js","nhs/views/BuilderShowcaseRedesign/Sections/builderShowcaseReviewsStarFilterHandler.js","modules/searchTypeHelper.js","nhs/views/BuilderShowcaseRedesign/Initializers/aboutInitializer.js","nhs/views/BuilderShowCaseRedesign/ShowAbout.js","../../../../../../../../../../module-insertRequire.js"],"names":["define","document","querySelectorAll","forEach","question","addEventListener","event","isOpen","target","closest","open","element","status","setAttribute","toggleQuestionState","pageData","JSON","parse","querySelector","innerHTML","partnerElement","builderShowcaseData","searchParameters","Adult","AgeRestricted","Bathrooms","Bedrooms","BrandId","Brands","CommName","CommunityStatus","ComingSoon","Custom","CustomResults","ExcludeBrandsFromResults","ExcludeRegularComms","Gated","GolfCourse","Green","Qmi","HomeStatus","HotDeals","IncludeMpc","LuxuryHomes","Mfr","MultiFamily","NatureAreas","NoBoyl","NumStory","OriginLat","OriginLng","PartnerId","Parks","Pool","PriceHigh","PriceLow","SchoolDistrictIds","SingleFamily","Sports","SqFtHigh","SqFtLow","SrpType","Views","Waterfront","Garages","LivingAreas","Stories","MasterBedLocation","CommId","HasRVGarage","MarketId","State","MarketName","WebApiSearchType","data","locations","LocationsSection","parterId","value","Latitude","Longitude","Zoom","ZoomLevelToUse","PreSelectedMarket","Id","Name","StateAbbr","getState","Object","assign","getParameters","setSearchParamsAttributes","object","objectEntries","entries","i","length","setData","global","NewHomeSource","previousEventBus","EventBus","this","observers","prototype","addObserver","topic","observer","Array","isArray","push","notifyObservers","totalCallbacks","fn","update","removeObserver","index","indexOf","splice","noConflict","window","builderShowcaseState","eventBus","temporalState","onResize","commit","beforeMapResultsLoaded","afterMapResultsLoaded","OnSortByChanged","OnStarFilterChanged","OnPageSizeChanged","PaginationChanged","onReviewsSectionLoaded","galleryOpened","imageSelected","modalImageSelected","navigateToImage","navigateToModalImage","subscribe","setParameter","key","hasOwnProperty","call","setParameters","getParameter","state","getOriginalLatitude","parseFloat","getOriginalLongitude","getZoomLevel","onGalleryClosed","previousEvent","Event","addEvent","name","callback","processCallbacks","callbacks","bind","processEvents","events","processConfiguration","property","setter","elements","configuration","keys","clickElement","click","builderShowcaseObserver","marketsDropDownList","SearchBoxHandler","onMarketChanged","selectedOption","selectedIndex","updatedSearchParams","dataset","latitude","longitude","marketId","marketName","parseInt","zoomLevel","optionSelected","googleAnalyticsEvent","eventType","eventName","params","click_target","search_value","body","dispatchEvent","CustomEvent","detail","trackMarketChangedEvent","text","proposedMarket","Markets","find","x","marketToSelect","from","options","removeEventListener","selected","updateMarketBasedOnMap","onMarketListChanged","init","dependenciesModuleName","require","removeAttribute","readyState","favoriteElements","initFavoritesComponent","currentTarget","stopPropagation","item","buttonTarget","favoritesInit","eventToDispatch","preventDefault","Init","pendingItems","cookie","match","arrayFavorites","map","id","parentElement","style","display","updateStyleFavoriteAnchor","factory","amd","analyticsHelper","exports","module","root","CONFIGURATION","constants","nhsTrackingId","get","getGoogleAnalyticsValues","trackers","ga","getAll","filter","values","j","addAnalyticsUrlParameters","urlToWork","url","analyticsValues","gaClientId","undefined","clientId","gaUserId","userId","res","longTextHandler","SetListenersLongText","showMoreLinks","linkClickHandler","isShowMore","getAttribute","readMoreDots","longText","showLess","more","rate","stars","localStorage","setItem","saveStarsToLocalStorage","searchTypeHelper","objectToReturn","functions","CommunityResults","nhs","cna","CondoDevelopments","HomeResults","Floorplans","Model","CondoTownHomes","BuilderResults","BoylResults","CustomHomes","CustomBuilders","ManufacturedResults","ManufacturedHomes","AmenityResults","srpFunction","freeze","getAllSrpFunctions","allFunctions","getAllFunctions","urlKey","location","href","currentFunctions","entry","localizedSrpFunction","getSrpFunction","allSrpFunctions","currentFunction","isCustomSearchType","srpType","isCustomBuilderSearchType","isManufacturedSearchType","updateUrlFunction","newFunction","currentSrpFunction","newUrl","replace","history","pushState","removeQueryParamFromUrl","parameter","thisParam","endsWith","getAllSrpTypes","getSrpType","srpFunctions","split","getSrpTypeFromUrl","isBuilderSearchType","isCommunitySearchType","isAnyCommunitySearchType","isHomeSearchType","isAnyHomeSearchType","isCustomOrManufacturedSearchType"],"mappings":"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","file":"../showabout-92a8813a67.js","sourceRoot":"..","sourcesContent":["/**\r\n* This component allows you to expand or contract long text when needed base on data attributes\r\n* data-show-more for the see more button and data-long-text for the text and data-read-more-dots for the dots\r\n*/\r\ndefine(\r\n 'frequentlyAskedQuestionsHandler',[],\r\n () => {\r\n 'use strict';\r\n\r\n function toggleQuestionState(element, status) {\r\n element.setAttribute('data-ga-event-label', status);\r\n }\r\n\r\n const questions = document.querySelectorAll('[data-faq-question]');\r\n questions.forEach((question) => {\r\n question.addEventListener('click', (event) => {\r\n const target = event.target.closest('details');\r\n // check if the element is open, then change the analytics event if needed.\r\n const isOpen = target.open;\r\n const status = isOpen ? 'Close' : 'Open';\r\n toggleQuestionState(question, status);\r\n });\r\n });\r\n }\r\n\r\n);\r\n\n","define('builderShowcaseState',[\r\n], () => {\r\n 'use strict';\r\n\r\n const 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 ComingSoon: false,\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 OriginLat: 0,\r\n OriginLng: 0,\r\n PartnerId: 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 SrpType: 'CommunityResults',\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 HasRVGarage: false,\r\n MarketId: 0,\r\n State: '',\r\n MarketName: '',\r\n WebApiSearchType: 'Map',\r\n };\r\n\r\n const pageData = JSON.parse(document.querySelector('[data-component=\"builder-showcase-data\"]').innerHTML);\r\n const partnerElement = document.querySelector('#nhs_partnerID');\r\n\r\n const builderShowcaseData = {\r\n searchParameters: defaultParameters,\r\n data: pageData,\r\n locations: pageData.LocationsSection,\r\n parterId: partnerElement.value,\r\n };\r\n\r\n if (pageData.LocationsSection) {\r\n builderShowcaseData.searchParameters.OriginLat = builderShowcaseData.locations.Latitude;\r\n builderShowcaseData.searchParameters.OriginLng = builderShowcaseData.locations.Longitude;\r\n builderShowcaseData.searchParameters.Zoom = builderShowcaseData.locations.ZoomLevelToUse;\r\n\r\n if (builderShowcaseData.locations.PreSelectedMarket) {\r\n builderShowcaseData.searchParameters.MarketId = builderShowcaseData.locations.PreSelectedMarket.Id;\r\n builderShowcaseData.searchParameters.MarketName = builderShowcaseData.locations.PreSelectedMarket.Name;\r\n builderShowcaseData.searchParameters.State = builderShowcaseData.locations.PreSelectedMarket.StateAbbr;\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n * getState: returns a copy of the BSP's current state.\r\n *\r\n */\r\n function getState() {\r\n return Object.assign({}, builderShowcaseData);\r\n }\r\n\r\n /**\r\n * @public\r\n * getParameters: returns a copy of the BSP's current search parameters.\r\n *\r\n */\r\n function getParameters() {\r\n return Object.assign({}, builderShowcaseData.searchParameters);\r\n }\r\n\r\n /**\r\n * @public\r\n * setSearchParamsAttributes: modifies a set of attributes in search params.\r\n * @param {object} object with a set of attributes to change on search params.\r\n */\r\n function setSearchParamsAttributes(object) {\r\n if (!object) {\r\n return;\r\n }\r\n\r\n const objectEntries = Object.entries(object);\r\n\r\n for (let i = 0; i < objectEntries.length; i += 1) {\r\n builderShowcaseData.searchParameters[objectEntries[i][0]] = objectEntries[i][1];\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n * setSearchParamsAttributes: modifies a set of attributes in the data.\r\n * @param {object} object with a set of attributes to change the data.\r\n */\r\n function setData(object) {\r\n if (!object) {\r\n return;\r\n }\r\n\r\n const objectEntries = Object.entries(object);\r\n\r\n for (let i = 0; i < objectEntries.length; i += 1) {\r\n builderShowcaseData.data[objectEntries[i][0]] = objectEntries[i][1];\r\n }\r\n }\r\n\r\n return {\r\n getState,\r\n getParameters,\r\n setSearchParamsAttributes,\r\n setData,\r\n };\r\n});\r\n\n","(function eventBus(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n const previousEventBus = global.NewHomeSource.EventBus;\r\n\r\n /**\r\n * @constructs NewHomeSource.EventBus\r\n */\r\n const EventBus = function EventBus() {\r\n this.observers = [];\r\n };\r\n\r\n /**\r\n * @public\r\n * addObserver: adds a new Observer to the Event bus for the given topic.\r\n *\r\n * @param {string} topic to identify the data needed for the observer.\r\n * @param {function} observer function to be called when the topic has changed.\r\n */\r\n EventBus.prototype.addObserver = function addObserver(topic, observer) {\r\n if (typeof observer !== 'function' || typeof topic !== 'string') {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(this.observers[topic])) {\r\n this.observers[topic] = [];\r\n }\r\n\r\n this.observers[topic].push(observer);\r\n };\r\n\r\n /**\r\n * @public\r\n * notifyObservers: notifies the obsevers listening to the given topic and pass the given data.\r\n *\r\n * @param {string} topic to identify the observers to be notified.\r\n * @param {object} data to be passed to the observers.\r\n */\r\n EventBus.prototype.notifyObservers = function notifyObservers(topic, data) {\r\n if (typeof topic !== 'string') {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(this.observers[topic])) {\r\n return;\r\n }\r\n\r\n const totalCallbacks = this.observers[topic].length;\r\n\r\n for (let i = 0; i < totalCallbacks; i += 1) {\r\n const fn = this.observers[topic][i];\r\n\r\n if (typeof fn.update === 'function') {\r\n fn.update(data, topic);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n * removeObserver: removes an Observer to the Event bus for the given topic.\r\n *\r\n * @param {string} topic to identify the data requested for the observer.\r\n * @param {function} observer function to be removed from the given topic.\r\n */\r\n EventBus.prototype.removeObserver = function removeObserver(topic, observer) {\r\n if (typeof observer !== 'function' || typeof topic !== 'string') {\r\n return;\r\n }\r\n\r\n if (!Array.isArray(this.observers[topic])) {\r\n return;\r\n }\r\n\r\n const index = this.observers[topic].indexOf(observer);\r\n\r\n if (index >= 0) {\r\n this.observers[topic].splice(index, 1);\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.FullImageViewer to the previous script.\r\n */\r\n EventBus.noConflict = function noConflict() {\r\n global.NewHomeSource.EventBus = previousEventBus;\r\n return EventBus;\r\n };\r\n\r\n global.NewHomeSource.EventBus = EventBus;\r\n}(window));\r\n\ndefine(\"eventBus\", function(){});\n\n","define('builderShowcaseObserver',[\r\n 'builderShowcaseState',\r\n 'eventBus'\r\n], (builderShowcaseState) => {\r\n 'use strict';\r\n\r\n const eventBus = new window.NewHomeSource.EventBus();\r\n const temporalState = builderShowcaseState.getState();\r\n\r\n /**\r\n * @public\r\n * beforeMapResultsLoaded: event to be executed before the map results are retrieved in a AJAX request.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function beforeMapResultsLoaded(data) {\r\n eventBus.notifyObservers('onBeforeMapResultsLoaded', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * OnSortByChanged: executed after sort by changes.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function OnSortByChanged(data) {\r\n eventBus.notifyObservers('OnSortByChanged', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * OnPageSizeChanged: executed after page size changes.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function OnPageSizeChanged(data) {\r\n eventBus.notifyObservers('OnPageSizeChanged', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * OnSortByChanged: executed after star filter changes.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function OnStarFilterChanged(data) {\r\n eventBus.notifyObservers('OnStarFilterChanged', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * OnSortByChanged: executed after star filter changes.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function PaginationChanged(data) {\r\n eventBus.notifyObservers('PaginationChanged', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * OnSortByChanged: executed after sort by changes.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function onReviewsSectionLoaded(data) {\r\n eventBus.notifyObservers('onReviewsSectionLoaded', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * afterMapResultsLoaded: event to be executed after the map results are retrieved in a AJAX request.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function afterMapResultsLoaded(data) {\r\n eventBus.notifyObservers('onAfterMapResultsLoaded', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * galleryOpened: event to be executed when the gallery is opened in the about page.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function galleryOpened(data) {\r\n eventBus.notifyObservers('onGalleryOpened', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * onResize: event to be executed whenever the device changes it's dimensions.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function onResize(data) {\r\n eventBus.notifyObservers('onResize', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * imageSelected: event to be executed whenever a new image is selected.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function imageSelected(data) {\r\n eventBus.notifyObservers('onImageSelected', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * modalImageSelected: event to be executed whenever a new modal image is selected.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function modalImageSelected(data) {\r\n eventBus.notifyObservers('onModalImageSelected', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * onGalleryClosed: event to be executed whenever a modal is closed.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function onGalleryClosed(data) {\r\n eventBus.notifyObservers('onGalleryClosed', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * navigateToImage: event to be executed whenever a navigation button is selected.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function navigateToImage(data) {\r\n eventBus.notifyObservers('onNavigateToImage', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * navigateToModalImage: event to be executed whenever a navigation modal button is selected.\r\n * @param {object} data collected from the module that trigger the event.\r\n */\r\n function navigateToModalImage(data) {\r\n eventBus.notifyObservers('onNavigateToModalImage', data);\r\n }\r\n\r\n /**\r\n * @public\r\n * subscribe: represents the way that modules uses for subscribing to the BSP publisher.\r\n * @param {string} topic represents the name of an event to be observed.\r\n * @param {function} observer represents a callback to be executed when the topic event gets triggered.\r\n */\r\n function subscribe(topic, observer) {\r\n eventBus.addObserver(topic, observer);\r\n }\r\n\r\n /**\r\n* @public\r\n* setSearchParamAttribute: sets a single search param value.\r\n* @param {string} key to access on search params object.\r\n* @param {object} value to change in a given attribute.\r\n*/\r\n function setSearchParamAttribute(key, value) {\r\n if (!key ||\r\n !value ||\r\n !Object.prototype.hasOwnProperty.call(temporalState.searchParameters, key)) {\r\n return;\r\n }\r\n\r\n temporalState.searchParameters[key] = value;\r\n }\r\n\r\n /**\r\n * @public\r\n * setSearchParamsAttributes: modifies a set of attributes in search params.\r\n * @param {object} object with a set of attributes to change on search params.\r\n */\r\n function setSearchParamsAttributes(object) {\r\n if (!object) {\r\n return;\r\n }\r\n\r\n const objectEntries = Object.entries(object);\r\n\r\n for (let i = 0; i < objectEntries.length; i += 1) {\r\n temporalState.searchParameters[objectEntries[i][0]] = objectEntries[i][1];\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n * setData: modifies a set of attributes in the data.\r\n * @param {object} object with a set of attributes to change on the data.\r\n */\r\n function setData(object) {\r\n if (!object) {\r\n return;\r\n }\r\n\r\n const objectEntries = Object.entries(object);\r\n\r\n for (let i = 0; i < objectEntries.length; i += 1) {\r\n temporalState.data[objectEntries[i][0]] = objectEntries[i][1];\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n * commit: changes the state object.\r\n */\r\n function commit() {\r\n builderShowcaseState.setSearchParamsAttributes(temporalState.searchParameters);\r\n builderShowcaseState.setData(temporalState.data);\r\n }\r\n\r\n /**\r\n * @public\r\n * getParameter: gets a single parameter on the search parameters.\r\n * @param {string} key to access the search param object.\r\n */\r\n function getParameter(key) {\r\n const state = builderShowcaseState.getState();\r\n if (Object.prototype.hasOwnProperty.call(state.searchParameters, key)) {\r\n return state[key];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * @public\r\n * getState: gets the full state of the bulder show case\r\n */\r\n function getState() {\r\n return builderShowcaseState.getState();\r\n }\r\n\r\n /**\r\n * @public\r\n * getOriginalLatitude: gets the latitude to be consiedered for BSP\r\n */\r\n function getOriginalLatitude() {\r\n const value = parseFloat(temporalState.searchParameters.OriginLat);\r\n return value;\r\n }\r\n\r\n /**\r\n * @public\r\n * getOriginalLongitude: gets the longitud to be consiedered for BSP\r\n */\r\n function getOriginalLongitude() {\r\n const value = parseFloat(temporalState.searchParameters.OriginLng);\r\n return value;\r\n }\r\n\r\n /**\r\n * @public\r\n * getZoomLevel: gets the zoom level to use for BSP\r\n */\r\n function getZoomLevel() {\r\n return temporalState.searchParameters.Zoom;\r\n }\r\n\r\n /**\r\n * @public\r\n * getParameters: gets the full search parameter object\r\n */\r\n function getParameters() {\r\n return builderShowcaseState.getParameters();\r\n }\r\n\r\n /**\r\n * @public\r\n * getBrandId: gets the brand id from state\r\n */\r\n function getBrandId() {\r\n return temporalState.data.BrandId;\r\n }\r\n\r\n temporalState.searchParameters.PartnerId = temporalState.parterId;\r\n temporalState.searchParameters.BrandId = getBrandId();\r\n commit();\r\n\r\n window.addEventListener('resize', onResize);\r\n window.addEventListener('orientationchange', onResize);\r\n\r\n return {\r\n beforeMapResultsLoaded,\r\n afterMapResultsLoaded,\r\n OnSortByChanged,\r\n OnStarFilterChanged,\r\n OnPageSizeChanged,\r\n PaginationChanged,\r\n onReviewsSectionLoaded,\r\n galleryOpened,\r\n onResize,\r\n imageSelected,\r\n modalImageSelected,\r\n navigateToImage,\r\n navigateToModalImage,\r\n subscribe,\r\n commit,\r\n setParameter: setSearchParamAttribute,\r\n setParameters: setSearchParamsAttributes,\r\n getParameter,\r\n getParameters,\r\n getState,\r\n setData,\r\n getOriginalLatitude,\r\n getOriginalLongitude,\r\n getZoomLevel,\r\n onGalleryClosed,\r\n };\r\n});\r\n\n","(function event(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n const previousEvent = global.NewHomeSource.Event;\r\n\r\n /**\r\n * private\r\n * addEvent: appends a event listener to the given element.\r\n *\r\n * @param {string} name of the event being added.\r\n * @param {function} callback that is going to be executed.\r\n */\r\n function addEvent(name, callback) {\r\n this.addEventListener(name, callback, false);\r\n }\r\n\r\n /**\r\n * private\r\n * processCallbacks: loops through the callbacks that are going to be append.\r\n *\r\n * @param {HTMLElement} element that is going to listen for the event.\r\n * @param {string} name of the event being added.\r\n */\r\n function processCallbacks(element, name) {\r\n this.callbacks.forEach(addEvent.bind(element, name));\r\n }\r\n\r\n /**\r\n * private\r\n * processEvents: loops through the events that are going to be appended.\r\n *\r\n * @param {HTMLElement} element that is going to listen for the event.\r\n */\r\n function processEvents(element) {\r\n this.events.forEach(processCallbacks.bind(this, element));\r\n }\r\n\r\n /**\r\n * private\r\n * processConfiguration: loops through the configuration object in order to append the events.\r\n *\r\n * @param {string} property being processed.\r\n */\r\n function processConfiguration(property) {\r\n const setter = this[property];\r\n const elements = global.document.querySelectorAll(setter.elements);\r\n\r\n elements.forEach(processEvents.bind(setter));\r\n }\r\n\r\n /**\r\n * @constructs NewHomeSource.Event\r\n *\r\n * @param {object} configuration events that are going to be attached.\r\n */\r\n function Event(configuration) {\r\n Object.keys(configuration).forEach(processConfiguration.bind(configuration));\r\n }\r\n\r\n /**\r\n * @public\r\n *\r\n * clickElement: trigger click element on the document\r\n *\r\n * @param {object} element to click.\r\n */\r\n Event.clickElement = function clickElement (element) {\r\n if (element) {\r\n element.click();\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.FullImageViewer to the previous script.\r\n */\r\n Event.noConflict = function noConflict() {\r\n global.NewHomeSource.Event = previousEvent;\r\n return Event;\r\n };\r\n\r\n global.NewHomeSource.Event = Event;\r\n}(window));\r\n\ndefine(\"event\", function(){});\n\n","define(\r\n 'searchBoxHandler',[\r\n 'builderShowcaseObserver',\r\n 'event'\r\n ],\r\n (builderShowcaseObserver) => {\r\n 'use strict';\r\n\r\n const marketsDropDownList = document.querySelector('[data-component=\"markets-list\"]');\r\n\r\n function SearchBoxHandler() {\r\n }\r\n\r\n /**\r\n * @private\r\n * trackMarketChangedEvent: tracks the event when the marked changed.\r\n * @param {string} optionSelected market text that was selected.\r\n */\r\n function trackMarketChangedEvent(optionSelected) {\r\n const googleAnalyticsEvent = {\r\n eventType: 'GA4Event',\r\n eventName: 'searchterm_events',\r\n params: {\r\n click_target: 'BSP about logo search tab',\r\n search_value: optionSelected\r\n }\r\n };\r\n\r\n document.body.dispatchEvent(new CustomEvent('trackOnDemandEvent', {\r\n detail: {\r\n data: googleAnalyticsEvent\r\n }\r\n }));\r\n }\r\n\r\n /**\r\n * @private\r\n * onMarketChanged: triggers the on change of the markets list\r\n *\r\n */\r\n function onMarketChanged() {\r\n const selectedOption = marketsDropDownList[marketsDropDownList.selectedIndex];\r\n const newLatitude = selectedOption.dataset.latitude;\r\n const newLongitude = selectedOption.dataset.longitude;\r\n const marketId = selectedOption.dataset.marketId;\r\n const marketName = selectedOption.dataset.marketName;\r\n const marketState = selectedOption.dataset.state;\r\n const zoom = parseInt(selectedOption.dataset.zoomLevel, 10);\r\n const updatedSearchParams = {\r\n OriginLat: newLatitude,\r\n OriginLng: newLongitude,\r\n MarketId: marketId,\r\n MarketName: marketName,\r\n State: marketState,\r\n Zoom: zoom,\r\n };\r\n const selectedMarketOptionText = selectedOption.text;\r\n\r\n trackMarketChangedEvent(selectedMarketOptionText);\r\n builderShowcaseObserver.setParameters(updatedSearchParams);\r\n builderShowcaseObserver.commit();\r\n const state = builderShowcaseObserver.getState();\r\n state.proposedMarket = state.locations.Markets.find((x) => x.Id === selectedOption.dataset.marketId);\r\n builderShowcaseObserver.setData(state);\r\n builderShowcaseObserver.commit();\r\n builderShowcaseObserver.beforeMapResultsLoaded(state);\r\n }\r\n\r\n /**\r\n * @private\r\n * updateMarketBasedOnMap: updates market list with a market near the area of current map\r\n * @param {object} proposedMarket to be selected.\r\n *\r\n */\r\n function updateMarketBasedOnMap(proposedMarket) {\r\n let marketToSelect = null;\r\n\r\n if (proposedMarket) {\r\n const marketOptions = Array.from(marketsDropDownList.options);\r\n marketToSelect = marketOptions.find((x) => x.dataset.marketId === proposedMarket.Id);\r\n }\r\n\r\n marketsDropDownList.removeEventListener('change', onMarketChanged);\r\n marketsDropDownList[marketsDropDownList.selectedIndex].selected = '';\r\n if (marketToSelect) {\r\n marketToSelect.selected = 'selected';\r\n } else {\r\n marketsDropDownList[0].selected = 'selected';\r\n }\r\n marketsDropDownList.addEventListener('change', onMarketChanged);\r\n }\r\n\r\n /**\r\n * @public\r\n * update: function for receiving notifications about state changes\r\n * @param {object} data information that was changed.\r\n *\r\n */\r\n SearchBoxHandler.update = function updateSearchBoxValue(data) {\r\n updateMarketBasedOnMap(data.proposedMarket);\r\n };\r\n\r\n const events = {\r\n onMarketListChanged: {\r\n callbacks: [onMarketChanged],\r\n elements: '[data-component=\"markets-list\"]',\r\n events: ['change'],\r\n },\r\n };\r\n\r\n window.NewHomeSource.Event(events);\r\n builderShowcaseObserver.subscribe('onBeforeMapResultsLoaded', SearchBoxHandler);\r\n }\r\n);\r\n\n","define(\r\n 'dependenciesLoader',[],\r\n () => {\r\n 'use strict';\r\n\r\n const marketsDropDownList = document.querySelector('[data-component=\"markets-list\"]');\r\n\r\n /**\r\n * @private\r\n * initMap: loads the interactive map\r\n *\r\n */\r\n function init() {\r\n const dependenciesModuleName = document.querySelector('[data-ismobiledevice=\"true\"]')\r\n ? 'builderShowcaseSectionsUtilsMobile'\r\n : 'builderShowcaseSectionsUtilsDesktop';\r\n\r\n require([dependenciesModuleName]);\r\n if (marketsDropDownList) {\r\n marketsDropDownList.removeAttribute('disabled');\r\n }\r\n }\r\n\r\n if (document.readyState === 'complete') {\r\n init();\r\n } else {\r\n window.addEventListener('load', init);\r\n }\r\n }\r\n);\r\n\n","define(\r\n 'favoritesLoader',[],\r\n () => {\r\n 'use strict';\r\n\r\n const favoriteElements = document.querySelectorAll('[data-favorite-trigger]');\r\n\r\n /*\r\n * We need to define the event name for mobile and desktop because we need to dispatch the event\r\n * after loading the favorites js resources, also favorites js works with mousedown for desktop and click\r\n * for mobile.\r\n *\r\n * Example desktop: user clicks on favorites button -> load the favorites js ->\r\n * we dispatch mousedown event -> favorites js working the event\r\n * Example mobile: user touch the favorites button -> load the favorites js ->\r\n * we dispatch click event -> favorites js working the event\r\n *\r\n * Notes: The reason to not use mouseover is that for mobile not working as expected because the\r\n * mouse over event needs to press the screen and this dispatch the touch start event first, and this\r\n * not working in the same way on desktop, desktop just needs to pass the pointer over the button.\r\n */\r\n const isTouchScreen = Object.prototype.hasOwnProperty.call(window, 'ontouchstart');\r\n const eventName = isTouchScreen ? 'click' : 'mousedown';\r\n\r\n /**\r\n * @private\r\n * initFavoritesComponent: inits the Favorites component on the title section\r\n */\r\n\r\n function initFavoritesComponent(event) {\r\n if (!event && !event.currentTarget) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n\r\n favoriteElements.forEach((item) => {\r\n item.removeEventListener(eventName, initFavoritesComponent);\r\n });\r\n\r\n const buttonTarget = event.currentTarget;\r\n\r\n require(\r\n ['favoritesInit'],\r\n (favoritesInit) => {\r\n favoritesInit.init();\r\n\r\n const eventToDispatch = new Event(eventName);\r\n buttonTarget.dispatchEvent(eventToDispatch);\r\n }\r\n );\r\n\r\n event.preventDefault();\r\n }\r\n\r\n /**\r\n * @private\r\n * Init: update Styles\r\n */\r\n function updateStyleFavoriteAnchor() {\r\n const pendingItems = document.cookie.match(/pendingSaveItem=([^;]+)/);\r\n const cookieFavorites = pendingItems ? JSON.parse(pendingItems[1]) : [];\r\n const arrayFavorites = cookieFavorites.map((item) => JSON.parse(item).id);\r\n favoriteElements.forEach((item) => {\r\n const itemIndex = arrayFavorites.indexOf(item.dataset.id);\r\n if (itemIndex >= 0) {\r\n const anchorSaved = item.parentElement.querySelector('.nhs_favSaved');\r\n anchorSaved.style.display = 'block';\r\n\r\n const anchorUnSave = item.parentElement.querySelector('.nhs_favUnsave');\r\n anchorUnSave.style.display = 'none';\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n * Init: Init the component\r\n */\r\n\r\n function Init() {\r\n favoriteElements.forEach((item) => {\r\n item.addEventListener(eventName, initFavoritesComponent);\r\n });\r\n updateStyleFavoriteAnchor();\r\n }\r\n\r\n if (document.readyState === 'complete') {\r\n Init();\r\n } else {\r\n window.addEventListener('load', Init);\r\n }\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 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","/**\r\n* This component allows you to expand or contract long text when needed base on data attributes\r\n* data-show-more for the see more button and data-long-text for the text and data-read-more-dots for the dots\r\n*/\r\ndefine(\r\n 'longTextHandler',[\r\n 'builderShowcaseObserver',\r\n 'i18n!nls/res',\r\n 'event',\r\n ],\r\n (\r\n builderShowcaseObserver,\r\n res\r\n ) => {\r\n 'use strict';\r\n\r\n /**\r\n * @constructor\r\n * This component handles the long text see more see less text toggles between the short and long version.\r\n *\r\n */\r\n function longTextHandler() {\r\n }\r\n\r\n /**\r\n * @private\r\n * SetListenersLongText: set listeners for long text.\r\n *\r\n */\r\n function SetListenersLongText() {\r\n const showMoreLinks = document.querySelectorAll('[data-show-more]');\r\n\r\n if (!showMoreLinks || !showMoreLinks.length) {\r\n return;\r\n }\r\n\r\n const linkClickHandler = function () {\r\n const isShowMore = this.getAttribute('data-show-more') === '0';\r\n const readMoreDots = this.parentElement.querySelector('[data-read-more-dots]');\r\n const longText = this.parentElement.querySelector('[data-long-text]');\r\n if (isShowMore) {\r\n this.setAttribute('data-show-more', 1);\r\n this.style.display = 'block';\r\n this.innerHTML = res.showLess;\r\n\r\n readMoreDots.style.display = 'none';\r\n longText.style.display = 'inline';\r\n } else {\r\n this.setAttribute('data-show-more', 0);\r\n this.style.display = 'inline';\r\n this.innerHTML = res.more;\r\n\r\n readMoreDots.style.display = 'inline';\r\n longText.style.display = 'none';\r\n }\r\n };\r\n\r\n for (let i = 0; i < showMoreLinks.length; i += 1) {\r\n showMoreLinks[i].addEventListener('click', linkClickHandler);\r\n }\r\n }\r\n\r\n /**\r\n * @public\r\n * update: function for receiving notifications about state changes\r\n *\r\n */\r\n longTextHandler.update = function SetListeners() {\r\n SetListenersLongText();\r\n };\r\n\r\n SetListenersLongText();\r\n builderShowcaseObserver.subscribe('onReviewsSectionLoaded', longTextHandler);\r\n }\r\n\r\n);\r\n\n","define(\r\n 'builderShowcaseReviewsStarFilterHandler',[],\r\n () => {\r\n 'use strict';\r\n\r\n /**\r\n * Used to save the selected stars filter into local storage\r\n * @param {*} stars the selected category.\r\n */\r\n function saveStarsToLocalStorage(stars) {\r\n if (!localStorage) {\r\n return;\r\n }\r\n\r\n localStorage.setItem('selectedStars', stars);\r\n }\r\n\r\n /**\r\n * set stars listener\r\n * */\r\n function setStarsHandlerListener(event) {\r\n if (!event.target) {\r\n return;\r\n }\r\n\r\n let target = event.target;\r\n\r\n if (!event.target.dataset.rate) {\r\n target = target.closest('[data-component=\"filter-by-star\"]');\r\n }\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const stars = target.dataset.rate;\r\n saveStarsToLocalStorage(stars);\r\n }\r\n\r\n document.body.addEventListener('click', setStarsHandlerListener);\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","/*\r\n * Inits the builder showcase about page\r\n */\r\ndefine(\r\n 'aboutInitializer',[\r\n 'frequentlyAskedQuestionsHandler',\r\n 'searchBoxHandler',\r\n 'dependenciesLoader',\r\n 'favoritesLoader',\r\n 'analyticsHelper',\r\n 'longTextHandler',\r\n 'builderShowcaseReviewsStarFilterHandler',\r\n 'searchTypeHelper'\r\n ],\r\n () => {\r\n 'use strict';\r\n }\r\n);\r\n\n","require(\r\n [\r\n 'aboutInitializer',\r\n ]\r\n);\r\n\ndefine(\"nhs/views/BuilderShowCaseRedesign/ShowAbout\", function(){});\n\n","\nrequire([\"nhs/views/BuilderShowCaseRedesign/ShowAbout\"]);\n"]}