!function () {
"use strict";
//var urlParameters = "Campaign\nAdGroup\nKeywords\nutm_campaign\nutm_medium\nutm_source\nutm_term\nutm_content\ngclid\nkeywords\nutm_adgroup".trim().split("\n");
var urlParameters = "Campaign,AdGroup,Keywords,utm_campaign,utm_medium,utm_source,utm_term,utm_content,gclid,keywords,utm_adgroup".trim().split(",");
//var xPaths = "".trim().split("\n");
var xPaths = "".trim().split(",");
var timeToken = "ImOG9BolnfnQEQEAhAAAADX7WwYhyNsB".trim();
var numberToReplace = "760-341-4666".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=ImOG9BolnfnQEQEAhAAAADX7WwYhyNsB';
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=ImOG9BolnfnQEQEAhAAAADX7WwYhyNsB&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){
finalResult = replicateFormat(originalNumber, 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;
}
}();