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.