if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalytics4API("G-QY2G8SF78C"); }, 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(4862, "4786776824681384", "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 = {"9726453673":"4697783009"}; } 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 = ["1261732020","1261742020","1476572020","1476652020","1476712020","1543752020","1583192020","1583202020","1583212020","1596902020","1672672020","1696592020","1696602020","1696622020","1712932020","1712942020","1728692020","1728702020","1728712020","1757542020","1757552020","1757562020","1757572020","1757582020","1786592020","1786602020","1786612020","1786622020","1806832020","1806852020","1806862020","1876542020","1876602020","1883312020","1986802020","2016201520","2019201820","2143588850","2147483638","2147483647","2178412020","2182072020","2187762020","2204352020","2204972020","2267452020","2298982020","2312742020","2337262020","2344292020","2357732020","2477362020","2486942020","2487302020","2502112020","2503667815","2517472020","2532762020","2535692020","2544312020","2558802020","2569182020","2576042020","2583082020","2586642020","2599792020","2628092020","2673642020","2808943358","2808943395","2818724759","2818724764","2818724786","2818724792","3130932020","3140782020","3147672020","3148830851","3181472020","3242902020","3332222020","3396232020","3414182020","3414202020","3546072020","3546082020","3546122020","3546142020","3604392020","3610552020","3610562020","3610572020","3610582020","3651592020","3693092020","3696962020","3701202020","3701212020","3755292020","3822402020","3822412020","3822422020","3822432020","3822442020","3822452020","3822462020","3822472020","3823412020","3862942020","3862952020","3880932020","3948412020","3948422020","3948432020","3948442020","3948452020","3948462020","3948472020","3948482020","3948492020","4008182021","4008192021","4012022021","4012412021","4013252021","4013532021","4064132021","4064202021","4065912021","4073973801","4089122021","4089132021","4089142021","4089282021","4089292021","4089302021","4089312021","4113652021","4248272021","4248742021","4384792021","4384852021","4385192021","4385232021","4386812021","4386822021","4399452021","4413972021","4414092021","4416012021","4425852021","4447222021","4447232021","4447242021","4447252021","4447262021","4484332021","4486882021","4486892021","4486902021","4486912021","4504382021","4504392021","4504402021","4504412021","4504422021","4504432021","4504442021","4504452021","4504462021","4504472021","4504482021","4559652021","4559662021","4631042020","4631052020","4631062020","4684262020","4684272020","4693919907","4693919932","4693919933","4693995989","4817632020","4817632021","4817642021","4835192021","4835202021","4835392021","4858402021","4863052021","4863062021","4864922021","4866802021","4866812021","4866822021","4866832021","4866842021","4866852021","4866862021","4866872021","4866882021","4866962021","4866972021","4866982021","4879282021","4895109677","4895109756","4895109820","4895109939","4895110034","5174712022","5175852022","5184510055","5184510098","5184510135","5184510175","5479565063","5505932021","5533262021","5533262022","5552172021","6144044847","7368376173","7930984309","8336961309","8336961310","8336961311","8336961312","8336961313","8336991396","8336991397","8336991398","8336991399","8336991401","8336991402","8336991403","8336991404","8336991405","8336991406","8336991407","8336991408","8336991409","8336991410","8336991411","8336991412","8336991413","8336991414","8336991415","8336991416","8336991417","8336991418","8336991419","8336991420","8336991421","8336991422","8336991423","8336991424","8336991425","8336991426","8337141999","8337142001","8337142003","8337142004","8337142005","8337142006","8337142007","8337142008","8337142009","8337142010","8337760336","8337760337","8337760338","8337760339","8337760340","8449764515","8449764516","8449764517","8449764518","8449764519","8449834565","8449834566","8449834567","8449834568","8449834569","8449834570","8449834571","8449834572","8449834573","8449834574","8449881618","8449881619","8449881620","8449881621","8449881622","8449881623","8449881624","8449881625","8449881626","8449881627","8449901940","8449901941","8449901942","8449901943","8449901944","8449901945","8449901956","8449901957","8449901958","8449901959","8449901960","8449901961","8449901962","8449901963","8449901964","8449901965","8449901966","8449901967","8449901968","8449901969","8449901970","8449901971","8449901972","8449901973","8449901974","8449901975","8449901976","8449901977","8449901978","8449901979","8449901980","8449901981","8449901982","8449901983","8449901984","8449901985","8449901986","8449901987","8449911274","8449911275","8449911276","8449911277","8449911278","8449911279","8449911280","8449911281","8449911282","8449911283","8449924345","8449924346","8449924347","8449924348","8449924349","8449924350","8449924351","8449924352","8449924354","8449924355","8449932757","8449932758","8449932759","8449932765","8449932767","8449932768","8449932769","8449932770","8449932771","8449932772","8449941637","8449941638","8449974283","8449974284","8449974285","8449974286","8449974287","8665010051","8665010054","8665010056","8665010061","8665010075","8665010076","8665010082","8665010088","8665010092","8665010096","8665010112","8665010114","8665010115","8665010120","8665010121","8665010128","8665010131","8665010132","8665010133","8665010149","8665010155","8665010158","8665010160","8665010172","8665010174","8665010180","8665010183","8665010187","8665010194","8665010195","8665010199","8665010213","8665010221","8665010227","8665010235","8665010238","8665010247","8665010249","8665020359","8665020797","8665020868","8665020869","8665020871","8665020873","8665020909","8665020933","8665020937","8665020950","8665021030","8665021053","8666352349","8773760658","8773760659","8773760661","8773760662","8773760668","8773851173","8773851175","8773851180","8773851192","8773851193","8773851197","8773851204","8773851210","8773851214","8773851221","8773950467","8773950605","8773950973","8773950991","8773950992","8773950994","8773950997","8773950998","8773950999","8773951004","8774360432","8774360433","8774360434","8774360435","8774360437","8774360438","8774360439","8774360441","8774360442","8774360443","8774641107","8774641120","8774641130","8774641131","8774641132","8774641135","8774641153","8774641155","8774641160","8774641161","8774920176","8774920396","8774920401","8774920402","8774920403","8883841740","8883841741","8883841742","8883841746","8883841748","8883841749","8883841750","8883841751","8883841752","8883841753","8883841755","8883841756","8883841757","8883841758","8883841772","8883841776","8883841777","8883841781","8883841783","8883841786","8883841787","8883841789","8883841792","8883841794","8883841795","8883841806","8883841816","8883841817","8883841819","8883841820","8883841822","8883841826","8883841845","8883841849","8883841851","8883841852","8883841853","8883841854","8883841855","8883841856","8883841857","8883841858","8883841859","8883841864","8883841872","8883841873","8883841877","8883841879","8884011390","8884011395","8888544609","9248907243","9250366781","9309843095","9725462638","9725462641","9725462642","9999999999"]; 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=4862&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();