PageSourceSearch

https://www.town.numata.hokkaido.jp/WSR/flexslider.js

js town.numata.hokkaido.jp collected 2026-10-02 06:31:35 UTC 52,892 bytes, 1,144 lines download raw bytes

vendor: 4,403 bytes, lines 1-103
1/*
2 * jQuery FlexSlider v2.2.2
3 * Copyright 2012 WooThemes
4 * Contributing Author: Tyler Smith
5
62014.02.06 FireFox Error! 実行タイミング変更 →el.addEventListener('touchstart', onTouchStart, false);
7 */
8;
9(function ($) {
10
11  //FlexSlider: Object Instance
12  $.flexslider = function(el, options) {
13    var slider = $(el);
14
15    // making variables public
16    slider.vars = $.extend({}, $.flexslider.defaults, options);
17
18    var namespace = slider.vars.namespace,
19        msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,
20        touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,
21        // depricating this idea, as devices are being released with both of these events
22        //eventType = (touch) ? "touchend" : "click",
23        eventType = "click touchend MSPointerUp",
24        watchedEvent = "",
25        watchedEventClearTimer,
26        vertical = slider.vars.direction === "vertical",
27        reverse = slider.vars.reverse,
28        carousel = (slider.vars.itemWidth > 0),
29        fade = slider.vars.animation === "fade",
30        asNav = slider.vars.asNavFor !== "",
31        methods = {},
32        focused = true;
33
34    // Store a reference to the slider object
35    $.data(el, "flexslider", slider);
36
37    // Private slider methods
38    methods = {
39      init: function() {
40        slider.animating = false;
41        // Get current slide and make sure it is a number
42        slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 );
43        if ( isNaN( slider.currentSlide ) ) slider.currentSlide = 0;
44        slider.animatingTo = slider.currentSlide;
45        slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
46        slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));
47        slider.slides = $(slider.vars.selector, slider);
48        slider.container = $(slider.containerSelector, slider);
49        slider.count = slider.slides.length;
50        // SYNC:
51        slider.syncExists = $(slider.vars.sync).length > 0;
52        // SLIDE:
53        if (slider.vars.animation === "slide") slider.vars.animation = "swing";
54        slider.prop = (vertical) ? "top" : "marginLeft";
55        slider.args = {};
56        // SLIDESHOW:
57        slider.manualPause = false;
58        slider.stopped = false;
59        //PAUSE WHEN INVISIBLE
60        slider.started = false;
61        slider.startTimeout = null;
62        // TOUCH/USECSS:
63        slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() {
64          var obj = document.createElement('div'),
65              props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
66          for (var i in props) {
67            if ( obj.style[ props[i] ] !== undefined ) {
68              slider.pfx = props[i].replace('Perspective','').toLowerCase();
69              slider.prop = "-" + slider.pfx + "-transform";
70              return true;
71            }
72          }
73          return false;
74        }());
75        // CONTROLSCONTAINER:
76        if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);
77        // MANUAL:
78        if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);
79
80        // RANDOMIZE:
81        if (slider.vars.randomize) {
82          slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
83          slider.container.empty().append(slider.slides);
84        }
85
86        slider.doMath();
87
88        // INIT
89        slider.setup("init");
90
91        // CONTROLNAV:
92        if (slider.vars.controlNav) methods.controlNav.setup();
93
94        // DIRECTIONNAV:
95        if (slider.vars.directionNav) methods.directionNav.setup();
96
97        // KEYBOARD:
98        if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {
99          $(document).bind('keyup', function(event) {
100            var keycode = event.keyCode;
101            if (!slider.animating && (keycode === 39 || keycode === 37)) {
102              var target = (keycode === 39) ? slider.getTarget('next') :
103                           (keycode === 37) ? slider.getTarget('prev') : false;
104              slider.flexAnimate(target, slider.vars.pauseOnAction);
105            }
106          });
107        }
108        // MOUSEWHEEL:
109        if (slider.vars.mousewheel) {
110          slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
111            event.preventDefault();
112            var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
113            slider.flexAnimate(target, slider.vars.pauseOnAction);
114          });
115        }
116
117        // PAUSEPLAY
118        if (slider.vars.pausePlay) methods.pausePlay.setup();
119
120        //PAUSE WHEN INVISIBLE
121        if (slider.vars.slideshow && slider.vars.pauseInvisible) methods.pauseInvisible.init();
122
123        // SLIDSESHOW
124        if (slider.vars.slideshow) {
125          if (slider.vars.pauseOnHover) {
126            slider.hover(function() {
127              if (!slider.manualPlay && !slider.manualPause) slider.pause();
128            }, function() {
129              if (!slider.manualPause && !slider.manualPlay && !slider.stopped) slider.play();
130            });
131          }
132          // initialize animation
133          //If we're visible, or we don't use PageVisibility API
134          if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) {
135            (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play();
136          }
137        }
138
139        // ASNAV:
140        if (asNav) methods.asNav.setup();
141
142        // TOUCH
143        if (touch && slider.vars.touch) methods.touch();
144
145        // FADE&&SMOOTHHEIGHT || SLIDE:
146        if (!fade || (fade && slider.vars.smoothHeight)) $(window).bind("resize orientationchange focus", methods.resize);
147
148        slider.find("img").attr("draggable", "false");
149
150        // API: start() Callback
151        setTimeout(function(){
152          slider.vars.start(slider);
153        }, 200);
154      },
155      asNav: {
156        setup: function() {
157          slider.asNav = true;
158          slider.animatingTo = Math.floor(slider.currentSlide/slider.move);
159          slider.currentItem = slider.currentSlide;
160          slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide");
161          if(!msGesture){
162              slider.slides.on(eventType, function(e){
163                e.preventDefault();
164                var $slide = $(this),
165                    target = $slide.index();
166                var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container
167                if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {
168                  slider.flexAnimate(slider.getTarget("prev"), true);
169                } else if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass(namespace + "active-slide")) {
170                  slider.direction = (slider.currentItem < target) ? "next" : "prev";
171                  slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
172                }
173              });
174          }else{
175              el._slider = slider;
176              slider.slides.each(function (){
177                  var that = this;
178                  that._gesture = new MSGesture();
179                  that._gesture.target = that;
180                  that.addEventListener("MSPointerDown", function (e){
181                      e.preventDefault();
182                      if(e.currentTarget._gesture)
183                          e.currentTarget._gesture.addPointer(e.pointerId);
184                  }, false);
185                  that.addEventListener("MSGestureTap", function (e){
186                      e.preventDefault();
187                      var $slide = $(this),
188                          target = $slide.index();
189                      if (!$(slider.vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {
190                          slider.direction = (slider.currentItem < target) ? "next" : "prev";
191                          slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
192                      }
193                  });
194              });
195          }
196        }
197      },
198      controlNav: {
199        setup: function() {
200          if (!slider.manualControls) {
vendor: 28,725 bytes, lines 201-859
201            methods.controlNav.setupPaging();
202          } else { // MANUALCONTROLS:
203            methods.controlNav.setupManual();
204          }
205        },
206        setupPaging: function() {
207          var type = (slider.vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging',
208              j = 1,
209              item,
210              slide;
211
212          slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>');
213
214          if (slider.pagingCount > 1) {
215            for (var i = 0; i < slider.pagingCount; i++) {
216              slide = slider.slides.eq(i);
217              item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slide.attr( 'data-thumb' ) + '"/>' : '<a>' + j + '</a>';
218              if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {
219                var captn = slide.attr( 'data-thumbcaption' );
220                if ( '' != captn && undefined != captn ) item += '<span class="' + namespace + 'caption">' + captn + '</span>';
221              }
222              slider.controlNavScaffold.append('<li>' + item + '</li>');
223              j++;
224            }
225          }
226
227          // CONTROLSCONTAINER:
228          (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);
229          methods.controlNav.set();
230
231          methods.controlNav.active();
232
233          slider.controlNavScaffold.delegate('a, img', eventType, function(event) {
234            event.preventDefault();
235
236            if (watchedEvent === "" || watchedEvent === event.type) {
237              var $this = $(this),
238                  target = slider.controlNav.index($this);
239
240              if (!$this.hasClass(namespace + 'active')) {
241                slider.direction = (target > slider.currentSlide) ? "next" : "prev";
242                slider.flexAnimate(target, slider.vars.pauseOnAction);
243              }
244            }
245
246            // setup flags to prevent event duplication
247            if (watchedEvent === "") {
248              watchedEvent = event.type;
249            }
250            methods.setToClearWatchedEvent();
251
252          });
253        },
254        setupManual: function() {
255          slider.controlNav = slider.manualControls;
256          methods.controlNav.active();
257
258          slider.controlNav.bind(eventType, function(event) {
259            event.preventDefault();
260
261            if (watchedEvent === "" || watchedEvent === event.type) {
262              var $this = $(this),
263                  target = slider.controlNav.index($this);
264
265              if (!$this.hasClass(namespace + 'active')) {
266                (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
267                slider.flexAnimate(target, slider.vars.pauseOnAction);
268              }
269            }
270
271            // setup flags to prevent event duplication
272            if (watchedEvent === "") {
273              watchedEvent = event.type;
274            }
275            methods.setToClearWatchedEvent();
276          });
277        },
278        set: function() {
279          var selector = (slider.vars.controlNav === "thumbnails") ? 'img' : 'a';
280          slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);
281        },
282        active: function() {
283          slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active");
284        },
285        update: function(action, pos) {
286          if (slider.pagingCount > 1 && action === "add") {
287            slider.controlNavScaffold.append($('<li><a>' + slider.count + '</a></li>'));
288          } else if (slider.pagingCount === 1) {
289            slider.controlNavScaffold.find('li').remove();
290          } else {
291            slider.controlNav.eq(pos).closest('li').remove();
292          }
293          methods.controlNav.set();
294          (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();
295        }
296      },
297      directionNav: {
298        setup: function() {
299          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>');
300
301          // CONTROLSCONTAINER:
302          if (slider.controlsContainer) {
303            $(slider.controlsContainer).append(directionNavScaffold);
304            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
305          } else {
306            slider.append(directionNavScaffold);
307            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);
308          }
309
310          methods.directionNav.update();
311
312          slider.directionNav.bind(eventType, function(event) {
313            event.preventDefault();
314            var target;
315
316            if (watchedEvent === "" || watchedEvent === event.type) {
317              target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');
318              slider.flexAnimate(target, slider.vars.pauseOnAction);
319            }
320
321            // setup flags to prevent event duplication
322            if (watchedEvent === "") {
323              watchedEvent = event.type;
324            }
325            methods.setToClearWatchedEvent();
326          });
327        },
328        update: function() {
329          var disabledClass = namespace + 'disabled';
330          if (slider.pagingCount === 1) {
331            slider.directionNav.addClass(disabledClass).attr('tabindex', '-1');
332          } else if (!slider.vars.animationLoop) {
333            if (slider.animatingTo === 0) {
334              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass).attr('tabindex', '-1');
335            } else if (slider.animatingTo === slider.last) {
336              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass).attr('tabindex', '-1');
337            } else {
338              slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
339            }
340          } else {
341            slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
342          }
343        }
344      },
345      pausePlay: {
346        setup: function() {
347          var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a></a></div>');
348
349          // CONTROLSCONTAINER:
350          if (slider.controlsContainer) {
351            slider.controlsContainer.append(pausePlayScaffold);
352            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);
353          } else {
354            slider.append(pausePlayScaffold);
355            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);
356          }
357
358          methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play');
359
360          slider.pausePlay.bind(eventType, function(event) {
361            event.preventDefault();
362
363            if (watchedEvent === "" || watchedEvent === event.type) {
364              if ($(this).hasClass(namespace + 'pause')) {
365                slider.manualPause = true;
366                slider.manualPlay = false;
367                slider.pause();
368              } else {
369                slider.manualPause = false;
370                slider.manualPlay = true;
371                slider.play();
372              }
373            }
374
375            // setup flags to prevent event duplication
376            if (watchedEvent === "") {
377              watchedEvent = event.type;
378            }
379            methods.setToClearWatchedEvent();
380          });
381        },
382        update: function(state) {
383          (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);
384        }
385      },
386      touch: function() {
387        var startX,
388          startY,
389          offset,
390          cwidth,
391          dx,
392          startT,
393          scrolling = false,
394          localX = 0,
395          localY = 0,
396          accDx = 0;
397
398        if(!msGesture){
399            //el.addEventListener('touchstart', onTouchStart, false); on FireFox Error! 実行タイミング変更
400
401            function onTouchStart(e) {
402              if (slider.animating) {
403                e.preventDefault();
404              } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {
405                slider.pause();
406                // CAROUSEL:
407                cwidth = (vertical) ? slider.h : slider. w;
408                startT = Number(new Date());
409                // CAROUSEL:
410
411                // Local vars for X and Y points.
412                localX = e.touches[0].pageX;
413                localY = e.touches[0].pageY;
414
415                offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
416                         (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
417                         (carousel && slider.currentSlide === slider.last) ? slider.limit :
418                         (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
419                         (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
420                startX = (vertical) ? localY : localX;
421                startY = (vertical) ? localX : localY;
422
423                el.addEventListener('touchmove', onTouchMove, false);
424                el.addEventListener('touchend', onTouchEnd, false);
425              }
426            }
427            el.addEventListener('touchstart', onTouchStart, false);// FireFox
428
429            function onTouchMove(e) {
430              // Local vars for X and Y points.
431
432              localX = e.touches[0].pageX;
433              localY = e.touches[0].pageY;
434
435              dx = (vertical) ? startX - localY : startX - localX;
436              scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY));
437
438              var fxms = 500;
439
440              if ( ! scrolling || Number( new Date() ) - startT > fxms ) {
441                e.preventDefault();
442                if (!fade && slider.transitions) {
443                  if (!slider.vars.animationLoop) {
444                    dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
445                  }
446                  slider.setProps(offset + dx, "setTouch");
447                }
448              }
449            }
450
451            function onTouchEnd(e) {
452              // finish the touch by undoing the touch session
453              el.removeEventListener('touchmove', onTouchMove, false);
454
455              if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
456                var updateDx = (reverse) ? -dx : dx,
457                    target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
458
459                if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
460                  slider.flexAnimate(target, slider.vars.pauseOnAction);
461                } else {
462                  if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
463                }
464              }
465              el.removeEventListener('touchend', onTouchEnd, false);
466
467              startX = null;
468              startY = null;
469              dx = null;
470              offset = null;
471            }
472        }else{
473            el.style.msTouchAction = "none";
474            el._gesture = new MSGesture();
475            el._gesture.target = el;
476            el.addEventListener("MSPointerDown", onMSPointerDown, false);
477            el._slider = slider;
478            el.addEventListener("MSGestureChange", onMSGestureChange, false);
479            el.addEventListener("MSGestureEnd", onMSGestureEnd, false);
480
481            function onMSPointerDown(e){
482                e.stopPropagation();
483                if (slider.animating) {
484                    e.preventDefault();
485                }else{
486                    slider.pause();
487                    el._gesture.addPointer(e.pointerId);
488                    accDx = 0;
489                    cwidth = (vertical) ? slider.h : slider. w;
490                    startT = Number(new Date());
491                    // CAROUSEL:
492
493                    offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
494                        (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
495                            (carousel && slider.currentSlide === slider.last) ? slider.limit :
496                                (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
497                                    (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
498                }
499            }
500
501            function onMSGestureChange(e) {
502                e.stopPropagation();
503                var slider = e.target._slider;
504                if(!slider){
505                    return;
506                }
507                var transX = -e.translationX,
508                    transY = -e.translationY;
509
510                //Accumulate translations.
511                accDx = accDx + ((vertical) ? transY : transX);
512                dx = accDx;
513                scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY));
514
515                if(e.detail === e.MSGESTURE_FLAG_INERTIA){
516                    setImmediate(function (){
517                        el._gesture.stop();
518                    });
519
520                    return;
521                }
522
523                if (!scrolling || Number(new Date()) - startT > 500) {
524                    e.preventDefault();
525                    if (!fade && slider.transitions) {
526                        if (!slider.vars.animationLoop) {
527                            dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1);
528                        }
529                        slider.setProps(offset + dx, "setTouch");
530                    }
531                }
532            }
533
534            function onMSGestureEnd(e) {
535                e.stopPropagation();
536                var slider = e.target._slider;
537                if(!slider){
538                    return;
539                }
540                if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
541                    var updateDx = (reverse) ? -dx : dx,
542                        target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
543
544                    if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
545                        slider.flexAnimate(target, slider.vars.pauseOnAction);
546                    } else {
547                        if (!fade) slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true);
548                    }
549                }
550
551                startX = null;
552                startY = null;
553                dx = null;
554                offset = null;
555                accDx = 0;
556            }
557        }
558      },
559      resize: function() {
560        if (!slider.animating && slider.is(':visible')) {
561          if (!carousel) slider.doMath();
562
563          if (fade) {
564            // SMOOTH HEIGHT:
565            methods.smoothHeight();
566          } else if (carousel) { //CAROUSEL:
567            slider.slides.width(slider.computedW);
568            slider.update(slider.pagingCount);
569            slider.setProps();
570          }
571          else if (vertical) { //VERTICAL:
572            slider.viewport.height(slider.h);
573            slider.setProps(slider.h, "setTotal");
574          } else {
575            // SMOOTH HEIGHT:
576            if (slider.vars.smoothHeight) methods.smoothHeight();
577            slider.newSlides.width(slider.computedW);
578            slider.setProps(slider.computedW, "setTotal");
579          }
580        }
581      },
582      smoothHeight: function(dur) {
583        if (!vertical || fade) {
584          var $obj = (fade) ? slider : slider.viewport;
585          (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());
586        }
587      },
588      sync: function(action) {
589        var $obj = $(slider.vars.sync).data("flexslider"),
590            target = slider.animatingTo;
591
592        switch (action) {
593          case "animate": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break;
594          case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;
595          case "pause": $obj.pause(); break;
596        }
597      },
598      uniqueID: function($clone) {
599        $clone.find( '[id]' ).each(function() {
600          var $this = $(this);
601          $this.attr( 'id', $this.attr( 'id' ) + '_clone' );
602        });
603        return $clone;
604      },
605      pauseInvisible: {
606        visProp: null,
607        init: function() {
608          var prefixes = ['webkit','moz','ms','o'];
609
610          if ('hidden' in document) return 'hidden';
611          for (var i = 0; i < prefixes.length; i++) {
612            if ((prefixes[i] + 'Hidden') in document)
613            methods.pauseInvisible.visProp = prefixes[i] + 'Hidden';
614          }
615          if (methods.pauseInvisible.visProp) {
616            var evtname = methods.pauseInvisible.visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
617            document.addEventListener(evtname, function() {
618              if (methods.pauseInvisible.isHidden()) {
619                if(slider.startTimeout) clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible
620                else slider.pause(); //Or just pause
621              }
622              else {
623                if(slider.started) slider.play(); //Initiated before, just play
624                else (slider.vars.initDelay > 0) ? setTimeout(slider.play, slider.vars.initDelay) : slider.play(); //Didn't init before: simply init or wait for it
625              }
626            });
627          }
628        },
629        isHidden: function() {
630          return document[methods.pauseInvisible.visProp] || false;
631        }
632      },
633      setToClearWatchedEvent: function() {
634        clearTimeout(watchedEventClearTimer);
635        watchedEventClearTimer = setTimeout(function() {
636          watchedEvent = "";
637        }, 3000);
638      }
639    };
640
641    // public methods
642    slider.flexAnimate = function(target, pause, override, withSync, fromNav) {
643      if (!slider.vars.animationLoop && target !== slider.currentSlide) {
644        slider.direction = (target > slider.currentSlide) ? "next" : "prev";
645      }
646
647      if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev";
648
649      if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) {
650        if (asNav && withSync) {
651          var master = $(slider.vars.asNavFor).data('flexslider');
652          slider.atEnd = target === 0 || target === slider.count - 1;
653          master.flexAnimate(target, true, false, true, fromNav);
654          slider.direction = (slider.currentItem < target) ? "next" : "prev";
655          master.direction = slider.direction;
656
657          if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {
658            slider.currentItem = target;
659            slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
660            target = Math.floor(target/slider.visible);
661          } else {
662            slider.currentItem = target;
663            slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
664            return false;
665          }
666        }
667
668        slider.animating = true;
669        slider.animatingTo = target;
670
671        // SLIDESHOW:
672        if (pause) slider.pause();
673
674        // API: before() animation Callback
675        slider.vars.before(slider);
676
677        // SYNC:
678        if (slider.syncExists && !fromNav) methods.sync("animate");
679
680        // CONTROLNAV
681        if (slider.vars.controlNav) methods.controlNav.active();
682
683        // !CAROUSEL:
684        // CANDIDATE: slide active class (for add/remove slide)
685        if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide');
686
687        // INFINITE LOOP:
688        // CANDIDATE: atEnd
689        slider.atEnd = target === 0 || target === slider.last;
690
691        // DIRECTIONNAV:
692        if (slider.vars.directionNav) methods.directionNav.update();
693
694        if (target === slider.last) {
695          // API: end() of cycle Callback
696          slider.vars.end(slider);
697          // SLIDESHOW && !INFINITE LOOP:
698          if (!slider.vars.animationLoop) slider.pause();
699        }
700
701        // SLIDE:
702        if (!fade) {
703          var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,
704              margin, slideString, calcNext;
705
706          // INFINITE LOOP / REVERSE:
707          if (carousel) {
708            //margin = (slider.vars.itemWidth > slider.w) ? slider.vars.itemMargin * 2 : slider.vars.itemMargin;
709            margin = slider.vars.itemMargin;
710            calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
711            slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
712          } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== "next") {
713            slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;
714          } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== "prev") {
715            slideString = (reverse) ? 0 : (slider.count + 1) * dimension;
716          } else {
717            slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;
718          }
719          slider.setProps(slideString, "", slider.vars.animationSpeed);
720          if (slider.transitions) {
721            if (!slider.vars.animationLoop || !slider.atEnd) {
722              slider.animating = false;
723              slider.currentSlide = slider.animatingTo;
724            }
725            slider.container.unbind("webkitTransitionEnd transitionend");
726            slider.container.bind("webkitTransitionEnd transitionend", function() {
727              slider.wrapup(dimension);
728            });
729          } else {
730            slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){
731              slider.wrapup(dimension);
732            });
733          }
734        } else { // FADE:
735          if (!touch) {
736            //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing);
737            //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
738
739            slider.slides.eq(slider.currentSlide).css({"zIndex": 1}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing);
740            slider.slides.eq(target).css({"zIndex": 2}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
741
742          } else {
743            slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
744            slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
745            slider.wrapup(dimension);
746          }
747        }
748        // SMOOTH HEIGHT:
749        if (slider.vars.smoothHeight) methods.smoothHeight(slider.vars.animationSpeed);
750      }
751    };
752    slider.wrapup = function(dimension) {
753      // SLIDE:
754      if (!fade && !carousel) {
755        if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) {
756          slider.setProps(dimension, "jumpEnd");
757        } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) {
758          slider.setProps(dimension, "jumpStart");
759        }
760      }
761      slider.animating = false;
762      slider.currentSlide = slider.animatingTo;
763      // API: after() animation Callback
764      slider.vars.after(slider);
765    };
766
767    // SLIDESHOW:
768    slider.animateSlides = function() {
769      if (!slider.animating && focused ) slider.flexAnimate(slider.getTarget("next"));
770    };
771    // SLIDESHOW:
772    slider.pause = function() {
773      clearInterval(slider.animatedSlides);
774      slider.animatedSlides = null;
775      slider.playing = false;
776      // PAUSEPLAY:
777      if (slider.vars.pausePlay) methods.pausePlay.update("play");
778      // SYNC:
779      if (slider.syncExists) methods.sync("pause");
780    };
781    // SLIDESHOW:
782    slider.play = function() {
783      if (slider.playing) clearInterval(slider.animatedSlides);
784      slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
785      slider.started = slider.playing = true;
786      // PAUSEPLAY:
787      if (slider.vars.pausePlay) methods.pausePlay.update("pause");
788      // SYNC:
789      if (slider.syncExists) methods.sync("play");
790    };
791    // STOP:
792    slider.stop = function () {
793      slider.pause();
794      slider.stopped = true;
795    };
796    slider.canAdvance = function(target, fromNav) {
797      // ASNAV:
798      var last = (asNav) ? slider.pagingCount - 1 : slider.last;
799      return (fromNav) ? true :
800             (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true :
801             (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false :
802             (target === slider.currentSlide && !asNav) ? false :
803             (slider.vars.animationLoop) ? true :
804             (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false :
805             (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false :
806             true;
807    };
808    slider.getTarget = function(dir) {
809      slider.direction = dir;
810      if (dir === "next") {
811        return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;
812      } else {
813        return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;
814      }
815    };
816
817    // SLIDE:
818    slider.setProps = function(pos, special, dur) {
819      var target = (function() {
820        var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo,
821            posCalc = (function() {
822              if (carousel) {
823                return (special === "setTouch") ? pos :
824                       (reverse && slider.animatingTo === slider.last) ? 0 :
825                       (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
826                       (slider.animatingTo === slider.last) ? slider.limit : posCheck;
827              } else {
828                switch (special) {
829                  case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;
830                  case "setTouch": return (reverse) ? pos : pos;
831                  case "jumpEnd": return (reverse) ? pos : slider.count * pos;
832                  case "jumpStart": return (reverse) ? slider.count * pos : pos;
833                  default: return pos;
834                }
835              }
836            }());
837
838            return (posCalc * -1) + "px";
839          }());
840
841      if (slider.transitions) {
842        target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
843        dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
844        slider.container.css("-" + slider.pfx + "-transition-duration", dur);
845         slider.container.css("transition-duration", dur);
846      }
847
848      slider.args[slider.prop] = target;
849      if (slider.transitions || dur === undefined) slider.container.css(slider.args);
850
851      slider.container.css('transform',target);
852    };
853
854    slider.setup = function(type) {
855      // SLIDE:
856      if (!fade) {
857        var sliderOffset, arr;
858
859        if (type === "init") {
860          slider.viewport = $('<div class="' + namespace + 'viewport"></div>').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container);
861          // INFINITE LOOP:
862          slider.cloneCount = 0;
863          slider.cloneOffset = 0;
864          // REVERSE:
865          if (reverse) {
866            arr = $.makeArray(slider.slides).reverse();
867            slider.slides = $(arr);
868            slider.container.empty().append(slider.slides);
869          }
870        }
871        // INFINITE LOOP && !CAROUSEL:
872        if (slider.vars.animationLoop && !carousel) {
873          slider.cloneCount = 2;
874          slider.cloneOffset = 1;
875          // clear out old clones
876          if (type !== "init") slider.container.find('.clone').remove();
877          slider.container.append(slider.slides.first().clone().addClass('clone').attr('aria-hidden', 'true')).prepend(slider.slides.last().clone().addClass('clone').attr('aria-hidden', 'true'));
878		      methods.uniqueID( slider.slides.first().clone().addClass('clone') ).appendTo( slider.container );
879		      methods.uniqueID( slider.slides.last().clone().addClass('clone') ).prependTo( slider.container );
880        }
881        slider.newSlides = $(slider.vars.selector, slider);
882
883        sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;
884        // VERTICAL:
885        if (vertical && !carousel) {
886          slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
887          setTimeout(function(){
888            slider.newSlides.css({"display": "block"});
889            slider.doMath();
890            slider.viewport.height(slider.h);
891            slider.setProps(sliderOffset * slider.h, "init");
892          }, (type === "init") ? 100 : 0);
893        } else {
894          slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
895          slider.setProps(sliderOffset * slider.computedW, "init");
896          setTimeout(function(){
897            slider.doMath();
898            slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
899            // SMOOTH HEIGHT:
900            if (slider.vars.smoothHeight) methods.smoothHeight();
901          }, (type === "init") ? 100 : 0);
902        }
903      } else { // FADE:
904        slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
905        if (type === "init") {
906          if (!touch) {
907            //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);
908            slider.slides.css({ "opacity": 0, "display": "block", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing);
909          } else {
910            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});
911          }
912        }
913        // SMOOTH HEIGHT:
914        if (slider.vars.smoothHeight) methods.smoothHeight();
915      }
916      // !CAROUSEL:
917      // CANDIDATE: active slide
918      if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide");
919
920      //FlexSlider: init() Callback
921      slider.vars.init(slider);
922    };
923
924    slider.doMath = function() {
925      var slide = slider.slides.first(),
926          slideMargin = slider.vars.itemMargin,
927          minItems = slider.vars.minItems,
928          maxItems = slider.vars.maxItems;
929
930      slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width();
931      slider.h = slide.height();
932      slider.boxPadding = slide.outerWidth() - slide.width();
933
934      // CAROUSEL:
935      if (carousel) {
936        slider.itemT = slider.vars.itemWidth + slideMargin;
937        slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
938        slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;
939        slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :
940                       (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems :
941                       (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth;
942
943        slider.visible = Math.floor(slider.w/(slider.itemW));
944        slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible;
vendor: 5,363 bytes, lines 945-1068
945        slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);
946        slider.last =  slider.pagingCount - 1;
947        slider.limit = (slider.pagingCount === 1) ? 0 :
948                       (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;
949      } else {
950        slider.itemW = slider.w;
951        slider.pagingCount = slider.count;
952        slider.last = slider.count - 1;
953      }
954      slider.computedW = slider.itemW - slider.boxPadding;
955    };
956
957    slider.update = function(pos, action) {
958      slider.doMath();
959
960      // update currentSlide and slider.animatingTo if necessary
961      if (!carousel) {
962        if (pos < slider.currentSlide) {
963          slider.currentSlide += 1;
964        } else if (pos <= slider.currentSlide && pos !== 0) {
965          slider.currentSlide -= 1;
966        }
967        slider.animatingTo = slider.currentSlide;
968      }
969
970      // update controlNav
971      if (slider.vars.controlNav && !slider.manualControls) {
972        if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) {
973          methods.controlNav.update("add");
974        } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) {
975          if (carousel && slider.currentSlide > slider.last) {
976            slider.currentSlide -= 1;
977            slider.animatingTo -= 1;
978          }
979          methods.controlNav.update("remove", slider.last);
980        }
981      }
982      // update directionNav
983      if (slider.vars.directionNav) methods.directionNav.update();
984
985    };
986
987    slider.addSlide = function(obj, pos) {
988      var $obj = $(obj);
989
990      slider.count += 1;
991      slider.last = slider.count - 1;
992
993      // append new slide
994      if (vertical && reverse) {
995        (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);
996      } else {
997        (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);
998      }
999
1000      // update currentSlide, animatingTo, controlNav, and directionNav
1001      slider.update(pos, "add");
1002
1003      // update slider.slides
1004      slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
1005      // re-setup the slider to accomdate new slide
1006      slider.setup();
1007
1008      //FlexSlider: added() Callback
1009      slider.vars.added(slider);
1010    };
1011    slider.removeSlide = function(obj) {
1012      var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;
1013
1014      // update count
1015      slider.count -= 1;
1016      slider.last = slider.count - 1;
1017
1018      // remove slide
1019      if (isNaN(obj)) {
1020        $(obj, slider.slides).remove();
1021      } else {
1022        (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();
1023      }
1024
1025      // update currentSlide, animatingTo, controlNav, and directionNav
1026      slider.doMath();
1027      slider.update(pos, "remove");
1028
1029      // update slider.slides
1030      slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
1031      // re-setup the slider to accomdate new slide
1032      slider.setup();
1033
1034      // FlexSlider: removed() Callback
1035      slider.vars.removed(slider);
1036    };
1037
1038    //FlexSlider: Initialize
1039    methods.init();
1040  };
1041
1042  // Ensure the slider isn't focussed if the window loses focus.
1043  $( window ).blur( function ( e ) {
1044    focused = false;
1045  }).focus( function ( e ) {
1046    focused = true;
1047  });
1048
1049  //FlexSlider: Default Settings
1050  $.flexslider.defaults = {
1051    namespace: "flex-",             //{NEW} String: Prefix string attached to the class of every element generated by the plugin
1052    selector: ".slides > li",       //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril
1053    animation: "fade",              //String: Select your animation type, "fade" or "slide"
1054    easing: "swing",                //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!
1055    direction: "horizontal",        //String: Select the sliding direction, "horizontal" or "vertical"
1056    reverse: false,                 //{NEW} Boolean: Reverse the animation direction
1057    animationLoop: true,            //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
1058    smoothHeight: false,            //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
1059    startAt: 0,                     //Integer: The slide that the slider should start on. Array notation (0 = first slide)
1060    slideshow: true,                //Boolean: Animate slider automatically
1061    slideshowSpeed: 7000,           //Integer: Set the speed of the slideshow cycling, in milliseconds
1062    animationSpeed: 600,            //Integer: Set the speed of animations, in milliseconds
1063    initDelay: 0,                   //{NEW} Integer: Set an initialization delay, in milliseconds
1064    randomize: false,               //Boolean: Randomize slide order
1065    thumbCaptions: false,           //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.
1066
1067    // Usability features
1068    pauseOnAction: true,            //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
1069    pauseOnHover: false,            //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
1070    pauseInvisible: true,   		//{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.
1071    useCSS: true,                   //{NEW} Boolean: Slider will use CSS3 transitions if available
1072    touch: true,                    //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
1073    video: false,                   //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
1074
1075    // Primary Controls
1076    controlNav: true,               //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
1077    directionNav: true,             //Boolean: Create navigation for previous/next navigation? (true/false)
1078    prevText: "Previous",           //String: Set the text for the "previous" directionNav item
1079    nextText: "Next",               //String: Set the text for the "next" directionNav item
1080
1081    // Secondary Navigation
1082    keyboard: true,                 //Boolean: Allow slider navigating via keyboard left/right keys
1083    multipleKeyboard: false,        //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.
1084    mousewheel: false,              //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel
1085    pausePlay: false,               //Boolean: Create pause/play dynamic element
1086    pauseText: "Pause",             //String: Set the text for the "pause" pausePlay item
1087    playText: "Play",               //String: Set the text for the "play" pausePlay item
1088
1089    // Special properties
1090    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.
1091    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.
1092    sync: "",                       //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
1093    asNavFor: "",                   //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
1094
1095    // Carousel Options
1096    itemWidth: 0,                   //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.
1097    itemMargin: 0,                  //{NEW} Integer: Margin between carousel items.
1098    minItems: 1,                    //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.
1099    maxItems: 0,                    //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.
1100    move: 0,                        //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.
1101    allowOneSlide: true,           //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide
1102
1103    // Callback API
1104    start: function(){},            //Callback: function(slider) - Fires when the slider loads the first slide
1105    before: function(){},           //Callback: function(slider) - Fires asynchronously with each slider animation
1106    after: function(){},            //Callback: function(slider) - Fires after each slider animation completes
1107    end: function(){},              //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
1108    added: function(){},            //{NEW} Callback: function(slider) - Fires after a slide is added
1109    removed: function(){},           //{NEW} Callback: function(slider) - Fires after a slide is removed
1110    init: function() {}             //{NEW}
1110 Callback: function(slider) - Fires after the slider is initially setup
1111  };
1112
1113  //FlexSlider: Plugin Function
1114  $.fn.flexslider = function(options) {
1115    if (options === undefined) options = {};
1116
1117    if (typeof options === "object") {
1118      return this.each(function() {
1119        var $this = $(this),
1120            selector = (options.selector) ? options.selector : ".slides > li",
1121            $slides = $this.find(selector);
1122
1123      if ( ( $slides.length === 1 && options.allowOneSlide === true ) || $slides.length === 0 ) {
1124          $slides.fadeIn(400);
1125          if (options.start) options.start($this);
1126        } else if ($this.data('flexslider') === undefined) {
1127          new $.flexslider(this, options);
1128        }
1129      });
1130    } else {
1131      // Helper strings to quickly perform functions on the slider
1132      var $slider = $(this).data('flexslider');
1133      switch (options) {
1134        case "play": $slider.play(); break;
1135        case "pause": $slider.pause(); break;
1136        case "stop": $slider.stop(); break;
1137        case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
1138        case "prev":
1139        case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
1140        default: if (typeof options === "number") $slider.flexAnimate(options, true);
1141      }
1142    }
1143  };
1144})(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.