{"version":3,"file":"bundle.1538.411684c3187f99e47e586f502f6300e5.js","mappings":"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","sources":["webpack://ws-tagging/./src/utils/legacy/projects/shift/handlers/ShiftEventHandler.js"],"sourcesContent":["import { namespace, extend } from 'wsm-tagging-utils';\n\nconst runShiftEventHandler = (win) => {\n\tnamespace(win, 'DDC.tracking.shift.handlers');\n\n\tconst {\n\t\tDDC: { tracking }\n\t} = win;\n\n\tconst buyNowOrCarBravoAttributes = {\n\t\tGMBUYSRP: {\n\t\t\tparam: 'gmbuysrp',\n\t\t\tlocation: 'SRP',\n\t\t\tlinkDestination: 'GMBuy'\n\t\t},\n\t\tGMBUYVDP: {\n\t\t\tparam: 'gmbuyvdp',\n\t\t\tlocation: 'VDP',\n\t\t\tlinkDestination: 'GMBuy'\n\t\t},\n\t\tGMBUYNAV: {\n\t\t\tparam: 'gmbuynav',\n\t\t\tlocation: 'Global Nav',\n\t\t\tlinkDestination: 'GMBuy'\n\t\t},\n\t\tCARBRAVOSRP: {\n\t\t\tparam: 'carbravosrp',\n\t\t\tlocation: 'SRP',\n\t\t\tlinkDestination: 'CarBravo'\n\t\t},\n\t\tCARBRAVOVDP: {\n\t\t\tparam: 'carbravovdp',\n\t\t\tlocation: 'VDP',\n\t\t\tlinkDestination: 'CarBravo'\n\t\t},\n\t\tCARBRAVONAV: {\n\t\t\tparam: 'carbravonav',\n\t\t\tlocation: 'Global Nav',\n\t\t\tlinkDestination: 'CarBravo'\n\t\t}\n\t};\n\n\t/**\n\t * The standard EventHandler implementation that communicates with\n\t * Shift Digital using the 'Shift Protocol'\n\t * @param {Object} window an instance of the global window object\n\t *\n\t * @param {tracking.framework.runtime.Page} page A Page instance for page related queries\n\t * @constructor\n\t */\n\ttracking.shift.handlers.ShiftEventHandler = function ShiftEventHandler(\n\t\twindow,\n\t\tpage,\n\t\tform\n\t) {\n\t\ttracking.shift.handlers.AbstractEventHandler.call(\n\t\t\tthis,\n\t\t\twindow,\n\t\t\tpage,\n\t\t\tform\n\t\t);\n\t\tthis.accelerateInitialCalcStart = false;\n\t\tthis.accelerateLeadFormStart = false;\n\t};\n\n\t// Make ShiftEventHandler inherit from AbstractEventHandler\n\textend(\n\t\ttracking.shift.handlers.ShiftEventHandler,\n\t\ttracking.shift.handlers.AbstractEventHandler\n\t);\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.setFilterValueToSend =\n\t\tfunction setFilterValueToSend(data, delimiter) {\n\t\t\tconst modifiedData = !data ? 'All' : data;\n\t\t\treturn modifiedData.replace\n\t\t\t\t? modifiedData.replace(/,/g, delimiter)\n\t\t\t\t: modifiedData;\n\t\t};\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.logCategory =\n\t\t'ws-tagging:ShiftEventHandler';\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.getVehicle =\n\t\tfunction getVehicle(element) {\n\t\t\tlet formVehicle = {};\n\n\t\t\tconst vehicles =\n\t\t\t\t(this.page.dataLayerProperty('vehicles')?.length &&\n\t\t\t\t\tthis.page.dataLayerProperty('vehicles')) ||\n\t\t\t\t(this.page.dataLayerProperty('confirmation.vehicle') && [\n\t\t\t\t\tthis.page.dataLayerProperty('confirmation.vehicle')\n\t\t\t\t]) ||\n\t\t\t\t[];\n\n\t\t\tif (vehicles.length > 0) {\n\t\t\t\tlet vehicleId =\n\t\t\t\t\tthis.page.dataLayerProperty('confirmation.vehicle')?.uuid ||\n\t\t\t\t\tthis.page.dataLayerProperty('vehicles.0')?.uuid;\n\n\t\t\t\tif (element) {\n\t\t\t\t\tconst elementToQuery = element.closest('form');\n\t\t\t\t\tconst vehicleIdInput =\n\t\t\t\t\t\telementToQuery?.querySelector(\n\t\t\t\t\t\t\t'[data-id=\"vehicleId\"]'\n\t\t\t\t\t\t) ||\n\t\t\t\t\t\telementToQuery?.querySelector('[data-id=\"itemId\"]');\n\n\t\t\t\t\tif (vehicleIdInput) {\n\t\t\t\t\t\tvehicleId = vehicleIdInput.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (vehicleId) {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tinventoryType,\n\t\t\t\t\t\tmodelYear,\n\t\t\t\t\t\tmake,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\ttrim,\n\t\t\t\t\t\tengine,\n\t\t\t\t\t\ttransmission,\n\t\t\t\t\t\tinteriorColor,\n\t\t\t\t\t\texteriorColor,\n\t\t\t\t\t\tvin,\n\t\t\t\t\t\tinternetPrice,\n\t\t\t\t\t\tmsrp,\n\t\t\t\t\t\tfuelType,\n\t\t\t\t\t\tbodyStyle,\n\t\t\t\t\t\tdriveLine,\n\t\t\t\t\t\tcertified,\n\t\t\t\t\t\tstockNumber,\n\t\t\t\t\t\tnewOrUsed,\n\t\t\t\t\t\tstatus\n\t\t\t\t\t} = vehicles.filter((obj) => obj.uuid === vehicleId)[0];\n\n\t\t\t\t\tformVehicle = {\n\t\t\t\t\t\tstatus: this.mapInventoryType(\n\t\t\t\t\t\t\tinventoryType,\n\t\t\t\t\t\t\tnewOrUsed,\n\t\t\t\t\t\t\tcertified\n\t\t\t\t\t\t),\n\t\t\t\t\t\tyear: modelYear,\n\t\t\t\t\t\tmake,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\ttrim,\n\t\t\t\t\t\tengine,\n\t\t\t\t\t\ttransmission,\n\t\t\t\t\t\tinteriorColor,\n\t\t\t\t\t\texteriorColor,\n\t\t\t\t\t\tvin,\n\t\t\t\t\t\tmsrp,\n\t\t\t\t\t\tdisplayedPrice: internetPrice,\n\t\t\t\t\t\tfuelType,\n\t\t\t\t\t\tbodyStyle,\n\t\t\t\t\t\tdriveTrain: driveLine,\n\t\t\t\t\t\tstockNumber\n\t\t\t\t\t};\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.stockStatusTagging &&\n\t\t\t\t\t\tthis.page.isVehicleDetailPage()\n\t\t\t\t\t) {\n\t\t\t\t\t\tformVehicle.stockStatus = {\n\t\t\t\t\t\t\tLive: 'OnLot',\n\t\t\t\t\t\t\t'In Transit': 'InTransit',\n\t\t\t\t\t\t\t'In Transit At Factory': 'BeingBuilt'\n\t\t\t\t\t\t}[status];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn formVehicle;\n\t\t};\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.getBuyNowOrCarBravoAttributes =\n\t\tfunction getBuyNowOrCarBravoAttributes(url) {\n\t\t\treturn Object.values(buyNowOrCarBravoAttributes).find(\n\t\t\t\t(buyNowOrCarBravoAttribute) =>\n\t\t\t\t\turl?.includes(buyNowOrCarBravoAttribute.param)\n\t\t\t);\n\t\t};\n\n\t// ======================================================================\n\t// ------------------------- Page Data Building -------------------------\n\t// ======================================================================\n\n\t/**\n\t * Builds the data object to send Shift on a page view event.\n\t *\n\t * @param {string} alias the DDC page alias of the page being viewed\n\t * @returns {Object} The shift data object to send\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.buildDataForPageView =\n\t\tfunction buildDataForPageView(aliasIn) {\n\t\t\tconst alias =\n\t\t\t\taliasIn ||\n\t\t\t\tthis.page.dataLayerProperty('page.pageInfo.pageName'); // alias may come in undefined, add safety logic\n\t\t\tconst locale = this.page.dataLayerProperty(\n\t\t\t\t'page.attributes.locale'\n\t\t\t);\n\n\t\t\tconst data = {\n\t\t\t\tpageBrand: this.mapPageBrand(),\n\t\t\t\tpageType: this.pageName,\n\t\t\t\twebsiteTier: this.page\n\t\t\t\t\t.dataLayerProperty('site.siteInfo.tier')\n\t\t\t\t\t.replace('tier', 'Tier '),\n\t\t\t\tlanguage:\n\t\t\t\t\tlocale.indexOf('_') > -1\n\t\t\t\t\t\t? locale.substr(0, locale.indexOf('_'))\n\t\t\t\t\t\t: locale,\n\t\t\t\tdealerZipCode: this.page.dataLayerProperty(\n\t\t\t\t\t'dealership.postalCode'\n\t\t\t\t),\n\t\t\t\tdealerState: this.page.dataLayerProperty(\n\t\t\t\t\t'dealership.stateProvince'\n\t\t\t\t),\n\t\t\t\tsessionId: sessionStorage.getItem('userSessionId'),\n\t\t\t\tdealerCity: this.page.dataLayerProperty('dealership.city'),\n\t\t\t\tdealerName: this.page.dataLayerProperty(\n\t\t\t\t\t'dealership.dealershipName'\n\t\t\t\t),\n\t\t\t\tuserZipCode: this.page.dataLayerProperty('user.userPostalCode'),\n\t\t\t\tuserCity: this.page.dataLayerProperty('user.userCity'),\n\t\t\t\tuserState: this.page.dataLayerProperty('user.userState'),\n\t\t\t\tsiteTechnologyVersion: this.page.dataLayerProperty(\n\t\t\t\t\t'site.design.variationId'\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tif (this.page.isVehicleDetailPage()) {\n\t\t\t\tdata.vehicleDetails = this.getVehicle();\n\t\t\t}\n\n\t\t\tif (this.page.isErrorPage(alias)) {\n\t\t\t\tdata.errorCode = '404';\n\t\t\t}\n\n\t\t\t// DealerAreaCode is set for Toyota/Lexus and GM Canada\n\t\t\tif (this.dealerAreaCode) {\n\t\t\t\tif (this.mapPageBrand().toLowerCase() === 'lexus') {\n\t\t\t\t\tdata.dealerLDA = this.dealerAreaCode;\n\t\t\t\t} else if (this.dealerCodeType.toLowerCase() === 'gmus') {\n\t\t\t\t\tdata.dealerBac = this.retailerId;\n\t\t\t\t} else {\n\t\t\t\t\tdata.dealerTDA = this.dealerAreaCode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t/**\n\t * Handles the page view event.\n\t *\n\t * @param {Object} eventData The event data object Relevant properties:\n\t * {string} alias The DDC page alias\n\t */\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handlePageView =\n\t\tfunction handlePageView(eventData) {\n\t\t\t// assuming ws-inv-listing and being 'featuredVehiclePage' never happen at the same time\n\t\t\tif (!this.page.widgetIsPresent(/ws-inv-listing/)) {\n\t\t\t\ttracking.shift.handlers.AbstractEventHandler.prototype.handlePageView.call(\n\t\t\t\t\tthis,\n\t\t\t\t\teventData\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// custom filterSearch event: US687839\n\t\t\tif (this.isFeaturedVehiclePage) {\n\t\t\t\tlet alias;\n\n\t\t\t\tif (eventData.alias === 'INVENTORY_FEATURED_NEW') {\n\t\t\t\t\talias = 'New';\n\t\t\t\t} else if (eventData.alias === 'INVENTORY_FEATURED_USED') {\n\t\t\t\t\talias = 'Used';\n\t\t\t\t} else if (eventData.alias.includes('CERTIFIED')) {\n\t\t\t\t\talias = 'CPO';\n\t\t\t\t} else {\n\t\t\t\t\talias = 'Mixed';\n\t\t\t\t}\n\t\t\t\tthis.sendData(\n\t\t\t\t\t{\n\t\t\t\t\t\t'filterSearch.status': alias,\n\t\t\t\t\t\tevents: 'filterSearch'\n\t\t\t\t\t},\n\t\t\t\t\t'filterSearch'\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t// ======================================================================\n\t// -------------------------- Send Events to Shift ----------------------\n\t// ======================================================================\n\t/**\n\t * Handles the typed search event. ddc.form.typedSearch\n\t *\n\t * @param {Object} eventData The event data object.\n\t *\n\t * Relevant eventData properties:\n\t * {string} trackingId The DDC racking identifier of the form\n\t * {string} content The typed search content\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleTypedSearch =\n\t\tasync function handleTypedSearch(eventData) {\n\t\t\tlet formType;\n\t\t\tconst { typedSearchContent, trackingId } = eventData;\n\n\t\t\tif (this.hasInventoryWidget()) {\n\t\t\t\ttry {\n\t\t\t\t\tformType = await this.form.getFormMapping(trackingId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log.error(error);\n\t\t\t\t}\n\n\t\t\t\tthis.sendData({\n\t\t\t\t\tformType,\n\t\t\t\t\ttypedSearchContent,\n\t\t\t\t\tevents: 'typedSearch'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t/**\n\t * Handles the form confirmation event.\n\t *\n\t * @param {Object} eventData The event data object. Relevant properties:\n\t * {string} trackingId The DDC tracking identifier of the form\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleFormConfirmation =\n\t\tasync function handleFormConfirmation(eventData) {\n\t\t\tconst { trackingId = 'DEFAULT', params, isModal } = eventData;\n\n\t\t\tconst trackingIdToUse = trackingId || 'DEFAULT';\n\n\t\t\tlet formType;\n\t\t\ttry {\n\t\t\t\tformType = await this.form.getFormMapping(trackingIdToUse);\n\t\t\t} catch (error) {\n\t\t\t\tthis.log.error(error);\n\t\t\t}\n\n\t\t\tconst acceptedPrefContact = ['EMAIL', 'PHONE', 'TEXT'];\n\t\t\tconst data = {\n\t\t\t\tsessionId: sessionStorage.getItem('userSessionId'),\n\t\t\t\tformType,\n\t\t\t\tleadType: 'lead',\n\t\t\t\tleadId: this.page.dataLayerProperty('confirmation.formEventId'),\n\t\t\t\tevents: 'formSubmission',\n\t\t\t\tformVehicle: this.getVehicle(),\n\t\t\t\tdisplayType: this.formDisplayType(isModal)\n\t\t\t};\n\n\t\t\tconst prefContact =\n\t\t\t\t(this.page.dataLayerProperty('confirmation.preferredContact') &&\n\t\t\t\t\tthis.page\n\t\t\t\t\t\t.dataLayerProperty('confirmation.preferredContact')\n\t\t\t\t\t\t.toUpperCase()) ||\n\t\t\t\tnull;\n\n\t\t\tdata.prefContact =\n\t\t\t\tprefContact &&\n\t\t\t\t(acceptedPrefContact.indexOf(prefContact) > -1\n\t\t\t\t\t? prefContact\n\t\t\t\t\t: 'other');\n\n\t\t\tif (trackingId === 'TRADE_IN') {\n\t\t\t\tconst tradeInData = params\n\t\t\t\t\t.split('&')\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(attr) =>\n\t\t\t\t\t\t\tattr.indexOf('year') > -1 ||\n\t\t\t\t\t\t\tattr.indexOf('make') > -1 ||\n\t\t\t\t\t\t\tattr.indexOf('model') > -1\n\t\t\t\t\t)\n\t\t\t\t\t.reduce((obj, attr) => {\n\t\t\t\t\t\tconst keyRaw = attr.substr(0, attr.indexOf('='));\n\t\t\t\t\t\tlet key = '';\n\n\t\t\t\t\t\tif (keyRaw.indexOf('year') > -1) {\n\t\t\t\t\t\t\tkey = 'year';\n\t\t\t\t\t\t} else if (keyRaw.indexOf('make') > -1) {\n\t\t\t\t\t\t\tkey = 'make';\n\t\t\t\t\t\t} else if (keyRaw.indexOf('model') > -1) {\n\t\t\t\t\t\t\tkey = 'model';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst val = attr.substr(attr.indexOf('=') + 1);\n\n\t\t\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\t\t\tobj[key] = val;\n\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t}, {});\n\n\t\t\t\tdata.tradeIn = {\n\t\t\t\t\tyear: tradeInData.year,\n\t\t\t\t\tmake: tradeInData.make,\n\t\t\t\t\tmodel: tradeInData.model\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// the below consent stuff handles both GM cemConsent and Genesis endorsedCare conent form checkboxes\n\t\t\t// they both work a little different\n\t\t\tconst cemConsentDefaultValue = sessionStorage.getItem(\n\t\t\t\t'cemConsentDefaultValue'\n\t\t\t);\n\t\t\tconst cemConsent =\n\t\t\t\twin?.DDC?.WidgetData?.['ws-tracking']?.confirmationData?.form\n\t\t\t\t\t?.fields?.cemConsent;\n\n\t\t\tif (cemConsentDefaultValue != null && cemConsent != null) {\n\t\t\t\tif (\n\t\t\t\t\tcemConsent === 'YES_I_CONSENT' ||\n\t\t\t\t\tcemConsent === 'checked'\n\t\t\t\t) {\n\t\t\t\t\tdata.formOptIn =\n\t\t\t\t\t\tcemConsentDefaultValue === 'true'\n\t\t\t\t\t\t\t? 'in-implicit'\n\t\t\t\t\t\t\t: 'in-explicit';\n\t\t\t\t} else {\n\t\t\t\t\tdata.formOptIn = 'out';\n\t\t\t\t}\n\n\t\t\t\tsessionStorage.removeItem('cemConsentDefaultValue');\n\t\t\t}\n\n\t\t\tthis.sendData(data);\n\t\t};\n\n\t/**\n\t * Handles the form on page event.\n\t *\n\t * @param {Object} eventData The event data object\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleFormOnPage =\n\t\tasync function handleFormOnPage(eventData) {\n\t\t\tconst { isLead } = eventData;\n\n\t\t\tif (isLead) {\n\t\t\t\tconst { element, isModal, trackingId } = eventData;\n\n\t\t\t\tlet formType;\n\n\t\t\t\ttry {\n\t\t\t\t\tformType = await this.form.getFormMapping(trackingId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log.error(error);\n\t\t\t\t}\n\n\t\t\t\tconst data = {\n\t\t\t\t\tformType,\n\t\t\t\t\tevents: 'formShown',\n\t\t\t\t\tdisplayType: this.formDisplayType(isModal),\n\t\t\t\t\tformVehicle: this.getVehicle(element)\n\t\t\t\t};\n\n\t\t\t\tthis.sendData(data);\n\t\t\t}\n\t\t};\n\n\t/**\n\t * Handles the form initiation event.\n\t *\n\t * @param {Object} eventData The event data object. Relevant properties:\n\t * {string} trackingId The DDC tracking identifier of the form\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleFormInitiation =\n\t\tasync function handleFormInitiation(eventData) {\n\t\t\tconst { element, isModal, trackingId } = eventData;\n\t\t\tconst form = element.closest('form');\n\t\t\tlet formType;\n\t\t\ttry {\n\t\t\t\tformType = await this.form.getFormMapping(trackingId);\n\t\t\t} catch (error) {\n\t\t\t\tthis.log.error(error);\n\t\t\t}\n\n\t\t\tconst data = {\n\t\t\t\tformType,\n\t\t\t\tevents: 'formInitiation',\n\t\t\t\tdisplayType: this.formDisplayType(isModal),\n\t\t\t\tformVehicle: this.getVehicle(element)\n\t\t\t};\n\n\t\t\t// if form has formOptIn field, get the default value of opt-in field\n\t\t\t// cemConsent: GM\n\t\t\t// endorsedCareADF: Genesis\n\t\t\tconst cemConsent = form?.querySelector('[data-id=\"cemConsent\"]');\n\n\t\t\tif (cemConsent) {\n\t\t\t\tsessionStorage.setItem(\n\t\t\t\t\t'cemConsentDefaultValue',\n\t\t\t\t\tcemConsent.defaultChecked\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst endorsedCare = form?.querySelector(\n\t\t\t\t'[data-id=\"endorsedCareADF\"]'\n\t\t\t);\n\n\t\t\tif (endorsedCare) {\n\t\t\t\tsessionStorage.setItem(\n\t\t\t\t\t'cemConsentDefaultValue',\n\t\t\t\t\tendorsedCare.value === 'checked'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.sendData(data);\n\t\t};\n\n\t/**\n\t * Handles the form on submission event.\n\t *\n\t * @param {Object} eventData The event data object\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleFormSubmission =\n\t\tasync function handleFormSubmission(eventData) {\n\t\t\tconst { validate, trackingId } = eventData;\n\t\t\t// yes, the not validate part is correct, client wants to know when form is not valid\n\t\t\tif (\n\t\t\t\tthis.formErrorTagging &&\n\t\t\t\ttypeof validate !== 'undefined' &&\n\t\t\t\t!validate &&\n\t\t\t\ttrackingId !== 'INVENTORY_SEARCH'\n\t\t\t) {\n\t\t\t\tconst { element, invalidFields = {}, isModal } = eventData;\n\t\t\t\tconst formError = Object.entries(invalidFields)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t([fieldName, fieldValue]) =>\n\t\t\t\t\t\t\t`${fieldName}: ${fieldValue}`\n\t\t\t\t\t)\n\t\t\t\t\t.join(', ');\n\n\t\t\t\tlet formType;\n\t\t\t\ttry {\n\t\t\t\t\tformType = await this.form.getFormMapping(trackingId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log.error(error);\n\t\t\t\t}\n\n\t\t\t\tconst data = {\n\t\t\t\t\tformType,\n\t\t\t\t\tevents: 'formSubmissionError',\n\t\t\t\t\tdisplayType: this.formDisplayType(isModal),\n\t\t\t\t\tformVehicle: this.getVehicle(element),\n\t\t\t\t\tformError\n\t\t\t\t};\n\n\t\t\t\tthis.sendData(data);\n\t\t\t}\n\t\t};\n\n\t/**\n\t * Handles the offer click event.\n\t *\n\t * @param {Object} eventData The event data object.\n\t *\n\t * Relevant eventData properties to track for handleOfferClick:\n\t * {string} id The offer identifier\n\t * {string} name The name of the offer\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleOfferClick =\n\t\tfunction handleOfferClick(eventData) {\n\t\t\tconst { incentives } =\n\t\t\t\tthis.page.dataLayerProperty('page.attributes') || [];\n\n\t\t\tconst applicableIncentive = incentives.filter(\n\t\t\t\t({ id }) => id === eventData.offerId\n\t\t\t);\n\n\t\t\tconst offerClick = {\n\t\t\t\tofferId: eventData.offerId,\n\t\t\t\tofferName: eventData.offerName\n\t\t\t};\n\n\t\t\tif (applicableIncentive && applicableIncentive.length > 0) {\n\t\t\t\tconst {\n\t\t\t\t\ttype,\n\t\t\t\t\tcurrentVehicleModel,\n\t\t\t\t\tcurrentVehicleBodyStyle,\n\t\t\t\t\tapplicableTrims,\n\t\t\t\t\tapplicableYear,\n\t\t\t\t\tapplicableMake\n\t\t\t\t} = applicableIncentive[0];\n\n\t\t\t\tlet currentVehicleModelRevised = currentVehicleModel;\n\t\t\t\tif (\n\t\t\t\t\tapplicableMake &&\n\t\t\t\t\tcurrentVehicleModel &&\n\t\t\t\t\tcurrentVehicleModel.match(applicableMake)\n\t\t\t\t) {\n\t\t\t\t\tcurrentVehicleModelRevised = currentVehicleModel.replace(\n\t\t\t\t\t\t`${applicableMake} `,\n\t\t\t\t\t\t''\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet currentVehicleTrims;\n\n\t\t\t\tif (applicableTrims && applicableTrims.length > 0) {\n\t\t\t\t\tcurrentVehicleTrims = applicableTrims\n\t\t\t\t\t\t.reduce((collection, trim) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttrim.match(\n\t\t\t\t\t\t\t\t\t`${applicableYear} ${applicableMake} ${currentVehicleModel} ${currentVehicleBodyStyle}`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst trimSubstr = trim.replace(\n\t\t\t\t\t\t\t\t\t`${applicableYear} ${applicableMake} ${currentVehicleModel} ${currentVehicleBodyStyle} `,\n\t\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn [...collection, trimSubstr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [...collection];\n\t\t\t\t\t\t}, [])\n\t\t\t\t\t\t.join('|');\n\t\t\t\t}\n\n\t\t\t\tconst applicableIncentiveDataLayer = {\n\t\t\t\t\tofferType: (type && type.toLowerCase()) || null,\n\t\t\t\t\tvehicleModel: currentVehicleModelRevised,\n\t\t\t\t\tvehicleBodyStyle: currentVehicleBodyStyle,\n\t\t\t\t\tvehicleYear: applicableYear,\n\t\t\t\t\tvehicleTrim: currentVehicleTrims\n\t\t\t\t};\n\n\t\t\t\tObject.assign(offerClick, applicableIncentiveDataLayer);\n\t\t\t}\n\n\t\t\tthis.sendData({\n\t\t\t\tofferClick,\n\t\t\t\tevents: 'offerClick'\n\t\t\t});\n\t\t};\n\n\t/**\n\t * Handles the filter search event.\n\t *\n\t * @param {Object} eventData The event data object.\n\t *\n\t * Relevant eventData properties to track for handleFilterSearch:\n\t * {Number} resultCount The number of search results\n\t * {Object} queryFacets The facets used in the search\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleFilterSearch =\n\t\tfunction handleFilterSearch(eventData) {\n\t\t\tif (this.hasInventoryWidget()) {\n\t\t\t\tconst priceFilter =\n\t\t\t\t\teventData.queryFacets.internetPrice ||\n\t\t\t\t\teventData.queryFacets.msrp;\n\n\t\t\t\tconst filterSearchData = {\n\t\t\t\t\tstatus: this.getInventoryType(),\n\t\t\t\t\tyear: this.setFilterValueToSend(\n\t\t\t\t\t\teventData.queryFacets.year,\n\t\t\t\t\t\t', '\n\t\t\t\t\t),\n\t\t\t\t\tmake: this.setFilterValueToSend(\n\t\t\t\t\t\teventData.queryFacets.make,\n\t\t\t\t\t\t', '\n\t\t\t\t\t),\n\t\t\t\t\tmodel: this.setFilterValueToSend(\n\t\t\t\t\t\teventData.queryFacets.model,\n\t\t\t\t\t\t', '\n\t\t\t\t\t),\n\t\t\t\t\ttrim: this.setFilterValueToSend(\n\t\t\t\t\t\teventData.queryFacets.trim,\n\t\t\t\t\t\t', '\n\t\t\t\t\t),\n\t\t\t\t\tcolor: this.setFilterValueToSend(\n\t\t\t\t\t\teventData.queryFacets.normalExteriorColor,\n\t\t\t\t\t\t', '\n\t\t\t\t\t),\n\t\t\t\t\tminPrice: priceFilter ? priceFilter.split('-')[0] : 'All',\n\t\t\t\t\tmaxPrice: priceFilter ? priceFilter.split('-')[1] : 'All',\n\t\t\t\t\tbodyStyle: this.setFilterValueToSend(\n\t\t\t\t\t\teventData.queryFacets.bodyStyle ||\n\t\t\t\t\t\t\teventData.queryFacets.normalBodyStyle,\n\t\t\t\t\t\t', '\n\t\t\t\t\t),\n\t\t\t\t\tfeatures: this.setFilterValueToSend(\n\t\t\t\t\t\teventData.queryFacets.gvOption,\n\t\t\t\t\t\t' | '\n\t\t\t\t\t)\n\t\t\t\t};\n\n\t\t\t\ttracking.shift.handlers.AbstractEventHandler.prototype.handlePageView.call(\n\t\t\t\t\tthis,\n\t\t\t\t\t{\n\t\t\t\t\t\talias: win?.DDC?.dataLayer?.page?.pageInfo?.pageName,\n\t\t\t\t\t\t...eventData\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tthis.sendData({\n\t\t\t\t\tcountSearchResults: eventData.resultCount,\n\t\t\t\t\tfilterSearch: filterSearchData,\n\t\t\t\t\tevents: 'filterSearch'\n\t\t\t\t});\n\n\t\t\t\tlocalStorage.setItem(\n\t\t\t\t\t'ShiftFilterEvents',\n\t\t\t\t\tJSON.stringify(eventData)\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t/**\n\t * Handles the vehicle details view event.\n\t * Applies all properties of VDP page view, but is handled as separate event.\n\t *\n\t * @param {Object} eventData The event data object.\n\t * {Object} data The shift data object to send\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleVehicleDetailView =\n\t\tfunction handleVehicleDetailView(eventData) {\n\t\t\tconst data = this.buildDataForPageView(eventData.alias);\n\t\t\tdata.pageType = this.mapPageAlias();\n\t\t\tdata.displayType = 'in-page';\n\t\t\tdata.events = 'detailsView';\n\t\t\tthis.sendData(data);\n\t\t};\n\n\t/**\n\t * Handles get directions event.\n\t *\n\t * @param {Object} eventData The event data object\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleGetDirections =\n\t\tfunction handleGetDirections() {\n\t\t\tthis.sendData({\n\t\t\t\tevents: 'getDirections'\n\t\t\t});\n\t\t};\n\n\t/**\n\t * ws-toyota-offers widget will send serviceOfferClick to the shift analytics with offer details.\n\t * This event is being called from handleAllWidgetUserEvents which\n\t * will be called when widgetUserEvent is being published and widget name is ws-toyota-offers.\n\t * @param eventData The event data object\n\t */\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleServiceOfferClick =\n\t\tfunction handleServiceOfferClick(eventData) {\n\t\t\tif (eventData.widgetName === 'ws-toyota-offers') {\n\t\t\t\tconst offerStatus =\n\t\t\t\t\tnew Date(eventData.offerEndDate) > new Date()\n\t\t\t\t\t\t? 'active'\n\t\t\t\t\t\t: 'expired';\n\t\t\t\tconst serviceOfferClick = {\n\t\t\t\t\tofferStatus,\n\t\t\t\t\tofferName: eventData.offerTitle,\n\t\t\t\t\tofferExpire: eventData.offerEndDate,\n\t\t\t\t\tofferType: eventData.offerType || null,\n\t\t\t\t\tofferCategory: eventData.offerCategory || null\n\t\t\t\t};\n\t\t\t\tthis.sendData({\n\t\t\t\t\tserviceOfferClick,\n\t\t\t\t\tevents: 'serviceOfferClick'\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleAllWidgetUserEvents =\n\t\tfunction handleAllWidgetUserEvents(eventData) {\n\t\t\tswitch (eventData.widgetName) {\n\t\t\t\tcase 'ws-toyota-offers':\n\t\t\t\t\tthis.handleServiceOfferClick(eventData);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ws-inv-listing':\n\t\t\t\t\tif (\n\t\t\t\t\t\teventData.optionalData &&\n\t\t\t\t\t\teventData.optionalData.isWindowStickerLink\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst dataToSend = {\n\t\t\t\t\t\t\tevents: 'linkClick',\n\t\t\t\t\t\t\tlinkText: eventData.elementCTA,\n\t\t\t\t\t\t\tlinkType: 'CTA',\n\t\t\t\t\t\t\tlocation: 'content',\n\t\t\t\t\t\t\tpageType: 'Vehicle Listing'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\teventData.optionalData.url.includes(\n\t\t\t\t\t\t\t\t'api/legacy/pse/windowsticker'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst { status, year, make, model, vin } =\n\t\t\t\t\t\t\t\tthis.getVehicle();\n\n\t\t\t\t\t\t\tdataToSend.linkType = 'Monroney Label';\n\t\t\t\t\t\t\tdataToSend.vehicle = {\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\tyear,\n\t\t\t\t\t\t\t\tmake,\n\t\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\t\tvin\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.sendData(dataToSend);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\n\t/**\n\t * ddc-promotions tracking is set up to fire an event 'specials event' for all special categories\n\t * we are setting up a listener for specialsEvent, but only want to handle the event if it has a value of 'service'\n\t * for specialCategory for the service offer click event. Additionally, because our promotions tracking is set up to push\n\t * multiple event types to the gtm data layer we need to make sure that we only have this sending out the click event\n\t *\n\t * @param {Object} eventData The event data object.\n\t * {Object} serviceOfferClick The shift data object to send\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleSpecialsEvent =\n\t\tfunction handleSpecialsEvent(eventData) {\n\t\t\tlet events;\n\t\t\tlet properties;\n\n\t\t\tif (\n\t\t\t\teventData?.specialCategory?.toLowerCase?.() === 'service' &&\n\t\t\t\teventData.specialEvent === 'click'\n\t\t\t) {\n\t\t\t\tevents = 'serviceOfferClick';\n\t\t\t\tconst offerStatus =\n\t\t\t\t\tnew Date(eventData.specialEndDate) > new Date()\n\t\t\t\t\t\t? 'active'\n\t\t\t\t\t\t: 'expired';\n\t\t\t\tproperties = {\n\t\t\t\t\t[events]: {\n\t\t\t\t\t\tofferStatus,\n\t\t\t\t\t\tofferName: eventData.specialDescription,\n\t\t\t\t\t\tofferExpire: eventData.specialEndDate\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else if (\n\t\t\t\teventData?.widgetName === 'ws-specials' &&\n\t\t\t\teventData?.specialType === 'click' &&\n\t\t\t\teventData?.specialPlacementType === 'slideshow'\n\t\t\t) {\n\t\t\t\tevents = 'carouselClick';\n\t\t\t\tproperties = {\n\t\t\t\t\t[events]: {\n\t\t\t\t\t\tassetName: eventData?.oemId || eventData?.title || '',\n\t\t\t\t\t\tassetPosition: eventData?.promoIndex\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (events && properties) {\n\t\t\t\tthis.sendData({\n\t\t\t\t\t...properties,\n\t\t\t\t\tevents\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleLinkClick =\n\t\tfunction handleLinkClick(eventData) {\n\t\t\tconst { element, isTelephonicUrl, department, departmentId } =\n\t\t\t\teventData;\n\n\t\t\tlet dataToSend;\n\n\t\t\tif (\n\t\t\t\telement?.matches?.(\n\t\t\t\t\t'.navbar .nav-directions-button a, .page-header .adr a'\n\t\t\t\t) &&\n\t\t\t\teventData.url.includes('directions')\n\t\t\t) {\n\t\t\t\tdataToSend = {\n\t\t\t\t\tevents: 'getDirections'\n\t\t\t\t};\n\t\t\t} else if (isTelephonicUrl) {\n\t\t\t\tconst approvedDepartments = ['Sales', 'Service', 'Parts'];\n\t\t\t\tconst idPhoneMap = {\n\t\t\t\t\tSALES: 'Sales',\n\t\t\t\t\tSERVICE: 'Service',\n\t\t\t\t\tPARTS: 'Parts'\n\t\t\t\t};\n\n\t\t\t\t// Sometimes the id is listed in the department variable, which makes it in all caps\n\t\t\t\tconst formattedDepartment = idPhoneMap[department]\n\t\t\t\t\t? idPhoneMap[department]\n\t\t\t\t\t: department;\n\n\t\t\t\tconst correctDepartment =\n\t\t\t\t\tformattedDepartment &&\n\t\t\t\t\tapprovedDepartments.includes(formattedDepartment)\n\t\t\t\t\t\t? formattedDepartment\n\t\t\t\t\t\t: idPhoneMap[departmentId];\n\n\t\t\t\tdataToSend = {\n\t\t\t\t\tclickToCallDepartment: correctDepartment || 'Other',\n\t\t\t\t\tevents: 'clickToCall'\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tconst {\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\tclass: className,\n\t\t\t\t\t\t'data-src': dataSrc,\n\t\t\t\t\t\t'data-link-type': dataLinkType\n\t\t\t\t\t} = {},\n\t\t\t\t\tlinkEvents = 'linkClick',\n\t\t\t\t\tlocation,\n\t\t\t\t\ttext,\n\t\t\t\t\ttrackingSection,\n\t\t\t\t\turl,\n\t\t\t\t\twidgetName\n\t\t\t\t} = eventData;\n\n\t\t\t\tlet { linkType } = eventData;\n\n\t\t\t\tlinkType = dataLinkType || linkType || 'CTA';\n\n\t\t\t\tlet vehicleDetails;\n\n\t\t\t\tif (\n\t\t\t\t\twidgetName === 'ws-inv-listing' &&\n\t\t\t\t\tclassName.includes('window-sticker-link')\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(this.page.isVehicleDetailPage(\n\t\t\t\t\t\tthis.page.currentPageAlias()\n\t\t\t\t\t) ||\n\t\t\t\t\t\tthis.page.isVehicleListingPage(\n\t\t\t\t\t\t\tthis.page.currentPageAlias()\n\t\t\t\t\t\t)) &&\n\t\t\t\t\t(url || dataSrc)?.includes('api/legacy/pse/windowsticker')\n\t\t\t\t) {\n\t\t\t\t\tconst { status, year, make, model, vin } =\n\t\t\t\t\t\tthis.getVehicle();\n\n\t\t\t\t\tlinkType = 'Monroney Label';\n\n\t\t\t\t\tvehicleDetails = {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tyear,\n\t\t\t\t\t\tmake,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tvin\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tlet locationToSend = location;\n\t\t\t\tif (location === 'mainNav') {\n\t\t\t\t\tlocationToSend =\n\t\t\t\t\t\ttrackingSection === 'Footer' ? 'footer' : 'global nav';\n\t\t\t\t}\n\n\t\t\t\tif (linkType) {\n\t\t\t\t\tdataToSend = {\n\t\t\t\t\t\tevents: linkEvents,\n\t\t\t\t\t\t...(linkType && { linkType }),\n\t\t\t\t\t\t...(locationToSend && { location: locationToSend }),\n\t\t\t\t\t\t...(this.pageName && { pageType: this.pageName }),\n\t\t\t\t\t\t...(vehicleDetails && { vehicleDetails }),\n\t\t\t\t\t\t...(['CTA', 'Monroney Label'].includes(linkType) && {\n\t\t\t\t\t\t\tlinkText: text\n\t\t\t\t\t\t})\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst { location: locationBuyNowOrCarBravo, linkDestination } =\n\t\t\t\t\tthis.getBuyNowOrCarBravoAttributes(url) || {};\n\t\t\t\tif (locationBuyNowOrCarBravo) {\n\t\t\t\t\tdataToSend.location = locationBuyNowOrCarBravo;\n\t\t\t\t\tdataToSend.linkDestination = linkDestination;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (dataToSend) {\n\t\t\t\tthis.sendData(dataToSend);\n\t\t\t}\n\t\t};\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleFormChange =\n\t\tasync function handleFormChange(eventData) {\n\t\t\tconst { element, trackingId } = eventData;\n\n\t\t\tif (trackingId && this.formChangeTagging) {\n\t\t\t\tconst { isModal, fieldName } = eventData;\n\n\t\t\t\tlet formType;\n\t\t\t\ttry {\n\t\t\t\t\tformType = await this.form.getFormMapping(trackingId);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log.error(error);\n\t\t\t\t}\n\n\t\t\t\tthis.sendData({\n\t\t\t\t\tformType,\n\t\t\t\t\tdisplayType: this.formDisplayType(isModal),\n\t\t\t\t\tevents: 'formFieldInteraction',\n\t\t\t\t\tformFieldName: this.getFormFieldName(fieldName),\n\t\t\t\t\tformVehicle: this.getVehicle(element)\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t/**\n\t * We want to handle a submit event in the search form.\n\t *\n\t * @param {Object} eventData The event data object. Relevant properties:\n\t */\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleWidgetUserEvent =\n\t\tfunction handleWidgetUserEvent(eventData) {\n\t\t\tlet events;\n\t\t\tlet properties;\n\n\t\t\tif (\n\t\t\t\tthis.hasInventoryWidget() &&\n\t\t\t\teventData.widgetName === 'ws-inv-text-search'\n\t\t\t) {\n\t\t\t\tif (\n\t\t\t\t\teventData.element === 'search form' &&\n\t\t\t\t\teventData.result === 'form submitted'\n\t\t\t\t) {\n\t\t\t\t\tevents = 'typedSearch';\n\t\t\t\t\tproperties = {\n\t\t\t\t\t\ttypedSearchContent: eventData.fieldValue\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (events && properties) {\n\t\t\t\tif (events && properties) {\n\t\t\t\t\tthis.sendData({\n\t\t\t\t\t\t...properties,\n\t\t\t\t\t\tevents\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.page.widgetIsPresent(/ws-inv-listing/) &&\n\t\t\t\teventData.result === 'Results updated with sort selection'\n\t\t\t) {\n\t\t\t\tconst filterData = localStorage.getItem('ShiftFilterEvents');\n\t\t\t\tthis.handleFilterSearch(JSON.parse(filterData));\n\t\t\t}\n\t\t};\n\n\ttracking.shift.handlers.ShiftEventHandler.prototype.handleWalletUpdated =\n\t\tfunction handleWalletUpdated(_eventData) {\n\t\t\t// underscore to avoid linter error, if you need eventData in the future remove underscore and use it!\n\t\t\tthis.sendData({\n\t\t\t\tevents: 'myWalletClick'\n\t\t\t});\n\t\t};\n};\n\nexport default runShiftEventHandler;\n"],"names":["win","namespace","DDC","tracking","buyNowOrCarBravoAttributes","GMBUYSRP","param","location","linkDestination","GMBUYVDP","GMBUYNAV","CARBRAVOSRP","CARBRAVOVDP","CARBRAVONAV","shift","handlers","ShiftEventHandler","window","page","form","AbstractEventHandler","call","this","accelerateInitialCalcStart","accelerateLeadFormStart","extend","prototype","setFilterValueToSend","data","delimiter","modifiedData","replace","logCategory","getVehicle","element","formVehicle","vehicles","dataLayerProperty","length","vehicleId","uuid","elementToQuery","closest","vehicleIdInput","querySelector","value","inventoryType","modelYear","make","model","trim","engine","transmission","interiorColor","exteriorColor","vin","internetPrice","msrp","fuelType","bodyStyle","driveLine","certified","stockNumber","newOrUsed","status","filter","obj","mapInventoryType","year","displayedPrice","driveTrain","stockStatusTagging","isVehicleDetailPage","stockStatus","Live","getBuyNowOrCarBravoAttributes","url","Object","values","find","buyNowOrCarBravoAttribute","includes","buildDataForPageView","aliasIn","alias","locale","pageBrand","mapPageBrand","pageType","pageName","websiteTier","language","indexOf","substr","dealerZipCode","dealerState","sessionId","sessionStorage","getItem","dealerCity","dealerName","userZipCode","userCity","userState","siteTechnologyVersion","vehicleDetails","isErrorPage","errorCode","dealerAreaCode","toLowerCase","dealerLDA","dealerCodeType","dealerBac","retailerId","dealerTDA","handlePageView","eventData","widgetIsPresent","isFeaturedVehiclePage","sendData","events","handleTypedSearch","async","formType","typedSearchContent","trackingId","hasInventoryWidget","getFormMapping","error","log","handleFormConfirmation","params","isModal","trackingIdToUse","leadType","leadId","displayType","formDisplayType","prefContact","toUpperCase","tradeInData","split","attr","reduce","keyRaw","key","val","tradeIn","cemConsentDefaultValue","cemConsent","WidgetData","confirmationData","fields","formOptIn","removeItem","handleFormOnPage","isLead","handleFormInitiation","setItem","defaultChecked","endorsedCare","handleFormSubmission","validate","formErrorTagging","invalidFields","formError","entries","map","fieldName","fieldValue","join","handleOfferClick","incentives","applicableIncentive","id","offerId","offerClick","offerName","type","currentVehicleModel","currentVehicleBodyStyle","applicableTrims","applicableYear","applicableMake","currentVehicleTrims","currentVehicleModelRevised","match","collection","trimSubstr","applicableIncentiveDataLayer","offerType","vehicleModel","vehicleBodyStyle","vehicleYear","vehicleTrim","assign","handleFilterSearch","priceFilter","queryFacets","filterSearchData","getInventoryType","color","normalExteriorColor","minPrice","maxPrice","normalBodyStyle","features","gvOption","dataLayer","pageInfo","countSearchResults","resultCount","filterSearch","localStorage","JSON","stringify","handleVehicleDetailView","mapPageAlias","handleGetDirections","handleServiceOfferClick","widgetName","serviceOfferClick","offerStatus","Date","offerEndDate","offerTitle","offerExpire","offerCategory","handleAllWidgetUserEvents","optionalData","isWindowStickerLink","dataToSend","linkText","elementCTA","linkType","vehicle","handleSpecialsEvent","properties","specialCategory","specialEvent","specialEndDate","specialDescription","specialType","specialPlacementType","assetName","oemId","title","assetPosition","promoIndex","handleLinkClick","isTelephonicUrl","department","departmentId","matches","approvedDepartments","idPhoneMap","SALES","SERVICE","PARTS","formattedDepartment","clickToCallDepartment","attributes","class","className","dataSrc","dataLinkType","linkEvents","text","trackingSection","currentPageAlias","isVehicleListingPage","locationToSend","locationBuyNowOrCarBravo","handleFormChange","formChangeTagging","formFieldName","getFormFieldName","handleWidgetUserEvent","result","filterData","parse","handleWalletUpdated","_eventData"],"sourceRoot":""}