راسلنا

يسعدنا استقبال أسئلتك واقتراحاتك.

نموذج التواصل

بالإرسال، توافق على التواصل عبر البريد.

موقعنا – Bundoora

La Trobe University – Bundoora Campus

(function(){ // سنة الحقوق const y=document.getElementById('year'); if(y){ y.textContent = new Date().getFullYear(); } // منيو + وصولية const menuBtn = document.getElementById('menu-toggle'); const primaryNav = document.getElementById('primary-nav'); const mq = window.matchMedia('(min-width:901px)'); function setMenu(open){ if(!menuBtn || !primaryNav) return; primaryNav.setAttribute('data-open', String(open)); menuBtn.setAttribute('aria-expanded', String(open)); primaryNav.setAttribute('aria-hidden', String(!open && !mq.matches)); if(open){ (primaryNav.querySelector('a,button') || menuBtn).focus(); } } function initMenu(){ setMenu(false); if(primaryNav){ primaryNav.setAttribute('aria-hidden', mq.matches ? 'false' : 'true'); } } initMenu(); menuBtn?.addEventListener('click', ()=>{ const open = primaryNav.getAttribute('data-open')==='true'; setMenu(!open); }); mq.addEventListener('change', e=>{ setMenu(false); primaryNav.setAttribute('aria-hidden', e.matches ? 'false' : 'true'); }); document.addEventListener('click', (e)=>{ const open = primaryNav.getAttribute('data-open')==='true'; const t=e.target; if(open && t instanceof Node && !primaryNav.contains(t) && !menuBtn.contains(t)) setMenu(false); }); document.addEventListener('keydown', (e)=>{ if(e.key==='Escape') setMenu(false); }); primaryNav.addEventListener('click', (e)=>{ const link = (e.target instanceof Element)? e.target.closest('a'):null; if(link) setMenu(false); }); // تبديل اللغة + تزامن const langBtn = document.getElementById('lang-toggle'); function currentLang(){ return localStorage.getItem('khotwa_lang')==='en' ? 'en' : 'ar'; } function setLang(lang){ document.querySelectorAll('[data-lang]').forEach(el=>{ const want = el.getAttribute('data-lang')===lang; el.hidden = !want; el.setAttribute('aria-hidden', String(!want)); }); document.documentElement.lang = (lang==='ar')?'ar':'en'; document.documentElement.dir = (lang==='ar')?'rtl':'ltr'; langBtn?.setAttribute('aria-pressed', String(lang!=='ar')); if(langBtn) langBtn.textContent = (lang==='ar')?'English':'العربية'; const t = document.querySelector('title[data-lang="'+lang+'"]'); if(t) document.title = t.textContent.trim(); localStorage.setItem('khotwa_lang', lang); } setLang(currentLang()); langBtn?.addEventListener('click', ()=> setLang(currentLang()==='ar'?'en':'ar')); // بوب-أب const popup = document.getElementById('popup'); function show(msg, ok=true){ popup.textContent = msg; popup.className = 'popup ' + (ok ? 'success' : 'error'); popup.style.display = 'block'; setTimeout(()=> popup.style.display = 'none', 4000); } // تحقّق بسيط للنموذج + إرسال const form = document.getElementById('contact-form'); const submitBtn = document.getElementById('submit-btn'); const emailRe = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i; function setErr(id, msg){ const input = document.getElementById(id); const errEl = document.getElementById('err-'+id); if(!input || !errEl) return; const has = Boolean(msg); input.setAttribute('aria-invalid', String(has)); errEl.textContent = msg || ''; errEl.setAttribute('aria-live', has ? 'polite' : ''); if(!has) errEl.removeAttribute('aria-live'); } function validate(){ const lang = document.documentElement.lang || 'ar'; const t = (ar,en)=> lang==='ar' ? ar : en; let ok = true; const name = document.getElementById('name').value.trim(); const email = document.getElementById('email').value.trim(); const message = document.getElementById('message').value.trim(); setErr('name', name ? '' : t('الرجاء كتابة الاسم','Please enter your name')); ok = ok && Boolean(name); setErr('email', emailRe.test(email) ? '' : t('بريد غير صالح','Invalid email')); ok = ok && emailRe.test(email); setErr('message', message ? '' : t('اكتب رسالتك','Please write your message')); ok = ok && Boolean(message); return ok; } form.addEventListener('input', (e)=>{ const id = e.target.id; if(['name','email','message'].includes(id)) validate(); }); form.addEventListener('submit', async (e)=>{ e.preventDefault(); if(!validate()) { const firstInvalid = form.querySelector('[aria-invalid="true"]'); if(firstInvalid) firstInvalid.focus(); return; } const data = new FormData(form); // honeypot if(data.get('_gotcha')){ show((document.documentElement.lang==='ar')?'تم حظر الإرسال':'Submission blocked', false); return; } submitBtn.disabled = true; submitBtn.style.opacity = .7; try{ const res = await fetch(form.action, { method:'POST', body:data, headers:{'Accept':'application/json'} }); if(res.ok){ show((document.documentElement.lang==='ar')?'تم الإرسال بنجاح ✅':'Sent successfully ✅', true); form.reset(); ['name','email','message'].forEach(id=> setErr(id,'')); }else{ show((document.documentElement.lang==='ar')?'تعذّر الإرسال ❌':'Submission failed ❌', false); } }catch{ show((document.documentElement.lang==='ar')?'خطأ بالشبكة ❌':'Network error ❌', false); }finally{ submitBtn.disabled = false; submitBtn.style.opacity = 1; } }); })(); </script> <!-- CMS --> <!-- الميزات المحسّنة --> <link rel="stylesheet" href="/assets/features.css"> <script src="/assets/features.js" defer></script> <script src="/assets/pagination.js"></script> <script src="/assets/advanced-filters.js"></script> <script src="/assets/feedback.js"></script> <script src="/assets/newsletter.js"></script> <script src="/assets/form-validation.js"></script> <script src="/assets/admin-button.js"></script> <script src="/assets/feedback-button.js"></script> <script src="js/config.js"></script> <script src="js/settings-loader.js"></script> <script src="/js/language-toggle.js"></script> <script src="js/menu-toggle.js"></script> <script src="/assets/site-settings-loader.js"></script> </body> </html>