if (!window.AS) AS = {}; if (!window.autosweetGA) autosweetGA = {}; AS.pixel = { bodyText: null, doAnalyticsWork: function () { }, 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(5236, "427820587810206", "VIN"); } }, 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 = ["0002220491","0004661623","0005702016","0009350009","0010200010","0012990012","0018041420","0022572623","0024841597","0026330026","0029620029","0031225316","0037981027","0045472004","0046341577","0060711422","0065743842","0075340113","0076232573","0086120141","0087862171","0090562009","0093761422","0100510100","0102560102","0107605040","0108350476","0112060112","0120082836","0120452795","0123880123","0125132012","0127280127","0127472012","0129512005","0130253221","0144800215","0147460054","0148709109","0156959217","0160409260","0163331414","0165860165","0166450166","0171270171","0181579172","0191651425","0193991426","0200260200","0206910206","0209870209","0212512707","0212920212","0218061090","0226360226","0228750228","0229951430","0233240233","0234050234","0244382024","0251960848","0264130264","0269870269","0270590270","0281580281","0281850281","0286345028","0288160288","0290930290","0303980303","0307830307","0310361031","0319860319","0322857226","0323930323","0324530324","0324860324","0325460325","0325950325","0338370338","0343820343","0348990348","0349075034","0351610351","0354010354","0357695168","0358332496","0361390361","0361412015","0373090373","0374353037","0376730376","0377500377","0378500378","0380800380","0381040381","0384500384","0385200385","0391852039","0394380394","0394420394","0405640405","0411402006","0414650414","0425480425","0429550429","0429980429","0432080432","0432350432","0435790435","0440420440","0441030441","0441090441","0441180441","0450375830","0455400455","0457730457","0459820459","0464230464","0464610464","0468200468","0472161980","0472830472","0476360476","0476820476","0477650477","0483790483","0489080489","0491610491","0495740495","0497340497","0505400505","0512560512","0515711935","0520812052","0523840523","0536021429","0536570536","0538153053","0542350542","0557270557","0566330566","0571080571","0575040575","0578821619","0579440579","0581890581","0602130602","0605710605","0612120612","0615120615","0616860616","0617230617","0619230619","0620700620","0621710621","0629640629","0637440637","0642190642","0642990642","0645420645","0648770648","0650720650","0652120652","0658780658","0660430660","0661120661","0670411425","0671860671","0677180677","0687222017","0691450006","0691650691","0694850694","0695170695","0705030705","0713770713","0719960719","0723690723","0729400729","0747811423","0757751423","0769530714","0802657287","0829482082","0841192016","0841572005","0860520860","0887345747","0897919244","0942870942","0977252017","0988050988","0993990993","1000671246","1013333860","1013661013","1015702009","1021621021","1051711051","1098349265","1099019001","1127682017","1142200319","1154206233","1178881178","1186981186","1187601187","1196284035","1219691621","1243281561","1257732007","1261212011","1263701263","1266571388","1282671282","1284071284","1285459243","1431611431","1438281438","1461651461","1502993220","1507651507","1513345267","1537490319","1561831561","1561986256","1580860319","1590231422","1592171592","1604270710","1610391610","1614700161","1640501640","1652351652","1653001653","1653701653","1653770354","1653951942","1658231658","1664021664","1669882017","1673721673","1674121674","1683511683","1699171699","1699961699","1726942018","1750031750","1750821750","1763352489","1781241781","1781561781","1791921791","1797412015","1822191412","1838661838","1840021840","1844231844","1844281844","1849721849","1870471870","1872431872","1872731872","1875461875","1877241877","1881801881","1912481912","1919511919","1922971922","1923141923","1923331923","1931891931","1933332007","1933771933","1935571935","1935731935","1937015193","1947851947","1947891947","1950801950","1955281955","1955441955","1955541955","1955841955","1958101958","1959881959","1963101963","1963771963","1971561971","1975231975","1980301980","1980761980","1983241983","1984912753","1989491989","1992581992","2001822001","2005612005","2005622005","2006912006","2007542007","2009002009","2009302009","2009412009","2011592011","2025451424","2044602044","2045711424","2046785629","2080622080","2082472082","2082992082","2084472084","2085852085","2086482086","2104210950","2114025128","2140542140","2172522172","2216405265","2235422018","2236965024","2241997224","2242352242","2250552250","2260472260","2264832264","2270372270","2283096901","2289320658","2297692297","2316573866","2317105954","2322872322","2343146502","2372392016","2466312466","2481021423","2491505745","2522292522","2529302473","2541650254","2551372016","2568402568","2568722568","2613802613","2621966177","2623650007","2624620066","2624850610","2624920846","2625620043","2628720173","2666292666","2678262006","2751501254","2756991100","2785372061","2818039250","2828632828","2828762828","2836922836","2842322842","2882162882","2884422884","2909950613","2927232927","2928911698","2939252000","2988203623","3014343014","3031871561","3032283032","3035333035","3038423038","3040653040","3045853045","3046633046","3083903083","3088433088","3090993090","3096593096","3098272748","3108813108","3109023109","3115393115","3116123116","3116883116","3117693117","3125873125","3126713126","3127183127","3132863132","3134573134","3135033135","3139793139","3150193150","3153933153","3182613182","3186213186","3212548888","3213073213","3213395500","3214823214","3214833214","3233811160","3236615096","3240183240","3252713252","3252843252","3253873253","3259211756","3262393262","3306506252","3318050038","3358712042","3430817832","3445303445","3537282568","3687062015","3706741651","3735412003","3764863764","3792561530","3825823820","3932910491","4005426258","4072774072","4117084117","4118143623","4182474182","4193122012","4199484199","4215931602","4245831541","4303405430","4322594322","4342079297","4702145181","4778652004","4788131713","4792754792","4826189248","4853792297","4896100378","4925044925","4938484938","5009415009","5020142347","5030230889","5070901747","5095245152","5128165128","5140962015","5148431881","5157059265","5163295163","5179025179","5216905216","5218110388","5241462004","5257575257","5257635257","5270825270","5309465309","5316395316","5317145317","5319925319","5330895330","5338995338","5343752332","5344205344","5386415386","5386929143","5397745397","5412232384","5418455418","5428872017","5445205445","5471839277","5512012019","5534835534","5577462019","5600155600","5607485607","5648715648","5821912701","5822611411","5832825832","5873611171","5891525891","5891965891","5926385926","5934453591","5983645983","5988655988","5994135994","6004056004","6007986007","6015596015","6021436021","6023246023","6024196024","6034376034","6043456043","6044276044","6051266051","6053421396","6055526055","6063706063","6068956068","6072286072","6073506073","6099606099","6133039613","6148896148","6156986156","6157944585","6167416167","6177396177","6177766177","6190636190","6246413926","6247892729","6251676251","6284536284","6305280477","6332076332","6332946332","6334806334","6340562015","6361242680","6375801039","6452742478","6647390617","6726013818","6768023703","6849179360","6892666892","6913801620","6987180575","7015789248","7042378021","7047038318","7048963700","7049120392","7049120393","7049120395","7049120396","7049120397","7049120398","7055337055","7338656252","7352858602","7378860134","7562035145","7603297603","7693470066","7709015906","7726013014","7727020374","7767021149","7797017212","7891392307","7930401716","8005442943","8006432112","8120698160","8446117388","8449076600","8464359784","8552438038","8554471660","8554471675","8555472416","8602796774","8652183301","8656872100","8663745895","8666352349","8672259240","8762664794","8844089286","8886352349","9093054446","9232751354","9255010072","9267260925","9270319270","9477841003","9617757049","9628859628","9833569833","9949019949"]; 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=5230,5236&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();