1// page init 2jQuery(function(){ 3 initTabHash(); 4 initSorting(); 5 initCustomHover(); 6 initCarousel(); 7 initSlideShow(); 8 initOpenClose(); 9 initAccordion(); 10 initLightbox(); 11 initPopups(); 12 initFitVids(); 13 14 initPreventDefault(); 15}); 16 17// init prevent default 18function initPreventDefault() { 19 $('a[href^="#"]').bind('click', function(e){ 20 e.preventDefault(); 21 return false; 22 }); 23} 24 25function initTabHash() { 26 $('#tab-container').easytabs({ 27 animate: true, 28 animationSpeed: 300 29 }); 30} 31 32// filter init 33function initSorting(){ 34 jQuery('.sorting-js-box').each(function(){ 35 var sortHolder = jQuery(this), 36 sortItems = sortHolder.find('.sorting-nav li a'), 37 sortingBlocks = sortHolder.find('.sorting-content .item'), 38 activeClass = 'active', 39 hideActiveClass = 'inactive', 40 clearLink = sortHolder.find('.sorting-nav .clear'), 41 sortActive = 'start-sort'; 42 43 sortItems.each(function(){ 44 var currentItem = jQuery(this); 45 46 function doSorting(e){ 47 e.preventDefault(); 48 if (!currentItem.hasClass(activeClass)) { 49 currentItem.addClass(activeClass); 50 } else { 51 currentItem.removeClass(activeClass); 52 } 53 if(clearLink.hasClass(activeClass)) clearLink.removeClass(activeClass); 54 var checkedBlok = sortItems.filter('.'+activeClass); 55 var selector = ''; 56 57 checkedBlok.each(function(index){ 58 selector += (index > 0 ? ',' : '') + ('[data-sort*="' + this.getAttribute('data-sort') + '"]'); 59 }); 60 61 if (!sortHolder.hasClass(sortActive)) { 62 sortHolder.addClass(sortActive); 63 sortingBlocks.css({opacity: 1}); 64 } 65 var currentCounter = sortingBlocks.removeClass(activeClass).addClass(hideActiveClass).animate( 66 { opacity: 0 }, 67 { queue: false } 68 ).filter(selector).removeClass(hideActiveClass).addClass(activeClass).animate( 69 { opacity: 1 }, 70 { queue: false } 71 ); 72 }; 73 function clearAll(e){ 74 e.preventDefault(); 75 76 sortItems.filter('.'+activeClass).removeClass(activeClass); 77 clearLink.addClass(activeClass); 78 sortingBlocks.filter('.'+activeClass).removeClass(activeClass); 79 sortingBlocks.filter('.'+hideActiveClass).removeClass(hideActiveClass).animate({opacity: 1}, {queue: false}); 80 }; 81 clearLink.on('click', clearAll); 82 currentItem.on('click', doSorting); 83 }); 84 }); 85}; 86 87// add classes on hover/touch 88function initCustomHover() { 89 jQuery('.sorting-content .item').touchHover(); 90 91 jQuery('.gallery.gallery-with-hover .slide').each(function(){ 92 var hoverBox = jQuery(this), 93 animBox = hoverBox.find('.btn-wrap'), 94 animSpeed = 300; 95 96 animBox.css({ 97 display: 'none', 98 opacity: 0 99 }) 100 var windowWidth= jQuery(window).width(); 101 if(windowWidth > 480){ 102 hoverBox.touchHover({ 103 onHover: function(element) { 104 animBox.css({display: 'block'}) 105 animBox.stop().animate({opacity: 1}, animSpeed); 106 }, 107 onLeave: function(element) { 108 animBox.stop().animate({opacity: 0}, animSpeed, function(){ 109 animBox.css({display: 'none'}) 110 }); 111 } 112 }); 113 } 114 }); 115 116 jQuery('.tabs-block .box').each(function(){ 117 var hoverBox = jQuery(this), 118 animBox = hoverBox.find('.btns'), 119 animSpeed = 300; 120 121 animBox.css({ 122 display: 'none', 123 opacity: 0 124 }) 125 var windowWidth= jQuery(window).width(); 126 if(windowWidth > 480){ 127 hoverBox.touchHover({ 128 onHover: function(element) { 129 animBox.css({display: 'block'}) 130 animBox.stop().animate({opacity: 1}, animSpeed); 131 }, 132 onLeave: function(element) { 133 animBox.stop().animate({opacity: 0}, animSpeed, function(){ 134 animBox.css({display: 'none'}) 135 }); 136 } 137 }); 138 } 139 }); 140 141} 142 143// scroll gallery init 144function initCarousel() { 145 jQuery('.gallery').scrollGallery({ 146 mask: '.mask', 147 slider: '.slideset', 148 slides: '.slide', 149 btnPrev: 'a.btn-prev', 150 btnNext: 'a.btn-next', 151 circularRotation: false, 152 autoRotation: false, 153 switchTime: 3000, 154 animSpeed: 500, 155 step: 1 156 }); 157} 158 159// fade gallery init 160function initSlideShow() { 161 jQuery('.slideshow').fadeGallery({ 162 slides: '.slide', 163 pagerLinks: '.thumbnails li', 164 event: 'click', 165 disableFadeIE: true, 166 autoRotation: false, 167 autoHeight: true, 168 switchTime: 3000, 169 animSpeed: 500 170 }); 171} 172 173// handle flexible video size 174function initFitVids() { 175 jQuery('#fancybox-content').fitVids(); 176} 177 178// fancybox modal popup init 179function initLightbox() { 180 jQuery('a.lightbox, a[data-rel*="lightbox"]').each(function(){ 181 var link = jQuery(this); 182 link.attr('rel', link.attr('data-rel')).fancybox({ 183 padding: 10, 184 margin: 0,
185 cyclic: false, 186 autoScale: true, 187 overlayShow: true, 188 overlayOpacity: 0.65, 189 overlayColor: '#000000', 190 titlePosition: 'inside', 191 onComplete: function(box) { 192 if(link.attr('href').indexOf('#') === 0) { 193 jQuery('#fancybox-content').find('a.close').unbind('click.fb').bind('click.fb', function(e){ 194 jQuery.fancybox.close(); 195 e.preventDefault(); 196 }); 197 } 198 199 initFitVids() 200 var lighboxHolder = jQuery('#fancybox-wrap'), 201 wrap = lighboxHolder.find('#fancybox-content'), 202 extraWidth = 40, 203 win = jQuery(window); 204 if(wrap.find('.fluid-width-video-wrapper')) { 205 lighboxHolder.addClass('video-active'); 206 } 207 } 208 }); 209 }); 210} 211 212// popups init for mobile nav 213function initPopups() { 214 jQuery('.mobile-nav').contentPopup({ 215 mode: 'click', 216 popup: '.slide', 217 btnOpen: '.mobile-selector', 218 openClass: 'active' 219 }); 220} 221 222// Fancybox overlay fix 223jQuery(function(){ 224 // detect device type 225 var isTouchDevice = ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch; 226 var isWinPhoneDevice = navigator.msPointerEnabled && /MSIE 10.*Touch/.test(navigator.userAgent); 227 228 if(!isTouchDevice && !isWinPhoneDevice) { 229 // create <style> rules 230 var head = document.getElementsByTagName('head')[0], 231 style = document.createElement('style'), 232 rules = document.createTextNode('#fancybox-overlay'+'{'+ 233 'position:fixed;'+ 234 'top:0;'+ 235 'left:0;'+ 236 '}'); 237 238 // append style element 239 style.type = 'text/css'; 240 if(style.styleSheet) { 241 style.styleSheet.cssText = rules.nodeValue; 242 } else { 243 style.appendChild(rules); 244 } 245 head.appendChild(style); 246 } 247}); 248 249// Mobile hover plugin 250;(function($){ 251 252 // detect device type 253 var isTouchDevice = ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch, 254 isWinPhoneDevice = navigator.msPointerEnabled && /MSIE 10.*Touch/.test(navigator.userAgent); 255 256 // define events 257 var eventOn = (isTouchDevice && 'touchstart') || (isWinPhoneDevice && 'MSPointerDown') || 'mouseenter', 258 eventOff = (isTouchDevice && 'touchend') || (isWinPhoneDevice && 'MSPointerUp') || 'mouseleave'; 259 260 // event handlers 261 var toggleOn, toggleOff; 262 if(isTouchDevice || isWinPhoneDevice) { 263 // touch device handlers 264 toggleOn = function(e) { 265 var options = e.data, element = $(this); 266 267 var toggleOff = function(e) { 268 var target = $(e.target); 269 if (!target.is(element) && !target.closest(element).length) { 270 element.removeClass(options.hoverClass); 271 if(options.onLeave) options.onLeave(element); 272 $(document).off(eventOn, toggleOff); 273 } 274 }; 275 276 if(!element.hasClass(options.hoverClass)) { 277 e.preventDefault(); 278 element.addClass(options.hoverClass); 279 $(document).on(eventOn, toggleOff); 280 if(options.onHover) options.onHover(element); 281 } 282 }; 283 } else { 284 // desktop browser handlers 285 toggleOn = function(e) { 286 var options = e.data, element = $(this); 287 element.addClass(options.hoverClass); 288 $(options.context).on(eventOff, options.selector, options, toggleOff); 289 if(options.onHover) options.onHover(element); 290 }; 291 toggleOff = function(e) { 292 var options = e.data, element = $(this); 293 element.removeClass(options.hoverClass); 294 $(options.context).off(eventOff, options.selector, toggleOff); 295 if(options.onLeave) options.onLeave(element); 296 }; 297 } 298 299 // jQuery plugin 300 $.fn.touchHover = function(opt) { 301 var options = $.extend({ 302 context: this.context, 303 selector: this.selector, 304 hoverClass: 'hover' 305 }, opt); 306 307 $(this.context).on(eventOn, this.selector, options, toggleOn); 308 return this; 309 }; 310}(jQuery)); 311 312// jQuery Carousel plugin 313;(function($){ 314 function ScrollGallery(options) { 315 this.options = $.extend({ 316 mask: 'div.mask', 317 slider: '>*', 318 slides: '>*', 319 activeClass:'active', 320 disabledClass:'disabled', 321 btnPrev: 'a.btn-prev', 322 btnNext: 'a.btn-next', 323 generatePagination: false, 324 pagerList: '<ul>', 325 pagerListItem: '<li><a href="#"></a></li>', 326 pagerListItemText: 'a', 327 pagerLinks: '.pagination li', 328 currentNumber: 'span.current-num', 329 totalNumber: 'span.total-num', 330 btnPlay: '.btn-play',
331 btnPause: '.btn-pause', 332 btnPlayPause: '.btn-play-pause', 333 galleryReadyClass: 'gallery-js-ready', 334 autorotationActiveClass: 'autorotation-active', 335 autorotationDisabledClass: 'autorotation-disabled', 336 stretchSlideToMask: false, 337 circularRotation: true, 338 disableWhileAnimating: false, 339 autoRotation: false, 340 pauseOnHover: isTouchDevice ? false : true, 341 maskAutoSize: false, 342 switchTime: 4000, 343 animSpeed: 600, 344 event:'click', 345 swipeGap: false, 346 swipeThreshold: 15, 347 handleTouch: true, 348 vertical: false, 349 useTranslate3D: false, 350 step: false 351 }, options); 352 this.init(); 353 } 354 ScrollGallery.prototype = { 355 init: function() { 356 if(this.options.holder) { 357 this.findElements(); 358 this.attachEvents(); 359 this.refreshPosition(); 360 this.refreshState(true); 361 this.resumeRotation(); 362 this.makeCallback('onInit', this); 363 } 364 }, 365 findElements: function() { 366 // define dimensions proporties 367 this.fullSizeFunction = this.options.vertical ? 'outerHeight' : 'outerWidth'; 368 this.innerSizeFunction = this.options.vertical ? 'height' : 'width'; 369 this.slideSizeFunction = 'outerHeight'; 370 this.maskSizeProperty = 'height'; 371 this.animProperty = this.options.vertical ? 'marginTop' : 'marginLeft'; 372 this.swipeProperties = this.options.vertical ? ['up', 'down'] : ['left', 'right']; 373 374 // control elements 375 this.gallery = $(this.options.holder).addClass(this.options.galleryReadyClass); 376 this.mask = this.gallery.find(this.options.mask); 377 this.slider = this.mask.find(this.options.slider); 378 this.slides = this.slider.find(this.options.slides); 379 this.btnPrev = this.gallery.find(this.options.btnPrev); 380 this.btnNext = this.gallery.find(this.options.btnNext); 381 this.currentStep = 0; this.stepsCount = 0; 382 383 // get start index 384 if(this.options.step === false) { 385 var activeSlide = this.slides.filter('.'+this.options.activeClass); 386 if(activeSlide.length) { 387 this.currentStep = this.slides.index(activeSlide); 388 } 389 } 390 391 // calculate offsets 392 this.calculateOffsets(); 393 394 // create gallery pagination 395 if(typeof this.options.generatePagination === 'string') { 396 this.pagerLinks = $(); 397 this.buildPagination(); 398 } else { 399 this.pagerLinks = this.gallery.find(this.options.pagerLinks); 400 this.attachPaginationEvents(); 401 } 402 403 // autorotation control buttons 404 this.btnPlay = this.gallery.find(this.options.btnPlay); 405 this.btnPause = this.gallery.find(this.options.btnPause); 406 this.btnPlayPause = this.gallery.find(this.options.btnPlayPause); 407 408 // misc elements 409 this.curNum = this.gallery.find(this.options.currentNumber); 410 this.allNum = this.gallery.find(this.options.totalNumber); 411 }, 412 attachEvents: function() { 413 // bind handlers scope 414 var self = this; 415 this.bindHandlers(['onWindowResize']); 416 $(window).bind('load resize orientationchange', this.onWindowResize); 417 418 // previous and next button handlers 419 if(this.btnPrev.length) { 420 this.prevSlideHandler = function(e) { 421 e.preventDefault(); 422 self.prevSlide(); 423 }; 424 this.btnPrev.bind(this.options.event, this.prevSlideHandler); 425 } 426 if(this.btnNext.length) { 427 this.nextSlideHandler = function(e) { 428 e.preventDefault(); 429 self.nextSlide(); 430 }; 431 this.btnNext.bind(this.options.event, this.nextSlideHandler); 432 } 433 434 // pause on hover handling 435 if(this.options.pauseOnHover && !isTouchDevice) { 436 this.hoverHandler = function() { 437 if(self.options.autoRotation) { 438 self.galleryHover = true; 439 self.pauseRotation(); 440 } 441 }; 442 this.leaveHandler = function() { 443 if(self.options.autoRotation) { 444 self.galleryHover = false; 445 self.resumeRotation(); 446 } 447 }; 448 this.gallery.bind({mouseenter: this.hoverHandler, mouseleave: this.leaveHandler}); 449 } 450 451 // autorotation buttons handler 452 if(this.btnPlay.length) { 453 this.btnPlayHandler = function(e) { 454 e.preventDefault(); 455 self.startRotation(); 456 }; 457 this.btnPlay.bind(this.options.event, this.btnPlayHandler); 458 } 459 if(this.btnPause.length) { 460 this.btnPauseHandler = function(e) { 461 e.preventDefault(); 462 self.stopRotation(); 463 }; 464 this.btnPause.bind(this.options.event, this.btnPauseHandler); 465 } 466 if(this.btnPlayPause.length) { 467 this.btnPlayPauseHandler = function(e) { 468 e.preventDefault(); 469 if(!self.gallery.hasClass(self.options.autorotationActiveClass)) { 470 self.startRotation(); 471 } else { 472 self.stopRotation(); 473 } 474 }; 475 this.btnPlayPause.bind(this.options.event, this.btnPlayPauseHandler); 476 } 477 478 // swipe event handling 479 if(isTouchDevice) { 480 // enable hardware acceleration 481 if(this.options.useTranslate3D) { 482 this.slider.css({'-webkit-transform': 'translate3d(0px, 0px, 0px)'}); 483 } 484 485 // swipe gestures 486 if(this.options.handleTouch && jQuery.fn.hammer) { 487 this.mask.hammer({ 488 drag_block_horizontal: this.options.vertical ? false : true, 489 drag_block_vertical: this.options.vertical ? true : false, 490 drag_min_distance: 1 491 }).on(this.options.vertical ? 'touch release dragup dragdown swipeup swipedown' : 'touch release dragleft dragright swipeleft swiperight', function(ev){ 492 switch(ev.type) { 493 case 'touch': 494 if(!self.galleryAnimating){ 495 self.originalOffset = parseInt(self.slider.stop(true, false).css(self.animProperty), 10); 496 } 497 break; 498 case (self.options.vertical? 'dragup' : 'dragright'): 499 case (self.options.vertical? 'dragdown' : 'dragleft'): 500 if(!self.galleryAnimating){ 501 if(ev.gesture.direction === self.swipeProperties[0] || ev.gesture.direction === self.swipeProperties[1]){ 502 var tmpOffset = self.originalOffset + ev.gesture[self.options.vertical ? 'deltaY' : 'deltaX']; 503 tmpOffset = Math.max(Math.min(0, tmpOffset), self.maxOffset) 504 self.tmpProps = {}; 505 self.tmpProps[self.animProperty] = tmpOffset; 506 self.slider.css(self.tmpProps); 507 ev.gesture.preventDefault(); 508 }; 509 }; 510 break; 511 case (self.options.vertical ? 'swipeup' : 'swipeleft'): 512 if(!self.galleryAnimating){ 513 if(ev.gesture.direction === self.swipeProperties[0]) self.nextSlide(); 514 } 515 ev.gesture.stopDetect(); 516 break; 517 case (self.options.vertical ? 'swipedown' : 'swiperight'): 518 if(!self.galleryAnimating){ 519 if(ev.gesture.direction === self.swipeProperties[1]) self.prevSlide(); 520 } 521 ev.gesture.stopDetect(); 522 break; 523 524 case 'release': 525 if(!self.galleryAnimating){ 526 if(Math.abs(ev.gesture[self.options.vertical ? 'deltaY' : 'deltaX']) > self.options.swipeThreshold) { 527 if(self.options.vertical){ 528 if(ev.gesture.direction == 'down') self.prevSlide(); else if(ev.gesture.direction == 'up') self.nextSlide(); 529 } 530 else { 531 if(ev.gesture.direction == 'right') self.prevSlide(); else if(ev.gesture.direction == 'left') self.nextSlide(); 532 } 533 } 534 else { 535 self.switchSlide(); 536 } 537 } 538 break; 539 } 540 }); 541 } 542 } 543 }, 544 onWindowResize: function() { 545 if(!this.galleryAnimating) { 546 this.calculateOffsets(); 547 this.refreshPosition(); 548 this.buildPagination(); 549 this.refreshState(); 550 this.resizeQueue = false;
551 } else { 552 this.resizeQueue = true; 553 } 554 }, 555 refreshPosition: function() { 556 this.currentStep = Math.min(this.currentStep, this.stepsCount - 1); 557 this.tmpProps = {}; 558 this.tmpProps[this.animProperty] = this.getStepOffset(); 559 this.slider.stop().css(this.tmpProps); 560 }, 561 calculateOffsets: function() { 562 var self = this, tmpOffset, tmpStep; 563 if(this.options.stretchSlideToMask) { 564 var tmpObj = {}; 565 tmpObj[this.innerSizeFunction] = this.mask[this.innerSizeFunction](); 566 this.slides.css(tmpObj); 567 } 568 569 this.maskSize = this.mask[this.innerSizeFunction](); 570 this.sumSize = this.getSumSize(); 571 this.maxOffset = this.maskSize - this.sumSize; 572 573 // vertical gallery with single size step custom behavior 574 if(this.options.vertical && this.options.maskAutoSize) { 575 this.options.step = 1; 576 this.stepsCount = this.slides.length; 577 this.stepOffsets = [0]; 578 tmpOffset = 0; 579 for(var i = 0; i < this.slides.length; i++) { 580 tmpOffset -= $(this.slides[i])[this.fullSizeFunction](true); 581 this.stepOffsets.push(tmpOffset); 582 } 583 this.maxOffset = tmpOffset; 584 return; 585 } 586 587 // scroll by slide size 588 if(typeof this.options.step === 'number' && this.options.step > 0) { 589 this.slideDimensions = []; 590 this.slides.each($.proxy(function(ind, obj){ 591 self.slideDimensions.push( $(obj)[self.fullSizeFunction](true) ); 592 },this)); 593 594 // calculate steps count 595 this.stepOffsets = [0]; 596 this.stepsCount = 1; 597 tmpOffset = tmpStep = 0; 598 while(tmpOffset > this.maxOffset) { 599 tmpOffset -= this.getSlideSize(tmpStep, tmpStep + this.options.step); 600 tmpStep += this.options.step; 601 this.stepOffsets.push(Math.max(tmpOffset, this.maxOffset)); 602 this.stepsCount++; 603 } 604 } 605 // scroll by mask size 606 else { 607 // define step size 608 this.stepSize = this.maskSize; 609 610 // calculate steps count 611 this.stepsCount = 1; 612 tmpOffset = 0; 613 while(tmpOffset > this.maxOffset) { 614 tmpOffset -= this.stepSize; 615 this.stepsCount++; 616 } 617 } 618 }, 619 getSumSize: function() { 620 var sum = 0; 621 this.slides.each($.proxy(function(ind, obj){ 622 sum += $(obj)[this.fullSizeFunction](true); 623 },this)); 624 this.slider.css(this.innerSizeFunction, sum); 625 return sum; 626 }, 627 getStepOffset: function(step) { 628 step = step || this.currentStep; 629 if(typeof this.options.step === 'number') { 630 return this.stepOffsets[this.currentStep]; 631 } else { 632 return Math.max(-this.currentStep * this.stepSize, this.maxOffset); 633 } 634 }, 635 getSlideSize: function(i1, i2) { 636 var sum = 0; 637 for(var i = i1; i < Math.min(i2, this.slideDimensions.length); i++) { 638 sum += this.slideDimensions[i]; 639 } 640 return sum; 641 }, 642 buildPagination: function() { 643 if(typeof this.options.generatePagination === 'string') { 644 if(!this.pagerHolder) { 645 this.pagerHolder = this.gallery.find(this.options.generatePagination); 646 } 647 if(this.pagerHolder.length && this.oldStepsCount != this.stepsCount) { 648 this.oldStepsCount = this.stepsCount; 649 this.pagerHolder.empty(); 650 this.pagerList = $(this.options.pagerList).appendTo(this.pagerHolder); 651 for(var i = 0; i < this.stepsCount; i++) { 652 $(this.options.pagerListItem).appendTo(this.pagerList).find(this.options.pagerListItemText).text(i+1); 653 } 654 this.pagerLinks = this.pagerList.children(); 655 this.attachPaginationEvents(); 656 } 657 } 658 }, 659 attachPaginationEvents: function() { 660 var self = this; 661 this.pagerLinksHandler = function(e) { 662 e.preventDefault(); 663 self.numSlide(self.pagerLinks.index(e.currentTarget)); 664 }; 665 this.pagerLinks.bind(this.options.event, this.pagerLinksHandler); 666 }, 667 prevSlide: function() { 668 if(!(this.options.disableWhileAnimating && this.galleryAnimating)) { 669 if(this.currentStep > 0) { 670 this.currentStep--; 671 this.switchSlide(); 672 } else if(this.options.circularRotation) { 673 this.currentStep = this.stepsCount - 1; 674 this.switchSlide(); 675 } 676 } 677 }, 678 nextSlide: function(fromAutoRotation) { 679 if(!(this.options.disableWhileAnimating && this.galleryAnimating)) { 680 if(this.currentStep < this.stepsCount - 1) { 681 this.currentStep++; 682 this.switchSlide(); 683 } else if(this.options.circularRotation || fromAutoRotation === true) { 684 this.currentStep = 0; 685 this.switchSlide(); 686 } 687 } 688 }, 689 numSlide: function(c) { 690 if(this.currentStep != c) { 691 this.currentStep = c; 692 this.switchSlide(); 693 } 694 }, 695 switchSlide: function() { 696 var self = this; 697 this.galleryAnimating = true; 698 this.tmpProps = {};
699 this.tmpProps[this.animProperty] = this.getStepOffset(); 700 this.slider.stop().animate(this.tmpProps, {duration: this.options.animSpeed, complete: function(){ 701 // animation complete 702 self.galleryAnimating = false; 703 if(self.resizeQueue) { 704 self.onWindowResize(); 705 } 706 707 // onchange callback 708 self.makeCallback('onChange', self); 709 self.autoRotate(); 710 }}); 711 this.refreshState(); 712 713 // onchange callback 714 this.makeCallback('onBeforeChange', this); 715 }, 716 refreshState: function(initial) { 717 if(this.options.step === 1 || this.stepsCount === this.slides.length) { 718 this.slides.removeClass(this.options.activeClass).eq(this.currentStep).addClass(this.options.activeClass); 719 } 720 this.pagerLinks.removeClass(this.options.activeClass).eq(this.currentStep).addClass(this.options.activeClass); 721 this.curNum.html(this.currentStep+1); 722 this.allNum.html(this.stepsCount); 723 724 // initial refresh 725 if(this.options.maskAutoSize && typeof this.options.step === 'number') { 726 this.tmpProps = {}; 727 this.tmpProps[this.maskSizeProperty] = this.slides.eq(Math.min(this.currentStep,this.slides.length-1))[this.slideSizeFunction](true); 728 this.mask.stop()[initial ? 'css' : 'animate'](this.tmpProps); 729 } 730 731 // disabled state 732 if(!this.options.circularRotation) { 733 this.btnPrev.add(this.btnNext).removeClass(this.options.disabledClass); 734 if(this.currentStep === 0) this.btnPrev.addClass(this.options.disabledClass); 735 if(this.currentStep === this.stepsCount - 1) this.btnNext.addClass(this.options.disabledClass); 736 } 737 }, 738 startRotation: function() { 739 this.options.autoRotation = true; 740 this.galleryHover = false; 741 this.autoRotationStopped = false; 742 this.resumeRotation(); 743 }, 744 stopRotation: function() { 745 this.galleryHover = true; 746 this.autoRotationStopped = true; 747 this.pauseRotation(); 748 }, 749 pauseRotation: function() { 750 this.gallery.addClass(this.options.autorotationDisabledClass); 751 this.gallery.removeClass(this.options.autorotationActiveClass); 752 clearTimeout(this.timer); 753 }, 754 resumeRotation: function() { 755 if(!this.autoRotationStopped) { 756 this.gallery.addClass(this.options.autorotationActiveClass); 757 this.gallery.removeClass(this.options.autorotationDisabledClass); 758 this.autoRotate(); 759 } 760 }, 761 autoRotate: function() { 762 var self = this; 763 clearTimeout(this.timer); 764 if(this.options.autoRotation && !this.galleryHover && !this.autoRotationStopped) { 765 this.timer = setTimeout(function(){ 766 self.nextSlide(true); 767 }, this.options.switchTime); 768 } else { 769 this.pauseRotation(); 770 } 771 }, 772 bindHandlers: function(handlersList) { 773 var self = this; 774 $.each(handlersList, function(index, handler) { 775 var origHandler = self[handler]; 776 self[handler] = function() { 777 return origHandler.apply(self, arguments); 778 }; 779 }); 780 }, 781 makeCallback: function(name) { 782 if(typeof this.options[name] === 'function') { 783 var args = Array.prototype.slice.call(arguments); 784 args.shift(); 785 this.options[name].apply(this, args); 786 } 787 }, 788 destroy: function() { 789 // destroy handler 790 $(window).unbind('load resize orientationchange', this.onWindowResize); 791 this.btnPrev.unbind(this.options.event, this.prevSlideHandler); 792 this.btnNext.unbind(this.options.event, this.nextSlideHandler); 793 this.pagerLinks.unbind(this.options.event, this.pagerLinksHandler); 794 this.gallery.unbind({mouseenter: this.hoverHandler, mouseleave: this.leaveHandler}); 795 796 // autorotation buttons handlers 797 this.stopRotation(); 798 this.btnPlay.unbind(this.options.event, this.btnPlayHandler); 799 this.btnPause.unbind(this.options.event, this.btnPauseHandler); 800 this.btnPlayPause.unbind(this.options.event, this.btnPlayPauseHandler); 801 802 // destroy swipe handler 803 if(this.options.handleTouch && $.fn.hammer) { 804 this.mask.hammer().off('touch release dragup dragdown dragleft dragright swipeup swipedown swipeleft swiperight'); 805 } 806 807 // remove inline styles, classes and pagination 808 var unneededClasses = [this.options.galleryReadyClass, this.options.autorotationActiveClass, this.options.autorotationDisabledClass];
809 this.gallery.removeClass(unneededClasses.join(' ')); 810 this.slider.add(this.slides).removeAttr('style'); 811 if(typeof this.options.generatePagination === 'string') { 812 this.pagerHolder.empty(); 813 } 814 } 815 }; 816 817 // detect device type 818 var isTouchDevice = /MSIE 10.*Touch/.test(navigator.userAgent) || ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch; 819 820 // jquery plugin 821 $.fn.scrollGallery = function(opt){ 822 return this.each(function(){ 823 $(this).data('ScrollGallery', new ScrollGallery($.extend(opt,{holder:this}))); 824 }); 825 }; 826}(jQuery)); 827 828// jQuery SlideShow plugin 829;(function($){ 830 function FadeGallery(options) { 831 this.options = $.extend({ 832 slides: 'ul.slideset > li', 833 activeClass:'active', 834 disabledClass:'disabled', 835 btnPrev: 'a.btn-prev', 836 btnNext: 'a.btn-next', 837 generatePagination: false, 838 pagerList: '<ul>', 839 pagerListItem: '<li><a href="#"></a></li>', 840 pagerListItemText: 'a', 841 pagerLinks: '.pagination li', 842 currentNumber: 'span.current-num', 843 totalNumber: 'span.total-num', 844 btnPlay: '.btn-play', 845 btnPause: '.btn-pause', 846 btnPlayPause: '.btn-play-pause', 847 galleryReadyClass: 'gallery-js-ready', 848 autorotationActiveClass: 'autorotation-active', 849 autorotationDisabledClass: 'autorotation-disabled', 850 autorotationStopAfterClick: false, 851 circularRotation: true, 852 switchSimultaneously: true, 853 disableWhileAnimating: false, 854 disableFadeIE: false, 855 autoRotation: false, 856 pauseOnHover: true, 857 autoHeight: false, 858 useSwipe: false, 859 swipeThreshold: 15, 860 switchTime: 4000, 861 animSpeed: 600, 862 event:'click' 863 }, options); 864 this.init(); 865 } 866 FadeGallery.prototype = { 867 init: function() { 868 if(this.options.holder) { 869 this.findElements(); 870 this.attachEvents(); 871 this.refreshState(true); 872 this.autoRotate(); 873 this.makeCallback('onInit', this); 874 } 875 }, 876 findElements: function() { 877 // control elements 878 this.gallery = $(this.options.holder).addClass(this.options.galleryReadyClass); 879 this.slides = this.gallery.find(this.options.slides); 880 this.slidesHolder = this.slides.eq(0).parent(); 881 this.stepsCount = this.slides.length; 882 this.btnPrev = this.gallery.find(this.options.btnPrev); 883 this.btnNext = this.gallery.find(this.options.btnNext); 884 this.currentIndex = 0; 885 886 // disable fade effect in old IE 887 if(this.options.disableFadeIE && !$.support.opacity) { 888 this.options.animSpeed = 0; 889 } 890 891 // create gallery pagination 892 if(typeof this.options.generatePagination === 'string') { 893 this.pagerHolder = this.gallery.find(this.options.generatePagination).empty(); 894 this.pagerList = $(this.options.pagerList).appendTo(this.pagerHolder); 895 for(var i = 0; i < this.stepsCount; i++) { 896 $(this.options.pagerListItem).appendTo(this.pagerList).find(this.options.pagerListItemText).text(i+1); 897 } 898 this.pagerLinks = this.pagerList.children(); 899 } else { 900 this.pagerLinks = this.gallery.find(this.options.pagerLinks); 901 } 902 903 // get start index 904 var activeSlide = this.slides.filter('.'+this.options.activeClass); 905 if(activeSlide.length) { 906 this.currentIndex = this.slides.index(activeSlide); 907 } 908 this.prevIndex = this.currentIndex; 909 910 // autorotation control buttons 911 this.btnPlay = this.gallery.find(this.options.btnPlay); 912 this.btnPause = this.gallery.find(this.options.btnPause); 913 this.btnPlayPause = this.gallery.find(this.options.btnPlayPause); 914 915 // misc elements 916 this.curNum = this.gallery.find(this.options.currentNumber); 917 this.allNum = this.gallery.find(this.options.totalNumber); 918 919 // handle flexible layout 920 this.slides.css({display:'block',opacity:0}
920).eq(this.currentIndex).css({ 921 opacity:'' 922 }); 923 }, 924 attachEvents: function() { 925 var self = this; 926 927 // flexible layout handler 928 this.resizeHandler = function() { 929 self.onWindowResize(); 930 }; 931 $(window).bind('load resize orientationchange', this.resizeHandler); 932 933 if(this.btnPrev.length) { 934 this.btnPrevHandler = function(e){ 935 e.preventDefault(); 936 self.prevSlide(); 937 if(self.options.autorotationStopAfterClick) { 938 self.stopRotation(); 939 } 940 }; 941 this.btnPrev.bind(this.options.event, this.btnPrevHandler); 942 } 943 if(this.btnNext.length) { 944 this.btnNextHandler = function(e) { 945 e.preventDefault(); 946 self.nextSlide(); 947 if(self.options.autorotationStopAfterClick) { 948 self.stopRotation(); 949 } 950 }; 951 this.btnNext.bind(this.options.event, this.btnNextHandler); 952 } 953 if(this.pagerLinks.length) { 954 this.pagerLinksHandler = function(e) { 955 e.preventDefault(); 956 self.numSlide(self.pagerLinks.index(e.currentTarget)); 957 if(self.options.autorotationStopAfterClick) { 958 self.stopRotation(); 959 } 960 }; 961 this.pagerLinks.bind(self.options.event, this.pagerLinksHandler); 962 } 963 964 // autorotation buttons handler 965 if(this.btnPlay.length) { 966 this.btnPlayHandler = function(e) { 967 e.preventDefault(); 968 self.startRotation(); 969 }; 970 this.btnPlay.bind(this.options.event, this.btnPlayHandler); 971 } 972 if(this.btnPause.length) { 973 this.btnPauseHandler = function(e) { 974 e.preventDefault(); 975 self.stopRotation(); 976 }; 977 this.btnPause.bind(this.options.event, this.btnPauseHandler); 978 } 979 if(this.btnPlayPause.length) { 980 this.btnPlayPauseHandler = function(e){ 981 e.preventDefault(); 982 if(!self.gallery.hasClass(self.options.autorotationActiveClass)) { 983 self.startRotation(); 984 } else { 985 self.stopRotation(); 986 } 987 }; 988 this.btnPlayPause.bind(this.options.event, this.btnPlayPauseHandler); 989 } 990 991 // swipe gestures handler 992 if(this.options.useSwipe && $.fn.hammer && isTouchDevice) { 993 this.gallery.hammer({ 994 drag_block_horizontal: true, 995 drag_min_distance: 1 996 }).on('release dragleft dragright swipeleft swiperight', function(ev){ 997 switch(ev.type) { 998 case 'dragright': 999 case 'dragleft': 1000 ev.gesture.preventDefault(); 1001 break; 1002 case 'swipeleft': 1003 self.nextSlide(); 1004 ev.gesture.stopDetect(); 1005 break; 1006 case 'swiperight': 1007 self.prevSlide(); 1008 ev.gesture.stopDetect(); 1009 break; 1010 case 'release': 1011 if(Math.abs(ev.gesture[self.options.vertical ? 'deltaY' : 'deltaX']) > self.options.swipeThreshold) { 1012 if(ev.gesture.direction == 'right') self.prevSlide(); else if(ev.gesture.direction == 'left') self.nextSlide(); 1013 } 1014 break; 1015 } 1016 }); 1017 } 1018 1019 // pause on hover handling 1020 if(this.options.pauseOnHover) { 1021 this.hoverHandler = function() { 1022 if(self.options.autoRotation) { 1023 self.galleryHover = true; 1024 self.pauseRotation(); 1025 } 1026 }; 1027 this.leaveHandler = function() { 1028 if(self.options.autoRotation) { 1029 self.galleryHover = false; 1030 self.resumeRotation(); 1031 } 1032 }; 1033 this.gallery.bind({mouseenter: this.hoverHandler, mouseleave: this.leaveHandler}); 1034 } 1035 }, 1036 onWindowResize: function(){ 1037 if(this.options.autoHeight) { 1038 this.slidesHolder.css({height: this.slides.eq(this.currentIndex).outerHeight(true) }); 1039 } 1040 }, 1041 prevSlide: function() { 1042 if(!(this.options.disableWhileAnimating && this.galleryAnimating)) { 1043 this.prevIndex = this.currentIndex; 1044 if(this.currentIndex > 0) { 1045 this.currentIndex--; 1046 this.switchSlide(); 1047 } else if(this.options.circularRotation) { 1048 this.currentIndex = this.stepsCount - 1; 1049 this.switchSlide(); 1050 } 1051 } 1052 }, 1053 nextSlide: function(fromAutoRotation) { 1054 if(!(this.options.disableWhileAnimating && this.galleryAnimating)) { 1055 this.prevIndex = this.currentIndex; 1056 if(this.currentIndex < this.stepsCount - 1) { 1057 this.currentIndex++; 1058 this.switchSlide(); 1059 } else if(this.options.circularRotation || fromAutoRotation === true) { 1060 this.currentIndex = 0; 1061 this.switchSlide(); 1062 } 1063 } 1064 }, 1065 numSlide: function(c) { 1066 if(this.currentIndex != c) { 1067 this.prevIndex = this.currentIndex; 1068 this.currentIndex = c; 1069 this.switchSlide(); 1070 } 1071 }, 1072 switchSlide: function() { 1073 var self = this; 1074 if(this.slides.length > 1) { 1075 this.galleryAnimating = true; 1076 if(!this.options.animSpeed) { 1077 this.slides.eq(this.prevIndex).css({opacity:0}
1077); 1078 } else { 1079 this.slides.eq(this.prevIndex).stop().animate({opacity:0},{duration: this.options.animSpeed}); 1080 } 1081 1082 this.switchNext = function() { 1083 if(!self.options.animSpeed) { 1084 self.slides.eq(self.currentIndex).css({opacity:''}); 1085 } else { 1086 self.slides.eq(self.currentIndex).stop().animate({opacity:1},{duration: self.options.animSpeed}); 1087 } 1088 setTimeout(function() { 1089 self.slides.eq(self.currentIndex).css({opacity:''}); 1090 self.galleryAnimating = false; 1091 self.autoRotate(); 1092 1093 // onchange callback 1094 self.makeCallback('onChange', self); 1095 }, self.options.animSpeed); 1096 }; 1097 1098 if(this.options.switchSimultaneously) { 1099 self.switchNext(); 1100 } else { 1101 clearTimeout(this.switchTimer); 1102 this.switchTimer = setTimeout(function(){ 1103 self.switchNext(); 1104 }, this.options.animSpeed); 1105 } 1106 this.refreshState(); 1107 1108 // onchange callback 1109 this.makeCallback('onBeforeChange', this); 1110 } 1111 }, 1112 refreshState: function(initial) { 1113 this.slides.removeClass(this.options.activeClass).eq(this.currentIndex).addClass(this.options.activeClass); 1114 this.pagerLinks.removeClass(this.options.activeClass).eq(this.currentIndex).addClass(this.options.activeClass); 1115 this.curNum.html(this.currentIndex+1); 1116 this.allNum.html(this.stepsCount); 1117 1118 // initial refresh 1119 if(this.options.autoHeight) { 1120 if(initial) { 1121 this.slidesHolder.css({height: this.slides.eq(this.currentIndex).outerHeight(true) }); 1122 } else { 1123 this.slidesHolder.stop().animate({height: this.slides.eq(this.currentIndex).outerHeight(true)}, {duration: this.options.animSpeed}); 1124 } 1125 } 1126 1127 // disabled state 1128 if(!this.options.circularRotation) { 1129 this.btnPrev.add(this.btnNext).removeClass(this.options.disabledClass); 1130 if(this.currentIndex === 0) this.btnPrev.addClass(this.options.disabledClass); 1131 if(this.currentIndex === this.stepsCount - 1) this.btnNext.addClass(this.options.disabledClass); 1132 } 1133 }, 1134 startRotation: function() { 1135 this.options.autoRotation = true; 1136 this.galleryHover = false; 1137 this.autoRotationStopped = false; 1138 this.resumeRotation(); 1139 }, 1140 stopRotation: function() { 1141 this.galleryHover = true; 1142 this.autoRotationStopped = true; 1143 this.pauseRotation(); 1144 }, 1145 pauseRotation: function() { 1146 this.gallery.addClass(this.options.autorotationDisabledClass); 1147 this.gallery.removeClass(this.options.autorotationActiveClass); 1148 clearTimeout(this.timer); 1149 }, 1150 resumeRotation: function() { 1151 if(!this.autoRotationStopped) { 1152 this.gallery.addClass(this.options.autorotationActiveClass); 1153 this.gallery.removeClass(this.options.autorotationDisabledClass); 1154 this.autoRotate(); 1155 } 1156 }, 1157 autoRotate: function() { 1158 var self = this; 1159 clearTimeout(this.timer); 1160 if(this.options.autoRotation && !this.galleryHover && !this.autoRotationStopped) { 1161 this.gallery.addClass(this.options.autorotationActiveClass); 1162 this.timer = setTimeout(function(){ 1163 self.nextSlide(true); 1164 }, this.options.switchTime); 1165 } else { 1166 this.pauseRotation(); 1167 } 1168 }, 1169 makeCallback: function(name) { 1170 if(typeof this.options[name] === 'function') { 1171 var args = Array.prototype.slice.call(arguments); 1172 args.shift(); 1173 this.options[name].apply(this, args); 1174 } 1175 }, 1176 destroy: function() { 1177 // navigation buttons handler 1178 this.btnPrev.unbind(this.options.event, this.btnPrevHandler); 1179 this.btnNext.unbind(this.options.event, this.btnNextHandler); 1180 this.pagerLinks.unbind(this.options.event, this.pagerLinksHandler); 1181 $(window).unbind('load resize orientationchange', this.resizeHandler); 1182 1183 // remove autorotation handlers 1184 this.stopRotation(); 1185 this.btnPlay.unbind(this.options.event, this.btnPlayHandler); 1186 this.btnPause.unbind(this.options.event, this.btnPauseHandler); 1187 this.btnPlayPause.unbind(this.options.event, this.btnPlayPauseHandler); 1188 this.gallery.bind({mouseenter: this.hoverHandler, mouseleave: this.leaveHandler}); 1189 1190 // remove swipe handler if used 1191 if(this.options.useSwipe && $.fn.hammer) { 1192 this.gallery.hammer().off('release dragleft dragright swipeleft swiperight'); 1193 } 1194 if(typeof this.options.generatePagination === 'string') { 1195 this.pagerHolder.empty(); 1196 } 1197 1198 // remove unneeded classes and styles
1199 var unneededClasses = [this.options.galleryReadyClass, this.options.autorotationActiveClass, this.options.autorotationDisabledClass]; 1200 this.gallery.removeClass(unneededClasses.join(' ')); 1201 this.slidesHolder.add(this.slides).removeAttr('style'); 1202 } 1203 }; 1204 1205 // detect device type 1206 var isTouchDevice = /MSIE 10.*Touch/.test(navigator.userAgent) || ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch; 1207 1208 // jquery plugin 1209 $.fn.fadeGallery = function(opt){ 1210 return this.each(function(){ 1211 $(this).data('FadeGallery', new FadeGallery($.extend(opt,{holder:this}))); 1212 }); 1213 }; 1214}(jQuery)); 1215 1216 1217 1218 1219// accordion menu init 1220function initAccordion() { 1221 jQuery('.accordion').each(function(){ 1222 1223 var accordion = $(this); 1224 var item = $(accordion).find('.item'); 1225 var slide = $(accordion).find('.slide'); 1226 var toggle = $(accordion).find('.opener'); 1227 1228 $(toggle).bind('click', function(e){ 1229 $(item).toggleClass('active'); 1230 $(slide).slideToggle(); 1231 }); 1232 }); 1233} 1234 1235// open-close init 1236function initOpenClose() { 1237 jQuery('.tab-container').each(function(){ 1238 var box = jQuery(this), 1239 opener = box.find('.mobile-selector'), 1240 links = box.find('.etabs a'); 1241 1242 box.openClose({ 1243 activeClass: 'active', 1244 opener: '.mobile-selector', 1245 slider: '.etabs', 1246 animSpeed: 400, 1247 effect: 'slide', 1248 makeCallback: function(){ 1249 condole.log('sdfsdfdfsdf') 1250 } 1251 }); 1252 1253 boxApi = box.data('OpenClose'); 1254 boxApi.hideSlide(); 1255 1256 links.each(function(){ 1257 var link = jQuery(this); 1258 1259 link.on('click', function(){ 1260 opener.text(link.text()); 1261 }); 1262 }); 1263 }); 1264} 1265 1266 1267 1268 1269 1270 1271 1272 1273/* 1274 * jQuery Open/Close plugin 1275 */ 1276;(function($) { 1277 function OpenClose(options) { 1278 this.options = $.extend({ 1279 addClassBeforeAnimation: true, 1280 hideOnClickOutside: false, 1281 activeClass:'active', 1282 opener:'.opener', 1283 slider:'.etabs', 1284 animSpeed: 400, 1285 effect:'fade', 1286 event:'click' 1287 }, options); 1288 this.init(); 1289 } 1290 OpenClose.prototype = { 1291 init: function() { 1292 if(this.options.holder) { 1293 this.findElements(); 1294 this.attachEvents(); 1295 this.makeCallback('onInit'); 1296 } 1297 }, 1298 findElements: function() { 1299 this.holder = $(this.options.holder); 1300 this.opener = this.holder.find(this.options.opener); 1301 this.slider = this.holder.find(this.options.slider); 1302 if (!this.holder.hasClass(this.options.activeClass)) { 1303 this.slider.addClass(slideHiddenClass); 1304 } 1305 }, 1306 attachEvents: function() { 1307 // add handler 1308 var self = this; 1309 this.eventHandler = function(e) { 1310 e.preventDefault(); 1311 1312 // console.log(e); 1313 1314 if (self.slider.hasClass(slideHiddenClass)) { 1315 self.showSlide(); 1316 } else { 1317 self.hideSlide(); 1318 } 1319 }; 1320 // console.log(self.opener.html()); 1321 self.opener.bind(self.options.event, this.eventHandler); 1322 1323 // hover mode handler 1324 if(self.options.event === 'over') { 1325 self.opener.bind('mouseenter', function() { 1326 self.holder.removeClass(self.options.activeClass); 1327 self.opener.trigger(self.options.event); 1328 }); 1329 self.holder.bind('mouseleave', function() { 1330 self.holder.addClass(self.options.activeClass); 1331 self.opener.trigger(self.options.event); 1332 }); 1333 } 1334 1335 // outside click handler 1336 self.outsideClickHandler = function(e) { 1337 if(self.options.hideOnClickOutside) { 1338 var target = $(e.target); 1339 if (!target.is(self.holder) && !target.closest(self.holder).length) { 1340 self.hideSlide(); 1341 } 1342 } 1343 }; 1344 }, 1345 showSlide: function() { 1346 var self = this; 1347 if (self.options.addClassBeforeAnimation) { 1348 self.holder.addClass(self.options.activeClass); 1349 } 1350 self.slider.removeClass(slideHiddenClass); 1351 $(document).bind('click touchstart', self.outsideClickHandler); 1352 1353 self.makeCallback('animStart', true); 1354 toggleEffects[self.options.effect].show({ 1355 box: self.slider, 1356 speed: self.options.animSpeed, 1357 complete: function() { 1358 if (!self.options.addClassBeforeAnimation) { 1359 self.holder.addClass(self.options.activeClass); 1360 } 1361 self.makeCallback('animEnd', true); 1362 } 1363 }); 1364 }, 1365 hideSlide: function() { 1366 var self = this; 1367 if (self.options.addClassBeforeAnimation) { 1368 self.holder.removeClass(self.options.activeClass); 1369 } 1370 $(document).unbind('click touchstart', self.outsideClickHandler); 1371 self.makeCallback('animStart', false); 1372 toggleEffects[self.options.effect].hide({ 1373 box: self.slider, 1374 speed: self.options.animSpeed, 1375 complete: function() { 1376 if (!self.options.addClassBeforeAnimation) { 1377 self.holder.removeClass(self.options.activeClass); 1378 } 1379 self.slider.addClass(slideHiddenClass); 1380 self.makeCallback('animEnd', false); 1381 } 1382 }); 1383 }, 1384 destroy: function() { 1385 this.slider.removeClass(slideHiddenClass).css({display:''}); 1386 this.opener.unbind(this.options.event, this.eventHandler); 1387 this.holder.removeClass(this.options.activeClass).removeData('OpenClose'); 1388 $(document).unbind('click touchstart', this.outsideClickHandler); 1389 }, 1390 makeCallback: function(name) { 1391 if(typeof this.options[name] === 'function') { 1392 var args = Array.prototype.slice.call(arguments); 1393 args.shift(); 1394 this.options[name].apply(this, args); 1395 } 1396 1397 } 1398 }; 1399 1400 // add stylesheet for slide on DOMReady 1401 var slideHiddenClass = 'js-slide-hidden'; 1402 $(function() { 1403 var tabStyleSheet = $('<style type="text/css">')[0]; 1404 var tabStyleRule = '.' + slideHiddenClass; 1405 tabStyleRule += '{position:absolute !important;left:-9999px !important;top:-9999px !important;display:block !important}'; 1406 if (tabStyleSheet.styleSheet) { 1407 tabStyleSheet.styleSheet.cssText = tabStyleRule; 1408 } else { 1409 tabStyleSheet.appendChild(document.createTextNode(tabStyleRule)); 1410 } 1411 $('head').append(tabStyleSheet); 1412 }); 1413 1414 // animation effects 1415 var toggleEffects = { 1416 slide: { 1417 show: function(o) { 1418 o.box.stop(true).hide().slideDown(o.speed, o.complete); 1419 }, 1420 hide: function(o) {
1421 o.box.stop(true).slideUp(o.speed, o.complete); 1422 } 1423 }, 1424 fade: { 1425 show: function(o) { 1426 o.box.stop(true).hide().fadeIn(o.speed, o.complete); 1427 }, 1428 hide: function(o) { 1429 o.box.stop(true).fadeOut(o.speed, o.complete); 1430 } 1431 }, 1432 none: { 1433 show: function(o) { 1434 o.box.hide().show(0, o.complete); 1435 }, 1436 hide: function(o) { 1437 o.box.hide(0, o.complete); 1438 } 1439 } 1440 }; 1441 1442 // jQuery plugin interface 1443 $.fn.openClose = function(opt) { 1444 return this.each(function() { 1445 jQuery(this).data('OpenClose', new OpenClose($.extend(opt, {holder: this}))); 1446 }); 1447 }; 1448}(jQuery)); 1449 1450/* 1451 * jQuery Accordion plugin 1452 */ 1453// ;(function($){ 1454// $.fn.slideAccordion = function(opt){ 1455// // default options 1456// var options = $.extend({ 1457// addClassBeforeAnimation: false, 1458// activeClass:'active', 1459// opener:'.opener', 1460// slider:'.slide', 1461// animSpeed: 300, 1462// collapsible:true, 1463// event:'click' 1464// },opt); 1465// 1466// return this.each(function(){ 1467// // options 1468// var accordion = $(this); 1469// var items = accordion.find(':has('+options.slider+')'); 1470// 1471// items.each(function(){ 1472// var item = $(this); 1473// var opener = item.find(options.opener); 1474// var slider = item.find(options.slider); 1475// opener.bind(options.event, function(e){ 1476// if(!slider.is(':animated')) { 1477// if(item.hasClass(options.activeClass)) { 1478// if(options.collapsible) { 1479// slider.slideUp(options.animSpeed, function(){ 1480// hideSlide(slider); 1481// item.removeClass(options.activeClass); 1482// }); 1483// } 1484// } else { 1485// // show active 1486// var levelItems = item.siblings('.'+options.activeClass); 1487// var sliderElements = levelItems.find(options.slider); 1488// item.addClass(options.activeClass); 1489// showSlide(slider).hide().slideDown(options.animSpeed); 1490// 1491// // collapse others 1492// sliderElements.slideUp(options.animSpeed, function(){ 1493// levelItems.removeClass(options.activeClass); 1494// hideSlide(sliderElements); 1495// }); 1496// } 1497// } 1498// e.preventDefault(); 1499// }); 1500// if(item.hasClass(options.activeClass)) showSlide(slider); else hideSlide(slider); 1501// }); 1502// }); 1503// }; 1504// 1505// accordion slide visibility 1506// var showSlide = function(slide) { 1507// return slide.css({position:'', top: '', left: '', width: '' }); 1508// }; 1509// var hideSlide = function(slide) { 1510// return slide.show().css({position:'absolute', top: -9999, left: -9999, width: slide.width() }); 1511// }; 1512// }(jQuery)); 1513 1514/* 1515 * Popups plugin 1516 */ 1517;(function($) { 1518 function ContentPopup(opt) { 1519 this.options = $.extend({ 1520 holder: null, 1521 popup: '.popup', 1522 btnOpen: '.open', 1523 btnClose: '.close', 1524 openClass: 'popup-active', 1525 clickEvent: 'click', 1526 mode: 'click', 1527 hideOnClickLink: true, 1528 hideOnClickOutside: true, 1529 delay: 50 1530 }, opt); 1531 if(this.options.holder) { 1532 this.holder = $(this.options.holder); 1533 this.init(); 1534 } 1535 } 1536 ContentPopup.prototype = { 1537 init: function() { 1538 this.findElements(); 1539 this.attachEvents(); 1540 }, 1541 findElements: function() { 1542 this.popup = this.holder.find(this.options.popup); 1543 this.btnOpen = this.holder.find(this.options.btnOpen); 1544 this.btnClose = this.holder.find(this.options.btnClose); 1545 }, 1546 attachEvents: function() { 1547 // handle popup openers 1548 var self = this; 1549 this.clickMode = isTouchDevice || (self.options.mode === self.options.clickEvent); 1550 1551 if(this.clickMode) { 1552 // handle click mode 1553 this.btnOpen.bind(self.options.clickEvent, function(e) { 1554 if(self.holder.hasClass(self.options.openClass)) { 1555 if(self.options.hideOnClickLink) { 1556 self.hidePopup(); 1557 } 1558 } else { 1559 self.showPopup(); 1560 } 1561 e.preventDefault(); 1562 }); 1563 1564 // prepare outside click handler 1565 this.outsideClickHandler = this.bind(this.outsideClickHandler, this); 1566 } else { 1567 // handle hover mode 1568 var timer, delayedFunc = function(func) { 1569 clearTimeout(timer); 1570 timer = setTimeout(function() { 1571 func.call(self); 1572 }, self.options.delay); 1573 }; 1574 this.btnOpen.bind('mouseover', function() { 1575 delayedFunc(self.showPopup); 1576 }).bind('mouseout', function() { 1577 delayedFunc(self.hidePopup); 1578 }); 1579 this.popup.bind('mouseover', function() { 1580 delayedFunc(self.showPopup); 1581 }).bind('mouseout', function() { 1582 delayedFunc(self.hidePopup); 1583 }); 1584 } 1585 1586 // handle close buttons 1587 this.btnClose.bind(self.options.clickEvent, function(e) { 1588 self.hidePopup(); 1589 e.preventDefault(); 1590 }); 1591 }, 1592 outsideClickHandler: function(e) { 1593 // hide popup if clicked outside 1594 var currentNode = (e.changedTouches ? e.changedTouches[0] : e).target; 1595 if(!$(currentNode).parents().filter(this.holder).length) { 1596 this.hidePopup(); 1597 } 1598 }, 1599 showPopup: function() { 1600 // reveal popup 1601 this.holder.addClass(this.options.openClass); 1602 this.popup.css({display:'block'}); 1603 1604 // outside click handler 1605 if(this.clickMode && this.options.hideOnClickOutside && !this.outsideHandlerActive) { 1606 this.outsideHandlerActive = true; 1607 $(document).bind('click touchstart', this.outsideClickHandler); 1608 } 1609 }, 1610 hidePopup: function() { 1611 // hide popup 1612 this.holder.removeClass(this.options.openClass); 1613 this.popup.css({display:'none'}); 1614 1615 // outside click handler 1616 if(this.clickMode && this.options.hideOnClickOutside && this.outsideHandlerActive) { 1617 this.outsideHandlerActive = false;
vendor: 6,031 bytes, lines 1618-1654
1618 $(document).unbind('click touchstart', this.outsideClickHandler); 1619 } 1620 }, 1621 bind: function(f, scope, forceArgs){ 1622 return function() {return f.apply(scope, forceArgs ? [forceArgs] : arguments);}; 1623 } 1624 }; 1625 1626 // detect touch devices 1627 var isTouchDevice = /MSIE 10.*Touch/.test(navigator.userAgent) || ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch; 1628 1629 // jQuery plugin interface 1630 $.fn.contentPopup = function(opt) { 1631 return this.each(function() { 1632 new ContentPopup($.extend(opt, {holder: this})); 1633 }); 1634 }; 1635}(jQuery)); 1636 1637/*! 1638* FitVids 1.0 1639* 1640* Copyright 2011, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com 1641* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ 1642* Released under the WTFPL license - http://sam.zoy.org/wtfpl/ 1643* 1644* Date: Thu Sept 01 18:00:00 2011 -0500 1645*/ 1646;(function(e){e.fn.fitVids=function(t){var n={customSelector:null},r=document.createElement("div"),i=document.getElementsByTagName("base")[0]||document.getElementsByTagName("script")[0];return r.className="fit-vids-style",r.innerHTML="­<style> .fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wrapper iframe, .fluid-width-video-wrapper object, .fluid-width-video-wrapper embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } </style>",i.parentNode.insertBefore(r,i),t&&e.extend(n,t),this.each(function(){var t=["iframe[src*='player.vimeo.com']","iframe[src*='www.youtube.com']","iframe[src*='www.kickstarter.com']","object","embed"];n.customSelector&&t.push(n.customSelector);var r=e(this).find(t.join(","));r.each(function(){var t=e(this);if(this.tagName.toLowerCase()=="embed"&&t.parent("object").length||t.parent(".fluid-width-video-wrapper").length)return;var n=this.tagName.toLowerCase()=="object"||t.attr("height")?t.attr("height"):t.height(),r=t.attr("width")?t.attr("width"):t.width(),i=n/r;if(!t.attr("id")){var s="fitvid"+Math.floor(Math.random()*999999);t.attr("id",s)}t.wrap('<div class="fluid-width-video-wrapper"></div>').parent(".fluid-width-video-wrapper").css("padding-top",i*100+"%"),t.removeAttr("height").removeAttr("width")})})}})(jQuery); 1647 1648 1649/*! Hammer.JS - v1.0.5 - 2013-04-07 1650 * http://eightmedia.github.com/hammer.js 1651 * 1652 * Copyright (c) 2013 Jorik Tangelder <[email protected]>; 1653 * Licensed under the MIT license */ 1654;(function(t,e){"use strict";function n(){if(!i.READY){i.event.determineEventTypes();for(var t in i.gestures)i.gestures.hasOwnProperty(t)&&i.detection.register(i.gestures[t]);i.event.onTouch(i.DOCUMENT,i.EVENT_MOVE,i.detection.detect),i.event.onTouch(i.DOCUMENT,i.EVENT_END,i.detection.detect),i.READY=!0}}var i=function(t,e){return new i.Instance(t,e||{})};i.defaults={stop_browser_behavior:{userSelect:"none",touchAction:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},i.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,i.HAS_TOUCHEVENTS="ontouchstart"in t,i.MOBILE_REGEX=/mobile|tablet|ip(ad|hone|od)|android/i,i.NO_MOUSEEVENTS=i.HAS_TOUCHEVENTS&&navigator.userAgent.match(i.MOBILE_REGEX),i.EVENT_TYPES={},i.DIRECTION_DOWN="down",i.DIRECTION_LEFT="left",i.DIRECTION_UP="up",i.DIRECTION_RIGHT="right",i.POINTER_MOUSE="mouse",i.POINTER_TOUCH="touch",i.POINTER_PEN="pen",i.EVENT_START="start",i.EVENT_MOVE="move",i.EVENT_END="end",i.DOCUMENT=document,i.plugins={},i.READY=!1,i.Instance=function(t,e){var r=this;return n(),this.element=t,this.enabled=!0,this.options=i.utils.extend(i.utils.extend({},i.defaults),e||{}),this.options.stop_browser_behavior&&i.utils.stopDefaultBrowserBehavior(this.element,this.options.stop_browser_behavior),i.event.onTouch(t,i.EVENT_START,function(t){r.enabled&&i.detection.startDetect(r,t)}),this},i.Instance.prototype={on:function(t,e){for(var n=t.split(" "),i=0;n.length>i;i++)this.element.addEventListener(n[i],e,!1);return this},off:function(t,e){for(var n=t.split(" "),i=0;n.length>i;i++)this.element.removeEventListener(n[i],e,!1);return this},trigger:function(t,e){var n=i.DOCUMENT.createEvent("Event");n.initEvent(t,!0,!0),n.gesture=e;var r=this.element;return i.utils.hasParent(e.target,r)&&(r=e.target),r.dispatchEvent(n),this},enable:function(t){return this.enabled=t,this}};var r=null,o=!1,s=!1;i.event={bindDom:function(t,e,n){for(var i=e.split(" "),r=0;i.length>r;r++)t.addEventListener(i[r],n,!1)},onTouch:function(t,e,n){var a=this;this.bindDom(t,i.EVENT_TYPES[e],function(c){var u=c.type.toLowerCase();if(!u.match(/mouse/)||!s){(u.match(/touch/)||u.match(/pointerdown/)||u.match(/mouse/)&&1===c.which)&&(o=!0),u.match(/touch|pointer/)&&(s=!0);var h=0;o&&(i.HAS_POINTEREVENTS&&e!=i.EVENT_END?h=i.PointerEvent.updatePointer(e,c):u.match(/touch/)?h=c.touches.length:s||(h=u.match(/up/)?0:1),h>0&&e==i.EVENT_END?e=i.EVENT_MOVE:h||(e=i.EVENT_END),h||null===r?r=c:c=r,n.call(i.detection,a.collectEventData(t,e,c)),i.HAS_POINTEREVENTS&&e==i.EVENT_END&&(h=i.PointerEvent.updatePointer(e,c))),h||(r=null,o=!1,s=!1,i.PointerEvent.reset())}})},determineEventTypes:function(){var t;t=i.HAS_POINTEREVENTS?i.PointerEvent.getEvents():i.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],i.EVENT_TYPES[i.EVENT_START]=t[0],i.EVENT_TYPES[i.EVENT_MOVE]=t[1],i.EVENT_TYPES[i.EVENT_END]=t[2]},getTouchList:function(t){return i.HAS_POINTEREVENTS?i.PointerEvent.getTouchList():t.touches?t.touches:[{identifier:1,pageX:t.pageX,pageY:t.pageY,target:t.target}]},collectEventData:function(t,e,n){var r=this.getTouchList(n,e),o=i.POINTER_TOUCH;
vendor: 10,780 bytes, lines 1654-1672
1654return(n.type.match(/mouse/)||i.PointerEvent.matchType(i.POINTER_MOUSE,n))&&(o=i.POINTER_MOUSE),{center:i.utils.getCenter(r),timeStamp:(new Date).getTime(),target:n.target,touches:r,eventType:e,pointerType:o,srcEvent:n,preventDefault:function(){this.srcEvent.preventManipulation&&this.srcEvent.preventManipulation(),this.srcEvent.preventDefault&&this.srcEvent.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return i.detection.stopDetect()}}}},i.PointerEvent={pointers:{},getTouchList:function(){var t=this,e=[];return Object.keys(t.pointers).sort().forEach(function(n){e.push(t.pointers[n])}),e},updatePointer:function(t,e){return t==i.EVENT_END?this.pointers={}:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e),Object.keys(this.pointers).length},matchType:function(t,e){if(!e.pointerType)return!1;var n={};return n[i.POINTER_MOUSE]=e.pointerType==e.MSPOINTER_TYPE_MOUSE||e.pointerType==i.POINTER_MOUSE,n[i.POINTER_TOUCH]=e.pointerType==e.MSPOINTER_TYPE_TOUCH||e.pointerType==i.POINTER_TOUCH,n[i.POINTER_PEN]=e.pointerType==e.MSPOINTER_TYPE_PEN||e.pointerType==i.POINTER_PEN,n[t]},getEvents:function(){return["pointerdown MSPointerDown","pointermove MSPointerMove","pointerup pointercancel MSPointerUp MSPointerCancel"]},reset:function(){this.pointers={}}},i.utils={extend:function(t,n,i){for(var r in n)t[r]!==e&&i||(t[r]=n[r]);return t},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){for(var e=[],n=[],i=0,r=t.length;r>i;i++)e.push(t[i].pageX),n.push(t[i].pageY);return{pageX:(Math.min.apply(Math,e)+Math.max.apply(Math,e))/2,pageY:(Math.min.apply(Math,n)+Math.max.apply(Math,n))/2}},getVelocity:function(t,e,n){return{x:Math.abs(e/t)||0,y:Math.abs(n/t)||0}},getAngle:function(t,e){var n=e.pageY-t.pageY,i=e.pageX-t.pageX;return 180*Math.atan2(n,i)/Math.PI},getDirection:function(t,e){var n=Math.abs(t.pageX-e.pageX),r=Math.abs(t.pageY-e.pageY);return n>=r?t.pageX-e.pageX>0?i.DIRECTION_LEFT:i.DIRECTION_RIGHT:t.pageY-e.pageY>0?i.DIRECTION_UP:i.DIRECTION_DOWN},getDistance:function(t,e){var n=e.pageX-t.pageX,i=e.pageY-t.pageY;return Math.sqrt(n*n+i*i)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==i.DIRECTION_UP||t==i.DIRECTION_DOWN},stopDefaultBrowserBehavior:function(t,e){var n,i=["webkit","khtml","moz","ms","o",""];if(e&&t.style){for(var r=0;i.length>r;r++)for(var o in e)e.hasOwnProperty(o)&&(n=o,i[r]&&(n=i[r]+n.substring(0,1).toUpperCase()+n.substring(1)),t.style[n]=e[o]);"none"==e.userSelect&&(t.onselectstart=function(){return!1})}}},i.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:i.utils.extend({},e),lastEvent:!1,name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);for(var e=this.current.inst.options,n=0,r=this.gestures.length;r>n;n++){var o=this.gestures[n];if(!this.stopped&&e[o.name]!==!1&&o.handler.call(o,t,this.current.inst)===!1){this.stopDetect();break}}return this.current&&(this.current.lastEvent=t),t.eventType==i.EVENT_END&&!t.touches.length-1&&this.stopDetect(),t}},stopDetect:function(){this.previous=i.utils.extend({},this.current),this.current=null,this.stopped=!0},extendEventData:function(t){var e=this.current.startEvent;if(e&&(t.touches.length!=e.touches.length||t.touches===e.touches)){e.touches=[];for(var n=0,r=t.touches.length;r>n;n++)e.touches.push(i.utils.extend({},t.touches[n]))}var o=t.timeStamp-e.timeStamp,s=t.center.pageX-e.center.pageX,a=t.center.pageY-e.center.pageY,c=i.utils.getVelocity(o,s,a);return i.utils.extend(t,{deltaTime:o,deltaX:s,deltaY:a,velocityX:c.x,velocityY:c.y,distance:i.utils.getDistance(e.center,t.center),angle:i.utils.getAngle(e.center,t.center),direction:i.utils.getDirection(e.center,t.center),scale:i.utils.getScale(e.touches,t.touches),rotation:i.utils.getRotation(e.touches,t.touches),startEvent:e}),t},register:function(t){var n=t.defaults||{};return n[t.name]===e&&(n[t.name]=!0),i.utils.extend(i.defaults,n,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.index<e.index?-1:t.index>e.index?1:0}),this.gestures}},i.gestures=i.gestures||{},i.gestures.Hold={name:"hold",index:10,defaults:{hold_timeout:500,hold_threshold:1},timer:null,handler:function(t,e){switch(t.eventType){case i.EVENT_START:clearTimeout(this.timer),i.detection.current.name=this.name,this.timer=setTimeout(function(){"hold"==i.detection.current.name&&e.trigger("hold",t)},e.options.hold_timeout);break;case i.EVENT_MOVE:t.distance>e.options.hold_threshold&&clearTimeout(this.timer);break;case i.EVENT_END:clearTimeout(this.timer)}}},i.gestures.Tap={name:"tap",index:100,defaults:{tap_max_touchtime:250,tap_max_distance:10,tap_always:!0,doubletap_distance:20,doubletap_interval:300},handler:function(t,e){if(t.eventType==i.EVENT_END){var n=i.detection.previous,r=!1;if(t.deltaTime>e.options.tap_max_touchtime||t.distance>e.options.tap_max_distance)return;n&&"tap"==n.name&&t.timeStamp-n.lastEvent.timeStamp<e.options.doubletap_interval&&t.distance<e.options.doubletap_distance&&(e.trigger("doubletap",t),r=!0),(!r||e.options.tap_always)&&(i.detection.current.name="tap",e.trigger(i.detection.current.name,t))}}},i.gestures.Swipe={name:"swipe",index:40,defaults:{swipe_max_touches:1,swipe_velocity:.7},handler:function(t,e){if(t.eventType==i.EVENT_END){if(e.options.swipe_max_touches>0&&t.touches.length>e.options.swipe_max_touches)return;(t.velocityX>e.options.swipe_velocity||t.velocityY>e.options.swipe_velocity)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},i.gestures.Drag={name:"drag",index:50,defaults:{drag_min_distance:10,drag_max_touches:1,drag_block_horizontal:!1,drag_block_vertical:!1,drag_lock_to_axis:!1,drag_lock_min_distance:25},triggered:!1,handler:function(t,n){if(i.detection.current.name!=this.name&&this.triggered)return n.trigger(this.name+"end",t),this.triggered=!1,e;if(!(n.options.drag_max_touches>0&&t.touches.length>n.options.drag_max_touches))switch(t.eventType){case i.EVENT_START:this.triggered=!1;break;case i.EVENT_MOVE:if(t.distance<n.options.drag_min_distance&&i.detection.current.name!=this.name)return;i.detection.current.name=this.name,(i.detection.current.lastEvent.drag_locked_to_axis||n.options.drag_lock_to_axis&&n.options.drag_lock_min_distance<=t.distance)&&(t.drag_locked_to_axis=!0);var r=i.detection.current.lastEvent.direction;t.drag_locked_to_axis&&r!==t.direction&&(t.direction=i.utils.isVertical(r)?0>t.deltaY?i.DIRECTION_UP:i.DIRECTION_DOWN:0>t.deltaX?i.DIRECTION_LEFT:i.DIRECTION_RIGHT),this.triggered||(n.trigger(this.name+"start",t),this.triggered=!0),n.trigger(this.name,t),n.trigger(this.name+t.direction,t),(n.options.drag_block_vertical&&i.utils.isVertical(t.direction)||n.options.drag_block_horizontal&&!i.utils.isVertical(t.direction))&&t.preventDefault();break;case i.EVENT_END:this.triggered&&n.trigger(this.name+"end",t),this.triggered=!1}}},i.gestures.Transform={name:"transform",index:45,defaults:{transform_min_scale:.01,transform_min_rotation:1,transform_always_block:!1},triggered:!1,handler:function(t,n){if(i.detection.current.name!=this.name&&this.triggered)return n.trigger(this.name+"end",t),this.triggered=!1,e;if(!(2>t.touches.length))switch(n.options.transform_always_block&&t.preventDefault(),t.eventType){case i.EVENT_START:this.triggered=!1;break;case i.EVENT_MOVE:var r=Math.abs(1-t.scale),o=Math.abs(t.rotation);if(n.options.transform_min_scale>r&&n.options.transform_min_rotation>o)return;i.detection.current.name=this.name,this.triggered||(n.trigger(this.name+"start",t),this.triggered=!0),n.trigger(this.name,t),o>n.options.transform_min_rotation&&n.trigger("rotate",t),r>n.options.transform_min_scale&&(n.trigger("pinch",t),n.trigger("pinch"+(1>t.scale?"in":"out"),t));break;case i.EVENT_END:this.triggered&&n.trigger(this.name+"end",t),this.triggered=!1}}},i.gestures.Touch={name:"touch",index:-1/0,defaults:{prevent_default:!1,prevent_mouseevents:!1},handler:function(t,n){return n.options.prevent_mouseevents&&t.pointerType==i.POINTER_MOUSE?(t.stopDetect(),e):(n.options.prevent_default&&t.preventDefault(),t.eventType==i.EVENT_START&&n.trigger(this.name,t),e)}},i.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==i.EVENT_END&&e.trigger(this.name,t)}},"object"==typeof module&&"object"==typeof module.exports?module.exports=i:(t.Hammer=i,"function"==typeof t.define&&t.define.amd&&t.define("hammer",[],function(){return i}))})(this),function(t,e){"use strict";t!==e&&(Hammer.event.bindDom=function(n,i,r){t(n).on(i,function(t){var n=t.originalEvent||t;n.pageX===e&&(n.pageX=t.pageX,n.pageY=t.pageY),n.target||(n.target=t.target),n.which===e&&(n.which=n.button),n.preventDefault||(n.preventDefault=t.preventDefault),n.stopPropagation||(n.stopPropagation=t.stopPropagation),r.call(this,n)})},Hammer.Instance.prototype.on=function(e,n){return t(this.element).on(e,n)},Hammer.Instance.prototype.off=function(e,n){return t(this.element).off(e,n)},Hammer.Instance.prototype.trigger=function(e,n){var i=t(this.element);return i.has(n.target).length&&(i=t(n.target)),i.trigger({type:e,gesture:n})},t.fn.hammer=function(e){return this.each(function(){var n=t(this),i=n.data("hammer");i?i&&e&&Hammer.utils.extend(i.options,e):n.data("hammer",new Hammer(this,e||{}))})})}(window.jQuery||window.Zepto); 1655 1656/* 1657 * FancyBox - jQuery Plugin 1658 * Simple and fancy lightbox alternative 1659 * 1660 * Examples and documentation at: http://fancybox.net 1661 * 1662 * Copyright (c) 2008 - 2010 Janis Skarnelis 1663 * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. 1664 * 1665 * Version: 1.3.4 (11/11/2010) 1666 * Requires: jQuery v1.3+ 1667 * 1668 * Dual licensed under the MIT and GPL licenses: 1669 * http://www.opensource.org/licenses/mit-license.php 1670 * http://www.gnu.org/licenses/gpl.html 1671 */ 1672(function(ao){var ae,W,Z,ad,aN,aE,ag,ap,ab,aq,an=0,ai={},aH=[],aM=0,aj={},ar=[],aL=null,aC=new Image(),aI=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,aG=/[^\.]\.(swf)\s*$/i,aB,ac=1,aJ=0,ax="",aP,aO,aa=false,ay=ao.extend(ao("<div/>")[0],{prop:0}),X=/MSIE 6/.test(navigator.userAgent)&&ao.browser.version<7&&!window.XMLHttpRequest,az=function(){W.hide();aC.onerror=aC.onload=null;if(aL){aL.abort()}ae.empty()},at=function(){if(false===ai.onError(aH,an,ai)){W.hide();aa=false;return}ai.titleShow=false;ai.width="auto";ai.height="auto";ae.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');aD()}
1672,au=function(){var e=aH[an],a,f,c,d,b,g;az();ai=ao.extend({},ao.fn.fancybox.defaults,(typeof ao(e).data("fancybox")=="undefined"?ai:ao(e).data("fancybox")));g=ai.onStart(aH,an,ai);if(g===false){aa=false;return}else{if(typeof g=="object"){ai=ao.extend(ai,g)}}c=ai.title||(e.nodeName?ao(e).attr("title"):e.title)||"";if(e.nodeName&&!ai.orig){ai.orig=ao(e).children("img:first").length?ao(e).children("img:first"):ao(e)}if(c===""&&ai.orig&&ai.titleFromAlt){c=ai.orig.attr("alt")}a=ai.href||(e.nodeName?ao(e).attr("href"):e.href)||null;if((/^(?:javascript)/i).test(a)||a=="#"){a=null}if(ai.type){f=ai.type;if(!a){a=ai.content}}else{if(ai.content){f="html"}else{if(a){if(a.match(aI)){f="image"}else{if(a.match(aG)){f="swf"}else{if(ao(e).hasClass("iframe")){f="iframe"}else{if(a.indexOf("#")===0){f="inline"}else{f="ajax"}}}}}}}if(!f){at();return}if(f=="inline"){e=a.substr(a.indexOf("#"));f=ao(e).length>0?"inline":"ajax"}ai.type=f;ai.href=a;ai.title=c;if(ai.autoDimensions){if(ai.type=="html"||ai.type=="inline"||ai.type=="ajax"){ai.width="auto";ai.height="auto"}else{ai.autoDimensions=false}}if(ai.modal){ai.overlayShow=true;ai.hideOnOverlayClick=false;ai.hideOnContentClick=false;ai.enableEscapeButton=false;ai.showCloseButton=false}ai.padding=parseInt(ai.padding,10);ai.margin=parseInt(ai.margin,10);ae.css("padding",(ai.padding+ai.margin));ao(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){ao(this).replaceWith(aE.children())});switch(f){case"html":ae.html(ai.content);aD();break;case"inline":if(ao(e).parent().is("#fancybox-content")===true){aa=false;return}ao('<div class="fancybox-inline-tmp" />').hide().insertBefore(ao(e)).bind("fancybox-cleanup",function(){ao(this).replaceWith(aE.children())}).bind("fancybox-cancel",function(){ao(this).replaceWith(ae.children())});ao(e).appendTo(ae);aD();break;case"image":aa=false;ao.fancybox.showActivity();aC=new Image();aC.onerror=function(){at()};aC.onload=function(){aa=true;aC.onerror=aC.onload=null;ak()};aC.src=a;break;case"swf":ai.scrolling="no";d='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ai.width+'" height="'+ai.height+'"><param name="movie" value="'+a+'"></param>';b="";ao.each(ai.swf,function(i,h){d+='<param name="'+i+'" value="'+h+'"></param>';b+=" "+i+'="'+h+'"'});d+='<embed src="'+a+'" type="application/x-shockwave-flash" width="'+ai.width+'" height="'+ai.height+'"'+b+"></embed></object>";ae.html(d);aD();break;case"ajax":aa=false;ao.fancybox.showActivity();ai.ajax.win=ai.ajax.success;aL=ao.ajax(ao.extend({},ai.ajax,{url:a,data:ai.ajax.data||{},dataType:"text",error:function(j,h,i){if(j.status>0){at()}},success:function(j,h,k){var i=typeof k=="object"?k:aL;if(i.status==200||i.status===0){if(typeof ai.ajax.win=="function"){g=ai.ajax.win(a,j,h,k);if(g===false){W.hide();return}else{if(typeof g=="string"||typeof g=="object"){j=g}}}ae.html(j);aD()}}}));break;case"iframe":al();break}},aD=function(){var b=ai.width,a=ai.height;if(b.toString().indexOf("%")>-1){b=parseInt((ao(window).width()-(ai.margin*2))*parseFloat(b)/100,10)+"px"}else{b=b=="auto"?"auto":b+"px"}if(a.toString().indexOf("%")>-1){a=parseInt((ao(window).height()-(ai.margin*2))*parseFloat(a)/100,10)+"px"}else{a=a=="auto"?"auto":a+"px"}ae.wrapInner('<div style="width:'+b+";height:"+a+";overflow: "+(ai.scrolling=="auto"?"auto":(ai.scrolling=="yes"?"scroll":"hidden"))+';position:relative;"></div>');ai.width=ae.width();ai.height=ae.height();al()},ak=function(){ai.width=aC.width;ai.height=aC.height;ao("<img />").attr({id:"fancybox-img",src:aC.src,alt:ai.title}).appendTo(ae);al()},al=function(){var a,b;W.hide();if(ad.is(":visible")&&false===aj.onCleanup(ar,aM,aj)){ao(".fancybox-inline-tmp").trigger("fancybox-cancel");aa=false;return}aa=true;ao(aE.add(Z)).unbind();ao(window).unbind("resize.fb scroll.fb");ao(document).unbind("keydown.fb");if(ad.is(":visible")&&aj.titlePosition!=="outside"){ad.css("height",ad.height())}ar=aH;aM=an;aj=ai;if(aj.overlayShow){Z.css({"background-color":aj.overlayColor,opacity:aj.overlayOpacity,cursor:aj.hideOnOverlayClick?"pointer":"auto",height:ao(document).height()});if(!Z.is(":visible")){if(X){ao("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"})}Z.show()}}else{Z.hide()}aO=Y();aF();if(ad.is(":visible")){ao(ag.add(ab).add(aq)).hide();
1672a=ad.position(),aP={top:a.top,left:a.left,width:ad.width(),height:ad.height()};b=(aP.width==aO.width&&aP.height==aO.height);aE.fadeTo(aj.changeFade,0.3,function(){var c=function(){aE.html(ae.contents()).fadeTo(aj.changeFade,1,av)};ao(".fancybox-inline-tmp").trigger("fancybox-change");aE.empty().removeAttr("filter").css({"border-width":aj.padding,width:aO.width-aj.padding*2,height:ai.autoDimensions?"auto":aO.height-aJ-aj.padding*2});if(b){c()}else{ay.prop=0;ao(ay).animate({prop:1},{duration:aj.changeSpeed,easing:aj.easingChange,step:V,complete:c})}});return}ad.removeAttr("style");aE.css("border-width",aj.padding);if(aj.transitionIn=="elastic"){aP=ah();aE.html(ae.contents());ad.show();if(aj.opacity){aO.opacity=0}ay.prop=0;ao(ay).animate({prop:1},{duration:aj.speedIn,easing:aj.easingIn,step:V,complete:av});return}if(aj.titlePosition=="inside"&&aJ>0){ap.show()}aE.css({width:aO.width-aj.padding*2,height:ai.autoDimensions?"auto":aO.height-aJ-aj.padding*2}).html(ae.contents());ad.css(aO).fadeIn(aj.transitionIn=="none"?0:aj.speedIn,av)},am=function(a){if(a&&a.length){if(aj.titlePosition=="float"){return'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+a+'</td><td id="fancybox-title-float-right"></td></tr></table>'}return'<div id="fancybox-title-'+aj.titlePosition+'">'+a+"</div>"}return false},aF=function(){ax=aj.title||"";aJ=0;ap.empty().removeAttr("style").removeClass();if(aj.titleShow===false){ap.hide();return}ax=ao.isFunction(aj.titleFormat)?aj.titleFormat(ax,ar,aM,aj):am(ax);if(!ax||ax===""){ap.hide();return}ap.addClass("fancybox-title-"+aj.titlePosition).html(ax).appendTo("body").show();switch(aj.titlePosition){case"inside":ap.css({width:aO.width-(aj.padding*2),marginLeft:aj.padding,marginRight:aj.padding});aJ=ap.outerHeight(true);ap.appendTo(aN);aO.height+=aJ;break;case"over":ap.css({marginLeft:aj.padding,width:aO.width-(aj.padding*2),bottom:aj.padding}).appendTo(aN);break;case"float":ap.css("left",parseInt((ap.width()-aO.width-40)/2,10)*-1).appendTo(ad);break;default:ap.css({width:aO.width-(aj.padding*2),paddingLeft:aj.padding,paddingRight:aj.padding}).appendTo(ad);break}ap.hide()},aK=function(){if(aj.enableEscapeButton||aj.enableKeyboardNav){ao(document).bind("keydown.fb",function(a){if(a.keyCode==27&&aj.enableEscapeButton){a.preventDefault();ao.fancybox.close()}else{if((a.keyCode==37||a.keyCode==39)&&aj.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();ao.fancybox[a.keyCode==37?"prev":"next"]()}}})}if(!aj.showNavArrows){ab.hide();aq.hide();return}if((aj.cyclic&&ar.length>1)||aM!==0){ab.show()}if((aj.cyclic&&ar.length>1)||aM!=(ar.length-1)){aq.show()}},av=function(){if(!ao.support.opacity){aE.get(0).style.removeAttribute("filter");ad.get(0).style.removeAttribute("filter")}if(ai.autoDimensions){aE.css("height","auto")}ad.css("height","auto");if(ax&&ax.length){ap.show()}if(aj.showCloseButton){ag.show()}aK();if(aj.hideOnContentClick){aE.bind("click",ao.fancybox.close)}if(aj.hideOnOverlayClick){Z.bind("click",ao.fancybox.close)}ao(window).bind("resize.fb",ao.fancybox.resize);if(aj.centerOnScroll){ao(window).bind("scroll.fb",ao.fancybox.center)}if(aj.type=="iframe"){ao('<iframe id="fancybox-frame" name="fancybox-frame'+new Date().getTime()+'" frameborder="0" hspace="0" '+(window.attachEvent?'allowtransparency="true""':"")+' scrolling="'+ai.scrolling+'" src="'+aj.href+'"></iframe>').appendTo(aE)}ad.show();aa=false;ao.fancybox.center();aj.onComplete(ar,aM,aj);af()},af=function(){var b,a;if((ar.length-1)>aM){b=ar[aM+1].href;if(typeof b!=="undefined"&&b.match(aI)){a=new Image();a.src=b}}if(aM>0){b=ar[aM-1].href;if(typeof b!=="undefined"&&b.match(aI)){a=new Image();a.src=b}}},V=function(a){var b={width:parseInt(aP.width+(aO.width-aP.width)*a,10),height:parseInt(aP.height+(aO.height-aP.height)*a,10),top:parseInt(aP.top+(aO.top-aP.top)*a,10),left:parseInt(aP.left+(aO.left-aP.left)*a,10)};if(typeof aO.opacity!=="undefined"){b.opacity=a<0.5?0.5:a}ad.css(b);
1672aE.css({width:b.width-aj.padding*2,height:b.height-(aJ*a)-aj.padding*2})},aw=function(){return[ao(window).width()-(aj.margin*2),ao(window).height()-(aj.margin*2),ao(document).scrollLeft()+aj.margin,ao(document).scrollTop()+aj.margin]},Y=function(){var b=aw(),c={},a=aj.autoScale,e=aj.padding*2,d;if(aj.width.toString().indexOf("%")>-1){c.width=parseInt((b[0]*parseFloat(aj.width))/100,10)}else{c.width=aj.width+e}if(aj.height.toString().indexOf("%")>-1){c.height=parseInt((b[1]*parseFloat(aj.height))/100,10)}else{c.height=aj.height+e}if(a&&(c.width>b[0]||c.height>b[1])){if(ai.type=="image"||ai.type=="swf"){d=(aj.width)/(aj.height);if((c.width)>b[0]){c.width=b[0];c.height=parseInt(((c.width-e)/d)+e,10)}if((c.height)>b[1]){c.height=b[1];c.width=parseInt(((c.height-e)*d)+e,10)}}else{c.width=Math.min(c.width,b[0]);c.height=Math.min(c.height,b[1])}}c.top=parseInt(Math.max(b[3]-20,b[3]+((b[1]-c.height-40)*0.5)),10);c.left=parseInt(Math.max(b[2]-20,b[2]+((b[0]-c.width-40)*0.5)),10);return c},aA=function(b){var a=b.offset();a.top+=parseInt(b.css("paddingTop"),10)||0;a.left+=parseInt(b.css("paddingLeft"),10)||0;a.top+=parseInt(b.css("border-top-width"),10)||0;a.left+=parseInt(b.css("border-left-width"),10)||0;
1672a.width=b.width();a.height=b.height();return a},ah=function(){var c=ai.orig?ao(ai.orig):false,d={},a,b;if(c&&c.length){a=aA(c);d={width:a.width+(aj.padding*2),height:a.height+(aj.padding*2),top:a.top-aj.padding-20,left:a.left-aj.padding-20}}else{b=aw();d={width:aj.padding*2,height:aj.padding*2,top:parseInt(b[3]+b[1]*0.5,10),left:parseInt(b[2]+b[0]*0.5,10)}}return d},aQ=function(){if(!W.is(":visible")){clearInterval(aB);return}ao("div",W).css("top",(ac*-40)+"px");ac=(ac+1)%12};ao.fn.fancybox=function(a){if(!ao(this).length){return this}ao(this).data("fancybox",ao.extend({},a,(ao.metadata?ao(this).metadata():{}))).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(aa){return}aa=true;ao(this).blur();aH=[];an=0;var b=ao(this).attr("rel")||"";if(!b||b==""||b==="nofollow"){aH.push(this)}else{aH=ao('a[rel="'+b+'"], area[rel="'+b+'"]');an=aH.index(this)}au();return});return this};ao.fancybox=function(c){var d;if(aa){return}aa=true;d=typeof arguments[1]!=="undefined"?arguments[1]:{};aH=[];an=parseInt(d.index,10)||0;if(ao.isArray(c)){for(var a=0,b=c.length;a<b;a++){if(typeof c[a]=="object"){ao(c[a]).data("fancybox",ao.extend({},d,c[a]))}else{c[a]=ao({}).data("fancybox",ao.extend({content:c[a]},d))}}aH=jQuery.merge(aH,c)}else{if(typeof c=="object"){ao(c).data("fancybox",ao.extend({},d,c))}else{c=ao({}).data("fancybox",ao.extend({content:c},d))}aH.push(c)}if(an>aH.length||an<0){an=0}au()};ao.fancybox.showActivity=function(){clearInterval(aB);W.show();aB=setInterval(aQ,66)};ao.fancybox.hideActivity=function(){W.hide()};ao.fancybox.next=function(){return ao.fancybox.pos(aM+1)};ao.fancybox.prev=function(){return ao.fancybox.pos(aM-1)};ao.fancybox.pos=function(a){if(aa){return}a=parseInt(a);aH=ar;if(a>-1&&a<ar.length){an=a;au()}else{if(aj.cyclic&&ar.length>1){an=a>=ar.length?0:ar.length-1;au()}}return};ao.fancybox.cancel=function(){if(aa){return}aa=true;ao(".fancybox-inline-tmp").trigger("fancybox-cancel");az();ai.onCancel(aH,an,ai);aa=false};ao.fancybox.close=function(){if(aa||ad.is(":hidden")){return}aa=true;if(aj&&false===aj.onCleanup(ar,aM,aj)){aa=false;return}az();ao(ag.add(ab).add(aq)).hide();ao(aE.add(Z)).unbind();ao(window).unbind("resize.fb scroll.fb");ao(document).unbind("keydown.fb");if(aj.type==="iframe"){aE.find("iframe").attr("src",X&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")}if(aj.titlePosition!=="inside"){ap.empty()}ad.stop();function b(){Z.fadeOut("fast");ap.empty().hide();ad.hide();ao(".fancybox-inline-tmp").trigger("fancybox-cleanup");aE.empty();aj.onClosed(ar,aM,aj);ar=ai=[];aM=an=0;aj=ai={};aa=false}if(aj.transitionOut=="elastic"){aP=ah();var a=ad.position();aO={top:a.top,left:a.left,width:ad.width(),height:ad.height()};if(aj.opacity){aO.opacity=1}ap.empty().hide();ay.prop=1;ao(ay).animate({prop:0},{duration:aj.speedOut,easing:aj.easingOut,step:V,complete:b})}else{ad.fadeOut(aj.transitionOut=="none"?0:aj.speedOut,b)}};ao.fancybox.resize=function(){if(Z.is(":visible")){Z.css("height",ao(document).height())}ao.fancybox.center(true)};ao.fancybox.center=function(){var b,a;if(aa){return}a=arguments[0]===true?1:0;b=aw();if(!a&&(ad.width()>b[0]||ad.height()>b[1])){return}ad.stop().animate({top:parseInt(Math.max(b[3]-20,b[3]+((b[1]-aE.height()-40)*0.5)-aj.padding)),left:parseInt(Math.max(b[2]-20,b[2]+((b[0]-aE.width()-40)*0.5)-aj.padding))},typeof arguments[0]=="number"?arguments[0]:200)};ao.fancybox.init=function(){if(ao("#fancybox-wrap").length){return}ao("body").append(ae=ao('<div id="fancybox-tmp"></div>'),W=ao('<div id="fancybox-loading"><div></div></div>'),Z=ao('<div id="fancybox-overlay"></div>'),ad=ao('<div id="fancybox-wrap"></div>'));aN=ao('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(ad);aN.append(aE=ao('<div id="fancybox-content"></div>'),ag=ao('<a id="fancybox-close"></a>'),ap=ao('<div id="fancybox-title"></div>'),ab=ao('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),aq=ao('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));ag.click(ao.fancybox.close);W.click(ao.fancybox.cancel);ab.bind("click touchstart",function(a){a.preventDefault();ao.fancybox.prev()});aq.bind("click touchstart",function(a){a.preventDefault();ao.fancybox.next()});if(ao.fn.mousewheel){ad.bind("mousewheel.fb",function(b,a){if(aa){b.preventDefault()}else{if(ao(b.target).get(0).clientHeight==0||ao(b.target).get(0).scrollHeight===ao(b.target).get(0).clientHeight){b.preventDefault();ao.fancybox[a>0?"prev":"next"]()}}})}if(!ao.support.opacity){ad.addClass("fancybox-ie")}if(X){W.addClass("fancybox-ie6");ad.addClass("fancybox-ie6");ao('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(aN)}};ao.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};ao(document).ready(function(){ao.fancybox.init()})})(jQuery);
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.