if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalyticsAPI("UA-100206026-18"); AS.pixel.doGoogleAnalyticsWork("4218", "UA-100206026-18"); AS.pixel.loadGoogleAnalytics4API("G-9RV7G6QVTM"); }, 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(4218, "634447634115932", "VIN"); } }, 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 = ["8327675400"]; 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 = {"8327675400":"3463477205"}; 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 = ["2003262005","2005252017","2016922020","2027712007","2027712009","2027712010","2035922020","2035922021","2045362014","2079602014","2082062019","2089082016","2089082017","2089832017","2089932012","2092242007","2097202017","2097202018","2102212017","2107772016","2119532008","2133832008","2142972009","2147483638","2147483647","2147772017","2148372016","2153482020","2154722016","2162832012","2182742014","2184512014","2186062021","2186222016","2195132015","2195442017","2202062015","2214202019","2215922014","2222052012","2222052013","2225232020","2226442017","2227032014","2227032015","2235092016","2236432007","2247562006","2248672012","2252132016","2262162017","2268612016","2277622020","2307692017","2308872019","2347822006","2354182011","2367509116","2368522009","2374442017","2374442018","2387262018","2389242012","2398172011","2409682017","2417132012","2417132013","2425012018","2429692005","2429692006","2435142016","2443862020","2447852020","2448132010","2449332017","2457862014","2459762012","2466512010","2466512011","2473212017","2487642015","2499922012","2506282013","2509912015","2509912016","2515342015","2525822015","2525822016","2533272015","2537302016","2544762015","2546552016","2548792012","2558352008","2558352009","2562202008","2565982016","2567302017","2568442017","2608112011","2614902015","2634332022","2636312021","2636882018","2638502016","2646222017","2652832017","2666362015","2668412016","2683972015","2684652021","2685872020","2685872021","2685872022","2685992017","2685992018","2687112015","2695982004","2697442001","2716782018","2722452020","2727972005","2745942015","2745942016","2773082016","2797522003","2797522004","2815158686","2815472005","2815472006","2818692009","2832162007","2832982013","2838822012","2844292012","2848202012","2859162012","2864182015","2883212012","2886382018","2888562014","2889952021","2892372019","2892372020","2896572020","2898212002","3022682015","3022872017","3036772016","3043852012","3048602004","3083182016","3083272011","3083272012","3088422016","3098792012","3102372014","3108712015","3135572019","3137762016","3145612012","3172822018","3216692016","3252492018","3252492019","3256182020","3275212011","3275212012","3302532018","3304482018","3304812012","3307072022","3339322014","3346982018","3355872016","3359302016","3359302017","3379092015","3379092016","3386312012","3404992015","3448732014","3448732015","3465282011","3495852020","3523102014","3568422006","3568422007","3593532013","3644122020","3647182022","3667742020","3692712019","3692712020","3692712021","3698492017","3737182018","3738812013","3786972012","3786972013","3804602016","3839202018","3847982015","3852382014","3883542015","3883542016","4002132014","4006222014","4032312021","4033622020","4045082010","4045382008","4157202018","4168292011","4213002020","4306602015","4466962005","4483552014","4563362016","4568402014","4572692010","4572692011","4657932018","4807212006","4816402016","4838142016","5003003500","5014892015","5016402015","5028382018","5072812015","5086062015","5088172015","5098062019","5104742006","5124382014","5124382015","5146552020","5146552021","5147422015","5149052021","5156172017","5168682011","5173502009","5173502011","5174972017","5178762006","5187372019","5194172019","5207542017","5212882017","5216782008","5216782009","5233262021","5236412019","5242632015","5243252011","5245272015","5245832019","5249282017","5249382019","5249922011","5252052015","5255432006","5259682013","5266692015","5272002016","5279152017","5296182019","5299112019","5333932018","5339112009","5346712011","5346712012","5348822015","5354635936","5367652013","5369352019","5385292015","5392942015","5413102013","5414162015","5424662019","5429962019","5432472013","5435992013","5436862007","5436862008","5444352013","5452622019","5454622005","5454622006","5454622007","5465812017","5486042015","5512032013","5515392006","5544242009","5545312015","5589662014","5589662015","5602692013","5617242015","5624302016","5628852013","5663042015","5663192017","5669022013","5669022014","5669472020","5672672013","5688632015","5692442006","5706082017","5709832013","5715382015","5727712010","5764712015","5773442017","5774422015","5799362015","5803312013","5807702013","5824302011","5835422019","5852392015","5887332014","5887332015","6009012015","6013302017","6016262018","6033432017","6033802015","6043722018","6044212013","6044992013","6049012015","6082602016","6085812015","6104012017","6112862015","6118522019","6143452010","6165692011","6165832013","6172652012","6186302012","6194122004","6197932017","6203312015","6203392014","6204892015","6212552011","6246662015","6252712017","6253502015","6304452015","6313382012","6313872015","6319712011","6322422020","6337452015","6348592014","6348592015","6348972015","6366772011","6378582019","6383842011","6397312019","6399502014","6399502015","6415532017","6416252014","6416252015","6426172016","6426172017","6454512015","6466912015","6492762001","6527082015","6529612019","6534102019","6534852019","6548562005","6574402011","6574402012","6593562008","6598292019","6616712017","6619632015","6644312017","6657722015","6658822021","6663982017","6667172015","6692142015","6705592015","6712052019","6715352019","6763972017","6779912016","6779912017","6794792017","6796022017","6814492015","6829612017","6832262015","6879742019","7012632019","7018262017","7035432006","7036842019","7036842020","7044052010","7099812006","7108202015","7114372015","7282312013","7357062016","7376132015","7533542005","7535212017","7542702012","7546172017","7558602015","7558682004","7558682005","7593102002","7602172007","7619952015","7762802013","7777016257","7796192013","7803402008","7827362020","7827362021","7844242003","7844242004","7845262001","7859342017","8004312011","8024692002","8024692003","8043962016","8103334907","8105002015","8233342018","8265692019","8322035791","8324762017","8327675400","8496552018","8702102019","8712512019","8875362013","8877692016","8877692017","9032452013","9206692014","9229542015","9462592020"]; 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=4218&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();