PageSourceSearch

https://decoit.de/files/tao/js/script.js

js decoit.de collected 2026-10-07 19:55:41 UTC 24,621 bytes, 863 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	// Edge dropdown touch fix
116	if(navMain && navMain.getElementsByTagName('ul').length){
117		navMainLis = navMain.getElementsByTagName('ul')[0].childNodes;
118		for(i = 0; i < navMainLis.length; i++){
119			if(navMainLis[i].nodeName && navMainLis[i].nodeName.toLowerCase() === 'li' && navMainLis[i].querySelector('ul,.mega-dropdown')){
120				element = navMainLis[i].getElementsByTagName('a');
121				if(element && (element = element[0])){
122					element.setAttribute('aria-haspopup', 'true');
123				}
124			}
125		}
126	}
127
128	// Dropdown fix for all touch devices
129	if(window.Modernizr && Modernizr.touchevents){
130		if(navMain && navMain.getElementsByTagName('ul').length){
131			// devices supporting touch events may not mean touch input is used
132			// e.g. touch enabled laptops running Windows 8
133			addEvent(navMain, 'touchstart', function(event) {
134				touchUsed = true;
135			});
136			navMainLis = navMain.getElementsByTagName('ul')[0].childNodes;
137			for(i = 0; i < navMainLis.length; i++){
138				if(navMainLis[i].nodeName && navMainLis[i].nodeName.toLowerCase() === 'li' && navMainLis[i].querySelector('ul,.mega-dropdown')){
139					element = navMainLis[i].getElementsByTagName('a');
140					if(element && (element = element[0])){
141						addEvent(element, 'touchend', function(event){
142							var link = this;
143							setTimeout(function() {
144								navMainTouched = link;
145							}, 100);
146						});
147						addEvent(element, 'click', function(event){
148							if(navMainTouched !== this && touchUsed){
149								navMainTouched = this;
150								eventPreventDefault(event);
151							}
152						});
153					}
154				}
155			}
156		}
157	}
158
159	// Fixed elements
160	(function(header, tagline) {
161
162		if (!header) {
163			return;
164		}
165
166		var nav = header.querySelector('.header-navigation-inner');
167		var bar = header.querySelector('.header-bar');
168		var originalHeight;
169		var originalNavHeight;
170		var originalBarHeight;
171		var minNavHeight;
172		var minBarHeight;
173
174		var resetStyles = function() {
175			removeClass(header, 'is-fixed');
176			header.parentNode.style.paddingTop = '';
177			document.documentElement.style.scrollPaddingTop = '';
178			if (nav) {
179				nav.style.height = '';
180			}
181			if (bar) {
182				bar.style.overflow = '';
183				bar.style.height = '';
184			}
185			if (tagline) {
186				tagline.parentNode.style.overflow = '';
187				tagline.style.transform = tagline.style.WebkitTransform = '';
188				tagline.style.opacity = '';
189			}
190		};
191
192		var updateOriginalValues = function() {
193			resetStyles();
194			originalHeight = header.offsetHeight;
195			originalNavHeight = nav && nav.offsetHeight;
196			originalBarHeight = bar && bar.offsetHeight;
197			if (nav) {
198				nav.style.height = 0;
199			}
200			if (bar) {
201				bar.style.height = 0;
202			}
203			minNavHeight = nav && nav.offsetHeight;
204			minBarHeight = bar && bar.offsetHeight;
205			if (nav) {
206				nav.style.height = '';
207			}
208			if (bar) {
209				bar.style.height = '';
210			}
211		};
212
213		updateOriginalValues();
214
215		var scroll = function() {
216
217			if (getZoomLevel() > 1.01 || (window.matchMedia && window.matchMedia("(max-width: 900px)").matches)) {
218				resetStyles();
219				return;
220			}
221
222			if (document.documentElement.style.scrollPaddingTop !== (minNavHeight + minBarHeight) + 'px') {
223				document.documentElement.style.scrollPaddingTop = (minNavHeight + minBarHeight) + 'px';
224			}
225
226			var taglineHeight = tagline && tagline.offsetHeight;
227			var documentHeight = window.innerHeight || document.documentElement.clientHeight;
228			var offset = window.pageYOffset || document.documentElement.scrollTop || 0;
229
230			// Only allow scroll positions inside the possible range
231			offset = Math.min(
232				document.documentElement.scrollHeight - documentHeight,
233				offset
234			);
235			offset = Math.max(0, offset);
236
237			addClass(header, 'is-fixed');
238			header.parentNode.style.paddingTop = originalHeight + 'px';
239
240			if (nav) {
241				nav.style.height = Math.max(minNavHeight, originalNavHeight - offset) + 'px';
242				offset -= originalNavHeight - Math.max(minNavHeight, originalNavHeight - offset);
243			}
244
245			if (bar) {
246				if (offset > 0) {
247					bar.style.overflow = 'hidden';
248				}
249				else {
250					bar.style.overflow = '';
251				}
252				bar.style.height = Math.max(minBarHeight, originalBarHeight - offset) + 'px';
253				offset -= originalBarHeight - Math.max(minBarHeight, originalBarHeight - offset);
254			}
255
256			if (tagline) {
257				if (
258					offset > 0
259					&& offset < taglineHeight
260					&& taglineHeight + originalHeight < documentHeight
261				) {
262					tagline.parentNode.style.overflow = 'hidden';
263					tagline.style.transform = tagline.style.WebkitTransform =
264						'translate3d(0,'
265						+ Math.round(Math.min(offset, taglineHeight) / 2) + 'px,0)';
266					tagline.style.opacity = (taglineHeight - (offset / 1.5)) / taglineHeight;
267				}
268				else {
269					tagline.parentNode.style.overflow = '';
270					tagline.style.transform = tagline.style.WebkitTransform = 'translate3d(0,
2700,0)';
271					tagline.style.opacity = '';
272				}
273			}
274
275		};
276
277		addEvent(window, 'resize load', updateOriginalValues);
278		addEvent(window, 'scroll resize load', scroll);
279		scroll();
280
281	})(
282		document.querySelector && document.querySelector('.page-header'),
283		document.querySelector && document.querySelector('.tagline-inner')
284	);
285
286	// Mobile navigation
287	(function(nav, page) {
288		if (!nav) {
289			return;
290		}
291		document.body.insertBefore(nav, document.body.firstChild);
292		var navLink;
293		var isOpened;
294		var open, close;
295		var updateHeight = function() {
296			if (!isOpened) {
297				return;
298			}
299			if (!nav.offsetHeight) {
300				// Close the nav if it is not visible anymore
301				return close();
302			}
303			nav.style.minHeight = 0;
304			page.style.height = Math.max((window.innerHeight || document.documentElement.clientHeight), nav.offsetHeight) + 'px';
305			page.style.position = 'relative';
306			page.style.overflow = 'hidden';
307			nav.style.minHeight = '';
308		};
309		open = function() {
310			isOpened = true;
311			addClass(nav, 'is-active');
312			updateHeight();
313		};
314		close = function() {
315			isOpened = false;
316			removeClass(nav, 'is-active');
317			page.style.height = '';
318			page.style.position = '';
319			page.style.overflow = '';
320		};
321		addEvent(window, 'resize', updateHeight);
322		addClass(nav, 'is-enabled');
323		navLink = document.createElement('a');
324		navLink.innerHTML = 'navigation';
325		navLink.href = '';
326		addClass(navLink, 'main-navigation-mobile-open');
327		addEvent(navLink, 'click', function(event) {
328			eventPreventDefault(event);
329			if (hasClass(nav, 'is-active')) {
330				close();
331			}
332			else {
333				open();
334			}
335		});
336		if (document.querySelector && document.querySelector('.page')) {
337			document.querySelector('.page').insertBefore(
338				navLink,
339				document.querySelector('.page').firstChild
340			);
341		}
342		else {
343			nav.parentNode.insertBefore(navLink, nav);
344		}
345		closeButton = document.createElement('button');
346		closeButton.innerHTML = 'close';
347		addClass(closeButton, 'main-navigation-mobile-close');
348		addEvent(closeButton, 'click', function(event) {
349			if (isOpened) {
350				close();
351			}
352			eventPreventDefault(event);
353		});
354		nav.appendChild(closeButton);
355		var uls = nav.querySelectorAll('ul ul');
356		var button;
357		var buttonOnClick = function(event) {
358			toggleClass(this.parentNode, 'is-expanded');
359			toggleClass(this.parentNode, 'is-collapsed');
360			updateHeight();
361		};
362		for (var i = 0; i < uls.length; i++) {
363			button = document.createElement('button');
364			button.innerHTML = 'expand';
365			button.className = 'main-navigation-mobile-expand';
366			addEvent(button, 'click', buttonOnClick);
367			uls[i].parentNode.insertBefore(button, uls[i]);
368			if (hasClass(uls[i].parentNode, 'active') || hasClass(uls[i].parentNode, 'trail')) {
369				addClass(uls[i].parentNode, 'is-expanded');
370			}
371			else {
372				addClass(uls[i].parentNode, 'is-collapsed');
373			}
374		}
375		each(nav.querySelectorAll('a[href*="#"]'), function(link) {
376			var href = link.href.split('#');
377			var documentHref = document.location.href.split('#');
378			if (
379				href[0] &&
380				documentHref[0].substr(- href[0].length) !== href[0]
381			) {
382				return;
383			}
384			addEvent(link, 'click', function() {
385				close();
386			});
387		});
388	})(
389		document.querySelector && document.querySelector('.main-navigation-mobile'),
390		document.querySelector && document.querySelector('.page')
391	);
392
393	// Animations
394	(function() {
395
396		if (!window.Modernizr || !Modernizr.csstransitions) {
397			return;
398		}
399
400		var getCounterValue = function(data, multiplier) {
401			var value = data.number * multiplier;
402			return data.prefix
403				+ value.toFixed(data.precision).split('.').join(data.separator)
404				+ data.suffix;
405		};
406
407		var initCounterAnimation = function(element) {
408			if (!element.counterAnimationData) {
409				var value = element.innerHTML;
410				var matches = /^(.*?)(-?[0-9,.]*\d)(.*)$/.exec(value);
411				if (!matches || !matches.length) {
412					return;
413				}
414				var separator = matches[2].indexOf(',') > 0 ? ',' : '.';
415				matches[2] = matches[2].split(',').join('.');
416				if (isNaN(matches[2] * 1)) {
417					return;
418				}
419				element.counterAnimationData = {
420					original: value,
421					prefix: matches[1],
422					suffix: matches[3],
423					number: matches[2] * 1,
424					precision: Math.max(
425						0,
426						matches[2].length - matches[2].split('.')[0].length - 1
427					),
428					separator: separator,
429					duration: (element.getAttribute('data-animation-duration') || 1000) * 1
430				};
431			}
432			element.innerHTML = getCounterValue(element.counterAnimationData, 0);
433		};
434
435		var counterAnimations = [];
436
437		var runCounterAnimation = function() {
438			var animations = [];
439			var animation;
440			var multiplier;
441			for (var i = 0; i < counterAnimations.length; i++) {
442				animation = counterAnimations[i];
443				multiplier = Math.min(1, (
444					new Date().getTime() - animation.start
445				) / animation.data.duration);
446				if (multiplier < 1) {
447					animation.element.innerHTML = getCounterValue(
448						animation.data,
449						multiplier
450					);
451					animations.push(animation);
452				}
453				else {
454					animation.element.innerHTML = animation.data.original;
455				}
456			}
457			counterAnimations = animations;
458			if (window.requestAnimationFrame && counterAnimations.length) {
459				window.requestAnimationFrame(runCounterAnimation);
460			}
461		};
462
463		var startCounterAnimation = function(element) {
464			if (window.requestAnimationFrame && !counterAnimations.length) {
465				window.requestAnimationFrame(runCounterAnimation);
466			}
467			counterAnimations.push({
468				element: element,
469				data: element.counterAnimationData,
470				start: new Date().getTime()
471			});
472		};
473
474		var isHiddenInSlider = function (element) {
475			if (!element.slider) {
476				return false;
477			}
478			return !window.jQuery(element.element).closest('.rsts-slide').is(element.slider.getSlides()[element.slider.slideIndex].element);
479		};
480
481		var isInView = function(element) {
482			return (
483				(element.element.offsetWidth || element.element.offsetHeight)
484				&& (
485					element.element.getBoundingClientRect().top < (window.innerHeight || document.documentElement.clientHeight) * 0.8
486					|| element.element.getBoundingClientRect().bottom <= (window.innerHeight || document.documentElement.clientHeight)
487				)
488				&& !isHiddenInSlider(element)
489			);
490		};
491
492		var isNotInView = function(element) {
493			return (
494				(!element.element.offsetWidth && !element.element.offsetHeight)
495				|| element.element.getBoundingClientRect().top > (window.innerHeight || document.documentElement.clientHeight) * 1.2
496				|| isHiddenInSlider(element)
497			);
498		};
499
500		var elements = [];
501
502		var update = function() {
503			var rect;
504			each(elements, function(element) {
505				if (isInView(element)) {
506					if (element.element.counterAnimationData && !hasClass(element.element, 'in-view')) {
507						if (!hasClass(element.element, 'has-shown') || element.doesRepeat) {
508							startCounterAnimation(element.element);
509						}
510					}
511					addClass(element.element, 'in-view');
512					addClass(element.element, 'has-shown');
513					removeClass(element.element, 'not-in-view');
514				}
515				else if(isNotInView(element)) {
516					if (element.element.counterAnimationData && !hasClass(element.element, 'not-in-view') && element.doesRepeat) {
517						initCounterAnimation(element.element);
518					}
519					if (element.doesRepeat) {
520						addClass(element.element, 'not-in-view');
521						removeClass(element.element, 'in-view');
522					}
523				}
524			});
525		};
526
527		var updateElements = function(wrapper) {
528			wrapper = wrapper || document;
529			var newElements = wrapper.querySelectorAll && wrapper.querySelectorAll('.is-animated');
530			if (!newElements) {
531				return;
532			}
533			each(newElements, function(element) {
534				if (
535					!elementMatches(element, '.not-animated *, .not-animated')
536					&& elements.map(function(element) {
537						return element.element;
538					}).indexOf(element) === -1
539				) {
540					elements.push({
541						element: element,
542						doesRepeat: elementMatches(element, '.does-repeat *, .does-repeat'),
543						slider: window.jQuery && window.jQuery(element).closest('.rsts-main').data('rstSlider')
544					});
545					if (hasClass(element, '-counter')) {
546						initCounterAnimation(element);
547					}
548					addClass(element, 'not-in-view');
549				}
550			});
551		};
552
553		updateElements();
554
555		addEvent(window, 'scroll resize load', update);
556		if (window.jQuery) {
557			window.jQuery('.rsts-main, .mod_rocksolid_slider').on('rsts-slidestop rsts-slidestart', function(event) {
558				updateElements(this);
559				if (event.type === 'rsts-slidestop') {
560					update();
561				}
562			});
563		}
564		setTimeout(update, 0);
565
566		if (window.requestAnimationFrame) {
567			window.requestAnimationFrame(runCounterAnimation);
568		}
569		else {
570			setInterval(runCounterAnimation, 16);
571		}
572
573	})();
574
575	// Background videos
576	(function(elements) {
577		if (
578			!elements
579			|| !elements.length
580			|| !/^iPhone|^iPod/.test(navigator.platform)
581			|| window.matchMedia('(-webkit-video-playable-inline)').matches
582		) {
583			return;
584		}
585		for (var i = 0; i < elements.length; i++) {
586			if (elements[i].poster) {
587				elements[i].parentNode.style.backgroundImage = 'url("' + elements[i].poster + '")';
588			}
589			elements[i].parentNode.removeChild(elements[i]);
590		}
591	})(document.querySelectorAll && document.querySelectorAll('.centered-wrapper-background > video'));
592
593	// Moving backgrounds
594	(function(elements) {
595		if (!elements || !elements.length) {
596			return;
597		}
598		addEvent(window, 'mousemove', function(event) {
599			var percentage;
600			for (var i = 0; i < elements.length; i++) {
601				percentage = event.clientX / (
602					window.innerWidth ||
603					document.documentElement.clientWidth
604				);
605				if (hasClass(elements[i].parentNode, '-background-mousemove')) {
606					percentage = 1 - percentage;
607				}
608				percentage = Math.max(0, Math.min(1, percentage));
609				elements[i].style.transform =
610					elements[i].style.webkitTransform =
611					'translate3d(' + (percentage * -10) + '%, 0, 0)';
612			}
613		});
614	})(document.querySelectorAll && document.querySelectorAll('.-background-mousemove-inverted > .centered-wrapper-background, .-background-mousemove > .centered-wrapper-background'));
615
616	// Parallax backgrounds
617	(function(elements) {
618
619		if (!elements || !elements.length) {
620			return;
621		}
622
623		if (!('transform' in elements[0].style) && !('webkitTransform' in elements[0].style)) {
624			return;
625		}
626
627		var imageCache = [];
628
629		var update = function(event) {
630
631			var windowHeight = window.innerHeight || document.documentElement.clientHeight;
632
633			// Get all dimensions from the browser before applying styles for better performance
634			var parentRects = [];
635			for (var i = 0; i < elements.length; i++) {
636				parentRects[i] = elements[i].parentNode.getBoundingClientRect();
637				if (!('width' in parentRects[i]) || !('height' in parentRects[i])) {
638					return;
639				}
640			}
641
642			var position, height;
643			for (i = 0; i < elements.length; i++) {
644				// Skip invisible elements
645				if (parentRects[i].bottom < 0 || parentRects[i].top > windowHeight) {
646					continue;
647				}
648				height = 0;
649				if (imageCache[i].width && imageCache[i].height) {
650					height = imageCache[i].height / imageCache[i].width * parentRects[i].width;
651				}
652				height = Math.round(Math.max(
653					height,
654					Math.min(parentRects[i].height, windowHeight) * 1.1
655				));
656				elements[i].style.bottom = 'auto';
657				elements[i].style.height = height + 'px';
658				if (height < windowHeight || (windowHeight < parentRects[i].height && height < parentRects[i].height)) {
659					position = parentRects[i].top / (windowHeight - parentRects[i].height)
660						* -(height - parentRects[i].height);
661				}
662				else {
663					position = (windowHeight - parentRects[i].top) / (windowHeight + parentRects[i].height)
664						* -(height - parentRects[i].height);
665				}
666				elements[i].style.transform =
667				elements[i].style.webkitTransform =
668					'translate3d(0, ' + Math.round(position) + 'px, 0)';
669			}
670
671		};
672		addEvent(window, 'scroll resize', update);
673
674		for (var i = 0; i < elements.length; i++) {
675			imageCache[i] = new Image();
676			addEvent(imageCache[i], 'load', update);
677			imageCache[i].src = elements[i].getAttribute
678				&& elements[i].getAttribute('data-image-url');
679		}
680
681	})(document.querySelectorAll && document.querySelectorAll('.-background-parallax > .centered-wrapper-background'));
682
683	// Header login
684	(function(elements) {
685		if (!elements || !elements.length) {
686			return;
687		}
688		var click = function(event) {
689			eventPreventDefault(event);
690			toggleClass(this.parentNode, 'is-active');
691			var input = this.parentNode.querySelector('input[type=text]');
692			if (input && hasClass(this.parentNode, 'is-active')) {
693				input.focus();
694			}
695			else {
696				this.blur();
697			}
698		};
699		var headline;
700		var button;
701		for (var i = 0; i < elements.length; i++) {
702			headline = elements[i].querySelector('h1, h2, h3, h4, h5, h6');
703			if (headline) {
704				headline.setAttribute('tabindex', '0');
705				addEvent(headline, 'click', click);
706				if (
707					hasClass(elements[i], 'logout')
708					&& (button = elements[i].querySelector('button[type=submit]'))
709				) {
710					headline.innerHTML = button.innerHTML;
711				}
712			}
713			if (elements[i].querySelector('.error')) {
714				addClass(elements[i], 'is-active');
715			}
716		}
717	})(document.querySelectorAll && document.querySelectorAll('.header-login'));
718
719	// Header Dropdown touch support
720	(function(elements) {
721		if (!elements || !elements.length) {
722			return;
723		}
724		var headline;
725		for (var i = 0; i < elements.length; i++) {
726			headline = elements[i].querySelector('h1, h2, h3, h4, h5, h6');
727			if (headline) {
728				headline.setAttribute('tabindex', '0');
729				headline.setAttribute('aria-haspopup', 'true');
730				addEvent(headline, 'click', function() {});
731			}
732		}
733	})(document.querySelectorAll && document.querySelectorAll('.header-dropdown'));
734
735	// Rotating boxes touch support
736	(function(elements) {
737		if (!elements || !elements.length) {
738			return;
739		}
740		for (var i = 0; i < elements.length; i++) {
741			elements[i].setAttribute('aria-haspopup', 'true');
742			addEvent(elements[i], 'touchend', function(event) {
743				if (event.target && hasClass(event.target, 'rotating-boxes-item-link')) {
744					return;
745				}
746				eventPreventDefault(event);
747				// Remove the hover state from the element on iOS
748				if (hasClass(this, 'hover')) {
749					var parent = this.parentNode;
750					var next = this.nextSibling;
751					parent.removeChild(this);
752					if (next) {
753						parent.insertBefore(this, next);
754					}
755					else {
756						parent.appendChild(this);
757					}
758					this.offsetWidth;
759				}
760				toggleClass(this, 'hover');
761			});
762		}
763	})(document.querySelectorAll && document.querySelectorAll('.rotating-boxes-item'));
764
765	// Tabs
766	(function(navigations) {
767
768		if (!navigations || !navigations.length) {
769			return;
770		}
771
772		var documentHref = document.location.href.split('#');
773
774		each(navigations, function(navigation) {
775
776			var links = navigation.querySelectorAll('a');
777			var targets = [];
778			var clickFirst;
779
780			each(links, function(link, i) {
781
782				var href = link.href.split('#');
783				if (
784					href[0] &&
785					documentHref[0].substr(- href[0].length) !== href[0]
786				) {
787					return;
788				}
789				var target = document.querySelector('#' + href[1]);
790				if (!target) {
791					return;
792				}
793
794				targets.push(target);
795
796				var onclick = function(event) {
797					eventPreventDefault(event);
798					eventStop(event);
799					each(targets, function(target) {
800						target.style.display = 'none';
801					});
802					removeClass(links, 'is-active');
803					addClass(link, 'is-active');
804					target.style.display = '';
805					link.blur();
806					triggerEvent(window, 'resize');
807				};
808				addEvent(link, 'click', onclick);
809
810				// First element
811				if (!clickFirst) {
812					clickFirst = onclick;
813				}
814
815			});
816
817			clickFirst();
818
819		});
820
821	})(document.querySelectorAll && document.querySelectorAll('.tab-navigation'));
822
823	// Anchor jumping on page load
824	(function($) {
825
826		if (!$ || !location.hash) {
827			return;
828		}
829
830		// Skip if the page was reloaded or navigated back in history
831		if (window.performance && performance.navigation && (
832			performance.navigation.type === 1
833			|| performance.navigation.type === 2
834		)) {
835			return;
836		}
837
838		var hash = location.hash;
839
840		scroll();
841		$(function() {
842			setTimeout(scroll);
843			setTimeout(scroll, 500);
844			setTimeout(scroll, 1000);
845		});
846
847		function scroll() {
848			$(hash).first().each(function() {
849				$(window).scrollTop(Math.ceil(
850					$(this).offset().top -
851					(parseFloat($(this).css('margin-top')) || 0) -
852					(
853						(!window.matchMedia || window.matchMedia("(max-width: 900px)").matches)
854						? 0
855						: $('.page-header').outerHeight() ||  0
856					)
857				));
858			});
859		}
860
861	})(window.jQuery);
862
863})();

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.