PageSourceSearch

https://jperiod.com/js/flexslider.js

js jperiod.com collected 2026-10-02 10:46:01 UTC 41,825 bytes, 937 lines download raw bytes

1var _____WB$wombat$assign$function_____ = function(name) {return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name)) || self[name]; };
2if (!self.__WB_pmw) { self.__WB_pmw = function(obj) { this.__WB_source = obj; return this; } }
3{
4  let window = _____WB$wombat$assign$function_____("window");
5  let self = _____WB$wombat$assign$function_____("self");
6  let document = _____WB$wombat$assign$function_____("document");
7  let location = _____WB$wombat$assign$function_____("location");
8  let top = _____WB$wombat$assign$function_____("top");
9  let parent = _____WB$wombat$assign$function_____("parent");
10  let frames = _____WB$wombat$assign$function_____("frames");
11  let opener = _____WB$wombat$assign$function_____("opener");
12
13/*
14* jQuery FlexSlider v2.1
15* http://www.woothemes.com/flexslider/
16*
17* Copyright 2012 WooThemes
18* Free to use under the GPLv2 license.
19* http://www.gnu.org/licenses/gpl-2.0.html
20*
21* Contributing author: Tyler Smith (@mbmufffin)
22*/
23
24;(function ($) {
25
26  //FlexSlider: Object Instance
27  $.flexslider = function(el, options) {
28    var slider = $(el),
29        vars = $.extend({}, $.flexslider.defaults, options),
30        namespace = vars.namespace,
31        touch = ("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch,
32        eventType = (touch) ? "touchend" : "click",
33        vertical = vars.direction === "vertical",
34        reverse = vars.reverse,
35        carousel = (vars.itemWidth > 0),
36        fade = vars.animation === "fade",
37        asNav = vars.asNavFor !== "",
38        methods = {};
39    
40    // Store a reference to the slider object
41    $.data(el, "flexslider", slider);
42    
43    // Privat slider methods
44    methods = {
45      init: function() {
46        slider.animating = false;
47        slider.currentSlide = vars.startAt;
48        slider.animatingTo = slider.currentSlide;
49        slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
50        slider.containerSelector = vars.selector.substr(0,vars.selector.search(' '));
51        slider.slides = $(vars.selector, slider);
52        slider.container = $(slider.containerSelector, slider);
53        slider.count = slider.slides.length;
54        // SYNC:
55        slider.syncExists = $(vars.sync).length > 0;
56        // SLIDE:
57        if (vars.animation === "slide") vars.animation = "swing";
58        slider.prop = (vertical) ? "top" : "marginLeft";
59        slider.args = {};
60        // SLIDESHOW:
61        slider.manualPause = false;
62        // TOUCH/USECSS:
63        slider.transitions = !vars.video && !fade && 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 (vars.controlsContainer !== "") slider.controlsContainer = $(vars.controlsContainer).length > 0 && $(vars.controlsContainer);
77        // MANUAL:
78        if (vars.manualControls !== "") slider.manualControls = $(vars.manualControls).length > 0 && $(vars.manualControls);
79        
80        // RANDOMIZE:
81        if (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        // ASNAV:
89        if (asNav) methods.asNav.setup();
90        
91        // INIT
92        slider.setup("init");
93        
94        // CONTROLNAV:
95        if (vars.controlNav) methods.controlNav.setup();
96        
97        // DIRECTIONNAV:
98        if (vars.directionNav) methods.directionNav.setup();
99        
100        // KEYBOARD:
101        if (vars.keyboard && ($(slider.containerSelector).length === 1 || vars.multipleKeyboard)) {
102          $(document).bind('keyup', function(event) {
103            var keycode = event.keyCode;
104            if (!slider.animating && (keycode === 39 || keycode === 37)) {
105              var target = (keycode === 39) ? slider.getTarget('next') :
106                           (keycode === 37) ? slider.getTarget('prev') : false;
107              slider.flexAnimate(target, vars.pauseOnAction);
108            }
109          });
110        }
111        // MOUSEWHEEL:
112        if (vars.mousewheel) {
113          slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
114            event.preventDefault();
115            var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
116            slider.flexAnimate(target, vars.pauseOnAction);
117          });
118        }
119        
120        // PAUSEPLAY
121        if (vars.pausePlay) methods.pausePlay.setup();
122        
123        // SLIDSESHOW
124        if (vars.slideshow) {
125          if (vars.pauseOnHover) {
126            slider.hover(function() {
127              if (!slider.manualPlay && !slider.manualPause) slider.pause();
128            }, function() {
129              if (!slider.manualPause && !slider.manualPlay) slider.play();
130            });
131          }
132          // initialize animation
133          (vars.initDelay > 0) ? setTimeout(slider.play, vars.initDelay) : slider.play();
134        }
135        
136        // TOUCH
137        if (touch && vars.touch) methods.touch();
138        
139        // FADE&&SMOOTHHEIGHT || SLIDE:
140        if (!fade || (fade && vars.smoothHeight)) $(window).bind("resize focus", methods.resize);
141        
142        
143        // API: start() Callback
144        setTimeout(function(){
145          vars.start(slider);
146        }, 200);
147      },
148      asNav: {
149        setup: function() {
150          slider.asNav = true;
151          slider.animatingTo = Math.floor(slider.currentSlide/slider.move);
152          slider.currentItem = slider.currentSlide;
153          slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide");
154          slider.slides.click(function(e){
155            e.preventDefault();
156            var $slide = $(this),
157                target = $slide.index();
158            if (!$(vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {
159              slider.direction = (slider.currentItem < target) ? "next" : "prev";
160              slider.flexAnimate(target, vars.pauseOnAction, false, true, true);
161            }
162          });
163        }
164      },
165      controlNav: {
166        setup: function() {
167          if (!slider.manualControls) {
168            methods.controlNav.setupPaging();
169          } else { // MANUALCONTROLS:
170            methods.controlNav.setupManual();
171          }
172        },
173        setupPaging: function() {
174          var type = (vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging',
175              j = 1,
176              item;
177          
178          slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>');
179          
180          if (slider.pagingCount > 1) {
181            for (var i = 0; i < slider.pagingCount; i++) {
182              item = (vars.controlNav === "thumbnails") ? '<img src="' + slider.slides.eq(i).attr("data-thumb") + '"/>' : '<a>' + j + '</a>';
183              slider.controlNavScaffold.append('<li>' + item + '</li>');
184              j++;
185            }
186          }
187          
188          // CONTROLSCONTAINER:
189          (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);
190          methods.controlNav.set();
191          
192          methods.controlNav.active();
193        
194          slider.controlNavScaffold.delegate('a, img', eventType, function(event) {
195            event.preventDefault();
196            var $this = $(this),
197                target = slider.controlNav.index($this);
198
199            if (!$this.hasClass(namespace + 'active')) {
200              slider.direction = (target > slider.currentSlide) ? "next" : "prev";
201              slider.flexAnimate(target, vars.pauseOnAction);
202            }
203          });
204          // Prevent iOS click event bug
205          if (touch) {
206            slider.controlNavScaffold.delegate('a', "click touchstart", function(event) {
207              event.preventDefault();
208            });
209          }
210        },
211        setupManual: function() {
212          slider.controlNav = slider.manualControls;
213          methods.controlNav.active();
214          
215          slider.controlNav.live(eventType, function(event) {
216            event.preventDefault();
217            var $this = $(this),
218                target = slider.controlNav.index($this);
219                
220            if (!$this.hasClass(namespace + 'active')) {
221              (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
222              slider.flexAnimate(target, vars.pauseOnAction);
223            }
224          });
225          // Prevent iOS click event bug
226          if (touch) {
227            slider.controlNav.live("click touchstart", function(event) {
228              event.preventDefault();
229            });
230          }
231        },
232        set: function() {
233          var selector = (vars.controlNav === "thumbnails") ? 'img' : 'a';
234          slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);
235        },
236        active: function() {
237          slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active");
238        },
239        update: function(action, pos) {
240          if (slider.pagingCount > 1 && action === "add") {
241            slider.controlNavScaffold.append($('<li><a>' + slider.count + '</a></li>'));
242          } else if (slider.pagingCount === 1) {
243            slider.controlNavScaffold.find('li').remove();
244          } else {
245            slider.controlNav.eq(pos).closest('li').remove();
246          }
247          methods.controlNav.set();
248          (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();
249        }
250      },
251      directionNav: {
252        setup: function() {
253          var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li><a class="' + namespace + 'prev" href="#">
253' + vars.prevText + '</a></li><li><a class="' + namespace + 'next" href="#">' + vars.nextText + '</a></li></ul>');
254        
255          // CONTROLSCONTAINER:
256          if (slider.controlsContainer) {
257            $(slider.controlsContainer).append(directionNavScaffold);
258            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
259          } else {
260            slider.append(directionNavScaffold);
261            slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);
262          }
263        
264          methods.directionNav.update();
265        
266          slider.directionNav.bind(eventType, function(event) {
267            event.preventDefault();
268            var target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');
269            slider.flexAnimate(target, vars.pauseOnAction);
270          });
271          // Prevent iOS click event bug
272          if (touch) {
273            slider.directionNav.bind("click touchstart", function(event) {
274              event.preventDefault();
275            });
276          }
277        },
278        update: function() {
279          var disabledClass = namespace + 'disabled';
280          if (slider.pagingCount === 1) {
281            slider.directionNav.addClass(disabledClass);
282          } else if (!vars.animationLoop) {
283            if (slider.animatingTo === 0) {
284              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass);
285            } else if (slider.animatingTo === slider.last) {
286              slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass);
287            } else {
288              slider.directionNav.removeClass(disabledClass);
289            }
290          } else {
291            slider.directionNav.removeClass(disabledClass);
292          }
293        }
294      },
295      pausePlay: {
296        setup: function() {
297          var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a></a></div>');
298        
299          // CONTROLSCONTAINER:
300          if (slider.controlsContainer) {
301            slider.controlsContainer.append(pausePlayScaffold);
302            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);
303          } else {
304            slider.append(pausePlayScaffold);
305            slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);
306          }
307
308          methods.pausePlay.update((vars.slideshow) ? namespace + 'pause' : namespace + 'play');
309
310          slider.pausePlay.bind(eventType, function(event) {
311            event.preventDefault();
312            if ($(this).hasClass(namespace + 'pause')) {
313              slider.manualPause = true;
314              slider.manualPlay = false;
315              slider.pause();
316            } else {
317              slider.manualPause = false;
318              slider.manualPlay = true;
319              slider.play();
320            }
321          });
322          // Prevent iOS click event bug
323          if (touch) {
324            slider.pausePlay.bind("click touchstart", function(event) {
325              event.preventDefault();
326            });
327          }
328        },
329        update: function(state) {
330          (state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').text(vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').text(vars.pauseText);
331        }
332      },
333      touch: function() {
334        var startX,
335          startY,
336          offset,
337          cwidth,
338          dx,
339          startT,
340          scrolling = false;
341              
342        el.addEventListener('touchstart', onTouchStart, false);
343        function onTouchStart(e) {
344          if (slider.animating) {
345            e.preventDefault();
346          } else if (e.touches.length === 1) {
347            slider.pause();
348            // CAROUSEL:
349            cwidth = (vertical) ? slider.h : slider. w;
350            startT = Number(new Date());
351            // CAROUSEL:
352            offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
353                     (carousel && reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * 
353slider.move) * slider.animatingTo) :
354                     (carousel && slider.currentSlide === slider.last) ? slider.limit :
355                     (carousel) ? ((slider.itemW + vars.itemMargin) * slider.move) * slider.currentSlide :
356                     (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
357            startX = (vertical) ? e.touches[0].pageY : e.touches[0].pageX;
358            startY = (vertical) ? e.touches[0].pageX : e.touches[0].pageY;
359
360            el.addEventListener('touchmove', onTouchMove, false);
361            el.addEventListener('touchend', onTouchEnd, false);
362          }
363        }
364
365        function onTouchMove(e) {
366          dx = (vertical) ? startX - e.touches[0].pageY : startX - e.touches[0].pageX;
367          scrolling = (vertical) ? (Math.abs(dx) < Math.abs(e.touches[0].pageX - startY)) : (Math.abs(dx) < Math.abs(e.touches[0].pageY - startY));
368          
369          if (!scrolling || Number(new Date()) - startT > 500) {
370            e.preventDefault();
371            if (!fade && slider.transitions) {
372              if (!vars.animationLoop) {
373                dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
374              }
375              slider.setProps(offset + dx, "setTouch");
376            }
377          }
378        }
379        
380        function onTouchEnd(e) {
381          // finish the touch by undoing the touch session
382          el.removeEventListener('touchmove', onTouchMove, false);
383          
384          if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
385            var updateDx = (reverse) ? -dx : dx,
386                target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
387            
388            if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
389              slider.flexAnimate(target, vars.pauseOnAction);
390            } else {
391              if (!fade) slider.flexAnimate(slider.currentSlide, vars.pauseOnAction, true);
392            }
393          }
394          el.removeEventListener('touchend', onTouchEnd, false);
395          startX = null;
396          startY = null;
397          dx = null;
398          offset = null;
399        }
400      },
401      resize: function() {
402        if (!slider.animating && slider.is(':visible')) {
403          if (!carousel) slider.doMath();
404          
405          if (fade) {
406            // SMOOTH HEIGHT:
407            methods.smoothHeight();
408          } else if (carousel) { //CAROUSEL:
409            slider.slides.width(slider.computedW);
410            slider.update(slider.pagingCount);
411            slider.setProps();
412          }
413          else if (vertical) { //VERTICAL:
414            slider.viewport.height(slider.h);
415            slider.setProps(slider.h, "setTotal");
416          } else {
417            // SMOOTH HEIGHT:
418            if (vars.smoothHeight) methods.smoothHeight();
419            slider.newSlides.width(slider.computedW);
420            slider.setProps(slider.computedW, "setTotal");
421          }
422        }
423      },
424      smoothHeight: function(dur) {
425        if (!vertical || fade) {
426          var $obj = (fade) ? slider : slider.viewport;
427          (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());
428        }
429      },
430      sync: function(action) {
431        var $obj = $(vars.sync).data("flexslider"),
432            target = slider.animatingTo;
433        
434        switch (action) {
435          case "animate": $obj.flexAnimate(target, vars.pauseOnAction, false, true); break;
436          case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;
437          case "pause": $obj.pause(); break;
438        }
439      }
440    }
441    
442    // public methods
443    slider.flexAnimate = function(target, pause, override, withSync, fromNav) {
444      if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev";
445      
446      if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) {
447        if (asNav && withSync) {
448          var master = $(vars.asNavFor).data('flexslider');
449          slider.atEnd = target === 0 || target === slider.count - 1;
450          master.flexAnimate(target, true, false, true, fromNav);
451          slider.direction = (slider.currentItem < target) ? "next" : "prev";
452          master.direction = slider.direction;
453          
454          if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {
455            slider.currentItem = target;
456            slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
457            target = Math.floor(target/slider.visible);
458          } else {
459            slider.currentItem = target;
460            slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
461            return false;
462          }
463        }
464        
465        slider.animating = true;
466        slider.animatingTo = target;
467        // API: before() animation Callback
468        vars.before(slider);
469        
470        // SLIDESHOW:
471        if (pause) slider.pause();
472        
473        // SYNC:
474        if (slider.syncExists && !fromNav) methods.sync("animate");
475        
476        // CONTROLNAV
477        if (vars.controlNav) methods.controlNav.active();
478        
479        // !CAROUSEL:
480        // CANDIDATE: slide active class (for add/remove slide)
481        if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide');
482        
483        // INFINITE LOOP:
484        // CANDIDATE: atEnd
485        slider.atEnd = target === 0 || target === slider.last;
486        
487        // DIRECTIONNAV:
488        if (vars.directionNav) methods.directionNav.update();
489        
490        if (target === slider.last) {
491          // API: end() of cycle Callback
492          vars.end(slider);
493          // SLIDESHOW && !INFINITE LOOP:
494          if (!vars.animationLoop) slider.pause();
495        }
496        
497        // SLIDE:
498        if (!fade) {
499          var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,
500              margin, slideString, calcNext;
501          
502          // INFINITE LOOP / REVERSE:
503          if (carousel) {
504            margin = (vars.itemWidth > slider.w) ? vars.itemMargin * 2 : vars.itemMargin;
505            calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
506            slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
507          } else if (slider.currentSlide === 0 && target === slider.count - 1 && vars.animationLoop && slider.direction !== "next") {
508            slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;
509          } else if (slider.currentSlide === slider.last && target === 0 && vars.animationLoop && slider.direction !== "prev") {
510            slideString = (reverse) ? 0 : (slider.count + 1) * dimension;
511          } else {
512            slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;
513          }
514          slider.setProps(slideString, "", vars.animationSpeed);
515          if (slider.transitions) {
516            if (!vars.animationLoop || !slider.atEnd) {
517              slider.animating = false;
518              slider.currentSlide = slider.animatingTo;
519            }
520            slider.container.unbind("webkitTransitionEnd transitionend");
521            slider.container.bind("webkitTransitionEnd transitionend", function() {
522              slider.wrapup(dimension);
523            });
524          } else {
525            slider.container.animate(slider.args, vars.animationSpeed, vars.easing, function(){
526              slider.wrapup(dimension);
527            });
528          }
529        } else { // FADE:
530          if (!touch) {
531            slider.slides.eq(slider.currentSlide).fadeOut(vars.animationSpeed, vars.easing);
532            slider.slides.eq(target).fadeIn(vars.animationSpeed, vars.easing, slider.wrapup);
533          } else {
534            slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
535            slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
536            
537            slider.slides.unbind("webkitTransitionEnd transitionend");
538            slider.slides.eq(slider.currentSlide).bind("webkitTransitionEnd transitionend", function() {
539              // API: after() animation Callback
540              vars.after(slider);
541            });
542            
543            slider.animating = false;
544            slider.currentSlide = slider.animatingTo;
545          }
546        }
547        // SMOOTH HEIGHT:
548        if (vars.smoothHeight) methods.smoothHeight(vars.animationSpeed);
549      }
550    }
551    slider.wrapup = function(dimension) {
552      // SLIDE:
553      if (!fade && !carousel) {
554        if (slider.currentSlide === 0 && slider.animatingTo === slider.last && vars.animationLoop) {
555          slider.setProps(dimension, "jumpEnd");
556        } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && vars.animationLoop) {
557          slider.setProps(dimension, "jumpStart");
558        }
559      }
560      slider.animating = false;
561      slider.currentSlide = slider.animatingTo;
562      // API: after() animation Callback
563      vars.after(slider);
564    }
565    
566    // SLIDESHOW:
567    slider.animateSlides = function() {
568      if (!slider.animating) slider.flexAnimate(slider.getTarget("next"));
569    }
570    // SLIDESHOW:
571    slider.pause = function() {
572      clearInterval(slider.animatedSlides);
573      slider.playing = false;
574      // PAUSEPLAY:
575      if (vars.pausePlay) methods.pausePlay.update("play");
576      // SYNC:
577      if (slider.syncExists) methods.sync("pause");
578    }
579    // SLIDESHOW:
580    slider.play = function() {
581      slider.animatedSlides = setInterval(slider.animateSlides, vars.slideshowSpeed);
582      slider.playing = true;
583      // PAUSEPLAY:
584      if (vars.pausePlay) methods.pausePlay.update("pause");
585      // SYNC:
586      if (slider.syncExists) methods.sync("play");
587    }
588    slider.canAdvance = function(target, fromNav) {
589      // ASNAV:
590      var last = (asNav) ? slider.pagingCount - 1 : slider.last;
591      return (fromNav) ? true :
592             (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true :
593             (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false :
594             (target === slider.currentSlide && !asNav) ? false :
595             (vars.animationLoop) ? true :
596             (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false :
597             (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false :
598             true;
599    }
600    slider.getTarget = function(dir) {
601      slider.direction = dir;
602      if (dir === "next") {
603        return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;
604      } else {
605        return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;
606      }
607    }
608    
609    // SLIDE:
610    slider.setProps = function(pos, special, dur) {
611      var target = (function() {
612        var posCheck = (pos) ? pos : ((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo,
613            posCalc = (function() {
614              if (carousel) {
615                return (special === "setTouch") ? pos :
616                       (reverse && slider.animatingTo === slider.last) ? 0 :
617                       (reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo) :
618                       (slider.animatingTo === slider.last) ? slider.limit : posCheck;
619              } else {
620                switch (special) {
621                  case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;
622                  case "setTouch": return (reverse) ? pos : pos;
623                  case "jumpEnd": return (reverse) ? pos : slider.count * pos;
624                  case "jumpStart": return (reverse) ? slider.count * pos : pos;
625                  default: return pos;
626                }
627              }
628            }());
629            return (posCalc * -1) + "px";
630          }());
631
632      if (slider.transitions) {
633        target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
634        dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
635        slider.container.css("-" + slider.pfx + "-transition-duration", dur);
636      }
637      
638      slider.args[slider.prop] = target;
639      if (slider.transitions || dur === undefined) slider.container.css(slider.args);
640    }
641    
642    slider.setup = function(type) {
643      // SLIDE:
644      if (!fade) {
645        var sliderOffset, arr;
646            
647        if (type === "init") {
648          slider.viewport = $('<div class="' + namespace + 'viewport"></div>').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container);
649          // INFINITE LOOP:
650          slider.cloneCount = 0;
651          slider.cloneOffset = 0;
652          // REVERSE:
653          if (reverse) {
654            arr = $.makeArray(slider.slides).reverse();
655            slider.slides = $(arr);
656            slider.container.empty().append(slider.slides);
657          }
658        }
659        // INFINITE LOOP && !CAROUSEL:
660        if (vars.animationLoop && !carousel) {
661          slider.cloneCount = 2;
662          slider.cloneOffset = 1;
663          // clear out old clones
664          if (type !== "init") slider.container.find('.clone').remove();
665          slider.container.append(slider.slides.first().clone().addClass('clone')).prepend(slider.slides.last().clone().addClass('clone'));
666        }
667        slider.newSlides = $(vars.selector, slider);
668        
669        sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;
670        // VERTICAL:
671        if (vertical && !carousel) {
672          slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
673          setTimeout(function(){
674            slider.newSlides.css({"display": "block"});
675            slider.doMath();
676            slider.viewport.height(slider.h);
677            slider.setProps(sliderOffset * slider.h, "init");
678          }, (type === "init") ? 100 : 0);
679        } else {
680          slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
681          slider.setProps(sliderOffset * slider.computedW, "init");
682          setTimeout(function(){
683            slider.doMath();
684            slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
685            // SMOOTH HEIGHT:
686            if (vars.smoothHeight) methods.smoothHeight();
687          }, (type === "init") ? 100 : 0);
688        }
689      } else { // FADE:
690        slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
691        if (type === "init") {
692          if (!touch) {
693            slider.slides.eq(slider.currentSlide).fadeIn(vars.animationSpeed, vars.easing);
694          } else {
695            slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});
696          }
697        }
698        // SMOOTH HEIGHT:
699        if (vars.smoothHeight) methods.smoothHeight();
700      }
701      // !CAROUSEL:
702      // CANDIDATE: active slide
703      if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide");
704    }
705    
706    slider.doMath = function() {
707      var slide = slider.slides.first(),
708          slideMargin = vars.itemMargin,
709          minItems = vars.minItems,
710          maxItems = vars.maxItems;
711      
712      slider.w = slider.width();
713      slider.h = slide.height();
714      slider.boxPadding = slide.outerWidth() - slide.width();
715
716      // CAROUSEL:
717      if (carousel) {
718        slider.itemT = vars.itemWidth + slideMargin;
719        slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
720        slider.maxW = (maxItems) ? maxItems * slider.itemT : slider.w;
721        slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * minItems))/minItems :
722                       (slider.maxW < slider.w) ? (slider.w - (slideMargin * maxItems))/maxItems :
723                       (vars.itemWidth > slider.w) ? slider.w : vars.itemWidth;
724        slider.visible = Math.floor(slider.w/(slider.itemW + slideMargin));
725        slider.move = (vars.move > 0 && vars.move < slider.visible ) ? vars.move : slider.visible;
726        slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);
727        slider.last = slider.pagingCount - 1;
728        slider.limit = (slider.pagingCount === 1) ? 0 :
729                       (vars.itemWidth > slider.w) ? ((slider.itemW + (slideMargin * 2)) * slider.count) - slider.w - slideMargin : ((slider.itemW + slideMargin) * 
vendor: 4,550 bytes, lines 729-841
729slider.count) - slider.w - slideMargin;
730      } else {
731        slider.itemW = slider.w;
732        slider.pagingCount = slider.count;
733        slider.last = slider.count - 1;
734      }
735      slider.computedW = slider.itemW - slider.boxPadding;
736    }
737    
738    slider.update = function(pos, action) {
739      slider.doMath();
740      
741      // update currentSlide and slider.animatingTo if necessary
742      if (!carousel) {
743        if (pos < slider.currentSlide) {
744          slider.currentSlide += 1;
745        } else if (pos <= slider.currentSlide && pos !== 0) {
746          slider.currentSlide -= 1;
747        }
748        slider.animatingTo = slider.currentSlide;
749      }
750      
751      // update controlNav
752      if (vars.controlNav && !slider.manualControls) {
753        if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) {
754          methods.controlNav.update("add");
755        } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) {
756          if (carousel && slider.currentSlide > slider.last) {
757            slider.currentSlide -= 1;
758            slider.animatingTo -= 1;
759          }
760          methods.controlNav.update("remove", slider.last);
761        }
762      }
763      // update directionNav
764      if (vars.directionNav) methods.directionNav.update();
765      
766    }
767    
768    slider.addSlide = function(obj, pos) {
769      var $obj = $(obj);
770      
771      slider.count += 1;
772      slider.last = slider.count - 1;
773      
774      // append new slide
775      if (vertical && reverse) {
776        (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);
777      } else {
778        (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);
779      }
780      
781      // update currentSlide, animatingTo, controlNav, and directionNav
782      slider.update(pos, "add");
783      
784      // update slider.slides
785      slider.slides = $(vars.selector + ':not(.clone)', slider);
786      // re-setup the slider to accomdate new slide
787      slider.setup();
788      
789      //FlexSlider: added() Callback
790      vars.added(slider);
791    }
792    slider.removeSlide = function(obj) {
793      var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;
794      
795      // update count
796      slider.count -= 1;
797      slider.last = slider.count - 1;
798      
799      // remove slide
800      if (isNaN(obj)) {
801        $(obj, slider.slides).remove();
802      } else {
803        (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();
804      }
805      
806      // update currentSlide, animatingTo, controlNav, and directionNav
807      slider.doMath();
808      slider.update(pos, "remove");
809      
810      // update slider.slides
811      slider.slides = $(vars.selector + ':not(.clone)', slider);
812      // re-setup the slider to accomdate new slide
813      slider.setup();
814      
815      // FlexSlider: removed() Callback
816      vars.removed(slider);
817    }
818    
819    //FlexSlider: Initialize
820    methods.init();
821  }
822  
823  //FlexSlider: Default Settings
824  $.flexslider.defaults = {
825    namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin
826    selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril
827    animation: "fade", //String: Select your animation type, "fade" or "slide"
828    easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!
829    direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical"
830    reverse: false, //{NEW} Boolean: Reverse the animation direction
831    animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
832    smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
833    startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide)
834    slideshow: true, //Boolean: Animate slider automatically
835    slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds
836    animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
837    initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
838    randomize: false, //Boolean: Randomize slide order
839    
840    // Usability features
841    pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
842    pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
843    useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available
844    touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
845    video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
846    
847    // Primary Controls
848    controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
849    directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
850    prevText: "Previous", //String: Set the text for the "previous" directionNav item
851    nextText: "Next", //String: Set the text for the "next" directionNav item
852    
853    // Secondary Navigation
854    keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys
855    multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.
856    mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel
857    pausePlay: false, //Boolean: Create pause/play dynamic element
858    pauseText: "Pause", //String: Set the text for the "pause" pausePlay item
859    playText: "Play", //String: Set the text for the "play" pausePlay item
860    
861    // Special properties
862    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.
863    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.
864    sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
865    asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
866    
867    // Carousel Options
868    itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.
869    itemMargin: 0, //{NEW} Integer: Margin between carousel items.
870    minItems: 0, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.
871    maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.
872    move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.
873                                    
874    // Callback API
875    start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide
876    before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation
877    after: function(){}, //Callback: function(slider) - Fires after each slider animation completes
878    end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
879    added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added
880    removed: function(){} //{NEW} Callback: function(slider) - Fires after a slide is removed
881  }
882
883
884  //FlexSlider: Plugin Function
885  $.fn.flexslider = function(options) {
886    if (options === undefined) options = {};
887    
888    if (typeof options === "object") {
889      return this.each(function() {
890        var $this = $(this),
891            selector = (options.selector) ? options.selector : ".slides > li",
892            $slides = $this.find(selector);
893
894        if ($slides.length === 1) {
895          $slides.fadeIn(400);
896          if (options.start) options.start($this);
897        } else if ($this.data('flexslider') == undefined) {
898          new $.flexslider(this, options);
899        }
900      });
901    } else {
902      // Helper strings to quickly perform functions on the slider
903      var $slider = $(this).data('flexslider');
904      switch (options) {
905        case "play": $slider.play(); break;
906        case "pause": $slider.pause(); break;
907        case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
908        case "prev":
909        case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
910        default: if (typeof options === "number") $slider.flexAnimate(options, true);
911      }
912    }
913  }
914
915})(jQuery);
916
917}
918/*
919     FILE ARCHIVED ON 16:50:41 Jun 08, 2023 AND RETRIEVED FROM THE
920     INTERNET ARCHIVE ON 09:43:45 Oct 24, 2023.
921     JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
922
923     ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
924     SECTION 108(a)(3)).
925*/
926/*
927playback timings (ms):
928  captures_list: 2207.606
929  exclusion.robots: 0.071
930  exclusion.robots.policy: 0.061
931  cdx.remote: 0.057
932  esindex: 0.01
933  LoadShardBlock: 2167.012 (3)
934  PetaboxLoader3.datanode: 193.574 (5)
935  PetaboxLoader3.resolve: 2262.524 (4)
936  load_resource: 368.912 (2)
937*/

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.