!function () { "use strict"; //var urlParameters = "Campaign\nAdGroup\nKeywords".trim().split("\n"); var urlParameters = "Campaign,AdGroup,Keywords".trim().split(","); //var xPaths = "".trim().split("\n"); var xPaths = "".trim().split(","); var timeToken = "OJV7v5jiF4SYNgAAEAAAALvDmYrtxNUB".trim(); var numberToReplace = "1-866-222-1818".trim(); var leaseDurationMins = "10".trim(); var foundElements = []; if (!numberToReplace) 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) 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() }); } } } 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(); } else { var request = new XMLHttpRequest(); var url = 'https://apps-v3.dial800.com/api/dni/number?timeToken=OJV7v5jiF4SYNgAAEAAAALvDmYrtxNUB&payload='; var payload = encodeURI(JSON.stringify({ root: { tag: foundElements } })); url += '&payload=' + payload; 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() { 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)); var text = allElements[i].innerText; if (text && getOnlyDigits(text).indexOf(searchTextDigits) !== -1) try { allElements[i].innerText = replicateFormat(text, replacementDigits); } catch (e) { } } } function replicateFormat(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 getOnlyDigits(number) { var newNumber = ""; for (var i = 0; i < number.length; i++) { if (!isNaN(parseInt(number[i]))) newNumber += number[i]; } return newNumber; } }();