!function () { "use strict"; //var urlParameters = "theurl\nutm_source\nutm_medium\nutm_term\nutm_content\nutm_campaign\ngclid\ngeo\nnetwork\ndevice\nplacement\nmsclkid\nkpid".trim().split("\n"); var urlParameters = "theurl,utm_source,utm_medium,utm_term,utm_content,utm_campaign,gclid,geo,network,device,placement,msclkid,kpid".trim().split(","); //var xPaths = "".trim().split("\n"); var xPaths = "".trim().split(","); var timeToken = "lvBMZGnK7hjxEQEAZgAAAAj7LDDMmNoB".trim(); var numberToReplace = "8772648042".trim(); var leaseDurationMins = "5".trim(); var originalDigits = getOnlyDigits(numberToReplace); var foundElements = []; if (!numberToReplace) return; var rfr = document.referrer; if((rfr==null || rfr=='') && !true) return; var rfrUrl = (rfr==null || rfr=='') ? null : new URL(rfr); var testPpc = isPpc(); var testOrganic = (rfrUrl!=null) ? isOrganic(rfrUrl.hostname.toLowerCase()) : false; var testSocial = (rfrUrl!=null) ? isSocial(rfrUrl.hostname.toLowerCase()) : false; if(testPpc && !true) return; else if(testSocial && !testOrganic && !testPpc && !true) return; else if(testOrganic && !testSocial && !testPpc && !true) return; else if(!testOrganic && !testSocial && !testPpc && (rfr!=null && rfr!='') && !true) return; for (var p = 0; p < urlParameters.length; p++) { var element = urlParameters[p].trim(); var start = element.indexOf("{"); var end = element.indexOf("}"); var elementKey = element; var tagName = element; if (start !== -1 && end !== -1 && start < end) { elementKey = element.substring(0, start); tagName = element.substring(start + 1, end); } if (elementKey) { var value = getParameterByName(elementKey); if(!value) value = getTheCookie(elementKey); if (value) foundElements.push({ name: tagName, value: value }); } } if(xPaths.length>1){ for (var x = 0; x < xPaths.length; x++) { var element = xPaths[x].trim(); var start = element.indexOf("{"); var end = element.indexOf("}"); var elementKey = element; var tagName = element; if (start !== -1 && end !== -1 && start < end) { elementKey = element.substring(0, start); tagName = element.substring(start + 1, end); } if (elementKey) { var value = document.evaluate(elementKey, document, null, XPathResult.STRING_TYPE, null).stringValue; if (value) foundElements.push({ name: tagName, value: value.trim() }); } } } foundElements.push({ name: "EntryPath", value: window.location.pathname.trim() }); foundElements.push({ name: "LastView", value: window.location.pathname.trim() }); foundElements = getRefererInfo(foundElements); if (foundElements.length !== 0) { if (typeof (Storage) !== "undefined" && localStorage.getItem("puddinNumberFor" + getOnlyDigits(numberToReplace)) && localStorage.getItem("puddinLastLeasedFor" + getOnlyDigits(numberToReplace)) && (new Date(localStorage.getItem("puddinLastLeasedFor" + getOnlyDigits(numberToReplace))).getTime() + leaseDurationMins * 60000) > new Date().getTime()) { //findAndReplace(numberToReplace,localStorage.getItem("puddinNumberFor" + getOnlyDigits(numberToReplace))); //setUndoReplaceTimer(); var bumpPhone = getOnlyDigits(localStorage.getItem("puddinNumberFor" + getOnlyDigits(numberToReplace))); var bumpUrl = 'https://apps-v3.dial800.com/api/dni/bump?timeToken=lvBMZGnK7hjxEQEAZgAAAAj7LDDMmNoB'; bumpUrl = bumpUrl + '&leasedNumber=' + bumpPhone + '&lastPath=' + encodeURI(window.location.pathname.trim()); var bumpRequest = new XMLHttpRequest(); bumpRequest.open("GET", bumpUrl); bumpRequest.onreadystatechange = function() { findAndReplace(numberToReplace,localStorage.getItem("puddinNumberFor" + getOnlyDigits(numberToReplace))); setUndoReplaceTimer(); }; bumpRequest.send(); } else { var request = new XMLHttpRequest(); var url = 'https://apps-v3.dial800.com/api/dni/number?timeToken=lvBMZGnK7hjxEQEAZgAAAAj7LDDMmNoB&payload='; var payload = encodeURI(JSON.stringify({ root: { tag: foundElements } })); url += '&payload=' + payload; if(isPpc()){ //-- append click info to url --// //Google: query param gclid //Bing: query param msclkid //Facebook: query param fbclid var qs = window.location.search; if(qs.includes('gclid')){ url += ('&ppcType=gclid&ppcClickId=' + getParameterByName('gclid')); } else if(qs.includes('msclkid')){ url += ('&ppcType=msclkid&ppcClickId=' + getParameterByName('msclkid')); } else if(qs.includes('fbclid')){ url += ('&ppcType=fbclid&ppcClickId=' + getParameterByName('fbclid')); } console.log('url is ' + url); } request.open("GET", url); request.onreadystatechange = function() { var number = request.getResponseHeader("Number"); var lastLeasedOn = request.getResponseHeader("LastLeasedOn"); if (request.readyState == 4 && number) { var newNumber = replicateFormat(numberToReplace, number); findAndReplace(numberToReplace, newNumber); if (typeof (Storage) !== "undefined" && lastLeasedOn) { localStorage.setItem("puddinNumberFor" + getOnlyDigits(numberToReplace), newNumber); localStorage.setItem("puddinLastLeasedFor" + getOnlyDigits(numberToReplace), new Date()); setUndoReplaceTimer(); } } }; request.send(); console.log('request complete'); } } function getParameterByName(name) { name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)", "i"), results = regex.exec(window.location.href); if (!results) return null; if (!results[2]) return ""; return decodeURIComponent(results[2].replace(/\+/g, " ")); } function setUndoReplaceTimer() { console.log('setUndoReplaceTimer'); var leaseRemainingMillis = leaseDurationMins * 60000 - new Date().getTime() + new Date(localStorage.getItem("puddinLastLeasedFor" + getOnlyDigits(numberToReplace))).getTime(); setTimeout(function() { originalDigits = getOnlyDigits(localStorage.getItem("puddinNumberFor" + getOnlyDigits(numberToReplace))); findAndReplace(localStorage.getItem("puddinNumberFor" + getOnlyDigits(numberToReplace)), numberToReplace); }, leaseRemainingMillis > 0 ? leaseRemainingMillis : 0); } function findAndReplace(searchText, replacement) { //console.log('findAndReplace(\"', searchText, '\",\"', replacement,'\")'); var searchTextDigits = getOnlyDigits(searchText); var replacementDigits = getOnlyDigits(replacement); var allElements = document.getElementsByTagName("*"); for (var i = allElements.length - 1; i >= 0; i--) { var attribute = allElements[i].getAttribute("href"); if (attribute && attribute.indexOf("tel:") !== -1 && getOnlyDigits(attribute).indexOf(searchTextDigits) !== -1) allElements[i].setAttribute("href", replicateFormat(attribute, replacementDigits)); if(allElements[i].hasAttribute('data-dni') && allElements[i].getAttribute('data-dni')==='false'){ console.info('Skipping script element for data-dni=false'); continue; } var text = allElements[i].innerText; if (text && getOnlyDigits(text).indexOf(searchTextDigits) !== -1) try { allElements[i].innerText = replicateFormat(text, replacementDigits); } catch (e) { } } } function replicateFormatOld(numberToReplace, number) { console.log('replicateFormat', numberToReplace, number); var newNumber = "", i = numberToReplace.length - 1, j = number.length - 1; while (i >= 0 && j >= 0) { if (isNaN(parseInt(numberToReplace[i]))) newNumber = numberToReplace[i] + newNumber; else newNumber = number[j--] + newNumber; i--; } return numberToReplace.substring(0, i + 1) + newNumber; } function replicateFormat(numberToReplace, number) { var originalNumber = originalDigits; //console.log('replacing ', originalNumber, ' in \"', numberToReplace, '\" with ', number); var lastFour = right(originalNumber, 4); console.info('last four = ' + lastFour); var lastIndex = numberToReplace.lastIndexOf(lastFour); // + 4; if(lastIndex<0) { return null; } lastIndex=lastIndex + 3; //+4 is too many var remainder='' ; if(lastIndex<(numberToReplace.length - 1)){ remainder = numberToReplace.substr(lastIndex + 1); } //console.info('Remainder = ' + remainder); var newNumber = "", i = lastIndex, j = number.length - 1; while (i >= 0 && j >= 0) { if (isNaN(parseInt(numberToReplace[i]))) newNumber = numberToReplace[i] + newNumber; else newNumber = number[j--] + newNumber; i--; } var finalResult = numberToReplace.substring(0, i + 1) + newNumber + ((remainder) ? remainder : ''); while(getOnlyDigits(finalResult).indexOf(originalNumber) !== -1){ //console.info('strawberry poptarts!'); //finalResult = replicateFormat(originalNumber, finalResult, number); finalResult = replicateFormat(finalResult, number); } return finalResult; } function getOnlyDigits(number) { var newNumber = ""; for (var i = 0; i < number.length; i++) { if (!isNaN(parseInt(number[i]))) newNumber += number[i]; } return newNumber; } function right(str, chr) { return str.slice(str.length-chr,str.length); } function bumpView(bumpUrl, bumpPhone){ console.info('Bumping...'); bumpUrl = bumpUrl + '&leasedNumber=' + bumpPhone + '&lastPath=' + encodeURI(window.location.pathname.trim()); var bumpRequest = new XMLHttpRequest(); bumpRequest.open("GET", bumpUrl); bumpRequest.send(); } function getTheCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function getRefererInfo(tagList) { //foundElements.push({ name: tagName, value: value.trim() }); var rfrResults = []; var rfr = document.referrer; if(rfr==null || rfr==''){ tagList.push({ name: "ReferrerType", value: "direct" }) return tagList; } var rfrUrl = new URL(rfr); //rfrHost : the host name of the referer //rfrType : Direct,Organic,Referral,PPC,Social var rfrHost = rfrUrl.hostname.toLowerCase(); var bOrg = isOrganic(rfrHost); var bPpc = isPpc(); var bSocial = isSocial(rfrHost); if(bPpc){ tagList.push({ name: "ReferrerType", value: "ppc" }); var ppcSrc = getPpcSource(); tagList.push({ name: "ReferrerPPC", value: ppcSrc }); tagList.push({ name: "ReferrerHost", value: getReferrerSource(rfrHost.trim()) }); } else if(bSocial && !bOrg && !bPpc){ tagList.push({ name: "ReferrerType", value: "social" }); tagList.push({ name: "ReferrerHost", value: getSocialHost(rfrHost.trim()) }); } else if(bOrg && !bSocial && !bPpc){ tagList.push({ name: "ReferrerType", value: "organic" }); tagList.push({ name: "ReferrerHost", value: getReferrerSource(rfrHost.trim()) }); } else { tagList.push({ name: "ReferrerType", value: "referral" }); tagList.push({ name: "ReferrerHost", value: getReferrerSource(rfrHost.trim()) }); } //tagList.push({ name: "ReferrerHost", value: rfrHost.trim() }); return tagList; } function getPpcSource(){ var qs = window.location.search; if(qs.includes('gclid=')) return "Google"; else if(qs.includes('msclkid=')) return "Bing"; else if(qs.includes('fbclid=')) return "Facebook"; else return "NA"; } function isPpc(){ //Google: query param gclid //Bing: query param msclkid //Facebook: query param fbclid var qs = window.location.search; return (qs.includes('gclid=') || qs.includes('msclkid=') || qs.includes('fbclid=') ); } function isSocial(rfr) { return (rfr.includes('twitter.')) || (rfr.includes('t.co')) || (rfr.includes('facebook.')) || (rfr.includes('fb.com')) || (rfr.includes('instagram.')); } function isOrganic(rfr) { //https://www.straightnorth.com/insights/huge-list-search-engines-consider-when-tracking-seo-leads/ return (rfr.includes('google.')) || (rfr.includes('alhea.com')) || (rfr.includes('alot.com')) || (rfr.includes('aol.com')) || (rfr.includes('aolsearch.com')) || (rfr.includes('ask.com')) || (rfr.includes('baidu.')) || (rfr.includes('bing.com')) || (rfr.includes('blackle.')) || (rfr.includes('centurylink.net')) || (rfr.includes('charter.net')) || (rfr.includes('clearch.org')) || (rfr.includes('cnn.com')) || (rfr.includes('google.')) || (rfr.includes('daum.net')) || (rfr.includes('devilfinder.com')) || (rfr.includes('dogpile.com')) || (rfr.includes('duckduckgo.com')) || (rfr.includes('ekolay.net')) || (rfr.includes('entireweb.com')) || (rfr.includes('excite.com')) || (rfr.includes('findgala.com')) || (rfr.includes('fast.ng')) || (rfr.includes('findsmarter.')) || (rfr.includes('g.cn')) || (rfr.includes('go.speedbit.com')) || (rfr.includes('goofram.com')) || (rfr.includes('info.com')) || (rfr.includes('infospace.com')) || (rfr.includes('iseek.com')) || (rfr.includes('izito.com')) || (rfr.includes('kidrex.org')) || (rfr.includes('lycos.com')) || (rfr.includes('mamma.com')) || (rfr.includes('monstercrawler.com')) || (rfr.includes('myallsearch.com')) || (rfr.includes('mynet.com')) || (rfr.includes('mysearchway.com')) || (rfr.includes('myway.com')) || (rfr.includes('naver.com')) || (rfr.includes('pageset.com')) || (rfr.includes('simpli.com')) || (rfr.includes('portal.tds.net')) || (rfr.includes('qone8.com')) || (rfr.includes('safesearch.net')) || (rfr.includes('search-results.com')) || (rfr.includes('search.centurylink.com')) || (rfr.includes('search.com')) || (rfr.includes('search.comcast.net')) || (rfr.includes('xfinity.com')) || (rfr.includes('earthlink.')) || (rfr.includes('frontier.com')) || (rfr.includes('juno.com')) || (rfr.includes('junosearch.')) || (rfr.includes('.mail.com')) || (rfr.includes('peoplepc.com')) || (rfr.includes('thunderstone.com')) || (rfr.includes('alexa.com')) || (rfr.includes('twcc.com')) || (rfr.includes('search')) || (rfr.includes('seznam.cz')) || (rfr.includes('so.com')) || (rfr.includes('sogou.com')) || (rfr.includes('spacetime3d.com')) || (rfr.includes('spezify.com')) || (rfr.includes('start.funmoods.com')) || (rfr.includes('start.iminent.com')) || (rfr.includes('start.toshiba.com')) || (rfr.includes('startgoogle.')) || (rfr.includes('startpage.com')) || (rfr.includes('startsiden.no')) || (rfr.includes('surfcanyon.com')) || (rfr.includes('swagbucks.com')) || (rfr.includes('terra.com')) || (rfr.includes('thenet1.com')) || (rfr.includes('torcho.com')) || (rfr.includes('tuvaro.com')) || (rfr.includes('ustart.org')) || (rfr.includes('virgilio.it')) || (rfr.includes('voila.fr')) || (rfr.includes('web.canoe.ca')) || (rfr.includes('googleusercontent.com')) || (rfr.includes('webcrawler.com')) || (rfr.includes('webhelper.centurylink.com')) || (rfr.includes('windstream.net')) || (rfr.includes('websearches.com')) || (rfr.includes('wolframalpha.com')) || (rfr.includes('wow.com')) || (rfr.includes('wowway.net')) || (rfr.includes('wp.pl')) || (rfr.includes('yabigo.com')) || (rfr.includes('yahoo.')) || (rfr.includes('yaimo.com')) || (rfr.includes('yam.com')) || (rfr.includes('yandex.')) || (rfr.includes('yippy.com')) || (rfr.includes('zapmeta.com')); } function getSocialHost(rfr) { if(rfr.includes('twitter.') || rfr.includes('t.co')) return 'Twitter'; else if(rfr.includes('facebook.') || rfr.includes('fb.com')) return 'Facebook'; else if(rfr.includes('instagram.')) return 'Instagram'; else return 'Unknown'; } function getReferrerSource(rfr) { if(rfr.includes('google.')) return 'Google'; else if(rfr.includes('alhea.com')) return 'Alhea'; else if(rfr.includes('alot.com')) return 'Alot'; else if(rfr.includes('aol.com')) return 'Bing'; else if(rfr.includes('aolsearch.com')) return 'Bing'; else if(rfr.includes('ask.com')) return 'Ask.Com'; else if(rfr.includes('baidu.')) return 'Baidu'; else if(rfr.includes('bing.com')) return 'Bing'; else if(rfr.includes('blackle.')) return 'Google'; else if(rfr.includes('centurylink.net')) return 'CenturyLink'; else if(rfr.includes('charter.net')) return 'Charter'; else if(rfr.includes('clearch.org')) return 'Clearch'; else if(rfr.includes('cnn.com')) return 'CNN'; else if(rfr.includes('google.')) return 'Google'; else if(rfr.includes('daum.net')) return 'Daum'; else if(rfr.includes('devilfinder.com')) return 'DevilFinder'; else if(rfr.includes('dogpile.com')) return 'DogPile'; else if(rfr.includes('duckduckgo.com')) return 'DuckDuckGo'; else if(rfr.includes('ekolay.net')) return 'Ekolay'; else if(rfr.includes('entireweb.com')) return 'EntireWeb'; else if(rfr.includes('excite.com')) return 'Excite'; else if(rfr.includes('findgala.com')) return 'FindGala'; else if(rfr.includes('fast.ng')) return 'Fast'; else if(rfr.includes('findsmarter.')) return 'FindSmarter'; else if(rfr.includes('g.cn')) return 'Google'; else if(rfr.includes('go.speedbit.com')) return 'Google'; else if(rfr.includes('goofram.com')) return 'Google'; else if(rfr.includes('info.com')) return 'Google'; else if(rfr.includes('infospace.com')) return 'Google'; else if(rfr.includes('iseek.com')) return 'iSeek'; else if(rfr.includes('izito.com')) return 'Google'; else if(rfr.includes('kidrex.org')) return 'Google'; else if(rfr.includes('lycos.com')) return 'Lycos'; else if(rfr.includes('mamma.com')) return 'Mamma'; else if(rfr.includes('monstercrawler.com')) return 'DogPile'; else if(rfr.includes('myallsearch.com')) return 'Google'; else if(rfr.includes('mynet.com')) return 'MyNet'; else if(rfr.includes('mysearchway.com')) return 'Google'; else if(rfr.includes('myway.com')) return 'Google'; else if(rfr.includes('naver.com')) return 'Google'; else if(rfr.includes('pageset.com')) return 'Google'; else if(rfr.includes('simpli.com')) return 'Google'; else if(rfr.includes('portal.tds.net')) return 'TDS'; else if(rfr.includes('qone8.com')) return 'Google'; else if(rfr.includes('safesearch.net')) return 'Bing'; else if(rfr.includes('search-results.com')) return 'Bing'; else if(rfr.includes('search.centurylink.com')) return 'CenturyLink'; else if(rfr.includes('search.com')) return 'Search.Com'; else if(rfr.includes('search.comcast.net')) return 'Google'; else if(rfr.includes('xfinity.com')) return 'Google'; else if(rfr.includes('earthlink.')) return 'Google'; else if(rfr.includes('frontier.com')) return 'Frontier'; else if(rfr.includes('juno.com')) return 'Juno'; else if(rfr.includes('junosearch.')) return 'Juno'; else if(rfr.includes('.mail.com')) return 'Mail.Com'; else if(rfr.includes('peoplepc.com')) return 'Google'; else if(rfr.includes('thunderstone.com')) return 'ThunderStone'; else return rfr; } }();