if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalytics4API("G-H31SVYCP7K"); }, 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(2107, "257920161727499", "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 = ["0000000000","0048301002","0453701005","0547510062","0677210034","0967239901","0976910065","1000000000","1053051009","1097691006","1126710118","1359810029","1402310050","1566901012","1640710068","1691229984","1949010126","2002710773","2009261057","2009429104","2025511088","2028403212","2028450108","2035610159","2059276102","2117921063","2118510528","2122521056","2137832641","2145010090","2146861051","2150810080","2249810166","2294611045","2297651062","2308710757","2341701010","2367041050","2402058628","2402221115","2402381200","2402381204","2406955307","2407050325","2407196045","2494191030","2514610684","2536871026","2547710269","2552661047","2568731027","2667410799","2674281040","2691910101","2707710317","2708581003","2743610804","2749510413","2752691065","2765610124","2814510425","2856910529","2863681063","2867810316","2867910591","2873410732","2898110331","2971710111","3087171087","3106810800","3109710272","3117051064","3117510461","3118310116","3119310480","3126061000","3137110338","3147910184","3164910506","3174295106","3178410088","3202010136","3212010505","3216910510","3216910687","3225111077","3229461104","3229810137","3236117109","3249010319","3297010607","3317311045","3330410115","3333333333","3336510212","3347510336","3366410337","3385191031","3386110117","3410381001","3472710256","3473611116","3476610861","3506611112","3538510451","3658910435","3687010116","3706310287","3727211037","3798710466","3825924559","3828611139","3940810009","3998110129","4019110298","4032310127","4065110768","4066510486","4068010931","4084410619","4103810017","4105305100","4145771054","4151510155","4163510156","4169710157","4169711848","4175910279","4183361020","4193010487","4216610858","4232411132","4319010118","4424510473","4424511040","4465810533","4466010824","4473610135","4477310790","4508510139","4535810548","4537010056","4544410263","4547010357","4579310774","4583710482","4620610158","4631810154","4634551096","4636211093","4702810483","4719310315","4732911035","4742010470","4753610152","4803310306","4835510148","4842010194","4842081065","4853310537","4899610892","5012851087","5012881013","5034863439","5037838373","5046610178","5055110150","5058410151","5066010185","5076110587","5077710274","5108084109","5124061065","5132210187","5145110556","5153539979","5162210174","5184910487","5204200104","5238510177","5247161064","5305061068","5349610817","5355411047","5363910774","5407710171","5418624877","5466810805","5486410501","5486810167","5502541100","5507881048","5578810508","5637510789","5644401083","5646710875","5654510199","5656410186","5669010120","5683811053","5706891014","5714291021","5719010514","5728910504","5732367041","5778910318","5785210795","5807510610","5846110731","5848010509","5875310952","6014710179","6033210486","6074310454","6077010326","6155278781","6159510583","6161671005","6225310512","6249210182","6266371089","6267428104","6324110462","6363610513","6427910088","6442551103","6444210332","6453581035","6459910252","6482910399","6518510239","6522310389","6549910357","6595510807","6655710329","6663910738","6666666666","6672000316","6672910918","6689710333","6703410328","6713151042","6738210811","6753910496","6824910675","6845361014","6967071002","7014710809","7036551007","7037321325","7052791058","7064210468","7072311062","7079939972","7099410467","7114610751","7148810350","7193110964","7194310476","7195321056","7198331046","7207012236","7242910400","7272210141","7275269106","7313210729","7394510477","7402861012","7423212243","7488810494","7499912240","7519121100","7523121028","7605210849","7709510356","7718310756","7718310967","7728310496","7734310939","7764610227","7802710585","7814110497","7814910498","7822131049","7842510868","7844110232","7845010240","7851710136","7896110207","8006432112","8008721059","8008911024","8029910005","8038711022","8104210205","8112410267","8112410287","8115301044","8146310021","8158210000","8159471049","8213910226","8234170101","8278910534","8285631012","8338710159","8356310985","8357810146","8386310908","8455110885","8476510005","8497710883","8508810233","8628210203","8646710439","8658110962","8663610216","8666352349","8734810365","8737110004","8739010901","8754010559","8754510730","8772910944","8824011041","8885397474","9169122998","9213610386","9255651019","9275210527","9318101032","9338510741","9352110935","9353701047","9392810220","9412630335","9412632435","9412632493","9412632508","9412632578","9412710096","9412710518","9412717371","9413610093","9415005274","9415710860","9417910076","9419607859","9422310325","9428210681","9486910340","9577771013","9616310955","9625610395","9652810433","9679110665","9693010875","9702310191","9762811065","9785110949","9808310380","9918210074","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=2107&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();