document.addEventListener('DOMContentLoaded', ()=> {
if(window.innerWidth > 767) return;
const container=document.querySelector('.ae-vacation-grid');
if(!container) return;
const countryBlocks=container.querySelectorAll('.ae-vacation-country-block');
requestAnimationFrame(()=> {
const containerTop=container.offsetTop;
for (const block of countryBlocks){
const header=block.querySelector('.ae-vacation-country-name');
if(header&&header.textContent.trim().toLowerCase().startsWith('nederland')){
container.scrollTop=header.offsetTop - containerTop;
break;
}}
});
const items=container.querySelectorAll('.ae-vacation-item');
let currentActive=null;
const observer=new IntersectionObserver(entries=> {
entries.forEach(entry=> {
if(entry.isIntersecting){
if(currentActive) currentActive.classList.remove('is-active');
entry.target.classList.add('is-active');
currentActive=entry.target;
}});
}, {
root: container,
threshold: 0.65
});
items.forEach(item=> observer.observe(item));
const originalHTML=container.innerHTML;
let scrollPending=false;
container.addEventListener('scroll', ()=> {
if(scrollPending) return;
scrollPending=true;
requestAnimationFrame(()=> {
scrollPending=false;
const scrollTop=container.scrollTop;
const clientHeight=container.clientHeight;
const scrollHeight=container.scrollHeight;
if(scrollTop + clientHeight >=scrollHeight - 10){
container.insertAdjacentHTML('beforeend', originalHTML);
}else if(scrollTop <=5){
container.insertAdjacentHTML('afterbegin', originalHTML);
container.scrollTop +=1;
}});
}, { passive: true });
});
(function (){
var WIDGET_URL='https://ticket.anglingescapes.nl/modules/chat/js/widget.js?v=3941';
var ANCHOR_ID='ae-freescout-anchor';
var loadingState=null;
function setupFreeScoutConfig(){
var lang=(document.documentElement.lang||'en').toLowerCase().split('-')[0];
if(['nl', 'de', 'en', 'es', 'fr', 'it'].indexOf(lang)===-1){
lang='en';
}
window.FreeScoutW={
s: {
color: '#ff7900',
position: 'br',
locale: lang,
require: [],
id: 1271802239
}};}
function getOrCreateAnchor(){
var anchor=document.getElementById(ANCHOR_ID);
if(!anchor){
anchor=document.createElement('span');
anchor.id=ANCHOR_ID;
anchor.style.cssText=[
'position:fixed',
'bottom:20px',
'right:20px',
'width:1px',
'height:1px',
'opacity:0',
'pointer-events:none',
'z-index:-1'
].join(';');
document.body.appendChild(anchor);
}
return anchor;
}
function tryOpenChat(){
if(!window.FreeScoutW||typeof window.FreeScoutW.show!=='function'){
return false;
}
var anchor=getOrCreateAnchor();
try {
window.FreeScoutW.show(anchor, false);
rebrandPoweredBy();
return true;
} catch (e){
console.warn('[FreeScout] show() faalde:', e);
return false;
}}
var rebrandDone=false;
function rebrandPoweredBy(){
function patchOnce(){
var links=document.querySelectorAll('a[href*="freescout"], a[href*="FreeScout"]');
var changed=0;
links.forEach(function (link){
if(link.id===ANCHOR_ID) return;
link.href='https://www.altenasolutions.com';
link.textContent='altenasolutions.com';
link.title='altenasolutions.com';
link.target='_blank';
link.rel='noopener';
changed++;
});
document.querySelectorAll('*').forEach(function (el){
if(el.children.length===0&&/freescout/i.test(el.textContent) &&
!/altenasolutions/i.test(el.textContent)){
el.textContent=el.textContent.replace(/freescout/gi, 'altenasolutions.com');
changed++;
}});
return changed;
}
var attempts=0;
var poll=setInterval(function (){
attempts++;
if(patchOnce() > 0||attempts >=20){
clearInterval(poll);
}}, 250);
if(rebrandDone) return;
rebrandDone=true;
var observer=new MutationObserver(function (){
patchOnce();
});
observer.observe(document.body, { childList: true, subtree: true });
}
function loadWidget(callback){
if(loadingState===true){
if(callback) callback();
return;
}
if(Array.isArray(loadingState)){
loadingState.push(callback);
return;
}
loadingState=[callback];
setupFreeScoutConfig();
var script=document.createElement('script');
script.async=true;
script.id='freescout-w';
script.src=WIDGET_URL;
script.onload=function (){
var attempts=0;
var maxAttempts=100;
var poll=setInterval(function (){
attempts++;
if(window.FreeScoutW&&typeof window.FreeScoutW.show==='function'){
clearInterval(poll);
var queued=loadingState;
loadingState=true;
queued.forEach(function (cb){ if(cb) cb(); });
}else if(attempts >=maxAttempts){
clearInterval(poll);
console.warn('[FreeScout] FreeScoutW.show niet beschikbaar na 5s', window.FreeScoutW);
}}, 50);
};
script.onerror=function (){
console.error('[FreeScout] widget.js kon niet worden geladen');
loadingState=null;
};
document.head.appendChild(script);
}
window.aeOpenChat=function (){
loadWidget(function (){
if(!tryOpenChat()){
console.warn('[FreeScout] kon chat-paneel niet openen', window.FreeScoutW);
}});
};})();
document.addEventListener('DOMContentLoaded', function (){
const body=document.body;
const masthead=document.getElementById('masthead');
const toggleBtn=document.querySelector('.toggle-mnu');
const headerNav=document.querySelector('.header-nav');
if(toggleBtn&&headerNav&&masthead){
toggleBtn.addEventListener('click', function (e){
e.preventDefault();
e.stopPropagation();
toggleBtn.classList.toggle('is-open');
headerNav.classList.toggle('is-open');
masthead.classList.toggle('menu-open');
body.classList.toggle('menu-open');
});
document.addEventListener('click', function (){
toggleBtn.classList.remove('is-open');
headerNav.classList.remove('is-open');
masthead.classList.remove('menu-open');
body.classList.remove('menu-open');
});
headerNav.addEventListener('click', function (e){
e.stopPropagation();
});
}
document.querySelectorAll('.toggle-submenu').forEach(toggle=> {
toggle.addEventListener('click', function (e){
e.preventDefault();
e.stopPropagation();
const parent=this.closest('.visvakantie-menu');
document.querySelectorAll('.visvakantie-menu.is-open')
.forEach(menu=> {
if(menu!==parent) menu.classList.remove('is-open');
});
parent.classList.toggle('is-open');
});
});
const langToggle=document.querySelector('.lang-toggle');
const langMenu=document.querySelector('.menu-lang');
if(langToggle&&langMenu){
langToggle.addEventListener('click', function (e){
e.preventDefault();
e.stopPropagation();
langMenu.classList.toggle('is-open');
});
document.addEventListener('click', function (){
langMenu.classList.remove('is-open');
});
langMenu.addEventListener('click', function (e){
e.stopPropagation();
});
}});
document.addEventListener('DOMContentLoaded', function (){
const fields=document.querySelectorAll('.ae-dropdown-field');
fields.forEach(field=> {
const select=field.querySelector('.ae-select');
const valueEl=field.querySelector('.ae-value');
const radios=field.querySelectorAll('input[type="radio"]');
if(!select) return;
select.addEventListener('click', function (e){
e.preventDefault();
e.stopPropagation();
fields.forEach(f=> f!==field&&f.classList.remove('is-open'));
field.classList.toggle('is-open');
});
radios.forEach(radio=> {
radio.addEventListener('change', function (){
const label=field.querySelector(`label[for="${radio.id}"]`);
if(label){
valueEl.textContent=label.textContent.trim();
}
field.classList.add('is-selected');
field.classList.remove('is-open');
});
});
});
document.addEventListener('click', function (){
fields.forEach(field=> field.classList.remove('is-open'));
});
});
document.addEventListener('DOMContentLoaded', ()=> {
const months=[
'januari','februari','maart','april','mei','juni',
'juli','augustus','september','oktober','november','december'
];
function initDateBlock(block, baseDate, isFrom=false){
const dayEl=block.querySelector('.day');
const monthEl=block.querySelector('.month');
const yearEl=block.querySelector('.year');
const today=new Date();
const startYear=today.getFullYear();
for (let y=startYear; y <=startYear + 3; y++){
yearEl.add(new Option(y, y));
}
months.forEach((m, i)=> {
monthEl.add(new Option(m, i + 1));
});
function updateDays(){
dayEl.innerHTML='';
const y=+yearEl.value;
const m=+monthEl.value;
const days=new Date(y, m, 0).getDate();
for (let d=1; d <=days; d++){
dayEl.add(new Option(d, d));
}
if(+dayEl.value > days) dayEl.value=days;
}
function autoFixPastMonth(){
if(!isFrom) return;
if(+yearEl.value===today.getFullYear() &&
+monthEl.value - 1 < today.getMonth()
){
yearEl.value=today.getFullYear() + 1;
}}
function setDate(date){
yearEl.value=date.getFullYear();
monthEl.value=date.getMonth() + 1;
updateDays();
dayEl.value=date.getDate();
}
yearEl.addEventListener('change', updateDays);
monthEl.addEventListener('change', ()=> {
autoFixPastMonth();
updateDays();
});
setDate(baseDate);
return {
getDate: ()=>
new Date(+yearEl.value, +monthEl.value - 1, +dayEl.value),
setDate
};}
const today=new Date();
const from=initDateBlock(
document.querySelector('.date-block.from'),
today,
true
);
const to=initDateBlock(
document.querySelector('.date-block.to'),
new Date(today.getTime() + 7 * 86400000)
);
function syncHidden(){
const f=from.getDate();
const t=to.getDate();
const fmt=d =>
d.getFullYear() + '-' +
String(d.getMonth()+1).padStart(2,'0') + '-' +
String(d.getDate()).padStart(2,'0');
document.getElementById('start_date').value=fmt(f);
document.getElementById('end_date').value=fmt(t);
}
document
.querySelectorAll('.date-block.from select')
.forEach(sel=> {
sel.addEventListener('change', ()=> {
const newTo=new Date(from.getDate().getTime() + 7 * 86400000);
to.setDate(newTo);
syncHidden();
});
});
document
.querySelectorAll('.date-block select')
.forEach(sel=> sel.addEventListener('change', syncHidden));
syncHidden();
const dateWrapper=document.querySelector('.vtype');
const dateSelects=document.querySelectorAll('.date-block select');
if(!dateWrapper||!dateSelects.length) return;
function updateDateSelectedState(){
let allFilled=true;
dateSelects.forEach(sel=> {
if(!sel.value||sel.value==='0'){
allFilled=false;
}});
if(allFilled){
dateWrapper.classList.add('is-selected');
}else{
dateWrapper.classList.remove('is-selected');
}}
dateSelects.forEach(sel=> {
sel.addEventListener('change', updateDateSelectedState);
});
updateDateSelectedState();
});
document.addEventListener('DOMContentLoaded', function (){
document
.querySelectorAll('.VisvakantieCountrySlider, .VisvakantieTypeSlider')
.forEach(slider=> {
const track =
slider.querySelector('.VisvakantieCountrySlider__track') ||
slider.querySelector('[data-slider-track]');
const btnPrev =
slider.querySelector('.VisvakantieCountrySlider__btn--prev') ||
slider.querySelector('[data-slider-prev]');
const btnNext =
slider.querySelector('.VisvakantieCountrySlider__btn--next') ||
slider.querySelector('[data-slider-next]');
if(!track||!btnPrev||!btnNext) return;
let scrollAmount=280;
if(slider.classList.contains('VisvakantieTypeSlider') &&
window.matchMedia('(min-width: 769px)').matches
){
const slide=track.querySelector('.VisvakantieTypeSlider__slide');
if(slide){
const gap=parseInt(getComputedStyle(track).gap||0, 10);
scrollAmount=(slide.offsetWidth + gap) * 3;
}}
btnNext.addEventListener('click', ()=> {
track.scrollBy({ left: scrollAmount, behavior: 'smooth' });
});
btnPrev.addEventListener('click', ()=> {
track.scrollBy({ left: -scrollAmount, behavior: 'smooth' });
});
let isDragging=false;
let startX=0;
let startScrollLeft=0;
track.addEventListener('mousedown', (e)=> {
if(e.button!==0) return;
isDragging=true;
startX=e.pageX;
startScrollLeft=track.scrollLeft;
track.classList.add('is-dragging');
e.preventDefault();
});
track.addEventListener('mousemove', (e)=> {
if(!isDragging) return;
const delta=e.pageX - startX;
track.scrollLeft=startScrollLeft - delta;
});
track.addEventListener('mouseup', ()=> {
isDragging=false;
track.classList.remove('is-dragging');
});
track.addEventListener('mouseleave', ()=> {
isDragging=false;
track.classList.remove('is-dragging');
});
let touchStartX=0;
let touchScrollStart=0;
track.addEventListener('touchstart', (e)=> {
touchStartX=e.touches[0].pageX;
touchScrollStart=track.scrollLeft;
}, { passive: true });
track.addEventListener('touchmove', (e)=> {
const delta=e.touches[0].pageX - touchStartX;
track.scrollLeft=touchScrollStart - delta;
}, { passive: true });
});
});