let currentSponsor=null; async function load(){ try{ const [cr,sr]=await Promise.all([fetch('/api/public/config'),fetch('/api/public/current-sponsor')]); const c=await cr.json(); const s=await sr.json(); if(!sr.ok)throw new Error(s.error||'No sponsor assigned'); currentSponsor=s.sponsor; if(c.siteName){document.title=`Get Started | ${c.siteName}`;const bn=document.getElementById('brandName');if(bn)bn.textContent=c.siteName} document.getElementById('sponsorId').textContent=`ID ${currentSponsor.id}`; document.getElementById('sponsorIdInline').textContent=currentSponsor.id; document.getElementById('sponsorName').textContent=currentSponsor.name||'Current Crypto Team Build placement'; document.getElementById('progressText').textContent=`${currentSponsor.directs} / 2`; document.getElementById('progressBar').style.width=`${Math.min(100,(currentSponsor.directs/2)*100)}%`; document.getElementById('entryPol').textContent=c.premiumEntryPol; document.getElementById('entryPol2').textContent=c.premiumEntryPol; document.getElementById('joinButton').href=currentSponsor.referralUrl; document.getElementById('queueText').textContent=c.showQueueProgress?`${s.waitingCount} team placement${s.waitingCount===1?'':'s'} waiting behind the current sponsor.`:''; document.getElementById('supportBox').textContent=c.supportLabel||'Contact your team sponsor if you need help before joining.'; if(c.telegramUrl){const w=document.getElementById('supportLinkWrap'),a=document.getElementById('supportLink');a.href=c.telegramUrl;w.classList.remove('hidden')} }catch(e){ document.getElementById('sponsorName').textContent=e.message; document.getElementById('joinButton').classList.add('hidden'); document.getElementById('copyButton').classList.add('hidden'); } } document.getElementById('joinButton').addEventListener('click',()=>{try{if(currentSponsor)sessionStorage.setItem('ctb.joinedSponsor',currentSponsor.id)}catch(e){};fetch('/api/public/join-click',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({source:window.ctbGetSource?window.ctbGetSource():'(direct)',clickid:window.ctbGetClickId?window.ctbGetClickId():''})}).catch(()=>{})}); document.getElementById('idSubmitForm').addEventListener('submit',async e=>{ e.preventDefault(); const form=e.currentTarget,input=form.elements.newId,msg=document.getElementById('idSubmitMsg'); const newId=input.value.trim(); const memberName=form.elements.memberName.value.trim(); if(!/^[0-9]{1,10}$/.test(newId)){msg.style.color='var(--danger)';msg.textContent='Numbers only — the ID shown by the RM Circle dApp.';return} if(!memberName){msg.style.color='var(--danger)';msg.textContent='Add your name or Telegram handle so the team can reach you.';return} let joinedSponsor='';try{joinedSponsor=sessionStorage.getItem('ctb.joinedSponsor')||''}catch(e){} const sponsorId=joinedSponsor||(currentSponsor?currentSponsor.id:'?'); msg.style.color='var(--muted)';msg.textContent='Submitting…'; try{ const r=await fetch('/api/public/submit-id',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({newId,memberName,sponsorId,source:window.ctbGetSource?window.ctbGetSource():'(direct)',clickid:window.ctbGetClickId?window.ctbGetClickId():''})}); const d=await r.json(); if(!r.ok)throw new Error(d.error||'Submission failed'); form.classList.add('hidden'); msg.style.color='var(--ok)'; let chainNote=''; if(d.onchain&&d.onchain.registered)chainNote=`
✓ Verified on the blockchain: ${d.onchain.tier} tier, ${d.onchain.level} level, referred by ID ${d.onchain.referrerId}.`; else if(d.onchain&&d.onchain.registered===false)chainNote=`
⚠ We couldn't find this ID on the smart contract yet — double-check the number. The team will verify it manually.`; msg.innerHTML=d.duplicate?`✓ ID ${newId} was already submitted — you're on the list.`:`✓ Got it! ID ${newId} is submitted under sponsor ID ${sponsorId}. The team has been notified and you'll be added to the rotation.${chainNote}`; }catch(x){msg.style.color='var(--danger)';msg.textContent=x.message} }); document.getElementById('copyButton').addEventListener('click',async()=>{ if(!currentSponsor)return; await navigator.clipboard.writeText(currentSponsor.id); const b=document.getElementById('copyButton'); const old=b.textContent;b.textContent='Copied ✓';setTimeout(()=>b.textContent=old,1400) }); load();