Home Showreels Work About Rentals Contact Book Now

Equipment Hire

Cinema-grade gear. Gold Coast & Brisbane.

Hire Catalogue

Ready to Shoot.

Choose your hire duration on each item, add to cart, and send an enquiry. We'll confirm availability and get back to you within 24 hours with a quote and next steps.

Hire Cart

No items added yet.
Enquiry Sent

We've received your hire request and will be in touch within 24 hours to confirm availability and next steps.

// ════════════════════════════════════════ // END CONFIG // ════════════════════════════════════════ // ── Pricing helpers ───────────────────── function calc3(p){ return Math.round(p*2.2/5)*5; } function calc7(p){ return Math.round(p*3.5/5)*5; } // ── Per-card tier state ────────────────── const cardTiers = {}; // id → {tier, customDays} function getCardTier(id){ return cardTiers[id] || {tier:'day', customDays:1}; } function setCardTier(id, tier){ if(!cardTiers[id]) cardTiers[id]={tier:'day',customDays:1}; cardTiers[id].tier = tier; const cr = document.getElementById('cr_'+id); if(cr) cr.classList.toggle('show', tier==='custom'); // update active button styles ['day','3day','week','custom'].forEach(t=>{ const btn=document.getElementById('tb_'+id+'_'+t); if(btn) btn.classList.toggle('active', t===tier); }); updateCardPrice(id); } function setCardCustomDays(id, val){ if(!cardTiers[id]) cardTiers[id]={tier:'custom',customDays:1}; cardTiers[id].customDays = Math.max(1, parseInt(val)||1); updateCardPrice(id); } function getItemPrice(item){ const t=item.tier||'day', d=parseInt(item.customDays)||1; if(t==='3day') return calc3(item.price); if(t==='week') return calc7(item.price); if(t==='custom') return item.price*d; return item.price; } function getDurLabel(item){ const t=item.tier||'day', d=parseInt(item.customDays)||1; if(t==='3day') return '3 Days'; if(t==='week') return 'Weekly (7 days)'; if(t==='custom') return d+' day'+(d!==1?'s':''); return '1 Day'; } function updateCardPrice(id){ const g = GEAR.find(x=>x.id===id); if(!g) return; const {tier,customDays=1} = getCardTier(id); const p3=calc3(g.price), p7=calc7(g.price); let price, dur; if(tier==='3day') {price=p3; dur='3 days';} else if(tier==='week') {price=p7; dur='weekly';} else if(tier==='custom'){price=g.price*(parseInt(customDays)||1); dur=(parseInt(customDays)||1)+' day'+(customDays!==1?'s':'');} else {price=g.price; dur='per day';} const pa=document.getElementById('pa_'+id), pd=document.getElementById('pd_'+id); if(pa) pa.textContent='$'+price.toLocaleString(); if(pd) pd.textContent=dur; } // ── Cart state ─────────────────────────── let cart = []; function isInCart(id){ return cart.some(c=>c.id===id); } function toggleCart(id){ const idx = cart.findIndex(c=>c.id===id); if(idx!==-1){ cart.splice(idx,1); } else { const item = GEAR.find(g=>g.id===id); const {tier,customDays} = getCardTier(id); cart.push({...item, tier, customDays}); } updateCart(); renderGear(); } function removeFromCart(id){ cart = cart.filter(c=>c.id!==id); updateCart(); renderGear(); } function updateCart(){ const cnt=cart.length; document.getElementById('cartCnt').textContent=cnt; document.getElementById('cartFab').classList.toggle('vis',cnt>0); const el=document.getElementById('cartItems'); const footer=document.getElementById('cartFooter'); if(!cnt){ el.innerHTML='
No items added yet.
'; footer.style.display='none'; return; } el.innerHTML = cart.map(item=>{ const price=getItemPrice(item); return `
${item.name}
${getDurLabel(item)}
Remove
$${price.toLocaleString()}
`; }).join(''); const total=cart.reduce((s,item)=>s+getItemPrice(item),0); document.getElementById('cartTot').textContent='$'+total.toLocaleString(); const tiers=[...new Set(cart.map(i=>i.tier||'day'))]; const sub=tiers.map(t=>({day:'1-day rates','3day':'3-day rates',week:'weekly rates',custom:'custom duration'}[t]||t)).join(' + '); document.getElementById('cartTotSub').textContent=sub; footer.style.display='block'; } function openCart(){ document.getElementById('cartOv').classList.add('open'); updateCart(); } function closeCart(){ document.getElementById('cartOv').classList.remove('open'); } // ── Submit enquiry ─────────────────────── async function submitEnquiry(){ const nm=document.getElementById('hireName').value.trim(); const em=document.getElementById('hireEmail').value.trim(); const ph=document.getElementById('hirePhone').value.trim(); const fr=document.getElementById('hireFrom').value; const to=document.getElementById('hireTo').value; const notes=document.getElementById('hireNotes').value.trim(); if(!nm||!em||!ph){alert('Please enter your name, email, and phone.');return;} const btn=document.querySelector('#cartFooter .btn-p'); if(btn){btn.textContent='Sending…';btn.disabled=true;} const total=cart.reduce((s,i)=>s+getItemPrice(i),0); const itemLines=cart.map(i=>`${i.name} — ${getDurLabel(i)} — $${getItemPrice(i).toLocaleString()}`).join('\n'); try { await fetch('https://api.web3forms.com/submit',{ method:'POST', headers:{'Content-Type':'application/json','Accept':'application/json'}, body:JSON.stringify({ access_key:'7da6069c-2311-430f-a729-b8994b50c3b9', subject:`New Equipment Hire Enquiry — ${nm}`, from_name:'Cinestudios Equipment Hire', name:nm, email:em, phone:ph, hire_dates:fr&&to?`${fr} → ${to}`:`Not specified`, equipment_requested:itemLines, estimated_total:'$'+total.toLocaleString(), notes:notes||'None', }) }); } catch(e){console.error(e);} document.getElementById('cartItems').innerHTML=''; document.getElementById('cartFooter').style.display='none'; document.getElementById('cartSuccess').style.display='block'; cart=[]; document.getElementById('cartCnt').textContent=0; document.getElementById('cartFab').classList.remove('vis'); } // ── Render gear grid ───────────────────── const PER_PAGE=12; let filteredGear=[], currentPage=1; function applyFilters(){ const q=document.getElementById('searchInput').value.toLowerCase(); const cat=document.getElementById('catSelect').value; filteredGear=GEAR.filter(g=>{ const matchCat=cat==='all'||g.cat===cat; const matchQ=!q||g.name.toLowerCase().includes(q)||g.desc.toLowerCase().includes(q)||(g.cat&&g.cat.toLowerCase().includes(q)); return matchCat&&matchQ; }); currentPage=1; renderGear(); } function renderGear(){ const start=(currentPage-1)*PER_PAGE, end=start+PER_PAGE; const page=filteredGear.slice(start,end); const el=document.getElementById('eqGrid'); if(!page.length){el.innerHTML='
No equipment found.
';renderPagination();return;} el.innerHTML=page.map(g=>{ const {tier,customDays=1}=getCardTier(g.id); const p3=calc3(g.price),p7=calc7(g.price); const inCart=isInCart(g.id); const initPrice=tier==='3day'?p3:tier==='week'?p7:tier==='custom'?g.price*(parseInt(customDays)||1):g.price; const initDur=tier==='3day'?'3 days':tier==='week'?'weekly':tier==='custom'?(customDays+' days'):'per day'; const img=g.img?`${g.name}`:`
No image
`; return `
${img}
${CATS.find(c=>c.id===g.cat)?.name||g.cat}
${g.name}
${g.desc}
days
$${initPrice.toLocaleString()} ${initDur}
`; }).join(''); renderPagination(); } function renderPagination(){ const total=Math.ceil(filteredGear.length/PER_PAGE); const el=document.getElementById('rentPagination'); if(total<=1){el.innerHTML='';return;} let html=''; if(currentPage>1) html+=``; for(let i=1;i<=total;i++){ if(i===1||i===total||Math.abs(i-currentPage)<=1) html+=``; else if(Math.abs(i-currentPage)===2) html+=''; } if(currentPageNext →`; el.innerHTML=html; } function goPage(p){currentPage=p;renderGear();window.scrollTo({top:document.getElementById('eqGrid').offsetTop-80,behavior:'smooth'});} // ── Init ───────────────────────────────── // Populate category dropdown const catSelect=document.getElementById('catSelect'); CATS.forEach(cat=>{ const opt=document.createElement('option'); opt.value=cat.id; opt.textContent=cat.name; catSelect.appendChild(opt); }); filteredGear=[...GEAR]; renderGear();