PageSourceSearch

https://www.guinand-uhren.de/files/tao/js/script.js

js guinand-uhren.de collected 2026-10-06 05:22:50 UTC 30,054 bytes, 1,020 lines download raw bytes

1// must be loaded at the end of the body element
2(function(){
3	var addEvent = function(element, events, func){
4			events = events.split(' ');
5			for (var i = 0; i < events.length; i++) {
6				if(element.addEventListener){
7					element.addEventListener(events[i], func, false);
8				}
9				else{
10					element.attachEvent('on'+events[i], func);
11				}
12			}
13		},
14		triggerEvent = function(element, eventName) {
15			var evt = document.createEvent('HTMLEvents');
16			evt.initEvent(eventName, true, true);
17			element.dispatchEvent(evt);
18		},
19		eventPreventDefault = function(event){
20			event = event || window.event;
21			if (!event) {
22				return;
23			}
24			if(event.preventDefault){
25				event.preventDefault();
26			}
27			else{
28				event.returnValue = false;
29			}
30		},
31		eventStop = function(event) {
32			event = event || window.event;
33			if (!event) {
34				return;
35			}
36			if(event.stopPropagation){
37				event.stopPropagation();
38			}
39			else{
40				event.cancelBubble = true;
41			}
42		},
43		elementMatches = function(element, selector) {
44			var methods = ['matches', 'matchesSelector', 'msMatchesSelector', 'mozMatchesSelector', 'webkitMatchesSelector'];
45			for (var i = 0; i < methods.length; i++) {
46				if (methods[i] in element) {
47					return element[methods[i]](selector);
48				}
49			}
50			return false;
51		},
52		addClass = function(element, className) {
53			var elements = ('length' in element && !('className' in element))
54				? element
55				: [element];
56			for (var i = 0; i < elements.length; i++) {
57				if (!hasClass(elements[i], className)) {
58					elements[i].className += ' ' + className;
59				}
60			}
61		},
62		removeClass = function(element, className) {
63			var elements = ('length' in element && !('className' in element))
64				? element
65				: [element];
66			for (var i = 0; i < elements.length; i++) {
67				if (hasClass(elements[i], className)) {
68					elements[i].className = elements[i].className.replace(new RegExp('(?:^|\\s+)' + className + '(?:$|\\s+)'), ' ');
69				}
70			}
71		},
72		hasClass = function(element, className) {
73			return !!element.className.match('(?:^|\\s)' + className + '(?:$|\\s)');
74		},
75		toggleClass = function(element, className) {
76			return hasClass(element, className)
77				? removeClass(element, className)
78				: addClass(element, className);
79		},
80		getZoomLevel = function() {
81			if (document.documentElement.clientWidth && window.innerWidth){
82				return document.documentElement.clientWidth / window.innerWidth;
83			}
84			return 1;
85		},
86		each = function(array, callback) {
87			if (!array || !array.length) {
88				return;
89			}
90			for (var i = 0; i < array.length; i++) {
91				callback(array[i], i);
92			}
93		},
94		navMain = document.getElementById('main-navigation'),
95		navMainLis, i, element, navMainTouched, touchUsed;
96
97	// Main navigation search
98	(function(elements){
99		for (var i = 0; i < elements.length; i++) {
100			addEvent(elements[i].getElementsByTagName('input')[0], 'focus', function(){
101				addClass(this.parentNode, 'focus');
102			});
103			addEvent(elements[i].getElementsByTagName('button')[0], 'focus', function(){
104				addClass(this.parentNode, 'focus');
105			});
106			addEvent(elements[i].getElementsByTagName('input')[0], 'blur', function(){
107				removeClass(this.parentNode, 'focus');
108			});
109			addEvent(elements[i].getElementsByTagName('button')[0], 'blur', function(){
110				removeClass(this.parentNode, 'focus');
111			});
112		}
113	})(document.querySelectorAll && document.querySelectorAll('.main-navigation-search'));
114
115	// Dropdown fix for all touch devices
116	if(window.Modernizr && Modernizr.touch){
117		if(navMain && navMain.getElementsByTagName('ul').length){
118			// devices supporting touch events may not mean touch input is used
119			// e.g. touch enabled laptops running Windows 8
120			addEvent(navMain, 'touchstart', function(event) {
121				touchUsed = true;
122			});
123			navMainLis = navMain.getElementsByTagName('ul')[0].childNodes;
124			for(i = 0; i < navMainLis.length; i++){
125				if(navMainLis[i].nodeName && navMainLis[i].nodeName.toLowerCase() === 'li' && navMainLis[i].getElementsByTagName('ul').length){
126					element = navMainLis[i].getElementsByTagName('a');
127					if(element && (element = element[0])){
128						addEvent(element, 'click', function(event){
129							if(navMainTouched !== this && touchUsed){
130								navMainTouched = this;
131								eventPreventDefault(event);
132							}
133						});
134					}
135				}
136			}
137		}
138	}
139
140	// Fixed elements
141	(function(header, tagline) {
142
143		if (!header) {
144			return;
145		}
146
147		var nav = header.querySelector('.header-navigation-inner');
148		var bar = header.querySelector('.header-bar');
149		var originalHeight;
150		var originalNavHeight;
151		var originalBarHeight;
152		var minNavHeight;
153		var minBarHeight;
154
155		var resetStyles = function() {
156			removeClass(header, 'is-fixed');
157			header.parentNode.style.paddingTop = '';
158			if (nav) {
159				nav.style.height = '';
160			}
161			if (bar) {
162				bar.style.overflow = '';
163				bar.style.height = '';
164			}
165			if (tagline) {
166				tagline.parentNode.style.overflow = '';
167				tagline.style.transform = tagline.style.WebkitTransform = '';
168				tagline.style.opacity = '';
169			}
170		};
171
172		var updateOriginalValues = function() {
173			resetStyles();
174			originalHeight = header.offsetHeight;
175			originalNavHeight = nav && nav.offsetHeight;
176			originalBarHeight = bar && bar.offsetHeight;
177			if (nav) {
178				nav.style.height = 0;
179			}
180			if (bar) {
181				bar.style.height = 0;
182			}
183			minNavHeight = nav && nav.offsetHeight;
184			minBarHeight = bar && bar.offsetHeight;
185			if (nav) {
186				nav.style.height = '';
187			}
188			if (bar) {
189				bar.style.height = '';
190			}
191		};
192
193		updateOriginalValues();
194
195		var scroll = function() {
196
197			if (getZoomLevel() > 1.01 || (window.matchMedia && window.matchMedia("(max-width: 992px)").matches)) {
198				resetStyles();
199				return;
200			}
201
202			var taglineHeight = tagline && tagline.offsetHeight;
203			var documentHeight = window.innerHeight || document.documentElement.clientHeight;
204			var offset = window.pageYOffset || document.documentElement.scrollTop || 0;
205
206			// Only allow scroll positions inside the possible range
207			offset = Math.min(
208				document.documentElement.scrollHeight - documentHeight,
209				offset
210			);
211			offset = Math.max(0, offset);
212
213			addClass(header, 'is-fixed');
214			header.parentNode.style.paddingTop = originalHeight + 'px';
215
216			if (nav) {
217				nav.style.height = Math.max(minNavHeight, originalNavHeight - offset) + 'px';
218				offset -= originalNavHeight - Math.max(minNavHeight, originalNavHeight - offset);
219			}
220
221			if (bar) {
222				if (offset > 0) {
223					bar.style.overflow = 'hidden';
224				}
225				else {
226					bar.style.overflow = '';
227				}
228				bar.style.height = Math.max(minBarHeight, originalBarHeight - offset) + 'px';
229				offset -= originalBarHeight - Math.max(minBarHeight, originalBarHeight - offset);
230			}
231
232			if (tagline) {
233				if (
234					offset > 0
235					&& offset < taglineHeight
236					&& taglineHeight + originalHeight < documentHeight
237				) {
238					tagline.parentNode.style.overflow = 'hidden';
239					tagline.style.transform = tagline.style.WebkitTransform =
240						'translate3d(0,'
241						+ Math.round(Math.min(offset, taglineHeight) / 2) + 'px,0)';
242					tagline.style.opacity = (taglineHeight - (offset / 1.5)) / taglineHeight;
243				}
244				else {
245					tagline.parentNode.style.overflow = '';
246					tagline.style.transform = tagline.style.WebkitTransform = 'translate3d(0,
2460,0)';
247					tagline.style.opacity = '';
248				}
249			}
250
251		};
252
253		addEvent(window, 'resize load', updateOriginalValues);
254		addEvent(window, 'scroll resize load', scroll);
255		scroll();
256
257	})(
258		document.querySelector && document.querySelector('.page-header'),
259		document.querySelector && document.querySelector('.tagline-inner')
260	);
261
262	// Mobile navigation
263	(function(nav, page) {
264		if (!nav) {
265			return;
266		}
267		document.body.insertBefore(nav, document.body.firstChild);
268		var navLink;
269		var isOpened;
270		var open, close;
271		var updateHeight = function() {
272			if (!isOpened) {
273				return;
274			}
275			if (!nav.offsetHeight) {
276				// Close the nav if it is not visible anymore
277				return close();
278			}
279			nav.style.minHeight = 0;
280			page.style.height = Math.max((window.innerHeight || document.documentElement.clientHeight), nav.offsetHeight) + 'px';
281			page.style.position = 'relative';
282			page.style.overflow = 'hidden';
283			nav.style.minHeight = '';
284		};
285		open = function() {
286			isOpened = true;
287			addClass(nav, 'is-active');
288			updateHeight();
289		};
290		close = function() {
291			isOpened = false;
292			removeClass(nav, 'is-active');
293			page.style.height = '';
294			page.style.position = '';
295			page.style.overflow = '';
296		};
297		addEvent(window, 'resize', updateHeight);
298		addClass(nav, 'is-enabled');
299		navLink = document.createElement('a');
300		navLink.innerHTML = 'navigation';
301		navLink.href = '';
302		addClass(navLink, 'main-navigation-mobile-open');
303		addEvent(navLink, 'click', function(event) {
304			eventPreventDefault(event);
305			if (hasClass(nav, 'is-active')) {
306				close();
307			}
308			else {
309				open();
310			}
311		});
312		if (document.querySelector && document.querySelector('.page')) {
313			document.querySelector('.page').insertBefore(
314				navLink,
315				document.querySelector('.page').firstChild
316			);
317		}
318		else {
319			nav.parentNode.insertBefore(navLink, nav);
320		}
321		closeButton = document.createElement('button');
322		closeButton.innerHTML = 'close';
323		addClass(closeButton, 'main-navigation-mobile-close');
324		addEvent(closeButton, 'click', function(event) {
325			if (isOpened) {
326				close();
327			}
328			eventPreventDefault(event);
329		});
330		nav.appendChild(closeButton);
331		var uls = nav.querySelectorAll('ul ul');
332		var button;
333		var buttonOnClick = function(event) {
334			toggleClass(this.parentNode, 'is-expanded');
335			toggleClass(this.parentNode, 'is-collapsed');
336			updateHeight();
337		};
338		for (var i = 0; i < uls.length; i++) {
339			button = document.createElement('button');
340			button.innerHTML = 'expand';
341			button.className = 'main-navigation-mobile-expand';
342			addEvent(button, 'click', buttonOnClick);
343			uls[i].parentNode.insertBefore(button, uls[i]);
344			if (hasClass(uls[i].parentNode, 'active') || hasClass(uls[i].parentNode, 'trail')) {
345				addClass(uls[i].parentNode, 'is-expanded');
346			}
347			else {
348				addClass(uls[i].parentNode, 'is-collapsed');
349			}
350		}
351	})(
352		document.querySelector && document.querySelector('.main-navigation-mobile'),
353		document.querySelector && document.querySelector('.page')
354	);
355
356	// Animations
357	(function() {
358
359		if (!window.Modernizr || !Modernizr.csstransitions) {
360			return;
361		}
362
363		var getCounterValue = function(data, multiplier) {
364			var value = data.number * multiplier;
365			return data.prefix
366				+ value.toFixed(data.precision).split('.').join(data.separator)
367				+ data.suffix;
368		};
369
370		var initCounterAnimation = function(element) {
371			if (!element.counterAnimationData) {
372				var value = element.innerHTML;
373				var matches = /^(.*?)(-?[0-9,.]*\d)(.*)$/.exec(value);
374				if (!matches || !matches.length) {
375					return;
376				}
377				var separator = matches[2].indexOf(',') > 0 ? ',' : '.';
378				matches[2] = matches[2].split(',').join('.');
379				if (isNaN(matches[2] * 1)) {
380					return;
381				}
382				element.counterAnimationData = {
383					original: value,
384					prefix: matches[1],
385					suffix: matches[3],
386					number: matches[2] * 1,
387					precision: Math.max(
388						0,
389						matches[2].length - matches[2].split('.')[0].length - 1
390					),
391					separator: separator,
392					duration: (element.getAttribute('data-animation-duration') || 1000) * 1
393				};
394			}
395			element.innerHTML = getCounterValue(element.counterAnimationData, 0);
396		};
397
398		var counterAnimations = [];
399
400		var runCounterAnimation = function() {
401			var animations = [];
402			var animation;
403			var multiplier;
404			for (var i = 0; i < counterAnimations.length; i++) {
405				animation = counterAnimations[i];
406				multiplier = Math.min(1, (
407					new Date().getTime() - animation.start
408				) / animation.data.duration);
409				if (multiplier < 1) {
410					animation.element.innerHTML = getCounterValue(
411						animation.data,
412						multiplier
413					);
414					animations.push(animation);
415				}
416				else {
417					animation.element.innerHTML = animation.data.original;
418				}
419			}
420			counterAnimations = animations;
421			if (window.requestAnimationFrame && counterAnimations.length) {
422				window.requestAnimationFrame(runCounterAnimation);
423			}
424		};
425
426		var startCounterAnimation = function(element) {
427			if (window.requestAnimationFrame && !counterAnimations.length) {
428				window.requestAnimationFrame(runCounterAnimation);
429			}
430			counterAnimations.push({
431				element: element,
432				data: element.counterAnimationData,
433				start: new Date().getTime()
434			});
435		};
436
437		var isHiddenInSlider = function (element) {
438			if (!element.slider) {
439				return false;
440			}
441			return !window.jQuery(element.element).closest('.rsts-slide').is(element.slider.getSlides()[element.slider.slideIndex].element);
442		};
443
444		var isInView = function(element) {
445			return (
446				(element.element.offsetWidth || element.element.offsetHeight)
447				&& (
448					element.element.getBoundingClientRect().top < (window.innerHeight || document.documentElement.clientHeight) * 0.8
449					|| element.element.getBoundingClientRect().bottom <= (window.innerHeight || document.documentElement.clientHeight)
450				)
451				&& !isHiddenInSlider(element)
452			);
453		};
454
455		var isNotInView = function(element) {
456			return (
457				(!element.element.offsetWidth && !element.element.offsetHeight)
458				|| element.element.getBoundingClientRect().top > (window.innerHeight || document.documentElement.clientHeight) * 1.2
459				|| isHiddenInSlider(element)
460			);
461		};
462
463		var elements = [];
464
465		var update = function() {
466			var rect;
467			each(elements, function(element) {
468				if (isInView(element)) {
469					if (element.element.counterAnimationData && !hasClass(element.element, 'in-view')) {
470						if (!hasClass(element.element, 'has-shown') || element.doesRepeat) {
471							startCounterAnimation(element.element);
472						}
473					}
474					addClass(element.element, 'in-view');
475					addClass(element.element, 'has-shown');
476					removeClass(element.element, 'not-in-view');
477				}
478				else if(isNotInView(element)) {
479					if (element.element.counterAnimationData && !hasClass(element.element, 'not-in-view') && element.doesRepeat) {
480						initCounterAnimation(element.element);
481					}
482					if (element.doesRepeat) {
483						addClass(element.element, 'not-in-view');
484						removeClass(element.element, 'in-view');
485					}
486				}
487			});
488		};
489
490		var updateElements = function(wrapper) {
491			wrapper = wrapper || document;
492			var newElements = wrapper.querySelectorAll && wrapper.querySelectorAll('.is-animated');
493			if (!newElements) {
494				return;
495			}
496			each(newElements, function(element) {
497				if (
498					!elementMatches(element, '.not-animated *, .not-animated')
499					&& elements.map(function(element) {
500						return element.element;
501					}).indexOf(element) === -1
502				) {
503					elements.push({
504						element: element,
505						doesRepeat: elementMatches(element, '.does-repeat *, .does-repeat'),
506						slider: window.jQuery && window.jQuery(element).closest('.rsts-main').data('rstSlider')
507					});
508					if (hasClass(element, '-counter')) {
509						initCounterAnimation(element);
510					}
511					addClass(element, 'not-in-view');
512				}
513			});
514		};
515
516		updateElements();
517
518		addEvent(window, 'scroll resize load', update);
519		if (window.jQuery) {
520			window.jQuery('.rsts-main, .mod_rocksolid_slider').on('rsts-slidestop', function() {
521				updateElements(this);
522				update();
523			});
524		}
525		setTimeout(update, 0);
526
527		if (window.requestAnimationFrame) {
528			window.requestAnimationFrame(runCounterAnimation);
529		}
530		else {
531			setInterval(runCounterAnimation, 16);
532		}
533
534	})();
535
536	// Background videos
537	/*(function(elements) {
538		if (!elements || !elements.length || !navigator.userAgent.match(/(iPhone|iPod)/)) {
539			return;
540		}
541		for (var i = 0; i < elements.length; i++) {
542			if (elements[i].poster) {
543				elements[i].parentNode.style.backgroundImage = 'url("' + elements[i].poster + '")';
544			}
545			elements[i].parentNode.removeChild(elements[i]);
546		}
547	})(document.querySelectorAll && document.querySelectorAll('.centered-wrapper-background > video'));*/
548
549	// Moving backgrounds
550	(function(elements) {
551		if (!elements || !elements.length || navigator.userAgent.match(/(iPad|iPhone|iPod)/)) {
552			return;
553		}
554		addEvent(window, 'mousemove', function(event) {
555			var percentage;
556			for (var i = 0; i < elements.length; i++) {
557				percentage = event.clientX / (
558					window.innerWidth ||
559					document.documentElement.clientWidth
560				);
561				if (hasClass(elements[i].parentNode, '-background-mousemove')) {
562					percentage = 1 - percentage;
563				}
564				percentage = Math.max(0, Math.min(1, percentage));
565				elements[i].style.transform =
566					elements[i].style.webkitTransform =
567					'translate3d(' + (percentage * -10) + '%, 0, 0)';
568			}
569		});
570	})(document.querySelectorAll && document.querySelectorAll('.-background-mousemove-inverted > .centered-wrapper-background, .-background-mousemove > .centered-wrapper-background'));
571
572	// Parallax backgrounds
573	(function(elements) {
574
575		if (!elements || !elements.length || navigator.userAgent.match(/(iPad|iPhone|iPod)/)) {
576			return;
577		}
578
579		if (!('transform' in elements[0].style) && !('webkitTransform' in elements[0].style)) {
580			return;
581		}
582
583		var imageCache = [];
584
585		var update = function(event) {
586
587			var windowHeight = window.innerHeight || document.documentElement.clientHeight;
588
589			// Get all dimensions from the browser before applying styles for better performance
590			var parentRects = [];
591			for (var i = 0; i < elements.length; i++) {
592				parentRects[i] = elements[i].parentNode.getBoundingClientRect();
593				if (!('width' in parentRects[i]) || !('height' in parentRects[i])) {
594					return;
595				}
596			}
597
598			var position, height;
599			for (i = 0; i < elements.length; i++) {
600				// Skip invisible elements
601				if (parentRects[i].bottom < 0 || parentRects[i].top > windowHeight) {
602					continue;
603				}
604				height = 0;
605				if (imageCache[i].width && imageCache[i].height) {
606					height = imageCache[i].height / imageCache[i].width * parentRects[i].width;
607				}
608				height = Math.round(Math.max(
609					height,
610					Math.min(parentRects[i].height, windowHeight) * 1.1
611				));
612				elements[i].style.bottom = 'auto';
613				elements[i].style.height = height + 'px';
614				if (height < windowHeight || (windowHeight < parentRects[i].height && height < parentRects[i].height)) {
615					position = parentRects[i].top / (windowHeight - parentRects[i].height)
616						* -(height - parentRects[i].height);
617				}
618				else {
619					position = (windowHeight - parentRects[i].top) / (windowHeight + parentRects[i].height)
620						* -(height - parentRects[i].height);
621				}
622				elements[i].style.transform =
623				elements[i].style.webkitTransform =
624					'translate3d(0, ' + Math.round(position) + 'px, 0)';
625			}
626
627		};
628		addEvent(window, 'scroll resize', update);
629
630		for (var i = 0; i < elements.length; i++) {
631			imageCache[i] = new Image();
632			addEvent(imageCache[i], 'load', update);
633			imageCache[i].src = elements[i].getAttribute
634				&& elements[i].getAttribute('data-image-url');
635		}
636
637	})(document.querySelectorAll && document.querySelectorAll('.-background-parallax > .centered-wrapper-background'));
638
639	// Header login
640	(function(elements) {
641		if (!elements || !elements.length) {
642			return;
643		}
644		var click = function(event) {
645			eventPreventDefault(event);
646			toggleClass(this.parentNode, 'is-active');
647			var input = this.parentNode.querySelector('input[type=text]');
648			if (input && hasClass(this.parentNode, 'is-active')) {
649				input.focus();
650			}
651			else {
652				this.blur();
653			}
654		};
655		var headline;
656		var button;
657		for (var i = 0; i < elements.length; i++) {
658			headline = elements[i].querySelector('h1, h2, h3, h4, h5, h6');
659			if (headline) {
660				headline.setAttribute('tabindex', '0');
661				addEvent(headline, 'click', click);
662				if (
663					hasClass(elements[i], 'logout')
664					&& (button = elements[i].querySelector('input[type=submit]'))
665				) {
666					headline.innerHTML = button.value;
667				}
668			}
669			if (elements[i].querySelector('.error')) {
670				addClass(elements[i], 'is-active');
671			}
672		}
673	})(document.querySelectorAll && document.querySelectorAll('.header-login'));
674
675	// Header Dropdown touch support
676	(function(elements) {
677		if (!elements || !elements.length) {
678			return;
679		}
680		var headline;
681		for (var i = 0; i < elements.length; i++) {
682			headline = elements[i].querySelector('h1, h2, h3, h4, h5, h6');
683			if (headline) {
684				headline.setAttribute('tabindex', '0');
685				addEvent(headline, 'click', function() {});
686			}
687		}
688	})(document.querySelectorAll && document.querySelectorAll('.header-dropdown'));
689
690	// Rotating boxes touch support
691	(function(elements) {
692		if (!elements || !elements.length) {
693			return;
694		}
695		for (var i = 0; i < elements.length; i++) {
696			addEvent(elements[i], 'touchend', function(event) {
697				if (event.target && hasClass(event.target, 'rotating-boxes-item-link')) {
698					return;
699				}
700				eventPreventDefault(event);
701				toggleClass(this, 'hover');
702			});
703		}
704	})(document.querySelectorAll && document.querySelectorAll('.rotating-boxes-item'));
705
706	// Tabs
707	(function(navigations) {
708
709		if (!navigations || !navigations.length) {
710			return;
711		}
712
713		var documentHref = document.location.href.split('#');
714
715		each(navigations, function(navigation) {
716
717			var links = navigation.querySelectorAll('a');
718			var targets = [];
719			var clickFirst;
720
721			each(links, function(link, i) {
722
723				var href = link.href.split('#');
724				if (
725					href[0] &&
726					documentHref[0].substr(- href[0].length) !== href[0]
727				) {
728					return;
729				}
730				var target = document.querySelector('#' + href[1]);
731				if (!target) {
732					return;
733				}
734
735				targets.push(target);
736
737				var onclick = function(event) {
738					eventPreventDefault(event);
739					eventStop(event);
740					each(targets, function(target) {
741						target.style.display = 'none';
742					});
743					removeClass(links, 'is-active');
744					addClass(link, 'is-active');
745					target.style.display = '';
746					link.blur();
747					triggerEvent(window, 'scroll');
748				};
749				addEvent(link, 'click', onclick);
750
751				// First element
752				if (!clickFirst) {
753					clickFirst = onclick;
754				}
755
756			});
757
758			clickFirst();
759
760		});
761
762	})(document.querySelectorAll && document.querySelectorAll('.tab-navigation'));
763
764})();
765
766
767// Smoothscroll
768
769
770jQuery.noConflict();
771(function( $ ) {
772	//smoothscroll
773	$(function() {
774		$('a[href*=\\#]:not([href=\\#])').click(function() {
775			var that = $(this);
776			if (that.parent().hasClass('tab-navigation-item')) return;
777			if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
778				var target = $(this.hash);
779				target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
780				if (target.length) {
781					$('html,body').animate({
782						scrollTop: (target.offset().top)-50
783					}, 1000);
784					return false;
785				}
786			}
787		});
788	});
789
790	// Day-Night-Slider - night BG must be #e2e2e2
791
792	/*$(function () {
793		var $dayNightBlock = $('.day-night');
794		var $dayNightSlider = $dayNightBlock.find('.mod_rocksolid_slider');
795		$dayNightSlider.on('rsts-slidestop', function(event) {
796			if($dayNightSlider.hasClass('night')) {
797				$dayNightBlock.css('background-color', '').removeClass('-color-inverted').addClass('day-night-on');
798			} else {
799				$dayNightBlock.addClass('-color-inverted').removeClass('day-night-on');
800			}
801		});
802	})*/
803
804})(jQuery);
805
806
807// Collapsible
808
809function collapsible() {
810	var coll = document.getElementsByClassName("collapsible");
811	var i;
812
813	for (i = 0; i < coll.length; i++) {
814		var collToggle = coll[i].children[0];
815		collToggle.addEventListener("click", function() {
816			this.classList.toggle("active");
817			var content = this.nextElementSibling;
818			if (content.style.maxHeight){
819				content.style.maxHeight = null;
820			} else {
821				content.style.maxHeight = content.scrollHeight + "px";
822			}
823		});
824	}
825}
826
827collapsible();
828
829var configRules = function () {
830
831	(function( $ ) {
832		$(function() {
833			var band_s40 = $('#widget-14 option:selected').attr('value');
834			var band_s41 = $('#widget-45 option:selected').attr('value');
835			var band_s60 = $('#widget-33 option:selected').attr('value');
836			var band_s21 = $('#widget-43 option:selected').attr('value');
837			var band_s20 = $('#widget-22 option:selected').attr('value');
838			var band_s31 = $('#widget-20 option:selected').attr('value');
839			var band_s90 = $('#widget-34 option:selected').attr('value'); // bänder 20 mm andere
840			var band_flyoff = $('#widget-35 option:selected').attr('value');
841			var band_s9694 = $('#widget-71 option:selected').attr('value');
842			var band_sfl = $('#widget-96 option:selected').attr('value');
843			var band_nordmeer = $('#widget-139 option:selected').attr('value');
844			var band_fe = $('#widget-129 option:selected').attr('value');
845			var $schliesse = $('#widget-90');
846			var $modell = $('#widget-9 option:selected').attr('value');
847
848
849			switch (band_s40 || band_s41 || band_s60 || band_s21 || band_s20 || band_s31 || band_s90 || band_flyoff || band_s9694 || band_sfl || band_nordmeer || band_fe) {
850
851				case "75" :										// Modell Typ H P		40
852				case "1437" :									// Modell Typ H P		40
853				case "1540" :									// Modell Typ H P		40/FC
854				case "1541" :									// Modell Typ H P		40/FC
855				case "92" :										// Kautschuk Glatt 		40
856				case "269" :									// Kautschuk Glatt 		60
857				case "274" :									// Modell 3.1 			60
858				case "1551" :									// Modell 3.1 V			60
859				case "1422" :									// Modell Typ H P		FE
860				case "1423" :									// Modell Typ H M		FE
861				case "1581" :									// Modell Typ H Klassik P		FE
862				case "1584" :									// Modell Typ H Klassik S		FE
863				case "1417" : 									// Kautschuk glatt		FE
864				case "289" : 									// Kautschuk glatt		90
865				case "152" :		 							// Kautschuk glatt		31
866				case "1535" :									// Kautschuk Glatt 		Nordmeer
867				case "1291" :									// Kautschuk Glatt 		PO
868				case "1542" : $schliesse.remove(); 				// Metall S60 			Nordmeer
869					break;
870			}
871
872
873
874		});
875	})(jQuery);
876
877}
878
879const productScripts= {
880	preselectRadio : function() {
881		const widgetIds = ['widget-90', 'widget-166', 'widget-167', 'widget-200'];
882
883		widgetIds.forEach(widgetId => {
884			const widget = document.getElementById(widgetId);
885			if (widget && widget.querySelectorAll('input[type=radio]:checked').length === 0) {
886				widget.querySelector('input[type=radio]').checked = true;
887			}
888		});
889	},
890
891	openProductTab : function() {
892		const productTabs = document.querySelector('.product-tabs');
893		if (!productTabs) {
894			return;
895		}
896		const tabContent = productTabs.querySelectorAll('.product-tabs-content');
897		const tabLinks = productTabs.querySelectorAll('.product-tabs-navigation-item');
898
899		function clickHandler(evt) {
900			evt.preventDefault();
901			const tabName = evt.currentTarget.getAttribute("data-tab");
902
903			for (let i = 0; i < tabContent.length; i++) {
904				tabContent[i].style.display = "none";
905			}
906
907			for (let i = 0; i < tabLinks.length; i++) {
908				(tabLinks[i]).className = (tabLinks[i]).className.replace(" active", "");
909			}
910
911			document.getElementById(tabName).style.display = "block";
912			evt.currentTarget.className += " active";
913		}
914
915		tabLinks.forEach(link => {
916			link.addEventListener("click", clickHandler);
917		});
918	},
919
920	updateEngravingData: function() {
921		const engravingAttr = document.getElementById('widget-161');
922		if (!engravingAttr) return;
923
924		const checkbox = engravingAttr.querySelector('.checkbox');
925		// if checkbox checked update data
926		if (!checkbox.checked) {
927			document.querySelector('[id^="attr_engraving_data"]').value = "";
928		}
929	},
930
931	updateLightbox: function () {
932		jQuery(function($) {
933			$('a[data-lightbox]').map(function() {
934				$(this).colorbox({
935					// Put custom options here
936					loop: false,
937					rel: $(this).attr('data-lightbox-group') || false,
938					maxWidth: '95%',
939					maxHeight: '95%',
940					iframe: $(this).data('lightbox') === 'iframe' ? true : false,
941					width: $(this).data('lbwidth'),
942					height: $(this).data('lbheight'),
943				});
944			});
945		})
946	},
947
948	sendCountryData: async function (data, url, formId, token, prodFormId) {
949		console.log('send data');
950
951		const formData = new FormData();
952		formData.append("FORM_SUBMIT", formId);
953		formData.append("REQUEST_TOKEN", token);
954		formData.append("country", data);
955
956		try {
957			const response = await fetch(url, {
958				method: "POST",
959				body: formData,
960			});
961
962			if (!response.ok) {
963				// For debugging, let's see what the server returned on error
964				const errorText = await response.text();
965				throw new Error(`HTTP error! Status: ${response.status}, Body: ${errorText}`);
966			}
967
968			if (prodFormId) {
969				IsotopeProducts.submit(prodFormId);
970			} else {
971				window.location.reload();
972			}
973
974		} catch (e) {
975			console.error("There was a problem with the country change operation:", e);
976		}
977	},
978
979	initCountryData: function () {
980		const selectEl = document.getElementById('ctrl_country');
981		if (!selectEl) return; // Guard against null element
982		const token = selectEl.closest('.formbody').dataset.token; // Token of the country selector form
983		const formId = selectEl.closest('.formbody').dataset.formId; // ID of the country selector form
984		const prodUrl = window.location.href;
985		const prodFormId = document.querySelector('.mod_iso_productreader form')?.id; // ID of the Products form
986		selectEl.addEventListener('change', (e) => productScripts.sendCountryData(e.target.value, prodUrl, formId, token, prodFormId));
987	},
988
989	reInit : function () {
990		productScripts.openProductTab();
991		productScripts.preselectRadio();
992		productScripts.updateEngravingData();
993		productScripts.updateLightbox();
994		productScripts.initCountryData();
995	},
996
997	// Observe C
998	observeScripts : function () {
999		const configBlock = document.querySelector('.mod_iso_productreader'); // configblock
1000		if (!configBlock) {
1001			return;
1002		}
1003
1004		const observer = new MutationObserver(productScripts.reInit);
1005		observer.observe(configBlock, {
1006			childList: true,
1007			subtree: true
1008		});
1009	},
1010
1011	openEngraver : function () {
1012		const event = new CustomEvent('showVisualizer');
1013		document.dispatchEvent(event);
1014	}
1015
1016}
1017
1018// run the function fixPreSelectedRadios on document loaded
1019document.addEventListener('DOMContentLoaded', productScripts.observeScripts);
1020document.addEventListener('DOMContentLoaded', productScripts.initCountryData);

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.