138 lines
5.0 KiB
JavaScript
138 lines
5.0 KiB
JavaScript
/**
|
|
* Main Script - Profice Website
|
|
* All API calls go through server-side PHP
|
|
* Includes fallback for local file access (no server)
|
|
*
|
|
* @version 2.1.0
|
|
*/
|
|
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
|
|
const API_ENDPOINT = 'scripts/add/send.php';
|
|
const isLocalFile = window.location.protocol === 'file:';
|
|
|
|
// ==========================================
|
|
// 1. SMOOTH SCROLLING
|
|
// ==========================================
|
|
|
|
function initSmoothScrolling() {
|
|
document.querySelectorAll('a[href^="#"]').forEach(link => {
|
|
link.addEventListener('click', function(e) {
|
|
const targetId = this.getAttribute('href');
|
|
if (targetId === '#') return;
|
|
|
|
const targetElement = document.querySelector(targetId);
|
|
if (targetElement) {
|
|
e.preventDefault();
|
|
const header = document.querySelector('.top-banner');
|
|
const headerHeight = header ? header.offsetHeight : 90;
|
|
|
|
window.scrollTo({
|
|
top: targetElement.offsetTop - headerHeight - 20,
|
|
behavior: 'smooth'
|
|
});
|
|
|
|
history.pushState(null, null, targetId);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
initSmoothScrolling();
|
|
|
|
// ==========================================
|
|
// 2. MENU TOGGLE
|
|
// ==========================================
|
|
|
|
const menuToggle = document.getElementById('menuToggle');
|
|
const slideMenu = document.getElementById('slideMenu');
|
|
const overlay = document.getElementById('overlay');
|
|
|
|
if (menuToggle && slideMenu && overlay) {
|
|
const toggleMenu = () => {
|
|
menuToggle.classList.toggle('active');
|
|
slideMenu.classList.toggle('active');
|
|
overlay.classList.toggle('active');
|
|
};
|
|
menuToggle.addEventListener('click', toggleMenu);
|
|
overlay.addEventListener('click', toggleMenu);
|
|
}
|
|
|
|
// ==========================================
|
|
// 3. LOGIN BUTTON (REMOVED)
|
|
// ==========================================
|
|
|
|
// Login button functionality has been removed
|
|
|
|
// ==========================================
|
|
// 4. FORM SUBMISSION
|
|
// ==========================================
|
|
|
|
const contactForm = document.getElementById('contactForm');
|
|
const successMessage = document.getElementById('successMessage');
|
|
|
|
if (contactForm) {
|
|
contactForm.addEventListener('submit', async function(e) {
|
|
e.preventDefault();
|
|
|
|
const getValue = (id) => {
|
|
const el = document.getElementById(id);
|
|
return el ? el.value : '';
|
|
};
|
|
|
|
const serviceSelect = document.getElementById('service');
|
|
const selectedServiceText = serviceSelect ?
|
|
serviceSelect.options[serviceSelect.selectedIndex].text : 'Dienstleistung';
|
|
|
|
const formData = {
|
|
type: 'contact',
|
|
name: getValue('name'),
|
|
organisation: getValue('organisation'),
|
|
contact: getValue('contact'),
|
|
service: getValue('service'),
|
|
budget: getValue('budget'),
|
|
description: getValue('description')
|
|
};
|
|
|
|
// Always store locally for dashboard
|
|
try {
|
|
const localLead = {
|
|
id: Date.now(),
|
|
datum: new Date().toLocaleDateString('de-DE'),
|
|
dienstleistung: selectedServiceText,
|
|
status: 'open',
|
|
statusText: 'Offen',
|
|
description: formData.description
|
|
};
|
|
const existingLeads = JSON.parse(localStorage.getItem('myLeads') || '[]');
|
|
existingLeads.unshift(localLead);
|
|
localStorage.setItem('myLeads', JSON.stringify(existingLeads.slice(0, 100)));
|
|
} catch (err) {}
|
|
|
|
// Send to API if not local file
|
|
if (!isLocalFile) {
|
|
try {
|
|
const response = await fetch(API_ENDPOINT, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(formData)
|
|
});
|
|
const result = await response.json();
|
|
|
|
if (!result.success) {
|
|
alert('Fehler beim Senden: ' + (result.message || 'Unbekannter Fehler'));
|
|
return;
|
|
}
|
|
} catch (error) {
|
|
alert('Netzwerkfehler beim Senden des Formulars');
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Show success
|
|
contactForm.style.display = 'none';
|
|
if (successMessage) successMessage.classList.add('show');
|
|
contactForm.reset();
|
|
});
|
|
}
|
|
}); |