Legal Notices

Primetime International operates as a global company across multiple divisions.

All trademarks and brand names referenced remain the property of their respective owners. For legal enquiries, please use the contact page.

This is a general placeholder and will be updated with Primetime International's finalised policy.

(function(){ var d=document; d.documentElement.classList.add('js-on'); function onReady(fn){ if(d.readyState!=='loading'){fn();} else {d.addEventListener('DOMContentLoaded',fn);} } function setupReveal(){ var items=d.querySelectorAll('.reveal,[data-count],.skill'); if(!('IntersectionObserver' in window)){ items.forEach(function(el){el.classList.add('in'); if(el.hasAttribute('data-count'))countUp(el); fillSkill(el);}); return; } var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add('in'); if(e.target.hasAttribute('data-count')) countUp(e.target); if(e.target.classList.contains('skill')) fillSkill(e.target); io.unobserve(e.target); } }); },{threshold:0.15}); items.forEach(function(el){io.observe(el);}); } function countUp(el){ var to=parseFloat(el.getAttribute('data-count'))||0; var suf=el.getAttribute('data-suffix')||''; var dur=1400,start=null; function step(t){ if(!start)start=t; var p=Math.min((t-start)/dur,1); el.textContent=Math.round(p*to)+suf; if(p<1)requestAnimationFrame(step); else el.textContent=to+suf; } requestAnimationFrame(step); } function fillSkill(el){ var f=el.querySelector('.sb-fill'); if(f){ var w=f.getAttribute('data-w')||'0%'; requestAnimationFrame(function(){ f.style.width=w; }); } } function setupLightbox(){ var ov=d.createElement('div'); ov.className='sb-lightbox'; ov.innerHTML='×'; d.body.appendChild(ov); var img=ov.querySelector('img'); d.body.addEventListener('click',function(e){ var hit=e.target.closest('[data-lightbox] img, .lightbox img, .pf-card img, .gallery-grid img, .masonry img, .insta img'); if(hit){ var src=hit.getAttribute('src'); if(src){ img.src=src; ov.classList.add('open'); } return; } if(e.target.classList.contains('sb-lb-close')||e.target.classList.contains('sb-lightbox')){ ov.classList.remove('open'); } }); d.addEventListener('keydown',function(e){ if(e.key==='Escape') ov.classList.remove('open'); }); } function setupFilter(){ d.querySelectorAll('[data-filter-group]').forEach(function(g){ var tabs=g.querySelectorAll('.pf-tab'); tabs.forEach(function(tab){ tab.addEventListener('click',function(){ tabs.forEach(function(t){t.classList.remove('on');}); tab.classList.add('on'); var f=tab.getAttribute('data-filter'); g.querySelectorAll('.pf-item').forEach(function(it){ var show=(f==='*'||it.getAttribute('data-cat')===f); it.style.display=show?'':'none'; }); }); }); }); } function setupSliders(){ d.querySelectorAll('.sb-slider').forEach(function(s){ var track=s.querySelector('.sb-slides'); if(!track||!track.children.length) return; var n=track.children.length, i=0, timer; // dot indicators var dotsWrap=d.createElement('div'); dotsWrap.className='sb-dots'; for(var k=0;k1) s.appendChild(dotsWrap); function sync(){ var bs=dotsWrap.children; for(var j=0;j1) timer=setInterval(function(){ go(i+1); },5000); } sync(); reset(); s.addEventListener('mouseenter',function(){ clearInterval(timer); }); s.addEventListener('mouseleave',reset); }); } function esc(s){ return String(s==null?'':s).replace(/[&<>"]/g,function(c){return {'&':'&','<':'<','>':'>','"':'"'}[c];}); } function setupMusic(){ var M = window.__MUSIC__; if(!M) return; // render the homepage roster from the data var roster = d.querySelector('[data-music-roster]'); if(roster && M.artists){ roster.innerHTML = M.artists.map(function(a){ return '
'+esc(a.name)+'
'+esc(a.genre)+' · '+esc(a.city)+''+esc(a.name)+'▶ View songs
'; }).join(''); } var bar = d.querySelector('.np-bar'); var audio = new Audio(); audio.preload='auto'; var current=null; function fmt(s){ s=Math.floor(s||0); if(!isFinite(s))s=0; var m=Math.floor(s/60); return m+':'+('0'+(s%60)).slice(-2); } function setLabel(){ if(bar&¤t){ var b=bar.querySelector('.meta b'); if(b) b.textContent=current.title+' — '+current.artist; } } function play(){ var p=audio.play(); if(p&&p.catch) p.then(function(){ if(bar)bar.classList.add('playing'); }).catch(function(){ if(bar)bar.classList.remove('playing'); }); } function pause(){ audio.pause(); if(bar)bar.classList.remove('playing'); } function load(track, autoplay){ current=track; audio.src=track.audio; setLabel(); if(autoplay) play(); } audio.addEventListener('timeupdate', function(){ if(bar){ var t=bar.querySelector('.time'); if(t) t.textContent=fmt(audio.currentTime)+' / '+fmt(audio.duration); } }); audio.addEventListener('play', function(){ if(bar)bar.classList.add('playing'); }); audio.addEventListener('pause', function(){ if(bar)bar.classList.remove('playing'); }); if(bar){ var disc=bar.querySelector('.np-disc'); if(disc){ var pp=d.createElement('span'); pp.className='pp'; disc.appendChild(pp); var sync=function(){ pp.textContent = audio.paused ? '▶' : '❚❚'; }; audio.addEventListener('play',sync); audio.addEventListener('pause',sync); sync(); } bar.addEventListener('click', function(e){ e.stopPropagation(); if(audio.paused) play(); else pause(); }); } // featured track loaded + autoplay attempt; if blocked, start on first interaction if(M.featured){ load(M.featured, false); play(); } function firstInteract(){ if(audio.paused && current) play(); d.removeEventListener('pointerdown', firstInteract); d.removeEventListener('keydown', firstInteract); } d.addEventListener('pointerdown', firstInteract); d.addEventListener('keydown', firstInteract); // artist modal var modal=d.createElement('div'); modal.className='sb-modal'; modal.innerHTML='
'; d.body.appendChild(modal); function openArtist(id){ var a=(M.artists||[]).filter(function(x){return x.id===id;})[0]; if(!a) return; modal.querySelector('img').src=a.image||''; modal.querySelector('.sb-modal-head b').textContent=a.name; modal.querySelector('.sb-modal-head span').textContent=(a.genre||'')+' · '+(a.city||''); var list=modal.querySelector('.sb-songs'); list.innerHTML=''; (a.songs||[]).forEach(function(s){ var row=d.createElement('div'); row.className='sb-song'; row.innerHTML='
'; row.querySelector('.t b').textContent=s.title; row.querySelector('.t span').textContent=a.name; row.querySelector('.dur').textContent=s.duration||''; row.querySelector('.play').addEventListener('click', function(){ load({title:s.title, artist:a.name, audio:s.audio}, true); list.querySelectorAll('.sb-song').forEach(function(r){ r.classList.remove('playing'); }); row.classList.add('playing'); }); list.appendChild(row); }); modal.classList.add('open'); } d.body.addEventListener('click', function(e){ var card=e.target.closest('[data-artist-id]'); if(card){ openArtist(card.getAttribute('data-artist-id')); return; } if(e.target.classList.contains('sb-modal')||e.target.classList.contains('sb-modal-close')) modal.classList.remove('open'); }); d.addEventListener('keydown', function(e){ if(e.key==='Escape') modal.classList.remove('open'); }); } function setupTimers(){ d.querySelectorAll('.sb-timer').forEach(function(t){ var mins=parseInt(t.getAttribute('data-mins'),10)||60; var deadline=Date.now()+mins*60000; var h=t.querySelector('[data-h]'), m=t.querySelector('[data-m]'), s=t.querySelector('[data-s]'); function pad(n){ return (n<10?'0':'')+n; } function tick(){ var diff=Math.max(0, deadline-Date.now()), sec=Math.floor(diff/1000); if(h) h.textContent=pad(Math.floor(sec/3600)); if(m) m.textContent=pad(Math.floor((sec%3600)/60)); if(s) s.textContent=pad(sec%60); if(diff>0) setTimeout(tick,1000); } tick(); }); } // Lead-capture popup: timed + exit-intent + click triggers. Activates only // when a [data-popup] element exists. Shows once per session per page. function setupPopup(){ var p=d.querySelector('[data-popup]'); if(!p) return; var key='cf_pop_'+(location.pathname||'/'); function seen(){ try{return sessionStorage.getItem(key);}catch(e){return false;} } function mark(){ try{sessionStorage.setItem(key,'1');}catch(e){} } function open(){ p.classList.add('open'); } function close(){ p.classList.remove('open'); } function auto(){ if(seen())return; open(); mark(); } var delay=parseInt(p.getAttribute('data-delay'),10); if(!isFinite(delay))delay=15; setTimeout(auto, delay*1000); d.addEventListener('mouseout', function(e){ if(e.clientY<=0 && !e.relatedTarget) auto(); }); d.addEventListener('click', function(e){ if(e.target.closest('[data-popup-open]')){ e.preventDefault(); open(); } else if(e.target.closest('[data-popup-close]') || e.target===p) close(); }); d.addEventListener('keydown', function(e){ if(e.key==='Escape') close(); }); } // Sticky CTA bar: reveals after the visitor scrolls. Activates if .scta exists. function setupStickyBar(){ var bar=d.querySelector('.scta'); if(!bar) return; function on(){ if(window.pageYOffset>520) bar.classList.add('show'); else bar.classList.remove('show'); } window.addEventListener('scroll', on, {passive:true}); on(); bar.addEventListener('click', function(e){ if(e.target.closest('[data-scta-close]')) bar.classList.add('hide'); }); } // Image resilience: primary photos are real (Unsplash). If a photo can't load // (e.g. the network blocks the image CDN) we swap it for a clean, theme-coloured // image panel — deterministic, never a random stock photo, never a broken icon. function setupImgFallback(){ function soft(w,h){ var c=(getComputedStyle(d.body).getPropertyValue('--primary')||'#3b66d9').trim()||'#3b66d9'; var cw=Math.round(w*0.42), ch=Math.round(h*0.42), cx=Math.round((w-cw)/2), cy=Math.round((h-ch)/2); var s="" +"" +"" +"" +"" +"" +"" +""; return "data:image/svg+xml,"+encodeURIComponent(s); } [].forEach.call(d.querySelectorAll('img'),function(im){ var src=String(im.getAttribute('src')||''); if(!src || src.indexOf('data:')===0) return; // skip empty-src imgs (e.g. the lightbox) if(im.closest && im.closest('.sb-lightbox')) return; var w=(im.getAttribute('width')|0)||im.clientWidth||800; var h=(im.getAttribute('height')|0)||im.clientHeight||600; function fail(){ im.onerror=null; im.src=soft(Math.max(200,w),Math.max(150,h)); } im.addEventListener('error',fail); if(im.complete && im.naturalWidth===0) fail(); }); } // Make every contact / newsletter / enquiry form actually work. Any form that // isn't already natively posting to /lead (e.g. starter blocks with // onsubmit="return false") is captured and submitted to /lead via fetch, so // the message lands in the Leads inbox. Fixes older saved pages too. function setupForms(){ [].forEach.call(d.querySelectorAll('form'), function(f){ var action=(f.getAttribute('action')||'').trim(); var inlineBlocked=f.getAttribute('onsubmit'); // Leave true native lead forms alone — they post and redirect on their own. if(action.indexOf('/lead')===0 && !inlineBlocked) return; if(!f.querySelector('input,textarea')) return; f.setAttribute('action','/lead'); f.setAttribute('method','post'); f.removeAttribute('onsubmit'); f.addEventListener('submit', function(e){ e.preventDefault(); var body=new URLSearchParams(); [].forEach.call(f.querySelectorAll('input,textarea,select'), function(el){ if(el.type==='submit'||el.type==='button') return; var key=el.getAttribute('name'); if(!key){ var ph=((el.getAttribute('placeholder')||el.getAttribute('aria-label')||'')+'').toLowerCase(); var ty=(el.type||'').toLowerCase(); if(ty==='email'||/email|e-mail/.test(ph)) key='email'; else if(ty==='tel'||/phone|mobile|number|whatsapp/.test(ph)) key='phone'; else if(el.tagName==='TEXTAREA'||/message|help|comment|enquir|inquir|tell us/.test(ph)) key='message'; else if(/name/.test(ph)) key='name'; else key='message'; } if(el.value) body.append(key, el.value); }); if(!body.has('source')) body.append('source', (d.title||'Website')+' — contact form'); var btn=f.querySelector('button,[type=submit]'); var orig=btn?btn.innerHTML:''; if(btn){ btn.disabled=true; btn.innerHTML='Sending…'; } fetch('/lead',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:body.toString()}) .then(function(r){ return r.ok||r.status<400 ? true : Promise.reject(); }) .then(function(){ f.innerHTML='
Thanks — we've received your message and will be in touch shortly.
'; }) .catch(function(){ if(btn){btn.disabled=false;btn.innerHTML=orig;} alert('Sorry, something went wrong. Please try again.'); }); }); }); } // Donation widget: amount chips + one-time/monthly toggle + PAN (for 80G). Composes // a message/source then submits natively to /lead so the donation intent is captured. function setupDonate(){ [].forEach.call(d.querySelectorAll('[data-donate]'), function(f){ var amtInput=f.querySelector('[name=amount]'), freqInput=f.querySelector('[name=frequency]'), custom=f.querySelector('[data-custom]'); f.addEventListener('click', function(e){ var a=e.target.closest&&e.target.closest('[data-amt]'); if(a){ e.preventDefault(); [].forEach.call(f.querySelectorAll('[data-amt]'),function(b){b.classList.remove('on');}); a.classList.add('on'); var v=a.getAttribute('data-amt'); if(v==='custom'){ if(custom){ custom.style.display=''; custom.focus(); } if(amtInput) amtInput.value=''; } else { if(custom) custom.style.display='none'; if(amtInput) amtInput.value=v; } return; } var fr=e.target.closest&&e.target.closest('[data-freq]'); if(fr){ e.preventDefault(); [].forEach.call(f.querySelectorAll('[data-freq]'),function(b){b.classList.remove('on');}); fr.classList.add('on'); if(freqInput) freqInput.value=fr.getAttribute('data-freq'); } }); if(custom) custom.addEventListener('input', function(){ if(amtInput) amtInput.value=custom.value; }); f.addEventListener('submit', function(){ var amt=(amtInput&&amtInput.value)||'', freq=(freqInput&&freqInput.value)||'one-time'; var panEl=f.querySelector('[name=pan]'), pan=(panEl&&panEl.value)||''; var msg=f.querySelector('[name=message]'); if(msg) msg.value='Donation: \u20b9'+amt+' ('+freq+')'+(pan?' \u00b7 PAN: '+pan:''); var src=f.querySelector('[name=source]'); if(src) src.value='Donation \u20b9'+amt+' ('+freq+')'; }); }); } onReady(function(){ setupReveal(); setupLightbox(); setupFilter(); setupSliders(); setupMusic(); setupTimers(); setupPopup(); setupStickyBar(); setupImgFallback(); setupForms(); setupDonate(); }); })();