PageSourceSearch

https://www.qbeyond.de/js/custom.js?v=1.06

js qbeyond.de collected 2026-10-02 03:30:49 UTC 26,693 bytes, 734 lines download raw bytes

1$(document).ready(function () {
2
3	$('.first-button').on('click', function () {
4		$('.animated-icon1').toggleClass('open');
5	});
6
7	new WOW().init();
8
9	jarallax(document.querySelectorAll('.jarallax'), {
10		speed: 0.4
11	});
12
13	$(".filter .filter-nav .btn").on("click", function () {
14		var $filter = $(this).data('filter');
15		$(".filter .filter-nav .active").removeClass('active');
16		$(this).addClass('active');
17		$(".filter .item").hide();
18		$(".filter ." + $filter).show();
19	});
20
21
22	/* 2021-03-17 sa */
23	$("a.softscroll[href^='#']").click(function () {
24		//console.log("1");
25		if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
26			&& location.hostname == this.hostname) {
27			// this = der Merklisten-Link
28
29			/* location.hostname: www.qbeyond.de
30			location.pathname: /s4hana-transformation-launchpad/
31			this.hostname: www.qbeyond.de */
32
33			/* querying data-attribute is a compatibility hack for collapse script */
34			if (this.hash.length && $(this).data('toggle') != 'collapse') {
35				var $target = $(this.hash);
36				// https://www.qbeyond.de/s4hana-transformation-launchpad/#konfigurieren
37				// $(this.hash) = jQuery-Element, dessen ID im Fragment angegeben ist
38
39				$target = $target.length && $target || $('[name=' + this.hash.slice(1) + ']');
40				if ($target.length) {
41					//console.log("2");
42					var targetOffset = $target.offset().top - 95;
43					$('html,body').animate({ scrollTop: targetOffset }, 800);
44					// Folgeproblem: mit return false verhindert dieses Klick-Event die Dianlogeinblendung. Das Formular geht dann nicht mehr auf.
45					// ##### Lösung insgesamt: href="#" aus dem Link zur Merkliste entfernen, ersetzen durch javascript:void(0) #####
46					return false;
47				}
48			}
49		}
50	});
51
52
53});
54
55/*
56// Funktioniert nicht, weil alle Elemente mit display: none ein offsetTop von 0 haben.
57// Kurzes Ein- und ausblenden des Elements klappt auch nicht, weil display: block dann inline
58// am Element hängt und ds AOS-Skript den Block nicht mehr einblenden kann. Vgl. Datenschutzseite
59
60$( window ).on( "load", function() {
61	console.log("window loaded");
62	var $target = $(window.location.hash);
63	$target = $target.length && $target;
64	if ($target.length) {
65		var targetOffset = $target.offset().top-100;
66		$('html,body').animate({scrollTop: targetOffset}, 800);
67		console.log("scrolled to target: " + window.location.hash);
68		return false;
69	}
70
71}); */
72
73function validateContact() {
74	var errors = 0;
75
76	var nameReg = /^[a-zA-Z\s,.'-\pL]+$/;
77	var specialReg = /[\<\<\$\\\/\;]/; // not allowed
78
79	var fn = $('#form_vorname').val();
80	var ln = $('#form_nachname').val();
81	var com = $('#form_company').val();
82	//var pho = $('#form_phone').val();
83	var em = $('#form_email').val();
84	//  var pos = $('#form_position').val();
85	var mes = $('#form_message').val();
86	//var st = $('#street').val();
87	//var zi = $('#zip').val();
88	//var ci = $('#city').val();
89	var an = $('input:radio[name="formhandler[salutation]"]:checked').val();
90	var doi = $('input:checkbox[name="formhandler[optinemailviaw2l]"]:checked').val();
91	//console.log("doi value: "+doi);
92	//  if ($('input:radio[name="formhandler[optinemailviaw2l]"]').is( ":checked")) {  console.log("doi value: "+doi); }
93	//  var tn = $('input:radio[name="formhandler[teilnahme]"]:checked').val();
94	//var coun = $('#thiscland').val();
95
96	if (fn == "" || specialReg.test(fn)) { errors++; $('#form_vorname').addClass("is-invalid"); console.log("vorname"); } else { $('#form_vorname').removeClass("is-invalid"); }
97	if (ln == "" || specialReg.test(ln)) { errors++; $('#form_nachname').addClass("is-invalid"); console.log("nachname"); } else { $('#form_nachname').removeClass("is-invalid"); }
98	if (com == "" || specialReg.test(com)) { errors++; $('#form_company').addClass("is-invalid"); console.log("firma"); } else { $('#form_company').removeClass("is-invalid"); }
99	//if(pos == "" || specialReg.test(pos)) {errors++; $('#form_position').addClass("is-invalid");console.log("position");} else {$('#form_position').removeClass("is-invalid");}
100	//  if(pho == "" || specialReg.test(pho)) {errors++; $('#form_phone').addClass("is-invalid");console.log("telefon");} else {$('#form_phone').removeClass("is-invalid");}
101	if (em == "" || specialReg.test(em)) { errors++; $('#form_email').addClass("is-invalid"); console.log("email"); } else { $('#form_email').removeClass("is-invalid"); }
102	//if(mes == "" || specialReg.test(mes)) {errors++; $('#form_message').addClass("is-invalid");console.log("email");} else {$('#form_email').removeClass("is-invalid");}
103	//if(st == "" || specialReg.test(st)) {errors++; $('#street').addClass("is-invalid");console.log("street");} else {$('#street').removeClass("is-invalid");}
104	//if(zi == "" || specialReg.test(zi)) {errors++; $('#zip').addClass("is-invalid");console.log("zip");} else {$('#zip').removeClass("is-invalid");}
105	//if(ci == "" || specialReg.test(ci)) {errors++; $('#city').addClass("is-invalid");console.log("city");} else {$('#city').removeClass("is-invalid");}
106	if (an != "Herr" && an != "Frau" && an != "") { errors++; $('#form-anrede-label').addClass("is-invalid"); console.log("anrede"); } else { $('#form-anrede-label').removeClass("is-invalid"); }
107	if (doi != "1") { errors++; $('#form-einwilligung1-label').addClass("is-invalid"); console.log("DOI"); } else { $('#form-einwilligung1-label').removeClass("is-invalid"); }
108	//  if(tn != "Ja" &&  tn != "Nein") {errors++;$('#teilnahme_label').addClass("is-invalid");console.log("teilnahme");} else {$('#teilnahme_label').removeClass("is-invalid");}
109	/* if(coun != "") {errors++;console.log("country");} */
110
111	//console.log("an:"+an);
112	//console.log("tn:"+tn);
113	if (errors > 0) {
114		console.log("errors:" + errors);
115		$("#form-kontakt-reply").html("<div class='alert alert-danger'>
115Es sind leider Fehler aufgetreten. Bitte füllen Sie alle Pflichtfelder aus. (" + errors + ")</div>");
116		return false;
117	}
118	else {
119		return true;
120	}
121
122}
123
124function validateNewsletter() {
125	var errors = 0;
126	var nameReg = /^[a-zA-Z\s,.'-\pL]+$/;
127	var specialReg = /[\<\<\$\\\/\;]/; // not allowed
128
129	var fn = $('#toolbar-newsletter-firstname').val();
130	var ln = $('#toolbar-newsletter-lastname').val();
131	var em = $('#toolbar-newsletter-email').val();
132	//var sl = $('.anrede:checked').prop('id');
133
134	// if (typeof (sl) == 'undefined') {
135	// 	errors++;
136	// 	$('#toolbar-newsletter-salutation').addClass("is-invalid");
137	// 	console.log("anrede");
138	// }
139	// else {
140	// 	$('#toolbar-newsletter-salutation').removeClass("is-invalid");
141	// }
142	if (/*fn == "" || */ specialReg.test(fn)) {
143		errors++;
144		$('#toolbar-newsletter-firstname').addClass("is-invalid");
145		console.log("vorname");
146	}
147	else {
148		$('#toolbar-newsletter-firstname').removeClass("is-invalid");
149	}
150
151	if (/*ln == "" || */ specialReg.test(ln)) {
152		errors++;
153		$('#toolbar-newsletter-lastname').addClass("is-invalid");
154		console.log("nachname");
155	}
156	else {
157		$('#toolbar-newsletter-lastname').removeClass("is-invalid");
158	}
159
160	if (em == "" || specialReg.test(em)) {
161		errors++;
162		$('#toolbar-newsletter-email').addClass("is-invalid");
163		console.log("email");
164	}
165	else {
166		$('#toolbar-newsletter-email').removeClass("is-invalid");
167	}
168
169	if (errors > 0) {
170		console.log("errors:" + errors);
171		$("#toolbar-newsletter-reply").html("<div class='alert alert-danger'>Es sind leider Fehler aufgetreten. Bitte füllen Sie alle Pflichtfelder aus. (" + errors + ")</div>");
172		return false;
173	}
174	else {
175		return true;
176	}
177}
178
179function contactSubmit() {
180
181	$.ajaxSetup({
182		type: "POST",
183		cache: false
184	});
185
186	var ajax_load = "<img class='loading' src='/fileadmin/lps/img/icon_ajax-waiting-l.gif' alt='loading...' />";
187
188	$("#form-kontakt-reply").html(ajax_load);
189	var jqxhr = $.post("contact.php", $("#form-kontakt").serialize(), function (returnData) {
190		var o = returnData;
191		o = o.replace(/\s+$/, '');  // remove trailing whitespace
192
193		if (!o.match("^\<\!--")) {
194			$("#form-content").slideUp("slow");
195			$("#modal-footer").slideUp("slow");
196		}
197		//erst checken ob o --> A:0
198		$("#form-kontakt-reply").html("<div class='alert alert-success' id='formSubmitSuccess' data-label='qbeyond.de - Kontakt - primary formSubmitSuccess'><b>Vielen Dank für ihre Anfrage</b><br>Sie erhalten in Kürze eine Bestätigungsnachricht an die von Ihnen angegebene E-Mail-Adresse. Bitte bestätigen Sie durch den Klick auf den Link in dieser Mail Ihre E-Mail-Adresse und die Einwilligung zur Speicherung Ihrer Daten. Wir werden dann schnellstmöglich Kontakt mit Ihnen aufnehmen.</div>");
199
200		//$("#form-kontakt-reply").html(o);
201		// console.log("o ="+o);
202		// target = $("#intro");
203		// $('html,body').animate({ scrollTop: target.offset().top -50 }, 500);
204	})
205
206		.fail(function (jqXHR, textStatus, errorThrown) {
207			$("#form-kontakt-reply").html("<div class='alert alert-danger'>Es sind leider Fehler aufgetreten. Bitte füllen Sie alle Pflichtfelder aus. (2)</div>");
208			//  console.log("fail");
209		})
210}
211
212function newsletterSubmit() {
213	$.ajaxSetup({
214		type: "POST",
215		encoding: "UTF-8",
216		cache: false
217	});
218	$('#toolbar-newsletter-reply').show().css('height', $('#toolbar-newsletter').innerHeight() + 'px');
219	$('#toolbar-newsletter').hide();
220	$("#toolbar-newsletter-reply").html('<div class="float s-width-24 s-pad-1 m-pad-2"><p>Bitte warten...</p></div>');
221	var jqxhr = $.post(
222		$('#toolbar-newsletter').attr('action'),
223		{
224			formhandler: {
225				token: $('#toolbar-newsletter-token').val(),
226				email: $('#toolbar-newsletter-email').val(),
227				mailaddress: $('#toolbar-newsletter-mailaddress').val(),
228				newslettertype: $('#toolbar-newsletter-type').val(),
229				salutation: $('.anrede:checked').val(),
230				firstname: $('#toolbar-newsletter-firstname').val(),
231				lastname: $('#toolbar-newsletter-lastname').val(),
232				referer: $('#toolbar-newsletter-referer').val(),
233				insurance: $('#toolbar-newsletter-insurance').val()
234			}
235		},
236		function (response, status, xhr) {
237			if (status == 'success') {
238				if (response == 'A') {
239					$('#toolbar-newsletter-reply').html('<div class="alert alert-success" role="alert" id="formSubmitSuccess" data-label="Newsletter - Neue Anmeldung (Anzeige Vielen Dank)">Vielen Dank für Ihre Anmeldung! Sie erhalten unseren Newsletter ab sofort monatlich einmal an die von Ihnen angegebene E-Mail-Adresse.</div>');
240				}
241				else if (response == 'E') {
242					$('#toolbar-newsletter-reply').html('<div class="alert alert-danger" role="alert">Es ist ein Fehler aufgetreten.</div>');
243				}
244				else {
245					$('#toolbar-newsletter-reply').html('<div class="alert alert-warning" role="alert">
245Bitte geben Sie eine gültige E-Mail-Adresse an.</div>');
246				}
247				$('#toolbar-newsletter-reply').delay(5000).hide(0, function () {
248					$('#toolbar-newsletter').show();
249				});
250			} else {
251				$('#toolbar-newsletter-reply').html('<div class="alert alert-danger" role="alert">Es ist ein Fehler aufgetreten.</div>');
252				$('#toolbar-newsletter-reply').delay(5000).hide(0, function () {
253					$('#toolbar-newsletter').show();
254				});
255			}
256		}
257	)
258		.fail(function (jqXHR, textStatus, errorThrown) {
259			$('#toolbar-newsletter-reply').html('<div class="alert alert-danger" role="alert">Es ist ein Fehler aufgetreten.</div>');
260		})
261
262}
263
264function contentIrNewsletterValidate(strFormIdentifier) {
265	var errors = 0;
266	var nameReg = /^[a-zA-Z\s,.'-\pL]+$/;
267	var specialReg = /[\<\<\$\\\/\;]/; // not allowed
268
269	var sl = $('.anrede:checked').prop('id');
270	var fn = $('#' + strFormIdentifier + '-firstname').val();
271	var ln = $('#' + strFormIdentifier + '-lastname').val();
272	var em = $('#' + strFormIdentifier + '-email').val();
273
274	/* if(typeof(sl)=='undefined') {
275		errors++;
276		$('#' + strFormIdentifier + '-salutation').addClass("is-invalid");
277		console.log("anrede");
278	}
279	else {
280		$('#' + strFormIdentifier + '-salutation').removeClass("is-invalid");
281	}
282	if(fn == "" || specialReg.test(fn)) {
283		errors++;
284		$('#' + strFormIdentifier + '-firstname').addClass("is-invalid");
285		console.log("vorname");
286	}
287	else {
288		$('#' + strFormIdentifier + '-firstname').removeClass("is-invalid");
289	}
290
291	if(ln == "" || specialReg.test(ln)) {
292		errors++;
293		$('#' + strFormIdentifier + '-lastname').addClass("is-invalid");
294		console.log("nachname");
295	}
296	else {
297		$('#' + strFormIdentifier + '-lastname').removeClass("is-invalid");
298	} */
299
300	if (em == "" || specialReg.test(em)) {
301		errors++;
302		$('#' + strFormIdentifier + '-email').addClass("is-invalid");
303		console.log("email");
304	}
305	else {
306		$('#' + strFormIdentifier + '-email').removeClass("is-invalid");
307	}
308
309	if (errors > 0) {
310		console.log("errors:" + errors);
311		$('#' + strFormIdentifier + '-reply').html("<div class='alert alert-danger'>Es sind leider Fehler aufgetreten. Bitte füllen Sie alle Pflichtfelder aus. (" + errors + ")</div>");
312		return false;
313	}
314	else {
315		return true;
316	}
317}
318
319function contentIrNewsletterSubmit(strFormIdentifier) {
320	$.ajaxSetup({
321		type: "POST",
322		encoding: "UTF-8",
323		cache: false
324	});
325	$('#' + strFormIdentifier + '-reply').show().css('height', $('#form-content-newsletterir').innerHeight() + 'px');
326	$('#form-content-newsletterir').hide();
327	$('#' + strFormIdentifier + '-reply').html('<div class="float s-width-24 s-pad-1 m-pad-2"><p>Bitte warten...</p></div>');
328
329	var jqxhr = $.post(
330		$('#form-content-newsletterir').attr('action'),
331		$('#form-content-newsletterir').serialize(),
332		function (response, status, xhr) {
333			// strip trailing white spaces
334			response = response.replace(/\s+$/, '');  // remove trailing whitespace
335			if (status == 'success') {
336				if (response == 'A') {
337					$('#' + strFormIdentifier + '-reply').html('<div style="display: block" class="alert alert-success" role="alert" id="formSubmitSuccess" data-label="Main Website DE IR-Newsletter - primary formSubmitSuccess"><b>Vielen Dank für ihre Anfrage</b><br>Sie erhalten in Kürze eine Bestätigungsnachricht an die von Ihnen angegebene E-Mail-Adresse. Bitte bestätigen Sie durch den Klick auf den Link in dieser Mail Ihre E-Mail-Adresse.</div>');
338				}
339				else if (response == 'C') {
340					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">Listbombing erkannt</div>');
341				}
342				else if (response == 'D') {
343					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">Sie sind schon am Newsletter angemeldet</div>');
344				}
345				else if (response == 'E') {
346					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">Es ist ein Fehler aufgetreten.</div>');
347				}
348				else {
349					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-warning" role="alert">Bitte geben Sie eine gültige E-Mail-Adresse an.</div>');
350				}
351				$('#' + strFormIdentifier + '-reply').delay(5000).hide(0, function () {
352					$('#form-content-newsletterir').show();
353					$('#form-content-newsletterir').trigger("reset");
354				});
355			}
356			else {
357				$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">Es ist ein Fehler aufgetreten.</div>');
358				$('#' + strFormIdentifier + '-reply').delay(5000).hide(0, function () {
359					$('#form-content-newsletterir').show();
360				});
361			}
362		}
363	)
364		.fail(function (jqXHR, textStatus, errorThrown) {
365			$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">Es ist ein Fehler aufgetreten.</div>');
366		})
367
368}
369
370function contentIrEnNewsletterValidate(strFormIdentifier) {
371	var errors = 0;
372	var nameReg = /^[a-zA-Z\s,.'-\pL]+$/;
373	var specialReg = /[\<\<\$\\\/\;]/; // not allowed
374
375	var sl = $('.anrede:checked').prop('id');
376	var fn = $('#' + strFormIdentifier + '-firstname').val();
377	var ln = $('#' + strFormIdentifier + '-lastname').val();
378	var em = $('#' + strFormIdentifier + '-email').val();
379
380	if (em == "" || specialReg.test(em)) {
381		errors++;
382		$('#' + strFormIdentifier + '-email').addClass("is-invalid");
383		console.log("email");
384	}
385	else {
386		$('#' + strFormIdentifier + '-email').removeClass("is-invalid");
387	}
388
389	if (errors > 0) {
390		console.log("errors:" + errors);
391		$('#' + strFormIdentifier + '-reply').html("<div class='alert alert-danger'>Errors have occurred. Please fill in all the required fields. (" + errors + ")</div>");
392		return false;
393	}
394	else {
395		return true;
396	}
397}
398
399function contentIrEnNewsletterSubmit(strFormIdentifier) {
400	$.ajaxSetup({
401		type: "POST",
402		encoding: "UTF-8",
403		cache: false
404	});
405	$('#' + strFormIdentifier + '-reply').show().css('height', $('#form-content-newsletteriren').innerHeight() + 'px');
406	$('#form-content-newsletteriren').hide();
407	$('#' + strFormIdentifier + '-reply').html('<div class="float s-width-24 s-pad-1 m-pad-2"><p>Please wait...</p></div>');
408
409	var jqxhr = $.post(
410		$('#form-content-newsletteriren').attr('action'),
411		$('#form-content-newsletteriren').serialize(),
412		function (response, status, xhr) {
413			// strip trailing white spaces
414			response = response.replace(/\s+$/, '');  // remove trailing whitespace
415			if (status == 'success') {
416				if (response == 'A') {
417					$('#' + strFormIdentifier + '-reply').html('<div style="display: block" class="alert alert-success" role="alert" id="formSubmitSuccess" data-label="Main Website EN IR-Newsletter - primary formSubmitSuccess"><b>Thank you for your request</b><br>You will receive an E-mail from us shortly. Please click on the link in that E-mail to confirm your subscription.</div>');
418				}
419				else if (response == 'C') {
420					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">List bombing detected.</div>');
421				}
422				else if (response == 'D') {
423					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">You are already subscribed to this newsletter.</div>');
424				}
425				else if (response == 'E') {
426					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">An error has occurred.</div>');
427				}
428				else {
429					$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-warning" role="alert">Please specify a valid e-mail address.</div>');
430				}
431				$('#' + strFormIdentifier + '-reply').delay(5000).hide(0, function () {
432					$('#form-content-newsletteriren').show();
433					$('#form-content-newsletteriren').trigger("reset");
434				});
435			}
436			else {
437				$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">An error has occurred.</div>');
438				$('#' + strFormIdentifier + '-reply').delay(5000).hide(0, function () {
439					$('#form-content-newsletteriren').show();
440				});
441			}
442		}
443	)
444		.fail(function (jqXHR, textStatus, errorThrown) {
445			$('#' + strFormIdentifier + '-reply').html('<div class="alert alert-danger" role="alert">An error has occurred.</div>');
446		})
447
448}
449/* ]]> */
450
451$('#form-content-newsletterir').on('submit', function (e) {
452	e.preventDefault();
453	var strFormIdentifier = $(this).data('identifier');
454	if (contentIrNewsletterValidate(strFormIdentifier)) {
455		contentIrNewsletterSubmit(strFormIdentifier);
456	}
457});
458
459$('#form-content-newsletteriren').on('submit', function (e) {
460	e.preventDefault();
461	var strFormIdentifier = $(this).data('identifier');
462	if (contentIrEnNewsletterValidate(strFormIdentifier)) {
463		contentIrEnNewsletterSubmit(strFormIdentifier);
464	}
465});
466
467$('#toolbar-newsletter').on('submit', function (e) {
468	e.preventDefault();
469	if (validateNewsletter()) {
470		newsletterSubmit();
471	}
472});
473
474$("#form-kontakt-submit").click(function () {
475	if (validateContact()) {
476		contactSubmit();
477	}
478});
479
480function _gtmEvent(category, action, label) {
481	/* var uc_GaTrackingAllowed = google_tag_manager['GTM-P46B3SZ'].dataLayer.get('Google Analytics');
482	for(var i=0; i<dataLayer.length; i++) {
483		if(typeof(dataLayer[i].event) !== 'undefined' && dataLayer[i].event=='consents_initialized' || dataLayer[i].event=='consent_changed Google Analytics') {
484			uc_GaTrackingAllowed = true;
485		}
486	} */
487
488	uc_GaTrackingAllowed = false;
489	if (typeof (window.usercentrics) != 'undefined') {
490		uc_GaTrackingAllowed = window.usercentrics.getConsents('xgd9k7PYj').consentStatus;
491	}
492
493	if (dataLayer && category && uc_GaTrackingAllowed) {
494		dataLayer.push({
495			'event': 'gtm.evt_-_custom_event',
496			'eventInfo': {
497				'category': category,
498				'action': action,
499				'label': label,
500				'value': 0,
501				'nonInteraction': false
502			}
503		});
504		//console.log('Category: ' + category + ', Action: ' + action + ', Label: ' +  label);
505	}
506}
507
508/* Get Usercentrics consent status
509Use in combination with waitForGlobal to ensure usercentrics is loaded */
510function getUCConsentStatus(strTemplateId) {
511	if (typeof (window.usercentrics) != 'undefined') {
512		uc_ServiceTrackingAllowed = window.usercentrics.getConsents(strTemplateId).consentStatus;
513	}
514	else uc_ServiceTrackingAllowed = false;
515	return uc_ServiceTrackingAllowed;
516}
517
518/* Load and run external javascript
519usage example:
520_loadExternalScript(pathtoscript, function() {
521	console.log('script ready!');
522}); */
523function _loadExternalScript(url, callback) {
524	var script = document.createElement("script")
525	script.type = "text/javascript";
526	if (script.readyState) {  // only required for IE <9
527		script.onreadystatechange = function () {
528			if (script.readyState === "loaded" || script.readyState === "complete") {
529				script.onreadystatechange = null;
530				callback();
531			}
532		};
533	}
534	else {  //Others
535		script.onload = function () {
536			callback();
537		};
538	}
539
540	script.src = url;
541	document.getElementsByTagName("head")[0].appendChild(script);
542}
543
544/* Wait for global variable to be defined
545usage example:
546waitForGlobal("usercentrics", function() {
547	console.log('variable exists')
548}); */
549function waitForGlobal(key, callback) {
550	if (window[key]) {
551		callback();
552	}
553	else {
554		setTimeout(function () {
555			waitForGlobal(key, callback);
556		}, 100);
557	}
558};
559
560/* Wait for dom element to appear
561usage example:
562waitForElement($('#element'), function() {
563	console.log('element exists')
564}); */
565function waitForElement(selector, callback) {
566	if (jQuery(selector).length) {
567		callback();
568	}
569	else {
570		setTimeout(function () {
571			waitForElement(selector, callback);
572		}, 100);
573	}
574};
575
576/* Remove tags from argument text */
577function stripTags(strText) {
578	if (typeof (strText) == 'string') {
579		return strText.replace(/(<([^>]+)>)/gi, "");
580	}
581	else return '';
582}
583
584// meta dropdown
585document.addEventListener("DOMContentLoaded", () => {
586
587	// ----- 1. Ebene (Dropdown) -----
588	document.querySelectorAll(".dropdown > .dropdown-toggle").forEach(toggle => {
589		toggle.addEventListener("click", e => {
590			e.preventDefault();
591			const parent = toggle.parentElement;
592			const menu = parent.querySelector(".dropdown-menu");
593
594			// Toggle open class
595			parent.classList.toggle("open");
596
597			// ARIA aktualisieren
598			const expanded = parent.classList.contains("open");
599			toggle.setAttribute("aria-expanded", expanded);
600
601			// andere Dropdowns schließen
602			document.querySelectorAll(".dropdown.open").forEach(other => {
603				if (other !== parent) {
604					other.classList.remove("open");
605					other.querySelector(".dropdown-toggle").setAttribute("aria-expanded", "false");
606				}
607			});
608		});
609	});
610
611
612	// ----- 2. Ebene (Submenu) -----
613	document.querySelectorAll(".dropdown-submenu > .submenu-toggle").forEach(subToggle => {
614		subToggle.addEventListener("click", e => {
615			e.preventDefault();
616			e.stopPropagation(); // verhindert Öffnen/Schließen der 1. Ebene
617
618			const parent = subToggle.parentElement;
619
620			parent.classList.toggle("open");
621
622			const expanded = parent.classList.contains("open");
623			subToggle.setAttribute("aria-expanded", expanded);
624
625			// andere Untermenüs schließen
626			parent.parentElement.querySelectorAll(".dropdown-submenu.open").forEach(other => {
627				if (other !== parent) {
628					other.classList.remove("open");
629					const otherToggle = other.querySelector(".submenu-toggle");
630					if (otherToggle) otherToggle.setAttribute("aria-expanded", "false");
631				}
632			});
633		});
634	});
635
636
637	// ----- Klick außerhalb schließt alles -----
638	document.addEventListener("click", e => {
639		if (!e.target.closest(".dropdown")) {
640			document.querySelectorAll(".dropdown.open").forEach(d => {
641				d.classList.remove("open");
642				d.querySelector(".dropdown-toggle").setAttribute("aria-expanded", "false");
643			});
644		}
645	});
646});
647
648// video home 
649// Scroll-Event für Navbar-Collapse
650// window.addEventListener('scroll', function () {
651// 	const navbar = document.getElementById('mainnav');
652// 	const body = document.body;
653
654// 	if (window.scrollY > 50) {
655// 		navbar.classList.add('top-nav-collapse');
656// 		body.classList.add('scrolled');
657// 	} else {
658// 		navbar.classList.remove('top-nav-collapse');
659// 		body.classList.remove('scrolled');
660// 	}
661// });
662
663// Video abspielen sicherstellen
664const video = document.getElementById('html5_video_p667x6041f');
665const pauseBtn = document.getElementById('videoPauseBtn');
666if (video && pauseBtn) {
667	// Pause/Play Button Funktionalität
668	pauseBtn.addEventListener('click', function () {
669		if (video.paused) {
670			video.play();
671			pauseBtn.classList.remove('paused');
672			pauseBtn.classList.add('playing');
673			pauseBtn.setAttribute('aria-label', 'Video pausieren');
674			pauseBtn.setAttribute('title', 'Video pausieren');
675		} else {
676			video.pause();
677			pauseBtn.classList.remove('playing');
678			pauseBtn.classList.add('paused');
679			pauseBtn.setAttribute('aria-label', 'Video abspielen');
680			pauseBtn.setAttribute('title', 'Video abspielen');
681		}
682	});
683
684	// Keyboard Accessibility: Leertaste zum Pausieren
685	pauseBtn.addEventListener('keydown', function (e) {
686		if (e.key === ' ' || e.key === 'Enter') {
687			e.preventDefault();
688			pauseBtn.click();
689		}
690	});
691
692	// Warten bis Video geladen ist
693	video.addEventListener('loadeddata', function () {
694		video.play().catch(error => {
695			console.log("Autoplay verhindert:", error);
696			// Button Status anpassen wenn Autoplay blockiert wurde
697			pauseBtn.classList.remove('playing');
698			pauseBtn.classList.add('paused');
699			pauseBtn.setAttribute('aria-label', 'Video abspielen');
700			pauseBtn.setAttribute('title', 'Video abspielen');
701
702			// Fallback: Play bei User-Interaktion
703			document.addEventListener('click', function playOnClick() {
704				video.play();
705				pauseBtn.classList.remove('paused');
706				pauseBtn.classList.add('playing');
707				pauseBtn.setAttribute('aria-label', 'Video pausieren');
708				document.removeEventListener('click', playOnClick);
709			}, { once: true });
710		});
711	});
712
713	// Sofort versuchen zu starten (falls bereits geladen)
714	if (video.readyState >= 2) {
715		video.play().catch(error => {
716			console.log("Autoplay initial verhindert:", error);
717			pauseBtn.classList.remove('playing');
718			pauseBtn.classList.add('paused');
719		});
720	}
721
722	// Optional: Video pausieren wenn nicht sichtbar (Performance)
723	const observer = new IntersectionObserver((entries) => {
724		entries.forEach(entry => {
725			if (entry.isIntersecting && !video.paused) {
726				video.play().catch(e => console.log(e));
727			} else if (!entry.isIntersecting) {
728				video.pause();
729			}
730		});
731	}, { threshold: 0.5 });
732
733	observer.observe(video);
734}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.