{"product_id":"jc-firearms-and-ammo-graphic-tees","title":"JC FIREARMS AND AMMO GRAPHIC TEES","description":"\u003ch2 style=\"color: #0057b8; font-size: 1.75rem; font-weight: bold; margin-bottom: 1rem; border-left: 4px solid #0057b8; padding-left: 0.75rem;\"\u003e✅ \u003cstrong\u003e\u003cspan style=\"color: rgb(0, 0, 0);\"\u003e\u003cspan\u003eClassic Short Sleeve Tee.\u003c\/span\u003e\u003c\/span\u003e\u003c\/strong\u003e\n\u003c\/h2\u003e\n\u003ch2 style=\"color: #0057b8; font-size: 1.75rem; font-weight: bold; margin-bottom: 1rem; border-left: 4px solid #0057b8; padding-left: 0.75rem;\"\u003e✅ \u003cstrong\u003e\u003cspan style=\"color: rgb(0, 0, 0);\"\u003e\u003cspan\u003e6 oz. Open-End Cotton.\u003c\/span\u003e\u003c\/span\u003e\u003c\/strong\u003e\n\u003c\/h2\u003e\n\u003ch2 style=\"color: #0057b8; font-size: 1.75rem; font-weight: bold; margin-bottom: 1rem; border-left: 4px solid #0057b8; padding-left: 0.75rem;\"\u003e✅ \u003cspan style=\"color: rgb(0, 0, 0);\"\u003e\u003cstrong\u003e100% Cotton\u003c\/strong\u003e\u003cstrong\u003e.\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003ch2 style=\"color: #0057b8; font-size: 1.75rem; font-weight: bold; margin-bottom: 1rem; border-left: 4px solid #0057b8; padding-left: 0.75rem;\"\u003e✅ \u003cstrong\u003e\u003cspan style=\"color: rgb(0, 0, 0);\"\u003eFit: Classic.\u003c\/span\u003e\u003c\/strong\u003e\n\u003c\/h2\u003e\n\u003cdiv style=\"margin: 16px 0;\" id=\"sched-widget\"\u003e\n\u003cdiv style=\"color: #b00020; margin-top: 8px; display: none;\" role=\"alert\" id=\"sched-error\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cscript\u003e\n(function(){\n  var DAYS_OUT = 15;\n  var widget = document.getElementById('sched-widget');\n  if (!widget) return;\n\n  var input = document.getElementById('scheduled_date');\n  var err = document.getElementById('sched-error');\n\n  var serverEpoch = parseInt(widget.getAttribute('data-server-epoch') || \"0\", 10);\n  var base = new Date(serverEpoch * 1000);\n  if (isNaN(base.getTime())) base = new Date();\n  base.setHours(0,0,0,0);\n\n  function nextWeekday(d){\n    var c = new Date(d.getTime());\n    while (c.getDay() === 0 || c.getDay() === 6) { \/\/ 0 Sun, 6 Sat\n      c.setDate(c.getDate() + 1);\n    }\n    return c;\n  }\n\n  function isoDate(d){\n    var mm = String(d.getMonth()+1).padStart(2,'0');\n    var dd = String(d.getDate()).padStart(2,'0');\n    return d.getFullYear() + '-' + mm + '-' + dd;\n  }\n\n  \/\/ compute min (server time) + DAYS_OUT, bump to next weekday if needed\n  var minDate = new Date(base);\n  minDate.setDate(minDate.getDate() + DAYS_OUT);\n  minDate = nextWeekday(minDate);\n\n  input.min = isoDate(minDate);\n  input.value = isoDate(minDate);\n\n  function validate(dateStr){\n    if(!dateStr) return { ok:false, msg: 'Please select a Scheduled In-Hands Date.' };\n    var sel = new Date(dateStr + 'T00:00:00');\n    if(isNaN(sel.getTime())) return { ok:false, msg: 'Selected date is invalid.' };\n    sel.setHours(0,0,0,0);\n    if(sel \u003c minDate) return { ok:false, msg: 'Selected date is earlier than the earliest available: ' + isoDate(minDate) + '.' , corrected: minDate };\n    if(sel.getDay() === 0 || sel.getDay() === 6) return { ok:false, msg: 'Weekends not allowed. Next business day: ' + isoDate(nextWeekday(sel)) + '.', corrected: nextWeekday(sel) };\n    return { ok:true };\n  }\n\n  function showError(message){\n    err.textContent = message;\n    err.style.display = 'block';\n  }\n  function hideError(){\n    err.textContent = '';\n    err.style.display = 'none';\n  }\n\n  function handleChange(){\n    var res = validate(input.value);\n    if(!res.ok){\n      showError(res.msg);\n      if(res.corrected) input.value = isoDate(res.corrected);\n    } else {\n      hideError();\n    }\n  }\n\n  input.addEventListener('change', handleChange);\n  input.addEventListener('blur', handleChange);\n\n  \/\/ Ensure validation blocks form submit (works with your existing Add to Cart)\n  var parentForm = input.closest('form');\n  if(parentForm){\n    parentForm.addEventListener('submit', function(e){\n      var res = validate(input.value);\n      if(!res.ok){\n        e.preventDefault();\n        showError(res.msg);\n        if(res.corrected) input.value = isoDate(res.corrected);\n        input.focus();\n        return false;\n      }\n    }, { capture:true });\n  }\n\n})();\n\u003c\/script\u003e \u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n\n  const dateInput = document.getElementById('scheduled_date');\n  if (!dateInput) return;\n\n  \/\/ Detect any AJAX add-to-cart click\n  document.querySelectorAll('.product-form__submit, [data-add-to-cart], button[type=\"submit\"]').forEach(btn =\u003e {\n    btn.addEventListener('click', function(e) {\n\n      const selected = dateInput.value;\n      if (!selected) {\n        e.preventDefault();\n        alert(\"Please select your REQUIRED Scheduled In-Hands Date before continuing.\");\n        dateInput.focus();\n        return false;\n      }\n\n      \/\/ Intercept Shopify AJAX\n      document.addEventListener('cart:request-start', function(ev) {\n        if (!ev.detail || !ev.detail.body) return;\n\n        try {\n          let data = ev.detail.body;\n\n          \/\/ Inject the line item property\n          data.set(\"properties[Scheduled Date In-Hand]\", selected);\n\n        } catch (err) {\n          console.warn(\"Unable to inject Scheduled Date:\", err);\n        }\n      }, { once: true });\n\n    });\n  });\n\n});\n\u003c\/script\u003e\u003c\/p\u003e","brand":"Color Tech","offers":[{"title":"White \/ Small","offer_id":48319831572686,"sku":null,"price":15.5,"currency_code":"USD","in_stock":true},{"title":"White \/ Medium","offer_id":48319831605454,"sku":null,"price":15.5,"currency_code":"USD","in_stock":true},{"title":"White \/ Large","offer_id":48319831638222,"sku":null,"price":15.5,"currency_code":"USD","in_stock":true},{"title":"White \/ XLarge","offer_id":48319831670990,"sku":null,"price":15.5,"currency_code":"USD","in_stock":true},{"title":"White \/ 2XL","offer_id":48319831703758,"sku":null,"price":17.5,"currency_code":"USD","in_stock":true},{"title":"White \/ 3XL","offer_id":48319831736526,"sku":null,"price":18.5,"currency_code":"USD","in_stock":true},{"title":"White \/ 4XL","offer_id":48319831769294,"sku":null,"price":19.5,"currency_code":"USD","in_stock":true},{"title":"White \/ 5XL","offer_id":48319831802062,"sku":null,"price":20.5,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0618\/5562\/9518\/files\/PSD_BACK_MOCKUP_JC_FIREARM.png?v=1788191995","url":"https:\/\/colortechsp.com\/products\/jc-firearms-and-ammo-graphic-tees","provider":"Color Tech","version":"1.0","type":"link"}