' +
'
';
document.body.appendChild(overlay);
return overlay;
}
function openModal(){
var overlay = ensureModal();
overlay.classList.add('is-open');
overlay.setAttribute('aria-hidden','false');
document.documentElement.style.overflow = 'hidden';
// Fokus ins erste Feld
var first = overlay.querySelector('#rfa-vorname');
if (first) first.focus();
}
function closeModal(){
var overlay = document.getElementById('rfa-booking-overlay');
if (!overlay) return;
overlay.classList.remove('is-open');
overlay.setAttribute('aria-hidden','true');
document.documentElement.style.overflow = '';
}
function bindOnce(){
var btn = document.getElementById('rfa-angebot-buchen');
if (!btn) return;
if (btn.dataset.modalBound) return;
btn.dataset.modalBound = "1";
btn.addEventListener('click', function(e){
e.preventDefault();
openModal();
});
document.addEventListener('click', function(e){
var overlay = document.getElementById('rfa-booking-overlay');
if (!overlay || !overlay.classList.contains('is-open')) return;
// Klick auf Overlay (außerhalb Modal) schließt
if (e.target === overlay) closeModal();
});
document.addEventListener('keydown', function(e){
var overlay = document.getElementById('rfa-booking-overlay');
if (!overlay || !overlay.classList.contains('is-open')) return;
if (e.key === 'Escape') closeModal();
});
// Delegated handler im Modal
document.addEventListener('click', function(e){
var overlay = document.getElementById('rfa-booking-overlay');
if (!overlay) return;
if (e.target && e.target.closest && e.target.closest('.rfa-modal-close')) closeModal();
if (e.target && e.target.id === 'rfa-cancel') closeModal();
});
document.addEventListener('submit', function(e){
if (!e.target || e.target.id !== 'rfa-booking-form') return;
e.preventDefault();
var uuid = getUuidFromUrl();
var msgEl = document.getElementById('rfa-form-msg');
var submitBtn = document.getElementById('rfa-submit');
if (!uuid) {
if (msgEl) { msgEl.className='rfa-form-msg err'; msgEl.textContent='Fehler: Keine UUID in der URL.'; }
return;
}
if (!window.RFA_BOOKING || !window.RFA_BOOKING.ajaxurl || !window.RFA_BOOKING.nonce) {
if (msgEl) { msgEl.className='rfa-form-msg err'; msgEl.textContent='Fehler: Booking-Konfiguration (Nonce/Ajaxurl) fehlt.'; }
return;
}
var form = e.target;
var fd = new FormData(form);
fd.append('action', 'rfa_send_booking_request');
fd.append('nonce', window.RFA_BOOKING.nonce);
fd.append('uuid', uuid);
if (msgEl) { msgEl.className='rfa-form-msg'; msgEl.textContent='Sende…'; }
if (submitBtn) submitBtn.disabled = true;
fetch(window.RFA_BOOKING.ajaxurl, {
method: 'POST',
body: fd,
credentials: 'same-origin',
headers: { 'Accept': 'application/json' }
})
.then(function(r){ return r.json().catch(function(){ return null; }); })
.then(function(res){
if (!res) throw new Error('Non-JSON response');
if (res.success) {
if (msgEl) { msgEl.className='rfa-form-msg ok'; msgEl.textContent='Danke! Deine Anfrage wurde versendet.'; }
form.reset();
// nach kurzer Zeit schließen
setTimeout(closeModal, 900);
} else {
var m = (res.data && res.data.message) ? res.data.message : 'Senden fehlgeschlagen.';
if (msgEl) { msgEl.className='rfa-form-msg err'; msgEl.textContent=m; }
}
})
.catch(function(){
if (msgEl) { msgEl.className='rfa-form-msg err'; msgEl.textContent='Technischer Fehler beim Senden.'; }
})
.finally(function(){
if (submitBtn) submitBtn.disabled = false;
});
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', bindOnce);
} else {
bindOnce();
}
})();
' +
'' +
'
' +
'
";
var form = new FormData();
form.append("action", "rfa_detail");
form.append("uuid", uuid);
fetch("/wp-admin/admin-ajax.php", {
method: "POST",
body: form,
credentials: "same-origin",
headers: {"Accept":"application/json"}
})
.then(function(r){ return r.json(); })
.then(function(data){
if (data && data.errors && data.errors.length) {
console.log("RFA cert GraphQL errors:", data.errors);
box.innerHTML = "Zertifiziert im Zeitraum:";
html += "
Zertifikate konnten nicht geladen werden.
";
return;
}
var f = data && data.data && data.data.facility;
var cd = f && f.certificate_data ? f.certificate_data : null;
if (!cd) {
box.innerHTML = "";
return;
}
var from = monthYear(cd.certified_from);
var to = monthYear(cd.certified_to);
var icons = [];
// 1) Haupt-Zertifikat-Icon (de bevorzugt)
if (cd.certificate_type) {
var mainIcon = cd.certificate_type.icon_url_de || cd.certificate_type.icon_url_en || "";
if (mainIcon) {
icons.push({
src: mainIcon,
alt: cd.certificate_type.label_de || cd.certificate_type.label_en || "Barrierefreiheit geprüft",
className: "rfa-cert-icon--main"
});
}
}
// 2) Gruppen-Icons (nur wenn icon_url vorhanden)
var groups = [
["walking", "Gehbehinderung"],
["wheelchair", "Rollstuhlfahrer"],
["deaf", "gehörlose Menschen"],
["partially_deaf", "Menschen mit Hörbehinderung"],
["visual", "blinde Menschen"],
["partially_visual", "Menschen mit Sehbehinderung"],
["mental", "Menschen mit kognitiven Beeinträchtigungen"]
];
for (var i=0; i" + esc((from || "") + (from && to ? " - " : "") + (to || "")) + "
"; } if (icons.length) { html += ""; } box.innerHTML = html || ""; }) .catch(function(err){ console.log("RFA cert fetch failed:", err); box.innerHTML = "Zertifikate konnten nicht geladen werden.
";
});
}
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", init);
else init();
})();
";
return;
}
var facility = data && data.data && data.data.facility;
var bd = facility && facility.base_data ? facility.base_data : null;
if (!bd) {
box.innerHTML = "
"; if (addr.street) html += esc(addr.street) + "
"; if (zip || city) html += esc((zip + " " + city).trim()) + "
"; if (bd.phone || bd.fax || bd.email || website) html += "
"; if (bd.phone) { html += "
";
}
if (licence) {
html += "Kontakt konnte nicht geladen werden.
";
return;
}
var addr = bd.address || {};
var website = normalizeWebsite(bd.website);
// optional hübsch: PLZ trimmen
var zip = (addr.zipcode || "").trim();
var city = (addr.city || "").trim();
var html = "";
if (bd.name_de) html += "" + esc(bd.name_de) + ""; if (addr.street) html += esc(addr.street) + "
"; if (zip || city) html += esc((zip + " " + city).trim()) + "
"; if (bd.phone || bd.fax || bd.email || website) html += "
"; if (bd.phone) { html += "
Telefonnummer:
" + esc(bd.phone) + "
";
}
if (bd.fax) {
html += "" + esc(bd.phone) + "
Faxnummer:
" + esc(bd.fax) + "
";
}
if (bd.email) {
html += "" + esc(bd.fax) + "
E-Mail-Adresse:
" + esc(bd.email) + "
";
}
if (website) {
html += "" + esc(bd.email) + "
Website:
" + esc(website) + "
";
}
box.innerHTML = html || "" + esc(website) + "
Keine Kontaktdaten verfügbar.
";
})
.catch(function(err){
console.log("RFA Detail contact fetch failed:", err);
box.innerHTML = "Kontakt konnte nicht geladen werden.
";
});
}
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", init);
else init();
})();
" + esc(licence) + "
";
}
el.innerHTML = html || "Keine Angaben vorhanden.
";
})
.catch(function(err){
console.log("Fetch failed:", err);
});
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", init);
} else {
init();
}
})();