PageSourceSearch

https://www.braumueller.at/Assets/app2.js?0a53190f

js braumueller.at collected 2026-09-24 19:54:37 UTC 82,808 bytes, 2,293 lines download raw bytes

vendor: 5,076 bytes, lines 1-119
1/*
2 * jQuery FlexSlider v2.2.0
3 * Copyright 2012 WooThemes
4 * Contributing Author: Tyler Smith
5 */
6;
7(function ($) {
8
9  //FlexSlider: Object Instance
10  $.flexslider = function(el, options) {
11    var slider = $(el);
12
13    // making variables public
14    slider.vars = $.extend({}, $.flexslider.defaults, options);
15
16    var namespace = slider.vars.namespace,
17        msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,
18        touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,
19        // depricating this idea, as devices are being released with both of these events
20        //eventType = (touch) ? "touchend" : "click",
21        eventType = "click touchend MSPointerUp",
22        watchedEvent = "",
23        watchedEventClearTimer,
24        vertical = slider.vars.direction === "vertical",
25        reverse = slider.vars.reverse,
26        carousel = (slider.vars.itemWidth > 0),
27        fade = slider.vars.animation === "fade",
28        asNav = slider.vars.asNavFor !== "",
29        methods = {},
30        focused = true;
31
32    // Store a reference to the slider object
33    $.data(el, "flexslider", slider);
34
35    // Private slider methods
36    methods = {
37      init: function() {
38        slider.animating = false;
39        // Get current slide and make sure it is a number
40        slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0) );
41        if ( isNaN( slider.currentSlide ) ) slider.currentSlide = 0;
42        slider.animatingTo = slider.currentSlide;
43        slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
44        slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));
45        slider.slides = $(slider.vars.selector, slider);
46        slider.container = $(slider.containerSelector, slider);
47        slider.count = slider.slides.length;
48        // SYNC:
49        slider.syncExists = $(slider.vars.sync).length > 0;
50        // SLIDE:
51        if (slider.vars.animation === "slide") slider.vars.animation = "swing";
52        slider.prop = (vertical) ? "top" : "marginLeft";
53        slider.args = {};
54        // SLIDESHOW:
55        slider.manualPause = false;
56        slider.stopped = false;
57        //PAUSE WHEN INVISIBLE
58        slider.started = false;
59        slider.startTimeout = null;
60        // TOUCH/USECSS:
61        slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() {
62          var obj = document.createElement('div'),
63              props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
64          for (var i in props) {
65            if ( obj.style[ props[i] ] !== undefined ) {
66              slider.pfx = props[i].replace('Perspective','').toLowerCase();
67              slider.prop = "-" + slider.pfx + "-transform";
68              return true;
69            }
70          }
71          return false;
72        }());
73        // CONTROLSCONTAINER:
74        if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);
75        // MANUAL:
76        if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);
77
78        // RANDOMIZE:
79        if (slider.vars.randomize) {
80          slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
81          slider.container.empty().append(slider.slides);
82        }
83
84        slider.doMath();
85
86        // INIT
87        slider.setup("init");
88
89        // CONTROLNAV:
90        if (slider.vars.controlNav) methods.controlNav.setup();
91
92        // DIRECTIONNAV:
93        if (slider.vars.directionNav) methods.directionNav.setup();
94
95        // KEYBOARD:
96        if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {
97          $(document).bind('keyup', function(event) {
98            var keycode = event.keyCode;
99            if (!slider.animating && (keycode === 39 || keycode === 37)) {
100              var target = (keycode === 39) ? slider.getTarget('next') :
101                           (keycode === 37) ? slider.getTarget('prev') : false;
102              slider.flexAnimate(target, slider.vars.pauseOnAction);
103            }
104          });
105        }
106        // MOUSEWHEEL:
107        if (slider.vars.mousewheel) {
108          slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
109            event.preventDefault();
110            var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
111            slider.flexAnimate(target, slider.vars.pauseOnAction);
112          });
113        }
114
115        // PAUSEPLAY
116        if (slider.vars.pausePlay) methods.pausePlay.setup();
117
118        //PAUSE WHEN INVISIBLE
119        if (slider.vars.slideshow && slider.vars.pauseInvisible) methods.pauseInvisible.init(
119);
120
121        // SLIDSESHOW
122        if (slider.vars.slideshow) {
123          if (slider.vars.pauseOnHover) {
124            slider.hover(function() {
125              if (!slider.manualPlay && !slider.manualPause) slider.pause();
126            }, function() {
127              if (!slider.manualPause && !slider.manualPlay && !slider.stopped) slider.play();
128            });
129          }
130          // initialize animation
131          //If we're visible, or we don't use PageVisibility API
132          if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) {
133            (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play();
134          }
135        }
136
137        // ASNAV:
138        if (asNav) methods.asNav.setup();
139
140        // TOUCH
141        if (touch && slider.vars.touch) methods.touch();
142
143        // FADE&&SMOOTHHEIGHT || SLIDE:
144        if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize orientationchange focus", methods.resize);
145
146        slider.find("img").attr("draggable", "false");
147
148        // API: start() Callback
149        setTimeout(function(){
150          slider.vars.start(slider);
151        }, 200);
152      },
153      asNav: {
154        setup: function() {
155          slider.asNav = true;
156          slider.animatingTo = Math.floor(slider.currentSlide/slider.move);
157          slider.currentItem = slider.currentSlide;
158          slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide");
159          if(!msGesture){
160              slider.slides.click(function(e){
161                e.preventDefault();
162                var $slide = $(this),
163                    target = $slide.index();
164                var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container
165                if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {
166                  slider.flexAnimate(slider.getTarget("prev"), true);
167                } else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + "active-slide")) {
168                  slider.direction = (slider.currentItem < target) ? "next" : "prev";
169                  slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
170                }
171              });
172          }else{
173              el._slider = slider;
174              slider.slides.each(function (){
175                  var that = this;
176                  that._gesture = new MSGesture();
177                  that._gesture.target = that;
178                  that.addEventListener("MSPointerDown", function (e){
179                      e.preventDefault();
180                      if(e.currentTarget._gesture)
181                          e.currentTarget._gesture.addPointer(e.pointerId);
182                  }, false);
183                  that.addEventListener("MSGestureTap", function (e){
184                      e.preventDefault();
185                      var $slide = $(this),
186                          target = $slide.index();
187                      if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {
188                          slider.direction = (slider.currentItem < target) ? "next" : "prev";
189                          slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
190                      }
191                  });
192              });
193          }
194        }
195      },
196      controlNav: {
197        setup: function() {
198          if (!slider.manualControls) {
199            methods.controlNav.setupPaging();
200          } else { // MANUALCONTROLS:
201            methods.controlNav.setupManual();
202          }
203        },
204        setupPaging: function() {
205          var type = (slider.vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging',
206              j = 1,
207              item,
208              slide;
209
210          slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>');
211
212          if (slider.pagingCount > 1) {
213            for (var i = 0; i < slider.pagingCount; i++) {
214              slide = slider.slides.eq(i);
215              item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slide.attr( 'data-thumb' ) + '"/>' : '<a>' + j + '</a>';
216              if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {
217                var captn = slide.attr( 'data-thumbcaption' );
vendor: 25,055 bytes, lines 218-785
218                if ( '' != captn && undefined != captn ) item += '<span class="' + namespace + 'caption">' + captn + '</span>';
219              }
220              slider.controlNavScaffold.append('<li>' + item + '</li>');
221              j++;
222            }
223          }
224
225          // CONTROLSCONTAINER:
226          (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);
227          methods.controlNav.set();
228
229          methods.controlNav.active();
230
231          slider.controlNavScaffold.delegate('a, img', eventType, function(event) {
232            event.preventDefault();
233
234            if (watchedEvent === "" || watchedEvent === event.type) {
235              var $this = $(this),
236                  target = slider.controlNav.index($this);
237
238              if (!$this.hasClass(namespace + 'active')) {
239                slider.direction = (target > slider.currentSlide) ? "next" : "prev";
240                slider.flexAnimate(target, slider.vars.pauseOnAction);
241              }
242            }
243
244            // setup flags to prevent event duplication
245            if (watchedEvent === "") {
246              watchedEvent = event.type;
247            }
248            methods.setToClearWatchedEvent();
249
250          });
251        },
252        setupManual: function() {
253          slider.controlNav = slider.manualControls;
254          methods.controlNav.active();
255
256          slider.controlNav.bind(eventType, function(event) {
257            event.preventDefault();
258
259            if (watchedEvent === "" || watchedEvent === event.type) {
260              var $this = $(this),
261                  target = slider.controlNav.index($this);
262
263              if (!$this.hasClass(namespace + 'active')) {
264                (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
265                slider.flexAnimate(target, slider.vars.pauseOnAction);
266              }
267            }
268
269            // setup flags to prevent event duplication
270            if (watchedEvent === "") {
271              watchedEvent = event.type;
272            }
273            methods.setToClearWatchedEvent();
274          });
275        },
276        set: function() {
277          var selector = (slider.vars.controlNav === "thumbnails") ? 'img' : 'a';
278          slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);
279        },
280        active: function() {
281          slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active");
282        },
283        update: function(action, pos) {
284          if (slider.pagingCount > 1 && action === "add") {
285            slider.controlNavScaffold.append($('<li><a>' + slider.count + '</a></li>'));
286          } else if (slider.pagingCount === 1) {
287            slider.controlNavScaffold.find('li').remove();
288          } else {
289            slider.controlNav.eq(pos).closest('li').remove();
290          }
291          methods.controlNav.set();
292          (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();
293        }
294      },
295      directionNav: {
296        setup: function() {
297          var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li><a class="' + namespace + 'prev" href="#">' + slider.vars.prevText + '</a></li><li><a class="' + namespace + 'next" href="#">' + slider.vars.nextText + '</a></li></ul>');
298
299          // CONTROLSCONTAINER:
300          if (slider.controlsContainer) {
301            $(slider.controlsContainer).append(directionNavScaffold);
302            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
303          } else {
304            slider.append(directionNavScaffold);
305            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);
306          }
307
308          methods.directionNav.update();
309
310          slider.directionNav.bind(eventType, function(event) {
311            event.preventDefault();
312            var target;
313
314            if (watchedEvent === "" || watchedEvent === event.type) {
315              target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');
316              slider.flexAnimate(target, slider.vars.pauseOnAction);
317            }
318
319            // setup flags to prevent event duplication
320            if (watchedEvent === "") {
321              watchedEvent = event.type;
322            }
323            methods.setToClearWatchedEvent();
324          });
325        },
326        update: function() {
327          var disabledClass = namespace + 'disabled';
328          if (slider.pagingCount === 1) {
329            slider.directionNav.addClass(disabledClass).attr('tabindex', '-1');
330          } else if (!slider.vars.animationLoop) {
331            if (slider.animatingTo === 0) {
332              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass).attr('tabindex', '-1');
333            } else if (slider.animatingTo === slider.last) {
334              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass).attr('tabindex', '-1');
335            } else {
336              slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
337            }
338          } else {
339            slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
340          }
341        }
342      },
343      pausePlay: {
344        setup: function() {
345          var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a></a></div>');
346
347          // CONTROLSCONTAINER:
348          if (slider.controlsContainer) {
349            slider.controlsContainer.append(pausePlayScaffold);
350            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);
351          } else {
352            slider.append(pausePlayScaffold);
353            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);
354          }
355
356          methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play');
357
358          slider.pausePlay.bind(eventType, function(event) {
359            event.preventDefault();
360
361            if (watchedEvent === "" || watchedEvent === event.type) {
362              if ($(this).hasClass(namespace + 'pause')) {
363                slider.manualPause = true;
364                slider.manualPlay = false;
365                slider.pause();
366              } else {
367                slider.manualPause = false;
368                slider.manualPlay = true;
369                slider.play();
370              }
371            }
372
373            // setup flags to prevent event duplication
374            if (watchedEvent === "") {
375              watchedEvent = event.type;
376            }
377            methods.setToClearWatchedEvent();
378          });
379        },
380        update: function(state) {
381          (state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').html(slider.vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').html(slider.vars.pauseText);
382        }
383      },
384      touch: function() {
385        var startX,
386          startY,
387          offset,
388          cwidth,
389          dx,
390          startT,
391          scrolling = false,
392          localX = 0,
393          localY = 0,
394          accDx = 0;
395
396        if(!msGesture){
397            el.addEventListener('touchstart', onTouchStart, false);
398
399            function onTouchStart(e) {
400              if (slider.animating) {
401                e.preventDefault();
402              } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {
403                slider.pause();
404                // CAROUSEL:
405                cwidth = (vertical) ? slider.h : slider. w;
406                startT = Number(new Date());
407                // CAROUSEL:
408
409                // Local vars for X and Y points.
410                localX = e.touches[0].pageX;
411                localY = e.touches[0].pageY;
412
413                offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
414                         (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
415                         (carousel && slider.currentSlide === slider.last) ? slider.limit :
416                         (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
417                         (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
418                startX = (vertical) ? localY : localX;
419                startY = (vertical) ? localX : localY;
420
421                el.addEventListener('touchmove', onTouchMove, false);
422                el.addEventListener('touchend', onTouchEnd, false);
423              }
424            }
425
426            function onTouchMove(e) {
427              // Local vars for X and Y points.
428
429              localX = e.touches[0].pageX;
430              localY = e.touches[0].pageY;
431
432              dx = (vertical) ? startX - localY : startX - localX;
433              scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY));
434
435              var fxms = 500;
436
437              if ( ! scrolling || Number( new Date() ) - startT > fxms ) {
438                e.preventDefault();
439                if (!fade && slider.transitions) {
440                  if (!slider.vars.animationLoop) {
441                    dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
442                  }
443                  slider.setProps(offset + dx, "setTouch");
444                }
445              }
446            }
447
448            function onTouchEnd(e) {
449              // finish the touch by undoing the touch session
450              el.removeEventListener('touchmove', onTouchMove, false);
451
452              if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
453                var updateDx = (reverse) ? -dx : dx,
454                    target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
455
456                if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
457                  slider.flexAnimate(target, slider.vars.pauseOnAction);
458                } else {
459                  if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
460                }
461              }
462              el.removeEventListener('touchend', onTouchEnd, false);
463
464              startX = null;
465              startY = null;
466              dx = null;
467              offset = null;
468            }
469        }else{
470            el.style.msTouchAction = "none";
471            el._gesture = new MSGesture();
472            el._gesture.target = el;
473            el.addEventListener("MSPointerDown", onMSPointerDown, false);
474            el._slider = slider;
475            el.addEventListener("MSGestureChange", onMSGestureChange, false);
476            el.addEventListener("MSGestureEnd", onMSGestureEnd, false);
477
478            function onMSPointerDown(e){
479                e.stopPropagation();
480                if (slider.animating) {
481                    e.preventDefault();
482                }else{
483                    slider.pause();
484                    el._gesture.addPointer(e.pointerId);
485                    accDx = 0;
486                    cwidth = (vertical) ? slider.h : slider. w;
487                    startT = Number(new Date());
488                    // CAROUSEL:
489
490                    offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
491                        (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
492                            (carousel && slider.currentSlide === slider.last) ? slider.limit :
493                                (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
494                                    (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
495                }
496            }
497
498            function onMSGestureChange(e) {
499                e.stopPropagation();
500                var slider = e.target._slider;
501                if(!slider){
502                    return;
503                }
504                var transX = -e.translationX,
505                    transY = -e.translationY;
506
507                //Accumulate translations.
508                accDx = accDx + ((vertical) ? transY : transX);
509                dx = accDx;
510                scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY));
511
512                if(e.detail === e.MSGESTURE_FLAG_INERTIA){
513                    setImmediate(function (){
514                        el._gesture.stop();
515                    });
516
517                    return;
518                }
519
520                if (!scrolling || Number(new Date()) - startT > 500) {
521                    e.preventDefault();
522                    if (!fade && slider.transitions) {
523                        if (!slider.vars.animationLoop) {
524                            dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1);
525                        }
526                        slider.setProps(offset + dx, "setTouch");
527                    }
528                }
529            }
530
531            function onMSGestureEnd(e) {
532                e.stopPropagation();
533                var slider = e.target._slider;
534                if(!slider){
535                    return;
536                }
537                if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
538                    var updateDx = (reverse) ? -dx : dx,
539                        target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
540
541                    if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
542                        slider.flexAnimate(target, slider.vars.pauseOnAction);
543                    } else {
544                        if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
545                    }
546                }
547
548                startX = null;
549                startY = null;
550                dx = null;
551                offset = null;
552                accDx = 0;
553            }
554        }
555      },
556      resize: function() {
557        if (!slider.animating && slider.is(':visible')) {
558          if (!carousel) slider.doMath();
559
560          if (fade) {
561            // SMOOTH HEIGHT:
562            methods.smoothHeight();
563          } else if (carousel) { //CAROUSEL:
564            slider.slides.width(slider.computedW);
565            slider.update(slider.pagingCount);
566            slider.setProps();
567          }
568          else if (vertical) { //VERTICAL:
569            slider.viewport.height(slider.h);
570            slider.setProps(slider.h, "setTotal");
571          } else {
572            // SMOOTH HEIGHT:
573            if (slider.vars.smoothHeight) methods.smoothHeight();
574            slider.newSlides.width(slider.computedW);
575            slider.setProps(slider.computedW, "setTotal");
576          }
577        }
578      },
579      smoothHeight: function(dur) {
580        if (!vertical || fade) {
581          var $obj = (fade) ? slider : slider.viewport;
582          (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());
583        }
584      },
585      sync: function(action) {
586        var $obj = $(slider.vars.sync).data("flexslider"),
587            target = slider.animatingTo;
588
589        switch (action) {
590          case "animate": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break;
591          case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;
592          case "pause": $obj.pause(); break;
593        }
594      },
595      pauseInvisible: {
596        visProp: null,
597        init: function() {
598          var prefixes = ['webkit','moz','ms','o'];
599
600          if ('hidden' in document) return 'hidden';
601          for (var i = 0; i < prefixes.length; i++) {
602            if ((prefixes[i] + 'Hidden') in document) 
603            methods.pauseInvisible.visProp = prefixes[i] + 'Hidden';
604          }
605          if (methods.pauseInvisible.visProp) {
606            var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
607            document.addEventListener(evtname, function() {
608              if (methods.pauseInvisible.isHidden()) {
609                if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible
610                else slider.pause(); //Or just pause
611              }
612              else {
613                if(slider.started) slider.play(); //Initiated before, just play
614                else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it
615              }
616            });
617          }       
618        },
619        isHidden: function() {
620          return document[methods.pauseInvisible.visProp] || false;
621        }
622      },
623      setToClearWatchedEvent: function() {
624        clearTimeout(watchedEventClearTimer);
625        watchedEventClearTimer = setTimeout(function() {
626          watchedEvent = "";
627        }, 3000);
628      }
629    }
630
631    // public methods
632    slider.flexAnimate = function(target, pause, override, withSync, fromNav) {
633      if (!slider.vars.animationLoop && target !== slider.currentSlide) {
634        slider.direction = (target > slider.currentSlide) ? "next" : "prev";
635      }
636
637      if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev";
638
639      if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) {
640        if (asNav && withSync) {
641          var master = $(slider.vars.asNavFor).data('flexslider');
642          slider.atEnd = target === 0 || target === slider.count - 1;
643          master.flexAnimate(target, true, false, true, fromNav);
644          slider.direction = (slider.currentItem < target) ? "next" : "prev";
645          master.direction = slider.direction;
646
647          if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {
648            slider.currentItem = target;
649            slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
650            target = Math.floor(target/slider.visible);
651          } else {
652            slider.currentItem = target;
653            slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
654            return false;
655          }
656        }
657
658        slider.animating = true;
659        slider.animatingTo = target;
660
661        // SLIDESHOW:
662        if (pause) slider.pause();
663
664        // API: before() animation Callback
665        slider.vars.before(slider);
666
667        // SYNC:
668        if (slider.syncExists && !fromNav) methods.sync("animate");
669
670        // CONTROLNAV
671        if (slider.vars.controlNav) methods.controlNav.active();
672
673        // !CAROUSEL:
674        // CANDIDATE: slide active class (for add/remove slide)
675        if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide');
676
677        // INFINITE LOOP:
678        // CANDIDATE: atEnd
679        slider.atEnd = target === 0 || target === slider.last;
680
681        // DIRECTIONNAV:
682        if (slider.vars.directionNav) methods.directionNav.update();
683
684        if (target === slider.last) {
685          // API: end() of cycle Callback
686          slider.vars.end(slider);
687          // SLIDESHOW && !INFINITE LOOP:
688          if (!slider.vars.animationLoop) slider.pause();
689        }
690
691        // SLIDE:
692        if (!fade) {
693          var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,
694              margin, slideString, calcNext;
695
696          // INFINITE LOOP / REVERSE:
697          if (carousel) {
698            //margin = (slider.vars.itemWidth > slider.w) ? slider.vars.itemMargin * 2 : slider.vars.itemMargin;
699            margin = slider.vars.itemMargin;
700            calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
701            slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
702          } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== "next") {
703            slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;
704          } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== "prev") {
705            slideString = (reverse) ? 0 : (slider.count + 1) * dimension;
706          } else {
707            slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;
708          }
709          slider.setProps(slideString, "", slider.vars.animationSpeed);
710          if (slider.transitions) {
711            if (!slider.vars.animationLoop || !slider.atEnd) {
712              slider.animating = false;
713              slider.currentSlide = slider.animatingTo;
714            }
715            slider.container.unbind("webkitTransitionEnd transitionend");
716            slider.container.bind("webkitTransitionEnd transitionend", function() {
717              slider.wrapup(dimension);
718            });
719          } else {
720            slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){
721              slider.wrapup(dimension);
722            });
723          }
724        } else { // FADE:
725          if (!touch) {
726            //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing);
727            //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
728
729            slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing);
730            slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
731
732          } else {
733            slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
734            slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
735            slider.wrapup(dimension);
736          }
737        }
738        // SMOOTH HEIGHT:
739        if (slider.vars.smoothHeight) methods.smoothHeight(slider.vars.animationSpeed);
740      }
741    }
742    slider.wrapup = function(dimension) {
743      // SLIDE:
744      if (!fade && !carousel) {
745        if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) {
746          slider.setProps(dimension, "jumpEnd");
747        } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) {
748          slider.setProps(dimension, "jumpStart");
749        }
750      }
751      slider.animating = false;
752      slider.currentSlide = slider.animatingTo;
753      // API: after() animation Callback
754      slider.vars.after(slider);
755    }
756
757    // SLIDESHOW:
758    slider.animateSlides = function() {
759      if (!slider.animating && focused ) slider.flexAnimate(slider.getTarget("next"));
760    }
761    // SLIDESHOW:
762    slider.pause = function() {
763      clearInterval(slider.animatedSlides);
764      slider.animatedSlides = null;
765      slider.playing = false;
766      // PAUSEPLAY:
767      if (slider.vars.pausePlay) methods.pausePlay.update("play");
768      // SYNC:
769      if (slider.syncExists) methods.sync("pause");
770    }
771    // SLIDESHOW:
772    slider.play = function() {
773      if (slider.playing) clearInterval(slider.animatedSlides);
774      slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
775      slider.started = slider.playing = true;
776      // PAUSEPLAY:
777      if (slider.vars.pausePlay) methods.pausePlay.update("pause");
778      // SYNC:
779      if (slider.syncExists) methods.sync("play");
780    }
781    // STOP:
782    slider.stop = function () {
783      slider.pause();
784      slider.stopped = true;
785    }
786    slider.canAdvance = function(target, fromNav) {
787      // ASNAV:
788      var last = (asNav) ? slider.pagingCount - 1 : slider.last;
789      return (fromNav) ? true :
790             (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true :
791             (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false :
792             (target === slider.currentSlide && !asNav) ? false :
793             (slider.vars.animationLoop) ? true :
794             (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false :
795             (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false :
796             true;
797    }
798    slider.getTarget = function(dir) {
799      slider.direction = dir;
800      if (dir === "next") {
801        return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;
802      } else {
803        return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;
804      }
805    }
806
807    // SLIDE:
808    slider.setProps = function(pos, special, dur) {
809      var target = (function() {
810        var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo,
811            posCalc = (function() {
812              if (carousel) {
813                return (special === "setTouch") ? pos :
814                       (reverse && slider.animatingTo === slider.last) ? 0 :
815                       (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
816                       (slider.animatingTo === slider.last) ? slider.limit : posCheck;
817              } else {
818                switch (special) {
819                  case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;
820                  case "setTouch": return (reverse) ? pos : pos;
821                  case "jumpEnd": return (reverse) ? pos : slider.count * pos;
822                  case "jumpStart": return (reverse) ? slider.count * pos : pos;
823                  default: return pos;
824                }
825              }
826            }());
827
828            return (posCalc * -1) + "px";
829          }());
830
831      if (slider.transitions) {
832        target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
833        dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
834        slider.container.css("-" + slider.pfx + "-transition-duration", dur);
835      }
836
837      slider.args[slider.prop] = target;
838      if (slider.transitions || dur === undefined) slider.container.css(slider.args);
839    }
840
841    slider.setup = function(type) {
842      // SLIDE:
843      if (!fade) {
844        var sliderOffset, arr;
845
846        if (type === "init") {
847          slider.viewport = $('<div class="' + namespace + 'viewport"></div>').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container);
848          // INFINITE LOOP:
849          slider.cloneCount = 0;
850          slider.cloneOffset = 0;
851          // REVERSE:
852          if (reverse) {
853            arr = $.makeArray(slider.slides).reverse();
854            slider.slides = $(arr);
855            slider.container.empty().append(slider.slides);
856          }
857        }
858        // INFINITE LOOP && !CAROUSEL:
859        if (slider.vars.animationLoop && !carousel) {
860          slider.cloneCount = 2;
861          slider.cloneOffset = 1;
862          // clear out old clones
863          if (type !== "init") slider.container.find('.clone').remove();
864          slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true'));
865        }
866        slider.newSlides = $(slider.vars.selector, slider);
867
868        sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;
869        // VERTICAL:
870        if (vertical && !carousel) {
871          slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
872          setTimeout(function(){
873            slider.newSlides.css({"display": "block"});
874            slider.doMath();
875            slider.viewport.height(slider.h);
876            slider.setProps(sliderOffset * slider.h, "init");
877          }, (type === "init") ? 100 : 0);
878        } else {
879          slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
880          slider.setProps(sliderOffset * slider.computedW, "init");
881          setTimeout(function(){
882            slider.doMath();
883            slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
884            // SMOOTH HEIGHT:
885            if (slider.vars.smoothHeight) methods.smoothHeight();
886          }, (type === "init") ? 100 : 0);
887        }
888      } else { // FADE:
889        slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
890        if (type === "init") {
891          if (!touch) {
892            //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);
893            slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing);
894          } else {
895            slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});
896          }
897        }
898        // SMOOTH HEIGHT:
899        if (slider.vars.smoothHeight) methods.smoothHeight();
900      }
901      // !CAROUSEL:
902      // CANDIDATE: active slide
903      if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide");
904    }
905
906
907    slider.doMath = function() {
908      var slide = slider.slides.first(),
909          slideMargin = slider.vars.itemMargin,
910          minItems = slider.vars.minItems,
911          maxItems = slider.vars.maxItems;
912
vendor: 8,049 bytes, lines 913-1068
913      slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width();
914      slider.h = slide.height();
915      slider.boxPadding = slide.outerWidth() - slide.width();
916
917      // CAROUSEL:
918      if (carousel) {
919        slider.itemT = slider.vars.itemWidth + slideMargin;
920        slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
921        slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;
922        slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :
923                       (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems :
924                       (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth;
925
926        slider.visible = Math.floor(slider.w/(slider.itemW));
927        slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible;
928        slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);
929        slider.last =  slider.pagingCount - 1;
930        slider.limit = (slider.pagingCount === 1) ? 0 :
931                       (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;
932      } else {
933        slider.itemW = slider.w;
934        slider.pagingCount = slider.count;
935        slider.last = slider.count - 1;
936      }
937      slider.computedW = slider.itemW - slider.boxPadding;
938    }
939
940
941    slider.update = function(pos, action) {
942      slider.doMath();
943
944      // update currentSlide and slider.animatingTo if necessary
945      if (!carousel) {
946        if (pos < slider.currentSlide) {
947          slider.currentSlide += 1;
948        } else if (pos <= slider.currentSlide && pos !== 0) {
949          slider.currentSlide -= 1;
950        }
951        slider.animatingTo = slider.currentSlide;
952      }
953
954      // update controlNav
955      if (slider.vars.controlNav && !slider.manualControls) {
956        if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) {
957          methods.controlNav.update("add");
958        } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) {
959          if (carousel && slider.currentSlide > slider.last) {
960            slider.currentSlide -= 1;
961            slider.animatingTo -= 1;
962          }
963          methods.controlNav.update("remove", slider.last);
964        }
965      }
966      // update directionNav
967      if (slider.vars.directionNav) methods.directionNav.update();
968
969    }
970
971    slider.addSlide = function(obj, pos) {
972      var $obj = $(obj);
973
974      slider.count += 1;
975      slider.last = slider.count - 1;
976
977      // append new slide
978      if (vertical && reverse) {
979        (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);
980      } else {
981        (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);
982      }
983
984      // update currentSlide, animatingTo, controlNav, and directionNav
985      slider.update(pos, "add");
986
987      // update slider.slides
988      slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
989      // re-setup the slider to accomdate new slide
990      slider.setup();
991
992      //FlexSlider: added() Callback
993      slider.vars.added(slider);
994    }
995    slider.removeSlide = function(obj) {
996      var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;
997
998      // update count
999      slider.count -= 1;
1000      slider.last = slider.count - 1;
1001
1002      // remove slide
1003      if (isNaN(obj)) {
1004        $(obj, slider.slides).remove();
1005      } else {
1006        (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();
1007      }
1008
1009      // update currentSlide, animatingTo, controlNav, and directionNav
1010      slider.doMath();
1011      slider.update(pos, "remove");
1012
1013      // update slider.slides
1014      slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
1015      // re-setup the slider to accomdate new slide
1016      slider.setup();
1017
1018      // FlexSlider: removed() Callback
1019      slider.vars.removed(slider);
1020    }
1021
1022    //FlexSlider: Initialize
1023    methods.init();
1024  }
1025
1026  // Ensure the slider isn't focussed if the window loses focus.
1027  $( window ).blur( function ( e ) {
1028    focused = false;
1029  }).focus( function ( e ) {
1030    focused = true;
1031  });
1032
1033  //FlexSlider: Default Settings
1034  $.flexslider.defaults = {
1035    namespace: "flex-",             //{NEW} String: Prefix string attached to the class of every element generated by the plugin
1036    selector: ".slides > li",       //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril
1037    animation: "fade",              //String: Select your animation type, "fade" or "slide"
1038    easing: "swing",                //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!
1039    direction: "horizontal",        //String: Select the sliding direction, "horizontal" or "vertical"
1040    reverse: false,                 //{NEW} Boolean: Reverse the animation direction
1041    animationLoop: true,            //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
1042    smoothHeight: false,            //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
1043    startAt: 0,                     //Integer: The slide that the slider should start on. Array notation (0 = first slide)
1044    slideshow: true,                //Boolean: Animate slider automatically
1045    slideshowSpeed: 7000,           //Integer: Set the speed of the slideshow cycling, in milliseconds
1046    animationSpeed: 600,            //Integer: Set the speed of animations, in milliseconds
1047    initDelay: 0,                   //{NEW} Integer: Set an initialization delay, in milliseconds
1048    randomize: false,               //Boolean: Randomize slide order
1049    thumbCaptions: false,           //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.
1050
1051    // Usability features
1052    pauseOnAction: true,            //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
1053    pauseOnHover: false,            //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
1054    pauseInvisible: true,   		//{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.
1055    useCSS: true,                   //{NEW} Boolean: Slider will use CSS3 transitions if available
1056    touch: true,                    //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
1057    video: false,                   //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
1058
1059    // Primary Controls
1060    controlNav: true,               //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
1061    directionNav: true,             //Boolean: Create navigation for previous/next navigation? (true/false)
1062    prevText: "Previous",           //String: Set the text for the "previous" directionNav item
1063    nextText: "Next",               //String: Set the text for the "next" directionNav item
1064
1065    // Secondary Navigation
1066    keyboard: true,                 //Boolean: Allow slider navigating via keyboard left/right keys
1067    multipleKeyboard: false,        //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.
1068    mousewheel: false,              //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel
1069    pausePlay: false,               //Boolean: Create pause/play dynamic element
1070    pauseText: "Pause",             //String: Set the text for the "pause" pausePlay item
1071    playText: "Play",               //String: Set the text for the "play" pausePlay item
1072
1073    // Special properties
1074    controlsContainer: "",          //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found.
1075    manualControls: "",             //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs.
1076    sync: "",                       //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
1077    asNavFor: "",                   //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
1078
1079    // Carousel Options
1080    itemWidth: 0,                   //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.
1081    itemMargin: 0,                  //{NEW} Integer: Margin between carousel items.
1082    minItems: 1,                    //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.
1083    maxItems: 0,                    //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.
1084    move: 0,                        //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.
1085    allowOneSlide: true,           //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide
1086
1087    // Callback API
1088    start: function(){},            //Callback: function(slider) - Fires when the slider loads the first slide
1089    before: function(){},           //Callback: function(slider) - Fires asynchronously with each slider animation
1090    after: function(){},            //Callback: function(slider) - Fires after each slider animation completes
1091    end: function(){},              //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
1092    added: function(){},            //{NEW} Callback: function(slider) - Fires after a slide is added
1093    removed: function(){}           //{NEW} Callback: function(slider) - Fires after a slide is removed
1094  }
1095
1096
1097  //FlexSlider: Plugin Function
1098  $.fn.flexslider = function(options) {
1099    if (options === undefined) options = {};
1100
1101    if (typeof options === "object") {
1102      return this.each(function() {
1103        var $this = $(this),
1104            selector = (options.selector) ? options.selector : ".slides > li",
1105            $slides = $this.find(selector);
1106
1107      if ( ( $slides.length === 1 && options.allowOneSlide === true ) || $slides.length === 0 ) {
1108          $slides.fadeIn(400);
1109          if (options.start) options.start($this);
1110        } else if ($this.data('flexslider') === undefined) {
1111          new $.flexslider(this, options);
1112        }
1113      });
1114    } else {
1115      // Helper strings to quickly perform functions on the slider
1116      var $slider = $(this).data('flexslider');
1117      switch (options) {
1118        case "play": $slider.play(); break;
1119        case "pause": $slider.pause(); break;
1120        case "stop": $slider.stop(); break;
1121        case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
1122        case "prev":
1123        case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
1124        default: if (typeof options === "number") $slider.flexAnimate(options, true);
1125      }
1126    }
1127  }
1128})(jQuery);
1129/*
1130
1131Uniform v2.1.0
1132Copyright © 2009 Josh Pyles / Pixelmatrix Design LLC
1133http://pixelmatrixdesign.com
1134
1135Requires jQuery 1.3 or newer
1136
1137Much thanks to Thomas Reynolds and Buck Wilson for their help and advice on
1138this.
1139
1140Disabling text selection is made possible by Mathias Bynens
1141<http://mathiasbynens.be/> and his noSelect plugin.
1142<https://github.com/mathiasbynens/jquery-noselect>, which is embedded.
1143
1144Also, thanks to David Kaneda and Eugene Bond for their contributions to the
1145plugin.
1146
1147Tyler Akins has also rewritten chunks of the plugin, helped close many issues,
1148and ensured version 2 got out the door.
1149
1150License:
1151MIT License - http://www.opensource.org/licenses/mit-license.php
1152
1153Enjoy!
1154
1155*/
1156/*global jQuery, window, document, navigator*/
1157
1158(function ($, undef) {
1159	"use strict";
1160
1161	/**
1162	 * Use .prop() if jQuery supports it, otherwise fall back to .attr()
1163	 *
1164	 * @param jQuery $el jQuery'd element on which we're calling attr/prop
1165	 * @param ... All other parameters are passed to jQuery's function
1166	 * @return The result from jQuery
1167	 */
1168	function attrOrProp($el) {
1169		var args = Array.prototype.slice.call(arguments, 1);
1170
1171		if ($el.prop) {
1172			// jQuery 1.6+
1173			return $el.prop.apply($el, args);
1174		}
1175
1176		// jQuery 1.5 and below
1177		return $el.attr.apply($el, args);
1178	}
1179
1180	/**
1181	 * For backwards compatibility with older jQuery libraries, only bind
1182	 * one thing at a time.  Also, this function adds our namespace to
1183	 * events in one consistent location, shrinking the minified code.
1184	 *
1185	 * The properties on the events object are the names of the events
1186	 * that we are supposed to add to.  It can be a space separated list.
1187	 * The namespace will be added automatically.
1188	 *
1189	 * @param jQuery $el
1190	 * @param Object options Uniform options for this element
1191	 * @param Object events Events to bind, properties are event names
1192	 */
1193	function bindMany($el, options, events) {
1194		var name, namespaced;
1195
1196		for (name in events) {
1197			if (events.hasOwnProperty(name)) {
1198				namespaced = name.replace(/ |$/g, options.eventNamespace);
1199				$el.bind(namespaced, events[name]);
1200			}
1201		}
1202	}
1203
1204	/**
1205	 * Bind the hover, active, focus, and blur UI updates
1206	 *
1207	 * @param jQuery $el Original element
1208	 * @param jQuery $target Target for the events (our div/span)
1209	 * @param Object options Uniform options for the element $target
1210	 */
1211	function bindUi($el, $target, options) {
1212		bindMany($el, options, {
1213			focus: function () {
1214				$target.addClass(options.focusClass);
1215			},
1216			blur: function () {
1217				$target.removeClass(options.focusClass);
1218				$target.removeClass(options.activeClass);
1219			},
1220			mouseenter: function () {
1221				$target.addClass(options.hoverClass);
1222			},
1223			mouseleave: function () {
1224				$target.removeClass(options.hoverClass);
1225				$target.removeClass(options.activeClass);
1226			},
1227			"mousedown touchbegin": function () {
1228				if (!$el.is(":disabled")) {
1229					$target.addClass(options.activeClass);
1230				}
1231			},
1232			"mouseup touchend": function () {
1233				$target.removeClass(options.activeClass);
1234			}
1235		});
1236	}
1237
1238	/**
1239	 * Remove the hover, focus, active classes.
1240	 *
1241	 * @param jQuery $el Element with classes
1242	 * @param Object options Uniform options for the element
1243	 */
1244	function classClearStandard($el, options) {
1245		$el.removeClass(options.hoverClass + " " + options.focusClass + " " + options.activeClass);
1246	}
1247
1248	/**
1249	 * Add or remove a class, depending on if it's "enabled"
1250	 *
1251	 * @param jQuery $el Element that has the class added/removed
1252	 * @param String className Class or classes to add/remove
1253	 * @param Boolean enabled True to add the class, false to remove
1254	 */
1255	function classUpdate($el, className, enabled) {
1256		if (enabled) {
1257			$el.addClass(className);
1258		} else {
1259			$el.removeClass(className);
1260		}
1261	}
1262
1263	/**
1264	 * Updating the "checked" property can be a little tricky.  This
1265	 * changed in jQuery 1.6 and now we can pass booleans to .prop().
1266	 * Prior to that, one either adds an attribute ("checked=checked") or
1267	 * removes the attribute.
1268	 *
1269	 * @param jQuery $tag Our Uniform span/div
1270	 * @param jQuery $el Original form element
1271	 * @param Object options Uniform options for this element
1272	 */
1273	function classUpdateChecked($tag, $el, options) {
1274		var c = "checked",
1275			isChecked = $el.is(":" + c);
1276
1277		if ($el.prop) {
1278			// jQuery 1.6+
1279			$el.prop(c, isChecked);
1280		} else {
1281			// jQuery 1.5 and below
1282			if (isChecked) {
1283				$el.attr(c, c);
1284			} else {
1285				$el.removeAttr(c);
1286			}
1287		}
1288
1289		classUpdate($tag, options.checkedClass, isChecked);
1290	}
1291
1292	/**
1293	 * Set or remove the "disabled" class for disabled elements, based on
1294	 * if the 
1295	 *
1296	 * @param jQuery $tag Our Uniform span/div
1297	 * @param jQuery $el Original form element
1298	 * @param Object options Uniform options for this element
1299	 */
1300	function classUpdateDisabled($tag, $el, options) {
1301		classUpdate($tag, options.disabledClass, $el.is(":disabled"));
1302	}
1303
1304	/**
1305	 * Wrap an element inside of a container or put the container next
1306	 * to the element.  See the code for examples of the different methods.
1307	 *
1308	 * Returns the container that was added to the HTML.
1309	 *
1310	 * @param jQuery $el Element to wrap
1311	 * @param jQuery $container Add this new container around/near $el
1312	 * @param String method One of "after", "before" or "wrap"
1313	 * @return $container after it has been cloned for adding to $el
1314	 */
1315	function divSpanWrap($el, $container, method) {
1316		switch (method) {
1317		case "after":
1318			// Result:  <element /> <container />
1319			$el.after($container);
1320			return $el.next();
1321		case "before":
1322			// Result:  <container /> <element />
1323			$el.before($container);
1324			return $el.prev();
1325		case "wrap":
1326			// Result:  <container> <element /> </container>
1327			$el.wrap($container);
1328			return $el.parent();
1329		}
1330
1331		return null;
1332	}
1333
1334
1335	/**
1336	 * Create a div/span combo for uniforming an element
1337	 *
1338	 * @param jQuery $el Element to wrap
1339	 * @param Object options Options for the element, set by the user
1340	 * @param Object divSpanConfig Options for how we wrap the div/span
1341	 * @return Object Contains the div and span as properties
1342	 */
1343	function divSpan($el, options, divSpanConfig) {
1344		var $div, $span, id;
1345
1346		if (!divSpanConfig) {
1347			divSpanConfig = {};
1348		}
1349
1350		divSpanConfig = $.extend({
1351			bind: {},
1352			divClass: null,
1353			divWrap: "wrap",
1354			spanClass: null,
1355			spanHtml: null,
1356			spanWrap: "wrap"
1357		}, divSpanConfig);
1358
1359		$div = $('<div />');
1360		$span = $('<span />');
1361
1362		// Automatically hide this div/span if the element is hidden.
1363		// Do not hide if the element is hidden because a parent is hidden.
1364		if (options.autoHide && $el.is(':hidden') && $el.css('display') === 'none') {
1365			$div.hide();
1366		}
1367
1368		if (divSpanConfig.divClass) {
1369			$div.addClass(divSpanConfig.divClass);
1370		}
1371
1372		if (options.wrapperClass) {
1373			$div.addClass(options.wrapperClass);
1374		}
1375
1376		if (divSpanConfig.spanClass) {
1377			$span.addClass(divSpanConfig.spanClass);
1378		}
1379
1380		id = attrOrProp($el, 'id');
1381
1382		if (options.useID && id) {
1383			attrOrProp($div, 'id', options.idPrefix + '-' + id);
1384		}
1385
1386		if (divSpanConfig.spanHtml) {
1387			$span.html(divSpanConfig.spanHtml);
1388		}
1389
1390		$div = divSpanWrap($el, $div, divSpanConfig.divWrap);
1391		$span = divSpanWrap($el, $span, divSpanConfig.spanWrap);
1392		classUpdateDisabled($div, $el, options);
1393		return {
1394			div: $div,
1395			span: $span
1396		};
1397	}
1398
1399
1400	/**
1401	 * Wrap an element with a span to apply a global wrapper class
1402	 *
1403	 * @param jQuery $el Element to wrap
1404	 * @param object options
1405	 * @return jQuery Wrapper element
1406	 */
1407	function wrapWithWrapperClass($el, options) {
1408		var $span;
1409
1410		if (!options.wrapperClass) {
1411			return null;
1412		}
1413
1414		$span = $('<span />').addClass(options.wrapperClass);
1415		$span = divSpanWrap($el, $span, "wrap");
1416		return $span;
1417	}
1418
1419
1420	/**
1421	 * Test if high contrast mode is enabled.
1422	 *
1423	 * In high contrast mode, background images can not be set and
1424	 * they are always returned as 'none'.
1425	 *
1426	 * @return boolean True if in high contrast mode
1427	 */
1428	function highContrast() {
1429		var c, $div, el, rgb;
1430
1431		// High contrast mode deals with white and black
1432		rgb = 'rgb(120,2,153)';
1433		$div = $('<div style="width:0;height:0;color:' + rgb + '">');
1434		$('body').append($div);
1435		el = $div.get(0);
1436
1437		// $div.css() will get the style definition, not
1438		// the actually displaying style
1439		if (window.getComputedStyle) {
1440			c = window.getComputedStyle(el, '').color;
1441		} else {
1442			c = (el.currentStyle || el.style || {}).color;
1443		}
1444
1445		$div.remove();
1446		return c.replace(/ /g, '') !== rgb;
1447	}
1448
1449
1450	/**
1451	 * Change text into safe HTML
1452	 *
1453	 * @param String text
1454	 * @return String HTML version
1455	 */
1456	function htmlify(text) {
1457		if (!text) {
1458			return "";
1459		}
1460
1461		return $('<span />').text(text).html();
1462	}
1463
1464	/**
1465	 * If not MSIE, return false.
1466	 * If it is, return the version number.
1467	 *
1468	 * @return false|number
1469	 */
1470	function isMsie() {
1471		return navigator.cpuClass && !navigator.product;
1472	}
1473
1474	/**
1475	 * Return true if this version of IE allows styling
1476	 *
1477	 * @return boolean
1478	 */
1479	function isMsieSevenOrNewer() {
1480		if (typeof window.XMLHttpRequest !== 'undefined') {
1481			return true;
1482		}
1483
1484		return false;
1485	}
1486
1487	/**
1488	 * Test if the element is a multiselect
1489	 *
1490	 * @param jQuery $el Element
1491	 * @return boolean true/false
1492	 */
1493	function isMultiselect($el) {
1494		var elSize;
1495
1496		if ($el[0].multiple) {
1497			return true;
1498		}
1499
1500		elSize = attrOrProp($el, "size");
1501
1502		if (!elSize || elSize <= 1) {
1503			return false;
1504		}
1505
1506		return true;
1507	}
1508
1509	/**
1510	 * Meaningless utility function.  Used mostly for improving minification.
1511	 *
1512	 * @return false
1513	 */
1514	function returnFalse() {
1515		return false;
1516	}
1517
1518	/**
1519	 * noSelect plugin, very slightly modified
1520	 * http://mths.be/noselect v1.0.3
1521	 *
1522	 * @param jQuery $elem Element that we don't want to select
1523	 * @param Object options Uniform options for the element
1524	 */
1525	function noSelect($elem, options) {
1526		var none = 'none';
1527		bindMany($elem, options, {
1528			'selectstart dragstart mousedown': returnFalse
1529		});
1530
1531		$elem.css({
1532			MozUserSelect: none,
1533			msUserSelect: none,
1534			webkitUserSelect: none,
1535			userSelect: none
1536		});
1537	}
1538
1539	/**
1540	 * Updates the filename tag based on the value of the real input
1541	 * element.
1542	 *
1543	 * @param jQuery $el Actual form element
1544	 * @param jQuery $filenameTag Span/div to update
1545	 * @param Object options Uniform options for this element
1546	 */
1547	function setFilename($el, $filenameTag, options) {
1548		var filename = $el.val();
1549
1550		if (filename === "") {
1551			filename = options.fileDefaultHtml;
1552		} else {
1553			filename = filename.split(/[\/\\]+/);
1554			filename = filename[(filename.length - 1)];
1555		}
1556
1557		$filenameTag.text(filename);
1558	}
1559
1560
1561	/**
1562	 * Function from jQuery to swap some CSS values, run a callback,
1563	 * then restore the CSS.  Modified to pass JSLint and handle undefined
1564	 * values with 'use strict'.
1565	 *
1566	 * @param jQuery $el Element
1567	 * @param object newCss CSS values to swap out
1568	 * @param Function callback Function to run
1569	 */
1570	function swap($elements, newCss, callback) {
1571		var restore, item;
1572
1573		restore = [];
1574
1575		$elements.each(function () {
1576			var name;
1577
1578			for (name in newCss) {
1579				if (Object.prototype.hasOwnProperty.call(newCss, name)) {
1580					restore.push({
1581						el: this,
1582						name: name,
1583						old: this.style[name]
1584					});
1585
1586					this.style[name] = newCss[name];
1587				}
1588			}
1589		});
1590
1591		callback();
1592
1593		while (restore.length) {
1594			item = restore.pop();
1595			item.el.style[item.name] = item.old;
1596		}
1597	}
1598
1599
1600	/**
1601	 * The browser doesn't provide sizes of elements that are not visible.
1602	 * This will clone an element and add it to the DOM for calculations.
1603	 *
1604	 * @param jQuery $el
1605	 * @param String method
1606	 */
1607	function sizingInvisible($el, callback) {
1608		var targets;
1609
1610		// We wish to target ourselves and any parents as long as
1611		// they are not visible
1612		targets = $el.parents();
1613		targets.push($el[0]);
1614		targets = targets.not(':visible');
1615		swap(targets, {
1616			visibility: "hidden",
1617			display: "block",
1618			position: "absolute"
1619		}, callback);
1620	}
1621
1622
1623	/**
1624	 * Standard way to unwrap the div/span combination from an element
1625	 *
1626	 * @param jQuery $el Element that we wish to preserve
1627	 * @param Object options Uniform options for the element
1628	 * @return Function This generated function will perform the given work
1629	 */
1630	function unwrapUnwrapUnbindFunction($el, options) {
1631		return function () {
1632			$el.unwrap().unwrap().unbind(options.eventNamespace);
1633		};
1634	}
1635
1636	var allowStyling = true,  // False if IE6 or other unsupported browsers
1637		highContrastTest = false,  // Was the high contrast test ran?
1638		uniformHandlers = [  // Objects that take care of "unification"
1639			{
1640				// Buttons
1641				match: function ($el) {
1642					return $el.is("a, button, :submit, :reset, input[type='button']");
1643				},
1644				apply: function ($el, options) {
1645					var $div, defaultSpanHtml, ds, getHtml, doingClickEvent;
1646					defaultSpanHtml = options.submitDefaultHtml;
1647
1648					if ($el.is(":reset")) {
1649						defaultSpanHtml = options.resetDefaultHtml;
1650					}
1651
1652					if ($el.is("a, button")) {
1653						// Use the HTML inside the tag
1654						getHtml = function () {
1655							return $el.html() || defaultSpanHtml;
1656						};
1657					} else {
1658						// Use the value property of the element
1659						getHtml = function () {
1660							return htmlify(attrOrProp($el, "value")) || defaultSpanHtml;
1661						};
1662					}
1663
1664					ds = divSpan($el, options, {
1665						divClass: options.buttonClass,
1666						spanHtml: getHtml()
1667					});
1668					$div = ds.div;
1669					bindUi($el, $div, options);
1670					doingClickEvent = false;
1671					bindMany($div, options, {
1672						"click touchend": function () {
1673							var ev, res, target, href;
1674
1675							if (doingClickEvent) {
1676								return;
1677							}
1678
1679							if ($el.is(':disabled')) {
1680								return;
1681							}
1682
1683							doingClickEvent = true;
1684
1685							if ($el[0].dispatchEvent) {
1686								ev = document.createEvent("MouseEvents");
1687								ev.initEvent("click", true, true);
1688								res = $el[0].dispatchEvent(ev);
1689
1690								if ($el.is('a') && res) {
1691									target = attrOrProp($el, 'target');
1692									href = attrOrProp($el, 'href');
1693
1694									if (!target || target === '_self') {
1695										document.location.href = href;
1696									} else {
1697										window.open(href, target);
1698									}
1699								}
1700							} else {
1701								$el.click();
1702							}
1703
1704							doingClickEvent = false;
1705						}
1706					});
1707					noSelect($div, options);
1708					return {
1709						remove: function () {
1710							// Move $el out
1711							$div.after($el);
1712
1713							// Remove div and span
1714							$div.remove();
1715
1716							// Unbind events
1717							$el.unbind(options.eventNamespace);
1718							return $el;
1719						},
1720						update: function () {
1721							classClearStandard($div, options);
1722							classUpdateDisabled($div, $el, options);
1723							$el.detach();
1724							ds.span.html(getHtml()).append($el);
1725						}
1726					};
1727				}
1728			},
1729			{
1730				// Checkboxes
1731				match: function ($el) {
1732					return $el.is(":checkbox");
1733				},
1734				apply: function ($el, options) {
1735					var ds, $div, $span;
1736					ds = divSpan($el, options, {
1737						divClass: options.checkboxClass
1738					});
1739					$div = ds.div;
1740					$span = ds.span;
1741
1742					// Add focus classes, toggling, active, etc.
1743					bindUi($el, $div, options);
1744					bindMany($el, options, {
1745						"click touchend": function () {
1746							classUpdateChecked($span, $el, options);
1747						}
1748					});
1749					classUpdateChecked($span, $el, options);
1750					return {
1751						remove: unwrapUnwrapUnbindFunction($el, options),
1752						update: function () {
1753							classClearStandard($div, options);
1754							$span.removeClass(options.checkedClass);
1755							classUpdateChecked($span, $el, options);
1756							classUpdateDisabled($div, $el, options);
1757						}
1758					};
1759				}
1760			},
1761			{
1762				// File selection / uploads
1763				match: function ($el) {
1764					return $el.is(":file");
1765				},
1766				apply: function ($el, options) {
1767					var ds, $div, $filename, $button;
1768
1769					// The "span" is the button
1770					ds = divSpan($el, options, {
1771						divClass: options.fileClass,
1772						spanClass: options.fileButtonClass,
1773						spanHtml: options.fileButtonHtml,
1774						spanWrap: "after"
1775					});
1776					$div = ds.div;
1777					$button = ds.span;
1778					$filename = $("<span />").html(options.fileDefaultHtml);
1779					$filename.addClass(options.filenameClass);
1780					$filename = divSpanWrap($el, $filename, "after");
1781
1782					// Set the size
1783					if (!attrOrProp($el, "size")) {
1784						attrOrProp($el, "size", $div.width() / 10);
1785					}
1786
1787					// Actions
1788					function filenameUpdate() {
1789						setFilename($el, $filename, options);
1790					}
1791
1792					bindUi($el, $div, options);
1793
1794					// Account for input saved across refreshes
1795					filenameUpdate();
1796
1797					// IE7 doesn't fire onChange until blur or second fire.
1798					if (isMsie()) {
1799						// IE considers browser chrome blocking I/O, so it
1800						// suspends tiemouts until after the file has
1801						// been selected.
1802						bindMany($el, options, {
1803							click: function () {
1804								$el.trigger("change");
1805								setTimeout(filenameUpdate, 0);
1806							}
1807						});
1808					} else {
1809						// All other browsers behave properly
1810						bindMany($el, options, {
1811							change: filenameUpdate
1812						});
1813					}
1814
1815					noSelect($filename, options);
1816					noSelect($button, options);
1817					return {
1818						remove: function () {
1819							// Remove filename and button
1820							$filename.remove();
1821							$button.remove();
1822
1823							// Unwrap parent div, remove events
1824							return $el.unwrap().unbind(options.eventNamespace);
1825						},
1826						update: function () {
1827							classClearStandard($div, options);
1828							setFilename($el, $filename, options);
1829							classUpdateDisabled($div, $el, options);
1830						}
1831					};
1832				}
1833			},
1834			{
1835				// Input fields (text)
1836				match: function ($el) {
1837					if ($el.is("input")) {
1838						var t = (" " + attrOrProp($el, "type") + " ").toLowerCase(),
1839							allowed = " color date datetime datetime-local email month number password search tel text time url week ";
1840						return allowed.indexOf(t) >= 0;
1841					}
1842
1843					return false;
1844				},
1845				apply: function ($el, options) {
1846					var elType, $wrapper;
1847
1848					elType = attrOrProp($el, "type");
1849					$el.addClass(options.inputClass);
1850					$wrapper = wrapWithWrapperClass($el, options);
1851					bindUi($el, $el, options);
1852
1853					if (options.inputAddTypeAsClass) {
1854						$el.addClass(elType);
1855					}
1856
1857					return {
1858						remove: function () {
1859							$el.removeClass(options.inputClass);
1860
1861							if (options.inputAddTypeAsClass) {
1862								$el.removeClass(elType);
1863							}
1864
1865							if ($wrapper) {
1866								$el.unwrap();
1867							}
1868						},
1869						update: returnFalse
1870					};
1871				}
1872			},
1873			{
1874				// Radio buttons
1875				match: function ($el) {
1876					return $el.is(":radio");
1877				},
1878				apply: function ($el, options) {
1879					var ds, $div, $span;
1880					ds = divSpan($el, options, {
1881						divClass: options.radioClass
1882					});
1883					$div = ds.div;
1884					$span = ds.span;
1885
1886					// Add classes for focus, handle active, checked
1887					bindUi($el, $div, options);
1888					bindMany($el, options, {
1889						"click touchend": function () {
1890							// Find all radios with the same name, then update
1891							// them with $.uniform.update() so the right
1892							// per-element options are used
1893							$.uniform.update($(':radio[name="' + attrOrProp($el, "name") + '"]'));
1894						}
1895					});
1896					classUpdateChecked($span, $el, options);
1897					return {
1898						remove: unwrapUnwrapUnbindFunction($el, options),
1899						update: function () {
1900							classClearStandard($div, options);
1901							classUpdateChecked($span, $el, options);
1902							classUpdateDisabled($div, $el, options);
1903						}
1904					};
1905				}
1906			},
1907			{
1908				// Select lists, but do not style multiselects here
1909				match: function ($el) {
1910					if ($el.is("select") && !isMultiselect($el)) {
1911						return true;
1912					}
1913
1914					return false;
1915				},
1916				apply: function ($el, options) {
1917					var ds, $div, $span, origElemWidth;
1918
1919					if (options.selectAutoWidth) {
1920						sizingInvisible($el, function () {
1921							origElemWidth = $el.width();
1922						});
1923					}
1924
1925					ds = divSpan($el, options, {
1926						divClass: options.selectClass,
1927						spanHtml: ($el.find(":selected:first") || $el.find("option:first")).html(),
1928						spanWrap: "before"
1929					});
1930					$div = ds.div;
1931					$span = ds.span;
1932
1933					if (options.selectAutoWidth) {
1934						// Use the width of the select and adjust the
1935						// span and div accordingly
1936						sizingInvisible($el, function () {
1937							// Force "display: block" - related to bug #287
1938							swap($([ $span[0], $div[0] ]), {
1939								display: "block"
1940							}, function () {
1941								var spanPad;
1942								spanPad = $span.outerWidth() - $span.width();
1943								$div.width(origElemWidth + spanPad);
1944								$span.width(origElemWidth);
1945							});
1946						});
1947					} else {
1948						// Force the select to fill the size of the div
1949						$div.addClass('fixedWidth');
1950					}
1951
1952					// Take care of events
1953					bindUi($el, $div, options);
1954					bindMany($el, options, {
1955						change: function () {
1956							$span.html($el.find(":selected").html());
1957							$div.removeClass(options.activeClass);
1958						},
1959						"click touchend": function () {
1960							// IE7 and IE8 may not update the value right
1961							// until after click event - issue #238
1962							var selHtml = $el.find(":selected").html();
1963
1964							if ($span.html() !== selHtml) {
1965								// Change was detected
1966								// Fire the change event on the select tag
1967								$el.trigger('change');
1968							}
1969						},
1970						keyup: function () {
1971							$span.html($el.find(":selected").html());
1972						}
1973					});
1974					noSelect($span, options);
1975					return {
1976						remove: function () {
1977							// Remove sibling span
1978							$span.remove();
1979
1980							// Unwrap parent div
1981							$el.unwrap().unbind(options.eventNamespace);
1982							return $el;
1983						},
1984						update: function () {
1985							if (options.selectAutoWidth) {
1986								// Easier to remove and reapply formatting
1987								$.uniform.restore($el);
1988								$el.uniform(options);
1989							} else {
1990								classClearStandard($div, options);
1991
1992								// Reset current selected text
1993								$span.html($el.find(":selected").html());
1994								classUpdateDisabled($div, $el, options);
1995							}
1996						}
1997					};
1998				}
1999			},
2000			{
2001				// Select lists - multiselect lists only
2002				match: function ($el) {
2003					if ($el.is("select") && isMultiselect($el)) {
2004						return true;
2005					}
2006
2007					return false;
2008				},
2009				apply: function ($el, options) {
2010					var $wrapper;
2011
2012					$el.addClass(options.selectMultiClass);
2013					$wrapper = wrapWithWrapperClass($el, options);
2014					bindUi($el, $el, options);
2015
2016					return {
2017						remove: function () {
2018							$el.removeClass(options.selectMultiClass);
2019
2020							if ($wrapper) {
2021								$el.unwrap();
2022							}
2023						},
2024						update: returnFalse
2025					};
2026				}
2027			},
2028			{
2029				// Textareas
2030				match: function ($el) {
2031					return $el.is("textarea");
2032				},
2033				apply: function ($el, options) {
2034					var $wrapper;
2035
2036					$el.addClass(options.textareaClass);
2037					$wrapper = wrapWithWrapperClass($el, options);
2038					bindUi($el, $el, options);
2039
2040					return {
2041						remove: function () {
2042							$el.removeClass(options.textareaClass);
2043
2044							if ($wrapper) {
2045								$el.unwrap();
2046							}
2047						},
2048						update: returnFalse
2049					};
2050				}
2051			}
2052		];
2053
2054	// IE6 can't be styled - can't set opacity on select
2055	if (isMsie() && !isMsieSevenOrNewer()) {
2056		allowStyling = false;
2057	}
2058
2059	$.uniform = {
2060		// Default options that can be overridden globally or when uniformed
2061		// globally:  $.uniform.defaults.fileButtonHtml = "Pick A File";
2062		// on uniform:  $('input').uniform({fileButtonHtml: "Pick a File"});
2063		defaults: {
2064			activeClass: "active",
2065			autoHide: true,
2066			buttonClass: "button",
2067			checkboxClass: "checker",
2068			checkedClass: "checked",
2069			disabledClass: "disabled",
2070			eventNamespace: ".uniform",
2071			fileButtonClass: "action",
2072			fileButtonHtml: "Choose File",
2073			fileClass: "uploader",
2074			fileDefaultHtml: "No file selected",
2075			filenameClass: "filename",
2076			focusClass: "focus",
2077			hoverClass: "hover",
2078			idPrefix: "uniform",
2079			inputAddTypeAsClass: true,
2080			inputClass: "uniform-input",
2081			radioClass: "radio",
2082			resetDefaultHtml: "Reset",
2083			resetSelector: false,  // We'll use our own function when you don't specify one
2084			selectAutoWidth: true,
2085			selectClass: "selector",
2086			selectMultiClass: "uniform-multiselect",
2087			submitDefaultHtml: "Submit",  // Only text allowed
2088			textareaClass: "uniform",
2089			useID: true,
2090			wrapperClass: null
2091		},
2092
2093		// All uniformed elements - DOM objects
2094		elements: []
2095	};
2096
2097	$.fn.uniform = function (options) {
2098		var el = this;
2099		options = $.extend({}, $.uniform.defaults, options);
2100
2101		// If we are in high contrast mode, do not allow styling
2102		if (!highContrastTest) {
2103			highContrastTest = true;
2104
2105			if (highContrast()) {
2106				allowStyling = false;
2107			}
2108		}
2109
2110		// Only uniform on browsers that work
2111		if (!allowStyling) {
2112			return this;
2113		}
2114
2115		// Code for specifying a reset button
2116		if (options.resetSelector) {
2117			$(options.resetSelector).mouseup(function () {
2118				window.setTimeout(function () {
2119					$.uniform.update(el);
2120				}, 10);
2121			});
2122		}
2123
2124		return this.each(function () {
2125			var $el = $(this), i, handler, callbacks;
2126
2127			// Avoid uniforming elements already uniformed - just update
2128			if ($el.data("uniformed")) {
2129				$.uniform.update($el);
2130				return;
2131			}
2132
2133			// See if we have any handler for this type of element
2134			for (i = 0; i < uniformHandlers.length; i = i + 1) {
2135				handler = uniformHandlers[i];
2136
2137				if (handler.match($el, options)) {
2138					callbacks = handler.apply($el, options);
2139					$el.data("uniformed", callbacks);
2140
2141					// Store element in our global array
2142					$.uniform.elements.push($el.get(0));
2143					return;
2144				}
2145			}
2146
2147			// Could not style this element
2148		});
2149	};
2150
2151	$.uniform.restore = $.fn.uniform.restore = function (elem) {
2152		if (elem === undef) {
2153			elem = $.uniform.elements;
2154		}
2155
2156		$(elem).each(function () {
2157			var $el = $(this), index, elementData;
2158			elementData = $el.data("uniformed");
2159
2160			// Skip elements that are not uniformed
2161			if (!elementData) {
2162				return;
2163			}
2164
2165			// Unbind events, remove additional markup that was added
2166			elementData.remove();
2167
2168			// Remove item from list of uniformed elements
2169			index = $.inArray(this, $.uniform.elements);
2170
2171			if (index >= 0) {
2172				$.uniform.elements.splice(index, 1);
2173			}
2174
2175			$el.removeData("uniformed");
2176		});
2177	};
2178
2179	$.uniform.update = $.fn.uniform.update = function (elem) {
2180		if (elem === undef) {
2181			elem = $.uniform.elements;
2182		}
2183
2184		$(elem).each(function () {
2185			var $el = $(this), elementData;
2186			elementData = $el.data("uniformed");
2187
2188			// Skip elements that are not uniformed
2189			if (!elementData) {
2190				return;
2191			}
2192
2193			elementData.update($el, elementData.options);
2194		});
2195	};
2196}(jQuery));
2197(function ($)
2198{
2199
2200	// formstyling
2201	$('select').uniform({
2202		selectClass: 'form-select-fake',
2203		selectAutoWidth: false
2204	});
2205
2206
2207	// navigation toggler
2208	$('[data-action="navigation-toggle"]').on('click', function(e)
2209	{
2210		e.preventDefault();
2211
2212		$(this).toggleClass('is-active');
2213	});
2214
2215
2216	// promo slider
2217	$('.promo-inner').flexslider({
2218		animation: 'slide',
2219		animationSpeed: 800,
2220		slideshowSpeed: 3000,
2221		controlNav: false,
2222		directionNav: false
2223	});
2224	
2225	// buchneuheiten slider
2226	/*$('.flexslider').flexslider({
2227		animation: 'slide',
2228		slideshow: false,
2229		controlNav: true,
2230		manualControls: '.buchneuheiten .listing-pagination a',
2231		selector: ".slides > .slide",
2232		directionNav: false
2233	});*/
2234	
2235	
2236	
2237
2238	// tab switcher
2239	$('.tabs-switch').on('click', function(e)
2240	{
2241		var me = $(this);
2242		var idx = me.parent().children().index(this);
2243
2244		e.preventDefault();
2245
2246		if (me.hasClass('is-active'))
2247		{
2248			return;
2249		}
2250
2251		me.addClass('is-active').siblings().removeClass('is-active');
2252		me.parent().next().children().removeClass('is-active').eq(idx).addClass('is-active');
2253	})
2254	
2255	// accordion
2256	$('.accordion-switch').on('click', function(e)
2257	{
2258		e.preventDefault();
2259		$(this).next().stop().slideToggle(400);
2260	});
2261	
2262	$('.bookInfoContent-buttons #presse-btn').on('click', function(e)
2263	{
2264		var me = $(this);
2265        if ($('.bookInfoContent-buttons  .presse-btn-box').hasClass('is-active')) {
2266            $('.bookInfoContent-buttons  .presse-btn-box').removeClass('is-active');
2267        }
2268        else {
2269            $('.bookInfoContent-buttons  .presse-btn-box').addClass('is-active');   
2270        }
2271    });
2272    
2273    $('.bookInfoContent-buttons #rezex').on('click', function(e)
2274	{
2275		var me = $(this);
2276        if ($('.bookInfoContent-buttons .presse-btn-box-sub').hasClass('is-active')) {
2277            $('.bookInfoContent-buttons .presse-btn-box-sub').removeClass('is-active');
2278        }
2279        else {
2280            $('.bookInfoContent-buttons .presse-btn-box-sub').addClass('is-active');   
2281        }
2282    });
2283    
2284    /*$('.bookInfoContent-buttons #rezex').hover(
2285        function(){
2286            jQuery('.bookInfoContent-buttons #rezex .presse-btn-box-sub').show();
2287        },
2288        function(){
2289            jQuery('.bookInfoContent-buttons #rezex .presse-btn-box-sub').hide();   
2290        }
2291    )*/
2292
2293})(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.