+Number(estimate.total).toFixed(2)+' · '+estimate.status; p.append(summary); if(estimate.status==='sent'){ const approve=document.createElement('button');approve.type='button';approve.className='orbit-live-approve'; approve.textContent='Approve estimate';approve.setAttribute('aria-label','Approve '+(estimate.number||'estimate')); approve.addEventListener('click',async()=>{ if(!confirm('Approve '+(estimate.number||'this estimate')+' for } choices.replaceChildren(); if(data.status==='open' && Array.isArray(data.choices)){ data.choices.forEach(choice=>{ const button=document.createElement('button'); button.type='button'; button.className='orbit-choice'; button.textContent=choice.label; button.addEventListener('click',()=>sendMessage(String(choice.value||choice.label),button)); choices.append(button); }); } choices.hidden=!choices.childElementCount; log.scrollTop=log.scrollHeight; status.textContent=''; setChatMode(true); }catch(e){ if(e.status===403||e.status===404){ chat=null;localStorage.removeItem(key);setChatMode(false);log.replaceChildren();appendIntro(); prechatStatus.textContent='Your previous chat expired. Start a new one.'; }else status.textContent=e.message; } } toggle.onclick=async()=>{ panel.hidden=!panel.hidden; toggle.setAttribute('aria-expanded',String(!panel.hidden)); if(!panel.hidden){await loadConfig();if(chat)await refresh();else{log.replaceChildren();appendIntro();setChatMode(false)}} }; close.onclick=()=>{panel.hidden=true;toggle.setAttribute('aria-expanded','false')}; prechat.onsubmit=async e=>{ e.preventDefault(); const button=prechat.querySelector('button[type=submit]'); const body=document.getElementById('orbit-first-message').value.trim();if(!body)return; const profile=config.authenticated&&config.profile?{ first_name:config.profile.first_name||'', last_name:config.profile.last_name||'', email:config.profile.email||'', company:config.profile.company?.name||'' }:{ first_name:document.getElementById('orbit-first-name').value.trim(), last_name:document.getElementById('orbit-last-name').value.trim(), email:document.getElementById('orbit-email').value.trim(), company:document.getElementById('orbit-company').value.trim() }; button.disabled=true;prechatStatus.textContent='Starting…'; try{ const data=await call(base,'POST',{body,store_id:storeId?Number(storeId):null,...profile}); chat={id:data.conversation_id,token:data.token}; localStorage.setItem(key,JSON.stringify(chat)); if(!config.authenticated)localStorage.setItem(profileKey,JSON.stringify(profile)); document.getElementById('orbit-first-message').value=''; prechatStatus.textContent=''; setChatMode(true); await refresh(); }catch(error){prechatStatus.textContent=error.message} finally{button.disabled=false} }; let sending=false; async function sendMessage(body,selectedButton=null){ if(!body||!chat||sending)return; sending=true; const button=form.querySelector('button[type=submit]'); button.disabled=true; choices.querySelectorAll('button').forEach(b=>b.disabled=true); status.textContent='Sending…'; try{ await call(base+'/'+chat.id+'/messages','POST',{body}); if(!selectedButton)input.value=''; await refresh(); }catch(error){status.textContent=error.message} finally{ sending=false;button.disabled=false; choices.querySelectorAll('button').forEach(b=>b.disabled=false); } } form.onsubmit=e=>{e.preventDefault();sendMessage(input.value.trim())}; input.addEventListener('keydown',e=>{ if(e.key==='Enter'&&!e.shiftKey&&!e.isComposing){ e.preventDefault();sendMessage(input.value.trim()); } }); loadConfig().then(()=>{if(chat)refresh();else appendIntro()}); setInterval(()=>{if(!panel.hidden&&chat&&!sending&&!input.matches(':focus'))refresh()},6000); })(); +Number(estimate.total).toFixed(2)+'?'))return; approve.disabled=true; try{await call(base+'/'+chat.id+'/estimates/'+estimate.id+'/approve','POST',{});await refresh()} catch(error){status.textContent=error.message;approve.disabled=false} }); p.append(approve); } } log.append(p); } choices.replaceChildren(); if(data.status==='open' && Array.isArray(data.choices)){ data.choices.forEach(choice=>{ const button=document.createElement('button'); button.type='button'; button.className='orbit-choice'; button.textContent=choice.label; button.addEventListener('click',()=>sendMessage(String(choice.value||choice.label),button)); choices.append(button); }); } choices.hidden=!choices.childElementCount; log.scrollTop=log.scrollHeight; status.textContent=''; setChatMode(true); }catch(e){ if(e.status===403||e.status===404){ chat=null;localStorage.removeItem(key);setChatMode(false);log.replaceChildren();appendIntro(); prechatStatus.textContent='Your previous chat expired. Start a new one.'; }else status.textContent=e.message; } } toggle.onclick=async()=>{ panel.hidden=!panel.hidden; toggle.setAttribute('aria-expanded',String(!panel.hidden)); if(!panel.hidden){await loadConfig();if(chat)await refresh();else{log.replaceChildren();appendIntro();setChatMode(false)}} }; close.onclick=()=>{panel.hidden=true;toggle.setAttribute('aria-expanded','false')}; prechat.onsubmit=async e=>{ e.preventDefault(); const button=prechat.querySelector('button[type=submit]'); const body=document.getElementById('orbit-first-message').value.trim();if(!body)return; const profile=config.authenticated&&config.profile?{ first_name:config.profile.first_name||'', last_name:config.profile.last_name||'', email:config.profile.email||'', company:config.profile.company?.name||'' }:{ first_name:document.getElementById('orbit-first-name').value.trim(), last_name:document.getElementById('orbit-last-name').value.trim(), email:document.getElementById('orbit-email').value.trim(), company:document.getElementById('orbit-company').value.trim() }; button.disabled=true;prechatStatus.textContent='Starting…'; try{ const data=await call(base,'POST',{body,store_id:storeId?Number(storeId):null,...profile}); chat={id:data.conversation_id,token:data.token}; localStorage.setItem(key,JSON.stringify(chat)); if(!config.authenticated)localStorage.setItem(profileKey,JSON.stringify(profile)); document.getElementById('orbit-first-message').value=''; prechatStatus.textContent=''; setChatMode(true); await refresh(); }catch(error){prechatStatus.textContent=error.message} finally{button.disabled=false} }; let sending=false; async function sendMessage(body,selectedButton=null){ if(!body||!chat||sending)return; sending=true; const button=form.querySelector('button[type=submit]'); button.disabled=true; choices.querySelectorAll('button').forEach(b=>b.disabled=true); status.textContent='Sending…'; try{ await call(base+'/'+chat.id+'/messages','POST',{body}); if(!selectedButton)input.value=''; await refresh(); }catch(error){status.textContent=error.message} finally{ sending=false;button.disabled=false; choices.querySelectorAll('button').forEach(b=>b.disabled=false); } } form.onsubmit=e=>{e.preventDefault();sendMessage(input.value.trim())}; input.addEventListener('keydown',e=>{ if(e.key==='Enter'&&!e.shiftKey&&!e.isComposing){ e.preventDefault();sendMessage(input.value.trim()); } }); loadConfig().then(()=>{if(chat)refresh();else appendIntro()}); setInterval(()=>{if(!panel.hidden&&chat&&!sending&&!input.matches(':focus'))refresh()},6000); })();

Shopping cart

Empty Cart

Your Cart is empty

Go to Shop
Sun, November 8, 2026 LIVE
• Open now: 2026 Chicago Toy & Game Fair Tickets — Rosemont, IL • Open now: Adana Agriculture Fair — Adana, Türkiye • Open now: Adana Agriculture Fair — Adana, Türkiye • Open now: Adana Greenhouse And Garden Fair — Adana, Türkiye • Open now: Adana Greenhouse And Garden Fair — Adana, Türkiye • Open now: Affordable Art Fair - Hamburg — Hamburg, Germany • Upcoming: Accounting & Business Expo KSA — Riyadh, Saudi Arabia • Upcoming: Accounting & Business Expo KSA — Riyadh, Saudi Arabia • Upcoming: Aesthetic Beauty Education Expo — Bristol, United Kingdom • Upcoming: Aesthetic Beauty Education Expo — Bristol, United Kingdom • Upcoming: Banking Transformation Summit USA — Charlotte, NC • Upcoming: Banking Transformation Summit USA — Charlotte, NC • Upcoming: Beauty Elements Exhibition (BEE) — Muscat, Oman • Upcoming: Beauty Elements Exhibition (BEE) — Muscat, Oman • Upcoming: BIO-Europe — Cologne, Germany • Upcoming: BIO-Europe — Cologne, Germany • Upcoming: Cérémonie de Remise des Diplômes de L'ithq — Montreal, Quebec, Canada • Upcoming: Choose Your Own Health Adventure with Snowflake — Dallas, TX • Upcoming: Choose Your Own Health Adventure with Snowflake — Dallas • Upcoming: Connected World KSA — Riyadh, Saudi Arabia
VIEW ALL →
AALSETTIntelligence for What's Next
Login Join

Chelsea Technologies

United Kingdom
Website
About

Chelsea Technologies is a global leader in ocean technology. Our next-generation FastBallast system will be taking centre stage at Asia Pacific Maritime and is poised to modernise ballast water compliance testing. Visit Chelsea Technologies at Asia Pacific Maritime to learn more about how FastBallast provides rapid on-board testing of treated ballast water to ensure compliance with the IMO D-2 Regulations.

Send a message
Your experience on this site will be improved by allowing cookies Cookie Policy