if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalytics4API("G-ZC7DDX0MZY"); }, 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(7277, "3396060010659520", "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 = ["2019862012","2019862013","2019862014","2019862016","2019862017","2019862018","2019862019","2022042010","2047282009","2047282014","2047282015","2047282016","2047282020","2047282021","2108612007","2108612008","2108612013","2108612015","2108612016","2108612017","2108612018","2108612019","2108612020","2108612021","2134912007","2134912008","2134912011","2134912013","2134912015","2134912016","2134912017","2134912018","2134912019","2134912020","2134912021","2134912022","2134912134","2139502012","2139502015","2139502017","2139502018","2139502019","2139502020","2139502021","2162652019","2178052012","2178052013","2178052014","2178052015","2178052018","2178052019","2178052020","2178052021","2178572009","2178572011","2178572012","2178572013","2178572015","2178572016","2178572017","2178572018","2178572019","2178572020","2178572021","2178572022","2185312011","2185312012","2185312013","2185312014","2185312016","2185312017","2185312018","2185312019","2185312020","2185312021","2262592004","2262592011","2262592013","2262592014","2262592015","2262592016","2262592017","2262592018","2262592019","2262592020","2262592021","2262592022","2262592262","2284902015","2284902017","2284902018","2284902019","2284902022","2374302011","2374302012","2374302013","2374302015","2374302016","2374302017","2374302018","2374302019","2374302020","2374302021","2374302022","2399552011","2399552013","2399552015","2399552016","2399552017","2399552018","2399552020","2399552021","2399552022","2422972013","2422972014","2422972015","2422972016","2422972017","2422972018","2422972019","2422972020","2422972021","2422972022","2456782011","2456782017","2456782018","2456782020","2458602009","2458602011","2458602012","2458602013","2458602017","2458602018","2613052007","2613052015","2613052016","2613052017","2613052018","2613052021","3027902004","3027902013","3027902014","3027902015","3027902016","3027902017","3027902018","3027902019","3027902021","3027903027","3053172012","3053172017","3053172018","3053172019","3053172020","3053172021","3164122004","3164122009","3164122012","3164122013","3164122014","3164122015","3164122016","3164122017","3164122018","3164122019","3164122020","3164122021","3164122022","3164123164","3193992007","3193992013","3193992015","3193992016","3193992017","3193992018","3193992021","3482112012","3482112013","3482112015","3482112016","3482112017","3482112018","3482112019","3482112020","3482112021","3718302007","3718302008","3718302013","3718302015","3718302016","3718302017","3718302018","3718302019","3718302020","3718302021","3718303718","3822142011","3822142015","3822142016","3822142017","3822142018","3822142019","3822142020","3822142021","3822142022","3885672012","3885672013","3885672015","3885672017","3885672018","3885672019","3885672020","3885672021","3885672022","4049401500","4049848005","4065672011","4065672012","4065672013","4065672017","4065672018","4065672019","4065672020","4065672021","4065674065","4108555857","4109181171","4166666666","4186092011","4186092012","4186092013","4186092016","4186092017","4186092018","4186092019","4186092020","4249232011","4249232012","4249232013","4249232014","4249232015","4249232016","4249232017","4249232018","4249232019","4249232020","4249232021","4836512012","4836512013","4836512014","4836512015","4836512017","4836512018","4836512019","4836512020","4836512021","5042452004","5042452011","5042452012","5042452013","5042452014","5042452015","5042452016","5042452017","5042452018","5042452019","5042452020","5042452021","5106603491","5123042011","5123042013","5123042014","5123042015","5123042017","5123042018","5123042019","5123042021","5235522004","5235522011","5235522013","5235522014","5235522015","5235522016","5235522017","5235522018","5235522019","5235522020","5235522021","5235522022","5269282011","5269282013","5269282014","5269282015","5269282016","5269282017","5269282018","5269282019","5269282020","5269282021","5269282022","5403292013","5403292018","5403292020","6667332012","6667332019","6667332020","6667332021","7417062007","7417062008","7417062015","7417062016","7417062017","7417062018","7417062019","7417062020","7417062021","7592732004","7592732013","7592732014","7592732015","7592732016","7592732017","7592732018","7592732019","7592732021","7592732022","7592737592","8429192007","8429192011","8429192013","8429192014","8429192015","8429192016","8429192017","8429192018","8429192019","8429192020","8429192021","8429192022","8439092011","8439092015","8439092016","8439092017","8439092018","8439092019","8439092020","8439092021","8439092022","8812118720","9234751097","9305272013","9305272015","9305272018","9305272019","9305272020","9305272021","9376142007","9376142011","9376142013","9376142015","9376142016","9376142017","9376142018","9376142019","9376142020","9376142021","9376142022"]; 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=7277&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();