Home
Technical
Build A Hose
Create an Account
Sign in!
var form = document.searchForm; if (form.SEARCH_TYPE.selectedIndex == 2) { form.action = '/dept_search.html'; } else { form.action = '/search.html'; }
Hose
Hose End
Fitting
Tubing
Clamp
Coupler
Valve
Monitor
Pneumatic
Seal
DOT Trucking
Dixon Valve
BVA Hydraulics
Interchanges
Home
Hose End
Low Pressure
Plastic
Male Pipe
Female Pipe
Mender
Male Pipe 90°
Female Pipe 90°
90° Mender
TEE
Male Pipe Branch
Y
document.addEventListener("DOMContentLoaded",(async()=>{const e=await(async()=>{try{console.log("Loading WebAssembly module...");const e=await fetch("/catalog/build/specs-matcher.wasm"),t=await e.arrayBuffer(),n=new WebAssembly.Memory({initial:1,maximum:10}),o=await WebAssembly.instantiate(t,{env:{memory:n,abort:(e,t,n,o)=>{console.error(`Abort called at ${t}:${n}:${o} - ${e}`)},abortOnCannotGrowMemory:()=>{console.error("Cannot grow memory")},table:new WebAssembly.Table({initial:0,maximum:0,element:"anyfunc"}),__memory_base:0,__table_base:0,log:(e,t)=>{const o=new Uint8Array(n.buffer,e,t),s=(new TextDecoder).decode(o);console.log(s)},matchDashSize:(e,t,o,s)=>{const r=new Uint8Array(n.buffer,e,t),i=new Uint8Array(n.buffer,o,s),c=JSON.parse((new TextDecoder).decode(r)),a=(new TextDecoder).decode(i);return Object.entries(c).some((([e,t])=>{if(!e.includes("Dash Size"))return!1;const n=String(t||"").replace(/^-/,"");return n===a||2===a.length&&a.startsWith("0")&&n===a.slice(1)}))?1:0},isSimilarContent:(e,t,o,s)=>{const r=new Uint8Array(n.buffer,e,t),i=new Uint8Array(n.buffer,o,s),c=JSON.parse((new TextDecoder).decode(r)),a=JSON.parse((new TextDecoder).decode(i)),l=Object.keys(c).filter((e=>"sourceLink"!==e)),d=Object.keys(a).filter((e=>"sourceLink"!==e));return l.length!==d.length?0:l.every((e=>!!a.hasOwnProperty(e)&&String(c[e]).trim()===String(a[e]).trim()))?1:0}}});return console.log("WebAssembly module loaded successfully"),o}catch(e){return console.error("Failed to load WebAssembly module:",e),null}})(),t=(t,n)=>{if(!e)return!1;const o=e.instance.exports.memory,s=t,r=n,i=new TextEncoder,c=new TextEncoder,a=i.encode(s),l=c.encode(r),d=e.instance.exports.allocate(a.length),f=e.instance.exports.allocate(l.length);new Uint8Array(o.buffer).set(a,d),new Uint8Array(o.buffer).set(l,f);const u=e.instance.exports.isSimilarContent(d,a.length,f,l.length);return e.instance.exports.deallocate(d,a.length),e.instance.exports.deallocate(f,l.length),1===u},n=e=>`specs-cache-${e}`,o=async e=>{const t=(e=>{let t=e.replace(/^http:/,"https:");const n=t.indexOf("#");return t=-1!==n?t.substring(0,n):t,t.includes("?")?`${t}&htapi-return=json`:`${t}?htapi-return=json`})(e);console.log("Checking cache for:",t);const o=(e=>{try{const t=localStorage.getItem(n(e));if(!t)return null;const{data:o,timestamp:s}=JSON.parse(t);return Date.now()-s>864e5?(localStorage.removeItem(n(e)),null):o}catch(e){return console.error("Error retrieving cached data:",e),null}})(t);return o?(console.log("Using cached data for:",t),o):(console.log("Fetching data from:",t),new Promise(((e,o)=>{const s=document.createElement("iframe");s.src=t,s.setAttribute("sandbox","allow-scripts allow-same-origin"),s.style.display="none",document.body.appendChild(s);const r=o=>{if(o.source===s.contentWindow&&"specsUpdate"===o.data?.type){console.log("Received data from iframe for:",t);const i=o.data.data?.data||o.data.data;i&&Array.isArray(i)&&((e,t)=>{try{const o={data:t,timestamp:Date.now()};return localStorage.setItem(n(e),JSON.stringify(o)),!0}catch(e){return console.error("Error caching data:",e),!1}})(t,i),e(i),window.removeEventListener("message",r),s.remove()}};window.addEventListener("message",r),s.onerror=()=>{console.error("Failed to load iframe for:",t),window.removeEventListener("message",r),s.remove(),o(new Error(`Failed to load data from ${t}`))}})))},s=(t,n)=>{if(!e)return!1;const o=e.instance.exports.memory,s=JSON.stringify(t),r=(new TextEncoder).encode(s),i=(new TextEncoder).encode(n),c=e.instance.exports.allocate(r.length),a=e.instance.exports.allocate(i.length);new Uint8Array(o.buffer).set(r,c),new Uint8Array(o.buffer).set(i,a);const l=e.instance.exports.matchDashSize(c,r.length,a,i.length);return e.instance.exports.deallocate(c,r.length),e.instance.exports.deallocate(a,i.length),1===l},r=(e,t)=>{if(!t)return null;const n=e.getAttribute("htapi-value");if(!n)return null;const o=[],s=[],r=e=>{const t=parseInt(e);return t>=1&&t<=9?[`${t}`,`0${t}`]:[e]};if(n.match(/^PCSF(\d{4})$/)){const e=new RegExp(`${n}\\s*=\\s*([\\d\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),s=t.match(e);if(s&&s[1]){const e=s[1].trim();if(!o.includes(e))return o.push(e),o}}const i=n.match(/^SS(\d{1,2})-(\d{1,2})/);if(i){const e=i[1],n=i[2],s=r(e),c=r(n);for(const e of s){const n=new RegExp(`(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),s=t.match(n);if(s&&s[1]){const e=s[1].trim();o.includes(e)||o.push(e);break}}for(const e of c){const n=new RegExp(`(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),s=t.match(n);if(s&&s[1]){const e=s[1].trim();o.includes(e)||o.push(e);break}}if(2===o.length)return o}const c=n.match(/^.*?[A-Z]-(\d{1,2})-(\d{1,2})-(\d{1,2})$/);if(c){const e=c[1],n=c[2],s=c[3],i=r(e),a=r(n),l=r(s);for(const e of[...i,...a,...l]){const n=new RegExp(`(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),s=t.match(n);if(s&&s[1]){const e=s[1].trim();o.includes(e)||o.push(e)}}if(o.length>0)return o}const a=n.match(/.*?-(\d{1,2})-(\d{1,2})-(\d{1,2})-SS$/);if(a){const e=a[1],n=a[2],s=a[3],i=r(e),c=r(n),l=r(s);for(const e of[...i,...c,...l]){const n=new RegExp(`(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),s=t.match(n);if(s&&s[1]){const e=s[1].trim();o.includes(e)||o.push(e)}}if(o.length>0)return o}const l=[{pattern:/.*?-(\d{1,2})-(\d{1,2})-SS$/,indices:[1,2]},{pattern:/JH(\d+)-(\d+)/,indices:[1]},{pattern:/[A-Z0-9]+[A-Z]-(\d+\.?\d*)-(\d+)/,indices:[1,2]},{pattern:/^\d+(?=[a-zA-Z]|$)/,indices:[0]},{pattern:/-(\d+)(?:[^\d]|$)|(\d{1,2})$/,indices:[1,2]},{pattern:/^(\d{1,2})-(\d{1,2})-(\d{1,2})$/,indices:[1,2,3]},{pattern:/(?:ASY|LTASY|RASY)(\d+)-(\d+)/,indices:[1]},{pattern:/BP\d*-(\d+)-(\d+)[A-Z]/,indices:[1,2]},{pattern:/[A-Z]+\d*[A-Z]*-(\d{1,2})-(\d{1,2})/,indices:[1,2]}];for(const{pattern:e,indices:t}of l){const o=n.match(e);if(o)for(const e of t)o[e]&&s.push(...r(o[e]))}for(const e of s){const n=[`(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,`(?:Sizing|ID Sizing|Hose\\s+ID|Sizes)\\s*:\\s*(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,`(?:Sizing|ID Sizing|Hose\\s+ID|Sizes)\\s*:\\s*([\\d-\\s/"]+"?)\\s*(?:for|-)\\s*(?:0?${e})(?=\\s|$|,|"|foot)`];for(const e of n){const n=new RegExp(e,"i"),s=t.match(n);if(s&&s[1]){const e=s[1].trim();o.includes(e)||o.push(e)}}}return o.length>0?o:null},i=(e,t)=>{const n=[],o=e=>{const t=parseInt(e);return t>=1&&t<=9?[`${t}`,`0${t}`]:[e]},s=e.match(/^GP(\d+)-(\d+)$/);if(s){const e=s[1],o=(s[2],['Thread\\s*Size\\s*=\\s*([\\d\\s/\\-"]+"?)(?=\\s|$|,|"|foot)','Size\\s*=\\s*([\\d\\s/\\-"]+"?)(?=\\s|$|,|"|foot)',`GP${e}\\s*=\\s*([\\d\\s/\\-"]+"?)(?=\\s|$|,|"|foot)`]);for(const e of o){const o=new RegExp(e,"i"),s=t.match(o);if(s&&s[1]){const e=s[1].trim();n.includes(e)||n.push(e)}}if(n.length>0)return n}const r=e.match(/JH(\d+)-(\d+)/);if(r){const e=r[1],s=r[2];let i=!1;for(const s of o(e)){if(i)break;const e=new RegExp(`Hose\\s+ID[^:]*:\\s*(?:0?${s})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),o=t.match(e);if(o&&o[1]){const e=o[1].trim();n.includes(e)||(n.push(e),i=!0)}}const c=new RegExp(`Length\\s*=\\s*(${s}"?)`,"i"),a=t.match(c);if(a&&a[1]){const e=a[1].trim();n.includes(e)||n.push(e)}if(2===n.length)return n}const i=e.match(/[A-Z0-9]+[A-Z]-(\d+\.?\d*)-(\d+)/);if(i){const e=i[1],s=i[2],r=[e,e.replace(".",""),e.includes(".")?Math.floor(parseFloat(e)).toString():e];let c=!1;for(const e of r){const o=new RegExp(`(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),s=t.match(o);if(s&&s[1]){const e=s[1].trim();if(!n.includes(e)){n.push(e),c=!0;break}}}let a=!1;for(const e of o(s)){if(a)break;const o=new RegExp(`(?:0?${e})\\s*=\\s*([\\d-\\s/"]+"?)(?=\\s|$|,|"|foot)`,"i"),s=t.match(o);if(s&&s[1]){const e=s[1].trim();n.includes(e)||(n.push(e),a=!0)}}if(c&&2===n.length)return n}return null},c=(e,n,o,r)=>{if(!e||!e.length)return[];const i=1===e.length,c=[],a=new Set;for(const{data:t}of e){const e=t.find((e=>{const t=Object.keys(e).find((e=>e.toLowerCase().includes("sku")||e.toLowerCase().includes("part #")));return t&&e[t]===o}));e&&!c.includes(e)&&c.push(e)}if(c.length>0)return c;if(r.length>0)if(i){const n=[];for(const{data:t}of e)for(const e of r)for(const o of t)s(o,e)&&n.push(o);for(const e of n){const n=JSON.stringify(e);let o=!1;for(const e of a)if(t(e,n)){o=!0;break}o||(a.add(n),c.push(e))}}else for(let n=0;n
{if(!e||!t)return!1;const n=e=>{for(const t of Object.keys(e))if(t.includes("Dash Size")&&e[t])return String(e[t]).trim();return null},o=n(e),s=n(t);if(o&&s&&o===s){const n=Object.keys(e).filter((t=>"sourceLink"!==t&&null!=e[t])),o=Object.keys(t).filter((e=>"sourceLink"!==e&&null!=t[e]));let s=0;for(const r of n)o.includes(r)&&String(e[r]).trim()===String(t[r]).trim()&&s++;return s/n.length>.8}return!1};setTimeout((async()=>{const e=document.querySelectorAll('td[htapi-key="type"]'),t=document.querySelector('[htapi-obj-key="description"]');if(!t)return;const n=t.getAttribute("htapi-obj-value")||"",l=document.querySelector('[htapi-obj-ref="dept_description"]');if(!l)return;const d=Array.from(l.querySelectorAll('a[href^="https://www.hoseandfittings.com"], a[href^="http://www.hoseandfittings.com"], a[href^="/"]')),f=new Map;if(e.forEach((e=>{const t=e.querySelector('a[htapi-obj-key="description"]');if(!t)return;const n=document.createElement("div");n.className="loading-spinner",n.style.display="inline-block",n.style.width="16px",n.style.height="16px",n.style.border="2px solid rgba(0, 0, 0, 0.1)",n.style.borderRadius="50%",n.style.borderTopColor="#3498db",n.style.animation="spin 1s linear infinite";const o=document.createElement("div");o.className="spinner-container",o.style.marginTop="10px",o.appendChild(n);const s=t.parentElement;s&&(s.appendChild(o),f.set(e,o))})),!document.querySelector("style#spinner-style")){const e=document.createElement("style");e.id="spinner-style",e.textContent="@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }",document.head.appendChild(e)}const u=new Set,p=[];await Promise.all(d.map((async(e,t)=>{if(e instanceof HTMLAnchorElement&&!u.has(e.href)){u.add(e.href);try{const n=await o(e.href);Array.isArray(n)&&p.push({data:n,linkText:e.innerText,linkIndex:t})}catch(t){console.error("Error processing link:",e.href,t)}}})));const h=new Map;for(const t of e){const e=t.querySelector('a[htapi-obj-key="description"]');if(!e)continue;const o=e.textContent?.trim();if(!o)continue;const a=t.getAttribute("htapi-value");if(!a)continue;const l=i(a,n);if(l&&l.length>0){const e=l.join(" & "),n=document.createElement("mark");if(n.setAttribute("htapi-obj-key","part-size"),n.setAttribute("htapi-obj-value",e),n.textContent=e,t.appendChild(document.createTextNode(" ")),t.appendChild(n),l.length>=2){const e=document.createElement("span"),n=document.createElement("span");e.setAttribute("htapi-obj-key","threadID1"),n.setAttribute("htapi-obj-key","threadID2"),e.setAttribute("htapi-obj-value",l[0]),n.setAttribute("htapi-obj-value",l[1]),t.appendChild(e),t.appendChild(n)}const o=f.get(t);o&&o.remove();continue}const d=o.split("-").slice(1).map((e=>e.includes("x")?e.split("x")[0]:/^[A-Za-z]+$/.test(e)?null:1===e.length?[`0${e}`,e]:e)).filter(Boolean).flat(),u=c(p,0,o,d);u.length>0&&h.set(t,u);const m=o.split("-").slice(1).filter((e=>!/^[A-Za-z]+$/.test(e)&&!e.includes("x"))),g=[...new Set(m)],y=[];for(const e of g){if(!e)continue;const t=1===e.length?`0${e}`:e;let n=null;for(const e of u){if(s(e,t)){const t=["Inch Size","Size","Thread Size","Nominal Size","ID"];for(const o of t){for(const t of Object.keys(e))if(t.includes(o)&&!t.includes("Dash")&&e[t]){n=String(e[t]).trim();break}if(n)break}}if(n)break}n&&!y.includes(n)&&y.push(n)}const b=0===y.length?r(t,n):null,w=y.length>0?y:b;if(w&&w.length>0){const e=w.join(" & "),n=document.createElement("mark");if(n.setAttribute("htapi-obj-key","part-size"),n.setAttribute("htapi-obj-value",e),n.textContent=e,t.appendChild(document.createTextNode(" ")),t.appendChild(n),w.length>=2){const e=document.createElement("span"),n=document.createElement("span");e.setAttribute("htapi-obj-key","threadID1"),n.setAttribute("htapi-obj-key","threadID2"),e.setAttribute("htapi-obj-value",w[0]),n.setAttribute("htapi-obj-value",w[1]),t.appendChild(e),t.appendChild(n)}}const S=f.get(t);S&&S.remove()}for(const[e,t]of h.entries()){const n=document.createElement("ul");n.style.margin="0",n.style.paddingLeft="20px";const o=[];for(const e of t){let t=!1;for(const n of o)if(a(e,n)){t=!0;break}t||o.push(e)}o.forEach(((e,t)=>{if(t>0){const e=document.createElement("li");e.style.listStyleType="none",e.style.borderTop="1px solid #ddd",e.style.margin="8px 0",n.appendChild(e)}Object.entries(e).forEach((([e,t])=>{if(null!=t&&"sourceLink"!==e&&!e.toLowerCase().includes("sku")&&!e.toLowerCase().includes("part #")){const o=document.createElement("li");o.style.listStyleType="none",o.textContent=`${e}: ${t}`,n.appendChild(o)}}))}));const s=document.createElement("details");s.addEventListener("click",(e=>{e.stopPropagation()}));const r=document.createElement("summary");r.textContent="Specifications",r.style.fontWeight="bold",r.style.cursor="pointer",s.appendChild(r),s.appendChild(n);const i=document.createElement("div");i.className="dept-item-specs",i.style.marginTop="10px",i.style.fontSize="0.9em",i.appendChild(s);const c=e.querySelector('a[htapi-obj-key="description"]').parentElement;c&&c.appendChild(i)}f.forEach((e=>e.remove()))}),0)}));
Contact Us
Frequently Asked Questions
Add to Favorites
Accessibility
Return Policy
Recent Blogs
Call for More Information
×