PageSourceSearch

https://bart.ca/wp-content/themes/bart/js/jquery.main.js?v=1791483420

js bart.ca collected 2026-10-08 18:18:22 UTC 81,945 bytes, 1,672 lines download raw bytes

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="&shy;<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.