{
  "version": 3,
  "sources": ["/cdn/shop/t/29/assets/dual-bundle-product-functions.js?enable_js_minification=1"],
  "sourcesContent": ["///////////////////////////////////////////// product image slider\n\n// gestures\nlet pageWidth = window.innerWidth || document.body.clientWidth\nlet treshold = Math.max(1, Math.floor(0.01 * pageWidth))\nlet touchstartX = 0\nlet touchstartY = 0\nlet touchendX = 0\nlet touchendY = 0\nconst limit = Math.tan(((45 * 1.5) / 180) * Math.PI)\nconst gestureZone = document.querySelector('.product-image-large')\n\n// change product image from thumbnails\nif (document.querySelector('.product-page-thumbnails')) {\n  document.querySelector('.product-page-thumbnails').addEventListener('click', e => {\n    if (e.target.dataset.productImage) {\n      changeToImage(e.target.dataset.imageVariant)\n    }\n  })\n\n  // arrow events\n  document.querySelector('#gallery-left').addEventListener('click', e => {\n    e.preventDefault()\n    e.stopPropagation()\n    // get previous image\n    let currentImage = document.querySelector('.product-page-thumbnails img.current')\n    if (currentImage.previousElementSibling) {\n      currentImage.previousElementSibling.click()\n    } else {\n      // get last one\n      currentImage.parentElement.lastElementChild.click()\n    }\n  })\n\n  document.querySelector('#gallery-right').addEventListener('click', e => {\n    e.preventDefault()\n    e.stopPropagation()\n    // get next image\n    let currentImage = document.querySelector('.product-page-thumbnails img.current')\n    if (currentImage.nextElementSibling) {\n      currentImage.nextElementSibling.click()\n    } else {\n      // get last one\n      currentImage.parentElement.firstElementChild.click()\n    }\n  })\n\n  // gestures\n\n  gestureZone.addEventListener(\n    'touchstart',\n    function (event) {\n      touchstartX = event.changedTouches[0].screenX\n      touchstartY = event.changedTouches[0].screenY\n    },\n    false\n  )\n\n  gestureZone.addEventListener(\n    'touchend',\n    function (event) {\n      touchendX = event.changedTouches[0].screenX\n      touchendY = event.changedTouches[0].screenY\n      handleGesture(event)\n    },\n    false\n  )\n\n  function handleGesture(e) {\n    let x = touchendX - touchstartX\n    let y = touchendY - touchstartY\n    let xy = Math.abs(x / y)\n    let yx = Math.abs(y / x)\n    if (Math.abs(x) > treshold || Math.abs(y) > treshold) {\n      if (yx <= limit) {\n        if (x < 0) {\n          document.querySelector('#gallery-right').click()\n        } else {\n          document.querySelector('#gallery-left').click()\n        }\n      }\n    }\n  }\n}\n\nfunction changeToImage(id) {\n  let thumbnailImage = document.querySelector(`.product-page-thumbnails img[data-image-variant=\"${id}\"]`)\n  let mainImage = document.querySelector('.product-page-image')\n  document.querySelectorAll('.product-page-thumbnails img').forEach(thumbnail => thumbnail.classList.remove('current'))\n\n  if (thumbnailImage) {\n    thumbnailImage.classList.add('current')\n    mainImage.src = thumbnailImage.src\n    mainImage.src = thumbnailImage.dataset.productImage\n    // work out how far to scroll by getting the index of the thumbnail and multiplying by width + margin\n    let galleryContainer = document.querySelector('.product-page-thumbnails')\n    let scrollWidth = galleryContainer.scrollWidth\n    let elementCount = [...galleryContainer.children].findIndex(img => img === thumbnailImage)\n\n    let scrollTarget = elementCount * (thumbnailImage.offsetWidth + 10)\n    galleryContainer.scrollTo(scrollTarget, 0)\n  }\n}\n\n/////////////////////////////////////////////  welcome kit page quantity/bundle selection\n\nlet bundles = document.querySelectorAll('.bundle-picker-container .bundle')\nlet dealTables = document.querySelectorAll('.deals-table-container')\n\nif (bundles) {\n  // add selected to last bundle and last table by default\n  bundles[bundles.length - 1].classList.add('selected')\n  dealTables[dealTables.length - 1].classList.add('selected')\n  // first run sets height\n  let tablesParent = document.querySelector('.all-deals-tables')\n  dealTables.forEach(table => {\n    if (table.classList.contains('selected')) {\n      tablesParent.style.height = table.offsetHeight + 'px'\n      setTimeout(() => {\n        tablesParent.style.height = table.offsetHeight + 'px'\n      }, 2000)\n    }\n  })\n  bundles.forEach(bundle => {\n    bundle.addEventListener('click', e => {\n      let selected = document.querySelector('.bundle-picker-container .bundle.selected')\n      if (selected) {\n        selected.classList.remove('selected')\n      }\n      bundle.classList.add('selected')\n      let selectedTable = null\n      let productID = bundle.dataset.product\n      // active correct deal table\n      dealTables.forEach(table => {\n        if (table.dataset.product == productID) {\n          tablesParent.style.height = table.offsetHeight + 'px'\n          table.classList.add('selected')\n          selectedTable = table\n        } else {\n          table.classList.remove('selected')\n          table.querySelector('input[type=\"checkbox\"]').checked = false\n        }\n      })\n\n      let price = bundle.dataset.price\n      // handle image change\n      let large = bundle.dataset.image\n      let thumbnail = bundle.querySelector('.bundle-tile img').src\n      let name = selectedTable.querySelector('.deals-table-row .product-details p:first-of-type').textContent\n      let description = selectedTable.querySelector('.deals-table-row .subtitle').textContent\n      changeMainImage(large, thumbnail, name, description, price)\n    })\n  })\n\n  // add listener for checkbox to adjust height\n  let start\n  const adjustHeight = (timestamp, currentTable) => {\n    if (!start) {\n      start = timestamp\n      tablesParent.style.transition = 'none'\n    }\n    let elapsed = timestamp - start\n    if (elapsed < 250) {\n      tablesParent.style.height = currentTable.offsetHeight + 'px'\n      requestAnimationFrame(newTimestamp => adjustHeight(newTimestamp, currentTable))\n    } else {\n      start = undefined\n      tablesParent.style.transition = 'height 0.25s cubic-bezier(0.33333, 0, 0.66667, 0.33333)'\n    }\n  }\n  dealTables.forEach(table => {\n    // handle expanding contents section for welcome kit main product\n    let checkbox = table.querySelector('input[type=\"checkbox\"]')\n    if (checkbox) {\n      checkbox.addEventListener('change', e => {\n        requestAnimationFrame(timestamp => adjustHeight(timestamp, table))\n      })\n    }\n    // handle variants (on socks)\n    let variants = table.querySelectorAll('.variant-buttons .badge')\n    if (variants) {\n      variants.forEach(variant => {\n        variant.addEventListener('click', e => {\n          let id = e.target.dataset.variantId\n          dealsTableRow = e.target.closest('.deals-table-row')\n          if (id) {\n            dealsTableRow.dataset.productId = id\n          }\n          let variants = table.querySelectorAll('.variant-buttons .badge').forEach(variant => variant.classList.remove('current'))\n          e.target.classList.add('current')\n        })\n      })\n    }\n  })\n}\n\nfunction changeMainImage(large, thumbnail, name, description, quantity, price) {\n  // change first thumbnail and first image, then trigger click\n  let productImage = document.querySelector('.product-image-large img')\n  productImage.src = large\n  if (document.querySelector('.product-banner')) {\n    // document.querySelector('.product-banner .image-container img').src = banner\n    document.querySelector('.product-banner #banner-quantity').textContent = quantity\n    document.querySelector('.product-banner #add-to-cart').textContent = `Add to basket\\u00A0\\u00A0|\\u00A0\\u00A0${price}`\n    document.querySelector('.product-banner .product-details p:first-of-type').textContent = name\n    document.querySelector('.product-banner .product-details p:last-of-type').textContent = description\n  }\n}\n\n/////////////////////////////////////////////  cart / checkout functions\n\nvar singlePurchase = document.querySelectorAll('.product-page-add')\n\nif (singlePurchase) {\n  singlePurchase.forEach(button => {\n    button.addEventListener('click', async e => {\n      let originalText = button.textContent\n      if (button.dataset.subscription === 'true') {\n        subscription = document.querySelector('.product-option-dropdown').value\n      }\n      button.textContent = 'Adding\u2026'\n      let id = document.querySelector('.bundle-picker-container .bundle.selected').dataset.product\n      let quantity = 1\n\n      const cartAddResponse = await cartAdd(id, quantity)\n      if (cartAddResponse.status == 422) {\n        button.textContent = 'Not enough stock'\n        button.style.backgroundColor = 'red'\n      } else {\n        button.textContent = originalText\n        // go to checkout\n        updateCart()\n        toggleElement(cartDrawer, e)\n      }\n    })\n  })\n}\n\n///////////////////////////////////////////// out of stock notification popup\n\nvar emailPopup = document.querySelector('#email-popup')\nemailPopup.classList.add('ready-to-fade')\n\ndocument.querySelector('#email-popup .toggle-popup').addEventListener('click', e => {\n  toggleElement(emailPopup, e)\n})\n\nfunction populateEmailPopup(data, e) {\n  document.querySelector('#email-popup .message').innerHTML = data.message\n  if (data.product) {\n    document.querySelector('#email-popup #popup_stock_product').value = data.variant\n  }\n  document.querySelector('#email-popup #stock-submit').value = data.button\n  if (data.image) {\n    document.querySelector('#email-popup img').src = data.image\n  }\n\n  toggleElement(emailPopup, e)\n}\n\nif (document.querySelector('.stock-notification')) {\n  document.querySelector('.stock-notification').addEventListener('click', e => {\n    var button = e.target\n\n    let data = {\n      message: button.dataset.message,\n      product: button.dataset.product,\n      button: 'Notify me',\n      image: button.dataset.image,\n    }\n    stockForm.style.opacity = '1'\n    populateEmailPopup(data, e)\n  })\n}\n\n// post to stocknotification.php\n\nvar stockForm = document.querySelector('.stock-form')\nvar stockResponse = document.querySelector('#email-popup .message')\n\nstockForm.addEventListener('submit', e => {\n  e.preventDefault()\n\n  stockForm.querySelector('#stock-submit').value = 'Sending...'\n\n  formData = new FormData(stockForm)\n  actionPath = stockForm.getAttribute('action')\n\n  fetch(actionPath, {\n    method: 'POST',\n    body: formData,\n  })\n    .then(response => response.json())\n    .then(data => {\n      if (data.message) {\n        stockResponse.textContent = data.message\n        stockForm.querySelector('#stock-submit').value = 'Done'\n        stockForm.style.display = 'none'\n        localStorage.setItem('styrkr-newsletter-status', 'registered')\n      } else {\n        stockResponse.innerHTML = `Sorry, there was a problem. Contact <a href=\"mailto:info@styrkr.com\">info@styrkr.com</a> and we will add you!`\n      }\n    })\n    .catch(error => {\n      console.error('Error:', error)\n    })\n})\n\n/////////////////////////////////////////////  Nutrition & Ingredients modal popup\n\ndocument.querySelectorAll('#toggle-product-ingredients-modal, .toggle-product-ingredients-popup').forEach(button => {\n  button.addEventListener('click', e => {\n    toggleElement(document.querySelector('#product-ingedients-modal'), e)\n  })\n})\n\n///////////////////////////////////////////// Delivery Window Calculator\n\n// first run\ndeliveryTimer()\n\n// update every minute\nsetInterval(function () {\n  deliveryTimer()\n}, 60 * 1000)\n\nfunction deliveryTimer() {\n  // contains final data\n  var deliveryContent = {}\n\n  var documentDay = document.querySelector('.delivery-prompt .day')\n  var documentWindow = document.querySelector('.delivery-prompt .window')\n\n  // date object\n\n  var now = new Date()\n  var currentDay = now.getDay()\n  var deliveryDeadline = new Date().setHours(14, 00, 00)\n\n  // relative dates\n  var tomorrow = new Date(new Date().setDate(new Date().getDate() + 1))\n  var dayAfterTomorrow = new Date(new Date().setDate(new Date().getDate() + 2))\n  var inThreeDays = new Date(new Date().setDate(new Date().getDate() + 3))\n\n  var mondayDispatch = function () {\n    deliveryContent.deliveryDay = 'Tuesday'\n    deliveryContent.deadlineWindow = ' order before Monday at 2pm'\n\n    var nextTuesday = new Date()\n    nextTuesday.setDate(nextTuesday.getDate() + ((2 + 7 - nextTuesday.getDay()) % 7))\n\n    var nextWednesday = new Date()\n    nextWednesday.setDate(nextWednesday.getDate() + ((3 + 7 - nextWednesday.getDay()) % 7))\n  }\n\n  // is it before 2pm\n  if (now < deliveryDeadline) {\n    // is it Monday \u2013 Friday\n    if (currentDay > 0 && currentDay < 6) {\n      //deliveryDeadline is today before 2pm, deliveryWindow is tomorrow\n\n      let deadline = (deliveryDeadline - now) / 1000 / 60 / 60 // in hours\n      let deadlineRemainder = 60 * (deadline - Math.floor(deadline)) // in minutes\n\n      deliveryContent.deliveryDay = new Intl.DateTimeFormat('en-GB', {\n        weekday: 'long',\n      }).format(tomorrow)\n      deliveryContent.deadlineWindow = ' order within ' + Math.floor(deadline) + ' hrs ' + Math.floor(deadlineRemainder) + ' min'\n    } else {\n      // it's a Saturday or Sunday before 2pm\n      //deliveryDeadline is Monday 2pm, deliveryWindow is Tuesday\n\n      mondayDispatch()\n    }\n\n    // it's after 2pm\n  } else {\n    // is it Monday \u2013\u00A0Thursday\n    if (currentDay > 0 && currentDay < 5) {\n      let tomorrow2pm = new Date(new Date().setDate(new Date().getDate() + 1)).setHours(14, 00, 00)\n      var dayAfterTomorrow = new Date(new Date().setDate(new Date().getDate() + 2))\n\n      // deliveryDeadline tomrrow before 2pm, deliveryWindow is in 2 days\n\n      let deadline = (tomorrow2pm - now) / 1000 / 60 / 60 // in hours\n      let deadlineRemainder = 60 * (deadline - Math.floor(deadline)) // in minutes\n\n      deliveryContent.deliveryDay = new Intl.DateTimeFormat('en-GB', {\n        weekday: 'long',\n      }).format(dayAfterTomorrow)\n      deliveryContent.deadlineWindow = ' order within ' + Math.floor(deadline) + ' hrs ' + Math.floor(deadlineRemainder) + ' min'\n    } else {\n      // it's after 2pm on Friday, Saturday or Sunday\n      //deliveryDeadline is Monday 2pm, deliveryWindow is Tuesday\n      deliveryContent.deliveryDay = 'Tuesday'\n      deliveryContent.deadlineWindow = ' order before Monday at 2pm'\n\n      mondayDispatch()\n    }\n  }\n\n  if (documentDay && documentWindow) {\n    documentDay.textContent = deliveryContent.deliveryDay\n    documentWindow.textContent = deliveryContent.deadlineWindow\n  }\n}\n\n///////////////////////////////////////////// lazy load images\n\nvar observer\nvar lazyLoad = (entries, observer) => {\n  entries.forEach(entry => {\n    if (entry.isIntersecting) {\n      if (entry.target.dataset.src) {\n        entry.target.src = entry.target.dataset.src\n      } else if (entry.target.dataset.desktopSrc) {\n        if (isSmall.matches) {\n          entry.target.src = entry.target.dataset.mobileSrc\n        } else {\n          entry.target.src = entry.target.dataset.desktopSrc\n        }\n      }\n      entry.target.onload = () => {\n        entry.target.removeAttribute('data-lazy')\n        observer.unobserve(entry.target)\n      }\n    }\n  })\n}\n\nfunction lazyLoadInit() {\n  if ('IntersectionObserver' in window) {\n    observer = new IntersectionObserver(lazyLoad, {\n      root: null,\n      rootMargin: '0px 0px 400px 0px',\n      threshold: 0,\n    })\n\n    var lazyImages = document.querySelectorAll('img[data-lazy]')\n    lazyImages.forEach(image => observer.observe(image))\n  } else {\n    // if intersectionObserver isn't supprted, we won't lazy load images\n    var lazyImages = document.querySelectorAll('img[data-lazy]')\n\n    for (i = 0; i < lazyImages.length; ++i) {\n      lazyImages[i].src = lazyImages[i].dataset.src\n    }\n  }\n}\n\nlazyLoadInit()\n\n///////////////////////////////////////////// replace videos\n\nif (document.querySelector('video')) {\n  document.querySelectorAll('video').forEach(video => {\n    video.querySelectorAll('source').forEach(source => {\n      if (source.dataset.desktopSrc && !isSmall.matches) {\n        source.src = source.dataset.desktopSrc\n      }\n      if (source.dataset.mobileSrc && isSmall.matches) {\n        source.src = source.dataset.mobileSrc\n      }\n    })\n    video.load()\n  })\n}\n"],
  "mappings": "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",
  "names": ["handleGesture", "variants", "variant", "observer"]
}
