");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}, R_722072_157_1_2_0:{ fn:function(log,nonce=''){return (function(x) { if(!vwo_$.fn.vwoRevertHtml){ return; }; var ctx=vwo_$(x),el; /*vwo_debug log("Revert","content",""); vwo_debug*/; el=vwo_$('[vwo-element-id="1744062807510"]'); el.revertContentOp().remove();})("HEAD")}}, C_722072_157_1_2_1:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x); /*vwo_debug log("addElement","body"); vwo_debug*/!(el=vwo_$("body")).find('[vwo-op-1744062793557=""]').length&&el.vwoElement({html:'
\nYou can be the difference in a child making a decision to follow Jesus at camp this summer. Will you help a kid get to Eagle Lake Camps of The Navigators this summer? Give here ยป\n
\n\n You can be the difference in a child making a decision to follow Jesus at camp this summer. Will you help a kid get to Eagle Lake Camps of The Navigators this summer? Give here ยป\n
\nYour monthly partnership will:
Most importantly, you will play an active role in this ongoing work of bringing campers to meet Jesus and grow in their walks with Him. Would you consider becoming a monthly partner today?โ
`, ctaButtons: { "Yes": ``, "No": ``, }, closeButton: false, theme: "NAV", }, memoryMode: 'session', // "session" or "forever"; indicates how long the last interacted state should be remembered minAmount: 5.00, // gift under this amount will be processed (if above the form minimum) and not shown the donation interrupter maxAmount: 100.00, // gifts equal to and above this amount will be processed and not shown the donation interrupter askConditions: function (originalAmount, originalFrequency, state) { const conditions = [ originalFrequency === "One-Time", // "One-Time" or "Recurring" originalAmount > this.minAmount, originalAmount < this.maxAmount, state && state.status !== "shown" && state.status !== "dismissed" && state.status !== "converted", // do not show if the user has already seen the donation interrupter, dismissed the donation interrupter, or converted from the donation interrupter ]; return conditions.every((condition) => typeof condition === 'function' ? !!condition.call(null) : !!condition); // return true if every condition in the array evaluates to true }, askAmount: function (originalAmount) { let askAmount; if (originalAmount >= 400 && originalAmount < 500) { // $400.00 - $499.99 askAmount = 50; } else if (originalAmount >= 300 && originalAmount < 400) { // $300.00 - $399.99 askAmount = 40; } else if (originalAmount >= 200 && originalAmount < 300) { // $200.00 - $299.99 askAmount = 30; } else if (originalAmount >= 100 && originalAmount < 200) { // $100.00 - $199.99 askAmount = 15; } else { // $ 0.01 - $ 99.99 askAmount = 10; } return parseFloat(askAmount); }, }; // // // // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // // // // Run code with configuration from above (function(){ console.log("init"); window.NA.DonationForm.init(config).then((donationFormApi) => { console.log("initialized:", donationFormApi); if (configDonationInterrupter && configDonationInterrupter.enabled === true) { donationFormApi.DonationInterrupter(configDonationInterrupter); console.log("initialized:", donationFormApi.DonationInterrupter); donationFormApi.interceptSubmit(function (capturedEvent) { try { const donationInterrupterApi = this.DonationInterrupter; if (donationFormApi && donationInterrupterApi) { if (donationInterrupterApi.evaluateConditions()) { console.log(donationFormApi); donationInterrupterApi.show(); return false; // do not submit } else { console.warn("Condtions check failed: Donation Interrupter will not be shown."); return true; // submit } } else { throw new ReferenceError("DonationFormApi or DonationInterrupterApi is not defined."); } } catch (error) { console.error("An error occured when handling submit:", error); window.NA?.DonationForm && window.NA.DonationForm.submit(); // retry submit } finally { return false; } }); } }).catch((error) => { console.error("Error creating donation form API:", error); }); })(); }catch(e) {VWO._.vAEH(e);} return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("head")}}, C_722072_70_1_2_1:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x); /*vwo_debug log("addElement","body"); vwo_debug*/!(el=vwo_$("body")).find('[vwo-op-1715610703351=""]').length&&el.vwoElement({html:'',position:"append"});})("body")}}, C_722072_70_1_2_0:{ fn:function(log,nonce=''){return (function(x) {try{const MAX_ONETIME_AMOUNT=500,RECURRING_ASK=t=>{let e;return e=t>=400&&t<500?50:t>=300&&t<400?40:t>=200&&t<300?30:t>=100&&t<200?15:10,e};function waitForElement(t,e,o=(t=>{}),n=30){return t?(o(t),!0):setTimeout(e,n)}function vwoCustomEvent(t){window.VWO=window.VWO||[],VWO.event=VWO.event||function(){VWO.push(["event"].concat([].slice.call(arguments)))},VWO.event("customEvent",{label:t.toString()})}function entangleElements(t,e,o="innerHTML",n={attributes:!0,childList:!0,subtree:!0}){if(!t||!e)return console.error(`entangleElements: ${!t&&"element1"}${t||e?" ":" and "} ${!e&&"element2"} ${t||e?"is":"are"} undefined.`);console.log("Entangling:\n",t," ",e,"\nElement 2 will mirror Element 1's values.");const i=new MutationObserver((n,i)=>{for(const i of n)switch(i.type){case"attributes":const{attributeName:n,oldValue:r}=i;if("style"!==n){const o=t.getAttribute(n);null===o?e.removeAttribute(n):e.setAttribute(n,o)}break;default:e[o]=t[o]}});return i.observe(t,n),i}function init(){customElements.whenDefined("c-donate-community-giving-options").then(()=>{customElements.whenDefined("lightning-card").then(()=>{customElements.whenDefined("c-donate-community-donate-buttons").then(()=>{customElements.whenDefined("lightning-input").then(()=>{const t=[...document.querySelector("c-donate-community-giving-options").shadowRoot.querySelectorAll("lightning-card")][1].shadowRoot.querySelector(".slds-card__body").getSlotNodes(1).querySelector("c-donate-community-donate-buttons").shadowChildren(0),e={getGiftArrayButtons:function(){let e=t;return Array.from(e.children).slice(0,Array.from(e.children).indexOf(e.querySelector(".slds-form-element"))).map(t=>t.querySelector("button"))},getAmount:function(){const e=t=>t.replace(/[\$\,]/gm,"");let o=this.getGiftArrayButtons().filter(t=>t.classList.contains("donate-selected"))[0];return o||(o=t.querySelector("lightning-input").shadowChildren(0).shadowChildren(0).querySelector("input")),parseFloat(e(o.value))},setAmount:function(e){const o=t.querySelector("lightning-input").shadowChildren(0).shadowChildren(0).querySelector("input");for(const t of this.getGiftArrayButtons())if(parseFloat(t.value)===parseFloat(e))return o.value="",t.click(),this.getAmount()===parseFloat(e);return o.value=parseFloat(e),o.dispatchEvent(new Event("change",{bubbles:!0})),this.getAmount()===parseFloat(e)},getRecurring:function(){return[...t.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]').checked},setRecurring:function(e=!0){const o=[...t.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]'),n=this.getRecurring();return(!n&&e||n&&!e)&&o.click(),this.getRecurring()===e},submit:function(t=this.buttons["Donate Now"]){return t.click()}};e.giftArrayButtons=e.getGiftArrayButtons(),window.NA=window.NA||{},window.NA.MiniDonationForm=e,waitForElement(t.querySelector("button"),init,e=>{window.NA.MiniDonationForm.buttons={"Donate Now":Array.from(t.children).slice(Array.from(t.children).indexOf(t.querySelector(".slds-form-element"))).map(t=>t.querySelector("button")).filter(t=>t)[0],"Add to Basket":Array.from(t.children).slice(Array.from(t.children).indexOf(t.querySelector(".slds-form-element"))).map(t=>t.querySelector("button")).filter(t=>t)[1]},window.NA.MiniDonationForm.cloneSubmitButton=function(t=this.buttons["Donate Now"]){const e=t.cloneNode(!0);return e.attributes=t.attributes,e.style&&(e.style=t.style),t.after(e),e},waitForElement(document.querySelector("dialog.donation-interrupter"),init,t=>{console.log("dialog found:",t);try{const e={dialog:t||document.querySelector("dialog.donation-interrupter"),_tokenName:"DonationInterrupter_",_memoryMode:sessionStorage,status:"ready",getStatus:function(){return this._memoryMode.getItem(this._tokenName+"_status")||void 0},setStatus:function(t){return this._memoryMode.setItem(this._tokenName+"_status",t),this.status=t,this.getStatus()},conditions:!0,newAmount:function(t){return t/12},onShow:function(t){},onHide:function(t){},show:function(t){this.dialog.showModal(),this.dialog.addEventListener("keydown",t=>{"Escape"===t.key&&(t.preventDefault(),t.stopImmediatePropagation())}),this.setStatus("shown"),"function"==typeof this.onShow&&this.onShow.call(null,t)},hide:function(t){this.setStatus("dismissed"),this.dialog.close(),"function"==typeof this.onHide&&this.onHide.call(null,t)},updateDialogData:function(){if(this.dialog){let t=window.NA.MiniDonationForm.getAmount(),e=this.newAmount(t);[...this.dialog.querySelectorAll('span[data="amount_original"]')].forEach(e=>e.textContent=t.toString()),[...this.dialog.querySelectorAll('span[data="amount_suggested"]')].forEach(t=>t.textContent=e.toString())}}};window.NA=window.NA||{},window.NA.DonationInterrupter=e||window.NA.DonationInterrupter,window.NA.MiniDonationForm&&window.NA.DonationInterrupter&&main(window.NA.MiniDonationForm,window.NA.DonationInterrupter)}catch(t){console.error("Failed to interface with donation interrupter.")}},100)},100)})})})})}function main(t,e,o=0){if(!t.buttons)return setTimeout(init,100);if(!e.buttons)return e.buttons={yes:[...e.dialog.querySelectorAll("button")][0],no:[...e.dialog.querySelectorAll("button")][1]},main(t,e,o);window.NA.DonationInterrupter.setStatus(window.NA.DonationInterrupter._memoryMode.getItem(window.NA.DonationInterrupter._tokenName+"_status")||"ready"),window.NA.DonationInterrupter.newAmount=RECURRING_ASK;try{for(const n of Object.values(t.buttons)){const i=n,r=t.cloneSubmitButton(i);i.style.display="none",r.style.setProperty("margin-left","0","important"),setInterval(()=>r.disabled=i.disabled,50),r.addEventListener("click",n=>{let i=t.getAmount(),r=t.getRecurring(),s="shown"===e.status||"dismissed"===e.status;o&&(console.groupCollapsed("Check conditions"),console.info(i,"< 500",i<500),console.info(r,"=== false",!1===r),console.info(s,"=== false",!1===s),console.groupEnd("Check conditions"));const l=[i<500,!1===r,!1===s].every(t=>!!t);o&&console.info("showPopup?",l),n.srcElement.textContent===t.buttons["Add to Basket"].textContent?l?e.show(n):t.submit(t.buttons["Add to Basket"]):l?e.show(n):t.submit()})}}catch(t){console.error("Failed to clone submit button and add event listener.",t)}window.NA.DonationInterrupter.onShow=n=>{window.NA.DonationInterrupter.updateDialogData(),vwoCustomEvent("donationInterrupterShown");try{const i=window.NA.DonationInterrupter.buttons,{yes:r,no:s}=i;n.srcElement.textContent===t.buttons["Add to Basket"].textContent?(r.addEventListener("click",n=>{o&&console.groupCollapsed('"Yes" clicked'),vwoCustomEvent("yes");const i=t.getAmount(),r=window.NA.DonationInterrupter.newAmount(i);o&&console.log(i,"->",r),t.setRecurring(!0),t.setAmount(r),e.hide(),t.submit(t.buttons["Add to Basket"]),o&&console.groupEnd('"Yes" clicked')}),s.addEventListener("click",n=>{o&&console.groupCollapsed('"No" clicked'),vwoCustomEvent("no"),e.hide(),t.submit(t.buttons["Add to Basket"]),o&&console.groupEnd('"No" clicked')})):(r.addEventListener("click",n=>{o&&console.groupCollapsed('"Yes" clicked'),vwoCustomEvent("yes");const i=t.getAmount(),r=window.NA.DonationInterrupter.newAmount(i);o&&console.log(i,"->",r),t.setRecurring(!0),t.setAmount(r),e.hide(),t.submit(),o&&console.groupEnd('"Yes" clicked')}),s.addEventListener("click",n=>{o&&console.groupCollapsed('"No" clicked'),vwoCustomEvent("no"),e.hide(),t.submit(),o&&console.groupEnd('"No" clicked')})),o&&console.log("added handlers to buttons",i)}catch(t){console.error("Failed to attach event listeners to dialog buttons.",t)}}}window.HTMLElement.prototype.getSlot=window.HTMLElement.prototype.getSlot||function(){return this.querySelector("slot")||this.shadowRoot.querySelector("slot")},window.HTMLElement.prototype.getSlotNodes=window.HTMLElement.prototype.getSlotNodes||function(t){return"NaN"!==parseInt(t)&&t>=0?Array.from(this.getSlot().assignedNodes({flatten:!0})).at(t):Array.from(this.getSlot().assignedNodes({flatten:!0}))},window.HTMLElement.prototype.shadowChildren=window.HTMLElement.prototype.shadowChildren||function(t){return"NaN"!==parseInt(t)&&t>=0?Array.from(this.shadowRoot.children).at(t):Array.from(this.shadowRoot.children)},setTimeout(init,500);}catch(e){} ;var _vwo_sel=vwo_$("");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}, R_722072_121_1_2_0:{ fn:function(log,nonce=''){return (function(x) { try{ var ctx=vwo_$(x),el; /*vwo_debug log("Revert","content",""); vwo_debug*/; el=vwo_$('[vwo-element-id="1734023482004"]'); el.revertContentOp().remove(); } catch(e) {console.error(e)} try{ var el,ctx=vwo_$(x); /*vwo_debug log("Revert","addElement","body"); vwo_debug*/(el=vwo_$('[vwo-element-id="1734023482005"]')).remove(); } catch(e) {console.error(e)} return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("head")}}, C_722072_121_1_2_1:{ fn:function(log,nonce=''){return (function(x) { try{ var _vwo_sel = vwo_$("`); !vwo_$("head").find('#1734023482010').length && vwo_$('head').append(_vwo_sel);}catch(e) {console.error(e)} try{; /*vwo_debug log("addElement","body"); vwo_debug*/; el=vwo_$("body") ; !el.find('[vwo-op-1734023482012=""]').length && el.vwoElement({"position":"append","html":""});}catch(e) {console.error(e)} try{const DONATION_INTERRUPTER_GROUP_NAME = "MemorizeScripture2" /* all the popups in this test will share the same group name so that the metrics for them are all counted in the test */; window.HTMLElement.prototype.getSlot = window.HTMLElement.prototype.getSlot || function () { return this.querySelector('slot') || this.shadowRoot.querySelector('slot'); } window.HTMLElement.prototype.getSlotNodes = window.HTMLElement.prototype.getSlotNodes || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.getSlot().assignedNodes({ flatten: true })).at(n) : Array.from(this.getSlot().assignedNodes({ flatten: true })); } window.HTMLElement.prototype.shadowChildren = window.HTMLElement.prototype.shadowChildren || function (n) { return (parseInt(n) !== 'NaN' && n >= 0) ? Array.from(this.shadowRoot.children).at(n) : Array.from(this.shadowRoot.children); } function waitForElement (el, retry, onSuccess = (el) => {}, delay = 30) { if ( !el ) return setTimeout(retry, delay); onSuccess(el); return true; } // function vwoSendEvent (eventName = "customEvent", object = { label: '' }) { window.VWO = window.VWO || []; VWO.event = VWO.event || function () {VWO.push(["event"].concat([].slice.call(arguments)));}; VWO.event(eventName, object); console.log(eventName, object); } const vwoSendEvent_DonationInterrupter = (action, group = undefined) => { if (action === "Shown") vwoSendEvent("custom_DonationInterrupter_Shown", { shown: true, group: group }); else if (action === "Yes") vwoSendEvent("custom_DonationInterrupter_Yes", { yes: true, group: group }); else if (action === "No") vwoSendEvent("custom_DonationInterrupter_No", { donationInterrupterNoClicked: true, group: group }); }; // function entangleElements (element1, element2, method = 'innerHTML', options = { attributes: true, childList: true, subtree: true }) { if (!element1 || !element2) return console.error(`entangleElements: ${!element1 && "element1"}${!element1 && !element2 ? " and " : " "} ${!element2 && "element2"} ${!element1 && !element2 ? "are" : "is"} undefined.`); console.log("Entangling:\n", element1, ' ', element2, "\nElement 2 will mirror Element 1's values."); const handleMutation = (mutationList, observer) => { // Callback function to execute when mutations are observed let lastAttributeValues = {}; for (const mutation of mutationList) { switch (mutation.type) { case "attributes": const { attributeName, oldValue } = mutation; if (attributeName !== "style") { // ignore changes to style attribute const currentValue = element1.getAttribute(attributeName); if (currentValue === null) { element2.removeAttribute(attributeName); // mirror element 1 attributes on element 2 by removing null value attribute } else { element2.setAttribute(attributeName, currentValue); // mirror element 1 attributes on element 2 } } break; default: element2[method] = element1[method]; break; } } }; const observer = new MutationObserver(handleMutation); observer.observe(element1, options); // Start observing the target node for configured mutations return observer; } // // // // function init () { try { customElements.whenDefined("c-donate-community-staff-information").then(() => { customElements.whenDefined("c-donate-community-donate-buttons").then(() => { customElements.whenDefined("lightning-input").then(() => { const wrapperForm = document.querySelector('c-donate-community-staff-information'); const wrapperFormInteractive = wrapperForm.shadowRoot.querySelector('c-donate-community-donate-buttons').shadowChildren(0); /// Interface with the giving form and create a window object const form = { getGiftArrayButtons: function () { let w = wrapperFormInteractive; return Array.from(w.children).slice(0, Array.from(w.children).indexOf(w.querySelector('.slds-form-element'))).map(x => x.querySelector('button')); }, getAmount: function () { const sanitizeAmount = a => a.replace(/[^\d\.]/,''); // remove non-digit characters (except for decimals) let selected = this.getGiftArrayButtons().filter(x => x.classList.contains("donate-selected"))[0]; if (selected) { return parseFloat(selected.value); } else { selected = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input'); return parseFloat(sanitizeAmount(selected.value)); } console.warn("Amount is not defined: no option is selected.") return undefined; }, setAmount: function (n) { let match; const otherAmount = wrapperFormInteractive.querySelector('lightning-input').shadowChildren(0).shadowChildren(0).querySelector('input'); for (const button of this.getGiftArrayButtons()) { // iterate over gift array buttons if (parseFloat(button.value) === parseFloat(n) ) { // if matching button found for amount otherAmount.value = ''; // clear other amount button.click(); // click the matching button return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value } } otherAmount.value = parseFloat(n); // set the other amount field value to the input value otherAmount.dispatchEvent(new Event('change', { bubbles: true })); // trigger a change event to cause the input to be formatted return this.getAmount() === parseFloat(n); // return true if the getAmount() matches the input value }, getRecurring: function () { const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]'); return checkbox.checked; }, setRecurring: function (toRecurring = true) { const checkbox = [...wrapperFormInteractive.querySelector(".slds-grid").querySelectorAll("lightning-input")][0].shadowChildren(0).shadowChildren(0).querySelector('input[type="checkbox"]'); const isRecurring = this.getRecurring(), isOnetime = !isRecurring, toOnetime = !toRecurring; // semantic booleans if ( (isOnetime && toRecurring) || (isRecurring && toOnetime)) { checkbox.click(); } return this.getRecurring() === toRecurring; }, submit: function (btn = this.buttons["Donate Now"]) { return btn.click(); }, }; //form.giftArrayButtons = form.getGiftArrayButtons(); window.NA = window.NA || {}; window.NA.MiniDonationForm = form; waitForElement(wrapperFormInteractive.querySelector('button'), init, (el) => { // wait for form buttons window.NA.MiniDonationForm.buttons = { "Donate Now": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[0], "Add to Basket": Array.from(wrapperFormInteractive.children).slice(Array.from(wrapperFormInteractive.children).indexOf(wrapperFormInteractive.querySelector('.slds-form-element'))).map(x => x.querySelector('button')).filter(y => y)[1], }; window.NA.MiniDonationForm.cloneSubmitButton = function (originalButton = this.buttons["Donate Now"]) { const clonedButton = originalButton.cloneNode(true); // clone the button and its children clonedButton.attributes = originalButton.attributes; // copy attributes if (clonedButton.style) clonedButton.style = originalButton.style; // copy styles originalButton.after(clonedButton); // insert the fake button after the original //entangleElements(originalButton, clonedButton, 'outerHTML'); // quantum entangle the elements via outerHTML -- does not work if the element is fully replaced when state changed return clonedButton; // return the fake button }; /// Interface with the Donation Interrupter