//Script which calls WidgetContent.ashx to load content based upon URL parameters // Workflow: EmbeddedScript > WidgetJS.ashx > load advanced script (wdg_content.js) > WidgetContent.ashx > WidgetMethods (optional) // done with help from this article by Sam Deering: https://www.sitepoint.com/dynamically-load-jquery-library-javascript/ //const _scriptTag = document.currentScript;//The script that started all of this //document.addEventListener("DOMContentLoaded", function () { LoadjQuery(); });//DOM elements exist //document.addEventListener("load", function () { LoadjQuery(); });//Document elements are ready to be manipulated /*const pixelId = '[PIXELID]';*/ const START_TIME = Date.now(); let _modalOpen = false; let _popupCount = 0; let _popUpMax = 1; let _suppressOpen = false; let _suppressOpenSetting = false; let _lastScrollTop = 0; let _logVerbose = false; DisplayTime('Loading Ratesight Widgets'); /*LoadCapitalAudienceScript();*///Load before document is ready window.addEventListener("load", function () {//Page and images are fully loaded LoadRatesightjQuery(); }); function LoadRatesightjQuery() { if (!window.jQuery) { AddHeadScript('jQuery', 'https://resources.ratesight.com/vendor/jquery/v3.5.1/dist/jquery.min.js', function () { LoadRatesightResizer(); LoadRatesightWidgets(); }); } else { LoadRatesightResizer(); LoadRatesightWidgets(); } } function LoadRatesightBootstrap() { if (!window.bootstrap) { AddHeadScript('Bootstrap', "https://resources.ratesight.com/vendor/bootstrap/v5.3.0/js/bootstrap.bundle.min.js", function () { }); } } function LoadRatesightResizer() { AddHeadScript('rsResizer', "https://resources.ratesight.com/vendor/iframe-resizer/iframe-resizer.parent.js", function () { }); } function LoadRatesightWidgets() { jQuery(function () { //const url = window.location.search; //let urlParameters = new URLSearchParams(url); const OPTION_TYPE = 10; const OFFICE_ID = 172647; const DOMAIN_ID = 76605; GetRatesightWidgetContent(OPTION_TYPE, OFFICE_ID, DOMAIN_ID); window.addEventListener("message", function (messageObject) { RatesightMessageProcessor(messageObject); }) LoadVisitIQ(); LoadMetaPixelScript(); /*LoadAudiencLabs();*/ LoadSocialProof(); }); } async function GetRatesightWidgetContent(typ, oid, did) { if (document.getElementById('wpadminbar') === null) { } else { AddHeadStyle('header.et_pb_section_0_tb_header { top: 64px !important; }'); } let originUrl = window.location.href; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetContent.ashx?typ=' + typ + '&oid=' + oid + '&did=' + did + "&url=" + originUrl; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetContent.ashx?typ=' + typ + '&oid=' + oid + '&did=' + did + "&url=" + originUrl; } jQuery.ajax({ type: 'GET', url: targetUrl, success: onSuccess, error: onFailure }); function onSuccess(result) { /*Load sidebar at very top of body*/ let contentDiv = document.createElement('div'); contentDiv.id = 'rsContent'; contentDiv.innerHTML = result; document.body.insertBefore(contentDiv, document.body.firstChild); DisplayTime("Ratesight - Sidebar loaded"); } function onFailure(error) { console.log('Error!!' + error.log); } } async function LoadVisitIQ() { const PIX_IMAGE_ID = '4c67c132-bba6-426e-a09f-8a51cbffeaa3'; if (PIX_IMAGE_ID != undefined && PIX_IMAGE_ID != '') { //let element = document.createElement('script'); //element.src = 'https://pixel.visitiq.io/vpixel.js'; //element.type = 'text/javascript'; //document.body.appendChild(element); //let idEl = document.createElement('script'); //idEl.innerText = "vpixel.piximage('5d398723-ba6c-4b38-9a61-164a5a5fb748');"; //idEl.async = true; //idEl.type = 'text/javascript'; //document.body.appendChild(idEl); jQuery.ajax({ url: 'https://pixel.visitiq.io/vpixel.js', dataType: "script", success: onSuccess, error: onFailure }); } function onSuccess() { vpixel.piximage(PIX_IMAGE_ID);//Method call of loaded script DisplayTime('Ratesight - Visitor Analytics Loaded'); } function onFailure(error) { console.log('Error!!' + error.log); } } async function LoadAudiencLabsScript() { /*Run script from script*/ if (pixelId != undefined && pixelId != '') { jQuery.ajax({ url: 'https://cdn.audiencelab.io/pixel_V2.js', dataType: "script", success: onSuccess, error: onFailure }); } function onSuccess(result) { DisplayTime('Ratesight - AL Analytics Loaded'); } function onFailure(error) { console.log('Error!!' + error.log); } } async function LoadCapitalAudienceScript() { /*const CA_PIXEL_ID = '[CAPITALAUDIENCEID]';*/ if (CA_PIXEL_ID != undefined && CA_PIXEL_ID != '') { /*Run script from script*/ AddHeadScript('Capital Audience', 'https://api.targeting.capitalaudience.com/pixel/script.js', function () { }); window.analyticsLayer = window.analyticsLayer || []; window.analyticsLayer.push({ event: 'pageview', websiteId: CA_PIXEL_ID }); } } async function LoadMetaPixelScript() { const META_PIXEL_ID = ''; if (META_PIXEL_ID != undefined && META_PIXEL_ID != '') { !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'); fbq('init', META_PIXEL_ID); fbq('track', 'PageView'); DisplayTime('Meta - Advertising Pixel loaded'); } } function MonitorPopupConditions() { if (sessionStorage.getItem('popupCount')) { _popupCount = parseInt(sessionStorage.getItem('popupCount')); WriteVerbose('Retrieved PopupCount: ' + sessionStorage.getItem('popupCount').toLowerCase()); } if (sessionStorage.getItem('suppressOpen')) { _suppressOpen = sessionStorage.getItem('suppressOpen').toLowerCase() === 'true'; WriteVerbose('Retrieved Suppress Open: ' + sessionStorage.getItem('suppressOpen').toLowerCase()); } [TRIGGERTIME] [TRIGGERSCROLL] [TRIGGERINACTIVETIME] [TRIGGERABANDONED] [TRIGGERLINKCLICK] [SESSIONSHOWS] [SUPRESSSHOWS] } function MonitorTriggerTime() { let pageTimeSeconds = [PAGETIMESECONDS];/*In milliseconds*/ let loadDateTime = Date.now(); let triggerInterval = setInterval(function () { if (Date.now() - loadDateTime >= pageTimeSeconds) { clearInterval(triggerInterval); ShowRatesightPopupForm(); WriteVerbose('Popup triggered by time'); } }, 1000); } function MonitorTriggerScroll() { document.addEventListener("scroll", (event) => { if (GetScrollPercent() > [SCROLLPERCENT]) {/*In WHOLE PERCENT*/ ShowRatesightPopupForm(); WriteVerbose('Popup triggered by scroll'); } }); } function MonitorTriggerInactive() { let inactiveTime = 0; let inactiveInterval = setInterval(inactiveTimerIncrement, 1000); // 1 minute jQuery(this).mousemove(function (e) { inactiveTime = 0; }); jQuery(this).keypress(function (e) { inactiveTime = 0; }); function inactiveTimerIncrement() { inactiveTime = inactiveTime + 1; if (inactiveTime > [INACTIVETIME]) { clearInterval(inactiveInterval); ShowRatesightPopupForm(); WriteVerbose('Popup triggered by inactivity'); } } } function MonitorTriggerAbandoned() { // Detect mouse leave (for desktop) jQuery(document).mouseleave(function () { ShowRatesightPopupForm(); WriteVerbose('Popup triggered by abandoned'); }); if (IsMobileDevice()) { document.addEventListener("scroll", (event) => { // Detect scroll up (for mobile) let scrollTop = window.scrollY || document.documentElement.scrollTop; if (scrollTop < _lastScrollTop) { ShowRatesightPopupForm(); WriteVerbose('Popup triggered by scrolling up on mobile'); } _lastScrollTop = scrollTop; }); // Detect back button press (for mobile) window.addEventListener('popstate', function () { ShowRatesightPopupForm(); WriteVerbose('Popup triggered by back button on mobile'); }); } } function MonitorTriggerLinkClicked() { let aLinks = document.querySelectorAll('a[href="#rs[FORMID]"]'); aLinks.forEach(link => { link.addEventListener('click', function (evt) { evt.preventDefault(); ShowRatesightPopupForm(true); WriteVerbose('Popup triggered by link clicked'); }); }); //jQuery(document).on("click", "a", function (evt) { // evt.preventDefault(); // ShowRatesightPopupForm(); // WriteVerbose('Popup triggered by link clicked'); //}); } function RatesightMessageProcessor(messageObject) { if (messageObject == undefined || messageObject == null) { return; } if (messageObject.data == null || messageObject.data == undefined) { return; } let rsFilter = '[Ratesight]'; let cmd = String(messageObject.data); if (cmd.startsWith(rsFilter)) { WriteVerbose("PostMessage processing: " + messageObject.data); cmd = cmd.slice(rsFilter.length); if (cmd == 'showprivacypolicyform') { CloseRatesightPrivacyPolicy(); ShowRatesightPrivacyPolicyForm(); } else if (cmd == 'closeprivacypolicyform') { CloseRatesightPrivacyPolicy(); ShowRatesightPrivacyPolicyLink(); } else if (cmd == 'showchatbotform') { CloseRatesightChatBot(); ShowRatesightChatBotForm(); } else if (cmd == 'closechatbotform') { CloseRatesightChatBot(); ShowRatesightChatBotLink(); } else if (cmd == 'closepopupform') { CloseRatesightPopupForm(); } else if (cmd == 'popupcomplete') { _suppressOpen = true; sessionStorage.setItem("suppressOpen", _suppressOpen); } else if (cmd == 'opensidebar') { ShowRatesightSidebar(); } else if (cmd == 'closesidebar') { HideRatesightModal(); } else if (cmd == 'showmakepayment') { ShowRatesightMakePayment(); } else { HideRatesightModal();//Just in case ShowRatesightModal(cmd); HideRatesightSidebar();//Don't need that now } /*WriteVerbose("PostMessage processing complete");*/ } } function ShowRatesightSidebar() { const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetMethods.aspx/GetSidebar'; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetMethods.aspx/GetSidebar'; } jQuery.ajax({ type: 'POST', url: targetUrl, contentType: 'application/json; charset=utf-8', data: JSON.stringify({ oid: OFFICE_ID }), dataType: 'json', success: onSuccess, error: onError }); async function onSuccess(result) { _modalOpen = true; WriteVerbose("Showing sidebar"); AddAfterRatesightDivContent(result.d); ResizeIframeById('rs-sidebar-widget'); } async function onError(error) { console.log('Sidebar load error: ' + error.d); } } function HideRatesightSidebar() { CloseForm('rs-sidebar-widget'); } async function LoadSocialProof() { jQuery(document).ready(function () { const RS_SP_INTERVAL = 20000; const RS_SP_TIMEOUT = 7000; CloseForm('rs-socialproof-widget'); DisplayTime("Ratesight - Social Proof loaded"); setInterval(function notify() { setTimeout(function () { OpenSocialProof(); }, 1500); setTimeout(function () { jQuery("#rs-socialproof-widget").fadeOut("slow", function () { CloseForm('rs-socialproof-widget'); }); }, RS_SP_TIMEOUT); return notify; }(), RS_SP_INTERVAL); }); } async function OpenSocialProof() { //console.log("Opening Social Proof"); const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetMethods.aspx/GetSocialProof'; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetMethods.aspx/GetSocialProof'; } jQuery.ajax({ type: 'POST', url: targetUrl, contentType: 'application/json; charset=utf-8', data: JSON.stringify({ oid: OFFICE_ID }), dataType: 'json', success: onSuccess, error: onError }); async function onSuccess(result) { //console.log("Showing sidebar"); AddAfterRatesightDivContent(result.d); jQuery("#rs-socialproof-widget").fadeIn("slow", function () { jQuery("#rs-socialproof-widget").show(); }); } async function onError(error) { console.log('SocialProof load error: ' + error.d); } } function ShowRatesightPrivacyPolicyForm() { const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetMethods.aspx/GetPrivacyPolicyForm'; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetMethods.aspx/GetPrivacyPolicyForm'; } jQuery.ajax({ type: 'POST', url: targetUrl, contentType: 'application/json; charset=utf-8', data: JSON.stringify({ oid: OFFICE_ID }), dataType: 'json', success: onSuccess, error: onError }); async function onSuccess(result) { _modalOpen = true; //console.log("Showing Privacy Policy"); AddAfterRatesightDivContent(result.d); ResizeIframeById('rs-privacy-policy'); } async function onError(error) { console.log('Privacy Policy load error: ' + error.d); } } async function ShowRatesightPrivacyPolicyLink() { WriteVerbose('Trying to show Privacy Policy link'); const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetMethods.aspx/GetPrivacyPolicyLink'; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetMethods.aspx/GetPrivacyPolicyLink'; } jQuery.ajax({ type: 'POST', url: targetUrl, contentType: 'application/json; charset=utf-8', data: JSON.stringify({ oid: OFFICE_ID }), dataType: 'json', success: onSuccess, error: onError }); async function onSuccess(result) { WriteVerbose("Showing Privacy Policy Link"); AddAfterRatesightDivContent(result.d); } async function onError(error) { WriteVerbose('Privacy Policy load error: ' + error.d); } } function CloseRatesightPrivacyPolicy() { _modalOpen = false; CloseForm('rs-privacy-policy'); } function ShowRatesightChatBotForm() { WriteVerbose('Trying to show ChatBot form'); const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetMethods.aspx/GetChatbotForm'; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetMethods.aspx/GetChatbotForm'; } jQuery.ajax({ type: 'POST', url: targetUrl, contentType: 'application/json; charset=utf-8', data: JSON.stringify({ oid: OFFICE_ID }), dataType: 'json', success: onSuccess, error: onError }); async function onSuccess(result) { _modalOpen = true; WriteVerbose("Showing chatbot"); AddAfterRatesightDivContent(result.d); /*ResizeIframeById('rs-message-widget');*/ } async function onError(error) { console.log('Chatbot load error: ' + error.d); } } function ShowRatesightChatBotLink() { WriteVerbose('Trying to show ChatBot link'); const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetMethods.aspx/GetChatbotLink'; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetMethods.aspx/GetChatbotLink'; } jQuery.ajax({ type: 'POST', url: targetUrl, contentType: 'application/json; charset=utf-8', data: JSON.stringify({ oid: OFFICE_ID }), dataType: 'json', success: onSuccess, error: onError }); async function onSuccess(result) { WriteVerbose("Showing chatbot"); AddAfterRatesightDivContent(result.d); } async function onError(error) { console.log('Chatbot load error: ' + error.d); } } function CloseRatesightChatBot() { _modalOpen = false; CloseForm('rs-message-widget'); } function ShowRatesightPopupForm(alwaysShow = false) { if (_suppressOpen && !alwaysShow) { WriteVerbose('Popup open suppressed because previously opened'); return; } if (_modalOpen && !alwaysShow) { WriteVerbose('Popup already open'); return; } WriteVerbose('Show Popup form'); if (alwaysShow || (_popUpMax < 1 || _popupCount < _popUpMax)) { _popupCount++; sessionStorage.setItem("popupCount", _popupCount); const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/WidgetMethods.aspx/GetPopupForm'; if (window.location.href.includes('localhost')) { targetUrl = 'http://localhost:60574/Widgets/WidgetMethods.aspx/GetPopupForm'; } jQuery.ajax({ type: 'POST', url: targetUrl, contentType: 'application/json; charset=utf-8', data: JSON.stringify({ oid: OFFICE_ID }), dataType: 'json', success: onSuccess, error: onError }); async function onSuccess(result) { if (_modalOpen) { return; // Already opened on another thread } WriteVerbose("Showing popup"); _modalOpen = true; AddAfterRatesightDivContent(result.d); ResizeIframeById('rs-popup-widget'); } async function onError(error) { console.log('Popup load error: ' + error.d); } } else { WriteVerbose('Popup already shown'); } } function CloseRatesightPopupForm() { CloseForm("rs-popup-widget"); _modalOpen = false; _suppressOpen = _suppressOpenSetting; sessionStorage.setItem("suppressOpen", _suppressOpen); WriteVerbose("Set SuppressOpen: " + sessionStorage.getItem('suppressOpen')); } function ShowRatesightMakePayment() { const OFFICE_ID = 172647; let targetUrl = 'https://go.ratesight.com/Widgets/Sidebar_MakePayment.aspx?OID=' + OFFICE_ID; ShowRatesightModal(targetUrl); } function ShowRatesightModal(url) { _modalOpen = true; if (window.location.href.includes('localhost')) { url = url.replace('https://go.ratesight.com/', 'http://localhost:60574/'); } let iframeContent = ''; AddAfterRatesightDivContent(iframeContent); ResizeIframeById('rsModal'); WriteVerbose('Showing ' + url); } async function LoadNumberReplace() { const ORIGINAL_PHONE = '[ORIGINAL_PHONE]'; const ORIGINAL_PHONE_A = '[ORIGINAL_PHONE_A]'; const ORIGINAL_PHONE_B = '[ORIGINAL_PHONE_B]'; const ORIGINAL_PHONE_C = '[ORIGINAL_PHONE_C]'; const ORIGINAL_PHONE_D = '[ORIGINAL_PHONE_D]'; const ORIGINAL_PHONE_E = '[ORIGINAL_PHONE_E]'; const ORIGINAL_PHONE_F = '[ORIGINAL_PHONE_F]'; const RS_REPLACE_NUMBER = '[RS_REPLACE_NUMBER]'; const RS_REPLACE_NUMBER_FORMATTED = '[RS_REPLACE_NUMBER_FORMATTED]'; const IS_URI_AWARE = [RS_REPLACE_URIAWARE]; if (IS_URI_AWARE) { let found = false; if (sessionStorage.getItem('replaceNumber')) { found = sessionStorage.getItem('replaceNumber') === 'true'; } else { let url = window.location.href.toLowerCase(); if (url.includes('gclid') || url.includes('fbclid') || url.includes('msclkid') || url.includes('wbraid') || url.includes('gbraid')) { found = true; sessionStorage.setItem('replaceNumber', 'true'); } } if (!found) { return; } } DisplayTime("Ratesight - Overwriting phone numbers"); ReplaceInText(document.body, ORIGINAL_PHONE, RS_REPLACE_NUMBER); ReplaceInText(document.body, ORIGINAL_PHONE_A, RS_REPLACE_NUMBER_FORMATTED); ReplaceInText(document.body, ORIGINAL_PHONE_B, RS_REPLACE_NUMBER_FORMATTED); ReplaceInText(document.body, ORIGINAL_PHONE_C, RS_REPLACE_NUMBER_FORMATTED); ReplaceInText(document.body, ORIGINAL_PHONE_D, RS_REPLACE_NUMBER_FORMATTED); ReplaceInText(document.body, ORIGINAL_PHONE_E, RS_REPLACE_NUMBER_FORMATTED); ReplaceInText(document.body, ORIGINAL_PHONE_F, RS_REPLACE_NUMBER_FORMATTED); } function ReplaceInText(element, oldPhoneNumber, newPhoneNumber) { for (let node of element.childNodes) { switch (node.nodeType) { case Node.ELEMENT_NODE: if (node.tagName == 'A' && node.href && node.href.includes(oldPhoneNumber)) { node.href = node.href.replace(oldPhoneNumber, newPhoneNumber); node.href = node.href.replace("+", ""); WriteVerbose(node.tagName); } ReplaceInText(node, oldPhoneNumber, newPhoneNumber); break; case Node.TEXT_NODE: if (node.textContent.includes(oldPhoneNumber)) { node.textContent = node.textContent.replace(oldPhoneNumber, newPhoneNumber); } break; case Node.DOCUMENT_NODE: ReplaceInText(node, oldPhoneNumber, newPhoneNumber); } } } function AddHeadStyle(style) { jQuery('head').append(''); } function AddHeadScript(id, url, callback) { if (!document.getElementById(id)) { let header_script = document.createElement("script"); header_script.type = "text/javascript"; header_script.setAttribute('crossorigin', 'anonymous'); header_script.id = id; if (header_script.readyState) { header_script.onreadystatechange = function () { if (header_script.readyState == "loaded" || header_script.readyState == "complete") { header_script.onreadystatechange = null; callback(); } } } else { header_script.onload = function () { callback(); } } header_script.src = url; document.getElementsByTagName("head")[0].appendChild(header_script); DisplayTime('Ratesight - Loaded ' + id); } } function AddAfterRatesightDivContent(content) { /*Append content after the original script, wherever it is located*/ jQuery('#ratesight-sidebar-widget').after(content); } function ResizeIframeById(id) { iframeResize({ license: '1jy4dww5qzv-s54r73oxcn-v59f4kfgfz', checkOrigin: false }, '#' + id); WriteVerbose('Resizing ' + id); } function HideRatesightModal() { _modalOpen = false; CloseForm('rsModal'); } function CloseForm(formID) { let existingForm = document.getElementById(formID); while (existingForm != undefined && existingForm != null) { document.getElementById(formID).remove(); existingForm = document.getElementById(formID);//Somehow getting duplicates or something, remove again WriteVerbose('Hiding ' + formID); } } function IsMobileDevice() { return /Mobi|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); } function GetScrollPercent() { var h = document.documentElement, b = document.body, st = 'scrollTop', sh = 'scrollHeight'; return (h[st] || b[st]) / ((h[sh] || b[sh]) - h.clientHeight) * 100; } async function DisplayTime(message) { console.log(message + ' - ' + (Date.now() - START_TIME) + ' milliseconds'); } async function WriteVerbose(message) { if (_logVerbose) { console.log(message); } }