Skip to content
Send All sessions
Compose message
To required
Subject
Link to ticket / page (what they need to complete)
Message
Notes (context, deadlines, anything they should know)
Shortened:

Message sent

Your message was delivered and Mike was CC'd automatically.

'; } // ── SEND ───────────────────────────────────────────────────── function sendEmail(){ if(!_recs.length){toast('Add at least one recipient');return;} var subj=document.getElementById('subj').value.trim(); if(!subj){toast('Add a subject line');document.getElementById('subj').focus();return;} var body=document.getElementById('body').value.trim(); if(!body){toast('Write a message first');document.getElementById('body').focus();return;} var ticketLink=document.getElementById('ticket-link').value.trim(); var notes=document.getElementById('notes').value.trim(); var btn=document.getElementById('btn-send'); btn.innerHTML='
Sending…'; btn.disabled=true; // Resolve recipient list var tos=[]; _recs.forEach(function(r){ if(r.email==='__group_agents__'){ ALL_CONTACTS.filter(function(c){return c.role!=='staff'&&c.email!==MIKE;}).forEach(function(c){tos.push({email:c.email,name:c.name});}); } else if(r.email==='__group_staff__'){ ALL_CONTACTS.filter(function(c){return c.role==='staff'||c.role==='broker';}).forEach(function(c){tos.push({email:c.email,name:c.name});}); } else if(r.email==='__group_all__'){ ALL_CONTACTS.forEach(function(c){tos.push({email:c.email,name:c.name});}); } else { tos.push({email:r.email,name:r.name||r.email}); } }); // dedupe + ensure Mike not in tos (he's CC) var seen={}; tos=tos.filter(function(t){ if(t.email===MIKE||seen[t.email]) return false; seen[t.email]=true; return true; }); var htmlBody=buildEmailHtml(subj,body,tos.map(function(t){return t.name||t.email;}).join(', '),ticketLink,notes); var payload={ to: tos.length===1?tos[0]:tos, cc: [{email:MIKE,name:MIKE_NAME}], subject: subj, html: htmlBody, text: body }; fetch(FN+'/resend-email',{method:'POST',headers:H(),body:JSON.stringify(payload)}) .then(function(r){ if(r.ok||r.status===202){showSuccess(tos.length);} else{r.text().then(function(t){ console.warn('send failed',r.status,t); toast('Send failed ('+r.status+') — check console'); btn.innerHTML=' Send message'; btn.disabled=false; });} }) .catch(function(err){ console.warn('send error',err); toast('Network error — check connection'); btn.innerHTML=' Send message'; btn.disabled=false; }); } function showSuccess(count){ document.querySelector('main').querySelectorAll('.card').forEach(function(c){c.style.display='none';}); var s=document.getElementById('success'); s.classList.add('show'); document.getElementById('s-title').textContent='Message sent to '+(count===1?'1 person':count+' people'); document.getElementById('s-msg').textContent='Your message was delivered. Mike was CC\'d automatically at '+MIKE+'.'; } function resetAll(){ _recs=[]; document.querySelectorAll('.qchip').forEach(function(b){b.classList.remove('on');}); renderChips(); document.getElementById('subj').value=''; document.getElementById('body').value=''; document.getElementById('ticket-link').value=''; document.getElementById('notes').value=''; document.getElementById('suggest-banner').style.display='none'; document.getElementById('long-url').value=''; document.getElementById('short-result').style.display='none'; document.getElementById('email-preview').classList.remove('show'); _prevOpen=false; document.getElementById('prev-lbl').textContent='Preview email'; document.getElementById('success').classList.remove('show'); document.querySelector('main').querySelectorAll('.card').forEach(function(c){c.style.display='';}); var btn=document.getElementById('btn-send'); btn.innerHTML=' Send message'; btn.disabled=false; } // ── HELPERS ────────────────────────────────────────────────── function ins(before,after){ var ta=document.getElementById('body'); var s=ta.selectionStart,e=ta.selectionEnd; var v=ta.value; ta.value=v.slice(0,s)+before+v.slice(s,e)+after+v.slice(e); ta.selectionStart=s+before.length; ta.selectionEnd=e+before.length; ta.focus();updatePreview(); } function esc(s){return String(s==null?'':s).replace(/[<>&"']/g,function(c){return{'<':'<','>':'>','&':'&','"':'"',"'":'''}[c];});} function toast(msg){var t=document.getElementById('toast');t.textContent=msg;t.classList.add('show');setTimeout(function(){t.classList.remove('show');},2400);} // Deep-link: ?to=all-agents|email&subject=...&body=...&ticket=...¬es=... (function(){ var p=new URLSearchParams(location.search); var to=p.get('to'); if(to){ if(to.indexOf('@')>=0){ addContact(to,to); } // explicit email (from PureAssign) else { setGroup(to); } // a quick group } if(p.get('subject')) document.getElementById('subj').value=decodeURIComponent(p.get('subject')); if(p.get('body')) document.getElementById('body').value=decodeURIComponent(p.get('body')); if(p.get('ticket')) document.getElementById('ticket-link').value=decodeURIComponent(p.get('ticket')); if(p.get('notes')) document.getElementById('notes').value=decodeURIComponent(p.get('notes')); })(); // Expose global API for any session to call programmatically window.PureSend={ open:function(opts){ opts=opts||{}; if(opts.to) setGroup(opts.to); if(opts.subject) document.getElementById('subj').value=opts.subject; if(opts.body) document.getElementById('body').value=opts.body; if(opts.email) addContact(opts.email,opts.email); } }; renderChips(); try{if(window.PureStamp) document.getElementById('foot-stamp').textContent='Pure Send · '+PureStamp.format(new Date());}catch(e){} // Click outside dropdown closes it document.addEventListener('click',function(e){ if(!e.target.closest('.rec-wrap')) document.getElementById('rec-dropdown').classList.remove('show'); });