if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalytics4API("G-DQBF7SCPPW"); }, 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(6941, "363688269291474", "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 = ["2009162012","2009162020","2009162021","2009162022","2033212020","2033212021","2039222019","2039222020","2039222021","2039222022","2039222023","2046112007","2046112019","2046112020","2046112021","2046112022","2046112023","2059012012","2059012017","2059012019","2059012020","2059012021","2059012022","2059012023","2067862005","2067862006","2067862007","2067862008","2067862021","2067862022","2086412021","2096962019","2096962020","2096962021","2134502021","2134502022","2134882019","2134882020","2134882021","2134882022","2134882023","2144212019","2144212020","2144212021","2144212022","2145112022","2168382019","2168382020","2168382021","2168382022","2168382023","2288272007","2288272019","2288272020","2288272021","2288272022","2288272023","2358022014","2358022021","2358022022","2358022023","2377642020","2377642021","2377642022","2377642023","2393252020","2393252022","2408282007","2408282020","2408282021","2419452020","2419452021","2434242012","2434242019","2434242021","2434242022","2437192008","2437192019","2437192021","2437192022","2437192023","2466422007","2466422019","2466422020","2466422021","2466422022","2466752006","2466752007","2466752008","2466752011","2466752020","2466752021","2466752022","2466752023","2479382020","2479382021","2479382022","2502242020","2512452019","2512452020","2525192012","2525192019","2525192020","2525192021","2525192022","2574822007","2574822019","2574822020","2574822021","2574822022","2603712010","2603712020","2626820658","2629582006","2629582011","2629582017","2639252014","2639252019","2639252020","2639252021","2639252022","2639252023","2645782020","2666502002","2666502006","2666502007","2666502017","2666502021","2669782007","2669782020","2669782021","2669782022","2712592007","2712592019","2712592020","2712592021","2712592022","2719742021","2724222006","2724222007","2724222012","2724222016","2724222017","2724222019","2724222020","2724222021","2724222022","2724222023","2724842007","2724842019","2724842020","2724842021","2724842022","2727092019","2727092020","2727092021","2727092022","2727272007","2727272020","2727272021","2727272022","2727872007","2727872011","2727872019","2727872020","2727872021","2727872022","2727872023","2736242020","2744622020","2792022019","2792022020","2792022021","2792022022","2792022023","2846952010","2846952017","2846952020","2846952021","2846952022","2846952023","2878482019","2878482020","2878482021","2878482022","2878482023","3015132006","3015132011","3015132019","3015132020","3015132021","3015132022","3023912006","3023912011","3023912012","3023912015","3023912017","3023912019","3023912020","3023912021","3023912022","3023912023","3034512007","3034512013","3034512014","3034512019","3034512020","3034512021","3034512022","3034512023","3113782011","3113782019","3113782020","3113782021","3113782022","3115482002","3115482005","3115482006","3115482020","3115482021","3115482022","3115482023","3264902019","3264902020","3264902021","3264902022","3264902023","3268092007","3268092019","3268092020","3268092021","3268092022","3284992007","3284992019","3284992020","3284992021","3284992022","3284992023","3285372007","3285372020","3294952019","3294952020","3294952021","3294952022","3294952023","3295812020","3295812021","3295812022","3295812023","3296982008","3296982020","3296982021","3296982022","3297842007","3297842019","3297842020","3297842021","3382442020","3382442021","3382442022","3382442023","3394042007","3394042019","3394042020","3394042021","3394042022","3394792019","3394792020","3394792021","3394792022","3435482008","3435482019","3435482020","3435482021","3435482022","3435482023","3435792019","3435792020","3435792021","3435792022","3435792023","3455632007","3455632019","3455632020","3455632021","3455632022","3455632023","3463132020","3463132021","3463132022","3563672019","3565942006","3565942019","3565942020","3565942021","3565942022","3565942023","3578152012","3578152019","3578152020","3578152021","3578152022","3606682019","3606682020","3606682021","3658762012","3658762017","3658762020","3658762021","3658762022","3658762023","3666432020","3666432021","3666432022","3666432023","3666962019","3666962020","3666962021","3666962022","3697062008","3697062019","3697062020","3697062021","3697062022","3697742007","3697742019","3697742020","3697742021","3697742022","3774772010","3774772012","3774772019","3774772020","3774772021","3774772022","3774772023","4027072022","4049472006","4049472008","4049472012","4049472019","4049472020","4049472021","4049472022","4049472023","4189802019","4189802020","4189802021","4189802022","4306452019","4306452020","4306452021","4306452022","4334632020","4334632021","4334632022","4414742008","4439122007","4439122019","4439122020","4439122021","4439122022","4454702006","4454702010","4454702019","4454702020","4454702021","4454702022","4482412019","4482412020","4482412021","4483342020","4483342021","4483342022","4549922005","4549922006","4549922007","4549922008","4549922011","4549922013","4549922016","4549922017","4549922020","4549922021","4549922022","4796462013","4796462014","4796462019","4796462020","4796462021","4796462022","5055572019","5055572020","5055572021","5055572022","5055572023","5056462019","5056462020","5056462021","5056462022","5056462023","5119482012","5119482020","5119482021","5119482022","5119482023","5127182006","5127182020","5127182021","5127182022","5134811999","5134812019","5134812020","5134812021","5134812022","5159072013","5159072019","5159072020","5183282019","5183282020","5183282021","5183282022","5209602020","5209602021","5209602022","5215142002","5215142006","5215142007","5215142008","5215142017","5215142019","5215142020","5215142021","5215142022","5228622020","5228622021","5228622022","5247332007","5247332019","5247332020","5247332021","5247332022","5248282006","5248282011","5248282015","5248282016","5248282019","5248282020","5248282021","5248282022","5248282023","5263352007","5263352014","5263352019","5263352020","5263352021","5263352022","5263352023","5288782007","5288782020","5288782021","5288782022","5297002020","5297002021","5297002022","5323282020","5328522020","5328522021","5338812005","5338812020","5338812021","5338812023","5353142006","5353142011","5367692002","5367692005","5367692006","5367692007","5367692011","5367692012","5367692020","5367692021","5367692022","5367692023","5396522019","5396522020","5396522021","5396522022","5403372012","5403372017","5403372019","5403372020","5403372021","5403372022","5403372023","5449982007","5459552020","5459552021","5459552022","5459552023","5479272007","5479272019","5479272020","5479272021","5479272022","5499402021","5499402022","5502542019","5502542020","5502542021","5502542022","5506782020","5506782021","5506782022","5532182020","5532182021","5532182022","5532182023","5536522006","5536522007","5536522008","5536522019","5536522020","5536522021","5536522022","5546452021","5546792012","5546792020","5546792021","5546792022","5546792023","5587792020","5587792021","5587792022","5657672020","5657672021","5657672022","5665492007","5665492019","5665492020","5665492021","5665492022","5665492023","5699952007","5699952011","5699952013","5699952019","5699952020","5699952021","5699952022","5699952023","5714782020","5714782021","5714782022","5717292010","5717292011","5717292019","5717292020","5717292021","5717292022","5727522011","5727522019","5727522020","5727522021","5727522022","5727522023","5815602012","5815602020","5815602021","5815602022","5815602023","5833022019","5833022021","6002082019","6002082020","6002082021","6002082022","6018402021","6069582007","6069582020","6069582021","6069582022","6099532019","6099532020","6099532021","6099532022","6099532023","6144362006","6144362012","6144362019","6144362020","6144362021","6144362022","6144362023","6148362007","6148362019","6148362020","6148362021","6148362022","6209622007","6209622020","6209622021","6209622022","6209622023","6264402019","6264402020","6264402021","6264402022","6264612021","6264612022","6284512007","6284512019","6284512020","6284512021","6284512022","6284512023","6296162006","6296162012","6296162019","6296162020","6296162021","6296162022","6296162023","6322832020","6322832021","6322832022","6323632020","6323632021","6337922019","6337922020","6337922022","6352602019","6352602020","6352602021","6352602022","6367092007","6367092019","6367092020","6367092021","6367092022","6374452006","6374452007","6374452019","6374452020","6374452021","6374452022","6403502007","6403502014","6403502019","6403502020","6403502021","6403502022","6412562007","6412562020","6412562021","6412562022","6437932020","6456342020","6456342022","6456482020","6456482021","6456482022","6456652005","6456652007","6456652019","6456652020","6456652021","6456652022","6466422007","6466422019","6466422020","6466422021","6466422022","6476772019","6476772020","6476772021","6476772022","6484812022","6505352020","6505352021","6543532005","6543532007","6543532012","6543532019","6543532020","6543532021","6543532022","6543532023","6553382007","6553382019","6553382020","6553382021","6553382022","6553382023","6554852013","6554852020","6554852021","6554852022","6569802019","6569802020","6569802021","6569802022","6585262020","6585262021","6638712007","6638712019","6638712020","6638712021","6638712022","6666542019","6666542021","6872932019","6872932020","6872932021","6872932022","7014812019","7014812020","7014812021","7014812022","7062362020","7062362021","7062362022","7062362023","7067402007","7067402010","7067402011","7067402017","7067402019","7067402020","7067402021","7067402022","7067402023","7067762005","7067762007","7067762019","7067762020","7067762021","7067762022","7067762023","7068712019","7068712020","7068712021","7068712022","7194702021","7194702022","7203642010","7203642012","7203642017","7203642020","7203642021","7203642022","7203642023","7293742007","7293742019","7293742020","7293742021","7293742022","7325032007","7325032020","7325032022","7325032023","7358312007","7358312019","7358312020","7358312021","7358312022","7358312023","7382272019","7382272020","7382272021","7382272022","7382272023","7428232013","7428232020","7428232021","7454402007","7454402011","7454402019","7454402020","7454402021","7454402022","7472612020","7472612021","7516642011","7516642019","7516642020","7516642021","7516642022","7518612005","7518612019","7518612020","7518612021","7518612022","7518612023","7547572014","7547572019","7547572020","7547572021","7547572022","7547572023","7612282011","7612282020","7612282021","7612282022","7612322007","7612322019","7612322020","7612322021","7612322022","7612322023","7639332010","7657652007","7657652013","7657652017","7657652019","7657652020","7657652021","7657652022","7659592007","7659592013","7659592020","7659592021","7659592022","7756902011","7756902019","7756902021","7756902022","8077612019","8077612022","8084112019","8084112020","8084112021","8084112022","8402822020","8415572007","8415572019","8415572020","8415572021","8415572022","8452842006","8452842008","8452842012","8452842019","8452842020","8452842021","8452842022","8452842023","8567112008","8567112020","8567112021","8567112022","8567112023","8618042006","8618042015","8618042020","8618042021","8618042022","8622802021","8622802023","8812942020","8812942021","8812942022","8823882021","8823882022","8825222006","8825222019","8825222021","8825222022","8838732021","8859502008","8859502011","8859502019","8859502020","8859502021","8859502022","8859502023","8868482020","8868482021","8868482022","8868482023","8883402011","8883402012","8883402019","8883402020","8883402021","8883402022","8883402023","8886662020","8886662021","8886662022","8886662023","8893002006","8893002011","8893002019","8893002020","8893002021","8893002022","8893002023","9313122012","9313122019","9313122020","9313122021","9313122022","9313122023","9333382007","9333382020","9333382021","9333382022","9375162007","9375162019","9375162020","9375162021","9375162022","9436152007","9436152019","9436152020","9436152021","9436152022","9436152023","9733207998","9735429315","9842242007","9842242014","9842242017","9842242019","9842242020","9842242021","9842242022","9842242023"]; 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=6941&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();