{"version":3,"sources":["ElementsComparer.js","homesSectionSorter.b1.js"],"names":["$","nll","doc","document","extendDefaults","out","i","argumentsLength","arguments","length","args","key","hasOwnProperty","getLen","s","l","undefined","isValidFunction","defaultSort","a","b","naturalSort","x","chunkify","t","j","tz","y","n","charAt","charCodeAt","m","aa","bb","c","Number","d","attachBind","sort","trigger","event","slice","call","querySelectorAll","map","e","addEventListener","bindCriterias","attrs","orders","functions","order","criterias","len","ordLen","funcLen","ord","toLowerCase","func","push","getElementsToSort","selector","filters","f","style","display","hidden","getAttributes","domElement","attr","caseSensitive","val","innerText","textContent","getAttribute","applyToDom","elementsSorted","isDesc","parent","parentNode","insertBefore","firstChild","sortElements","elements","onCompare","sortFunc","isToggle","start","end","elemLen","elementsMap","added","v","attrA","attrB","sortBy","reverse","element","Compare","settings","instance","this","options","defaults","page","size","demand","orderListToMatch","matchedHomes","elementsToSort","sortedMatchedHomes","keyName","toSort","matchHomesCounts","filter","dataset","isMatchingHome","sorted","elementsForDom","concat","prototype","attrOrd","attrFunc","attrSort","toggle","beforeCompare","afterCompare","onError","window","global","cardType","customSort","homeTabsSection","querySelector","tabsElements","allHomesTab","modelHomeTab","availableNowTab","nowBuildingTab","readyToBuildTab","luxuryHomeTab","matchingHomes","getElementById","tabKeys","Object","keys","homeList","homesContainer","currentCardsfiltered","cardTypeConst","getSelectedBuilderFilterIds","selectedBuilderIds","builderFilters","selectedBuilders","filterElements","isFilteredHome","homeElem","homeStatus","selectedBuilderFilterIds","status","matchesTab","luxury","homeExistsInTabFilter","homeExistsInBuilderFilter","indexOf","builderId","hideElementsFromHomeList","listHome","displaySeeMore","elementsVisible","cardsToDisable","Array","forEach","ele","setAttribute","hideAllHomeCards","currentHome","removeAttribute","seeMoreElement","openHomeCard","target","homeCard","closest","link","location","href","tab","currentActiveElement","classList","remove","add","active","updateHomesAndPlansSection","toString","getListFromTab","cards","seeMoreButton","onclick","allHomes","allHomesShown","hiddenHomes","offsetParent","seeMoreButtonElement","changeEvent","Event","dispatchEvent","totalItems","Status","Price","Name","Size","value","sortHomesAndPlans","setUp"],"mappings":"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","file":"../homesandplans-76f740939f.b1.min.js","sourceRoot":"..","sourcesContent":["(function ($) {\r\n \"use strict\";\r\n var nll = null;\r\n var doc = document;\r\n var asc = \"asc\";\r\n var desc = \"desc\";\r\n\r\n // Vainilla JS function to merge the contents of two or more objects \r\n // together into the first object as jQuery.extend()\r\n // Taken from: http://youmightnotneedjquery.com/\r\n function extendDefaults(out) {\r\n out = out || {};\r\n\r\n for (var i = 1,\r\n\t\t\t\t argumentsLength = arguments.length; i < argumentsLength; i++) {\r\n var args = arguments[i];\r\n if (args) {\r\n for (var key in args) {\r\n args.hasOwnProperty(key) && (out[key] = args[key]);\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n };\r\n\r\n function getLen(s, l) {\r\n return undefined !== s && nll !== s ? s.length : l;\r\n };\r\n\r\n function isValidFunction(s) {\r\n return \"function\" === typeof (s) ? s : nll;\r\n };\r\n\r\n function defaultSort(a, b) {\r\n return a > b ? 1 : -1;\r\n }\r\n\r\n // Taken from http://www.davekoelle.com/files/alphanum.js\r\n function naturalSort(a, b) {\r\n var x = 0;\r\n\r\n function chunkify(t) {\r\n var tz = [];\r\n var y = -1;\r\n var n = 0;\r\n var i;\r\n var j;\r\n x = 0;\r\n\r\n while (i = (j = t.charAt(x++)).charCodeAt(0)) {\r\n var m = (i == 46 || (i >= 48 && i <= 57));\r\n\r\n if (m !== n) {\r\n tz[++y] = \"\";\r\n n = m;\r\n }\r\n\r\n tz[y] += j;\r\n }\r\n\r\n return tz;\r\n }\r\n\r\n var aa = chunkify(a);\r\n var bb = chunkify(b);\r\n\r\n for (x = 0; aa[x] && bb[x]; x++) {\r\n if (aa[x] !== bb[x]) {\r\n var c = Number(aa[x]), d = Number(bb[x]);\r\n\r\n if (c == aa[x] && d == bb[x]) {\r\n return c - d;\r\n } else {\r\n return (aa[x] > bb[x]) ? 1 : -1;\r\n }\r\n }\r\n }\r\n\r\n return aa.length - bb.length;\r\n }\r\n\r\n function validateOrderOption(order) {\r\n if (\"string\" !== typeof (order) || 0 >= order.length) {\r\n return asc;\r\n }\r\n\r\n order = order.toLowerCase();\r\n return order !== asc && order !== desc ? asc : order;\r\n };\r\n\r\n function attachBind(sort, trigger, event) {\r\n for (var i = 0, l = trigger.length; i < l; i++) {\r\n [].slice.call(doc.querySelectorAll(trigger[i]))\r\n .map(function (e) {\r\n e.addEventListener(event[i], sort);\r\n });\r\n };\r\n };\r\n\r\n function bindCriterias(attrs, orders, functions) {\r\n var criterias = [];\r\n\r\n if (\"undefined\" !== typeof (attrs)) {\r\n for (var i = 0,\r\n\t\t\t\t\t len = attrs.length,\r\n\t\t\t\t\t ordLen = getLen(orders, -1),\r\n\t\t\t\t\t funcLen = getLen(functions, -1) ; i < len; i++, ordLen--) {\r\n var ord = 0 <= ordLen ? validateOrderOption(orders[i]) : asc;\r\n var func = 0 <= funcLen ? isValidFunction(functions[i]) : nll;\r\n\r\n criterias.push([attrs[i], ord, func]);\r\n }\r\n }\r\n\r\n return criterias;\r\n };\r\n\r\n function getElementsToSort(selector, filters) {\r\n if (\"string\" === typeof (selector) && 0 < selector.length) {\r\n var f = filters ? filters.length : 0;\r\n\r\n return [].slice.call(doc.querySelectorAll(selector)).map(function (e) {\r\n e.style.display = \"\";\r\n e.hidden = false;\r\n\r\n for (var i = 0; i < f ; i++) {\r\n if (!filters[i](e)) {\r\n e.style.display = \"none\";\r\n break;\r\n }\r\n }\r\n\r\n return e;\r\n });\r\n }\r\n };\r\n\r\n function getAttributes(domElement, attr, caseSensitive) {\r\n var val;\r\n\r\n if (\"value\" === attr) {\r\n return (val = domElement.innerText || domElement.textContent) ? (caseSensitive ? val : val.toLowerCase()) : \"\";\r\n }\r\n\r\n val = domElement.getAttribute(attr);\r\n return attr ? (val ? (caseSensitive ? val : val.toLowerCase()) : \"\") : domElement;\r\n }\r\n\r\n function applyToDom(elementsSorted, isDesc) {\r\n elementsSorted.map(function (e) {\r\n if (e) {\r\n var parent = e.parentNode;\r\n parent.insertBefore(e, isDesc ? null : parent.firstChild);\r\n }\r\n });\r\n }\r\n\r\n function sortBy(a, b, criterias, caseSensitive, sortFunc) {\r\n for (var i = 0,\r\n\t\t\t l = getLen(criterias, 0) ; i < l; i++) {\r\n var c = criterias[i];\r\n var attr = c[0];\r\n var ord = c[1];\r\n var func = isValidFunction(c[2]);\r\n var attrA = getAttributes(a, attr, caseSensitive);\r\n var attrB = getAttributes(b, attr, caseSensitive);\r\n\r\n if (attrA !== attrB && (attrA = (func !== nll) ? func(attrA, attrB) : sortFunc(attrA, attrB), 0 !== attrA)) {\r\n return ord === desc ? attrA : -1 * attrA;\r\n }\r\n }\r\n }\r\n\r\n function sortElements(elements, criterias, caseSensitive, onCompare, sortFunc, isToggle, start, end) {\r\n var elemLen = getLen(elements, 0);\r\n var elementsMap = [];\r\n var elementsSorted = [];\r\n var added = 0;\r\n var i;\r\n\r\n if (0 < elemLen) {\r\n for (i = 0; i < elemLen; i++) {\r\n elementsMap.push({\r\n i: i,\r\n v: elements[i]\r\n });\r\n }\r\n\r\n elementsMap.sort(function (a, b) {\r\n return sortBy(a.v, b.v, criterias, caseSensitive, sortFunc);\r\n });\r\n\r\n if (desc === criterias[0][1] || elemLen !== end)\r\n elementsMap.reverse();\r\n\r\n elementsMap.map(function (e) {\r\n var element = elements[e.i];\r\n\r\n (\"none\" !== element.style.display && start && end) && (added++, added >= start && added <= end || (element.style.display = \"none\"));\r\n isValidFunction(onCompare) && onCompare(element);\r\n elementsSorted.push(element);\r\n });\r\n\r\n return elementsSorted;\r\n }\r\n }\r\n\r\n /**\r\n\t* @constructor\r\n\t*/\r\n function Compare(settings) {\r\n var instance = this;\r\n var options = instance.defaults;\r\n\r\n arguments[0] && \"object\" === typeof (arguments[0]) && (options = extendDefaults({}, instance.defaults, settings));\r\n\r\n instance.page = options[\"page\"];\r\n instance.size = options[\"size\"];\r\n instance.sort = function (demand, orderListToMatch) {\r\n var start = nll;\r\n var end = nll;\r\n var sortedMatchedHomes = [];\r\n var keyName = options[\"attrSort\"]();\r\n var filters = options[\"filters\"][keyName];\r\n var criterias = bindCriterias(options[\"attr\"][keyName], options[\"attrOrd\"][keyName], options[\"attrFunc\"][keyName]);\r\n var matchedHomes = [];\r\n var toSort = [];\r\n var elementsToSort = [];\r\n var matchHomesCounts = 0;\r\n\r\n if (0 >= criterias.length) {\r\n return;\r\n }\r\n\r\n if (orderListToMatch) {\r\n toSort = orderListToMatch;\r\n } else {\r\n toSort = getElementsToSort(options[\"selector\"], filters);\r\n }\r\n\r\n elementsToSort = toSort.filter(function (element) {\r\n return element.dataset.isMatchingHome === \"false\";\r\n });\r\n\r\n matchedHomes = toSort.filter(function (element) {\r\n return element.dataset.isMatchingHome === \"true\";\r\n });\r\n\r\n\r\n (instance.size && instance.page && (end = instance.size * instance.page, start = end - instance.size + 1));\r\n instance.isToggle = !0 === demand ? !1 : instance.keyName === keyName && options[\"toggle\"] && !instance.isToggle;\r\n instance.keyName = keyName;\r\n\r\n if (matchedHomes) {\r\n sortedMatchedHomes = sortElements(matchedHomes, criterias, options[\"caseSensitive\"], options[\"onCompare\"],\r\n options[\"naturalSort\"] ? naturalSort : defaultSort, instance.isToggle, start, end);\r\n matchHomesCounts = matchedHomes.length;\r\n }\r\n\r\n var isDesc = desc === criterias[0][1] || getLen(elementsToSort, 0) !== end;\r\n var sorted = sortElements(elementsToSort, criterias, options[\"caseSensitive\"], options[\"onCompare\"],\r\n options[\"naturalSort\"] ? naturalSort : defaultSort, instance.isToggle, start, end - matchHomesCounts);\r\n var elementsForDom = sortedMatchedHomes ? sortedMatchedHomes.concat(sorted) : sorted ;\r\n\r\n if (elementsForDom) {\r\n applyToDom(elementsForDom, isDesc);\r\n }\r\n \r\n if (typeof options[\"afterCompare\"] === \"function\") options[\"afterCompare\"]();\r\n };\r\n\r\n attachBind(instance.sort, options[\"trigger\"], options[\"event\"]);\r\n }\r\n\r\n Compare.prototype.defaults = {\r\n \"selector\": nll,\r\n \"attr\": {},\r\n \"attrOrd\": {},\r\n \"attrFunc\": {},\r\n \"attrSort\": function () { return \"defaults\"; },\r\n \"filters\": {},\r\n \"trigger\": nll,\r\n \"event\": nll,\r\n \"caseSensitive\": !1,\r\n \"naturalSort\": !1,\r\n \"toggle\": !1,\r\n \"beforeCompare\": nll,\r\n \"onCompare\": nll,\r\n \"afterCompare\": nll,\r\n \"onError\": nll,\r\n \"size\": nll,\r\n \"page\": nll\r\n };\r\n\r\n $[\"Compare\"] = $[\"compare\"] = function () {\r\n return new Compare(arguments[0]);\r\n };\r\n}(window));\r\n","(function homesSectionSorter(global) {\r\n 'use strict';\r\n\r\n let cardType = 0;\r\n const numberOfCards = 9;\r\n let customSort = null;\r\n\r\n let homeTabsSection = document.querySelector('#nhs_DetailTabBar');\r\n const tabsElements = {\r\n allHomesTab: homeTabsSection.querySelector('[data-allHomes]'),\r\n modelHomeTab: homeTabsSection.querySelector('[data-allModelHomes]'),\r\n availableNowTab: homeTabsSection.querySelector('[data-availableNowHomes]'),\r\n nowBuildingTab: homeTabsSection.querySelector('[data-nowBuildingHomes]'),\r\n readyToBuildTab: homeTabsSection.querySelector('[data-readyToBuildHomes]'),\r\n luxuryHomeTab: homeTabsSection.querySelector('[data-luxuryHomes]'),\r\n matchingHomes: document.getElementById('matchingHomesTab')\r\n };\r\n const tabKeys = Object.keys(tabsElements);\r\n let homeList = document.querySelectorAll('[data-home-section-item]');\r\n const homesContainer = document.querySelector('[data-homes-container]');\r\n let currentCardsfiltered = homeList.length;\r\n const cardTypeConst = {\r\n allHomesTab: 0,\r\n modelHomeTab: 1,\r\n availableNowTab: 2,\r\n nowBuildingTab: 3,\r\n readyToBuildTab: 4,\r\n luxuryHomeTab: 5,\r\n matchingHomes: 6\r\n };\r\n\r\n /**\r\n * Hides all home cards\r\n */\r\n function hideAllHomeCards() {\r\n let cardsToDisable = document.querySelectorAll('[data-home-section-item]');\r\n cardsToDisable = Array.prototype.slice.call(cardsToDisable);\r\n cardsToDisable.forEach(function (ele) {\r\n const element = ele;\r\n element.setAttribute('hidden', '');\r\n });\r\n }\r\n\r\n function updateHomesAndPlansSection(orderListToMatch) {\r\n customSort.sort(true, orderListToMatch);\r\n }\r\n\r\n /**\r\n * Gets a list of the builder ids selected as filters.\r\n * If no filters was selected, returns all builder ids, since we want to display all results in that case.\r\n */\r\n function getSelectedBuilderFilterIds() {\r\n let selectedBuilderIds = [];\r\n const builderFilters = document.querySelectorAll('[data-builder-filter]');\r\n\r\n if (builderFilters) {\r\n const selectedBuilders = document.querySelectorAll('[data-builder-filter]:checked');\r\n let filterElements;\r\n\r\n if (selectedBuilders.length === 0) {\r\n filterElements = builderFilters;\r\n } else {\r\n filterElements = selectedBuilders;\r\n }\r\n\r\n for (let i = 0; i < filterElements.length; i += 1) {\r\n selectedBuilderIds.push(filterElements[i].getAttribute('data-builder-id'));\r\n }\r\n }\r\n\r\n return selectedBuilderIds;\r\n }\r\n\r\n /**\r\n * Checks if a home in the Homes & Plans section should be displayed,\r\n * according with the current builder and tab filters selected.\r\n * @param {HTMLElement} home The home card element to check.\r\n * @param {number} homeStatus The status code of the selected tab.\r\n * @returns True if should be displayed, false otherwise.\r\n */\r\n function isFilteredHome(homeElem, homeStatus) {\r\n const selectedBuilderFilterIds = getSelectedBuilderFilterIds();\r\n const status = +homeStatus;\r\n const matchesTab = status === 0 ||\r\n (+homeElem.dataset.status) === status ||\r\n (status === 5 && (+homeElem.dataset.luxury) === 1) ||\r\n (status === 6 && homeElem.dataset.isMatchingHome === 'true');\r\n\r\n // builder filters only exists in MPC pages, so have to we check is they exist\r\n const homeExistsInTabFilter = selectedBuilderFilterIds.length === 0 &&\r\n matchesTab;\r\n const homeExistsInBuilderFilter = selectedBuilderFilterIds.length > 0 &&\r\n selectedBuilderFilterIds.indexOf(homeElem.dataset.builderId) > -1 &&\r\n matchesTab;\r\n\r\n return homeExistsInTabFilter || homeExistsInBuilderFilter;\r\n }\r\n\r\n function hideElementsFromHomeList(listHome, homeStatus) {\r\n let displaySeeMore = false;\r\n let elementsVisible = 0;\r\n\r\n hideAllHomeCards();\r\n\r\n for (let i = 0; i < listHome.length; i += 1) {\r\n const currentHome = listHome[i];\r\n const displayHomeCard = isFilteredHome(currentHome, homeStatus);\r\n\r\n if (displayHomeCard) {\r\n if (elementsVisible === numberOfCards) {\r\n displaySeeMore = true;\r\n break;\r\n } else {\r\n elementsVisible += 1;\r\n currentHome.removeAttribute('hidden');\r\n }\r\n }\r\n }\r\n\r\n const seeMoreElement = document.getElementById('nhs_seeMore');\r\n\r\n if (seeMoreElement) {\r\n if (displaySeeMore) {\r\n seeMoreElement.removeAttribute('hidden');\r\n } else {\r\n seeMoreElement.setAttribute('hidden', '');\r\n }\r\n }\r\n }\r\n\r\n function getListFromTab(listHome, homeStatus) {\r\n let selectedBuilderFilterIds = getSelectedBuilderFilterIds();\r\n const list = listHome.filter(function (e) {\r\n if (selectedBuilderFilterIds) {\r\n return e.dataset.status === homeStatus.toString() &&\r\n selectedBuilderFilterIds.indexOf(e.dataset.builderId) > -1;\r\n }\r\n return e.dataset.status === homeStatus.toString();\r\n });\r\n return list;\r\n }\r\n\r\n function getMatchingList(listHome) {\r\n const list = listHome.filter(function (e) {\r\n return e.dataset.isMatchingHome === 'true';\r\n });\r\n return list;\r\n }\r\n\r\n function sortHomesAndPlans() {\r\n let len = document.querySelectorAll('#HomesAndPlans [data-home-section-item]').length;\r\n let size = numberOfCards;\r\n customSort = new global.Compare({\r\n totalItems: len,\r\n selector: 'div [data-home-section-item]:not([hidden])',\r\n attr: {\r\n Status: ['data-deal', 'data-status', 'data-price'],\r\n Price: ['data-price', 'data-name'],\r\n Name: ['data-name', 'data-price'],\r\n Size: ['data-bed', 'data-bath', 'data-garage', 'data-price']\r\n },\r\n attrOrd: {\r\n Status: ['desc', 'asc', 'desc'],\r\n Price: ['desc', 'asc'],\r\n Name: ['asc', 'desc'],\r\n Size: ['desc', 'desc', 'desc', 'desc']\r\n },\r\n attrSort: function () {\r\n return document.querySelector('[data-sort-options]').value;\r\n },\r\n trigger: ['[data-sort-options]'],\r\n caseSensitive: false,\r\n naturalSort: true,\r\n event: ['change'],\r\n page: 1,\r\n size: size\r\n });\r\n }\r\n\r\n function openHomeCard(event) {\r\n const target = event.target;\r\n const homeCard = target.closest('[data-home-section-item]');\r\n if (!homeCard) {\r\n return;\r\n }\r\n\r\n if (target.closest('[data-favorite-trigger]')) {\r\n return;\r\n }\r\n\r\n const link = homeCard.querySelector('[data-link]');\r\n window.location.href = link.href;\r\n }\r\n\r\n function setUp() {\r\n if (homeList) {\r\n homeList = Array.prototype.slice.call(homeList);\r\n hideElementsFromHomeList(homeList, cardTypeConst.allHomesTab);\r\n }\r\n\r\n if (!homeTabsSection) {\r\n return;\r\n }\r\n\r\n tabKeys.forEach(tab => {\r\n const element = tabsElements[tab];\r\n if (element) {\r\n element.addEventListener('click', function (event) {\r\n const currentActiveElement = homeTabsSection.querySelector('[data-active]');\r\n currentActiveElement.removeAttribute('data-active');\r\n currentActiveElement.classList.remove('nhs-c-button--tap-light-active');\r\n event.target.classList.add('nhs-c-button--tap-light-active');\r\n event.target.dataset.active = 'true';\r\n cardType = cardTypeConst[tab];\r\n hideElementsFromHomeList(homeList, cardTypeConst[tab]);\r\n let orderListToMatch = tab === 'matchingHomes' ? getMatchingList(homeList)\r\n : getListFromTab(homeList, cardTypeConst[tab]);\r\n updateHomesAndPlansSection(orderListToMatch);\r\n currentCardsfiltered = element.dataset.cards;\r\n });\r\n }\r\n });\r\n\r\n let seeMoreButton = document.getElementById('nhs_seeMore');\r\n if (seeMoreButton) {\r\n seeMoreButton.onclick = function () {\r\n let allHomes = document.querySelectorAll('[data-home-section-item]');\r\n let allHomesShown = [];\r\n let hiddenHomes = [];\r\n\r\n switch (cardType) {\r\n case 0: // All Homes Tab\r\n for (let i = 0; i < allHomes.length; i += 1) {\r\n if (allHomes[i].offsetParent === null &&\r\n hiddenHomes.length < 9 &&\r\n isFilteredHome(allHomes[i], cardType)) {\r\n hiddenHomes.push(allHomes[i]);\r\n allHomes[i].removeAttribute('hidden');\r\n }\r\n if (!allHomes[i].hidden) {\r\n allHomesShown.push(allHomes[i]);\r\n }\r\n }\r\n break;\r\n case 5: // Luxury Tab\r\n case 6: // Matching Homes Tab\r\n default: // Any other tab\r\n for (let i = 0; i < allHomes.length; i += 1) {\r\n if (allHomes[i].offsetParent === null &&\r\n hiddenHomes.length < numberOfCards &&\r\n isFilteredHome(allHomes[i], cardType)) {\r\n hiddenHomes.push(allHomes[i]);\r\n allHomes[i].removeAttribute('hidden');\r\n }\r\n if (!allHomes[i].hidden) {\r\n allHomesShown.push(allHomes[i]);\r\n }\r\n }\r\n }\r\n\r\n if (allHomesShown.length >= currentCardsfiltered) {\r\n const seeMoreButtonElement = document.getElementById('nhs_seeMore');\r\n\r\n if (seeMoreButtonElement) {\r\n seeMoreButtonElement.setAttribute('hidden', '');\r\n }\r\n }\r\n customSort.size += numberOfCards;\r\n let changeEvent = new Event(\"change\");\r\n document.querySelector('[data-sort-options]').dispatchEvent(changeEvent);\r\n };\r\n }\r\n homesContainer.addEventListener('click', openHomeCard);\r\n sortHomesAndPlans();\r\n }\r\n\r\n setUp();\r\n}(window));\r\n"]}