{"version":3,"file":"searchByBudgetChunk.js?v=23.134.0+20261102.30.bbbf8652390b5ce306040b1cece1df0dd99fac01&h=e40d011eddda42e66580","mappings":"gJAAe,MAAMA,EAYnB,cAXiB,KAAAC,MAAuB,CAAC,QAAS,UAAW,SAC5C,KAAAC,iBAAmB,IAAIC,IAmBvB,KAAAC,WAAa,K,UAC5BC,KAAKC,cAAgBC,SAASC,eAC5B,wBAEFH,KAAKI,aAAeF,SAASC,eAC3B,uBAEFH,KAAKK,uBAAyBH,SAASC,eAAe,kBACtDH,KAAKM,SAAWJ,SAASK,cAAc,gCACvCP,KAAKQ,0BAA4BN,SAASK,cACxC,kCAEFP,KAAKS,YAAcP,SAASQ,iBAC1B,6CAEFV,KAAKW,cAAiC,QAAlB,EAAAX,KAAKC,qBAAa,eAAEW,QAAQC,WAC1B,QAAlB,EAAAb,KAAKC,qBAAa,eAAEW,QAAQC,UAC5B,kBACJb,KAAKc,WAA2C,QAA9B,EAAAd,KAAKQ,iCAAyB,eAAED,cAAc,UAAU,EAqC3D,KAAAQ,iBAAmB,KAClCf,KAAKJ,MAAMoB,SAASC,IAClB,MAAMC,EAAchB,SAASC,eAC3Bc,EAAa,QAETE,EAAcjB,SAASC,eAC3Bc,EAAa,QAETG,EAAYlB,SAASC,eAAec,EAAa,cACvDC,SAAAA,EAAaG,iBAAiB,UAAU,KACtC,MAAOC,EAAkBC,GAAoBvB,KAAKwB,iBAChDN,EACAC,EACAC,GACA,EACAD,EAAYP,QAAQa,UAEtBP,EAAYQ,MAAQ1B,KAAK2B,yBAAyBL,GAG9CM,OAAOC,WAAWP,KAChBM,OAAOC,WAAWX,EAAYN,QAAQkB,WACxCF,OAAOC,WAAWN,KAChBK,OAAOC,WAAWV,EAAYP,QAAQa,YAG1CzB,KAAKC,cAAc8B,KAAO/B,KAAKgC,kBAC7Bf,EACAK,EACAC,G,IAINJ,SAAAA,EAAaE,iBAAiB,UAAU,KACtC,MAAOE,EAAkBD,GAAoBtB,KAAKwB,iBAChDL,EACAD,EACAE,GACA,EACAF,EAAYN,QAAQkB,UAEtBX,EAAYO,MAAQ1B,KAAK2B,yBAAyBJ,GAG9CK,OAAOC,WAAWP,KAChBM,OAAOC,WAAWX,EAAYN,QAAQkB,WACxCF,OAAOC,WAAWN,KAChBK,OAAOC,WAAWV,EAAYP,QAAQa,YAG1CzB,KAAKC,cAAc8B,KAAO/B,KAAKgC,kBAC7Bf,EACAK,EACAC,G,GAGJ,GACF,EAGa,KAAAU,iBAAmB,K,QACjB,QAAjB,EAAAjC,KAAKI,oBAAY,SAAEiB,iBAAiB,SAAS,KAC3CrB,KAAKJ,MAAMoB,SAASC,IAClBjB,KAAKkC,aAAajB,EAAW,GAC7B,IAEa,QAAjB,EAAAjB,KAAKI,oBAAY,SAAEiB,iBAAiB,YAAY,KAC9CrB,KAAKJ,MAAMoB,SAASC,IAClBjB,KAAKkC,aAAajB,EAAW,GAC7B,GACF,EAGa,KAAAkB,eAAiB,KAC5BnC,KAAKM,UAAYN,KAAKS,aACxBT,KAAKS,YAAYO,SAASoB,IACxBpC,KAAKqC,0BAA0BD,GAC/BpC,KAAKsC,sBAAsBF,EAAI,G,EA2FpB,KAAAG,gBAAkB,CACjCb,EACAc,EACAC,KAEA,MAAMC,EAAad,OAAOC,WAAWW,GAC/BG,EACJC,KAAKC,KAAKjB,OAAOC,WAAWH,GAASgB,GAAcA,EACrD,OAAOd,OAAOkB,MAAMH,GAAgBF,EAAeE,EAAaI,UAAU,EAG3D,KAAAb,aAAgBjB,IAC/BjB,KAAKC,cAAc8B,KAAO/B,KAAKW,aAC/BX,KAAKH,iBAAiBmD,QAEtB,MAAM9B,EAAchB,SAASC,eAC3Bc,EAAa,QAETE,EAAcjB,SAASC,eAC3Bc,EAAa,QAEfC,EAAYQ,MAAQ,GACpBP,EAAYO,MAAQ,EAAE,EAGP,KAAAM,kBAAoB,CACnCf,EACAa,EACAL,KAEA,IAAIwB,EAAcjD,KAAKW,aACvB,MAAMuC,EACU,SAAdjC,EAAwB,aAAeA,EAAa,aAChDkC,EAAcrB,EAAW,IAAML,EAQrC,OAPIzB,KAAKH,iBAAiBuD,OAAOnC,GAC/BjB,KAAKH,iBAAiBwD,IAAIpC,EAAYiC,EAAa,IAAMC,GAI3DF,GAAe,IAAMK,MAAMC,KAAKvD,KAAKH,iBAAiB2D,UAAUC,KAAK,KAE9DR,CAAW,EAGH,KAAAtB,yBAA4BD,IAC3C,MAAMgC,EAAa9B,OAAOC,WAAWH,EAAMiC,QAAQ,KAAM,KACzD,OAAO,IAAIC,KAAKC,aAAa,QAAS,CAAEC,MAAO,YAAaC,OAC1DL,EACD,EAvRD1D,KAAKD,aACLC,KAAKgE,kBACLhE,KAAKiC,mBACLjC,KAAKe,mBACLf,KAAKmC,iBACLnC,KAAKiE,aAAajE,KAAKc,WACzB,CAuBQ,eAAAkD,G,MACN,MAAME,EAAuB,QAAb,EAAAlE,KAAKM,gBAAQ,eAAEI,iBAAiB,MAChD,IAAK,IAAIyD,EAAI,EAAGA,GAAID,aAAO,EAAPA,EAASE,QAAQD,IAClCD,EAAQC,GAAGE,SAAS,GAAmBzD,QAAQ0D,sBAC9CH,EAAEpB,UAER,CAEQ,YAAAkB,CAAa7B,GACnB,MAAMnB,EAAamB,aAAG,EAAHA,EAAKmC,GAAGC,MAAM,KAAK,GACtCxE,KAAKH,iBAAiBmD,QACtB,MAAM9B,EAAchB,SAASC,eAC3Bc,EAAa,QAETE,EAAcjB,SAASC,eAC3Bc,EAAa,QAETG,EAAYlB,SAASC,eAAec,EAAa,cACvD,GAAIC,GAAeC,EAAa,CAC9B,MAAOG,EAAkBC,GAAoBvB,KAAKwB,iBAChDN,EACAC,EACAC,GACA,EACAD,EAAYP,QAAQa,UAEtBzB,KAAKC,cAAc8B,KAAO/B,KAAKgC,kBAC7Bf,EACAK,EACAC,E,CAGN,CAoFQ,yBAAAc,CAA0BD,GAChCA,EAAIf,iBAAiB,SAAUoD,IAC7B,IAAIC,GAAiB,EACrB1E,KAAKS,YAAYO,SAAQ,CAACoB,EAAKuC,KACzBvC,IAAQqC,EAAMG,SAChB5E,KAAKiE,aAAa7B,GAClBsC,EAAgBC,E,IAGhBD,GAAiB,IACnB1E,KAAKK,uBAAuBO,QAAQiE,eAClCH,EAAc3B,W,GAGtB,CAEQ,qBAAAT,CAAsBF,GAE5B,MACM0C,EAAkB,SAClBC,EAAkB,SAExB3C,EAAIf,iBAAiB,SAAUoD,IAC7B,MAAMO,EAAY5C,EAAI6C,aAAa,iBAC7BC,EAAUhF,SAASC,eAAe6E,GAClCG,EAAajF,SAASK,cAC1B,+BAAmBwE,KAAmBD,KAExCK,SAAAA,EAAYC,UAAUC,OAAOP,GAC7BI,SAAAA,EAASE,UAAUE,IAAIP,GACvBQ,YAAW,KACTL,SAAAA,EAASE,UAAUE,IAAIR,EAAgB,GACtC,EAAE,GAET,CAEQ,gBAAAtD,CACNgE,EACAC,EACArE,EACAsE,EACAC,GAEA,IAAIC,EAAmBJ,EAAY9D,MAAMiC,QAAQ,KAAM,IACnDkC,EAAmBJ,EAAY/D,MAAMiC,QAAQ,KAAM,IAuCvD,OAtCoB+B,EAChB9D,OAAOC,WAAW+D,GAAoBhE,OAAOC,WAAW8D,IACxD/D,OAAOC,WAAW+D,GAChBhE,OAAOC,WAAWgE,GACpBjE,OAAOC,WAAW+D,GAAoBhE,OAAOC,WAAW8D,IACxD/D,OAAOC,WAAW+D,GAChBhE,OAAOC,WAAWgE,KAEtBD,EAAmB,GACnBxE,SAAAA,EAAW0E,gBAAgB,YACjB1E,aAAS,EAATA,EAAW2E,SACrB3E,SAAAA,EAAW4E,aAAa,SAAU,QAGhCN,GACFE,EAAmB5F,KAAKuC,gBACtBqD,EACAJ,EAAY5E,QAAQ4B,SACpBgD,EAAY5E,QAAQkB,UAEtB+D,EAAmB7F,KAAKuC,gBACtBsD,EACAJ,EAAY7E,QAAQ4B,SACpBiD,EAAY7E,QAAQa,YAGtBmE,EAAmB5F,KAAKuC,gBACtBqD,EACAJ,EAAY5E,QAAQ4B,SACpBgD,EAAY5E,QAAQa,UAEtBoE,EAAmB7F,KAAKuC,gBACtBsD,EACAJ,EAAY7E,QAAQ4B,SACpBiD,EAAY7E,QAAQkB,WAIjB,CAAC8D,EAAkBC,EAC5B,E","sources":["webpack://site-client-side/./ClientApp/components/homepageSearchWidget/cosmos/shopByVehicle/searchByBudget/searchByBudget.ts"],"sourcesContent":["export default class SearchByBudget {\n private readonly types: Array = [\"price\", \"finance\", \"lease\"];\n private readonly filterDictionary = new Map();\n private _baseSrpPage: string;\n private _submitButton: HTMLLinkElement;\n private _resetButton: HTMLElement;\n private _searchByBudgetContent: HTMLElement;\n private _searchByBudgetTabContent: HTMLElement;\n private _tabList: HTMLElement;\n private _tabButtons: NodeListOf;\n private _activeTab: Element;\n\n public constructor() {\n this.initialize();\n this.setTabOrderTags();\n this.setupResetEvents();\n this.setupInputEvents();\n this.setupTabEvents();\n this.setSearchUrl(this._activeTab);\n }\n\n private readonly initialize = () => {\n this._submitButton = document.getElementById(\n \"searchByBudgetSubmit\"\n ) as HTMLLinkElement;\n this._resetButton = document.getElementById(\n \"searchByBudgetReset\"\n ) as HTMLLinkElement;\n this._searchByBudgetContent = document.getElementById(\"searchByBudget\");\n this._tabList = document.querySelector(\".search-by-budget__tabs-list\");\n this._searchByBudgetTabContent = document.querySelector(\n \".search-by-budget__tab-content\"\n );\n this._tabButtons = document.querySelectorAll(\n `.search-by-budget__tab-button[role=\"tab\"]`\n );\n this._baseSrpPage = this._submitButton?.dataset.searchUrl\n ? this._submitButton?.dataset.searchUrl\n : \"/searchall.aspx\";\n this._activeTab = this._searchByBudgetTabContent?.querySelector(\".active\");\n };\n\n private setTabOrderTags() {\n const options = this._tabList?.querySelectorAll(\"li\");\n for (let i = 0; i < options?.length; i++) {\n (options[i].children[0] as HTMLElement).dataset.dotaggingElementOrder =\n i.toString();\n }\n }\n\n private setSearchUrl(tab: Element) {\n const filterType = tab?.id.split(\"-\")[2];\n this.filterDictionary.clear();\n const minInputBox = document.getElementById(\n filterType + \"_min\"\n ) as HTMLInputElement;\n const maxInputBox = document.getElementById(\n filterType + \"_max\"\n ) as HTMLInputElement;\n const validator = document.getElementById(filterType + \"-validator\");\n if (minInputBox && maxInputBox) {\n const [minInputBoxValue, maxInputBoxValue] = this.getUpdatedValues(\n minInputBox,\n maxInputBox,\n validator,\n true,\n maxInputBox.dataset.maxValue\n );\n this._submitButton.href = this.updateQueryString(\n filterType,\n minInputBoxValue,\n maxInputBoxValue\n );\n }\n }\n\n private readonly setupInputEvents = () => {\n this.types.forEach((filterType) => {\n const minInputBox = document.getElementById(\n filterType + \"_min\"\n ) as HTMLInputElement;\n const maxInputBox = document.getElementById(\n filterType + \"_max\"\n ) as HTMLInputElement;\n const validator = document.getElementById(filterType + \"-validator\");\n minInputBox?.addEventListener(\"change\", () => {\n const [minInputBoxValue, maxInputBoxValue] = this.getUpdatedValues(\n minInputBox,\n maxInputBox,\n validator,\n true,\n maxInputBox.dataset.maxValue\n );\n minInputBox.value = this.formatValueWithSeparator(minInputBoxValue);\n if (\n !(\n Number.parseFloat(minInputBoxValue) ===\n Number.parseFloat(minInputBox.dataset.minValue) &&\n Number.parseFloat(maxInputBoxValue) ===\n Number.parseFloat(maxInputBox.dataset.maxValue)\n )\n ) {\n this._submitButton.href = this.updateQueryString(\n filterType,\n minInputBoxValue,\n maxInputBoxValue\n );\n }\n });\n maxInputBox?.addEventListener(\"change\", () => {\n const [maxInputBoxValue, minInputBoxValue] = this.getUpdatedValues(\n maxInputBox,\n minInputBox,\n validator,\n false,\n minInputBox.dataset.minValue\n );\n maxInputBox.value = this.formatValueWithSeparator(maxInputBoxValue);\n if (\n !(\n Number.parseFloat(minInputBoxValue) ===\n Number.parseFloat(minInputBox.dataset.minValue) &&\n Number.parseFloat(maxInputBoxValue) ===\n Number.parseFloat(maxInputBox.dataset.maxValue)\n )\n ) {\n this._submitButton.href = this.updateQueryString(\n filterType,\n minInputBoxValue,\n maxInputBoxValue\n );\n }\n });\n });\n };\n\n private readonly setupResetEvents = () => {\n this._resetButton?.addEventListener(\"click\", () => {\n this.types.forEach((filterType) => {\n this.clearFilters(filterType);\n });\n });\n this._resetButton?.addEventListener(\"touchend\", () => {\n this.types.forEach((filterType) => {\n this.clearFilters(filterType);\n });\n });\n };\n\n private readonly setupTabEvents = () => {\n if (this._tabList && this._tabButtons) {\n this._tabButtons.forEach((tab) => {\n this.setSelectedTabOptionEvent(tab);\n this.setCrossfadeTabsEvent(tab);\n });\n }\n };\n\n private setSelectedTabOptionEvent(tab: HTMLElement) {\n tab.addEventListener(\"click\", (event) => {\n let selectedIndex = -1;\n this._tabButtons.forEach((tab, index) => {\n if (tab === event.target) {\n this.setSearchUrl(tab as Element);\n selectedIndex = index;\n }\n });\n if (selectedIndex > -1) {\n this._searchByBudgetContent.dataset.selectedOption =\n selectedIndex.toString();\n }\n });\n }\n\n private setCrossfadeTabsEvent(tab: HTMLElement) {\n /* Set up crossfading between tabs to override default Bootstrap styling */\n const tabPaneClass = \".search-by-budget__tab-pane\";\n const fadeInClassName = \"fadein\";\n const activeClassName = \"active\";\n\n tab.addEventListener(\"click\", (event) => {\n const tabPaneId = tab.getAttribute(\"aria-controls\");\n const tabPane = document.getElementById(tabPaneId);\n const oldTabPane = document.querySelector(\n `${tabPaneClass}.${activeClassName}.${fadeInClassName}`\n );\n oldTabPane?.classList.remove(fadeInClassName);\n tabPane?.classList.add(activeClassName);\n setTimeout(() => {\n tabPane?.classList.add(fadeInClassName);\n }, 5);\n });\n }\n\n private getUpdatedValues(\n inputBoxOne: HTMLInputElement,\n inputBoxTwo: HTMLInputElement,\n validator: HTMLElement,\n isMinFilter: boolean,\n threshhold: string\n ): [string, string] {\n let inputBoxOneValue = inputBoxOne.value.replace(/,/g, \"\");\n let inputBoxTwoValue = inputBoxTwo.value.replace(/,/g, \"\");\n const resetFilter = isMinFilter\n ? Number.parseFloat(inputBoxOneValue) > Number.parseFloat(threshhold) ||\n Number.parseFloat(inputBoxOneValue) >\n Number.parseFloat(inputBoxTwoValue)\n : Number.parseFloat(inputBoxOneValue) < Number.parseFloat(threshhold) ||\n Number.parseFloat(inputBoxOneValue) <\n Number.parseFloat(inputBoxTwoValue);\n if (resetFilter) {\n inputBoxOneValue = \"\";\n validator?.removeAttribute(\"hidden\");\n } else if (!validator?.hidden) {\n validator?.setAttribute(\"hidden\", \"true\");\n }\n\n if (isMinFilter) {\n inputBoxOneValue = this.getRoundedValue(\n inputBoxOneValue,\n inputBoxOne.dataset.stepSize,\n inputBoxOne.dataset.minValue\n );\n inputBoxTwoValue = this.getRoundedValue(\n inputBoxTwoValue,\n inputBoxTwo.dataset.stepSize,\n inputBoxTwo.dataset.maxValue\n );\n } else {\n inputBoxOneValue = this.getRoundedValue(\n inputBoxOneValue,\n inputBoxOne.dataset.stepSize,\n inputBoxOne.dataset.maxValue\n );\n inputBoxTwoValue = this.getRoundedValue(\n inputBoxTwoValue,\n inputBoxTwo.dataset.stepSize,\n inputBoxTwo.dataset.minValue\n );\n }\n\n return [inputBoxOneValue, inputBoxTwoValue];\n }\n\n private readonly getRoundedValue = (\n value: string,\n stepSize: string,\n defaultValue: string\n ): string => {\n const sliderStep = Number.parseFloat(stepSize);\n const roundedValue =\n Math.ceil(Number.parseFloat(value) / sliderStep) * sliderStep;\n return Number.isNaN(roundedValue) ? defaultValue : roundedValue.toString();\n };\n\n private readonly clearFilters = (filterType: string) => {\n this._submitButton.href = this._baseSrpPage;\n this.filterDictionary.clear();\n\n const minInputBox = document.getElementById(\n filterType + \"_min\"\n ) as HTMLInputElement;\n const maxInputBox = document.getElementById(\n filterType + \"_max\"\n ) as HTMLInputElement;\n minInputBox.value = \"\";\n maxInputBox.value = \"\";\n };\n\n private readonly updateQueryString = (\n filterType: string,\n minValue: string,\n maxValue: string\n ) => {\n let queryString = this._baseSrpPage;\n const filterName =\n filterType == \"price\" ? \"pricerange\" : filterType + \"pricerange\";\n const filterValue = minValue + \"-\" + maxValue;\n if (this.filterDictionary.delete(filterType)) {\n this.filterDictionary.set(filterType, filterName + \"=\" + filterValue);\n } else {\n this.filterDictionary.set(filterType, filterName + \"=\" + filterValue);\n }\n queryString += \"?\" + Array.from(this.filterDictionary.values()).join(\"&\");\n\n return queryString;\n };\n\n private readonly formatValueWithSeparator = (value: string) => {\n const cleanValue = Number.parseFloat(value.replace(/,/g, \"\"));\n return new Intl.NumberFormat(\"en-US\", { style: \"decimal\" }).format(\n cleanValue\n );\n };\n}\n"],"names":["SearchByBudget","types","filterDictionary","Map","initialize","this","_submitButton","document","getElementById","_resetButton","_searchByBudgetContent","_tabList","querySelector","_searchByBudgetTabContent","_tabButtons","querySelectorAll","_baseSrpPage","dataset","searchUrl","_activeTab","setupInputEvents","forEach","filterType","minInputBox","maxInputBox","validator","addEventListener","minInputBoxValue","maxInputBoxValue","getUpdatedValues","maxValue","value","formatValueWithSeparator","Number","parseFloat","minValue","href","updateQueryString","setupResetEvents","clearFilters","setupTabEvents","tab","setSelectedTabOptionEvent","setCrossfadeTabsEvent","getRoundedValue","stepSize","defaultValue","sliderStep","roundedValue","Math","ceil","isNaN","toString","clear","queryString","filterName","filterValue","delete","set","Array","from","values","join","cleanValue","replace","Intl","NumberFormat","style","format","setTabOrderTags","setSearchUrl","options","i","length","children","dotaggingElementOrder","id","split","event","selectedIndex","index","target","selectedOption","fadeInClassName","activeClassName","tabPaneId","getAttribute","tabPane","oldTabPane","classList","remove","add","setTimeout","inputBoxOne","inputBoxTwo","isMinFilter","threshhold","inputBoxOneValue","inputBoxTwoValue","removeAttribute","hidden","setAttribute"],"sourceRoot":""}