`,t.link){let e=document.createElement("a");e.href=t.link,e.setAttribute("data-lang","moreInfo"),e.target="_blank",a.appendChild(e),a.appendChild(document.createElement("br")),a.appendChild(document.createElement("br"))}if(Array.isArray(t.gallery)&&t.gallery.length>0){let n=document.createElement("button");n.textContent="\uD83D\uDCF7",n.classList.add("galleryButton"),n.onclick=()=>openGallery(t.gallery),a.appendChild(n)}"projectOpen"===t.status?a.classList.add("projectOpen"):"projectWIP"===t.status?a.classList.add("projectWIP"):"projectFrozen"===t.status?a.classList.add("projectFrozen"):"projectDone"===t.status&&a.classList.add("projectDone"),projectsContainer.appendChild(a)})}
function updateActiveTag(t){let a=projectsFilterMenu.querySelectorAll("button");a.forEach(a=>{a.textContent===t?a.classList.add("active"):null===t&&"allProjectsButton"===a.dataset.lang?a.classList.add("active"):a.classList.remove("active")})}
function openGallery(e){if(!Array.isArray(e)||0===e.length)return;let t=document.createElement("div");t.classList.add("galleryOverlay");let l=document.createElement("div");l.classList.add("galleryContainer"),e.forEach(e=>{let t=document.createElement("img");t.src=e,l.appendChild(t)});let a=document.createElement("button");a.textContent="\xd7",a.classList.add("closeGallery"),a.onclick=e=>{e.stopPropagation(),t.remove()},t.appendChild(a),t.appendChild(l),t.onclick=e=>{e.target===t&&t.remove()},document.body.appendChild(t)}document.querySelectorAll("#sortSelect .dropdown-option").forEach(e=>{e.addEventListener("click",()=>{let t=e.dataset.sort;currentSort===t?currentDirection="asc"===currentDirection?"desc":"asc":(currentSort=t,currentDirection="asc"),sortByCriteria(currentSort,currentDirection)})}),sortByCriteria(currentSort,currentDirection);
}catch (error){console.error('Fehler beim Laden der Projekte:', error);}
}
// Functions on profile page
async function loadCertificates(){try{let e=document.getElementById("certificatesGallery"),t=await fetch("get-certificates"),i=await t.json(),c="";i.forEach(e=>{c+=`
`}),e.innerHTML=c}catch(a){console.error("Fehler beim Laden der Zertifikate:",a)}}
async function getPartnerships(){try{let r=await fetch("db/partnerships.json"),a=await r.json(),n=document.getElementById("partnersContainer"),t="";a.forEach(r=>{t+=`
`}),n.innerHTML=t}catch(e){console.error("Error loading partnerships:",e)}}
async function loadGallery(){try{let a=document.getElementById("galleryContainer"),e=await fetch("get-images"),l=await e.json();console.log(l);let r="";l.forEach(a=>{r+=``}),closeModal(),a.innerHTML=r}catch(g){console.error("Error loading images:",g)}}
function openModal(e){let t=document.getElementById("imageModal"),l=document.getElementById("modalImage");t.style.display="flex",l.src=e}function closeModal(){let e=document.getElementById("imageModal");e?e.style.display="none":console.error("Modal not found")}window.onclick=function(e){let t=document.getElementById("imageModal");e.target===t&&closeModal()},document.addEventListener("contextmenu",e=>{"IMG"===e.target.tagName&&e.preventDefault()});
// Functions on homepage
async function getNewsTicker() {
try {
const response=await fetch("db/newsTicker.json"),data=await response.json(),newsTicker=document.getElementById("newsTicker");newsTicker.innerHTML="";
data.forEach(item => {
const card = document.createElement('div');
card.classList.add('newsCard');
let mediaElement = '';
switch (item.type) {
case 'audio':
mediaElement = ``;
break;
case 'video':
mediaElement = ``;
break;
case 'image':
mediaElement = ``;
break;
case 'document':
mediaElement = `📄 `;
break;
case 'link':
mediaElement = ``;
break;
case 'external':
mediaElement = ``;
break;
case 'podcast':
mediaElement = ``;
break;
default:
mediaElement = `
`,r.appendChild(t)})}(n)}catch(a){console.error("Fehler beim Laden der Projekte:",a)}}
async function updateMottoMessage(){let e={de:["Solange nicht alles gut ist, liegt der Weg noch vor uns.","Jeder Tag ist eine neue Chance, etwas Gro\xdfartiges zu beginnen.","Wer aufh\xf6rt, besser zu werden, hat aufgeh\xf6rt, gut zu sein.","Visionen werden zur Realit\xe4t, wenn man den ersten Schritt wagt.","Zwischen Idee und Umsetzung liegt nur der Wille.","Dein Weg ist einzigartig – geh ihn mit \xdcberzeugung.","Gro\xdfe Dinge beginnen oft im Kleinen.","Kreativit\xe4t kennt keine Grenzen – nur Anf\xe4nge.","Komm rein und sprich dich aus, geh raus und rede nicht mehr dr\xfcber.","Gl\xfccklich ist, wer kein Gl\xfcck sucht.","Manchmal ist der Umweg der Weg.","Geduld ist nicht Schw\xe4che, sondern St\xe4rke mit Ausdauer.","Stillstand ist nur dann gef\xe4hrlich, wenn man ihn akzeptiert.","Es braucht keine Perfektion, um etwas Bedeutendes zu schaffen.","Mut beginnt dort, wo Zweifel laut werden.","Nicht jede T\xfcr f\xfchrt weiter – manche zeigen nur, wo du nicht hingeh\xf6rst.","Die besten Ideen kommen oft dann, wenn man nicht nach ihnen sucht.","Ver\xe4nderung beginnt mit einem ehrlichen Blick auf sich selbst.","Was du heute denkst, formt dein Morgen.","Tr\xe4ume gro\xdf – aber handle bodenst\xe4ndig."],en:["As long as not everything is good, the journey isn't over yet.","Every day is a new chance to start something great.","Those who stop getting better stop being good.","Visions become reality when you take the first step.","Between idea and execution lies only willpower.","Your path is unique – walk it with confidence.","Great things often start small.","Creativity knows no limits – only beginnings.","Come in and speak out, go out and stop talking about it.","Happy is he who does not seek happiness.","Sometimes the detour is the path.","Patience is not weakness, but strength with endurance.","Stagnation is only dangerous if you accept it.","You don't need perfection to create something meaningful.","Courage begins where doubt gets loud.","Not every door leads forward – some just show where you don't belong.","The best ideas often appear when you're not searching for them.","Change begins with an honest look at yourself.","What you think today shapes your tomorrow.","Dream big – but act grounded."]},n=getCookie("lang")||"en",t=e[n]||e.en,i=Math.floor(Math.random()*t.length);document.getElementById("homeMotto").innerText=t[i]}