<style>
.rfq-btn{display:block;width:100%;max-width:320px;padding:14px 20px;margin:18px 0 6px;
  background:#2ba0d9;color:#fff;border:0;border-radius:4px;
  font-size:16px;font-weight:700;cursor:pointer}
.rfq-btn:hover{opacity:.9}
.rfq-note{font-size:13px;color:#666;margin:0 0 12px}
.rfq-fab{display:none;padding:14px 20px;margin:0 0 14px;
  background:#0b5d8a;color:#fff;border:0;border-radius:4px;font-size:15px;
  font-weight:700;cursor:pointer;width:100%;max-width:320px}
.rfq-fab:hover{opacity:.9}
.rfq-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:99999;
  display:flex;align-items:center;justify-content:center;padding:16px}
.rfq-panel{position:relative;background:#fff;width:min(720px,100%);
  max-height:90vh;border-radius:6px;overflow:auto;padding:24px}
.rfq-panel h3{margin:0 0 16px;font-size:20px}
.rfq-panel table{width:100%;border-collapse:collapse;font-size:14px;margin-bottom:18px}
.rfq-panel th,.rfq-panel td{text-align:left;padding:8px 6px;border-bottom:1px solid #eee}
.rfq-panel input[type=number]{width:64px;padding:4px}
.rfq-x{background:none;border:0;color:#c00;cursor:pointer;font-size:18px}
.rfq-close{position:absolute;top:6px;right:14px;font-size:28px;background:none;
  border:0;cursor:pointer}
.rfq-frame{width:100%;height:70vh;border:0}
</style>

<script>
(function () {
  var FORM = "https://forms.zohopublic.com/<org>/form/<FormName>/formperma/<permalink>";
  var KEY  = "rfq_items";

  function isProduct(){
    if (/\/products\//i.test(location.pathname)) return true;
    var og = document.querySelector('meta[property="og:type"]');
    return !!(og && /product/i.test(og.content||""));
  }

  function load(){ try { return JSON.parse(localStorage.getItem(KEY)) || []; } catch(e){ return []; } }
  function save(a){ localStorage.setItem(KEY, JSON.stringify(a)); paintFab(); }

  function findCartBtn(){
    var els = document.querySelectorAll("button,a,input[type=submit],input[type=button]");
    for (var i=0;i<els.length;i++){
      var t=(els[i].textContent||els[i].value||"").trim();
      if (/add\s*to\s*cart|buy\s*now|add\s*to\s*bag/i.test(t)) return els[i];
    }
    return null;
  }

  function findQty(){
    var inputs = document.querySelectorAll("input[type=number],input[type=text]");
    for (var i=0;i<inputs.length;i++){
      var el = inputs[i];
      for (var up=0; up<5 && el; up++){
        var t=(el.textContent||"").trim();
        if (/QTY/i.test(t) && t.length < 60) return el;
        el = el.parentElement;
      }
    }
    return null;
  }

  function findPN(){
    var m=(document.body.innerText||"").match(
      /\b(?:PN|P\/N|SKU|Part\s*(?:No|Number)|Model)\s*[:#]?\s*([A-Za-z0-9][A-Za-z0-9\-\/\.]{2,})/i);
    return m?m[1]:"";
  }

  function addBtn(){
    if (document.querySelector(".rfq-btn")) return;
    var h1=document.querySelector("h1"); if(!h1) return;

    var cart=findCartBtn(), qty=findQty();
    var anchor = cart || qty || h1;
    if (cart) cart.style.display="none";

    var wrap=document.createElement("div");
    var b=document.createElement("button");
    b.type="button"; b.className="rfq-btn"; b.textContent="Add to Quote";
    var n=document.createElement("p");
    n.className="rfq-note"; n.textContent="Build a list, then send us one request.";
    wrap.appendChild(b); wrap.appendChild(n);
    anchor.parentNode.insertBefore(wrap, anchor.nextSibling);

    b.onclick=function(){
      var qi=qty?qty.querySelector("input"):null;
      var item={
        name: h1.textContent.trim(),
        sku:  findPN(),
        qty:  qi?(parseInt(qi.value,10)||1):1,
        url:  location.href
      };
      var list=load();
      var hit=list.filter(function(x){return x.url===item.url;})[0];
      if (hit) hit.qty+=item.qty; else list.push(item);
      save(list);
      b.textContent="Added ✓";
      setTimeout(function(){ b.textContent="Add to Quote"; },1500);
    };

    paintFab();
  }

  function paintFab(){
    var list=load();
    var fab=document.querySelector(".rfq-fab");
    var addEl=document.querySelector(".rfq-btn");

    if(!fab){
      fab=document.createElement("button");
      fab.type="button";
      fab.className="rfq-fab";
      fab.onclick=openList;
    }

    if(addEl && fab.parentNode!==addEl.parentNode){
      addEl.parentNode.appendChild(fab);
    } else if(!addEl && !fab.parentNode){
      return;
    }

    fab.textContent="View Quote List ("+list.length+")";
    fab.style.display=list.length?"block":"none";
  }

  function openList(){
    var list=load();
    var rows=list.map(function(it,i){
      return "<tr><td>"+esc(it.name)+"<br><small>"+esc(it.sku||"—")+"</small></td>"
           +"<td><input type=number min=1 value="+it.qty+" data-i="+i+"></td>"
           +"<td><button class=rfq-x data-del="+i+">&times;</button></td></tr>";
    }).join("");

    var o=document.createElement("div");
    o.className="rfq-overlay";
    o.innerHTML="<div class=rfq-panel><button class=rfq-close>&times;</button>"
      +"<h3>Your Quote List</h3><table><tr><th>Item</th><th>Qty</th><th></th></tr>"
      +rows+"</table>"
      +"<button class='rfq-btn' id=rfq-go>Continue to Request Form</button></div>";
    document.body.appendChild(o);

    o.addEventListener("click",function(e){
      if(e.target===o||e.target.className==="rfq-close") o.remove();
      var d=e.target.getAttribute("data-del");
      if(d!==null&&d!==undefined){ var l=load(); l.splice(+d,1); save(l); o.remove(); if(l.length) openList(); }
      if(e.target.id==="rfq-go") submitList(o);
    });
    o.addEventListener("change",function(e){
      var i=e.target.getAttribute("data-i");
      if(i!==null&&i!==undefined){ var l=load(); l[+i].qty=parseInt(e.target.value,10)||1; save(l); }
    });
  }

  function submitList(o){
    var lines=load().map(function(it){
      return it.qty+" x "+it.name+(it.sku?" ["+it.sku+"]":"");
    }).join("\n");

    var url=FORM
      +"?Inquiry_Type="+encodeURIComponent("Multi-item Quote")
      +"&Items="+encodeURIComponent(lines)
      +"&Page_Reference="+encodeURIComponent(location.origin);

    o.querySelector(".rfq-panel").innerHTML=
      "<button class=rfq-close>&times;</button><iframe class=rfq-frame src='"+url+"'></iframe>";
  }

  function esc(s){ return String(s).replace(/[<>&]/g,function(c){
    return {"<":"&lt;",">":"&gt;","&":"&amp;"}[c]; }); }

  if (isProduct()) {
    document.addEventListener("DOMContentLoaded",function(){ addBtn(); paintFab(); });
    new MutationObserver(function(){ addBtn(); }).observe(document.documentElement,{childList:true,subtree:true});
  }
})();
</script>