';
var a=document.createElement('button');a.type='button';a.className='btn';a.textContent='Volgende beschikbare: '+fmt(d.date)+' →';
a.addEventListener('click',function(){sel.date=d.date;if(dateEl)dateEl.value=d.date;renderSlots(d.slots);});
slotsEl.appendChild(a);
} else { slotsEl.innerHTML='Geen beschikbaarheid in de komende weken — neem alstublieft contact op.'; }
}).catch(function(){slotsEl.innerHTML='Geen tijden beschikbaar op die datum — probeer een andere.';});
}
function loadDate(ymd){
sel.date=ymd; sel.time=''; slotsEl.innerHTML='Bezig met laden…';
fetch(availUrl+'?'+q('&date='+encodeURIComponent(ymd))).then(function(r){return r.json();}).then(function(d){
var slots=(d&&d.slots&&typeof d.slots==='object'&&!Array.isArray(d.slots))?d.slots:{};
if(!Object.keys(slots).length){offerNext(ymd);return;}
renderSlots(slots);
}).catch(function(){slotsEl.innerHTML='Kon de tijden niet laden.';});
}
function startDate(){
show('date');
slotsEl.innerHTML='Beschikbare tijden zoeken…';
fetch(nextUrl+'?'+q()).then(function(r){return r.json();}).then(function(d){
if(d&&d.date){sel.date=d.date;if(dateEl)dateEl.value=d.date;renderSlots(d.slots);}
else{slotsEl.innerHTML='Geen beschikbaarheid in de komende weken — neem alstublieft contact op.';}
}).catch(function(){if(dateEl&&dateEl.value)loadDate(dateEl.value);});
}
function loadStaff(){
show('staff'); if(!staffEl)return; staffEl.innerHTML='Bezig met laden…';
fetch(staffUrl+'?service='+encodeURIComponent(sel.service)+'&location='+encodeURIComponent(sel.location||0)).then(function(r){return r.json();}).then(function(list){
staffEl.innerHTML='';
var any=document.createElement('button');any.type='button';any.className='opt';any.innerHTML='Iemand beschikbaar
Eerste vrije afspraak
';
any.addEventListener('click',function(){sel.provider=0;startDate();});staffEl.appendChild(any);
(list||[]).forEach(function(p){var b=document.createElement('button');b.type='button';b.className='opt';b.innerHTML=''+p.name+'';
b.addEventListener('click',function(){sel.provider=p.id;startDate();});staffEl.appendChild(b);});
if(!list||!list.length){var n=document.createElement('div');n.className='none';n.textContent='Geen teamleden bieden dit nog aan.';staffEl.appendChild(n);}
}).catch(function(){staffEl.innerHTML='Kon het team niet laden.';});
}
function afterService(){ sel.provider=0; if(chooseStaff)loadStaff(); else startDate(); }
root.querySelectorAll('.loc[data-id]').forEach(function(b){b.addEventListener('click',function(){
root.querySelectorAll('.loc').forEach(function(x){x.classList.remove('sel');});b.classList.add('sel');
sel.location=parseInt(b.getAttribute('data-id'),10)||0; root.querySelector('#f-location').value=sel.location; show('service');
});});
root.querySelectorAll('.svc[data-id]').forEach(function(b){b.addEventListener('click',function(){
root.querySelectorAll('.svc').forEach(function(x){x.classList.remove('sel');});b.classList.add('sel');
sel.service=b.getAttribute('data-id');sel.name=b.getAttribute('data-name');
root.querySelector('#f-service').value=sel.service; afterService();
});});
dateEl&&dateEl.addEventListener('change',function(){loadDate(dateEl.value);});
root.querySelectorAll('[data-back]').forEach(function(b){b.addEventListener('click',prev);});
var pre=root.querySelector('.svc[data-pre]'); if(pre&&steps[0]==='service')pre.click();
})();
We waarderen je privacyWe gebruiken cookies om je ervaring te verbeteren. Je kunt alles accepteren, niet-essentiële cookies afwijzen, of kiezen welke categorieën je wilt toestaan. Essentiële cookies zijn altijd aan.
Cookievoorkeuren
EssentieelVereist voor de werking van de site. Altijd aan.
AnalyticsHelp ons begrijpen hoe bezoekers de site gebruiken (bijv. Google Analytics).
MarketingGebruikt om advertenties te meten en te targeten (bijv. Meta Pixel, Google Ads).
Toegankelijkheid
Pas deze site aan naar jouw wensen. Je keuzes worden onthouden op dit apparaat.