{"version":3,"file":"js/app.56e319ae.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\tITree\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 getTree = async (model: string, zone: string): Promise => {\r\n\tconst api = baseUrl + \"api/Explorer\";\r\n\tconst url = `${api}?model=${model}&zone=${zone}`;\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 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\tif (!hash) return Promise.resolve({\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\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\tITree,\r\n\tITreeChild,\r\n\tITreeFactoryOption\r\n} from '@/types';\r\n\r\nexport const env = getEnv();\r\n\r\nfunction appendGradesAndReturnChild(children: Array, grades: Array): Array {\r\n\tconst newChildren: Array> = [];\r\n\tchildren.forEach((child: ITreeChild) => {\r\n\t\tif (child.Children) {\r\n\t\t\tnewChildren.push(child.Children);\r\n\t\t}\r\n\t\tchild.Grades.forEach((o: ITreeFactoryOption) => {\r\n\t\t\tgrades.push(o.Grade);\r\n\t\t});\r\n\t});\r\n\treturn newChildren.flatMap(o => o);\r\n}\r\nexport function getAllGradesFromTree(tree: ITree): Array {\r\n\tif (!tree?.SpecNode?.Children) return [];\r\n\tconst grades: Array = [];\r\n\tlet children: Array | null = tree.SpecNode.Children || [];\r\n\twhile (children.length){\r\n\t\tchildren = appendGradesAndReturnChild(children, grades);\r\n\t}\r\n\treturn grades;\r\n}\r\nfunction appendVehicleAndReturnChild(children: Array, factoryOptions: Array): Array {\r\n\tconst newChildren: Array> = [];\r\n\tchildren.forEach((child: ITreeChild) => {\r\n\t\tif (child.Children) {\r\n\t\t\tnewChildren.push(child.Children);\r\n\t\t}\r\n\t\tchild.Grades.forEach((o: ITreeFactoryOption) => {\r\n\t\t\tfactoryOptions.push(o);\r\n\t\t});\r\n\t});\r\n\treturn newChildren.flatMap(o => o);\r\n}\r\nexport function getNewFactoryOptionArrayFromTree(tree: ITree): Array {\r\n\tif (!tree?.SpecNode?.Children) return [];\r\n\tconst factoryOptions: Array = [];\r\n\tlet children: Array | null = tree.SpecNode.Children || [];\r\n\twhile (children.length){\r\n\t\tchildren = appendVehicleAndReturnChild(children, factoryOptions);\r\n\t}\r\n\treturn factoryOptions;\r\n}\r\n\r\nexport function initCmsScripts(): void {\r\n\tconst readMoreContainers: Array = Array.from(document.querySelectorAll('.details-description .details-desc-more'));\r\n\treadMoreContainers.forEach((container: HTMLElement, i: number) => {\r\n\t\tcontainer.setAttribute('style', `max-height:${container.offsetHeight}px;`);\r\n\t\tcontainer.setAttribute('aria-hidden', 'true');\r\n\t\tcontainer.setAttribute('id', `details-desc-more-${i}`);\r\n\t\tconst readMore: HTMLElement | null = container.nextElementSibling as HTMLElement | null;\r\n\t\t\r\n\t\tif (!readMore) return;\r\n\t\tif (!readMore.classList.contains('more')) return;\r\n\t\tconst readMoreButton = readMore.querySelector('a');\r\n\t\tif (!readMoreButton) return;\r\n\r\n\t\treadMoreButton.setAttribute('aria-pressed', 'false');\r\n\t\treadMoreButton.setAttribute('aria-controls', `details-desc-more-${i}`);\r\n\t\treadMoreButton.addEventListener('click', function(e: Event){\r\n\t\t\te.preventDefault();\r\n\t\t\tconst isPressed = this.getAttribute('aria-pressed') == 'true';\r\n\t\t\tthis.setAttribute('aria-pressed', (!isPressed).toString().toLowerCase());\r\n\t\t\tcontainer.setAttribute('aria-hidden', isPressed.toString().toLowerCase());\r\n\r\n\t\t\tconst plusminus = this.querySelector('span');\r\n\t\t\tif (!plusminus) return;\r\n\t\t\tplusminus.innerHTML = isPressed ? '+' : '-';\r\n\t\t});\r\n\t});\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\ttdlCustomRoot: document.getElementById('test-drive-lead-custom-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 convertFactoryOptionToTestDriveOption(factoryOption: ITreeFactoryOption): ITestDriveOption {\r\n\tconst pto = factoryOption.PaintTrimInfos.length ? factoryOption.PaintTrimInfos[0] : null;\r\n\tconst transmissionType = '(not set)';\r\n\tconst manufacturedYear = factoryOption.ManufacturedYear;\r\n\tconst obj = {\r\n\t\tModel: factoryOption.Model || '',\r\n\t\tGrade: factoryOption.Grade || '',\r\n\t\tFullDescription: factoryOption.FullDescription,\r\n\t\tVariantCode: '',\r\n\t\tImage: '',\r\n\t\tPaintName: pto?.PaintDescription || '(not set)',\r\n\t\tTrimName: pto?.TrimDescription || '(not set)',\r\n\t\tTransmissionType: transmissionType,\r\n\t\tFactoryOptionDescription: factoryOption.FactoryOptionDescription || '',\r\n\t\tFuel: \"(not set)\",\r\n\t\tGradeLevelDescription: null,\r\n\t\tVin: '(not set)',\r\n\t\tVehicleSpecificationID: -1,\r\n\t\tProduced: \"(not set)\",\r\n\t\tAvailable: true,\r\n\t\tMaterial: factoryOption.MaterialCode || '',\r\n\t\tBatch: '(not set)',\r\n\t\tManufacturedYear: !isNaN(manufacturedYear) ? manufacturedYear : 0,\r\n\t\tRego: '',\r\n\t\tLocation: \"(not set)\",\r\n\t\tIsTfy: false,\r\n\t};\r\n\treturn obj;\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\tinitCmsScripts, \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\ttdlCustomRoot, \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\t// require('@/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\n\trequire('@/specbuilders/testdrive-blank.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 (tdlCustomRoot){\r\n\tremoveWhiteSpaceFromTextNodeAndNormalize(tdlCustomRoot, true);\r\n\tconst TestDriveLeadCustom = defineAsyncComponent(() => import(/* webpackChunkName: \"test-drive-lead\" */'@/TestDriveLead/TestDriveLead.vue'));\r\n\tcreateSSRApp(TestDriveLeadCustom, {...tdlCustomRoot.dataset}).use(store).mount(tdlCustomRoot as Element);\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\ninitCmsScripts();","// 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\":\"c31cb0bd\",\"57\":\"071c6d53\",\"195\":\"64a4db63\",\"341\":\"9aa8092e\",\"369\":\"88a77bc6\",\"438\":\"2e2441fe\",\"528\":\"a3e9b607\",\"550\":\"a7a82391\",\"590\":\"5d7162fe\",\"598\":\"56cffead\",\"608\":\"28cc2ecd\",\"609\":\"bd927905\",\"820\":\"a61ae219\",\"849\":\"0d803ac5\",\"857\":\"e55dd514\",\"893\":\"0f3fe465\",\"930\":\"84a0013f\"}[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/nvfso014/\";","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","getTree","async","model","zone","api","url","fetch","then","response","json","catch","error","console","log","getFslURL","getSupplierNav","dealerId","getTestDriveVehicles","hash","stockDealerId","Date","valueOf","getDemoVehicleImages","id","batch","getVehicleImages","planned","Promise","resolve","DefaultFrame","Path_360","Path_Int","Path_Ext","Path_Hero","Path_Video","Path_CubeMap","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","appendGradesAndReturnChild","children","grades","newChildren","forEach","child","Children","push","Grades","o","Grade","flatMap","getAllGradesFromTree","tree","SpecNode","appendVehicleAndReturnChild","factoryOptions","getNewFactoryOptionArrayFromTree","initCmsScripts","readMoreContainers","Array","from","document","querySelectorAll","container","i","setAttribute","offsetHeight","readMore","nextElementSibling","classList","contains","readMoreButton","querySelector","addEventListener","e","preventDefault","isPressed","this","getAttribute","toLowerCase","plusminus","innerHTML","getTprHref","vsid","m","tpr_source","isPillInPage","text","pills","isFound","t","trim","bindJwAnalytics","window","jwplayer","on","current","getPlaylistItem","dataLayer","event","video_title","title","video_url","file","getRoots","topbarRoot","getElementById","headerRoot","bannerRoot","overviewCtaRoot","demoNavRoot","imageGalleryRoot","videoGalleryRoot","cubeRoot","formRoot","advantageRoot","similarRoot","tdlRoot","tdlCustomRoot","fslContentRoot","bindStaticHeader","fslToggle","btn","header","toggle","normFinanceOffer","fslFinanceOffer","normContent","fslContent","toLocaleLowerCase","dateexp","setDate","getDate","expires","cookieData","cookie","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","b","target","w","sb","specBuilder","VehicleLine","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","img","every","imgHero","filter","heroDesc","img360","imgInt","getDemoImage","convertFactoryOptionToTestDriveOption","factoryOption","pto","PaintTrimInfos","transmissionType","manufacturedYear","ManufacturedYear","obj","Model","VariantCode","Image","PaintName","PaintDescription","TrimName","TrimDescription","TransmissionType","FactoryOptionDescription","Fuel","GradeLevelDescription","Vin","VehicleSpecificationID","Produced","Available","Material","MaterialCode","Batch","isNaN","Rego","Location","IsTfy","convertVehicleToTestDriveOption","Transmission","parseInt","Year","Paints","PaintCode","map","Trims","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","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","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","TestDriveLeadCustom","defineAsyncComponent","createSSRApp","use","mount","TestDriveLead","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","all","reduce","promises","u","miniCssF","g","globalThis","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","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":""}