{
  "version": 3,
  "sources": ["/cdn/shop/t/65/assets/newsletter-subscribe-popup.js?cv=1.24.4"],
  "sourcesContent": ["/**\n * Newsletter Subscribe Popup Handler\n * Features:\n * - Keep the discount tab available across storefront pages through the cart\n * - Automatically open the modal once per browser, then remember the visit across storefront pages\n * - Let returning subscribers reopen their coupon details\n */\n\n(function() {\n  'use strict';\n\n  const ACTIVATED_COOKIE_NAME = 'newsletter_subscribe_popup_activated';\n  const ACTIVATED_COOKIE_DURATION = 365; // days\n  const AUTO_POPUP_SEEN_KEY = 'shappa_newsletter_popup_auto_shown';\n  /** Set right before native form.submit (popup only). Survives redirect when URL lacks customer_posted/newsletter_popup. */\n  const PENDING_POPUP_SUBMIT_KEY = 'shappa_newsletter_popup_pending_submit';\n\n  function tryApplyPendingPopupSuccess(wrapper, form) {\n    try {\n      var pending = sessionStorage.getItem(PENDING_POPUP_SUBMIT_KEY);\n      if (pending !== '1') {\n        return false;\n      }\n      if (!form) {\n        sessionStorage.removeItem(PENDING_POPUP_SUBMIT_KEY);\n        return false;\n      }\n      if (form.querySelector('.input-error-message')) {\n        sessionStorage.removeItem(PENDING_POPUP_SUBMIT_KEY);\n        return false;\n      }\n      if (form.querySelector('.form-message--success')) {\n        sessionStorage.removeItem(PENDING_POPUP_SUBMIT_KEY);\n        return true;\n      }\n      sessionStorage.removeItem(PENDING_POPUP_SUBMIT_KEY);\n      wrapper.setAttribute('data-newsletter-subscribed', 'true');\n      wrapper.classList.add('newsletter-subscribe-popup-wrapper--client-success');\n      var tmpl = document.getElementById('NewsletterPopupSuccessFragment');\n      if (tmpl && tmpl.content && !form.querySelector('.form-message--success')) {\n        var insertBeforeEl = form.querySelector('.newsletter-subscribe-popup-captcha-disclaimer');\n        var node = tmpl.content.cloneNode(true);\n        if (insertBeforeEl && insertBeforeEl.parentNode) {\n          insertBeforeEl.parentNode.insertBefore(node, insertBeforeEl);\n        } else {\n          form.insertBefore(node, form.firstChild);\n        }\n      }\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function showSavedOffer(wrapper, form) {\n    if (!form) return;\n    wrapper.setAttribute('data-newsletter-subscribed', 'true');\n    wrapper.classList.add('newsletter-subscribe-popup-wrapper--client-success');\n    if (form.querySelector('.form-message--success')) return;\n    var tmpl = document.getElementById('NewsletterPopupSuccessFragment');\n    if (!tmpl || !tmpl.content) return;\n    var insertBeforeEl = form.querySelector('.newsletter-subscribe-popup-captcha-disclaimer');\n    var node = tmpl.content.cloneNode(true);\n    if (insertBeforeEl && insertBeforeEl.parentNode) {\n      insertBeforeEl.parentNode.insertBefore(node, insertBeforeEl);\n    } else {\n      form.insertBefore(node, form.firstChild);\n    }\n  }\n\n  function getCookie(name) {\n    const value = `; ${document.cookie}`;\n    const parts = value.split(`; ${name}=`);\n    if (parts.length === 2) return parts.pop().split(';').shift();\n    return null;\n  }\n\n  function setCookie(name, value, days) {\n    const date = new Date();\n    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n    const expires = `expires=${date.toUTCString()}`;\n    document.cookie = `${name}=${value};${expires};path=/`;\n  }\n\n  function hasSeenAutoPopup() {\n    try {\n      if (window.localStorage.getItem(AUTO_POPUP_SEEN_KEY) === 'true') return true;\n    } catch (e) {}\n    return getCookie(AUTO_POPUP_SEEN_KEY) === 'true';\n  }\n\n  function rememberAutoPopup() {\n    try {\n      window.localStorage.setItem(AUTO_POPUP_SEEN_KEY, 'true');\n      return;\n    } catch (e) {}\n    setCookie(AUTO_POPUP_SEEN_KEY, 'true', 3650);\n  }\n\n  // Track if event listeners are already bound to prevent duplicates\n  let listenersBound = false;\n\n  // Clone the <form data-shopify-captcha> out of its inert <template> and into the live DOM.\n  // Must run inside a DOMContentLoaded listener registered here (not called synchronously at\n  // script top-level, even though this script is deferred) so it fires AFTER Shopify's own\n  // captcha-bootstrap DOMContentLoaded listener (registered earlier, inline in <head>) has\n  // already run its one-time scan for data-shopify-captcha forms and found nothing. See\n  // snippets/newsletter-subscribe-popup.liquid for the corresponding <template> markup.\n  document.addEventListener('DOMContentLoaded', function() {\n    var tmpl = document.getElementById('NewsletterSubscribePopupFormTemplate');\n    if (tmpl && tmpl.content && tmpl.parentNode) {\n      tmpl.parentNode.insertBefore(tmpl.content.cloneNode(true), tmpl);\n      tmpl.remove();\n    }\n  });\n\n  function initNewsletterSubscribePopup() {\n    const wrapper = document.getElementById('NewsletterSubscribePopup');\n    if (!wrapper) {\n      // Element not found - might not be rendered or script loaded before DOM\n      return;\n    }\n\n    const form = wrapper.querySelector('form.newsletter-subscribe-popup-form#NewsletterSubscribePopupForm');\n    const accountAlreadySubscribed = wrapper.getAttribute('data-customer-marketing-subscribed') === 'true';\n    // Capture this before processing a new submission so its confirmation opens once.\n    const wasAlreadyActivated = getCookie(ACTIVATED_COOKIE_NAME) === 'true';\n    const autoPopupWasSeen = hasSeenAutoPopup();\n    const pendingSuccess = tryApplyPendingPopupSuccess(wrapper, form);\n\n    // Prevent duplicate initialization\n    if (wrapper.dataset.initialized === 'true') {\n      return;\n    }\n    wrapper.dataset.initialized = 'true';\n\n    // Highlight \"10% off\" text in discount message\n    const discountElement = wrapper.querySelector('.newsletter-subscribe-popup-discount');\n    if (discountElement) {\n      const text = discountElement.textContent || discountElement.innerText;\n      if (text.includes('10% off')) {\n        discountElement.innerHTML = text.replace(\n          /10% off/g,\n          '<span class=\"newsletter-subscribe-popup-discount-highlight\">10% off</span>'\n        );\n      }\n    }\n\n    const modal = wrapper.querySelector('.newsletter-subscribe-popup-modal');\n    const closeBtn = wrapper.querySelector('.newsletter-subscribe-popup-close');\n    const declineBtn = wrapper.querySelector('[data-newsletter-popup-decline]');\n    const collapsedWidget = document.getElementById('NewsletterSubscribePopupCollapsed');\n    let autoOpenTimer = null;\n    let cancelDeferredAutoOpen = function() {};\n\n    function loadPopupImage() {\n      if (!window.matchMedia('(min-width: 750px)').matches) return;\n      const template = wrapper.querySelector('template[data-newsletter-image]');\n      if (template) template.replaceWith(template.content.cloneNode(true));\n    }\n    window.addEventListener('resize', function() {\n      if (wrapper.classList.contains('show')) loadPopupImage();\n    }, { passive: true });\n\n    // Define functions first\n    function closePopup() {\n      cancelDeferredAutoOpen();\n      rememberAutoPopup();\n      wrapper.classList.remove('show');\n      wrapper.classList.add('collapsed');\n      if (modal) modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('newsletter-subscribe-popup-active');\n    }\n\n    function expandPopup() {\n      cancelDeferredAutoOpen();\n      if (autoOpenTimer) {\n        window.clearTimeout(autoOpenTimer);\n        autoOpenTimer = null;\n      }\n      rememberAutoPopup();\n      loadPopupImage();\n      wrapper.classList.remove('collapsed');\n      wrapper.classList.add('show');\n      if (modal) modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('newsletter-subscribe-popup-active');\n    }\n\n    if (closeBtn) {\n      closeBtn.addEventListener('click', function(e) {\n        e.preventDefault();\n        closePopup();\n      });\n    }\n\n    // Let visitors dismiss the offer explicitly without subscribing.\n    if (declineBtn) {\n      declineBtn.addEventListener('click', function(e) {\n        e.preventDefault();\n        closePopup();\n      });\n    }\n\n    // Close on background click\n    if (modal) {\n      modal.addEventListener('click', function(e) {\n        if (e.target === modal) {\n          closePopup();\n        }\n      });\n    }\n\n    // Liquid URL flags, sessionStorage client-success, or server-rendered .form-message--success\n    const postedSuccess =\n      wrapper.getAttribute('data-newsletter-subscribed') === 'true' ||\n      wrapper.classList.contains('newsletter-subscribe-popup-wrapper--client-success') ||\n      (form && form.querySelector('.form-message.form-message--success'));\n    if (postedSuccess && (!wasAlreadyActivated || pendingSuccess)) {\n      loadPopupImage();\n      setCookie(ACTIVATED_COOKIE_NAME, 'true', ACTIVATED_COOKIE_DURATION);\n      wrapper.classList.add('show');\n      wrapper.classList.remove('collapsed');\n      if (modal) modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('newsletter-subscribe-popup-active');\n    } else if (accountAlreadySubscribed || wasAlreadyActivated) {\n      // Keep the tab on storefront pages and let returning subscribers reopen their code.\n      showSavedOffer(wrapper, form);\n      wrapper.classList.remove('show');\n      wrapper.classList.add('collapsed');\n      if (modal) modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('newsletter-subscribe-popup-active');\n    } else {\n      // Keep the tab available, but only auto-open once across all storefront pages.\n      wrapper.classList.add('collapsed');\n      if (modal) modal.setAttribute('aria-hidden', 'true');\n      if (!autoPopupWasSeen) {\n        if (/\\/products\\/spencer-air-ergonomic-chair\\/?$/.test(window.location.pathname)) {\n          // Give the product first paint and a reading interval before the offer.\n          // The discount tab remains available immediately on explicit click.\n          let pageLoaded = document.readyState === 'complete';\n          let visitorScrolled = false;\n          const earliestOpen = performance.now() + 8000;\n          function scheduleOffer() {\n            visitorScrolled = visitorScrolled || window.scrollY > 120;\n            if (!pageLoaded || !visitorScrolled || autoOpenTimer || hasSeenAutoPopup()) return;\n            autoOpenTimer = window.setTimeout(function() {\n              autoOpenTimer = null;\n              if (document.visibilityState !== 'visible' || document.body.classList.contains('modal--open')) return;\n              if (!hasSeenAutoPopup() && !accountAlreadySubscribed) expandPopup();\n            }, Math.max(0, earliestOpen - performance.now()));\n          }\n          function onPageLoaded() {\n            pageLoaded = true;\n            scheduleOffer();\n          }\n          cancelDeferredAutoOpen = function() {\n            window.removeEventListener('scroll', scheduleOffer);\n            window.removeEventListener('load', onPageLoaded);\n            if (autoOpenTimer) window.clearTimeout(autoOpenTimer);\n            autoOpenTimer = null;\n          };\n          window.addEventListener('scroll', scheduleOffer, { passive: true });\n          if (!pageLoaded) window.addEventListener('load', onPageLoaded, { once: true });\n        } else {\n          autoOpenTimer = window.setTimeout(function() {\n            autoOpenTimer = null;\n            if (!hasSeenAutoPopup() && !accountAlreadySubscribed) expandPopup();\n          }, 1500);\n        }\n      }\n    }\n\n    // Expand from collapsed widget - MUST bind even if collapsed\n    if (collapsedWidget) {\n      collapsedWidget.addEventListener('click', function(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        expandPopup();\n      });\n    }\n\n    wrapper.addEventListener('click', async function(e) {\n      const button = e.target.closest('[data-newsletter-copy-code]');\n      if (!button || !wrapper.contains(button)) return;\n\n      const coupon = button.closest('.newsletter-subscribe-popup-coupon');\n      const codeElement = coupon && coupon.querySelector('[data-newsletter-coupon-code]');\n      const feedback = coupon && coupon.querySelector('[data-newsletter-copy-feedback]');\n      const code = codeElement && codeElement.textContent.trim();\n      if (!code) return;\n\n      let copied = false;\n      try {\n        if (!navigator.clipboard || !navigator.clipboard.writeText) throw new Error('Clipboard API unavailable');\n        await navigator.clipboard.writeText(code);\n        copied = true;\n      } catch (error) {\n        const input = document.createElement('textarea');\n        input.value = code;\n        input.style.position = 'fixed';\n        input.style.opacity = '0';\n        document.body.appendChild(input);\n        input.select();\n        try { copied = document.execCommand('copy'); } catch (copyError) { copied = false; }\n        input.remove();\n        button.focus({ preventScroll: true });\n      }\n\n      if (copied) {\n        button.textContent = 'Copied!';\n        if (feedback) feedback.textContent = 'Discount code copied. Paste it at checkout.';\n        window.setTimeout(function() { button.textContent = 'Copy code'; }, 2500);\n      } else {\n        if (feedback) feedback.textContent = 'Select the code above to copy it.';\n        if (codeElement) {\n          const selection = window.getSelection();\n          const range = document.createRange();\n          range.selectNodeContents(codeElement);\n          selection.removeAllRanges();\n          selection.addRange(range);\n        }\n      }\n    });\n\n    // Shopify CAPTCHA: official pattern is form.submit() inside Shopify.captcha.protect \u2014 not fetch().\n    // POST /contact via fetch often returns 400 even after protect; native submit sends the same body as the storefront form.\n    if (form && form.id === 'NewsletterSubscribePopupForm' && form.classList.contains('newsletter-subscribe-popup-form')) {\n      form.addEventListener('submit', function(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.stopImmediatePropagation();\n\n        const emailInput = form.querySelector('input[type=\"email\"]');\n        const email = emailInput ? emailInput.value.trim() : '';\n        const submitButton = form.querySelector('button[type=\"submit\"]');\n        const buttonSpan = submitButton ? submitButton.querySelector('span') : null;\n        const originalButtonText = buttonSpan ? buttonSpan.textContent : '';\n\n        if (!email || !email.includes('@')) {\n          return false;\n        }\n\n        if (submitButton) {\n          submitButton.disabled = true;\n          if (buttonSpan) {\n            buttonSpan.textContent = 'Subscribing...';\n          }\n        }\n\n        const existingError = form.querySelector('.input-error-message');\n        if (existingError) {\n          existingError.remove();\n        }\n\n        function doNativeSubmitAfterCaptcha() {\n          var base = window.location.pathname + window.location.search;\n          var sep = base.indexOf('?') >= 0 ? '&' : '?';\n          if (base.indexOf('newsletter_popup=1') === -1) {\n            base = base + sep + 'newsletter_popup=1';\n          }\n          var rt = form.querySelector('input[name=\"return_to\"]');\n          if (!rt) {\n            rt = document.createElement('input');\n            rt.type = 'hidden';\n            rt.name = 'return_to';\n            form.appendChild(rt);\n          }\n          rt.value = base;\n          try {\n            sessionStorage.setItem(PENDING_POPUP_SUBMIT_KEY, '1');\n          } catch (e) {}\n          form.submit();\n        }\n\n        function runProtectedSubmit() {\n          if (window.Shopify && window.Shopify.captcha && typeof window.Shopify.captcha.protect === 'function') {\n            window.Shopify.captcha.protect(form, doNativeSubmitAfterCaptcha);\n            return;\n          }\n          var attempts = 0;\n          var maxAttempts = 50;\n          var pollMs = 200;\n          var timer = setInterval(function() {\n            attempts++;\n            if (window.Shopify && window.Shopify.captcha && typeof window.Shopify.captcha.protect === 'function') {\n              clearInterval(timer);\n              window.Shopify.captcha.protect(form, doNativeSubmitAfterCaptcha);\n              return;\n            }\n            if (attempts >= maxAttempts) {\n              clearInterval(timer);\n              if (submitButton && buttonSpan) {\n                submitButton.disabled = false;\n                buttonSpan.textContent = originalButtonText || 'Subscribe & Activate Coupon';\n              }\n              var errSpan = document.createElement('span');\n              errSpan.className = 'input-error-message';\n              errSpan.id = form.id + '-email-error';\n              errSpan.innerHTML = '<span class=\"visually-hidden\">Error </span>Security check did not load. Please refresh the page and try again.';\n              var ig = form.querySelector('.newsletter-subscribe-popup-input-group');\n              if (ig) {\n                var prev = ig.parentNode.querySelector('.input-error-message');\n                if (prev) prev.remove();\n                ig.parentNode.insertBefore(errSpan, ig.nextSibling);\n              } else {\n                form.insertBefore(errSpan, form.firstChild);\n              }\n            }\n          }, pollMs);\n        }\n        runProtectedSubmit();\n        return false;\n      });\n    }\n\n    // Close on ESC key - only bind once\n    if (!listenersBound) {\n      document.addEventListener('keydown', function(e) {\n        const popupWrapper = document.getElementById('NewsletterSubscribePopup');\n        if (e.key === 'Escape' && popupWrapper && popupWrapper.classList.contains('show')) {\n          closePopup();\n        }\n      });\n      listenersBound = true;\n    }\n  }\n\n  // Clean URL after footer form submission (if redirected)\n  // This prevents footer form submission from affecting popup behavior\n  function cleanFooterFormUrl() {\n    // Only clean URL if it's from footer form submission, not popup\n    const urlParams = new URLSearchParams(window.location.search);\n    const hash = window.location.hash;\n    const hasAttributionParams = ['utm_source','utm_medium','utm_campaign','utm_term','utm_content','gclid','fbclid','msclkid','ttclid','wbraid','gbraid']\n      .some((k) => urlParams.has(k));\n    \n    // Check if this is a footer form submission (not popup)\n    const isFooterForm = urlParams.has('customer_posted') || \n                         urlParams.has('contact[tags]') ||\n                         (hash && hash.indexOf('ContactFooterBottom_') >= 0);\n    \n    // Don't clean if it's popup form (return_to adds newsletter_popup=1)\n    const isPopupForm =\n      (hash && hash.indexOf('NewsletterSubscribePopupForm') >= 0) ||\n      urlParams.has('newsletter_popup');\n    \n    if (isFooterForm && !isPopupForm && !hasAttributionParams) {\n      // Clean URL after a short delay to allow page to render success message\n      setTimeout(function() {\n        if (window.history && window.history.replaceState) {\n          const cleanParams = new URLSearchParams(window.location.search);\n          cleanParams.delete('customer_posted');\n          cleanParams.delete('contact[tags]');\n          cleanParams.delete('form_type');\n          cleanParams.delete('newsletter_popup');\n          const cleanUrl = window.location.pathname + (cleanParams.toString() ? `?${cleanParams.toString()}` : '') + (window.location.hash || '');\n          window.history.replaceState({}, '', cleanUrl);\n        }\n      }, 100);\n    }\n  }\n\n  // Initialize when DOM is ready\n  // Use multiple initialization methods to ensure it works in all environments\n  function initializePopup() {\n    // Small delay to ensure all scripts are loaded\n    setTimeout(function() {\n      initNewsletterSubscribePopup();\n      cleanFooterFormUrl();\n    }, 100);\n  }\n  \n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initializePopup);\n  } else {\n    // DOM already loaded, but wait a bit for other scripts\n    initializePopup();\n  }\n  \n})();\n"],
  "mappings": "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",
  "names": []
}
