PageSourceSearch

https://www.hamburgerunterwelten.de/files/tao/js/script.js

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

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.