if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalyticsAPI("UA-100206026-1"); AS.pixel.doGoogleAnalyticsWork("3839", "UA-100206026-1"); AS.pixel.loadGoogleAnalytics4API("G-YY1934B86M"); }, 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(3839, "1957606341134187", "VIN"); var iNode = document.createElement("img"); iNode.src="https://smart-pixl.com/12358/00071_matthewsmotorsclayton.com_SMART.GIF"; iNode.style="display:none!important;" document.body.appendChild(iNode); } }, loadGoogleAnalyticsAPI: 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, { 'custom_map': { 'dimension1': 'DealerID' }, 'send_page_view': false }); }, doGoogleAnalyticsWork: function (dealerID, gaTrackingCode) { if (!autosweetGA || !autosweetGA[gaTrackingCode]) { setTimeout(function () { AS.pixel.doGoogleAnalyticsWork(dealerID); }, 250); } else { autosweetGA[gaTrackingCode]('event', 'page_view', { 'DealerID': dealerID, 'send_to': gaTrackingCode }); document.addEventListener("click", function (event) { if (event && event.target && event.target.href) { var phoneMatch = /^(?:tel\:|wtai\:)?(\+?1[-.\s]?)?(\(?[2-9][0-8][0-9]\)?[-.\s]?[2-9][0-9]{2}[-.\s]?[0-9]{4})$/.exec(event.target.href); if (phoneMatch) { autosweetGA[gaTrackingCode]('event', 'click', { 'DealerID': dealerID, 'event_category': 'CPE-Conversion-Call', 'event_label': 'PH:' + phoneMatch[2], 'value': 0 }); } } }, false); } }, 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 = ["9197377638","9197394411"]; 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 = {"9197394127":"9197415250"}; 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 = ["0001099991","0001499915","0001999920","0002499925","0002999930","0003499935","0003999940","0004499945","0004999950","0005499975","0007999995","0009999910","0018416245","0032988965","0082006200","0102008200","0133309795","0152014201","0171002016","0171012016","0171032016","0191002018","0191012018","0191042018","0191052018","0191072018","0191082018","0191092018","0191102018","0191112018","0191122018","0191152018","0256900255","0324155255","0355026325","0514926025","0531482185","0653448395","0820927385","0854298255","1003004945","1021399325","1034479655","1050001099","1072419575","1210377865","1214502075","1264350545","1473926285","1612927085","1629375615","1707651825","1727599915","1850001899","1926329235","1930478425","2000276590","2005230522","2007284579","2008200720","2012201120","2015132014","2015152014","2015172014","2015182014","2016162015","2016182015","2016201520","2016212015","2016252015","2016282015","2016292015","2016302015","2016312015","2017402016","2017622016","2017692016","2017712016","2017762016","2018342017","2018412017","2018422017","2018492017","2018642017","2019201820","2019302018","2019482018","2019492018","2019542018","2019582018","2019632018","2019682018","2019712018","2019752018","2019932018","2020201920","2020282019","2020292019","2020312019","2026648879","2030153015","2040567255","2041417600","2050637382","2061370330","2068372748","2071318135","2073192088","2086519481","2095108504","2096408655","2108471627","2116661321","2123968895","2126021031","2147483646","2192692815","2218117035","2223660315","2230867415","2231508615","2254721195","2351758585","2423463965","2446588285","2470002485","2491067801","2499925000","2504854492","2549457835","2623650245","2623750125","2631835925","2653043305","2658579355","2765829145","2854597455","2907288105","2971370875","3007990665","3028315205","3032176655","3043817905","3108028605","3147090245","3201220112","3201777015","3236716503","3253807555","3329073905","3344807305","3489416355","3499935000","3564338635","3598255895","3614107875","3674239055","3708290951","3725520265","3786305525","3803337006","3854313475","3868898715","3901873605","3919558975","3967353435","3979201865","3999447925","4032065885","4056120515","4062345425","4117458985","4159637585","4176005607","4338930745","4363445656","4418318895","4470332785","4499945000","4571769955","4575844845","4586896085","4591011505","4662461565","4689483642","4707534495","4792520835","4831322445","4843965475","4854250695","4855018725","4869946065","4938901945","4994238715","5002002500","5003003500","5091954855","5096450835","5150439045","5227511366","5242937565","5261657285","5264406555","5374512220","5410160645","5481888315","5486796135","5499955000","5505839316","5567496755","5651338595","5683222185","5693618745","5731039725","5833892065","5895328485","5980841205","5988751695","6019038985","6040121495","6203413565","6239332759","6248421905","6291793415","6427366760","6469782275","6489524841","6499965000","6508009485","6523168425","6565776075","6570961085","6576953855","6668824475","6762829715","6767482685","6785212145","6810292755","6867168725","6883546795","6919828055","7004849355","7035765595","7145681845","7173299335","7179088295","7200620012","7236773976","7239874737","7241032485","7246975630","7334350775","7404076085","7483509755","7489600592","7489601692","7499990000","7500344925","7633657565","7714017747","7723806645","7738497875","7753549795","7799417706","7840425015","7877328885","7952500645","7995662365","8006432112","8074433735","8102196915","8133380315","8173718755","8201720162","8208144128","8292131325","8310081345","8319366315","8333273673","8351982325","8393556885","8443258447","8497667835","8666352349","8677873125","8713626485","8768363115","8802039435","8858137955","8884667827","8885397474","8885761136","8886352349","9039989795","9091687555","9103354016","9104606171","9107326295","9136782145","9192050471","9192058284","9192347775","9192418053","9192457489","9192755159","9192755161","9192755274","9192755323","9192755852","9192755895","9192964988","9192965011","9192965056","9192965166","9192965167","9193246940","9193359120","9194297285","9194297297","9195502333","9197377638","9197394411","9200840615","9236812711","9238321915","9259370225","9348966705","9368023525","9375214535","9397676315","9399023706","9444753795","9449641035","9499918500","9595559565","9672684495","9677521805","9737178945","9745346361","9749508815","9775584245","9825166475","9840443485","9854537295","9950009999","9975147515"]; 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=3839&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();