if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalytics4API("G-LSK5T6YLVL"); }, doPixelWork: function () { if (document.readyState != "complete") { setTimeout(function () { AS.pixel.doPixelWork(); }, 250); } else { AS.pixel.bodyText = AS.pixel.getText(); AS.pixel.loadFacebookAPI(); AS.pixel.doPhoneNumberSwapWork(); AS.pixel.doFacebookWork(6940, "833388447990433", "VIN"); } }, loadGoogleAnalytics4API: function (gaTrackingCode) { var gt = document.createElement("script"); gt.async = "async"; gt.src = "https://www.googletagmanager.com/gtag/js?id=" + gaTrackingCode; document.head.appendChild(gt); window.dataLayer = window.dataLayer || []; autosweetGA[gaTrackingCode] = function () {dataLayer.push(arguments);}; autosweetGA[gaTrackingCode]('js', new Date()); autosweetGA[gaTrackingCode]('config', gaTrackingCode); }, loadFacebookAPI: function () { !function (f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments); }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s); }(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js'); }, doFacebookWork: function (dealerID, pixelID, productIdType) { if (!window.fbq) { setTimeout(function () { AS.pixel.doFacebookWork(dealerID, pixelID, productIdType); }, 250); } else { AS.pixel.connectFB(pixelID, productIdType); } }, connectFB: function (pixelID, productIdType) { if (window.fbq) { window.fbq('init', pixelID); window.fbq('track', 'PageView'); AS.pixel.analyzePage(pixelID, productIdType); } }, analyzePage: function (pixelID, productIdType) { var pIds = productIdType == "VIN" ? AS.pixel.getPageVins() : AS.pixel.getPageStockNumbers(); if (pIds && pIds.length) { window.fbq("trackSingle", pixelID, "ViewContent", { content_type: "product", content_ids: pIds }); window.fbq("trackSingle", pixelID, "ViewContent", { content_type: "vehicle", content_ids: pIds }); } }, getPageVins: function () { var retVins = []; var vRe = /\b[a-hj-npr-z0-9]{17}\b/gi; for (var p = 0, props = [AS.pixel.bodyText, document.body['innerHTML']]; p < props.length; p++) { if (!retVins.length) { var dit = props[p]; var curVin; do { curVin = vRe.exec(dit); if (curVin && curVin.length) { curVin = curVin[0]; var wasFound = false; for (var i = 0; i < retVins.length; i++) { if (retVins[i].toUpperCase() == curVin.toUpperCase()) { wasFound = true; break; } } if (!wasFound && curVin.match(/[a-z]/i) && !curVin.substr(12,5).match(/[a-z]/i)) retVins.push(curVin.toUpperCase()); } } while (curVin != null); } } return retVins; }, getPageStockNumbers: function () { var retStockNumbers = []; var vRe = /(St(o?c)?k\s*|ID)(?:ID|#|N(?:o[\.]?|um(?:ber)?))?[:-\s]\s*([\w-]*)/gi; for (var p = 0, props = [AS.pixel.bodyText, document.body['innerHTML']]; p < props.length; p++) { if (!retStockNumbers.length) { var dit = props[p]; var curStockNumber; do { curStockNumber = vRe.exec(dit); if (curStockNumber && curStockNumber.length > 1) { curStockNumber = curStockNumber[curStockNumber.length - 1]; var wasFound = false; for (var i = 0; i < retStockNumbers.length; i++) { if (retStockNumbers[i] == curStockNumber) { wasFound = true; break; } } if (!wasFound) retStockNumbers.push(curStockNumber); } } while (curStockNumber != null); } } return retStockNumbers; }, doPhoneNumberSwapWork: function () { var asCookie = AS.pixel.cookieHandler.getCookie("AutoSweetSource"); var urlVars = AS.pixel.getURLVars(); var sourceMatch = /AutoSweet/gi.exec(urlVars["utm_source"]); var mediumMatch = /referral|email/gi.exec(urlVars["utm_medium"]); var campaignMatch = /autosweet/gi.exec(urlVars["utm_campaign"]); if (asCookie || (sourceMatch && mediumMatch) || campaignMatch) { AS.pixel.cookieHandler.setCookie("AutoSweetSource", "true", 3); var trackingNumbers = AS.pixel.determineTrackingNumbers(urlVars["utm_source"], mediumMatch, campaignMatch); if (trackingNumbers != null) { var pageNumberInfo = AS.pixel.getPageNumberInfo(trackingNumbers); var possiblePhoneNumbers = pageNumberInfo.possiblePhoneNumbers; if (possiblePhoneNumbers.length > 0) { var anchors = document.getElementsByTagName("a"); for (var i = 0; i < anchors.length; i++) { var number = null; if (anchors[i].href.length >= 10) { number = anchors[i].href.substr(anchors[i].href.length - 10); } if (number && trackingNumbers[number]) { anchors[i].href = anchors[i].href.replace(number, trackingNumbers[number]); } } var nds = document.querySelectorAll("*"); for (var i = 0; i < nds.length; i++) { var childNodes = nds[i].childNodes; for (var j = 0; j < childNodes.length; j++) { var cNode = childNodes[j]; if (cNode.nodeType == Node.TEXT_NODE) { for (var k = 0; k < possiblePhoneNumbers.length; k++) { var numberConfig = possiblePhoneNumbers[k]; for (var l = 0; l < numberConfig.variants.length; l++) { var oldPhoneNumber = numberConfig.variants[l]; var newPhoneNumber = AS.pixel.getReplacementNumber(numberConfig.phoneNumber, trackingNumbers[numberConfig.phoneNumber], numberConfig.variants[l]); if (cNode.textContent && cNode.textContent.indexOf(oldPhoneNumber) > -1) { cNode.textContent = cNode.textContent.replace(oldPhoneNumber, newPhoneNumber); break; } } } } } } } if (pageNumberInfo.allNumbers != null) { var recentlySeenNumbers = []; var rulesToUpsert = []; for (var i = 0; i < pageNumberInfo.allNumbers.length; i++) { var phoneNumber = pageNumberInfo.allNumbers[i]; if (recentlySeenNumbers.indexOf(phoneNumber) == -1) { rulesToUpsert.push(phoneNumber); } } if (rulesToUpsert.length) { AS.pixel.upsertPhoneNumbers(rulesToUpsert); } } } } }, determineTrackingNumbers: function (source, mediumMatch, campaignMatch) { var retNumberMap = null; if (source != null && campaignMatch != null) { switch (source.toLowerCase()) { case "facebook": retNumberMap = null; break; case "facebookmarketplace": retNumberMap = null; break; case "autosweet": if (mediumMatch && mediumMatch[0].toLowerCase() == "email") { retNumberMap = null; } break; case "craigslist": retNumberMap = null; break; case "google": retNumberMap = null; break; default: break; } if (retNumberMap != null && Object.keys(retNumberMap).length) { var trackingNumber = retNumberMap[Object.keys(retNumberMap)[0]]; var enabledDNRs = []; for (var i = 0; i < enabledDNRs.length; i++) { var number = enabledDNRs[i]; retNumberMap[number] = trackingNumber; } } } return retNumberMap; }, getPageNumberInfo: function (trackingNumbers) { var dnrNumbers = ["2014272008","2014272012","2014272014","2014272019","2014272020","2014272021","2014272022","2014272023","2017712020","2017712021","2017712022","2017712023","2032262001","2032262004","2032262006","2032262007","2032262008","2032262011","2032262012","2032262020","2032262021","2032262022","2032262032","2038112010","2038112019","2038112020","2038112021","2038112022","2038112023","2038112038","2044212004","2044212007","2044212020","2044212021","2118052017","2118052019","2118052020","2118052021","2118052022","2118052023","2118052118","2129332009","2129332010","2129332012","2129332019","2129332020","2129332021","2129332022","2129332023","2129332024","2134502017","2134502019","2134502020","2134502021","2134502022","2134502023","2134882021","2145112020","2145112022","2152532021","2152532022","2168572020","2168572022","2179892019","2179892020","2179892021","2179892022","2179892023","2179892179","2179902017","2179902019","2179902021","2179902022","2179902023","2184292019","2184292020","2184292021","2184292022","2202222008","2202222019","2202222020","2202222021","2202222022","2202222023","2202222202","2216592019","2216592020","2216592021","2216592022","2237642019","2237642020","2237642021","2246562001","2246562007","2246562020","2246562021","2246562022","2246562246","2247622000","2247622001","2247622020","2247622021","2247622022","2247622023","2247622247","2274082009","2274082012","2274082015","2274082019","2274082020","2274082021","2274082022","2314432001","2314432010","2314432015","2314432019","2314432020","2314432021","2314432022","2314432314","2377642020","2377642022","2377642023","2377642377","2386932013","2386932020","2386932021","2386932023","2393252020","2393252021","2399292021","2399292022","2417822020","2417822021","2417822022","2417822023","2435962019","2435962020","2435962022","2437622020","2437622021","2437622022","2439352021","2439352022","2458282012","2458282019","2458282020","2458282021","2458282022","2458282023","2502242008","2502242019","2502242020","2502242021","2502242022","2508192020","2508192021","2508192022","2508192023","2508192508","2545742020","2545742021","2545742022","2545742023","2545742545","2584472022","2633902011","2633902012","2633902019","2633902020","2633902021","2633902022","2633902023","2645782001","2645782007","2645782019","2645782020","2645782021","2645782022","2645782645","2649112019","2649112020","2649112021","2649112022","2665112021","2665112022","2665112665","2692652020","2692652021","2692652022","2692652023","2722942011","2722942019","2722942020","2722942021","2722942022","2722942722","2736242008","2736242019","2736242020","2736242021","2736242022","2736242736","2764942020","2764942021","2764942022","2768182019","2768182020","2768182021","2804612015","2804612020","2804612021","2804612022","2849872019","2849872020","2849872021","2849872022","2878482017","2878482020","2878482021","2878482022","2878482023","2897532007","2897532009","3034082008","3034082017","3034082019","3034082020","3034082021","3034082022","3034082023","3034083034","3044652021","3044652022","3044652023","3044653044","3078792020","3078792021","3078792022","3078793078","3184622020","3184622021","3206642020","3206642021","3206642022","3224152004","3224152007","3224152019","3224152020","3224152021","3224152022","3224153224","3227312013","3227312023","3235962012","3235962019","3235962020","3235962021","3235962022","3235962023","3285372008","3285372012","3285372019","3285372020","3285372021","3285372022","3286622019","3286622020","3286622021","3286622022","3295462019","3295462020","3295462021","3295462022","3296352008","3296352019","3296352020","3296352021","3296352022","3296352023","3296353296","3305232019","3305232020","3305232022","3305232023","3313622008","3313622009","3313622010","3313622012","3313622019","3313622020","3313622021","3313622022","3363742020","3363742022","3363742023","3424662019","3424662020","3424662021","3424662022","3424663424","3427122000","3427122021","3427122022","3427122023","3427123427","3437452012","3437452019","3437452020","3437452021","3437452022","3437453437","3466772010","3466772019","3466772020","3466772021","3466772022","3466772023","3489832011","3497462020","3497462021","3563672021","3563672022","3565942019","3565942021","3565942022","3609052001","3609052017","3609052019","3609052020","3609052021","3609052022","3609052023","3609053609","3628532021","3652502019","3652502020","3652502021","3652502022","3652502023","3652503652","3718222020","3718222021","3718222022","3718222023","3734442010","3734442011","3734442012","3734442019","3734442020","3734442021","3734442022","3734442023","3758882012","3758882019","3758882020","3758882021","3758882022","4119972017","4119972020","4119972021","4119972022","4253972021","4253972022","4253972023","4253974253","4303842020","4303842021","4334922001","4334922019","4334922020","4334922021","4334922022","4334922023","4349372001","4349372013","4349372017","4349372019","4349372020","4349372021","4349372022","4349372023","4349374349","4349422005","4349422017","4349422019","4349422020","4349422021","4349422022","4349422023","4352362007","4352362010","4352362014","4352362015","4352362020","4352362021","4352362022","4352364352","4375362001","4375362019","4375362020","4375362021","4375362022","4375362023","4375364375","4376612019","4376612020","4376612021","4376612022","4376614376","4648472020","4648472021","4648472022","4654162017","4654162020","4654162021","4654162022","4654162023","4843002017","4843002020","4843002021","4843002022","4843002023","4843004843","4872642020","4872642021","4893682019","4893682020","4893682021","4893682022","4893684893","5002082020","5002082021","5002082022","5002082023","5026642010","5026642019","5026642020","5026642021","5026642022","5026642023","5026645026","5049672017","5049672019","5049672021","5049672022","5056522008","5056522013","5056522017","5056522019","5056522020","5056522021","5056522022","5056525056","5113002019","5113002020","5113002021","5113002022","5136062007","5136062019","5136062020","5136062021","5136062022","5164532008","5164532019","5164532020","5164532021","5164532022","5164535164","5172342019","5172342021","5172342022","5222542015","5222542019","5222542020","5222542021","5222542022","5237462010","5237462019","5237462020","5237462021","5237462022","5267502001","5267502004","5267502008","5267502019","5267502020","5267502021","5267505267","5302742020","5302742021","5302742022","5302745302","5323282019","5323282020","5323282021","5323282022","5323285323","5355242020","5355242021","5355242022","5378282017","5378282019","5378282020","5378282021","5378282022","5378282023","5378285378","5383382000","5383382001","5383382007","5383382008","5383382019","5383382020","5383382021","5383382022","5383385383","5402732011","5402732012","5402732019","5402732020","5402732021","5402732022","5402732023","5409682020","5409682021","5409682022","5434442021","5434442022","5437012021","5437012022","5444232019","5444232020","5444232021","5445532013","5445532019","5445532020","5445532021","5445532022","5445532023","5469722019","5469722020","5469722021","5469722022","5493872020","5493872021","5493872022","5493872023","5493875493","5508132011","5508132017","5508132020","5508132021","5508132022","5508132023","5508135508","5515542020","5515542021","5515542022","5606692019","5606692020","5606692021","5637052001","5637052004","5637052008","5637052020","5637052021","5657672015","5657672019","5657672020","5657672021","5657672022","5682962021","5682962022","5682962023","5745452021","5745452022","5799982001","5799982006","5799982020","5799982021","5799985799","5804232009","5804232019","5804232020","5804232021","5804232022","6044252019","6044252020","6044252021","6044252022","6044256044","6079842019","6079842020","6079842021","6079842022","6103262021","6103262023","6143392020","6143392021","6143392022","6189042019","6189042020","6189042021","6189042022","6194772019","6194772020","6194772021","6194772022","6194776194","6199782020","6199782021","6233212021","6255922019","6255922020","6255922021","6255922022","6255922023","6262922019","6262922020","6265082020","6265082021","6265082022","6265086265","6282312021","6282312022","6296162008","6296162020","6296162021","6296162022","6296162023","6352602021","6367092021","6367092022","6372792020","6372792021","6372792023","6373282020","6373282021","6373282022","6373282023","6412562020","6412562021","6412562022","6419192019","6419192020","6419192021","6419192022","6419192024","6456652020","6456652022","6464482019","6464482020","6464482021","6474542019","6474542020","6474542021","6474542023","6484812019","6484812020","6484812021","6484812022","6515402019","6515402020","6515402021","6515402022","6515406515","6532282010","6532282011","6532282012","6532282019","6532282020","6532282021","6532282022","6532282023","6532282024","6532286532","6535182020","6535182021","6535182022","6553592019","6553592020","6553592021","6553592022","6554852019","6554852021","6666542020","6666542021","6685372015","6685372020","6685372021","6726162020","6726162021","6726162022","6845782019","6845782020","6845782021","6845782022","6845782023","7019302012","7019302019","7019302020","7019302021","7019302022","7019302023","7047552011","7047552012","7047552019","7047552020","7047552021","7047552022","7047552023","7047552024","7047557047","7066472010","7066472012","7066472019","7066472020","7066472021","7066472022","7293742019","7293742020","7293742021","7293742022","7342812020","7342812021","7342812022","7347532020","7347532021","7347532022","7347532023","7425022001","7425022007","7425022019","7425022020","7425022021","7425022022","7425022023","7483932009","7483932015","7483932019","7483932020","7483932021","7483932022","7536312020","7536312021","7536312022","7553252019","7553252020","7553252021","7553252022","7612582011","7612582019","7612582020","7612582021","7612582022","7612582023","7612582024","7645592001","7645592010","7645592019","7645592020","7645592021","7645592022","7645597645","7658122008","7658122009","7658122010","7658122012","7658122019","7658122020","7658122021","7658122022","7658127658","7668472019","7668472020","7668472021","7668472022","7669762008","7669762011","7669762019","7669762020","7669762021","7669762022","7669762023","7669767669","7675732020","7675732021","7675732022","7675732023","7702582012","7702582019","7702582020","7702582021","7702582022","7702587702","7858542001","7858542019","7858542020","7858542021","7858542022","7858542023","8077612008","8077612009","8077612010","8077612019","8077612020","8077612021","8077612022","8077618077","8099952019","8099952020","8099952021","8099952022","8099952023","8154322009","8154322010","8154322012","8154322019","8154322020","8154322021","8154322022","8154328154","8395842019","8395842020","8395842021","8395842022","8437692000","8437692001","8437692008","8437692019","8437692020","8437692021","8437692022","8437692023","8437698437","8442412020","8442412021","8442412022","8442412023","8442418442","8452842019","8452842021","8714642020","8714642021","8714642022","8763012021","8763012022","8763012023","8823882020","8823882022","8835772008","8835772019","8835772020","8835772021","8835772022","8885782013","8885782020","8885782021","8885782022","8885782023","8892882013","8892882019","8892882020","8892882021","8892882022","8892882023","9284732008","9284732010","9284732012","9284732019","9284732020","9284732021","9284732022","9383902012","9383902020","9383902021","9383902022","9404022010","9404022020","9404022021","9404022022","9736222882","9736222883","9835002008","9835002019","9835002020","9835002021","9835002022","9835009835","9837112020","9837112021","9869722019","9869722020","9869722021","9869722022","9869722023","9869729869"]; var allNumbers = []; var possiblePhoneNumbers = []; var phoneNumberRegex = /(\+?1[-.\s]?)?(\(?[2-9][0-8][0-9]\)?[-.\s]?[2-9][0-9]{2}[-.\s]?[0-9]{4})/gi; var phoneNumberMatch = phoneNumberRegex.exec(document.body.innerText); while (phoneNumberMatch != null) { var foundNumber = phoneNumberMatch[2]; var cleanedNumber = foundNumber.replace(/[-.\s()]/gi, ''); if (cleanedNumber.length == 10) { var wasFound = false; for (var i = 0; i < possiblePhoneNumbers.length; i++) { if (possiblePhoneNumbers[i].phoneNumber == cleanedNumber) { wasFound = true; if (possiblePhoneNumbers[i].variants.indexOf(foundNumber) < 0) { possiblePhoneNumbers[i].variants.push(foundNumber); } break; } } if (!wasFound && trackingNumbers != null && trackingNumbers[cleanedNumber] != null) { possiblePhoneNumbers.push({ phoneNumber: cleanedNumber, variants: [foundNumber] }); } if (allNumbers.indexOf(cleanedNumber) < 0 && trackingNumbers != null) { allNumbers.push(cleanedNumber); } } phoneNumberMatch = phoneNumberRegex.exec(document.body.innerText); } return { possiblePhoneNumbers: possiblePhoneNumbers, allNumbers: allNumbers }; }, upsertPhoneNumbers: function (phoneNumbers) { var newXHR = new XMLHttpRequest(); newXHR.open('POST', 'https://extws.autosweet.com/ASPixel/DynamicNumberReplacementRules?did=6940&phoneNumbers=' + phoneNumbers.join(',')); newXHR.send(); }, getReplacementNumber: function (oldNumber, newNumber, variant) { var retReplacement = variant; if (oldNumber && newNumber && variant) { if (/^\d{10}$/gi.test(oldNumber) && /^\d{10}$/gi.test(newNumber)) { var oldFirstThree = oldNumber.substring(0, 3); var oldMiddleThree = oldNumber.substring(3, 6); var oldLastFour = oldNumber.substring(6, 10); var newFirstThree = newNumber.substring(0, 3); var newMiddleThree = newNumber.substring(3, 6); var newLastFour = newNumber.substring(6, 10); var firstThreeIndex = variant.indexOf(oldFirstThree); retReplacement = retReplacement.substr(0, firstThreeIndex) + newFirstThree + retReplacement.substr(firstThreeIndex + newFirstThree.length); var middleThreeIndex = variant.indexOf(oldMiddleThree, firstThreeIndex); retReplacement = retReplacement.substr(0, middleThreeIndex) + newMiddleThree + retReplacement.substr(middleThreeIndex + newMiddleThree.length); var lastFourIndex = variant.indexOf(oldLastFour, middleThreeIndex); retReplacement = retReplacement.substr(0, lastFourIndex) + newLastFour + retReplacement.substr(lastFourIndex + newLastFour.length); } } return retReplacement; }, getURLVars: function() { var vars = {}; var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars; }, cookieHandler: { getCookie: function (name) { var allCookies = document.cookie.split(';'); if (allCookies) { for (var i = 0; i < allCookies.length; i++) { var key = allCookies[i].substr(0, allCookies[i].indexOf('=')).trim(); var value = allCookies[i].substr(allCookies[i].indexOf('=') + 1); if (key == name) { return unescape(value); } } } return null; }, setCookie: function (name, value, exmins, domain) { if (name) { var exDate = null; if (exmins) { exDate = new Date(); exDate.setTime(exDate.getTime() + exmins * 60000); } var thisCookie = name + '=' + escape(value); if (exDate) { thisCookie += ';expires=' + exDate.toGMTString(); } if (domain) { thisCookie += ';domain=' + domain; } thisCookie += ';path=/'; document.cookie = thisCookie; } } }, getText: function () { var textNodes = AS.pixel.getTextNodesIn(document.body); var textValues = []; for (var i = textNodes.length - 1; i >= 0 ; i--) { if (textNodes[i]) { textValues.push(textNodes[i].textContent); } } return textValues.join(" "); }, getTextNodesIn: function (elem) { var textNodes = []; if (elem) { for (var nodes = elem.childNodes, i = nodes.length; i--;) { var node = nodes[i], nodeType = node.nodeType; if (nodeType == 3) { textNodes.push(node); } else if (nodeType == 1 || nodeType == 9 || nodeType == 11) { textNodes = textNodes.concat(AS.pixel.getTextNodesIn(node)); } } } return textNodes; } }; AS.pixel.doAnalyticsWork(); AS.pixel.doPixelWork();