function openPreview(encryptedPath, id) {
const content = document.getElementById('previewContent' + id);
const modal = document.getElementById('previewModal' + id);
const url = 'filexproxy.php?file=' + encryptedPath;
content.innerHTML = '';
document.getElementById('downloadBtn' + id).href = url;
modal.style.display = 'flex';
}
function closePreview(id) {
document.getElementById('previewModal' + id).style.display = 'none';
document.getElementById('previewContent' + id).innerHTML = '';
}
document.addEventListener('DOMContentLoaded', function() {
// Kalender aus allen Parents raus und direkt ins Body
const kalender = document.getElementById('kalender');
if (kalender && kalender.parentElement !== document.body) {
document.body.appendChild(kalender);
console.log('✅ Kalender in Body verschoben');
}
});
function toggleLangMenu() {
document.getElementById("langMenu").style.display =
document.getElementById("langMenu").style.display === "block" ? "none" : "block";
}
function hideshow(container)
{
if(document.getElementById(container).style.display=='block')
{
document.getElementById(container).style.display='none';
}
else
{
document.getElementById(container).style.display='block';
}
}
function setLang(lang) {
document.querySelector(".lang-btn").innerHTML = lang + " ";
document.getElementById("langMenu").style.display = "none";
// hier kannst du noch redirect oder language-setting einbauen
console.log("Sprache gewählt:", lang);
}
// Klick außerhalb schließt das Menü
document.addEventListener("click", function(e) {
const menu = document.getElementById("langMenu");
const btn = document.querySelector(".lang-btn");
if (!btn.contains(e.target) && !menu.contains(e.target)) {
menu.style.display = "none";
}
});
class ZeitraumAuswahl {
constructor() {
this.zeitraumInput = document.getElementById('zeitraum');
this.kalender = document.getElementById('kalender');
this.monatJahr = document.getElementById('monat-jahr');
this.kalenderGrid = document.getElementById('kalender-grid');
this.kalenderTage = document.getElementById('kalender-tage');
this.datumBereich = document.getElementById('datum-bereich');
this.aktuellerMonat = new Date().getMonth();
this.aktuellesJahr = new Date().getFullYear();
this.vonDatum = null;
this.bisDatum = null;
this.auswahlModus = null;
this.heute = new Date(); // NEU: Heute-Datum speichern
this.heute.setHours(0, 0, 0, 0); // Zeit auf Mitternacht setzen
this.monate = [
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ];
this.initEventListener();
this.erstelleKalender();
}
initEventListener() {
this.zeitraumInput.addEventListener('click', (e) => {
e.stopPropagation();
if (this.kalender.style.display === 'none' || this.kalender.style.display === '') {
this.auswahlModus = 'von';
this.zeigeKalender();
}
});
const kalenderIcon = document.querySelector('.kalender-icon');
if (kalenderIcon) {
kalenderIcon.addEventListener('click', (e) => {
e.stopPropagation();
this.toggleKalender();
});
}
this.kalender.addEventListener('click', (e) => {
e.stopPropagation();
e.preventDefault();
const target = e.target;
if (target.id === 'vorheriger-monat') {
this.aktuellerMonat--;
if (this.aktuellerMonat < 0) {
this.aktuellerMonat = 11;
this.aktuellesJahr--;
}
this.erstelleKalender();
return;
}
if (target.id === 'naechster-monat') {
this.aktuellerMonat++;
if (this.aktuellerMonat > 11) {
this.aktuellerMonat = 0;
this.aktuellesJahr++;
}
this.erstelleKalender();
return;
}
// Tag-Auswahl - NEU: Prüfung ob Tag nicht deaktiviert ist
if (target.dataset && target.dataset.datum && !target.classList.contains('deaktiviert')) {
const datumString = target.dataset.datum;
const datum = this.parseDatum(datumString);
this.waehleTag(datum);
}
});
document.addEventListener('click', (e) => {
if (!this.kalender.contains(e.target) && e.target !== this.zeitraumInput) {
this.versteckeKalender();
}
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
this.versteckeKalender();
}
});
}
setupMonthNavigation() {
// Diese Methode ist nicht mehr nötig, da Event-Delegation verwendet wird
}
zeigeKalender() {
const kalender = document.getElementById('kalender');
const zeitraumInput = document.getElementById('zeitraum');
// 1. Kalender ins Body verschieben (falls nicht schon dort)
if (kalender.parentElement !== document.body) {
document.body.appendChild(kalender);
console.log('✅ Kalender in Body verschoben');
}
// 2. ALLE Styles entfernen
kalender.removeAttribute('style');
// Immer zentriert (vertikal & horizontal)
kalender.style.cssText = `
display: block !important;
position: fixed !important;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
width: calc(100vw - 40px) !important;
max-width: 320px !important;
z-index: 99999 !important;
background: rgba(255, 255, 255, 0.95) !important;
backdrop-filter: blur(20px) !important;
border-radius: 12px !important;
box-shadow: 0 10px 40px rgba(0,0,0,0.2) !important;
`;
console.log('✅ Kalender zentriert angezeigt');
this.aktualisiereBereichsanzeige();
}
versteckeKalender() {
this.kalender.style.display = 'none';
}
toggleKalender() {
if (this.kalender.style.display === 'none' || this.kalender.style.display === '') {
this.auswahlModus = 'von';
this.zeigeKalender();
} else {
this.versteckeKalender();
}
}
aktualisiereBereichsanzeige() {
if (this.vonDatum && this.bisDatum) {
const vonStr = this.formatiereDatumFuerAnzeige(this.vonDatum);
const bisStr = this.formatiereDatumFuerAnzeige(this.bisDatum);
this.datumBereich.textContent = `${vonStr} - ${bisStr}`;
} else if (this.vonDatum) {
this.datumBereich.textContent = `Ab ${this.formatiereDatumFuerAnzeige(this.vonDatum)}`;
} else {
this.datumBereich.textContent = 'Zeitraum auswählen';
}
}
erstelleKalender() {
this.monatJahr.textContent = `${this.monate[this.aktuellerMonat]} ${this.aktuellesJahr}`;
this.kalenderTage.innerHTML = '';
const ersterTag = new Date(this.aktuellesJahr, this.aktuellerMonat, 1);
const letzterTag = new Date(this.aktuellesJahr, this.aktuellerMonat + 1, 0);
const ersterWochentag = (ersterTag.getDay() + 6) % 7;
const vorherigenMonatLetzterTag = new Date(this.aktuellesJahr, this.aktuellerMonat, 0).getDate();
// Vorherige Monatstage
for (let i = ersterWochentag - 1; i >= 0; i--) {
const tag = vorherigenMonatLetzterTag - i;
const tagElement = document.createElement('div');
tagElement.className = 'tag anderer-monat';
tagElement.textContent = tag;
this.kalenderTage.appendChild(tagElement);
}
// Aktuelle Monatstage
const heuteVergleich = new Date();
heuteVergleich.setHours(0, 0, 0, 0);
for (let tag = 1; tag <= letzterTag.getDate(); tag++) {
const datum = new Date(this.aktuellesJahr, this.aktuellerMonat, tag);
datum.setHours(0, 0, 0, 0);
const datumString = this.formatiereDatum(datum);
let klassen = 'tag';
// NEU: Vergangene Tage deaktivieren
if (datum < heuteVergleich) {
klassen += ' deaktiviert';
}
if (datum.toDateString() === heuteVergleich.toDateString()) {
klassen += ' heute';
}
if (this.vonDatum && this.bisDatum) {
if (datum.getTime() === this.vonDatum.getTime()) {
klassen += ' von';
} else if (datum.getTime() === this.bisDatum.getTime()) {
klassen += ' bis';
} else if (datum > this.vonDatum && datum < this.bisDatum) {
klassen += ' zwischen';
}
} else if (this.vonDatum && datum.getTime() === this.vonDatum.getTime()) {
klassen += ' von';
}
const tagElement = document.createElement('div');
tagElement.className = klassen;
tagElement.textContent = tag;
// NEU: Nur bei nicht-deaktivierten Tagen das data-datum Attribut setzen
if (!klassen.includes('deaktiviert')) {
tagElement.dataset.datum = datumString;
}
this.kalenderTage.appendChild(tagElement);
}
// Nächste Monatstage
const gesamtZellen = Math.ceil((ersterWochentag + letzterTag.getDate()) / 7) * 7;
const verbleibendeZellen = gesamtZellen - (ersterWochentag + letzterTag.getDate());
for (let tag = 1; tag <= verbleibendeZellen; tag++) {
const tagElement = document.createElement('div');
tagElement.className = 'tag anderer-monat';
tagElement.textContent = tag;
this.kalenderTage.appendChild(tagElement);
}
}
waehleTag(datum) {
if (!this.vonDatum || (this.vonDatum && this.bisDatum)) {
this.vonDatum = datum;
this.bisDatum = null;
this.aktualisiereZeitraumInput();
} else if (this.vonDatum && !this.bisDatum) {
if (datum < this.vonDatum) {
this.bisDatum = this.vonDatum;
this.vonDatum = datum;
} else {
this.bisDatum = datum;
}
this.aktualisiereZeitraumInput();
setTimeout(() => {
this.versteckeKalender();
}, 200);
}
this.erstelleKalender();
this.aktualisiereBereichsanzeige();
}
aktualisiereZeitraumInput() {
if (this.vonDatum && this.bisDatum) {
const vonStr = this.formatiereDatumFuerInput(this.vonDatum);
const bisStr = this.formatiereDatumFuerInput(this.bisDatum);
this.zeitraumInput.value = `${vonStr} - ${bisStr}`;
} else if (this.vonDatum) {
this.zeitraumInput.value = this.formatiereDatumFuerInput(this.vonDatum);
} else {
this.zeitraumInput.value = '';
}
}
formatiereDatum(datum) {
return datum.getFullYear() + '-' +
(datum.getMonth() + 1).toString().padStart(2, '0') + '-' +
datum.getDate().toString().padStart(2, '0');
}
formatiereDatumFuerInput(datum) {
return datum.getDate().toString().padStart(2, '0') + '.' +
(datum.getMonth() + 1).toString().padStart(2, '0') + '.' +
datum.getFullYear();
}
formatiereDatumFuerAnzeige(datum) {
return datum.getDate().toString().padStart(2, '0') + '.' +
(datum.getMonth() + 1).toString().padStart(2, '0') + '.' +
datum.getFullYear();
}
parseDatum(datumString) {
const teile = datumString.split('-');
return new Date(parseInt(teile[0]), parseInt(teile[1]) - 1, parseInt(teile[2]));
}
}
document.addEventListener('DOMContentLoaded', () => {
new ZeitraumAuswahl();
});
function executeInlScript(action, data, cont) {
$.ajax({
url: 'process.php',
type: 'POST',
data: {
action: action,
data: data,
},
success: function(response) {
// Zeige das Ergebnis im Modal an
//$('#'+cont).html(response);
const sel = (/^[#.]/.test(cont) ? cont : '#'+cont);
const $target = $(sel);
$target.stop(true, true).empty();
$( $.parseHTML(response) ).hide().appendTo($target).fadeIn(150);
},
error: function(xhr, status, error) {
// Fehlerbehandlung
$('#'+cont).html('Ein Fehler ist aufgetreten: ' + error);
}
});
}
function executeInlScriptError(action, data, cont) {
$.ajax({
url: 'process.php',
type: 'POST',
data: {
action: action,
data: data,
},
success: function(response) {
// Zeige das Ergebnis im Modal an
$('#'+cont).html(response);
},
error: function(xhr, status, error) {
// Fehlerbehandlung
$('#'+cont).html('Ein Fehler ist aufgetreten: ' + error);
}
});
}
function executeInlScriptErrorSubmit(action, data, cont) {
$.ajax({
url: 'process.php',
type: 'POST',
data: {
action: action,
data: data,
},
success: function(response) {
// Zeige das Ergebnis im Modal an
$('#'+cont).html(response);
},
error: function(xhr, status, error) {
// Fehlerbehandlung
$('#'+cont).html('Ein Fehler ist aufgetreten: ' + error);
}
});
}
function executeInlScriptAdd(action, data, cont) {
$.ajax({
url: 'process.php',
type: 'POST',
data: {
action: action,
data: data,
},
success: function(response) {
// Zeige das Ergebnis im Modal an
//$('#'+cont).html(response);
const sel = (/^[#.]/.test(cont) ? cont : '#'+cont);
const $target = $(sel);
$( $.parseHTML(response) ).hide().appendTo($target).fadeIn(150);
},
error: function(xhr, status, error) {
// Fehlerbehandlung
$('#'+cont).html('Ein Fehler ist aufgetreten: ' + error);
}
});
}
function inc(id){
var el = document.getElementById(id);
el.value = (parseInt(el.value,10) || 0) + 1;
}
function ReplaceCharacter(String)
{
let newstring = String
.replace("ά","A")
.replace("έ","E")
.replace("ή","H")
.replace("ί","I")
.replace("ό","O")
.replace("ύ","U")
.replace("ώ","Ω")
.replace("ϊ","Ϊ")
.replace("ϋ","Ϋ");
// Nur das kleine ß vorher in ẞ wandeln
newstring = newstring.replace(/ß/g, "ẞ");
// Jetzt alles in Uppercase
newstring = newstring.toUpperCase();
return newstring;
}
// Popup schließen
function schliessePopup() {
const overlay = document.getElementById('error-overlayCO');
overlay.classList.remove('show');
springeZuFeld();
}
// Popup schließen bei Klick auf Overlay
//document.getElementById('error-overlayCO').addEventListener('click', function(e) {
// if (e.target === this) {
// schliessePopup();
// }
//});
// Popup schließen mit ESC
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
schliessePopup();
}
});
function springeZuFeld() {
var feldId=document.getElementById('FirstError').value;
const feld = document.getElementById(feldId);
if (feld) {
// Smooth scroll zum Feld
feld.scrollIntoView({
behavior: 'smooth',
block: 'center'
});
// Kurze Verzögerung für Scroll, dann Fokus
setTimeout(() => {
feld.focus();
// Feld visuell hervorheben
feld.style.transition = 'all 0.3s';
feld.style.borderColor = '#ff6b6b';
feld.style.boxShadow = '0 0 0 4px rgba(255, 107, 107, 0.2)';
// Hervorhebung nach 2 Sekunden entfernen
setTimeout(() => {
feld.style.borderColor = '';
feld.style.boxShadow = '';
}, 4000);
}, 500);
}
}
// Error Handling
/*
document.addEventListener('DOMContentLoaded', function() {
const form = document.getElementById('SWForm'); // Ihre Form-ID hier
const inputs = form.querySelectorAll('input, textarea, select');
inputs.forEach(input => {
console.log('Initialisierung für: ', input.name);
const errorMessage = input.parentElement.querySelector('.error-message');
if (!errorMessage) return; // STOP hier - Rest wird übersprungen
const successMessage = input.parentElement.querySelector('.success-message');
if (!successMessage) return; // STOP hier - Rest wird übersprungen
const isRequired = input.dataset.required === '1'; // Entspricht $Properties["pflichtfeld"]==1
//console.log('Required: ', isRequired);
// Event listener für das Verlassen des Feldes (blur)
input.addEventListener('blur', function() {
//console.log('Validierung für: ', input.name);
validateField(input, errorMessage, successMessage, isRequired);
});
// Event listener für Eingaben (um Fehler zu entfernen)
input.addEventListener('input', function() {
if (input.classList.contains('error') && input.value.trim() !== '') {
clearError(input, errorMessage);
if (isValidInput(input)) {
showSuccess(input, successMessage);
}
}
});
// Event listener für Focus (um Nachrichten zu verstecken)
input.addEventListener('focus', function() {
hideMessages(errorMessage, successMessage);
input.classList.remove('error', 'success');
});
});
function validateField(input, errorMessage, successMessage, isRequired) {
const value = input.value.trim();
// Prüfung nur bei Pflichtfeldern oder wenn Wert eingegeben wurde
if (isRequired && value === '') {
showError(input, errorMessage);
} else if (value !== '' && !isValidInput(input)) {
showError(input, errorMessage);
} else if (value !== '') {
showSuccess(input, successMessage);
}
}
function isValidInput(input) {
const value = input.value.trim();
if (input.type === 'email') {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(value);
}
return value !== '';
}
function showError(input, errorMessage) {
input.classList.add('error');
//input.classList.remove('success');
errorMessage.classList.add('show');
// Verstecke Success Message
//const successMessage = input.closest('.form-group').querySelector('.success-message');
//if (successMessage) {
// successMessage.classList.remove('show');
//}
}
function showSuccess(input, successMessage) {
input.classList.add('success');
input.classList.remove('error');
successMessage.classList.add('show');
// Verstecke Error Message
const errorMessage = input.closest('.form-group').querySelector('.error-message');
if (errorMessage) {
errorMessage.classList.remove('show');
}
}
function clearError(input, errorMessage) {
input.classList.remove('error');
errorMessage.classList.remove('show');
}
function hideMessages(errorMessage, successMessage) {
errorMessage.classList.remove('show');
successMessage.classList.remove('show');
}
});
*/
function initGoogleAddressSearch() {
document.querySelectorAll('input[data-address-search="1"]').forEach(function(input) {
var ac = new google.maps.places.Autocomplete(input, {
types: ['address'],
fields: ['address_components']
});
ac.addListener('place_changed', function() {
var place = ac.getPlace();
if (!place.address_components) return;
var comp = {};
place.address_components.forEach(function(c) {
c.types.forEach(function(t) { comp[t] = c; });
});
var route = comp['route'] ? comp['route'].long_name : '';
var streetNr = comp['street_number'] ? comp['street_number'].long_name : '';
input.value = route + (streetNr ? ' ' + streetNr : '');
var zipBez = input.getAttribute('data-zip-bez');
var cityBez = input.getAttribute('data-city-bez');
var zipEl = zipBez ? document.querySelector('[data-bezeichnung="' + zipBez + '"]') : null;
var cityEl = cityBez ? document.querySelector('[data-bezeichnung="' + cityBez + '"]') : null;
if (zipEl && comp['postal_code']) zipEl.value = comp['postal_code'].long_name;
if (cityEl) cityEl.value = (comp['locality'] || comp['postal_town'] || {long_name: ''}).long_name;
});
});
}
function daten_BlandCheck(land)
{
var BezEl=document.getElementById('BezBland');
if(BezEl)
{
var ChangeTitle='YES';
}
else
{
var ChangeTitle='NO';
}
skript=document.createElement('SCRIPT');
skript.setAttribute('src','daten_BlandCheck.php?land='+land+'&ChangeTitle='+ChangeTitle+'&SID=');
document.getElementsByTagName('BODY')[0].appendChild(skript);
}