{"version":3,"file":"js/app.cecfc721.js","mappings":"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","sources":["webpack://nvi/./src/api.ts","webpack://nvi/./src/enums.ts","webpack://nvi/./src/helpers.ts","webpack://nvi/./src/DetailApp/store.ts","webpack://nvi/./src/store/index.ts","webpack://nvi/./src/main.ts","webpack://nvi/webpack/bootstrap","webpack://nvi/webpack/runtime/amd define","webpack://nvi/webpack/runtime/amd options","webpack://nvi/webpack/runtime/chunk loaded","webpack://nvi/webpack/runtime/compat get default export","webpack://nvi/webpack/runtime/define property getters","webpack://nvi/webpack/runtime/ensure chunk","webpack://nvi/webpack/runtime/get javascript chunk filename","webpack://nvi/webpack/runtime/get mini-css chunk filename","webpack://nvi/webpack/runtime/global","webpack://nvi/webpack/runtime/hasOwnProperty shorthand","webpack://nvi/webpack/runtime/load script","webpack://nvi/webpack/runtime/make namespace object","webpack://nvi/webpack/runtime/publicPath","webpack://nvi/webpack/runtime/css loading","webpack://nvi/webpack/runtime/jsonp chunk loading","webpack://nvi/webpack/startup"],"sourcesContent":["import { EEnv } from \"./enums\";\r\nimport { \r\n\tIVehicle, \r\n\tIVehicleImages, \r\n\tIVehiclePricing, \r\n\tIEnquiryPost, \r\n\tITestDriveOption,\r\n\tISupplierNavItem\r\n} from \"./types\";\r\nimport { getCookie, env } from '@/helpers';\r\n\r\nexport const baseUrl = env == EEnv.staging || env == EEnv.qa ? 'https://stagingapp.toyotainventory.com.au/' : 'https://app.toyotainventory.com.au/';\r\n\r\nconst fslApi = 'https://fslclient.azurewebsites.net/';\r\n\r\nexport const getFslURL = (): string => {\r\n\treturn `${fslApi}FSLResult`;\r\n};\r\n\r\nexport const getSupplierNav = async (dealerId: number): Promise> => {\r\n\tconst url = `${baseUrl}api/suppliernav/${dealerId}`;\r\n\treturn await fetch(url).then(response => {\r\n\t\treturn response.json();\r\n\t}).catch(error => {\r\n\t\tconsole.log(error);\r\n\t\treturn [];\r\n\t});\t\r\n};\r\n\r\nexport const getTestDriveVehicles = async (hash: string, stockDealerId: number): Promise> => {\r\n\tconst url = `${baseUrl}api/TestDriveOption?material=${hash}&stockDealerID=${stockDealerId}&_=${new Date().valueOf()}`;\r\n\treturn await fetch(url).then(response => {\r\n\t\treturn response.json();\r\n\t}).catch(error => {\r\n\t\tconsole.log(error);\r\n\t\treturn [];\r\n\t});\t\r\n};\r\n\r\nexport const getDemoVehicleImages = async (id: number, batch: string) => {\r\n\tconst url = baseUrl + `api/DemoImage?id=${id}&batch=${batch}&_=${new Date().valueOf()}`;\r\n\treturn await fetch(url).then(response => {\r\n\t\treturn response.json();\r\n\t}).catch(error => {\r\n\t\tconsole.log(error);\r\n\t\treturn null;\r\n\t});\t\r\n}\r\n\r\nexport const getVehicleImages = async (hash: string, planned: string | undefined): Promise => {\r\n\tconst imageApi = baseUrl + \"api/InventoryImagev2/\";\r\n\tconst url = `${imageApi}?id=${hash}${env == EEnv.qa ? '&preRelease=true' : ''}${typeof planned != 'undefined' ? ('&plannedMonth='+planned) : ''}${env == EEnv.qa ? '&preRelease=true' : ''}&_=${new Date().valueOf()}`;\r\n\r\n\treturn await fetch(url).then(response => {\r\n\t\treturn response.json();\r\n\t}).catch(error => {\r\n\t\tconsole.log(error);\r\n\t\treturn null;\r\n\t});\t\r\n}\r\n\r\nexport const getVehiclePricing = async (vehicle: IVehicle, materialCode: string, fakeSpecial?: boolean): Promise => {\r\n\tconst financeApi = baseUrl + \"api/VirtualStockSummary\";\r\n\tconst params = new URLSearchParams();\r\n\tconst guid = getCookie('tprguid');\r\n\tconst financeoptions = getCookie('financeoptions').split('_');\r\n\r\n\tparams.set('materialCode', materialCode);\r\n\tparams.set('vehicle_specification_id', vehicle.VsId.toString());\r\n\tparams.set('dealerid', vehicle.Dealer.DealerId.toString());\r\n\tif (env == EEnv.qa){\r\n\t\tparams.set('ignoreRelease', 'true');\r\n\t}\r\n\tparams.set('actualdealerid', vehicle.Dealer.ActualDealerId.toString());\r\n\tparams.set('fulldescription', vehicle.FullDescriptionForFinance);\r\n\tif (fakeSpecial){\r\n\t\tparams.set('fakeSpecial', 'true');\r\n\t}\r\n\tguid && params.set('personalised', guid);\r\n\t\r\n\tif (financeoptions.length == 3){\r\n\t\tparams.set('deposit', financeoptions[0]);\r\n\t\tparams.set('term', financeoptions[1]);\r\n\t\tparams.set('kms', financeoptions[2]);\r\n\t}\r\n\t\r\n\tparams.set('_', (new Date().valueOf()).toString());\r\n\r\n\treturn await fetch(`${financeApi}?${params.toString()}`)\r\n\t.then(response => {\r\n\t\treturn response.json();\r\n\t}).catch(error => {\r\n\t\tconsole.log(error);\r\n\t\treturn null;\r\n\t});\t\r\n}\r\n\r\nexport const postEnquiryForm = async (data: IEnquiryPost, token: string): Promise => {\r\n\tconst postUrl = \"/api/EnquiryIndividualNewVehicle\";\r\n\tconst url = location.href.includes(\"localhost:\") ? `http://test.dealer.toyota.com.au${postUrl}` : postUrl;\r\n\r\n\tconst headers = {\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAccept: 'application/json',\r\n\t\tRequestVerificationToken: token\r\n\t}\r\n\tconsole.log('headers', headers);\r\n\treturn await fetch(url, {\r\n\t\tmethod: 'POST',\r\n\t\theaders, \r\n\t\tbody: JSON.stringify(data)\r\n\t})\r\n\t.then(response => {\r\n\t\treturn response;\r\n\t}).catch(error => {\r\n\t\tconsole.log(error);\r\n\t\treturn false;\r\n\t});\t\r\n}\r\nexport const postTestDriveForm = async (data: IEnquiryPost, token: string): Promise => {\r\n\tconst postUrl = \"/api/EnquiryTestDrive\";\r\n\tconst url = location.href.includes(\"localhost:\") ? `http://test.dealer.toyota.com.au${postUrl}` : postUrl;\r\n\r\n\tconst headers: any = {\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAccept: 'application/json',\r\n\t\tRequestVerificationToken: token\r\n\t};\r\n\tconsole.log('headers', headers);\r\n\treturn await fetch(url, {\r\n\t\tmethod: 'POST',\r\n\t\theaders,\r\n\t\tbody: JSON.stringify(data)\r\n\t})\r\n\t.then(response => {\r\n\t\treturn response;\r\n\t}).catch(error => {\r\n\t\tconsole.log(error);\r\n\t\treturn false;\r\n\t});\t\r\n}","export enum EOfferTypePillText\r\n{\r\n\tFinanceText = 'Finance Offer',\r\n\tFinanceFsl = 'Finance Offer',\r\n\tVehicleText = 'Driveaway Offer',\r\n\tVehiclePrice = 'Driveaway Offer'\t\r\n}\r\nexport enum EOfferType\r\n{\r\n\tFinanceText = 1,\r\n\tFinanceFsl = 2,\r\n\tVehicleText = 3,\r\n\tVehiclePrice = 4\r\n}\r\nexport enum EFSLToggle\r\n{\r\n\tfinance = 'Finance',\r\n\tfsl = 'Full-Service Lease'\r\n}\r\nexport enum EFinaceToggleTypes \r\n{\r\n\tcash = 'cash',\r\n\tfinance = 'finance',\r\n\tfsl = 'fsl'\r\n}\r\nexport enum EEnv {\r\n\tqa,\r\n\tstaging,\r\n\tlive\r\n}\r\nexport enum EHeaderStripStyles {\r\n\tsolid = \"solid\",\r\n\tbrand = \"brand\"\r\n}\r\nexport enum ESpecialItemDisclaimerTypes {\r\n\tdriveaway = \"Driveaway\",\r\n\tspecial = \"Special\"\r\n}\r\nexport enum EInternalFinanceTypes {\r\n\tindicative = \"Indicative\",\r\n\tcampaign = \"Campaign\"\r\n}\r\nexport enum EDetailFormTabs {\r\n\tenquire = 0,\r\n\tbook = 1,\r\n\tcontact = 2\r\n}\r\nexport enum EFieldDateTimeTypes {\r\n\tdate = \"date\",\r\n\ttime = \"time\"\r\n}\r\nexport enum ESpecialTypes {\r\n\tspecialOffer = \"Special Offer\",\r\n\tgreatValue = \"Great Value\",\r\n\tdealerSpecial = \"Dealer Special\"\r\n}\r\nexport enum EFinanceTypes {\r\n\tAccessConsumer = 1,\r\n\tAccessBusiness = 2,\r\n\tBusiness = 3,\r\n\tConsumer = 4\r\n}\r\nexport enum EStockTypes {\r\n\tPipe = 1,\r\n\tStock = 2,\r\n\tVirtual = 3\r\n}\r\nexport enum EToggles {\r\n\ttrim, \r\n\tpaint,\r\n\troof\r\n}\r\nexport enum EImage360Sizes {\r\n\tw260 = \"260x146\",\r\n\tw519 = \"519x292\",\r\n\tw907 = \"907x510\",\r\n\tw940 = \"940x529\",\r\n\tw1920 = \"1920x1080\",\r\n\tw3840 = \"3840x2160\"\r\n}\r\nexport enum EImageHeroSizes {\r\n\tw260 = \"260x146\",\r\n\tw519 = \"519x292\",\r\n\tw907 = \"907x510\",\r\n\tw1193 = \"1193x671\"\r\n}\r\nexport enum EImageIntExtSizes {\r\n\tw260x146 = \"260x146\",\r\n\tw519x292 = \"519x292\",\r\n\tw907x510 = \"907x510\",\r\n\tw1920x1080 = \"1920x1080\"\r\n}\r\nexport enum EVideoSizes {\r\n\tw640x360 = \"640x360\",\r\n\tw960x540 = \"960x540\",\r\n\tw1280x720 = \"1280x720\",\r\n\tw1920x1080 = \"1920x1080\"\r\n}\r\nexport enum EImageExtensions {\r\n\tpng = \"png\", \r\n\tjpg = \"jpg\",\r\n\tmp4 = \"mp4\"\r\n}\r\nexport enum EImageType {\r\n\tp360 = \"Path_360\",\r\n\tpInt = \"Path_Int\",\r\n\tpExt = \"Path_Ext\",\r\n\tpVid = \"Path_Video\",\r\n\tpHero = \"Path_Hero\"\r\n}\r\nexport enum EFrameType {\r\n\trelative = \"relative\", \r\n\tfull = \"full\"\r\n}\r\nexport enum EFormType {\r\n\tenquire = \"enquire\",\r\n\ttestdrive = \"testdrive\"\r\n}\r\nexport enum EFormTheme {\r\n\tonWhite = \"onWhite\",\r\n\tonGrey = \"onGrey\"\r\n}\r\nexport enum EFormRadioCheckTypes {\r\n\tradio = \"radio\",\r\n\tcheckbox = \"checkbox\"\r\n}\r\nexport enum EYesNo {\r\n\tyes = \"yes\",\r\n\tno = \"no\"\r\n}\r\nexport enum ELoadingColour {\r\n\tlight = \"light\",\r\n\tdark = \"dark\"\r\n}","import { \r\n\tEEnv,\r\n\tEFinaceToggleTypes,\r\n\tEFrameType,\r\n\tEImageExtensions, \r\n\tEOfferType, \r\n\tESpecialItemDisclaimerTypes, \r\n\tEToggles\r\n} from '@/enums';\r\nimport { \r\n\tIVehicle,\r\n\tIVehicleImage,\r\n\tIVehicleImage360,\r\n\tIVehicleImageHero,\r\n\tIFakeColourElements,\r\n\tIFakePaintEl,\r\n\tIFakeTrimEl,\r\n\tIFakeRoofEl,\r\n\tICodes,\r\n\tINewSwatchData,\r\n\tITimePickerVal,\r\n\tIOpeningInfoItem,\r\n\tIEnabledTimes,\r\n\tIVehiclePricing,\r\n\tIAdvantageDataItem,\r\n\tITestDriveOption,\r\n\tIWindowScripts,\r\n\tIVehicleImages,\r\n\tINewDisclaimer,\r\n\tIRoots\r\n} from '@/types';\r\n\r\nexport const env = getEnv();\r\n\r\nexport function getTprHref(vsid: number, m: string, tpr_source: number | null): string {\r\n\treturn`/finance/get-tpr?v=${vsid}&m=${m}&tpr_source=${tpr_source}`;\r\n}\r\nexport function getEnv(): EEnv {\r\n\treturn location.href.includes(\"//qa.dealer\") ? EEnv.qa : location.href.includes(\"localhost:\") || location.href.includes('//test.dealer') ? EEnv.staging : EEnv.live;\r\n}\r\nexport function setHeaderScrollClass(headerClass: string, overviewClass: string): void {\r\n\tconst y = window.scrollY;\r\n\tconst headerEl = document.querySelector(headerClass);\r\n\tconst overviewEl = document.querySelector(overviewClass);\r\n\tconst listingEl = document.getElementById('nvi-listing-header');\r\n\tconst listingHeight = listingEl ? listingEl.clientHeight : 0;\r\n\tconst headerHeight = headerEl ? headerEl.clientHeight : 0;\r\n\tconst overviewY = overviewEl ? overviewEl.getBoundingClientRect().top : 0;\r\n\tconst isSticky = y + headerHeight >= overviewY;\r\n\r\n\tif (!headerEl || !overviewEl) return;\r\n\r\n\theaderEl.classList.toggle('tb-sticky', isSticky);\r\n\theaderEl.classList.toggle('tb-hidden', isSticky);\r\n\theaderEl.setAttribute('style', `top:${listingHeight}px`);\r\n\tsetTimeout(() => {\r\n\t\theaderEl.classList.remove('tb-hidden');\r\n\t}, 10);\r\n}\r\nexport function isPillInPage(text: string){\r\n\tconst pills = document.querySelectorAll('.tb-price-block [class^=\"tb-pill=\"], .tb-finance-block-pills [class^=\"tb-pill=\"]');\r\n\tif (!pills) return false;\r\n\t\r\n\tlet isFound = false;\r\n\tfor (let i = 0; i != pills.length; ++i){\r\n\t\tconst t = (pills[i] as HTMLSpanElement).innerHTML.trim();\r\n\t\tif (t == text){\r\n\t\t\tisFound = true;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn isFound;\r\n}\r\nexport function bindJwAnalytics(): void {\r\n\tconsole.log('bindJwAnalytics', typeof (window as any).jwplayer);\r\n\tif (typeof (window as any).jwplayer == 'undefined') return;\r\n\tif (typeof (window as any).jwplayer().on == 'undefined') return;\r\n\t(window as any).jwplayer().on('play', function() {\r\n\t\tconst current = (window as any).jwplayer().getPlaylistItem();\r\n\t\t(window as any).dataLayer.push({\r\n\t\t\tevent: \"video_start\",\r\n\t\t\tvideo_title: current.title,\r\n\t\t\tvideo_url: current.file\r\n\t\t})\r\n\t});\r\n\t(window as any).jwplayer().on('complete', function() {\r\n\t\tconst current = (window as any).jwplayer().getPlaylistItem();\r\n\t\t(window as any).dataLayer.push({\r\n\t\t\tevent: \"video_complete\",\r\n\t\t\tvideo_title: current.title,\r\n\t\t\tvideo_url: current.file\r\n\t\t})\r\n\t});\r\n}\r\nexport function getRoots(): IRoots {\r\n\treturn {\r\n\t\ttopbarRoot: document.getElementById('detail-topbar-root'),\r\n\t\theaderRoot: document.getElementById('detail-header-root'),\r\n\t\tbannerRoot: document.getElementById('detail-banner-root'),\r\n\t\toverviewCtaRoot: document.getElementById('detail-overview-cta-root'),\r\n\t\tdemoNavRoot: document.getElementById('detail-demo-nav-root'),\r\n\t\timageGalleryRoot: document.getElementById('detail-image-gallery-root'),\r\n\t\tvideoGalleryRoot: document.getElementById('detail-video-gallery-root'),\r\n\t\tcubeRoot: document.getElementById('detail-cube-root'),\r\n\t\tformRoot: document.getElementById('detail-form-root'),\r\n\t\tadvantageRoot: document.getElementById('detail-advantage-root'),\r\n\t\tsimilarRoot: document.getElementById('detail-similar-root'),\r\n\t\ttdlRoot: document.getElementById('test-drive-lead-root'),\r\n\t\tfslContentRoot: document.getElementById('fsl-content-root')\r\n\t};\r\n}\r\nexport function bindStaticHeader(){\r\n\tconst fslToggle = document.querySelector('.tb-fsl-toggle');\r\n\tif (fslToggle){\r\n\t\tfslToggle.addEventListener('click', function(e: Event){\r\n\t\t\tconst btn = fslToggle;\r\n\t\t\tconst isPressed = btn.getAttribute('aria-checked') == \"true\";\r\n\t\t\tbtn.setAttribute('aria-checked', (!isPressed).toString().toLowerCase());\r\n\r\n\t\t\tconst header = document.querySelector('.tb-detail-header');\r\n\t\t\theader?.classList.toggle('tb-is-fsl', !isPressed);\r\n\r\n\t\t\tconst normFinanceOffer = document.querySelector(`.tb-offer-text-type-${EOfferType.FinanceText}`);\r\n\t\t\tconst fslFinanceOffer = document.querySelector(`.tb-offer-text-type-${EOfferType.FinanceFsl}`);\r\n\t\t\tconst normContent = document.querySelector('.tb-finance-block');\r\n\t\t\tconst fslContent = document.getElementById('fsl-content-root');\r\n\t\t\t\r\n\t\t\tnormFinanceOffer?.setAttribute('aria-hidden', (!isPressed).toString().toLocaleLowerCase());\r\n\t\t\tfslFinanceOffer?.setAttribute('aria-hidden', isPressed.toString().toLocaleLowerCase());\r\n\t\t\tnormContent?.setAttribute('aria-hidden', (!isPressed).toString().toLocaleLowerCase());\r\n\t\t\tfslContent?.setAttribute('aria-hidden', isPressed.toString().toLocaleLowerCase());\r\n\r\n\t\t\tconst dateexp = new Date();\r\n\t\t\tdateexp.setDate(dateexp.getDate() + 400);//chrome limit apparently.\r\n\t\t\tconst expires = \"expires=\"+ dateexp.toString();\r\n\t\t\tconst cookieData = \";\" + expires + ';path=/';\r\n\t\t\tdocument.cookie = \"selectedFinanceType=\" + `${!isPressed ? 'fsl' : 'finance'}` + cookieData;\r\n\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\r\n\t\tconst availableFinanceTypes = (window as any).AvailableFinanceTypes || [];\r\n\t\tconst preferredFinanceType = getCookie('selectedFinanceType') || '';\r\n\t\tconst defaultFinanceType = (window as any).DefaultFinanceType || '';\r\n\t\tconst initialFinanceType = preferredFinanceType && availableFinanceTypes.includes(preferredFinanceType) ? preferredFinanceType : defaultFinanceType.value;\r\n\t\tconst selected = initialFinanceType || EFinaceToggleTypes.finance;\r\n\t\tconst checked = (selected == EFinaceToggleTypes.fsl).toString().toLowerCase();\r\n\t\tconst shouldTrigger = fslToggle.getAttribute('aria-checked') != checked;\r\n\t\tif (shouldTrigger){\r\n\t\t\tconst evt = new Event('click');\r\n\t\t\tfslToggle.dispatchEvent(evt);\r\n\t\t}\r\n\t}\r\n\r\n\tconst openClose = document.querySelector('.tb-detail-header-toggle');\r\n\tif (openClose){\r\n\t\topenClose.addEventListener('click', function(e: Event){\r\n\t\t\tconst btn = openClose;\r\n\t\t\tconst isPressed = btn.getAttribute('aria-pressed') == \"true\";\r\n\t\t\tbtn.setAttribute('aria-pressed', (!isPressed).toString().toLowerCase());\r\n\t\t\tconst id = btn.getAttribute('aria-controls');\r\n\t\t\tif (!id) return;\r\n\t\t\tconst controlled = document.getElementById(id);\r\n\t\t\tif (!controlled) return;\r\n\t\t\tcontrolled.setAttribute('aria-hidden', isPressed.toString().toLowerCase());\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\t}\r\n\r\n\tconst bookatestdrive = document.querySelector('.tb-detail-header a[href=\"#detail-form-root\"]');\r\n\tif (bookatestdrive){\r\n\t\tlet doHandleLoad = false;\r\n\t\tlet hasLoadedAll = false;\r\n\r\n\t\tconst doScroll = (el: HTMLElement) => {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t\ttop: el.offsetTop, \r\n\t\t\t\tbehavior: 'smooth'\r\n\t\t\t});\r\n\t\t};\r\n\t\tconst handleLoaded = () => {\r\n\t\t\tconst el: HTMLElement | null = document.getElementById('detail-form-root');\r\n\t\t\tif (hasLoadedAll || !doHandleLoad || !el) return;\r\n\r\n\t\t\thasLoadedAll = true;\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tbookatestdrive.classList.remove('is-loading');\r\n\t\t\t\tdoScroll(el);\r\n\t\t\t}, 2500);\r\n\t\t};\r\n\t\tdocument.addEventListener('allSectionsLoaded', handleLoaded);\r\n\r\n\t\tbookatestdrive.addEventListener('click', function(e){\r\n\t\t\tif (hasLoadedAll){\r\n\t\t\t\tconst el: HTMLElement | null = document.getElementById('detail-form-root');\r\n\t\t\t\tif (!el) return;\r\n\r\n\t\t\t\tdoScroll(el);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbookatestdrive.classList.add('is-loading');\r\n\t\t\t\tdoHandleLoad = true;\r\n\t\t\t\tconst evt = new CustomEvent('loadAllSections');\r\n\t\t\t\tdocument.dispatchEvent(evt);\r\n\t\t\t}\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\t}\r\n\r\n\tconst buyonlines = document.querySelectorAll('.tb-detail-header a[data-button-name=\"detail : order online\"]');\r\n\tbuyonlines.forEach(b => {\r\n\t\tb.addEventListener('click', function(e: Event){\r\n\t\t\tconst el = e.target as HTMLElement;\r\n\t\t\tif (!el) return;\r\n\t\t\t\r\n\t\t\tconst w = (window as unknown as IWindowScripts);\r\n\t\t\tconst sb = w.specBuilder;\r\n\t\t\tconst href = el.getAttribute('href') || '';\r\n\t\t\tconst target = el.getAttribute('target') || '_self';\r\n\t\t\tconst dataLayer = (window as any).dataLayer || [];\r\n\t\t\tconst model = sb.VehicleLine;\r\n\t\t\tconst grade = sb.Grade;\r\n\t\t\tconst m = `${sb.CurrentVariantCode}${sb.RoofCode || sb.TrimCode}`;\r\n\t\t\tconst driveaway = '(not set)';\r\n\r\n\t\t\tdataLayer.push({\r\n\t\t\t\tevent:\"add_to_cart\",\r\n\t\t\t\thas_tpr_applied: sb.HasTprApplied ? 'Yes' : 'No',\r\n\t\t\t\t// Note if Vehicle Grade is not selected then the value should be ALL\r\n\t\t\t\titem_list_id: `nvi_${model}_${grade}`, \r\n\t\t\t\titem_list_name: `New Vehicles - ${model} - ${grade}`,\r\n\t\t\t\titems: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem_id: m || '(not set)',\r\n\t\t\t\t\t\titem_name: sb.FullDescription || '(not set)',\r\n\t\t\t\t\t\titem_brand: \"Toyota\",\r\n\t\t\t\t\t\titem_category: \"New Vehicles\" || '(not set)',\r\n\t\t\t\t\t\titem_category2: sb.VehicleLine || '(not set)',\r\n\t\t\t\t\t\titem_category3: sb.Grade || '(not set)',\r\n\t\t\t\t\t\titem_category4: sb.VehicleType || '(not set)',\r\n\t\t\t\t\t\tprice: driveaway,\r\n\t\t\t\t\t\tquantity: 1,\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\tpage_type: sb.PageType,\r\n\t\t\t\ttpr_case_id: sb.FactoryOption,\r\n\t\t\t});\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\twindow.open(href, target);\r\n\t\t\t},100);\r\n\r\n\t\t\te.preventDefault();\r\n\t\t});\r\n\t});\r\n}\r\nexport function getSubmitFormImage(vehicleImages: IVehicleImages, demoImages: Array): string {\r\n\tconst imgExt = getImages(vehicleImages.Path_Ext, 1920, EImageExtensions.jpg);\r\n\tlet img = '';\r\n\timgExt.every(o => {\r\n\t\tif (o.includes('Front_34')) {\r\n\t\t\timg = o;\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t});\r\n\tif (!img){\r\n\t\tconst imgHero = getImages(vehicleImages.Path_Hero.filter(o => o.heroDesc == 'FR34'), 1920, EImageExtensions.jpg);\r\n\t\timg = imgHero.length ? imgHero[0] : '';\r\n\t}\r\n\tif (!img){\r\n\t\tconst img360 = getImages(vehicleImages.Path_360, 1920, EImageExtensions.jpg);\r\n\t\t// todo logic for fr34\r\n\t\timg = img360.length ? img360[0] : '';\r\n\t}\r\n\tif (!img){\r\n\t\tconst imgInt = getImages(vehicleImages.Path_Int, 1920, EImageExtensions.jpg);\r\n\t\timg = imgInt.length ? imgInt[0] : '';\r\n\t}\r\n\tif (!img && demoImages.length){\r\n\t\timg = getDemoImage(demoImages[0], 1920) || '';\r\n\t}\r\n\treturn img;\r\n}\r\nexport function convertVehicleToTestDriveOption(vehicle: IVehicle, vehicleImages: IVehicleImages): ITestDriveOption {\r\n\tconst sb = (window as unknown as IWindowScripts).specBuilder;\r\n\t// const transmissionType = sb.FullDescription.includes('Automatic') ? 'Automatic' : sb.FullDescription.includes('Manual') ? 'Manual' : '(not set)';\r\n\tconst transmissionType = vehicle.Transmission || '(not set)';\r\n\tconst manufacturedYear = parseInt(vehicle.Year || '');\r\n\tconst obj = {\r\n\t\tModel: vehicle.VehicleLine || '',\r\n\t\tGrade: vehicle.Grade || '',\r\n\t\tFullDescription: vehicle.FullDescription,\r\n\t\tVariantCode: vehicle.VariantCode,\r\n\t\tImage: getSubmitFormImage(vehicleImages, []),\r\n\t\tPaintName: vehicle.Paints ? vehicle.Paints.filter(o => o.PaintCode == vehicle.PaintCode).map(o => o.PaintName).toString() || '' : '',\r\n\t\tTrimName: vehicle.Trims ? vehicle.Trims.filter(o => o.TrimCode == vehicle.TrimCode).map(o => o.TrimName).toString() || '' : '',\r\n\t\tTransmissionType: transmissionType,\r\n\t\tFactoryOptionDescription: vehicle.FactoryOption || '',\r\n\t\tFuel: \"(not set)\",\r\n\t\tGradeLevelDescription: null,\r\n\t\tVin: vehicle.Vin || '(not set)',\r\n\t\tVehicleSpecificationID: vehicle.VsId,\r\n\t\tProduced: \"(not set)\",\r\n\t\tAvailable: true,\r\n\t\tMaterial: `${vehicle.CurrentVariantCode}${vehicle.TrimCode}${vehicle.PaintCode}` || '',\r\n\t\tBatch: vehicle.Batch || '(not set)',\r\n\t\tManufacturedYear: !isNaN(manufacturedYear) ? manufacturedYear : 0,\r\n\t\tRego: vehicle.Rego || '',\r\n\t\tLocation: \"(not set)\",\r\n\t\tIsTfy: false,\r\n\t};\r\n\treturn obj;\r\n}\r\nexport function removeWhiteSpaceFromTextNodeAndNormalize(parentEl: ChildNode, normalize: boolean){\r\n\tfor (const el of parentEl.childNodes){\r\n\t\tif (el.nodeType === Node.TEXT_NODE){\r\n\t\t\tif (el.nodeValue){\r\n\t\t\t\tel.nodeValue = el.nodeValue.replace(/^\\s+$/g, '');\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tremoveWhiteSpaceFromTextNodeAndNormalize(el, false);\r\n\t\t}\r\n\t}\r\n\tnormalize && parentEl.normalize();\r\n}\r\nexport function getAdvantageData(): Array {\r\n\tconst data: Array = [];\r\n\tlet i = 0;\r\n\r\n\twhile (i != -1){\r\n\t\tconst titleEl = document.getElementById(`tb-advantage-title-${i}`);\r\n\t\tconst ctaEl = document.getElementById(`tb-advantage-cta-${i}`);\r\n\t\tconst thumbEl = document.getElementById(`tb-advantage-thumb-${i}`);\r\n\t\tconst thumbTextEl = document.getElementById(`tb-advantage-thumbtext-${i}`);\r\n\t\tconst rteEl = document.getElementById(`tb-detail-advantage-modal-ref-${i}`);\r\n\r\n\t\tconst rteScriptsArray = [];\r\n\t\tconst rteScripts = rteEl?.querySelectorAll('script');\r\n\t\tif (rteScripts){\r\n\t\t\tfor (let x = 0; x != rteScripts.length; ++x){\r\n\t\t\t\trteScriptsArray.push(rteScripts[x]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (titleEl){\r\n\t\t\tconst classEl = ctaEl?.closest('button');\r\n\t\t\tdata.push({\r\n\t\t\t\ttitle: titleEl?.innerHTML || '',\r\n\t\t\t\tcta: ctaEl?.querySelector('span')?.innerHTML || '',\r\n\t\t\t\tsliderClasses: classEl?.getAttribute('class') || '',\r\n\t\t\t\tthumb: thumbEl?.getAttribute('src') || '',\r\n\t\t\t\tthumbText: thumbTextEl?.innerHTML || '',\r\n\t\t\t\trte: rteEl?.innerHTML || '',\r\n\t\t\t\trteScripts: rteScriptsArray, \r\n\t\t\t\tanalyticsName: rteEl?.dataset.analyticsName || ''\r\n\t\t\t});\r\n\t\t\t++i;\r\n\t\t}\r\n\t\telse {\r\n\t\t\ti = -1;\r\n\t\t}\r\n\t}\r\n\treturn data;\r\n}\r\nexport function getDateForApi(d: Date): string {\r\n\treturn `${d.getFullYear()}-${(\"0\" + (d.getMonth()+1)).slice(-2)}-${(\"0\" + (d.getDate())).slice(-2)}`;\r\n}\r\nfunction removeDisclaimers(disclaimerHolder: HTMLElement){\r\n\tconst disclaimers = (disclaimerHolder as any).querySelectorAll('p');\r\n\r\n\tfor (let i = 0; i != (disclaimers as any).length; ++i){\r\n\t\tconst el = (disclaimers as any)[i];\r\n\r\n\t\tif (el.getAttribute('data-dynamic-disclaimer')){\r\n\t\t\t(disclaimerHolder as any).removeChild(el);\r\n\t\t}\r\n\t}\r\n}\r\nfunction addDisclaimers(disclaimerHolder: HTMLElement, p: IVehiclePricing){\r\n\tconst newDisclaimers: Array = [];\r\n\r\n\tif (p.isNationalSpecial){\r\n\t\tif (p.specialItem?.Disclaimers?.length){ // Get Driveaway disclaimer\r\n\t\t\tfor (let i = 0; i < p.specialItem.Disclaimers.length; i++){\r\n\t\t\t\tif (\r\n\t\t\t\t\tp.specialItem.Disclaimers[i].Type == ESpecialItemDisclaimerTypes.driveaway || \r\n\t\t\t\t\tp.specialItem.Disclaimers[i].Type == ESpecialItemDisclaimerTypes.special\r\n\t\t\t\t){\r\n\t\t\t\t\tnewDisclaimers.push({\r\n\t\t\t\t\t\tkey: p.specialItem.Disclaimers[i].Key,\r\n\t\t\t\t\t\ttext: p.specialItem.Disclaimers[i].Value\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (p.financeDisclaimer){\r\n\t\tnewDisclaimers.push({\r\n\t\t\tkey: p.financeDisclaimerKey,\r\n\t\t\ttext: p.financeDisclaimer\r\n\t\t});\r\n\t}\r\n\tif (p.Offers.length){\r\n\t\tp.Offers.forEach(o => {\r\n\t\t\to.disclaimers.forEach(d => {\r\n\t\t\t\tnewDisclaimers.push({\r\n\t\t\t\t\tkey: d.Key,\r\n\t\t\t\t\ttext: `[${d.Key}] ${d.Value}`\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\tfor (let x = 0; x != newDisclaimers.length; ++x){\r\n\t\tconst newP = document.createElement('p');\r\n\t\tnewP.setAttribute('data-dynamic-disclaimer', newDisclaimers[x].key);\r\n\t\tnewP.innerHTML = newDisclaimers[x].text;\r\n\t\t(disclaimerHolder as any).appendChild(newP);\r\n\t}\r\n}\r\nexport function refreshDisclaimers(p: IVehiclePricing): void {\r\n\tconst disclaimerHolder = document.querySelector('.tb-detail-disclaimers .content');\r\n\tif (!disclaimerHolder) return;\r\n\tremoveDisclaimers((disclaimerHolder as HTMLElement));\r\n\taddDisclaimers((disclaimerHolder as HTMLElement), p);\r\n}\r\nexport function nth(d: number) {\r\n\tif (d > 3 && d < 21) {\r\n\t\treturn 'th';\r\n\t}\r\n\tswitch (d % 10) {\r\n\t\tcase 1:\r\n\t\t\treturn \"st\";\r\n\t\tcase 2:\r\n\t\t\treturn \"nd\";\r\n\t\tcase 3:\r\n\t\t\treturn \"rd\";\r\n\t\tdefault:\r\n\t\t\treturn \"th\";\r\n\t}\r\n}\r\nexport function getDisclaimerKey(item: IVehiclePricing): string {\r\n\tlet driveawayDisclaimerKey = '*';\r\n\tif (item.specialDisclaimerKey.length > 0) {\r\n\t\tdriveawayDisclaimerKey = item.specialDisclaimerKey;\r\n\t}\r\n\treturn driveawayDisclaimerKey;\r\n}\r\nexport function shouldShowPricing (matchedItem: IVehiclePricing): boolean {\r\n\tconst hasSpecialPrice = !!matchedItem.specialItem?.SpecialPrice;\r\n\tlet shouldShowPricing = false;\r\n\tconst hasSpecialExtra = !!matchedItem.specialItem?.SpecialExtra;\r\n\tif (matchedItem.isCabChassis && hasSpecialExtra && hasSpecialPrice) {\r\n\t\t// Is Cab-Chassis and has a special extra - so show pricing\r\n\t\tshouldShowPricing = true;\r\n\t} else if (matchedItem.isCabChassis && matchedItem.isDealerSpecial && matchedItem.specialApplied.length > 0) {\r\n\t\tshouldShowPricing = true;\r\n\t} else if (!matchedItem.isCabChassis && matchedItem.driveaway !== 'Talk to us today for a price' && matchedItem.driveaway !== 'Talk to us about tray options and price') {\r\n\t\t// Isn't a Cab-Chassis - so show pricing\r\n\t\tshouldShowPricing = true;\r\n\t}\r\n\tif (matchedItem.driveaway === 'Talk to us today for a price' || matchedItem.driveaway === 'Talk to us about tray options and price' || matchedItem.isZeroPrice) {\r\n\t\tshouldShowPricing = false;\r\n\t}\r\n\treturn shouldShowPricing;\r\n}\r\nexport function getTimesFromDay(date: Date, et: IEnabledTimes): Array {\r\n\tconst day: string = date.toLocaleDateString('en-AU', { weekday: 'long' }).toLowerCase();\r\n\tconst todayTimes: Array = (et as any)[day];\r\n\treturn todayTimes;\r\n}\r\nexport function getAmendedTimes(timeArray: Array, minuteModifier: number, roundingModified: number): ITimePickerVal {\r\n\tconst blank: ITimePickerVal = { hours: 0, minutes: 0 };\r\n\tif (!timeArray || timeArray.length < 2) return blank;\r\n\r\n\tconst t = new Date();\r\n\tt.setHours(timeArray[0]);\r\n\tt.setMinutes(timeArray[1]);\r\n\tt.setMinutes(t.getMinutes() + minuteModifier);\r\n\tconst roundingMinus = t.getMinutes() % roundingModified;\r\n\r\n\treturn {\r\n\t\thours: t.getHours(),\r\n\t\tminutes: t.getMinutes() - roundingMinus\r\n\t};\r\n}\r\nexport function convertHourInfoItemToEnabledTimes(openingInfo: Array): IEnabledTimes {\r\n\tconst blank = { hours: 0, minutes: 0 };\r\n\tconst blankEnabledTimes: IEnabledTimes = {\r\n\t\tmonday: [blank],\r\n\t\ttuesday: [blank],\r\n\t\twednesday: [blank],\r\n\t\tthursday: [blank],\r\n\t\tfriday: [blank],\r\n\t\tsaturday: [blank],\r\n\t\tsunday: [blank],\r\n\t};\r\n\tconst newEnabledTimes: IEnabledTimes = {\r\n\t\tmonday: [],\r\n\t\ttuesday: [],\r\n\t\twednesday: [],\r\n\t\tthursday: [],\r\n\t\tfriday: [],\r\n\t\tsaturday: [],\r\n\t\tsunday: [],\r\n\t}\r\n\tif (!openingInfo.length) return blankEnabledTimes;\r\n\topeningInfo.forEach((times: IOpeningInfoItem): void => {\r\n\t\tconst startArray: Array = times.OpeningTime.split(':');\r\n\t\tconst closeArray: Array = times.ClosingTime.split(':');\r\n\t\tif (startArray.length < 2 || closeArray.length < 2) return;\r\n\r\n\t\tconst startHour: number = parseInt(startArray[0]);\r\n\t\tconst startMinute: number = parseInt(startArray[1]);\r\n\t\tconst closeHour: number = parseInt(closeArray[0]);\r\n\t\tconst closeMinute: number = parseInt(closeArray[1]);\r\n\t\tif (isNaN(startHour) || isNaN(startMinute) || isNaN(closeHour) || isNaN(closeMinute)) return;\r\n\r\n\t\tconst openTime: ITimePickerVal = getAmendedTimes([startHour, startMinute], 0, 30);\r\n\t\tconst closeTime: ITimePickerVal = getAmendedTimes([closeHour, closeMinute], -30, 30);\r\n\t\tif (!closeTime || !openTime) return;\r\n\r\n\t\t(newEnabledTimes as any)[times.Day.toLowerCase()] = [openTime, closeTime];\r\n\t});\r\n\treturn newEnabledTimes;\r\n}\r\nexport function get360DefaultNum(images: Array, defaultFrame: string){\r\n\tif (!images.length) return 0;\r\n\tif (images.length == 16){\r\n\t\treturn 4;\r\n\t}\r\n\tif (images.length == 36){\r\n\t\treturn 9;\r\n\t}\r\n\telse {\r\n\t\tconst img = defaultFrame.split('/').pop()?.split('.')[0].split('_').pop() || '';\r\n\t\tconst imgArr: Array = images.map(o => -1 != o.indexOf(img));\r\n\t\treturn imgArr.indexOf(true);\r\n\t}\r\n}\r\nexport function get360Images(images: Array, screenSize: number)\r\n{\r\n\tconst imgs = getImages(\r\n\t\timages, \r\n\t\tscreenSize, \r\n\t\tEImageExtensions.jpg, \r\n\t\tEFrameType.full\r\n\t);\r\n\tif (imgs.length) return imgs;\r\n\tconst imgsFallback1 = getImages(\r\n\t\timages, \r\n\t\tscreenSize, \r\n\t\tEImageExtensions.jpg\r\n\t);\r\n\treturn imgsFallback1;\r\n}\r\nexport function isValidPhone (value: string) {\r\n\tconst r = RegExp('^0[4,2,3,7,8]');\r\n\tif (\r\n\t\t!!value && \r\n\t\tvalue.length == 10 && \r\n\t\tr.test(value)\r\n\t) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function isEmail (value: string) {\r\n\t// eslint-disable-next-line\r\n let re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(value);\r\n}\r\n\r\nexport function getFinanceHeadings(text: string): Array {\r\n\tconst h = text.replace(/\\. /g, \".\\n\").replace(/ and a /g, \".\\n\");\r\n\treturn h.split('\\n').filter(o => !!o).map(o => o.charAt(0).toUpperCase() + o.slice(1));\r\n}\r\n\r\nexport function getCookie (sName: string): string { \r\n\tconst oCrumbles: Array = document.cookie.split(';');\r\n\tfor(let i = 0; i < oCrumbles.length; i++){\r\n\t\tconst oPair= oCrumbles[i].split('=');\r\n\t\tconst sKey = decodeURIComponent(oPair[0].trim());\r\n\t\tconst sValue = oPair.length>1 ? oPair[1] : '';\r\n\t\tif(sKey == sName) {\r\n\t\t\treturn decodeURIComponent(sValue);\r\n\t\t}\r\n\t}\r\n\treturn '';\r\n}\r\n\r\ntype TGetImage = IVehicleImage | IVehicleImage360 | IVehicleImageHero;\r\n\r\nexport function getCorrectImageSize(\r\n\tsizes: Array, \r\n\tscreenSize: number\r\n): string {\r\n\tlet defaultSize = sizes.length ? sizes[sizes.length-1] : '';\r\n\tconst pixelRatio = Math.ceil(window.devicePixelRatio);\r\n\tconst pixelSize = screenSize * pixelRatio;\r\n\r\n\tfor (let i = sizes.length-1; i != -1; --i){\r\n\t\tconst s = parseInt(sizes[i].split('x')[0]);\r\n\t\tif (s >= pixelSize) {\r\n\t\t\tdefaultSize = sizes[i];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\telse continue;\r\n\t}\r\n\treturn defaultSize;\r\n}\r\nexport const getDemoImage = (url: string, newSize: number): string => {\r\n\tconst searchStr = 'demo-image-resize/'\r\n\tconst sPos = url.indexOf(searchStr);\r\n\tconst ePos = url.indexOf('x/');\r\n\tconst originalSize = url.substring(sPos+searchStr.length, ePos);\r\n\treturn url.replace(originalSize, newSize.toString());\r\n}\r\nexport const getImages = (\r\n\tarray: Array, \r\n\tscreenSize: number, \r\n\text: EImageExtensions, \r\n\tframeType?: EFrameType, \r\n): Array => {\r\n\treturn array.filter((o: TGetImage) => !frameType || (o as any).frameType == frameType)\r\n\t.flatMap((o: TGetImage): Array => {\r\n\t\tconst arr = [];\r\n\t\tconst beforeSize = ext == EImageExtensions.mp4 ? '' : `/${ext}/lo`;\r\n\t\tfor (let i = 0; i != ((o as any).spinCount || 1); ++i){\r\n\t\t\tconst size = getCorrectImageSize(o.Sizes, screenSize);\r\n\t\t\tconst frameNum = (o as any).spinCount ? (i/1000).toFixed(3).replace('0.', '') : '';\r\n\t\t\tconst img = `${location.protocol}${o.Path}${beforeSize}/${size}/${o.Prefix}${frameNum}.${ext}`;\r\n\t\t\tarr.push(img);\r\n\t\t}\r\n\t\treturn arr;\r\n\t});\r\n};\r\n\r\ntype IArrayOfAllFakes = Array | Array | Array;\r\nconst remApplicable = (arr: IArrayOfAllFakes): void => {\r\n\tarr.forEach(o => {o.isinactive = false});\r\n};\r\nconst remMatches = (arr: IArrayOfAllFakes): void => {\r\n\tarr.forEach(o => {o.matches = false});\r\n};\r\nconst isApplicablePaint = (arr: Array, code: string): void => {\r\n\tarr.forEach(o => {\r\n\t\tif (o.applicablepaint.includes(code)){\r\n\t\t\to.matches = true;\r\n\t\t}\r\n\t});\r\n};\r\nconst isApplicable = (arr: IArrayOfAllFakes, code: string): void => {\r\n\tarr.forEach(o => {\r\n\t\tif (o.applicable.includes(code)){\r\n\t\t\to.matches = true;\r\n\t\t}\r\n\t});\r\n};\r\nconst isntApplicable = (arr: IArrayOfAllFakes): void => {\r\n\tarr.forEach(o => {\r\n\t\tif (!o.matches){\r\n\t\t\to.isinactive = true;\r\n\t\t}\r\n\t});\r\n};\r\nconst getBlankFakeColourElements = (vehicle: IVehicle): IFakeColourElements => {\r\n\tconst paints: Array = vehicle.Paints.map(o => {\r\n\t\treturn {\r\n\t\t\tpaintcode: o.PaintCode,\r\n\t\t\tpaintname: o.PaintName,\r\n\t\t\tvc: o.Vc,\r\n\t\t\tswatch: o.Swatch,\r\n\t\t\tapplicable: o.Applicable,\r\n\t\t\tactive: o.PaintCode == vehicle.PaintCode, \r\n\t\t\tmatches: false, \r\n\t\t\tisinactive: false\r\n\t\t};\r\n\t});\r\n\tconst trims: Array = vehicle.Trims.map(o => {\r\n\t\treturn {\r\n\t\t\ttrimcode: o.TrimCode,\r\n\t\t\ttrimname: o.TrimName,\r\n\t\t\tvc: o.Vc,\r\n\t\t\tswatch: o.Swatch,\r\n\t\t\tapplicable: o.Applicable,\r\n\t\t\tactive: o.TrimCode == vehicle.TrimCode, \r\n\t\t\tmatches: false, \r\n\t\t\tisinactive: false\r\n\t\t};\r\n\t});\r\n\tconst roofs: Array = vehicle.Roofs.map(o => {\r\n\t\treturn {\r\n\t\t\tpaintcode: o.PaintCode,\r\n\t\t\troofcode: o.RoofCode,\r\n\t\t\tpaintname: o.PaintName,\r\n\t\t\tvc: o.Vc,\r\n\t\t\tswatch: o.Swatch,\r\n\t\t\tapplicable: o.Applicable,\r\n\t\t\tapplicablepaint: o.ApplicablePaint,\r\n\t\t\tactive: o.RoofCode == vehicle.RoofCode, \r\n\t\t\tmatches: false,\r\n\t\t\tisinactive: false\r\n\t\t};\r\n\t});\r\n\treturn {\r\n\t\thash: '',\r\n\t\toriginalvariantcode: vehicle.CurrentVariantCode,\r\n\t\tcurrrentvariantcode: vehicle.CurrentVariantCode,\r\n\t\tpaints,\r\n\t\ttrims,\r\n\t\troofs\r\n\t};\r\n};\r\nconst getUpdatedFakeColourElementsFromPaint = (masterCode: string, fakeEls: IFakeColourElements): IFakeColourElements => {\r\n\tfakeEls.paints.filter(o => o.active).forEach(o => {o.active = false});\r\n\tlet paintCode = masterCode;\r\n\tlet variantCode;\r\n\t\r\n\tif (fakeEls.roofs.length){\r\n\t\tremApplicable(fakeEls.roofs);\r\n\t\tremMatches(fakeEls.roofs);\r\n\t\tisApplicablePaint(fakeEls.roofs, paintCode);\r\n\r\n\t\tfakeEls.roofs.filter(o => o.active).forEach(o => {o.active = false});\r\n\t\tfakeEls.roofs.filter(o => o.matches)[0].active = true;\r\n\t\t\r\n\t\tif (fakeEls.roofs.filter(o => o.active)[0].isinactive){\r\n\t\t\tfakeEls.roofs.filter(o => o.active)[0].active = false;\r\n\t\t\tfakeEls.roofs.filter(o => o.matches)[0].active = true;\r\n\t\t}\r\n\t}\r\n\r\n\tremApplicable(fakeEls.paints);\r\n\tremMatches(fakeEls.paints);\r\n\tremApplicable(fakeEls.trims);\r\n\tremMatches(fakeEls.trims);\r\n\tisApplicable(fakeEls.trims, paintCode);\r\n\tisntApplicable(fakeEls.trims);\r\n\r\n\tif (fakeEls.trims.filter(o => o.active)[0].isinactive){\r\n\t\tfakeEls.trims.filter(o => o.active)[0].active = false;\r\n\t\tfakeEls.trims.filter(o => o.matches)[0].active = true;\r\n\t}\r\n\tconst trimcodeverified = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\tisApplicable(fakeEls.paints, trimcodeverified);\r\n\tisntApplicable(fakeEls.paints);\r\n\r\n\tconst currentPaint = fakeEls.paints.filter(o => o.paintcode == masterCode)[0];\r\n\tcurrentPaint.active = !currentPaint.active;\r\n\t\r\n\tif (fakeEls.roofs.length) {\r\n\t\tpaintCode = fakeEls.roofs.filter(o => o.active)[0].roofcode;\r\n\t\tvariantCode = fakeEls.roofs.filter(o => o.active)[0].vc;\r\n\t} else {\r\n\t\tpaintCode = fakeEls.paints.filter(o => o.active)[0].paintcode;\r\n\t\tvariantCode = fakeEls.paints.filter(o => o.active)[0].vc;\r\n\t}\r\n\r\n\tconst trimCode = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\tconst trimVariantCode = fakeEls.trims.filter(o => o.active)[0].vc;\r\n\tconst currentvariantcode = fakeEls.originalvariantcode;\r\n\r\n\tif (currentvariantcode !== trimVariantCode || currentvariantcode !== variantCode) {\r\n\t\tif (currentvariantcode === variantCode && currentvariantcode != trimVariantCode) {\r\n\t\t\tvariantCode = trimVariantCode;\r\n\t\t}\r\n\t}\r\n\tfakeEls.hash = variantCode + trimCode + paintCode;\r\n\tfakeEls.currrentvariantcode = variantCode;\r\n\r\n\treturn fakeEls;\r\n};\r\nconst getUpdatedFakeColourElementsFromTrim = (masterCode: string, fakeEls: IFakeColourElements): IFakeColourElements => {\r\n\tfakeEls.trims.filter(o => o.active).forEach(o => {o.active = false});\r\n\r\n\tlet trimCode = masterCode;\r\n\tlet paintCode;\r\n\tlet variantCode;\r\n\r\n\tremApplicable(fakeEls.paints);\r\n\tremMatches(fakeEls.paints);\r\n\tremApplicable(fakeEls.trims);\r\n\tremMatches(fakeEls.trims);\r\n\tisApplicable(fakeEls.paints, trimCode);\r\n\tisntApplicable(fakeEls.paints);\r\n\r\n\tif (fakeEls.paints.filter(o => o.active)[0].isinactive){\r\n\t\tfakeEls.paints.filter(o => o.active)[0].active = false;\r\n\t\tfakeEls.paints.filter(o => o.matches)[0].active = true;\r\n\t}\r\n\r\n\tconst paintCodeVerified = fakeEls.paints.filter(o => o.active)[0].paintcode;\r\n\tisApplicable(fakeEls.trims, paintCodeVerified);\r\n\tisntApplicable(fakeEls.trims);\r\n\r\n\tfakeEls.trims.filter(o => o.active).forEach(o => {o.active = false});\r\n\tfakeEls.trims.filter(o => o.trimcode == masterCode)[0].active = true;\r\n\t\r\n\tif (fakeEls.roofs.length){\r\n\t\tpaintCode = fakeEls.roofs.filter(o => o.active)[0].roofcode;\r\n\t\tvariantCode = fakeEls.roofs.filter(o => o.active)[0].vc;\r\n\t} \r\n\telse {\r\n\t\tpaintCode = fakeEls.paints.filter(o => o.active)[0].paintcode;\r\n\t\tvariantCode = fakeEls.paints.filter(o => o.active)[0].vc;\r\n\t}\r\n\r\n\tconst trimVariantCode = fakeEls.trims.filter(o => o.active)[0].vc;\r\n\ttrimCode = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\r\n\tconst currentvariantcode = fakeEls.originalvariantcode;\r\n\tif (currentvariantcode !== trimVariantCode || currentvariantcode !== variantCode) {\r\n\t\tif (currentvariantcode === variantCode && currentvariantcode != trimVariantCode) {\r\n\t\t\tvariantCode = trimVariantCode;\r\n\t\t}\r\n\t}\r\n\tfakeEls.hash = variantCode + trimCode + paintCode;\r\n\tfakeEls.currrentvariantcode = variantCode;\r\n\r\n\treturn fakeEls;\r\n};\r\nconst getUpdatedFakeColourElementsFromRoof = (masterCode: string, fakeEls: IFakeColourElements): IFakeColourElements => {\r\n\tfakeEls.roofs.filter(o => o.active).forEach(o => {o.active = false});\r\n\tconst paintCode = fakeEls.roofs.filter(o => o.roofcode == masterCode)[0].roofcode;\r\n\r\n\tfakeEls.roofs.filter(o => o.active).forEach(o => {o.active = false});\r\n\tfakeEls.roofs.filter(o => o.roofcode == masterCode)[0].active = true;\r\n\r\n\tconst trimCode = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\tlet variantCode = fakeEls.roofs.filter(o => o.active)[0].vc;\r\n\tconst trimVariantCode = fakeEls.trims.filter(o => o.active)[0].vc;\r\n\r\n\tconst currentvariantcode = fakeEls.originalvariantcode;\r\n\tif (currentvariantcode !== trimVariantCode || currentvariantcode !== variantCode) {\r\n\t\tif (currentvariantcode === variantCode && currentvariantcode != trimVariantCode) {\r\n\t\t\tvariantCode = trimVariantCode;\r\n\t\t}\r\n\t}\r\n\tfakeEls.hash = variantCode + trimCode + paintCode;\r\n\treturn fakeEls;\r\n};\r\nconst getUpdatedFakeColourElementsFromHashOrNoHash = (materialHash: string, fakeEls: IFakeColourElements): IFakeColourElements => {\r\n\tlet paintCode = '';\r\n\tlet trimCode = '';\r\n\tlet variantCode = '';\r\n\r\n\tif (materialHash.length > 4 && !fakeEls.roofs.length){\r\n\t\tpaintCode = materialHash.substring(13, 17);\r\n\t\tif (fakeEls.paints.filter(o => o.active)[0].paintcode !== paintCode){\r\n\t\t\tfakeEls.paints.filter(o => o.active)[0].active = false;\r\n\t\t\tfakeEls.paints.filter(o => o.paintcode == paintCode)[0].active = true;\r\n\t\t}\r\n\t\ttrimCode = materialHash.substring(9, 13);\r\n\t\tremApplicable(fakeEls.paints);\r\n\t\tremMatches(fakeEls.paints);\r\n\t\tremApplicable(fakeEls.trims);\r\n\t\tremMatches(fakeEls.trims);\r\n\t\tisApplicable(fakeEls.trims, paintCode)\r\n\t\tisntApplicable(fakeEls.trims);\r\n\r\n\t\tfakeEls.trims.filter(o => o.active).forEach(o => {o.active = false});\r\n\t\tfakeEls.trims.filter(o => o.matches && o.trimcode == trimCode)[0].active = true;\r\n\r\n\t\tconst trimcodeverified = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\t\tisApplicable(fakeEls.paints, trimcodeverified)\r\n\t\tisntApplicable(fakeEls.paints);\r\n\t} else {\r\n\t\tpaintCode = fakeEls.paints.filter(o => o.active)[0].paintcode;\r\n\t}\r\n\r\n\tif (fakeEls.roofs.length && materialHash.length > 4) {\r\n\t\tlet colourCode = paintCode;\r\n\r\n\t\tif (materialHash.length > 4) {\r\n\t\t\tpaintCode = materialHash.substring(13, 17);\r\n\t\t\tconst foundroof = fakeEls.roofs.filter(o => o.roofcode == paintCode)[0];\r\n\r\n\t\t\tfakeEls.roofs.filter(o => o.active).forEach(o => {o.active = false});\r\n\t\t\tfoundroof.active = true;\r\n\r\n\t\t\tcolourCode = foundroof.applicablepaint[0];\r\n\r\n\t\t\tif (fakeEls.paints.filter(o => o.active)[0].paintcode !== colourCode){\r\n\t\t\t\tfakeEls.paints.filter(o => o.active)[0].active = false;\r\n\t\t\t\tfakeEls.paints.filter(o => o.paintcode == colourCode)[0].active = true;\r\n\t\t\t}\r\n\r\n\t\t\ttrimCode = materialHash.substring(9, 13);\r\n\t\t}\r\n\t\tremApplicable(fakeEls.roofs);\r\n\t\tremMatches(fakeEls.roofs);\r\n\t\tisApplicablePaint(fakeEls.roofs, colourCode);\r\n\t\tif (fakeEls.roofs.filter(o => o.active)[0].isinactive){\r\n\t\t\tfakeEls.roofs.filter(o => o.active)[0].active = false;\r\n\t\t\tfakeEls.roofs.filter(o => o.roofcode == paintCode)[0].active = true;\r\n\t\t}\r\n\t\tremApplicable(fakeEls.paints);\r\n\t\tremMatches(fakeEls.paints);\r\n\t\tremApplicable(fakeEls.trims);\r\n\t\tremMatches(fakeEls.trims);\r\n\t\tisApplicable(fakeEls.trims, colourCode);\r\n\t\tisntApplicable(fakeEls.trims);\r\n\r\n\t\tif (fakeEls.trims.filter(o => o.active)[0].isinactive){\r\n\t\t\tfakeEls.trims.filter(o => o.active)[0].active = false;\r\n\t\t\tfakeEls.trims.filter(o => o.matches)[0].active = true;\r\n\t\t}\r\n\r\n\t\tconst trimcodeverified = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\t\tisApplicable(fakeEls.paints, trimcodeverified)\r\n\t\tisntApplicable(fakeEls.paints);\r\n\t}\r\n\r\n\tif (fakeEls.roofs.length && materialHash.length < 4) {\r\n\t\tremApplicable(fakeEls.roofs);\r\n\t\tremMatches(fakeEls.roofs);\r\n\t\tisApplicablePaint(fakeEls.roofs, paintCode);\r\n\r\n\t\tfakeEls.roofs.filter(o => o.active).forEach(o => {o.active = false});\r\n\t\tfakeEls.roofs.filter(o => o.matches)[0].active = true;\r\n\r\n\t\tif (fakeEls.roofs.filter(o => o.active)[0].isinactive){\r\n\t\t\tfakeEls.roofs.filter(o => o.active)[0].active = false;\r\n\t\t\tfakeEls.roofs.filter(o => o.matches)[0].active = true;\r\n\t\t}\r\n\t\tremApplicable(fakeEls.paints);\r\n\t\tremMatches(fakeEls.paints);\r\n\t\tremApplicable(fakeEls.trims);\r\n\t\tremMatches(fakeEls.trims);\r\n\t\tisApplicable(fakeEls.trims, paintCode);\r\n\t\tisntApplicable(fakeEls.trims);\r\n\t\tif (fakeEls.trims.filter(o => o.active)[0].isinactive){\r\n\t\t\tfakeEls.trims.filter(o => o.active)[0].active = false;\r\n\t\t\tfakeEls.trims.filter(o => o.matches)[0].active = true;\r\n\t\t}\r\n\t\tconst trimcodeverified = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\t\tisApplicable(fakeEls.paints, trimcodeverified)\r\n\t\tisntApplicable(fakeEls.paints);\r\n\t}\r\n\tif (materialHash.length < 4) {\r\n\t\tremApplicable(fakeEls.paints);\r\n\t\tremMatches(fakeEls.paints);\r\n\t\tremApplicable(fakeEls.trims);\r\n\t\tremMatches(fakeEls.trims);\r\n\t\tisApplicable(fakeEls.trims, paintCode);\r\n\t\tisntApplicable(fakeEls.trims);\r\n\r\n\t\tif (fakeEls.trims.filter(o => o.active)[0].isinactive){\r\n\t\t\tfakeEls.trims.filter(o => o.active)[0].active = false;\r\n\t\t\tfakeEls.trims.filter(o => o.matches)[0].active = true;\r\n\t\t}\r\n\r\n\t\tconst trimcodeverified = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\t\tisApplicable(fakeEls.paints, trimcodeverified);\r\n\t\tisntApplicable(fakeEls.paints);\r\n\t}\r\n\tif (fakeEls.roofs.length) {\r\n\t\tpaintCode = fakeEls.roofs.filter(o => o.active)[0].roofcode;\r\n\t\tvariantCode = fakeEls.roofs.filter(o => o.active)[0].vc;\r\n\t} else {\r\n\t\tpaintCode = fakeEls.paints.filter(o => o.active)[0].paintcode;\r\n\t\tvariantCode = fakeEls.paints.filter(o => o.active)[0].vc;\r\n\t}\r\n\r\n\ttrimCode = fakeEls.trims.filter(o => o.active)[0].trimcode;\r\n\tconst trimVariantCode = fakeEls.trims.filter(o => o.active)[0].vc;\r\n\tconst currentvariantcode = fakeEls.originalvariantcode;\r\n\r\n\tif (currentvariantcode !== trimVariantCode || currentvariantcode !== variantCode) {\r\n\t\tif (currentvariantcode === variantCode && currentvariantcode != trimVariantCode) {\r\n\t\t\tvariantCode = trimVariantCode;\r\n\t\t}\r\n\t}\r\n\r\n\tfakeEls.hash = variantCode + trimCode + paintCode;\r\n\r\n\treturn fakeEls;\r\n};\r\nexport const getUpdatedFakeColourElements = (\r\n\tmasterSwatch: EToggles | null, \r\n\tmasterCode: string, \r\n\tvehicle: IVehicle, \r\n\tfakeColourEls: IFakeColourElements | null\r\n): IFakeColourElements => {\t\r\n\tconst defaultFakeEls: IFakeColourElements = fakeColourEls ? fakeColourEls : getBlankFakeColourElements(vehicle);\r\n\tconsole.log('defaultFakeEls',defaultFakeEls)\r\n\r\n\tlet { hash, paints, trims, roofs, currrentvariantcode, originalvariantcode } = defaultFakeEls;\r\n\tswitch (masterSwatch){\r\n\t\tcase EToggles.paint: {\r\n\t\t\t({ hash, paints, trims, roofs, currrentvariantcode, originalvariantcode } = getUpdatedFakeColourElementsFromPaint(masterCode, defaultFakeEls));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase EToggles.trim: {\r\n\t\t\t({ hash, paints, trims, roofs, currrentvariantcode, originalvariantcode } = getUpdatedFakeColourElementsFromTrim(masterCode, defaultFakeEls));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase EToggles.roof: {\r\n\t\t\t({ hash, paints, trims, roofs, currrentvariantcode, originalvariantcode } = getUpdatedFakeColourElementsFromRoof(masterCode, defaultFakeEls));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault: {\r\n\t\t\t({ hash, paints, trims, roofs, currrentvariantcode, originalvariantcode } = getUpdatedFakeColourElementsFromHashOrNoHash(masterCode, defaultFakeEls));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn {\r\n\t\thash,\r\n\t\tcurrrentvariantcode,\r\n\t\toriginalvariantcode,\r\n\t\tpaints,\r\n\t\ttrims,\r\n\t\troofs\r\n\t};\r\n};\r\nexport const getInitialVehicle = (sb: IVehicle): IVehicle => {\r\n\treturn {\r\n\t\tBatch: sb.Batch || '',\r\n\t\tVehicleLine: sb.VehicleLine,\r\n\t\tFullDescription: sb.FullDescription,\r\n\t\tFullDescriptionForFinance: sb.FullDescriptionForFinance,\r\n\t\tIsVirtual: sb.IsVirtual,\r\n\t\tVirtualVehicleId: sb.VirtualVehicleId,\r\n\t\tSpecificationId: sb.SpecificationId,\r\n\t\tVsId: sb.VsId,\r\n\t\tDealer: sb.Dealer,\r\n\t\tBaseModelCode: sb.BaseModelCode,\r\n\t\tYear: sb.Year,\r\n\t\tPlannedMonth: sb.PlannedMonth,\r\n\t\tOrderEnabled: sb.OrderEnabled,\r\n\t\tCurrentVariantCode: sb.CurrentVariantCode,\r\n\t\tVariantCode: sb.VariantCode,\r\n\t\tPaintCode: sb.Roofs && sb.Roofs.length ? sb.Roofs.filter(o => o.RoofCode == sb.PaintCode).map(o => o.PaintCode).toString().split(',')[0] : sb.PaintCode,\r\n\t\tRoofCode: sb.PaintCode,\r\n\t\tTrimCode: sb.TrimCode,\r\n\t\tPaints: sb.Paints || [],\r\n\t\tTrims: sb.Trims || [],\r\n\t\tRoofs: sb.Roofs || [],\r\n\r\n\t\tVehicleType: sb.VehicleType,\r\n\t\tVin: sb.Vin,\r\n\t\tGrade: sb.Grade,\r\n\t\tTransmission: sb.Transmission,\r\n\t\tHasTprApplied: sb.HasTprApplied,\r\n\t\tPageType: sb.PageType, \r\n\t\tPrice: sb.Price, \r\n\t\tFactoryOption: sb.FactoryOption, \r\n\r\n\t\tRego: sb.Rego || '',\r\n\t\tOffers: sb.Offers || []\r\n\t};\r\n}\r\nconst replaceSwatchImg = (img: Element, newUrl: string, alt: string): void => {\r\n\timg.setAttribute('src', newUrl);\r\n\timg.setAttribute('alt', alt);\r\n}\r\nconst getNewSwatchData = (newVehicle: IVehicle): INewSwatchData => {\r\n\tconst newPaintName = newVehicle.Roofs.length ? \r\n\t\tnewVehicle.Roofs\r\n\t\t\t.filter(o => o.RoofCode == newVehicle.RoofCode)\r\n\t\t\t.map(o => o.PaintName).toString() : \r\n\t\tnewVehicle.Paints\r\n\t\t\t.filter(o => o.PaintCode == newVehicle.PaintCode)\r\n\t\t\t.map(o => o.PaintName).toString()\r\n\t\t;\r\n\tconst newTrimName = newVehicle.Trims\r\n\t\t.filter(o => o.TrimCode == newVehicle.TrimCode)\r\n\t\t.map(o => o.TrimName).toString();\r\n\tconst newPaintUrl = newVehicle.Paints\r\n\t\t.filter(o => o.PaintCode == newVehicle.PaintCode)\r\n\t\t.map(o => o.Swatch).toString();\r\n\tconst newTrimUrl = newVehicle.Trims\r\n\t\t.filter(o => o.TrimCode == newVehicle.TrimCode)\r\n\t\t.map(o => o.Swatch).toString();\r\n\tconst newRoofUrl = newVehicle.Roofs\r\n\t\t.filter(o => o.RoofCode == newVehicle.RoofCode)\r\n\t\t.map(o => o.Swatch).toString();\r\n\r\n\treturn {\r\n\t\tnewPaintName,\r\n\t\tnewPaintUrl,\r\n\t\tnewTrimName, \r\n\t\tnewTrimUrl, \r\n\t\tnewRoofUrl\r\n\t}\r\n};\r\nexport const changeSwatchesInDocument = (newVehicle: IVehicle): void => {\r\n\tconst paintNames = document.querySelectorAll('[data-dynamic-paint-name]');\r\n\tconst trimNames = document.querySelectorAll('[data-dynamic-trim-name]');\r\n\tconst imgsPaint = document.querySelectorAll('[data-dynamic-paint]');\r\n\tconst imgsTrim = document.querySelectorAll('[data-dynamic-trim]');\r\n\tconst imgsRoof = document.querySelectorAll('[data-dynamic-roof]');\r\n\tconst { newPaintName, newPaintUrl, newTrimName, newTrimUrl, newRoofUrl } = getNewSwatchData(newVehicle);\r\n\r\n\tpaintNames.forEach(el => {\r\n\t\tel.innerHTML = newPaintName;\r\n\t});\r\n\ttrimNames.forEach(el => {\r\n\t\tel.innerHTML = newTrimName;\r\n\t});\r\n\timgsPaint.forEach(img => {\r\n\t\treplaceSwatchImg(img, `${newPaintUrl}`, newPaintName);\r\n\t});\r\n\timgsTrim.forEach(img => {\r\n\t\treplaceSwatchImg(img, `${newTrimUrl}`, newTrimName);\r\n\t});\r\n\timgsRoof.forEach(img => {\r\n\t\tif (newRoofUrl){\r\n\t\t\timg.closest('.tb-colour.tb-roof')?.setAttribute('style', '');\r\n\t\t\treplaceSwatchImg(img, `${newRoofUrl}`, newPaintName);\r\n\t\t}\r\n\t\telse {\r\n\t\t\timg.closest('.tb-colour.tb-roof')?.setAttribute('style', 'display:none');\r\n\t\t}\r\n\t});\r\n};\r\nexport const getCodes = (fakeColourEls: IFakeColourElements): ICodes => {\r\n\t// hashMaterial.substring(0, 9) variant\r\n\t// hashMaterial.substring(9, 13) trim\r\n\t// hashMaterial.substring(13, 17) paint roof\r\n\t// return {\r\n\t// \tisValid: hash.length == 16,\r\n\t// \tvariantCode: hash.substring(0, 9),\r\n\t// \ttrimCode: hash.substring(9, 13), \r\n\t// \troofCode: roofs.length ? hash.substring(13, 17) : '', \r\n\t// \tpaintCode: roofs.length ? roofs\r\n\t// \t\t.filter(o => o.RoofCode == hash.substring(13, 17))\r\n\t// \t\t.map(o => o.ApplicablePaint).toString()\r\n\t// \t: hash.substring(13, 17)\r\n\t// };\r\n\treturn {\r\n\t\tisValid: true,\r\n\t\tvariantCode: fakeColourEls.currrentvariantcode,\r\n\t\tpaintCode: fakeColourEls.paints.filter(o => o.active).map(o => o.paintcode).toString(),\r\n\t\ttrimCode: fakeColourEls.trims.filter(o => o.active).map(o => o.trimcode).toString(),\r\n\t\troofCode: fakeColourEls.roofs.filter(o => o.active).map(o => o.roofcode).toString() || ''\r\n\t};\r\n}\r\nexport function formatPrice(p: number){\r\n const whole = Math.floor(p);\r\n const remainder = p - whole;\r\n const formatter = new Intl.NumberFormat('en-AU', {\r\n style: 'currency',\r\n currency: 'AUD',\r\n minimumFractionDigits: remainder ? 2 : 0\r\n });\r\n return formatter.format(p);\r\n}\r\n// function validateRecaptcha(form, recaptcha){\r\n// var $recaptcha = getRecaptchaDiv(form);\r\n// $recaptcha.next('.field-validation-error').remove();\r\n// if (!recaptcha){\r\n// $recaptcha.after('
Please complete the captcha.
');\r\n// return false;\r\n// }\r\n// return true;\r\n// }\r\n// function resetRecaptcha(formOrButton){\r\n// if (typeof grecaptcha == 'undefined') return '';\r\n// var $recaptcha = getRecaptchaDiv(formOrButton);\r\n// var id = parseInt($recaptcha.attr('data-id'));\r\n// grecaptcha.reset(id);\r\n// }\r\n// function getRecaptchaDiv(formOrButton){\r\n// if (typeof grecaptcha == 'undefined') return '';\r\n// var $form = formOrButton.tagName === 'FORM' ? $(formOrButton) : $(formOrButton).closest('form');\r\n// return $form.find('.g-recaptcha');\r\n// }\r\n// function getRecaptcha(formOrButton){\r\n// if (typeof grecaptcha == 'undefined') return '';\r\n// var $recaptcha = getRecaptchaDiv(formOrButton);\r\n// var recaptcha = grecaptcha.getResponse(parseInt($recaptcha.attr('data-id')));\r\n// return recaptcha;\r\n// }\r\n// function recaptchaApiLoaded(){\r\n// var key = !location.href.includes('localhost') ? '6LfjD8EUAAAAAHWKFtKD1Yxx7HZWzOafhrUjBSbR' : '6LfN8bEUAAAAAHycQXBxTvtI-n86hl6ENhyVXqke';\r\n// var $recaptchas = $('.g-recaptcha');\r\n \r\n// if (grecaptcha){\r\n// var normalRecaptchaWidth = 304;\r\n// $recaptchas.each(function(){\r\n// var $me = $(this);\r\n// var id = $me.attr('id');\r\n// if (id){\r\n// var recaptchaSize = $me.innerWidth() < normalRecaptchaWidth ? 'compact' : 'normal';\r\n// var reid = grecaptcha.render(id, {\r\n// 'sitekey' : key,\r\n// 'callback' : handleRecaptchaCallback.bind(this), \r\n// 'expired-callback': handleRecaptchaExpired.bind(this), \r\n// 'size': recaptchaSize\r\n// });\r\n// $me.attr('data-id', reid);\r\n// }\r\n// });\r\n// }\r\n// }\r\n// function handleRecaptchaExpired(){\r\n// $(this).after('
Please complete the captcha.
');\r\n// }\r\n// function handleRecaptchaCallback($recaptcha){\r\n// $(this).next('.field-validation-error').remove();\r\n// }","import { \r\n\tEFinaceToggleTypes,\r\n\tEFinanceTypes, \r\n\tESpecialTypes \r\n} from '@/enums';\r\nimport { \r\n\tchangeSwatchesInDocument,\r\n\tgetCodes,\r\n\tgetCookie,\r\n\tgetDisclaimerKey,\r\n\tgetUpdatedFakeColourElements,\r\n\tshouldShowPricing\r\n} from '@/helpers';\r\nimport { \r\n\tgetVehicleImages, \r\n\tgetVehiclePricing, \r\n\tgetDemoVehicleImages\r\n} from '@/api';\r\n\r\nimport { \r\n\tIDetailAppState, \r\n\tIVehicle,\r\n\tIVehiclePricing,\r\n\tIVehicleImages, \r\n\tIRoofOption,\r\n\tIVehicleImage360,\r\n\tIFakeColourElements,\r\n\tIOpeningInfoItem,\r\n\tIAdvantageDataItem,\r\n\tISources,\r\n\tFSLApiData,\r\n\tDisclaimerItem,\r\n} from '@/types';\r\n\r\nconst state: IDetailAppState = {\r\n\tdisclaimers: [],\r\n\tisFslLoading: false,\r\n\tfsl: null, \r\n\tselectedFinanceType: EFinaceToggleTypes.finance,\r\n\tshowExternalCustomise: true,\r\n\toriginalBatch: '',\r\n\tdisableNewDisclaimer: false,\r\n\tfakeSpecial: (location.href.includes('localhost:') || location.href.includes('test.dealer')) && location.search.includes('fakeSpecial=true'),\r\n\tdebug: (location.href.includes('localhost:') || location.href.includes('test.dealer')) && location.search.includes('test=1'),\r\n\tisLoading: false,\r\n\tscreenSize: 0,\r\n\tscreenHeight: 0,\r\n\topeningInfo: [],\r\n\tform_token: \"\",\r\n\tform_privacy: [],\r\n\ttprSource: null,\r\n\tfakeColourEls: {\r\n\t\thash: '',\r\n\t\tcurrrentvariantcode: '',\r\n\t\toriginalvariantcode: '',\r\n\t\tpaints: [],\r\n\t\ttrims: [],\r\n\t\troofs: []\r\n\t},\r\n\tvehicle: {\r\n\t\tBatch: \"\",//for demo\r\n\t\tVehicleLine: \"\",\r\n\t\tFullDescription: \"\",\r\n\t\tFullDescriptionForFinance: \"\",\r\n\t\tIsVirtual: false,\r\n\t\tVirtualVehicleId: \"\",\r\n\t\tSpecificationId: \"\",\r\n\t\tVsId: 0,\r\n\t\tDealer: {\r\n\t\t\tPostcode: \"\",\r\n\t\t\tDealerId: 0,\r\n\t\t\tActualDealerId: 0,\r\n\t\t\tDealerCode: \"\",\r\n\t\t\tLocations: [], \r\n\t\t\tClickToCalls: []\r\n\t\t},\r\n\t\tBaseModelCode: \"\",\r\n\t\tYear: \"\",\r\n\t\tPlannedMonth: \"\",\r\n\t\tOrderEnabled: false,\r\n\t\tCurrentVariantCode: \"\",\r\n\t\tVariantCode: \"\",\r\n\t\tPaintCode: \"\",\r\n\t\tRoofCode: \"\",\r\n\t\tTrimCode: \"\",\r\n\t\tPaints: [],\r\n\t\tTrims: [],\r\n\t\tRoofs: [], \r\n\t\tVehicleType: \"\",\r\n\t\tVin: \"\",\r\n\t\tGrade: \"\",\r\n\t\tTransmission: \"\",\r\n\t\tHasTprApplied: false,\r\n\t\tPageType: \"\", \r\n\t\tPrice: \"\", \r\n\t\tFactoryOption: \"\", \r\n\t\tRego: \"\",\r\n\t\tOffers: []\r\n\t}, \r\n\tdemoImages: [],\r\n\timages: {\r\n\t\tDefaultFrame: \"\",\r\n\t\tPath_360: [],\r\n\t\tPath_Int: [],\r\n\t\tPath_Ext: [],\r\n\t\tPath_Hero: [],\r\n\t\tPath_Video: [],\r\n\t\tPath_CubeMap: []\r\n\t}, \r\n\tpricing: {\r\n\t\tmaterialcode: \"\",\r\n\t\tdriveaway: \"\",\r\n\t\tfinanceDisclaimerKey: \"\",\r\n\t\tfinancerate: \"\",\r\n\t\tfinanceweekly: \"\",\r\n\t\tfinanceType: 1,\r\n\t\tisNationalSpecial: false,\r\n\t\tisDealerSpecial: false,\r\n\t\tstockDescription: \"\",\r\n\t\tspecialApplied: \"\",\r\n\t\tspecialDisclaimerKey: \"\",\r\n\t\tspecialExtra: \"\",\r\n\t\tpriceType: \"\",\r\n\t\tvin: \"\",\r\n\t\tbuildyear: \"\",\r\n\t\tspecialItem: null,\r\n\t\tbatch: \"\",\r\n\t\tisCabChassis: false,\r\n\t\tisZeroPrice: true,\r\n\t\twasFinanced: false,\r\n\t\tstockType: 1,\r\n\t\tpriceresult: {\r\n\t\t\tDriveAwayPrice: 0,\r\n\t\t\tresponseCode: \"\",\r\n\t\t\tRRP: null,\r\n\t\t\tStampDuty: null,\r\n\t\t\tDealerDeliveryFees: null,\r\n\t\t\tLCT: null,\r\n\t\t\tRegistrationFees: null,\r\n\t\t\tcallresult: {\r\n\t\t\t\tmaterialNumber: null,\r\n\t\t\t\tDriveAwayPrice: 0,\r\n\t\t\t\tListPrice: 0,\r\n\t\t\t\tOptionsPrice: 0,\r\n\t\t\t\tAccessoriesPrice: 0,\r\n\t\t\t\tDealerDelivery: 0,\r\n\t\t\t\tLuxuryCarTax: 0,\r\n\t\t\t\tPostCode: \"\",\r\n\t\t\t\tOnRoadCosts: {\r\n\t\t\t\t\tStampDuty: 0,\r\n\t\t\t\t\tTotalRegistration: 0,\r\n\t\t\t\t\tRegistrationAmount: 0,\r\n\t\t\t\t\tCtpInsuranceAmount: 0\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tfinanceDisclaimer: \"\",\r\n\t\tcanBePurchased: false,\r\n\t\tstoreUrl: \"\",\r\n\t\tfinanceYears: \"\",\r\n\t\tfinanceTotalKms: \"\",\r\n\t\tfinanceHeading: \"\",\r\n\t\tinternalFinanceType: \"\",\r\n\t\tcmpFrom: \"\",\r\n\t\tcmpTo: \"\",\r\n\t\tcreditScore: \"\",\r\n\t\tstoreWhyBuy: \"\",\r\n\t\tAPR: \"\",\r\n\t\tIsTPR: false,\r\n\t\tTprEnabled: false,\r\n\t\tHideTprUntilMatrix: false,\r\n\t\tCtaEnabled: false, \r\n\t\tOffers: []\r\n\t},\r\n\tadvantages: []\r\n};\r\nconst getters = {\r\n\tisDemo: (state: IDetailAppState): boolean => {\r\n\t\treturn !state.vehicle.CurrentVariantCode && !!state.originalBatch;\r\n\t},\r\n\tisGreatValue: (state: IDetailAppState): boolean => {\r\n\t\treturn state.pricing.specialItem?.SpecialType == ESpecialTypes.greatValue;\r\n\t},\r\n\tisSpecialOffer: (state: IDetailAppState): boolean => {\r\n\t\treturn state.pricing.specialItem?.SpecialType == ESpecialTypes.specialOffer;\r\n\t},\r\n\tisDealerSpecial: (state: IDetailAppState): boolean => {\r\n\t\treturn state.pricing.isDealerSpecial;\r\n\t},\r\n\tspecialExtraDisplayed: (state: IDetailAppState): string => {\r\n\t\treturn state.pricing.specialItem?.SpecialExtra?.join(', ') || '';\r\n\t},\r\n\tpriceDisplayed: (state: IDetailAppState): string => {\r\n\t\tif (shouldShowPricing(state.pricing)){\r\n\t\t\tconst driveawayDisclaimerKey = getDisclaimerKey(state.pricing);\r\n\t\t\treturn `${state.pricing.driveaway} driveaway ${driveawayDisclaimerKey}`;\r\n\t\t}\r\n\t\treturn '';\r\n\t},\r\n\tcomparisonRate: (state: IDetailAppState): string => {\r\n\t\tif (state.vehicle.IsVirtual){\r\n\t\t\treturn (state.pricing.financeType === EFinanceTypes.AccessConsumer || state.pricing.financeType === EFinanceTypes.Consumer) ? state.pricing.financerate + '% Comparision rate' : '';\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// todo: get from el\r\n\t\t\treturn '';\r\n\t\t}\r\n\t},\r\n\tfinanceType: (state: IDetailAppState): string => {\r\n\t\tif (state.vehicle.IsVirtual){\r\n\t\t\tif (state.pricing.financeType === EFinanceTypes.AccessConsumer) {\r\n\t\t\t\treturn \"Consumer Loan Access\";\r\n\t\t\t}\r\n\t\t\tif (state.pricing.financeType === EFinanceTypes.AccessBusiness) {\r\n\t\t\t\treturn \"Business Loan Access\";\r\n\t\t\t}\r\n\t\t\tif (state.pricing.financeType === EFinanceTypes.Business) {\r\n\t\t\t\treturn \"Business Loan\";\r\n\t\t\t}\r\n\t\t\tif (state.pricing.financeType === EFinanceTypes.Consumer) {\r\n\t\t\t\treturn \"Consumer Loan\";\r\n\t\t\t}\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// todo: get from el\r\n\t\t\treturn '';\r\n\t\t}\r\n\t},\r\n\tfinanceDisplayed: (state: IDetailAppState, getters: any): string => {\r\n\t\tif (state.vehicle.IsVirtual){\r\n\t\t\tif (!state.pricing.HideTprUntilMatrix){\r\n\t\t\t\tconst comparisonrate = getters['comparisonRate'];\r\n\t\t\t\tconst financetype = getters['financeType'];\r\n\t\t\t\treturn `${state.pricing.financeweekly}/wk ${comparisonrate} ${financetype}`;\r\n\t\t\t}\r\n\t\t\telse return '';\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// todo: get from el\r\n\t\t\treturn '';\r\n\t\t}\r\n\t},\r\n\tvehicleHash: (state: IDetailAppState, getters: any): string => \r\n\t\tstate.vehicle.IsVirtual ? getters.fakeColourEls.hash : `${state.vehicle.CurrentVariantCode}${state.vehicle.TrimCode}${state.vehicle.Roofs.length ? state.vehicle.RoofCode : state.vehicle.PaintCode}`,\r\n\tfakeColourEls: (state: IDetailAppState): IFakeColourElements => state.fakeColourEls,\r\n\troofs: (state: IDetailAppState): Array => state.vehicle.Roofs,\r\n}\r\nconst mutations = {\r\n\tsetIsFslLoading(state: IDetailAppState, payload: boolean){\r\n\t\tstate.isFslLoading = payload;\r\n\t},\r\n\tsetFsl(state: IDetailAppState, payload: FSLApiData | null){\r\n\t\tstate.fsl = payload;\r\n\t},\r\n\tsetSelectedFinanceType(state: IDetailAppState, payload: EFinaceToggleTypes){\r\n\t\tstate.selectedFinanceType = payload;\r\n\t},\r\n\tsetOriginalBatch(state: IDetailAppState, payload: string){\r\n\t\tstate.originalBatch = payload;\r\n\t},\r\n\tsetFormPrivacy(state: IDetailAppState, payload: Array){\r\n\t\tstate.form_privacy = payload;\r\n\t},\r\n\tsetFormToken(state: IDetailAppState, payload: string){\r\n\t\tstate.form_token = payload;\r\n\t},\r\n\tsetOpeningInfo(state: IDetailAppState, payload: Array){\r\n\t\tstate.openingInfo = payload;\r\n\t},\r\n\tsetDemoImages(state: IDetailAppState, payload: Array){\r\n\t\tstate.demoImages = payload;\r\n\t},\r\n\tsetImages(state: IDetailAppState, payload: IVehicleImages){\r\n\t\tstate.images = payload;\r\n\t},\r\n\tsetImages360(state: IDetailAppState, payload: Array){\r\n\t\tstate.images.Path_360 = payload;\r\n\t},\r\n\tsetIsLoading(state: IDetailAppState, payload: boolean){\r\n\t\tstate.isLoading = payload;\r\n\t},\r\n\tsetScreenSize(state: IDetailAppState, payload: number){\r\n\t\tstate.screenSize = payload;\r\n\t},\r\n\tsetScreenHeight(state: IDetailAppState, payload: number){\r\n\t\tstate.screenHeight = payload;\r\n\t},\r\n\tsetVehicle(state: IDetailAppState, payload: IVehicle){\r\n\t\tstate.vehicle = payload;\r\n\t},\r\n\tsetPricing(state: IDetailAppState, payload: IVehiclePricing){\r\n\t\tstate.pricing = payload;\r\n\t},\r\n\tsetPaintActive(state: IDetailAppState, payload: string){\r\n\t\tstate.vehicle.PaintCode = payload;\r\n\t},\r\n\tsetTrimActive(state: IDetailAppState, payload: string){\r\n\t\tstate.vehicle.TrimCode = payload;\r\n\t},\r\n\tsetRoofActive(state: IDetailAppState, payload: string){\r\n\t\tstate.vehicle.RoofCode = payload;\r\n\t},\r\n\tsetVariantActive(state: IDetailAppState, payload: string){\r\n\t\tstate.vehicle.CurrentVariantCode = payload;\r\n\t}, \r\n\tsetFakeColourEls(state: IDetailAppState, payload: IFakeColourElements){\r\n\t\tstate.fakeColourEls = payload;\r\n\t},\r\n\tsetAdvantages(state: IDetailAppState, payload: Array){\r\n\t\tstate.advantages = payload;\r\n\t},\r\n\tsetSources(state: IDetailAppState, payload: ISources){\r\n\t\tstate.tprSource = payload.tprSource;\r\n\t},\r\n\tsetDisclaimers(state: IDetailAppState, payload: Array){\r\n\t\t(state.disclaimers as any) = payload;\r\n\t},\r\n\taddDisclaimer(state: IDetailAppState, payload: DisclaimerItem){\r\n\t\t(state.disclaimers as any) = [...state.disclaimers, payload];\r\n\t},\r\n};\r\nconst actions = {\r\n\thandleInitialLoad({ dispatch, commit, getters }: { dispatch: any, commit: any, getters: any }, initialVehicle: IVehicle){\r\n\t\tif (initialVehicle.IsVirtual){\r\n\t\t\tconst hashMaterial: string = (window.location.hash || '').split('&')[0].replace('#','');\r\n\t\t\tconst isHashValid = hashMaterial.length == 16;\r\n\t\t\tconst initialCode = `${initialVehicle.CurrentVariantCode}${initialVehicle.TrimCode}${initialVehicle.Roofs.length ? initialVehicle.RoofCode : initialVehicle.PaintCode}`;\r\n\t\t\tconst fakeEls = getUpdatedFakeColourElements(null, isHashValid ? hashMaterial : initialCode, initialVehicle, null);\r\n\r\n\t\t\tcommit('setFakeColourEls', fakeEls)\r\n\t\t\tif (initialCode != fakeEls.hash){\r\n\t\t\t\tconst codes = getCodes(fakeEls);\r\n\t\t\t\t\r\n\t\t\t\tinitialVehicle.CurrentVariantCode = codes.variantCode;\r\n\t\t\t\tinitialVehicle.TrimCode = codes.trimCode;\r\n\t\t\t\tinitialVehicle.RoofCode = codes.roofCode;\r\n\t\t\t\tinitialVehicle.PaintCode = codes.paintCode;\r\n\t\t\t\tcommit('setVehicle', initialVehicle);\r\n\t\t\t}\r\n\t\t\tdispatch('setHash');\r\n\t\t\tdispatch('handleVehicleChange');\r\n\t\t}\r\n\t},\r\n\tsetHash({ getters }: { getters: any }): void {\r\n\t\tconst h = getters.fakeColourEls.hash;\r\n\t\t(window as any).location.hash = h;\r\n\t},\r\n\tasync handleVehicleChange({ commit, getters, state, dispatch }: { commit: any, getters: any, state: any, dispatch: any }): Promise {\r\n\t\tcommit('setIsLoading', true);\r\n\t\tconst hash = getters.vehicleHash;\r\n\t\tconst images: IVehicleImages = await getVehicleImages(hash, state.vehicle.PlannedMonth);\r\n\t\tcommit('setImages', images);\r\n\t\tif (state.vehicle.IsVirtual){\r\n\t\t\tchangeSwatchesInDocument(state.vehicle);\r\n\t\t\tconst pricing: IVehiclePricing = await getVehiclePricing(state.vehicle, hash, state.fakeSpecial);\r\n\t\t\tcommit('setPricing', pricing);\r\n\t\t\tdispatch('sendDetailAnalytics');\r\n\t\t}\r\n\t\tcommit('setIsLoading', false);\r\n\t}, \r\n\tasync loadDemoImages({ commit, state }: { commit: any, state: any }){\r\n\t\tconst v = state.vehicle;\r\n\t\tif (!v.Batch) return;\r\n\t\tconst imgs = await getDemoVehicleImages(v.Dealer.DealerId, v.Batch);\r\n\t\tif (!imgs) return;\r\n\t\tcommit('setDemoImages', imgs);\r\n\t}, \r\n\tsendDetailAnalytics({ state, getters }: { state: IDetailAppState, getters: any }){\r\n\t\tconst dataLayer = (window as any).dataLayer || [];\r\n\t\tconst model = state.vehicle.VehicleLine;\r\n\t\tconst tprcaseid = getCookie('tprcaseid') || '(not set)';\r\n\t\tconst colour = state.vehicle.Paints.filter(o => o.PaintCode == state.vehicle.PaintCode).map(o => o.PaintName).toString();\r\n\t\tconst trim = state.vehicle.Trims.filter(o => o.TrimCode == state.vehicle.TrimCode).map(o => o.TrimName).toString() || '';\r\n\t\tconst isOnSpecial = state.pricing.isDealerSpecial || state.pricing.isNationalSpecial || state.pricing.specialItem?.SpecialType == ESpecialTypes.specialOffer;\r\n\t\tconst driveaway = state.pricing.driveaway.replace('$','').replace(',','') || '(not set)';\r\n\r\n\t\t// const vehicleType = state.vehicle.IsVirtual ? \"New Virtual\" : state.vehicle.Batch ? \"New In Stock\" : \"\"\r\n\t\t// const pageType = state.vehicle.Batch ? \"New Vehicle List Inventory Listing Page\" \"Dealer Specials Page\" \"In Stock Page\";\r\n\t\tdataLayer.push({\r\n\t\t\tevent:\"view_item\",\r\n\t\t\thas_tpr_applied: state.pricing.IsTPR ? 'Yes' : 'No',\r\n\t\t\t// Note if Vehicle Grade is not selected then the value should be ALL\r\n\t\t\titem_list_id: `nvi_${model}_${state.vehicle.Grade}`, \r\n\t\t\titem_list_name: `New Vehicles - ${model} - ${state.vehicle.Grade}`,\r\n\t\t\titems: [\r\n\t\t\t\t{\r\n\t\t\t\t\titem_id: getters.vehicleHash || '(not set)',\r\n\t\t\t\t\titem_name: state.vehicle.FullDescription || '(not set)',\r\n\t\t\t\t\titem_brand: \"Toyota\",\r\n\t\t\t\t\titem_category: \"New Vehicles\",\r\n\t\t\t\t\titem_category2: model || '(not set)',\r\n\t\t\t\t\titem_category3: state.vehicle.Grade || '(not set)',\r\n\t\t\t\t\titem_category4: state.vehicle.VehicleType || '(not set)',\r\n\t\t\t\t\tprice: driveaway,\r\n\t\t\t\t\tquantity: 1,\r\n\t\t\t\t}\r\n\t\t\t],\r\n\t\t\tpage_type: \"New Vehicle Inventory Details Page\",\r\n\t\t\ttpr_case_id: tprcaseid,\r\n\t\t});\r\n\r\n\t\tdataLayer.push({\r\n\t\t\tevent:\"new_vehicle_detail_view\",\r\n\t\t\thas_tpr_applied: state.pricing.IsTPR ? 'Yes' : 'No',\r\n\t\t\tpage_type: \"New Vehicle Inventory Details Page\",\r\n\t\t\ttpr_case_id: tprcaseid,\r\n\t\t\tvehicle_build_year: state.vehicle.Year || '(not set)',\r\n\t\t\tvehicle_colour: colour || '(not set)',\r\n\t\t\tvehicle_description: state.vehicle.FullDescription || '(not set)',\r\n\t\t\tvehicle_factory_options: state.vehicle.FactoryOption || '(not set)',\r\n\t\t\tvehicle_grade: state.vehicle.Grade || '(not set)',\r\n\t\t\tvehicle_identification_number: state.vehicle.VsId || '(not set)',\r\n\t\t\tvehicle_in_order_collect: state.pricing.canBePurchased,\r\n\t\t\tvehicle_material_code: getters.vehicleHash || '(not set)',\r\n\t\t\tvehicle_model: model || '(not set)',\r\n\t\t\tvehicle_on_special: isOnSpecial,\r\n\t\t\tvehicle_price: driveaway,\r\n\t\t\tvehicle_transmission: state.vehicle.Transmission || '(not set)',\r\n\t\t\tvehicle_trim: trim || '(not set)',\r\n\t\t\tvehicle_type: state.vehicle.VehicleType || '(not set)', //New In Stock, New Virtual, Demonstrator\r\n\t\t\tvehicle_vin: state.vehicle.Vin || '(not set)',\r\n\t\t});\r\n\t\treturn;\r\n\t}, \r\n\tremoveDisclaimer({ commit, state }: { commit: any, state: any }, payload: string){\r\n\t\tconst disclaimers = state.disclaimers.filter((d: DisclaimerItem) => d['type'] != payload);\r\n\t\tcommit('setDisclaimers', disclaimers);\r\n\t},\r\n\taddDisclaimer({ commit }: { commit: any }, payload: DisclaimerItem){\r\n\t\tcommit('addDisclaimer', payload);\r\n\t},\r\n\tupdateFooterDisclaimers({ state }: { state: any }): void {\r\n\t\tconst disclaimerEl: HTMLDivElement | null = document.querySelector('.disclaimer.filter .content');\r\n\t\tif (!disclaimerEl) return;\r\n\t\t\r\n\t\tdisclaimerEl.querySelectorAll('p[data-type]').forEach((o: any) => {\r\n\t\t\to.parentElement?.removeChild(o);\r\n\t\t});\r\n\t\tstate.disclaimers.forEach((o: DisclaimerItem) => {\r\n\t\t\tconst newEl = document.createElement('p');\r\n\t\t\tnewEl.innerHTML = o.key + ' ' + o.text;\r\n\t\t\tnewEl.setAttribute('data-type', o.type);\r\n\t\t\tdisclaimerEl.appendChild(newEl);\r\n\t\t});\r\n\t}\r\n}\r\nexport default {\r\n\tnamespaced: true,\r\n\tstate, \r\n\tgetters,\r\n\tmutations, \r\n\tactions\r\n};","import { createStore } from 'vuex'\r\nimport DetailApp from '@/DetailApp/store';\r\n\r\nexport default createStore({\r\n state: {},\r\n getters: {},\r\n mutations: {},\r\n actions: {},\r\n\tmodules: {\r\n\t\tDetailApp\r\n\t},\r\n})\r\n","import { \r\n\tcreateApp, \r\n\tcreateSSRApp, \r\n\tdefineAsyncComponent, \r\n\tref\r\n} from 'vue'\r\n// import router from './router'\r\n// .use(router)\r\nimport store from './store'\r\nimport vfmPlugin from \"vue-final-modal\";\r\nimport { \r\n\tIAdvantageDataItem,\r\n\tIRoots,\r\n\tISources, \r\n\tIStoreState, \r\n\tIVehicle, \r\n\tIWindowScripts \r\n} from './types';\r\nimport { \r\n\trefreshDisclaimers, \r\n\tbindStaticHeader, \r\n\tgetAdvantageData, \r\n\tgetInitialVehicle,\r\n\tremoveWhiteSpaceFromTextNodeAndNormalize, \r\n\tsetHeaderScrollClass,\r\n\tbindJwAnalytics,\r\n\tgetRoots\r\n} from './helpers';\r\nimport { useStore } from 'vuex';\r\n\r\nconst inputMaterialCode = document.querySelector('.sidebar #hidMaterialCode');\r\n\r\nconsole.log('v1');\r\n\r\nif (inputMaterialCode){\r\n\tlet lastTimestamp = 0;\r\n\tsetInterval(() => {\r\n\t\tconst currentTimestamp = (window as any).retrievedImagesTimestamp;\r\n\t\tif (typeof currentTimestamp != 'undefined' && currentTimestamp != lastTimestamp){\r\n\t\t\tlastTimestamp = currentTimestamp;\r\n\t\t\tstore.commit('DetailApp/setImages', (window as any).retrievedImages);\r\n\t\t}\r\n\t}, 1000);\r\n}\r\n\r\nstore.subscribe((mutation: any, state: any) => {\r\n\tconst p = (state as IStoreState).DetailApp.pricing;\r\n\tswitch (mutation.type){\r\n\t\tcase 'DetailApp/setPricing': {\r\n\t\t\trefreshDisclaimers(p);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n});\r\n\r\nconst resizeTimer = ref(0);\r\nconst setScreenSize = (): void => {\r\n\tstore.commit('DetailApp/setScreenSize', (window as any).innerWidth);\r\n\tstore.commit('DetailApp/setScreenHeight', (window as any).innerHeight);\r\n};\r\nsetScreenSize();\r\n(window as any).addEventListener('resize', () => {\r\n\tclearTimeout(resizeTimer.value);\r\n\t(resizeTimer.value as any) = setTimeout(() => {\r\n\t\tsetScreenSize();\r\n\t}, 250);\r\n}, 250);\r\n\r\nconst allRoots: IRoots = getRoots();\r\nconst {\r\n\ttopbarRoot,\r\n\theaderRoot,\r\n\tbannerRoot,\r\n\tdemoNavRoot,\r\n\toverviewCtaRoot,\r\n\timageGalleryRoot,\r\n\tvideoGalleryRoot,\r\n\tcubeRoot,\r\n\tformRoot,\r\n\tadvantageRoot,\r\n\tsimilarRoot,\r\n\ttdlRoot, \r\n\tfslContentRoot\r\n} = allRoots;\r\n\r\nconst loadedEls: any = ref([]);\r\nconst scrollObserver: any = ref(null);\r\nfunction initScrollObserver(){\r\n\tconst overviewEl: HTMLElement | null = document.getElementById('detail-overview-root');\r\n\tconst aggHeadEl: HTMLElement | null = document.getElementById('agghead');\r\n\t\r\n\tscrollObserver.value = new IntersectionObserver(function(e){\r\n\t\tfor (let i = 0; i != e.length; ++i){\r\n\t\t\tconst id = e[i].target.getAttribute('id');\r\n\t\t\tif (e[i].isIntersecting && !loadedEls.value.includes(id)){\r\n\t\t\t\tloadedEls.value.push(id);\r\n\t\t\t\tloadSection(e[i].target);\r\n\t\t\t\t// if (\"detail-overview-cta-root\" == id){\r\n\t\t\t\t// \tloadSection(formRoot as Element);\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\taggHeadEl && scrollObserver.value.observe(aggHeadEl);\r\n\ttopbarRoot && scrollObserver.value.observe(topbarRoot);\r\n\theaderRoot && scrollObserver.value.observe(headerRoot);\r\n\tbannerRoot && scrollObserver.value.observe(bannerRoot);\r\n\tdemoNavRoot && scrollObserver.value.observe(demoNavRoot);\r\n\toverviewEl && scrollObserver.value.observe(overviewEl);\r\n\toverviewCtaRoot && scrollObserver.value.observe(overviewCtaRoot);\r\n\timageGalleryRoot && scrollObserver.value.observe(imageGalleryRoot);\r\n\tvideoGalleryRoot && scrollObserver.value.observe(videoGalleryRoot);\r\n\tcubeRoot && scrollObserver.value.observe(cubeRoot);\r\n\tformRoot && scrollObserver.value.observe(formRoot);\r\n\tadvantageRoot && scrollObserver.value.observe(advantageRoot);\r\n\tsimilarRoot && scrollObserver.value.observe(similarRoot);\r\n}\r\n\r\nconst urlParams = new URLSearchParams(window.location.search);\r\nconst tprSource = urlParams.has('tpr_source') ? parseInt(urlParams.get('tpr_source') || '') : 1;\r\nconst sources: ISources = {\r\n\ttprSource: isNaN(tprSource) ? 1 : tprSource\r\n}\r\nstore.commit('DetailApp/setSources', sources);\r\n\r\nconst form_token = (window as unknown as IWindowScripts).form_token || '';\r\nconst form_privacy = (window as unknown as IWindowScripts).form_privacy || [];\r\nstore.commit('DetailApp/setFormToken', form_token);\r\nstore.commit('DetailApp/setFormPrivacy', form_privacy);\r\n\r\nconst openingInfo = (window as unknown as IWindowScripts).HourInfo;\r\nstore.commit('DetailApp/setOpeningInfo', openingInfo);\r\n\r\nconst isDev = process.env.NODE_ENV == 'development';\r\nconst sb: IVehicle = !isDev ? \r\n\t(window as unknown as IWindowScripts).specBuilder || {} : \r\n\twindow.location.hash == '#test' ? require('@/specbuilders/test.json') : \r\n\t// require('@/specbuilders/test.json');\r\n\trequire('@/specbuilders/instock.json');\r\n\t// require('@/specbuilders/virtual.json');\r\n\t// require('@/specbuilders/demo.json');\r\n\t// require('@/specbuilders/testdrive.json');\r\nconst initialVehicle: IVehicle = getInitialVehicle(sb);\r\n\r\nif (!(window as unknown as IWindowScripts).specBuilder){\r\n\t(window as unknown as IWindowScripts).specBuilder = sb;\r\n}\r\nif (!(window as unknown as IWindowScripts).financeInformation){\r\n\tconst fi = {\r\n\t\tvehicleFinanceComparisonRate: \"\",\r\n\t\tvehicleFinanceInterestRate: \"\",\r\n\t\tvehicleFinanceRepayment: \"\",\r\n\t\tvehicleFinanceProduct: \"\"\r\n\t};\r\n\t(window as unknown as IWindowScripts).financeInformation = fi;\r\n}\r\n\r\nstore.commit('DetailApp/setVehicle', initialVehicle);\r\nstore.commit('DetailApp/setOriginalBatch', initialVehicle.Batch || '');\r\n\r\nif (initialVehicle.IsVirtual){\r\n\tstore.dispatch('DetailApp/handleInitialLoad', initialVehicle);\r\n}\r\nelse if (!initialVehicle.CurrentVariantCode && !!initialVehicle.Batch){\r\n\tstore.dispatch('DetailApp/loadDemoImages');\r\n}\r\nelse {\r\n\tstore.dispatch('DetailApp/handleVehicleChange');\r\n}\r\n\r\n// if (topbarRoot){\r\n// \tconst DetailTopbar = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-topbar\" */'@/DetailApp/DetailTopbar.vue'));\r\n// \tcreateApp(DetailTopbar).use(store).mount(topbarRoot);\r\n// }\r\nif (tdlRoot){\r\n\tremoveWhiteSpaceFromTextNodeAndNormalize(tdlRoot, true);\r\n\tconst TestDriveLead = defineAsyncComponent(() => import(/* webpackChunkName: \"test-drive-lead\" */'@/TestDriveLead/TestDriveLead.vue'));\r\n\tcreateSSRApp(TestDriveLead).use(store).mount(tdlRoot as Element);\r\n}\r\nif (headerRoot){\r\n\tconst DetailHeader = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-header\" */'@/DetailApp/DetailHeader.vue'));\r\n\tcreateApp(DetailHeader).use(store).use(vfmPlugin).mount(headerRoot);\r\n}\r\nelse {\r\n\tbindStaticHeader();\r\n}\r\nif (fslContentRoot){\r\n\tconst FSL = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-header-fsl-content\" */'@/DetailApp/DetailHeaderFSLContent.vue'));\r\n\tcreateApp(FSL).use(store).use(vfmPlugin).mount(fslContentRoot);\r\n}\r\nif (bannerRoot){\r\n\tconst DetailBanner = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-banner\" */'@/DetailApp/DetailBanner.vue'));\r\n\tcreateApp(DetailBanner).use(store).use(vfmPlugin).mount(bannerRoot);\r\n}\r\nif (demoNavRoot){\r\n\tconst DetailDemoNav = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-demo-nav\" */'@/DetailApp/DetailDemoNav.vue'));\r\n\tcreateApp(DetailDemoNav).use(store).use(vfmPlugin).mount(demoNavRoot as Element);\r\n}\r\nif (formRoot){\r\n\tconst phoneDiv = document.getElementById('detail-form-content');\r\n\tphoneDiv && phoneDiv.setAttribute('style', 'display:none');\r\n}\r\n\r\nfunction loadSection(target: Element){\r\n\tconst id = target.getAttribute('id');\r\n\tif (!id || (loadedSections as any)[id]) return;\r\n\r\n\tconsole.log('LOAD SECTION', id)\r\n\r\n\tswitch (target){\r\n\t\tcase formRoot: {\r\n\t\t\tconsole.log('formRoot');\r\n\t\t\tconst DetailForms = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-forms\" */'@/DetailApp/DetailForms.vue'));\r\n\t\t\tcreateApp(DetailForms).use(store).mount(formRoot as Element);\r\n\t\t\tconst phoneDiv = document.getElementById('detail-form-content');\r\n\t\t\tphoneDiv && phoneDiv.setAttribute('style', 'display:none');\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase overviewCtaRoot: {\r\n\t\t\tconsole.log('overviewCtaRoot');\r\n\t\t\tconst DetailOverviewCta = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-overview-cta\" */'@/DetailApp/DetailOverviewCta.vue'));\r\n\t\t\tcreateApp(DetailOverviewCta).use(store).use(vfmPlugin).mount(overviewCtaRoot as Element);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase imageGalleryRoot: {\r\n\t\t\tconsole.log('imageGalleryRoot');\r\n\t\t\tconst DetailImageGallery = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-image-gallery\" */'@/DetailApp/DetailImageGallery.vue'));\r\n\t\t\tcreateApp(DetailImageGallery).use(store).use(vfmPlugin).mount(imageGalleryRoot as Element);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase videoGalleryRoot: {\r\n\t\t\tconsole.log('videoGalleryRoot');\r\n\t\t\tconst DetailVideoGallery = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-video-gallery\" */'@/DetailApp/DetailVideoGallery.vue'));\r\n\t\t\tcreateApp(DetailVideoGallery).use(store).use(vfmPlugin).mount(videoGalleryRoot as Element);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase cubeRoot: {\r\n\t\t\tconsole.log('cubeRoot');\r\n\t\t\tconst DetailCube = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-cube\" */'@/DetailApp/DetailCube.vue'));\r\n\t\t\tcreateApp(DetailCube).use(store).use(vfmPlugin).mount(cubeRoot as Element);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase advantageRoot: {\r\n\t\t\tconsole.log('advantageRoot');\r\n\t\t\t// removeWhiteSpaceFromTextNodeAndNormalize(advantageRoot, true);\r\n\r\n\t\t\tconst advantageData: Array = getAdvantageData();\r\n\t\t\tstore.commit('DetailApp/setAdvantages', advantageData);\r\n\r\n\t\t\tconst DetailAdvantage = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-advantage\" */'@/DetailApp/DetailAdvantage.vue'));\r\n\t\t\t// createSSRApp\r\n\t\t\tcreateApp(DetailAdvantage).use(store).use(vfmPlugin).mount(advantageRoot as Element);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase similarRoot: {\r\n\t\t\tconsole.log('similarRoot');\r\n\t\t\tconst DetailSimilar = defineAsyncComponent(() => import(/* webpackChunkName: \"detail-similar\" */'@/DetailApp/DetailSimilar.vue'));\r\n\t\t\tcreateApp(DetailSimilar).use(store).mount(similarRoot as Element);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\thandleLoaded(id);\r\n}\r\nconst handleLoaded = (id: string) => {\r\n\t(loadedSections as any)[id] = true;\r\n\tlet areAllLoaded = true;\r\n\tObject.values(allRoots).forEach(v => {\r\n\t\tif (!v) return;\r\n\t\tareAllLoaded = areAllLoaded && (loadedSections as any)[v.getAttribute('id')];\r\n\t});\r\n\tif (areAllLoaded){\r\n\t\tconst loadedEvent = new CustomEvent(\"allSectionsLoaded\");\r\n\t\tdocument.dispatchEvent(loadedEvent);\r\n\t}\r\n}\r\n\r\nconst loadedSections = ref({});\r\nObject.values(allRoots).forEach(v => {\r\n\tif (!v) return;\r\n\t(loadedSections as any)[v.getAttribute('id')] = false;\r\n});\r\ndocument.addEventListener('loadAllSections', () => {\r\n\tObject.values(allRoots).forEach(v => {\r\n\t\tif (!v) return;\r\n\t\tloadSection(v);\r\n\t});\r\n});\r\n\r\ninitScrollObserver();\r\nbindJwAnalytics();\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + ({\"13\":\"detail-forms\",\"195\":\"detail-header-fsl-content\",\"341\":\"detail-cube\",\"369\":\"detail-advantage\",\"438\":\"test-drive-lead\",\"590\":\"detail-demo-nav\",\"608\":\"detail-image-gallery\",\"820\":\"detail-banner\",\"849\":\"detail-header\",\"857\":\"detail-video-gallery\",\"893\":\"detail-overview-cta\",\"930\":\"detail-similar\"}[chunkId] || chunkId) + \".\" + {\"13\":\"ae329748\",\"57\":\"458692dd\",\"195\":\"64a4db63\",\"197\":\"ffc31fd7\",\"341\":\"7a76c20e\",\"369\":\"b02fae4a\",\"438\":\"f01d20df\",\"528\":\"a3e9b607\",\"590\":\"0cae3533\",\"598\":\"5f028f96\",\"608\":\"75ef4d45\",\"609\":\"460ca1b2\",\"820\":\"e770a23c\",\"849\":\"87c54752\",\"857\":\"4b1e7c7e\",\"893\":\"49ed15a1\",\"930\":\"9581be01\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + {\"13\":\"detail-forms\",\"195\":\"detail-header-fsl-content\",\"438\":\"test-drive-lead\",\"849\":\"detail-header\",\"930\":\"detail-similar\"}[chunkId] + \".\" + {\"13\":\"9edef220\",\"195\":\"1ff99b1c\",\"438\":\"3ae1fa75\",\"849\":\"2cef3fbb\",\"930\":\"ca888c18\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"nvi:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"https://tdpasset.azureedge.net/nvfso005/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"13\":1,\"195\":1,\"438\":1,\"849\":1,\"930\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(195 != chunkId) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknvi\"] = self[\"webpackChunknvi\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(6740); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["baseUrl","env","EEnv","fslApi","getFslURL","getSupplierNav","async","url","dealerId","fetch","then","response","json","catch","error","console","log","getTestDriveVehicles","hash","stockDealerId","Date","valueOf","getDemoVehicleImages","id","batch","getVehicleImages","planned","imageApi","getVehiclePricing","vehicle","materialCode","fakeSpecial","financeApi","params","URLSearchParams","guid","getCookie","financeoptions","split","set","VsId","toString","Dealer","DealerId","ActualDealerId","FullDescriptionForFinance","length","postEnquiryForm","data","token","postUrl","location","href","includes","headers","Accept","RequestVerificationToken","method","body","JSON","stringify","postTestDriveForm","EOfferTypePillText","EOfferType","EFSLToggle","EFinaceToggleTypes","EHeaderStripStyles","ESpecialItemDisclaimerTypes","EInternalFinanceTypes","EDetailFormTabs","EFieldDateTimeTypes","ESpecialTypes","EFinanceTypes","EStockTypes","EToggles","EImage360Sizes","EImageHeroSizes","EImageIntExtSizes","EVideoSizes","EImageExtensions","EImageType","EFrameType","EFormType","EFormTheme","EFormRadioCheckTypes","EYesNo","ELoadingColour","getEnv","getTprHref","vsid","m","tpr_source","isPillInPage","text","pills","document","querySelectorAll","isFound","i","t","innerHTML","trim","bindJwAnalytics","window","jwplayer","on","current","getPlaylistItem","dataLayer","push","event","video_title","title","video_url","file","getRoots","topbarRoot","getElementById","headerRoot","bannerRoot","overviewCtaRoot","demoNavRoot","imageGalleryRoot","videoGalleryRoot","cubeRoot","formRoot","advantageRoot","similarRoot","tdlRoot","fslContentRoot","bindStaticHeader","fslToggle","querySelector","addEventListener","e","btn","isPressed","getAttribute","setAttribute","toLowerCase","header","classList","toggle","normFinanceOffer","fslFinanceOffer","normContent","fslContent","toLocaleLowerCase","dateexp","setDate","getDate","expires","cookieData","cookie","preventDefault","availableFinanceTypes","AvailableFinanceTypes","preferredFinanceType","defaultFinanceType","DefaultFinanceType","initialFinanceType","value","selected","checked","shouldTrigger","evt","Event","dispatchEvent","openClose","controlled","bookatestdrive","doHandleLoad","hasLoadedAll","doScroll","el","scrollTo","top","offsetTop","behavior","handleLoaded","setTimeout","remove","add","CustomEvent","buyonlines","forEach","b","target","w","sb","specBuilder","model","VehicleLine","grade","Grade","CurrentVariantCode","RoofCode","TrimCode","driveaway","has_tpr_applied","HasTprApplied","item_list_id","item_list_name","items","item_id","item_name","FullDescription","item_brand","item_category","item_category2","item_category3","item_category4","VehicleType","price","quantity","page_type","PageType","tpr_case_id","FactoryOption","open","getSubmitFormImage","vehicleImages","demoImages","imgExt","getImages","Path_Ext","img","every","o","imgHero","Path_Hero","filter","heroDesc","img360","Path_360","imgInt","Path_Int","getDemoImage","convertVehicleToTestDriveOption","transmissionType","Transmission","manufacturedYear","parseInt","Year","obj","Model","VariantCode","Image","PaintName","Paints","PaintCode","map","TrimName","Trims","TransmissionType","FactoryOptionDescription","Fuel","GradeLevelDescription","Vin","VehicleSpecificationID","Produced","Available","Material","Batch","ManufacturedYear","isNaN","Rego","Location","IsTfy","removeWhiteSpaceFromTextNodeAndNormalize","parentEl","normalize","childNodes","nodeType","Node","TEXT_NODE","nodeValue","replace","getAdvantageData","titleEl","ctaEl","thumbEl","thumbTextEl","rteEl","rteScriptsArray","rteScripts","x","classEl","closest","cta","sliderClasses","thumb","thumbText","rte","analyticsName","dataset","getDateForApi","d","getFullYear","getMonth","slice","removeDisclaimers","disclaimerHolder","disclaimers","removeChild","addDisclaimers","p","newDisclaimers","isNationalSpecial","specialItem","Disclaimers","Type","key","Key","Value","financeDisclaimer","financeDisclaimerKey","Offers","newP","createElement","appendChild","refreshDisclaimers","nth","getDisclaimerKey","item","driveawayDisclaimerKey","specialDisclaimerKey","shouldShowPricing","matchedItem","hasSpecialPrice","SpecialPrice","hasSpecialExtra","SpecialExtra","isCabChassis","isDealerSpecial","specialApplied","isZeroPrice","getTimesFromDay","date","et","day","toLocaleDateString","weekday","todayTimes","getAmendedTimes","timeArray","minuteModifier","roundingModified","blank","hours","minutes","setHours","setMinutes","getMinutes","roundingMinus","getHours","convertHourInfoItemToEnabledTimes","openingInfo","blankEnabledTimes","monday","tuesday","wednesday","thursday","friday","saturday","sunday","newEnabledTimes","times","startArray","OpeningTime","closeArray","ClosingTime","startHour","startMinute","closeHour","closeMinute","openTime","closeTime","Day","get360DefaultNum","images","defaultFrame","pop","imgArr","indexOf","get360Images","screenSize","imgs","imgsFallback1","isValidPhone","r","RegExp","test","isEmail","re","sName","oCrumbles","oPair","sKey","decodeURIComponent","sValue","getCorrectImageSize","sizes","defaultSize","pixelRatio","Math","ceil","devicePixelRatio","pixelSize","s","newSize","searchStr","sPos","ePos","originalSize","substring","array","ext","frameType","flatMap","arr","beforeSize","spinCount","size","Sizes","frameNum","toFixed","protocol","Path","Prefix","remApplicable","isinactive","remMatches","matches","isApplicablePaint","code","applicablepaint","isApplicable","applicable","isntApplicable","getBlankFakeColourElements","paints","paintcode","paintname","vc","Vc","swatch","Swatch","Applicable","active","trims","trimcode","trimname","roofs","Roofs","roofcode","ApplicablePaint","originalvariantcode","currrentvariantcode","getUpdatedFakeColourElementsFromPaint","masterCode","fakeEls","variantCode","paintCode","trimcodeverified","currentPaint","trimCode","trimVariantCode","currentvariantcode","getUpdatedFakeColourElementsFromTrim","paintCodeVerified","getUpdatedFakeColourElementsFromRoof","getUpdatedFakeColourElementsFromHashOrNoHash","materialHash","colourCode","foundroof","getUpdatedFakeColourElements","masterSwatch","fakeColourEls","defaultFakeEls","getInitialVehicle","IsVirtual","VirtualVehicleId","SpecificationId","BaseModelCode","PlannedMonth","OrderEnabled","Price","replaceSwatchImg","newUrl","alt","getNewSwatchData","newVehicle","newPaintName","newTrimName","newPaintUrl","newTrimUrl","newRoofUrl","changeSwatchesInDocument","paintNames","trimNames","imgsPaint","imgsTrim","imgsRoof","getCodes","isValid","roofCode","formatPrice","whole","floor","remainder","formatter","Intl","NumberFormat","style","currency","minimumFractionDigits","format","state","isFslLoading","fsl","selectedFinanceType","showExternalCustomise","originalBatch","disableNewDisclaimer","search","debug","isLoading","screenHeight","form_token","form_privacy","tprSource","Postcode","DealerCode","Locations","ClickToCalls","DefaultFrame","Path_Video","Path_CubeMap","pricing","materialcode","financerate","financeweekly","financeType","stockDescription","specialExtra","priceType","vin","buildyear","wasFinanced","stockType","priceresult","DriveAwayPrice","responseCode","RRP","StampDuty","DealerDeliveryFees","LCT","RegistrationFees","callresult","materialNumber","ListPrice","OptionsPrice","AccessoriesPrice","DealerDelivery","LuxuryCarTax","PostCode","OnRoadCosts","TotalRegistration","RegistrationAmount","CtpInsuranceAmount","canBePurchased","storeUrl","financeYears","financeTotalKms","financeHeading","internalFinanceType","cmpFrom","cmpTo","creditScore","storeWhyBuy","APR","IsTPR","TprEnabled","HideTprUntilMatrix","CtaEnabled","advantages","getters","isDemo","isGreatValue","SpecialType","isSpecialOffer","specialExtraDisplayed","join","priceDisplayed","comparisonRate","financeDisplayed","comparisonrate","financetype","vehicleHash","mutations","setIsFslLoading","payload","setFsl","setSelectedFinanceType","setOriginalBatch","setFormPrivacy","setFormToken","setOpeningInfo","setDemoImages","setImages","setImages360","setIsLoading","setScreenSize","setScreenHeight","setVehicle","setPricing","setPaintActive","setTrimActive","setRoofActive","setVariantActive","setFakeColourEls","setAdvantages","setSources","setDisclaimers","addDisclaimer","actions","handleInitialLoad","dispatch","commit","initialVehicle","hashMaterial","isHashValid","initialCode","codes","setHash","h","v","sendDetailAnalytics","tprcaseid","colour","isOnSpecial","vehicle_build_year","vehicle_colour","vehicle_description","vehicle_factory_options","vehicle_grade","vehicle_identification_number","vehicle_in_order_collect","vehicle_material_code","vehicle_model","vehicle_on_special","vehicle_price","vehicle_transmission","vehicle_trim","vehicle_type","vehicle_vin","removeDisclaimer","updateFooterDisclaimers","disclaimerEl","parentElement","newEl","type","namespaced","createStore","modules","DetailApp","inputMaterialCode","lastTimestamp","setInterval","currentTimestamp","retrievedImagesTimestamp","store","retrievedImages","mutation","resizeTimer","ref","innerWidth","innerHeight","clearTimeout","allRoots","loadedEls","scrollObserver","initScrollObserver","overviewEl","aggHeadEl","IntersectionObserver","isIntersecting","loadSection","observe","urlParams","has","get","sources","HourInfo","isDev","process","require","financeInformation","fi","vehicleFinanceComparisonRate","vehicleFinanceInterestRate","vehicleFinanceRepayment","vehicleFinanceProduct","TestDriveLead","defineAsyncComponent","createSSRApp","use","mount","DetailHeader","createApp","vfmPlugin","FSL","DetailBanner","DetailDemoNav","phoneDiv","loadedSections","DetailForms","DetailOverviewCta","DetailImageGallery","DetailVideoGallery","DetailCube","advantageData","DetailAdvantage","DetailSimilar","areAllLoaded","Object","values","loadedEvent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","call","amdD","Error","amdO","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","keys","splice","n","getter","__esModule","a","definition","defineProperty","enumerable","f","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","this","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","script","needAttach","scripts","getElementsByTagName","charset","timeout","nc","src","onScriptComplete","prev","onerror","onload","doneFns","parentNode","bind","head","Symbol","toStringTag","createStylesheet","fullhref","resolve","reject","linkTag","rel","onLinkComplete","errorType","realHref","err","request","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","message","name","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}