if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { AS.pixel.loadGoogleAnalytics4API("G-XK7P3FVSW0"); }, 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(7326, "712390174020721", "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 = ["2005632010","2005632013","2005632016","2005632017","2005632018","2005632019","2007162009","2007162013","2007162014","2007162015","2007162016","2007162018","2007162020","2055002014","2055002015","2063482009","2063482012","2063482013","2063482014","2063482015","2063482016","2063482017","2063482018","2063482019","2063482020","2092872010","2092872011","2092872013","2092872014","2092872015","2092872016","2092872017","2092872018","2092872019","2116702006","2116702010","2116702011","2116702012","2116702013","2116702014","2116702015","2116702016","2116702017","2116702018","2116702019","2116702020","2122942014","2122942016","2205752006","2205752009","2205752010","2205752011","2205752012","2205752013","2205752014","2205752015","2205752016","2205752017","2205752018","2232782009","2232782010","2232782011","2232782012","2232782013","2232782014","2232782015","2232782016","2232782017","2232782018","2232782019","2296122006","2296122010","2296122011","2296122012","2296122013","2296122014","2296122015","2296122016","2296122017","2296122018","2296122019","2324922009","2324922013","2324922014","2324922015","2324922016","2324922017","2324922018","2324922019","2353312013","2353312017","2366892012","2366892014","2366892015","2366892016","2366892017","2366892018","2402552011","2402552015","2402552016","2402552017","2402552018","2413702006","2413702011","2413702014","2413702015","2413702016","2413702017","2413702019","2449742009","2449742011","2449742013","2449742014","2449742015","2449742016","2449742017","2449742018","2449742019","2494132013","2494132015","2494132016","2494132017","2717762009","2717762010","2717762011","2717762013","2717762014","2717762015","2717762016","2717762017","2717762018","2719792009","2719792012","2719792013","2719792014","2719792015","2719792016","2719792017","2719792018","2723602007","2723602010","2723602013","2723602014","2723602015","2723602016","2723602017","2723602019","2757812010","2757812014","2757812015","2757812016","2757812017","2757812018","2757812019","2873202011","2873202012","2873202013","2873202015","2873202016","2873202018","2873202020","2889282009","2889282010","2889282011","2889282012","2889282014","2889282015","2889282016","2889282017","2889282018","2889282019","3044302009","3044302013","3044302014","3044302015","3044302016","3044302017","3044302018","3044302019","3058622009","3058622011","3058622012","3058622014","3058622015","3058622016","3058622017","3058622018","3058622019","3058622020","3073852006","3073852010","3073852011","3073852012","3073852013","3073852014","3073852015","3073852016","3073852017","3073852018","3073852019","3073852020","3099802009","3099802011","3099802013","3099802014","3099802015","3099802016","3099802017","3099802018","3099802019","3214642009","3214642013","3214642014","3214642016","3214642017","3214642018","3248652014","3248652016","3248652017","3248652018","3248652019","3352802009","3352802012","3352802013","3352802014","3352802015","3352802016","3352802017","3352802018","3393682009","3393682011","3393682012","3393682013","3393682014","3393682015","3393682016","3393682017","3393682018","3393682019","3413482006","3413482010","3413482011","3413482014","3413482015","3413482016","3413482017","3413482018","3474162009","3474162011","3474162014","3474162015","3474162016","3474162017","3474162018","3474162020","3709332010","3709332011","3709332012","3709332014","3709332015","3709332016","3709332017","3709332018","3709332019","3799112009","3799112012","3799112013","3799112014","3799112015","3799112016","3799112017","3799112019","3806862013","3806862014","3806862015","3806862016","3806862017","3806862018","3806862019","3812162012","3812162013","3812162014","3812162015","3812162016","3812162017","3812162019","3836252013","3836252014","3836252015","3836252017","3836252018","3836252019","4024682013","4024682015","4024682018","4045312009","4045312011","4045312012","4045312013","4045312014","4045312015","4045312016","4045312017","4045312018","4045312020","4136882009","4136882013","4136882014","4136882015","4136882017","4235182011","4235182012","4235182013","4235182014","4235182015","4235182016","4235182017","4235182018","4235182019","4235182020","4329522009","4329522013","4329522014","4329522015","4329522016","4329522017","4329522019","4627542009","4627542011","4627542012","4627542013","4627542014","4627542015","4627542016","4627542017","4627542018","4627542020","4679812013","4679812014","4679812016","4679812017","4679812018","4726352009","4726352011","4726352012","4726352013","4726352014","4726352015","4726352016","4726352017","4726352018","4734312009","4734312010","4734312011","4734312012","4734312013","4734312014","4734312015","4734312016","4734312017","4734312018","4734312019","4734312020","5037922009","5037922012","5037922013","5037922014","5037922015","5037922016","5037922017","5037922018","5037922019","5047482014","5047482015","5047482016","5047482017","5047482019","5077652009","5077652013","5077652014","5077652015","5077652016","5077652017","5077652018","5077652019","5122342006","5122342014","5122342015","5122342016","5197852009","5197852010","5197852013","5197852014","5197852015","5197852016","5197852017","5247972016","5489002006","5489002010","5489002011","5489002012","5489002013","5489002014","5489002015","5489002016","5489002017","5489002018","5489002019","5489002020","5603662013","5603662014","5603662015","5603662016","5603662017","5603662018","5603662020","5667752009","5667752010","5667752012","5667752013","5667752014","5667752015","5667752016","5667752018","5667752019","5667752020","5737372007","5737372009","5737372010","5737372012","5737372013","5737372014","5737372015","5737372016","5737372017","5737372019","5783212011","5783212013","5783212014","5783212015","5783212016","5783212018","5783212019","5796052009","5796052013","5796052014","5796052015","5796052016","5796052017","5796052018","5796052019","6154002013","6154002014","6154002015","6154002016","6154002017","6154002018","6355532010","6355532011","6355532012","6355532013","6355532014","6355532015","6355532016","6355532017","6355532018","6355532019","6368502009","6368502011","6368502013","6368502014","6368502015","6368502017","6368502018","6368502019","6488552013","6488552014","6488552015","6488552017","6488572006","6488572010","6488572011","6488572012","6488572013","6488572014","6488572015","6488572016","6488572017","6488572018","6488572019","6488572020","6507722009","6507722011","6507722013","6507722014","6507722015","6507722016","6507722017","6507722018","6507722019","6575362015","6575362019","6723542010","6723542011","6723542012","6723542013","6723542014","6723542015","6723542016","6723542017","6723542018","6723542019","6723542020","7005202006","7005202010","7005202011","7005202012","7005202013","7005202014","7005202015","7005202016","7005202017","7005202018","7005202019","7005202020","7052472009","7052472011","7052472012","7052472013","7052472014","7052472015","7052472016","7052472017","7052472019","7067422010","7067422011","7067422012","7067422013","7067422014","7067422015","7067422016","7067422017","7067422018","7067422019","7128132014","7128132016","7139532009","7139532010","7139532011","7139532012","7139532014","7139532015","7139532016","7139532017","7139532018","7139532019","7139532020","7198852009","7198852010","7198852011","7198852012","7198852013","7198852014","7198852015","7198852016","7198852017","7198852018","7198852019","7265032010","7265032011","7265032012","7265032013","7265032014","7265032015","7265032016","7265032017","7265032018","7436202013","7436202014","7436202015","7436202016","7436202017","7436202018","7438972009","7438972016","7668012011","7668012013","7668012014","7668012015","7668012016","7668012017","7668012018","8158322009","8158322011","8158322013","8158322015","8158322016","8158322017","8414662009","8414662010","8414662011","8414662013","8414662014","8414662015","8414662016","8414662017","8414662018","8414662019","8574272013","8574272014","8574272015","8574272017","8582002011","8582002013","8582002014","8582002016","8582002017","8582002018","8632322012","8632322016","8632322017","8754862011","8754862014","8754862015","8754862016","8754862017","8754862018","8754862020","8772732019","8893352011","8893352015","8893352017","8893352018","9739334329"]; 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=7326&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();