smoothslider 1.1.4 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1599 @@
1
+ var Froogaloop=function(){function e(c){return new e.fn.init(c)}function g(c,b,a){if(!a.contentWindow.postMessage)return!1;var d=a.getAttribute("src").split("?")[0],c=JSON.stringify({method:c,value:b});a.contentWindow.postMessage(c,d)}function i(c){var b,a;try{b=JSON.parse(c.data),a=b.event||b.method}catch(l){}"ready"==a&&!h&&(h=!0);if(c.origin!=j)return!1;var c=b.value,e=b.data,f=""===f?null:b.player_id;b=f?d[f][a]:d[a];a=[];if(!b)return!1;void 0!==c&&a.push(c);e&&a.push(e);f&&a.push(f);return 0<
2
+ a.length?b.apply(null,a):b.call()}function k(c,b,a){a?(d[a]||(d[a]={}),d[a][c]=b):d[c]=b}var d={},h=!1,j="";e.fn=e.prototype={element:null,init:function(c){"string"===typeof c&&(c=document.getElementById(c));this.element=c;for(var c=this.element.getAttribute("src").split("/"),b="",a=0,d=c.length;a<d;a++){if(3>a)b+=c[a];else break;2>a&&(b+="/")}j=b;return this},api:function(c,b){if(!this.element||!c)return!1;var a=this.element,d=""!==a.id?a.id:null,e=!b||!b.constructor||!b.call||!b.apply?b:null,f=
3
+ b&&b.constructor&&b.call&&b.apply?b:null;f&&k(c,f,d);g(c,e,a);return this},addEvent:function(c,b){if(!this.element)return!1;var a=this.element,d=""!==a.id?a.id:null;k(c,b,d);"ready"!=c?g("addEventListener",c,a):"ready"==c&&h&&b.call(null,d);return this},removeEvent:function(c){if(!this.element)return!1;var b=this.element,a;a:{if((a=""!==b.id?b.id:null)&&d[a]){if(!d[a][c]){a=!1;break a}d[a][c]=null}else{if(!d[c]){a=!1;break a}d[c]=null}a=!0}"ready"!=c&&a&&g("removeEventListener",c,b)}};e.fn.init.prototype=
4
+ e.fn;window.addEventListener?window.addEventListener("message",i,!1):window.attachEvent("onmessage",i,!1);return window.Froogaloop=window.$f=e}();
5
+
6
+
7
+ /*
8
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
9
+ *
10
+ * Uses the built in easing capabilities added In jQuery 1.1
11
+ * to offer multiple easing options
12
+ *
13
+ * TERMS OF USE - jQuery Easing
14
+ *
15
+ * Open source under the BSD License.
16
+ *
17
+ * Copyright © 2008 George McGinley Smith
18
+ * All rights reserved.
19
+ *
20
+ * Redistribution and use in source and binary forms, with or without modification,
21
+ * are permitted provided that the following conditions are met:
22
+ *
23
+ * Redistributions of source code must retain the above copyright notice, this list of
24
+ * conditions and the following disclaimer.
25
+ * Redistributions in binary form must reproduce the above copyright notice, this list
26
+ * of conditions and the following disclaimer in the documentation and/or other materials
27
+ * provided with the distribution.
28
+ *
29
+ * Neither the name of the author nor the names of contributors may be used to endorse
30
+ * or promote products derived from this software without specific prior written permission.
31
+ *
32
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
33
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
34
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
35
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
36
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
37
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
38
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
39
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
40
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
41
+ *
42
+ */
43
+
44
+ // t: current time, b: begInnIng value, c: change In value, d: duration
45
+ jQuery.easing['jswing'] = jQuery.easing['swing'];
46
+
47
+ jQuery.extend( jQuery.easing,
48
+ {
49
+ def: 'easeOutQuad',
50
+ swing: function (x, t, b, c, d) {
51
+ //alert(jQuery.easing.default);
52
+ return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
53
+ },
54
+ easeInQuad: function (x, t, b, c, d) {
55
+ return c*(t/=d)*t + b;
56
+ },
57
+ easeOutQuad: function (x, t, b, c, d) {
58
+ return -c *(t/=d)*(t-2) + b;
59
+ },
60
+ easeInOutQuad: function (x, t, b, c, d) {
61
+ if ((t/=d/2) < 1) return c/2*t*t + b;
62
+ return -c/2 * ((--t)*(t-2) - 1) + b;
63
+ },
64
+ easeInCubic: function (x, t, b, c, d) {
65
+ return c*(t/=d)*t*t + b;
66
+ },
67
+ easeOutCubic: function (x, t, b, c, d) {
68
+ return c*((t=t/d-1)*t*t + 1) + b;
69
+ },
70
+ easeInOutCubic: function (x, t, b, c, d) {
71
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
72
+ return c/2*((t-=2)*t*t + 2) + b;
73
+ },
74
+ easeInQuart: function (x, t, b, c, d) {
75
+ return c*(t/=d)*t*t*t + b;
76
+ },
77
+ easeOutQuart: function (x, t, b, c, d) {
78
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
79
+ },
80
+ easeInOutQuart: function (x, t, b, c, d) {
81
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
82
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
83
+ },
84
+ easeInQuint: function (x, t, b, c, d) {
85
+ return c*(t/=d)*t*t*t*t + b;
86
+ },
87
+ easeOutQuint: function (x, t, b, c, d) {
88
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
89
+ },
90
+ easeInOutQuint: function (x, t, b, c, d) {
91
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
92
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
93
+ },
94
+ easeInSine: function (x, t, b, c, d) {
95
+ return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
96
+ },
97
+ easeOutSine: function (x, t, b, c, d) {
98
+ return c * Math.sin(t/d * (Math.PI/2)) + b;
99
+ },
100
+ easeInOutSine: function (x, t, b, c, d) {
101
+ return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
102
+ },
103
+ easeInExpo: function (x, t, b, c, d) {
104
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
105
+ },
106
+ easeOutExpo: function (x, t, b, c, d) {
107
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
108
+ },
109
+ easeInOutExpo: function (x, t, b, c, d) {
110
+ if (t==0) return b;
111
+ if (t==d) return b+c;
112
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
113
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
114
+ },
115
+ easeInCirc: function (x, t, b, c, d) {
116
+ return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
117
+ },
118
+ easeOutCirc: function (x, t, b, c, d) {
119
+ return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
120
+ },
121
+ easeInOutCirc: function (x, t, b, c, d) {
122
+ if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
123
+ return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
124
+ },
125
+ easeInElastic: function (x, t, b, c, d) {
126
+ var s=1.70158;var p=0;var a=c;
127
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
128
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
129
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
130
+ return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
131
+ },
132
+ easeOutElastic: function (x, t, b, c, d) {
133
+ var s=1.70158;var p=0;var a=c;
134
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
135
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
136
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
137
+ return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
138
+ },
139
+ easeInOutElastic: function (x, t, b, c, d) {
140
+ var s=1.70158;var p=0;var a=c;
141
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
142
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
143
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
144
+ if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
145
+ return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
146
+ },
147
+ easeInBack: function (x, t, b, c, d, s) {
148
+ if (s == undefined) s = 1.70158;
149
+ return c*(t/=d)*t*((s+1)*t - s) + b;
150
+ },
151
+ easeOutBack: function (x, t, b, c, d, s) {
152
+ if (s == undefined) s = 1.70158;
153
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
154
+ },
155
+ easeInOutBack: function (x, t, b, c, d, s) {
156
+ if (s == undefined) s = 1.70158;
157
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
158
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
159
+ },
160
+ easeInBounce: function (x, t, b, c, d) {
161
+ return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
162
+ },
163
+ easeOutBounce: function (x, t, b, c, d) {
164
+ if ((t/=d) < (1/2.75)) {
165
+ return c*(7.5625*t*t) + b;
166
+ } else if (t < (2/2.75)) {
167
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
168
+ } else if (t < (2.5/2.75)) {
169
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
170
+ } else {
171
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
172
+ }
173
+ },
174
+ easeInOutBounce: function (x, t, b, c, d) {
175
+ if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
176
+ return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
177
+ }
178
+ });
179
+
180
+ /*
181
+ *
182
+ * TERMS OF USE - EASING EQUATIONS
183
+ *
184
+ * Open source under the BSD License.
185
+ *
186
+ * Copyright © 2001 Robert Penner
187
+ * All rights reserved.
188
+ *
189
+ * Redistribution and use in source and binary forms, with or without modification,
190
+ * are permitted provided that the following conditions are met:
191
+ *
192
+ * Redistributions of source code must retain the above copyright notice, this list of
193
+ * conditions and the following disclaimer.
194
+ * Redistributions in binary form must reproduce the above copyright notice, this list
195
+ * of conditions and the following disclaimer in the documentation and/or other materials
196
+ * provided with the distribution.
197
+ *
198
+ * Neither the name of the author nor the names of contributors may be used to endorse
199
+ * or promote products derived from this software without specific prior written permission.
200
+ *
201
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
202
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
203
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
204
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
205
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
206
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
207
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
208
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
209
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
210
+ *
211
+ */
212
+
213
+ /*global jQuery */
214
+ /*jshint browser:true */
215
+ /*!
216
+ * FitVids 1.1
217
+ *
218
+ * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
219
+ * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
220
+ * Released under the WTFPL license - http://sam.zoy.org/wtfpl/
221
+ *
222
+ */
223
+
224
+ (function( $ ){
225
+
226
+ "use strict";
227
+
228
+ $.fn.fitVids = function( options ) {
229
+ var settings = {
230
+ customSelector: null,
231
+ ignore: null,
232
+ };
233
+
234
+ if(!document.getElementById('fit-vids-style')) {
235
+ // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
236
+ var head = document.head || document.getElementsByTagName('head')[0];
237
+ var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
238
+ var div = document.createElement('div');
239
+ div.innerHTML = '<p>x</p><style id="fit-vids-style">' + css + '</style>';
240
+ head.appendChild(div.childNodes[1]);
241
+ }
242
+
243
+ if ( options ) {
244
+ $.extend( settings, options );
245
+ }
246
+
247
+ return this.each(function(){
248
+ var selectors = [
249
+ "iframe[src*='player.vimeo.com']",
250
+ "iframe[src*='youtube.com']",
251
+ "iframe[src*='youtube-nocookie.com']",
252
+ "iframe[src*='kickstarter.com'][src*='video.html']",
253
+ "iframe[src^='http://fast.wistia.com']",
254
+ "object",
255
+ "embed"
256
+ ];
257
+
258
+ if (settings.customSelector) {
259
+ selectors.push(settings.customSelector);
260
+ }
261
+
262
+ var ignoreList = '.fitvidsignore';
263
+
264
+ if(settings.ignore) {
265
+ ignoreList = ignoreList + ', ' + settings.ignore;
266
+ }
267
+
268
+ var $allVideos = $(this).find(selectors.join(','));
269
+ $allVideos = $allVideos.not("object object"); // SwfObj conflict patch
270
+ $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
271
+
272
+ $allVideos.each(function(){
273
+ var $this = $(this);
274
+ if($this.parents(ignoreList).length > 0) {
275
+ return; // Disable FitVids on this video.
276
+ }
277
+ if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
278
+ if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
279
+ {
280
+ $this.attr('height', 9);
281
+ $this.attr('width', 16);
282
+ }
283
+ var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
284
+ width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
285
+ aspectRatio = height / width;
286
+ if(!$this.attr('id')){
287
+ var videoID = 'fitvid' + Math.floor(Math.random()*999999);
288
+ $this.attr('id', videoID);
289
+ }
290
+ $this.wrap('<div class="fluid-width-video-wrapper"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%");
291
+ $this.removeAttr('height').removeAttr('width');
292
+ });
293
+ });
294
+ };
295
+ // Works with either jQuery or Zepto
296
+ })( window.jQuery || window.Zepto );
297
+
298
+
299
+ /*
300
+ * jQuery smoothslider v2.6.2
301
+ * Copyright 2012 WooThemes
302
+ * Contributing Author: Tyler Smith
303
+ */
304
+ ;
305
+ (function ($) {
306
+
307
+ var focused = true;
308
+
309
+ //smoothslider: Object Instance
310
+ $.smoothslider = function(el, options) {
311
+ var slider = $(el);
312
+
313
+ // making variables public
314
+ slider.vars = $.extend({}, $.smoothslider.defaults, options);
315
+
316
+ var namespace = slider.vars.namespace,
317
+ msGesture = window.navigator && window.navigator.msPointerEnabled && window.MSGesture,
318
+ touch = (( "ontouchstart" in window ) || msGesture || window.DocumentTouch && document instanceof DocumentTouch) && slider.vars.touch,
319
+ // depricating this idea, as devices are being released with both of these events
320
+ eventType = "click touchend MSPointerUp keyup",
321
+ watchedEvent = "",
322
+ watchedEventClearTimer,
323
+ vertical = slider.vars.direction === "vertical",
324
+ reverse = slider.vars.reverse,
325
+ carousel = (slider.vars.itemWidth > 0),
326
+ fade = slider.vars.animation === "fade",
327
+ asNav = slider.vars.asNavFor !== "",
328
+ methods = {};
329
+
330
+ // Store a reference to the slider object
331
+ $.data(el, "smoothslider", slider);
332
+
333
+ // Private slider methods
334
+ methods = {
335
+ init: function() {
336
+ slider.animating = false;
337
+ // Get current slide and make sure it is a number
338
+ slider.currentSlide = parseInt( ( slider.vars.startAt ? slider.vars.startAt : 0), 10 );
339
+ if ( isNaN( slider.currentSlide ) ) { slider.currentSlide = 0; }
340
+ slider.animatingTo = slider.currentSlide;
341
+ slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
342
+ slider.containerSelector = slider.vars.selector.substr(0,slider.vars.selector.search(' '));
343
+ slider.slides = $(slider.vars.selector, slider);
344
+ slider.container = $(slider.containerSelector, slider);
345
+ slider.count = slider.slides.length;
346
+ // SYNC:
347
+ slider.syncExists = $(slider.vars.sync).length > 0;
348
+ // SLIDE:
349
+ if (slider.vars.animation === "slide") { slider.vars.animation = "swing"; }
350
+ slider.prop = (vertical) ? "top" : "marginLeft";
351
+ slider.args = {};
352
+ // SLIDESHOW:
353
+ slider.manualPause = false;
354
+ slider.stopped = false;
355
+ //PAUSE WHEN INVISIBLE
356
+ slider.started = false;
357
+ slider.startTimeout = null;
358
+ // TOUCH/USECSS:
359
+ slider.transitions = !slider.vars.video && !fade && slider.vars.useCSS && (function() {
360
+ var obj = document.createElement('div'),
361
+ props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
362
+ for (var i in props) {
363
+ if ( obj.style[ props[i] ] !== undefined ) {
364
+ slider.pfx = props[i].replace('Perspective','').toLowerCase();
365
+ slider.prop = "-" + slider.pfx + "-transform";
366
+ return true;
367
+ }
368
+ }
369
+ return false;
370
+ }());
371
+ slider.ensureAnimationEnd = '';
372
+ // CONTROLSCONTAINER:
373
+ if (slider.vars.controlsContainer !== "") slider.controlsContainer = $(slider.vars.controlsContainer).length > 0 && $(slider.vars.controlsContainer);
374
+ // MANUAL:
375
+ if (slider.vars.manualControls !== "") slider.manualControls = $(slider.vars.manualControls).length > 0 && $(slider.vars.manualControls);
376
+
377
+ // CUSTOM DIRECTION NAV:
378
+ if (slider.vars.customDirectionNav !== "") slider.customDirectionNav = $(slider.vars.customDirectionNav).length === 2 && $(slider.vars.customDirectionNav);
379
+
380
+ // RANDOMIZE:
381
+ if (slider.vars.randomize) {
382
+ slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
383
+ slider.container.empty().append(slider.slides);
384
+ }
385
+
386
+ slider.doMath();
387
+
388
+ // INIT
389
+ slider.setup("init");
390
+
391
+ // CONTROLNAV:
392
+ if (slider.vars.controlNav) { methods.controlNav.setup(); }
393
+
394
+ // DIRECTIONNAV:
395
+ if (slider.vars.directionNav) { methods.directionNav.setup(); }
396
+
397
+ // KEYBOARD:
398
+ if (slider.vars.keyboard && ($(slider.containerSelector).length === 1 || slider.vars.multipleKeyboard)) {
399
+ $(document).bind('keyup', function(event) {
400
+ var keycode = event.keyCode;
401
+ if (!slider.animating && (keycode === 39 || keycode === 37)) {
402
+ var target = (keycode === 39) ? slider.getTarget('next') :
403
+ (keycode === 37) ? slider.getTarget('prev') : false;
404
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
405
+ }
406
+ });
407
+ }
408
+ // MOUSEWHEEL:
409
+ if (slider.vars.mousewheel) {
410
+ slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
411
+ event.preventDefault();
412
+ var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
413
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
414
+ });
415
+ }
416
+
417
+ // PAUSEPLAY
418
+ if (slider.vars.pausePlay) { methods.pausePlay.setup(); }
419
+
420
+ //PAUSE WHEN INVISIBLE
421
+ if (slider.vars.slideshow && slider.vars.pauseInvisible) { methods.pauseInvisible.init(); }
422
+
423
+ // SLIDSESHOW
424
+ if (slider.vars.slideshow) {
425
+ if (slider.vars.pauseOnHover) {
426
+ slider.hover(function() {
427
+ if (!slider.manualPlay && !slider.manualPause) { slider.pause(); }
428
+ }, function() {
429
+ if (!slider.manualPause && !slider.manualPlay && !slider.stopped) { slider.play(); }
430
+ });
431
+ }
432
+ // initialize animation
433
+ //If we're visible, or we don't use PageVisibility API
434
+ if(!slider.vars.pauseInvisible || !methods.pauseInvisible.isHidden()) {
435
+ (slider.vars.initDelay > 0) ? slider.startTimeout = setTimeout(slider.play, slider.vars.initDelay) : slider.play();
436
+ }
437
+ }
438
+
439
+ // ASNAV:
440
+ if (asNav) { methods.asNav.setup(); }
441
+
442
+ // TOUCH
443
+ if (touch && slider.vars.touch) { methods.touch(); }
444
+
445
+ // FADE&&SMOOTHHEIGHT || SLIDE:
446
+ if (!fade || (fade && slider.vars.smoothHeight)) { $(window).bind("resize orientationchange focus", methods.resize); }
447
+
448
+ slider.find("img").attr("draggable", "false");
449
+
450
+ // API: start() Callback
451
+ setTimeout(function(){
452
+ slider.vars.start(slider);
453
+ }, 200);
454
+ },
455
+ asNav: {
456
+ setup: function() {
457
+ slider.asNav = true;
458
+ slider.animatingTo = Math.floor(slider.currentSlide/slider.move);
459
+ slider.currentItem = slider.currentSlide;
460
+ slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide");
461
+ if(!msGesture){
462
+ slider.slides.on(eventType, function(e){
463
+ e.preventDefault();
464
+ var $slide = $(this),
465
+ target = $slide.index();
466
+ var posFromLeft = $slide.offset().left - $(slider).scrollLeft(); // Find position of slide relative to left of slider container
467
+ if( posFromLeft <= 0 && $slide.hasClass( namespace + 'active-slide' ) ) {
468
+ slider.flexAnimate(slider.getTarget("prev"), true);
469
+ } else if (!$(slider.vars.asNavFor).data('smoothslider').animating && !$slide.hasClass(namespace + "active-slide")) {
470
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
471
+ slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
472
+ }
473
+ });
474
+ }else{
475
+ el._slider = slider;
476
+ slider.slides.each(function (){
477
+ var that = this;
478
+ that._gesture = new MSGesture();
479
+ that._gesture.target = that;
480
+ that.addEventListener("MSPointerDown", function (e){
481
+ e.preventDefault();
482
+ if(e.currentTarget._gesture) {
483
+ e.currentTarget._gesture.addPointer(e.pointerId);
484
+ }
485
+ }, false);
486
+ that.addEventListener("MSGestureTap", function (e){
487
+ e.preventDefault();
488
+ var $slide = $(this),
489
+ target = $slide.index();
490
+ if (!$(slider.vars.asNavFor).data('smoothslider').animating && !$slide.hasClass('active')) {
491
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
492
+ slider.flexAnimate(target, slider.vars.pauseOnAction, false, true, true);
493
+ }
494
+ });
495
+ });
496
+ }
497
+ }
498
+ },
499
+ controlNav: {
500
+ setup: function() {
501
+ if (!slider.manualControls) {
502
+ methods.controlNav.setupPaging();
503
+ } else { // MANUALCONTROLS:
504
+ methods.controlNav.setupManual();
505
+ }
506
+ },
507
+ setupPaging: function() {
508
+ var type = (slider.vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging',
509
+ j = 1,
510
+ item,
511
+ slide;
512
+
513
+ slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>');
514
+
515
+ if (slider.pagingCount > 1) {
516
+ for (var i = 0; i < slider.pagingCount; i++) {
517
+ slide = slider.slides.eq(i);
518
+ if ( undefined === slide.attr( 'data-thumb-alt' ) ) { slide.attr( 'data-thumb-alt', '' ); }
519
+ var altText = ( '' !== slide.attr( 'data-thumb-alt' ) ) ? altText = ' alt="' + slide.attr( 'data-thumb-alt' ) + '"' : '';
520
+ item = (slider.vars.controlNav === "thumbnails") ? '<img src="' + slide.attr( 'data-thumb' ) + '"' + altText + '/>' : '<a href="#">' + j + '</a>';
521
+ if ( 'thumbnails' === slider.vars.controlNav && true === slider.vars.thumbCaptions ) {
522
+ var captn = slide.attr( 'data-thumbcaption' );
523
+ if ( '' !== captn && undefined !== captn ) { item += '<span class="' + namespace + 'caption">' + captn + '</span>'; }
524
+ }
525
+ slider.controlNavScaffold.append('<li>' + item + '</li>');
526
+ j++;
527
+ }
528
+ }
529
+
530
+ // CONTROLSCONTAINER:
531
+ (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);
532
+ methods.controlNav.set();
533
+
534
+ methods.controlNav.active();
535
+
536
+ slider.controlNavScaffold.delegate('a, img', eventType, function(event) {
537
+ event.preventDefault();
538
+
539
+ if (watchedEvent === "" || watchedEvent === event.type) {
540
+ var $this = $(this),
541
+ target = slider.controlNav.index($this);
542
+
543
+ if (!$this.hasClass(namespace + 'active')) {
544
+ slider.direction = (target > slider.currentSlide) ? "next" : "prev";
545
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
546
+ }
547
+ }
548
+
549
+ // setup flags to prevent event duplication
550
+ if (watchedEvent === "") {
551
+ watchedEvent = event.type;
552
+ }
553
+ methods.setToClearWatchedEvent();
554
+
555
+ });
556
+ },
557
+ setupManual: function() {
558
+ slider.controlNav = slider.manualControls;
559
+ methods.controlNav.active();
560
+
561
+ slider.controlNav.bind(eventType, function(event) {
562
+ event.preventDefault();
563
+
564
+ if (watchedEvent === "" || watchedEvent === event.type) {
565
+ var $this = $(this),
566
+ target = slider.controlNav.index($this);
567
+
568
+ if (!$this.hasClass(namespace + 'active')) {
569
+ (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
570
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
571
+ }
572
+ }
573
+
574
+ // setup flags to prevent event duplication
575
+ if (watchedEvent === "") {
576
+ watchedEvent = event.type;
577
+ }
578
+ methods.setToClearWatchedEvent();
579
+ });
580
+ },
581
+ set: function() {
582
+ var selector = (slider.vars.controlNav === "thumbnails") ? 'img' : 'a';
583
+ slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);
584
+ },
585
+ active: function() {
586
+ slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active");
587
+ },
588
+ update: function(action, pos) {
589
+ if (slider.pagingCount > 1 && action === "add") {
590
+ slider.controlNavScaffold.append($('<li><a href="#">' + slider.count + '</a></li>'));
591
+ } else if (slider.pagingCount === 1) {
592
+ slider.controlNavScaffold.find('li').remove();
593
+ } else {
594
+ slider.controlNav.eq(pos).closest('li').remove();
595
+ }
596
+ methods.controlNav.set();
597
+ (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();
598
+ }
599
+ },
600
+ directionNav: {
601
+ setup: function() {
602
+ var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li class="' + namespace + 'nav-prev"><a class="' + namespace + 'prev" href="#">' + slider.vars.prevText + '</a></li><li class="' + namespace + 'nav-next"><a class="' + namespace + 'next" href="#">' + slider.vars.nextText + '</a></li></ul>');
603
+
604
+ // CUSTOM DIRECTION NAV:
605
+ if (slider.customDirectionNav) {
606
+ slider.directionNav = slider.customDirectionNav;
607
+ // CONTROLSCONTAINER:
608
+ } else if (slider.controlsContainer) {
609
+ $(slider.controlsContainer).append(directionNavScaffold);
610
+ slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
611
+ } else {
612
+ slider.append(directionNavScaffold);
613
+ slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);
614
+ }
615
+
616
+ methods.directionNav.update();
617
+
618
+ slider.directionNav.bind(eventType, function(event) {
619
+ event.preventDefault();
620
+ var target;
621
+
622
+ if (watchedEvent === "" || watchedEvent === event.type) {
623
+ target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');
624
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
625
+ }
626
+
627
+ // setup flags to prevent event duplication
628
+ if (watchedEvent === "") {
629
+ watchedEvent = event.type;
630
+ }
631
+ methods.setToClearWatchedEvent();
632
+ });
633
+ },
634
+ update: function() {
635
+ var disabledClass = namespace + 'disabled';
636
+ if (slider.pagingCount === 1) {
637
+ slider.directionNav.addClass(disabledClass).attr('tabindex', '-1');
638
+ } else if (!slider.vars.animationLoop) {
639
+ if (slider.animatingTo === 0) {
640
+ slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass).attr('tabindex', '-1');
641
+ } else if (slider.animatingTo === slider.last) {
642
+ slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass).attr('tabindex', '-1');
643
+ } else {
644
+ slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
645
+ }
646
+ } else {
647
+ slider.directionNav.removeClass(disabledClass).removeAttr('tabindex');
648
+ }
649
+ }
650
+ },
651
+ pausePlay: {
652
+ setup: function() {
653
+ var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a href="#"></a></div>');
654
+
655
+ // CONTROLSCONTAINER:
656
+ if (slider.controlsContainer) {
657
+ slider.controlsContainer.append(pausePlayScaffold);
658
+ slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);
659
+ } else {
660
+ slider.append(pausePlayScaffold);
661
+ slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);
662
+ }
663
+
664
+ methods.pausePlay.update((slider.vars.slideshow) ? namespace + 'pause' : namespace + 'play');
665
+
666
+ slider.pausePlay.bind(eventType, function(event) {
667
+ event.preventDefault();
668
+
669
+ if (watchedEvent === "" || watchedEvent === event.type) {
670
+ if ($(this).hasClass(namespace + 'pause')) {
671
+ slider.manualPause = true;
672
+ slider.manualPlay = false;
673
+ slider.pause();
674
+ } else {
675
+ slider.manualPause = false;
676
+ slider.manualPlay = true;
677
+ slider.play();
678
+ }
679
+ }
680
+
681
+ // setup flags to prevent event duplication
682
+ if (watchedEvent === "") {
683
+ watchedEvent = event.type;
684
+ }
685
+ methods.setToClearWatchedEvent();
686
+ });
687
+ },
688
+ update: function(state) {
689
+ (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);
690
+ }
691
+ },
692
+ touch: function() {
693
+ var startX,
694
+ startY,
695
+ offset,
696
+ cwidth,
697
+ dx,
698
+ startT,
699
+ onTouchStart,
700
+ onTouchMove,
701
+ onTouchEnd,
702
+ scrolling = false,
703
+ localX = 0,
704
+ localY = 0,
705
+ accDx = 0;
706
+
707
+ if(!msGesture){
708
+ onTouchStart = function(e) {
709
+ if (slider.animating) {
710
+ e.preventDefault();
711
+ } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) {
712
+ slider.pause();
713
+ // CAROUSEL:
714
+ cwidth = (vertical) ? slider.h : slider. w;
715
+ startT = Number(new Date());
716
+ // CAROUSEL:
717
+
718
+ // Local vars for X and Y points.
719
+ localX = e.touches[0].pageX;
720
+ localY = e.touches[0].pageY;
721
+
722
+ offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
723
+ (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
724
+ (carousel && slider.currentSlide === slider.last) ? slider.limit :
725
+ (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
726
+ (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
727
+ startX = (vertical) ? localY : localX;
728
+ startY = (vertical) ? localX : localY;
729
+
730
+ el.addEventListener('touchmove', onTouchMove, false);
731
+ el.addEventListener('touchend', onTouchEnd, false);
732
+ }
733
+ };
734
+
735
+ onTouchMove = function(e) {
736
+ // Local vars for X and Y points.
737
+
738
+ localX = e.touches[0].pageX;
739
+ localY = e.touches[0].pageY;
740
+
741
+ dx = (vertical) ? startX - localY : startX - localX;
742
+ scrolling = (vertical) ? (Math.abs(dx) < Math.abs(localX - startY)) : (Math.abs(dx) < Math.abs(localY - startY));
743
+
744
+ var fxms = 500;
745
+
746
+ if ( ! scrolling || Number( new Date() ) - startT > fxms ) {
747
+ e.preventDefault();
748
+ if (!fade && slider.transitions) {
749
+ if (!slider.vars.animationLoop) {
750
+ dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
751
+ }
752
+ slider.setProps(offset + dx, "setTouch");
753
+ }
754
+ }
755
+ };
756
+
757
+ onTouchEnd = function(e) {
758
+ // finish the touch by undoing the touch session
759
+ el.removeEventListener('touchmove', onTouchMove, false);
760
+
761
+ if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
762
+ var updateDx = (reverse) ? -dx : dx,
763
+ target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
764
+
765
+ if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
766
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
767
+ } else {
768
+ if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }
769
+ }
770
+ }
771
+ el.removeEventListener('touchend', onTouchEnd, false);
772
+
773
+ startX = null;
774
+ startY = null;
775
+ dx = null;
776
+ offset = null;
777
+ };
778
+
779
+ el.addEventListener('touchstart', onTouchStart, false);
780
+ }else{
781
+ el.style.msTouchAction = "none";
782
+ el._gesture = new MSGesture();
783
+ el._gesture.target = el;
784
+ el.addEventListener("MSPointerDown", onMSPointerDown, false);
785
+ el._slider = slider;
786
+ el.addEventListener("MSGestureChange", onMSGestureChange, false);
787
+ el.addEventListener("MSGestureEnd", onMSGestureEnd, false);
788
+
789
+ function onMSPointerDown(e){
790
+ e.stopPropagation();
791
+ if (slider.animating) {
792
+ e.preventDefault();
793
+ }else{
794
+ slider.pause();
795
+ el._gesture.addPointer(e.pointerId);
796
+ accDx = 0;
797
+ cwidth = (vertical) ? slider.h : slider. w;
798
+ startT = Number(new Date());
799
+ // CAROUSEL:
800
+
801
+ offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
802
+ (carousel && reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
803
+ (carousel && slider.currentSlide === slider.last) ? slider.limit :
804
+ (carousel) ? ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.currentSlide :
805
+ (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
806
+ }
807
+ }
808
+
809
+ function onMSGestureChange(e) {
810
+ e.stopPropagation();
811
+ var slider = e.target._slider;
812
+ if(!slider){
813
+ return;
814
+ }
815
+ var transX = -e.translationX,
816
+ transY = -e.translationY;
817
+
818
+ //Accumulate translations.
819
+ accDx = accDx + ((vertical) ? transY : transX);
820
+ dx = accDx;
821
+ scrolling = (vertical) ? (Math.abs(accDx) < Math.abs(-transX)) : (Math.abs(accDx) < Math.abs(-transY));
822
+
823
+ if(e.detail === e.MSGESTURE_FLAG_INERTIA){
824
+ setImmediate(function (){
825
+ el._gesture.stop();
826
+ });
827
+
828
+ return;
829
+ }
830
+
831
+ if (!scrolling || Number(new Date()) - startT > 500) {
832
+ e.preventDefault();
833
+ if (!fade && slider.transitions) {
834
+ if (!slider.vars.animationLoop) {
835
+ dx = accDx / ((slider.currentSlide === 0 && accDx < 0 || slider.currentSlide === slider.last && accDx > 0) ? (Math.abs(accDx) / cwidth + 2) : 1);
836
+ }
837
+ slider.setProps(offset + dx, "setTouch");
838
+ }
839
+ }
840
+ }
841
+
842
+ function onMSGestureEnd(e) {
843
+ e.stopPropagation();
844
+ var slider = e.target._slider;
845
+ if(!slider){
846
+ return;
847
+ }
848
+ if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
849
+ var updateDx = (reverse) ? -dx : dx,
850
+ target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
851
+
852
+ if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
853
+ slider.flexAnimate(target, slider.vars.pauseOnAction);
854
+ } else {
855
+ if (!fade) { slider.flexAnimate(slider.currentSlide, slider.vars.pauseOnAction, true); }
856
+ }
857
+ }
858
+
859
+ startX = null;
860
+ startY = null;
861
+ dx = null;
862
+ offset = null;
863
+ accDx = 0;
864
+ }
865
+ }
866
+ },
867
+ resize: function() {
868
+ if (!slider.animating && slider.is(':visible')) {
869
+ if (!carousel) { slider.doMath(); }
870
+
871
+ if (fade) {
872
+ // SMOOTH HEIGHT:
873
+ methods.smoothHeight();
874
+ } else if (carousel) { //CAROUSEL:
875
+ slider.slides.width(slider.computedW);
876
+ slider.update(slider.pagingCount);
877
+ slider.setProps();
878
+ }
879
+ else if (vertical) { //VERTICAL:
880
+ slider.viewport.height(slider.h);
881
+ slider.setProps(slider.h, "setTotal");
882
+ } else {
883
+ // SMOOTH HEIGHT:
884
+ if (slider.vars.smoothHeight) { methods.smoothHeight(); }
885
+ slider.newSlides.width(slider.computedW);
886
+ slider.setProps(slider.computedW, "setTotal");
887
+ }
888
+ }
889
+ },
890
+ smoothHeight: function(dur) {
891
+ if (!vertical || fade) {
892
+ var $obj = (fade) ? slider : slider.viewport;
893
+ (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).innerHeight()}, dur).css('overflow', 'visible') : $obj.innerHeight(slider.slides.eq(slider.animatingTo).innerHeight());
894
+ }
895
+ },
896
+ sync: function(action) {
897
+ var $obj = $(slider.vars.sync).data("smoothslider"),
898
+ target = slider.animatingTo;
899
+
900
+ switch (action) {
901
+ case "animate": $obj.flexAnimate(target, slider.vars.pauseOnAction, false, true); break;
902
+ case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;
903
+ case "pause": $obj.pause(); break;
904
+ }
905
+ },
906
+ uniqueID: function($clone) {
907
+ // Append _clone to current level and children elements with id attributes
908
+ $clone.filter( '[id]' ).add($clone.find( '[id]' )).each(function() {
909
+ var $this = $(this);
910
+ $this.attr( 'id', $this.attr( 'id' ) + '_clone' );
911
+ });
912
+ return $clone;
913
+ },
914
+ pauseInvisible: {
915
+ visProp: null,
916
+ init: function() {
917
+ var visProp = methods.pauseInvisible.getHiddenProp();
918
+ if (visProp) {
919
+ var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
920
+ document.addEventListener(evtname, function() {
921
+ if (methods.pauseInvisible.isHidden()) {
922
+ if(slider.startTimeout) {
923
+ clearTimeout(slider.startTimeout); //If clock is ticking, stop timer and prevent from starting while invisible
924
+ } else {
925
+ slider.pause(); //Or just pause
926
+ }
927
+ }
928
+ else {
929
+ if(slider.started) {
930
+ slider.play(); //Initiated before, just play
931
+ } else {
932
+ if (slider.vars.initDelay > 0) {
933
+ setTimeout(slider.play, slider.vars.initDelay);
934
+ } else {
935
+ slider.play(); //Didn't init before: simply init or wait for it
936
+ }
937
+ }
938
+ }
939
+ });
940
+ }
941
+ },
942
+ isHidden: function() {
943
+ var prop = methods.pauseInvisible.getHiddenProp();
944
+ if (!prop) {
945
+ return false;
946
+ }
947
+ return document[prop];
948
+ },
949
+ getHiddenProp: function() {
950
+ var prefixes = ['webkit','moz','ms','o'];
951
+ // if 'hidden' is natively supported just return it
952
+ if ('hidden' in document) {
953
+ return 'hidden';
954
+ }
955
+ // otherwise loop over all the known prefixes until we find one
956
+ for ( var i = 0; i < prefixes.length; i++ ) {
957
+ if ((prefixes[i] + 'Hidden') in document) {
958
+ return prefixes[i] + 'Hidden';
959
+ }
960
+ }
961
+ // otherwise it's not supported
962
+ return null;
963
+ }
964
+ },
965
+ setToClearWatchedEvent: function() {
966
+ clearTimeout(watchedEventClearTimer);
967
+ watchedEventClearTimer = setTimeout(function() {
968
+ watchedEvent = "";
969
+ }, 3000);
970
+ }
971
+ };
972
+
973
+ // public methods
974
+ slider.flexAnimate = function(target, pause, override, withSync, fromNav) {
975
+ if (!slider.vars.animationLoop && target !== slider.currentSlide) {
976
+ slider.direction = (target > slider.currentSlide) ? "next" : "prev";
977
+ }
978
+
979
+ if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev";
980
+
981
+ if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) {
982
+ if (asNav && withSync) {
983
+ var master = $(slider.vars.asNavFor).data('smoothslider');
984
+ slider.atEnd = target === 0 || target === slider.count - 1;
985
+ master.flexAnimate(target, true, false, true, fromNav);
986
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
987
+ master.direction = slider.direction;
988
+
989
+ if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {
990
+ slider.currentItem = target;
991
+ slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
992
+ target = Math.floor(target/slider.visible);
993
+ } else {
994
+ slider.currentItem = target;
995
+ slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
996
+ return false;
997
+ }
998
+ }
999
+
1000
+ slider.animating = true;
1001
+ slider.animatingTo = target;
1002
+
1003
+ // SLIDESHOW:
1004
+ if (pause) { slider.pause(); }
1005
+
1006
+ // API: before() animation Callback
1007
+ slider.vars.before(slider);
1008
+
1009
+ // SYNC:
1010
+ if (slider.syncExists && !fromNav) { methods.sync("animate"); }
1011
+
1012
+ // CONTROLNAV
1013
+ if (slider.vars.controlNav) { methods.controlNav.active(); }
1014
+
1015
+ // !CAROUSEL:
1016
+ // CANDIDATE: slide active class (for add/remove slide)
1017
+ if (!carousel) { slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide'); }
1018
+
1019
+ // INFINITE LOOP:
1020
+ // CANDIDATE: atEnd
1021
+ slider.atEnd = target === 0 || target === slider.last;
1022
+
1023
+ // DIRECTIONNAV:
1024
+ if (slider.vars.directionNav) { methods.directionNav.update(); }
1025
+
1026
+ if (target === slider.last) {
1027
+ // API: end() of cycle Callback
1028
+ slider.vars.end(slider);
1029
+ // SLIDESHOW && !INFINITE LOOP:
1030
+ if (!slider.vars.animationLoop) { slider.pause(); }
1031
+ }
1032
+
1033
+ // SLIDE:
1034
+ if (!fade) {
1035
+ var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,
1036
+ margin, slideString, calcNext;
1037
+
1038
+ // INFINITE LOOP / REVERSE:
1039
+ if (carousel) {
1040
+ margin = slider.vars.itemMargin;
1041
+ calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
1042
+ slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
1043
+ } else if (slider.currentSlide === 0 && target === slider.count - 1 && slider.vars.animationLoop && slider.direction !== "next") {
1044
+ slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;
1045
+ } else if (slider.currentSlide === slider.last && target === 0 && slider.vars.animationLoop && slider.direction !== "prev") {
1046
+ slideString = (reverse) ? 0 : (slider.count + 1) * dimension;
1047
+ } else {
1048
+ slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;
1049
+ }
1050
+ slider.setProps(slideString, "", slider.vars.animationSpeed);
1051
+ if (slider.transitions) {
1052
+ if (!slider.vars.animationLoop || !slider.atEnd) {
1053
+ slider.animating = false;
1054
+ slider.currentSlide = slider.animatingTo;
1055
+ }
1056
+
1057
+ // Unbind previous transitionEnd events and re-bind new transitionEnd event
1058
+ slider.container.unbind("webkitTransitionEnd transitionend");
1059
+ slider.container.bind("webkitTransitionEnd transitionend", function() {
1060
+ clearTimeout(slider.ensureAnimationEnd);
1061
+ slider.wrapup(dimension);
1062
+ });
1063
+
1064
+ // Insurance for the ever-so-fickle transitionEnd event
1065
+ clearTimeout(slider.ensureAnimationEnd);
1066
+ slider.ensureAnimationEnd = setTimeout(function() {
1067
+ slider.wrapup(dimension);
1068
+ }, slider.vars.animationSpeed + 100);
1069
+
1070
+ } else {
1071
+ slider.container.animate(slider.args, slider.vars.animationSpeed, slider.vars.easing, function(){
1072
+ slider.wrapup(dimension);
1073
+ });
1074
+ }
1075
+ } else { // FADE:
1076
+ if (!touch) {
1077
+ //slider.slides.eq(slider.currentSlide).fadeOut(slider.vars.animationSpeed, slider.vars.easing);
1078
+ //slider.slides.eq(target).fadeIn(slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
1079
+
1080
+ slider.slides.eq(slider.currentSlide).css({"zIndex": 1, "display": "none"}).animate({"opacity": 0}, slider.vars.animationSpeed, slider.vars.easing);
1081
+ slider.slides.eq(target).css({"zIndex": 2, "display": "block"}).animate({"opacity": 1}, slider.vars.animationSpeed, slider.vars.easing, slider.wrapup);
1082
+
1083
+ } else {
1084
+ slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1, "display": "none" });
1085
+ slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2, "display": "block" });
1086
+ slider.wrapup(dimension);
1087
+ }
1088
+ }
1089
+ // SMOOTH HEIGHT:
1090
+ if (slider.vars.smoothHeight) { methods.smoothHeight(slider.vars.animationSpeed); }
1091
+ }
1092
+ };
1093
+ slider.wrapup = function(dimension) {
1094
+ // SLIDE:
1095
+ if (!fade && !carousel) {
1096
+ if (slider.currentSlide === 0 && slider.animatingTo === slider.last && slider.vars.animationLoop) {
1097
+ slider.setProps(dimension, "jumpEnd");
1098
+ } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && slider.vars.animationLoop) {
1099
+ slider.setProps(dimension, "jumpStart");
1100
+ }
1101
+ }
1102
+ slider.animating = false;
1103
+ slider.currentSlide = slider.animatingTo;
1104
+ // API: after() animation Callback
1105
+ slider.vars.after(slider);
1106
+ };
1107
+
1108
+ // SLIDESHOW:
1109
+ slider.animateSlides = function() {
1110
+ if (!slider.animating && focused ) { slider.flexAnimate(slider.getTarget("next")); }
1111
+ };
1112
+ // SLIDESHOW:
1113
+ slider.pause = function() {
1114
+ clearInterval(slider.animatedSlides);
1115
+ slider.animatedSlides = null;
1116
+ slider.playing = false;
1117
+ // PAUSEPLAY:
1118
+ if (slider.vars.pausePlay) { methods.pausePlay.update("play"); }
1119
+ // SYNC:
1120
+ if (slider.syncExists) { methods.sync("pause"); }
1121
+ };
1122
+ // SLIDESHOW:
1123
+ slider.play = function() {
1124
+ if (slider.playing) { clearInterval(slider.animatedSlides); }
1125
+ slider.animatedSlides = slider.animatedSlides || setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
1126
+ slider.started = slider.playing = true;
1127
+ // PAUSEPLAY:
1128
+ if (slider.vars.pausePlay) { methods.pausePlay.update("pause"); }
1129
+ // SYNC:
1130
+ if (slider.syncExists) { methods.sync("play"); }
1131
+ };
1132
+ // STOP:
1133
+ slider.stop = function () {
1134
+ slider.pause();
1135
+ slider.stopped = true;
1136
+ };
1137
+ slider.canAdvance = function(target, fromNav) {
1138
+ // ASNAV:
1139
+ var last = (asNav) ? slider.pagingCount - 1 : slider.last;
1140
+ return (fromNav) ? true :
1141
+ (asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true :
1142
+ (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false :
1143
+ (target === slider.currentSlide && !asNav) ? false :
1144
+ (slider.vars.animationLoop) ? true :
1145
+ (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false :
1146
+ (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false :
1147
+ true;
1148
+ };
1149
+ slider.getTarget = function(dir) {
1150
+ slider.direction = dir;
1151
+ if (dir === "next") {
1152
+ return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;
1153
+ } else {
1154
+ return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;
1155
+ }
1156
+ };
1157
+
1158
+ // SLIDE:
1159
+ slider.setProps = function(pos, special, dur) {
1160
+ var target = (function() {
1161
+ var posCheck = (pos) ? pos : ((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo,
1162
+ posCalc = (function() {
1163
+ if (carousel) {
1164
+ return (special === "setTouch") ? pos :
1165
+ (reverse && slider.animatingTo === slider.last) ? 0 :
1166
+ (reverse) ? slider.limit - (((slider.itemW + slider.vars.itemMargin) * slider.move) * slider.animatingTo) :
1167
+ (slider.animatingTo === slider.last) ? slider.limit : posCheck;
1168
+ } else {
1169
+ switch (special) {
1170
+ case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;
1171
+ case "setTouch": return (reverse) ? pos : pos;
1172
+ case "jumpEnd": return (reverse) ? pos : slider.count * pos;
1173
+ case "jumpStart": return (reverse) ? slider.count * pos : pos;
1174
+ default: return pos;
1175
+ }
1176
+ }
1177
+ }());
1178
+
1179
+ return (posCalc * -1) + "px";
1180
+ }());
1181
+
1182
+ if (slider.transitions) {
1183
+ target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
1184
+ dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
1185
+ slider.container.css("-" + slider.pfx + "-transition-duration", dur);
1186
+ slider.container.css("transition-duration", dur);
1187
+ }
1188
+
1189
+ slider.args[slider.prop] = target;
1190
+ if (slider.transitions || dur === undefined) { slider.container.css(slider.args); }
1191
+
1192
+ slider.container.css('transform',target);
1193
+ };
1194
+
1195
+ slider.setup = function(type) {
1196
+ // SLIDE:
1197
+ if (!fade) {
1198
+ var sliderOffset, arr;
1199
+
1200
+ if (type === "init") {
1201
+ slider.viewport = $('<div class="' + namespace + 'viewport"></div>').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container);
1202
+ // INFINITE LOOP:
1203
+ slider.cloneCount = 0;
1204
+ slider.cloneOffset = 0;
1205
+ // REVERSE:
1206
+ if (reverse) {
1207
+ arr = $.makeArray(slider.slides).reverse();
1208
+ slider.slides = $(arr);
1209
+ slider.container.empty().append(slider.slides);
1210
+ }
1211
+ }
1212
+ // INFINITE LOOP && !CAROUSEL:
1213
+ if (slider.vars.animationLoop && !carousel) {
1214
+ slider.cloneCount = 2;
1215
+ slider.cloneOffset = 1;
1216
+ // clear out old clones
1217
+ if (type !== "init") { slider.container.find('.clone').remove(); }
1218
+ slider.container.append(methods.uniqueID(slider.slides.first().clone().addClass('clone')).attr('aria-hidden', 'true'))
1219
+ .prepend(methods.uniqueID(slider.slides.last().clone().addClass('clone')).attr('aria-hidden', 'true'));
1220
+ }
1221
+ slider.newSlides = $(slider.vars.selector, slider);
1222
+
1223
+ sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;
1224
+ // VERTICAL:
1225
+ if (vertical && !carousel) {
1226
+ slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
1227
+ setTimeout(function(){
1228
+ slider.newSlides.css({"display": "block"});
1229
+ slider.doMath();
1230
+ slider.viewport.height(slider.h);
1231
+ slider.setProps(sliderOffset * slider.h, "init");
1232
+ }, (type === "init") ? 100 : 0);
1233
+ } else {
1234
+ slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
1235
+ slider.setProps(sliderOffset * slider.computedW, "init");
1236
+ setTimeout(function(){
1237
+ slider.doMath();
1238
+ slider.newSlides.css({"width": slider.computedW, "marginRight" : slider.computedM, "float": "left", "display": "block"});
1239
+ // SMOOTH HEIGHT:
1240
+ if (slider.vars.smoothHeight) { methods.smoothHeight(); }
1241
+ }, (type === "init") ? 100 : 0);
1242
+ }
1243
+ } else { // FADE:
1244
+ slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
1245
+ if (type === "init") {
1246
+ if (!touch) {
1247
+ //slider.slides.eq(slider.currentSlide).fadeIn(slider.vars.animationSpeed, slider.vars.easing);
1248
+ if (slider.vars.fadeFirstSlide == false) {
1249
+ slider.slides.css({ "opacity": 0, "display": "none", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2, "display": "block"}).css({"opacity": 1});
1250
+ } else {
1251
+ slider.slides.css({ "opacity": 0, "display": "none", "zIndex": 1 }).eq(slider.currentSlide).css({"zIndex": 2, "display": "block"}).animate({"opacity": 1},slider.vars.animationSpeed,slider.vars.easing);
1252
+ }
1253
+ } else {
1254
+ slider.slides.css({ "opacity": 0, "display": "none", "webkitTransition": "opacity " + slider.vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2, "display": "block"});
1255
+ }
1256
+ }
1257
+ // SMOOTH HEIGHT:
1258
+ if (slider.vars.smoothHeight) { methods.smoothHeight(); }
1259
+ }
1260
+ // !CAROUSEL:
1261
+ // CANDIDATE: active slide
1262
+ if (!carousel) { slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide"); }
1263
+
1264
+ //smoothslider: init() Callback
1265
+ slider.vars.init(slider);
1266
+ };
1267
+
1268
+ slider.doMath = function() {
1269
+ var slide = slider.slides.first(),
1270
+ slideMargin = slider.vars.itemMargin,
1271
+ minItems = slider.vars.minItems,
1272
+ maxItems = slider.vars.maxItems;
1273
+
1274
+ slider.w = (slider.viewport===undefined) ? slider.width() : slider.viewport.width();
1275
+ slider.h = slide.height();
1276
+ slider.boxPadding = slide.outerWidth() - slide.width();
1277
+
1278
+ // CAROUSEL:
1279
+ if (carousel) {
1280
+ slider.itemT = slider.vars.itemWidth + slideMargin;
1281
+ slider.itemM = slideMargin;
1282
+ slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
1283
+ slider.maxW = (maxItems) ? (maxItems * slider.itemT) - slideMargin : slider.w;
1284
+ slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * (minItems - 1)))/minItems :
1285
+ (slider.maxW < slider.w) ? (slider.w - (slideMargin * (maxItems - 1)))/maxItems :
1286
+ (slider.vars.itemWidth > slider.w) ? slider.w : slider.vars.itemWidth;
1287
+
1288
+ slider.visible = Math.floor(slider.w/(slider.itemW));
1289
+ slider.move = (slider.vars.move > 0 && slider.vars.move < slider.visible ) ? slider.vars.move : slider.visible;
1290
+ slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);
1291
+ slider.last = slider.pagingCount - 1;
1292
+ slider.limit = (slider.pagingCount === 1) ? 0 :
1293
+ (slider.vars.itemWidth > slider.w) ? (slider.itemW * (slider.count - 1)) + (slideMargin * (slider.count - 1)) : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;
1294
+ } else {
1295
+ slider.itemW = slider.w;
1296
+ slider.itemM = slideMargin;
1297
+ slider.pagingCount = slider.count;
1298
+ slider.last = slider.count - 1;
1299
+ }
1300
+ slider.computedW = slider.itemW - slider.boxPadding;
1301
+ slider.computedM = slider.itemM;
1302
+ };
1303
+
1304
+ slider.update = function(pos, action) {
1305
+ slider.doMath();
1306
+
1307
+ // update currentSlide and slider.animatingTo if necessary
1308
+ if (!carousel) {
1309
+ if (pos < slider.currentSlide) {
1310
+ slider.currentSlide += 1;
1311
+ } else if (pos <= slider.currentSlide && pos !== 0) {
1312
+ slider.currentSlide -= 1;
1313
+ }
1314
+ slider.animatingTo = slider.currentSlide;
1315
+ }
1316
+
1317
+ // update controlNav
1318
+ if (slider.vars.controlNav && !slider.manualControls) {
1319
+ if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) {
1320
+ methods.controlNav.update("add");
1321
+ } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) {
1322
+ if (carousel && slider.currentSlide > slider.last) {
1323
+ slider.currentSlide -= 1;
1324
+ slider.animatingTo -= 1;
1325
+ }
1326
+ methods.controlNav.update("remove", slider.last);
1327
+ }
1328
+ }
1329
+ // update directionNav
1330
+ if (slider.vars.directionNav) { methods.directionNav.update(); }
1331
+
1332
+ };
1333
+
1334
+ slider.addSlide = function(obj, pos) {
1335
+ var $obj = $(obj);
1336
+
1337
+ slider.count += 1;
1338
+ slider.last = slider.count - 1;
1339
+
1340
+ // append new slide
1341
+ if (vertical && reverse) {
1342
+ (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);
1343
+ } else {
1344
+ (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);
1345
+ }
1346
+
1347
+ // update currentSlide, animatingTo, controlNav, and directionNav
1348
+ slider.update(pos, "add");
1349
+
1350
+ // update slider.slides
1351
+ slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
1352
+ // re-setup the slider to accomdate new slide
1353
+ slider.setup();
1354
+
1355
+ //smoothslider: added() Callback
1356
+ slider.vars.added(slider);
1357
+ };
1358
+ slider.removeSlide = function(obj) {
1359
+ var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;
1360
+
1361
+ // update count
1362
+ slider.count -= 1;
1363
+ slider.last = slider.count - 1;
1364
+
1365
+ // remove slide
1366
+ if (isNaN(obj)) {
1367
+ $(obj, slider.slides).remove();
1368
+ } else {
1369
+ (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();
1370
+ }
1371
+
1372
+ // update currentSlide, animatingTo, controlNav, and directionNav
1373
+ slider.doMath();
1374
+ slider.update(pos, "remove");
1375
+
1376
+ // update slider.slides
1377
+ slider.slides = $(slider.vars.selector + ':not(.clone)', slider);
1378
+ // re-setup the slider to accomdate new slide
1379
+ slider.setup();
1380
+
1381
+ // smoothslider: removed() Callback
1382
+ slider.vars.removed(slider);
1383
+ };
1384
+
1385
+ //smoothslider: Initialize
1386
+ methods.init();
1387
+ };
1388
+
1389
+ // Ensure the slider isn't focussed if the window loses focus.
1390
+ $( window ).blur( function ( e ) {
1391
+ focused = false;
1392
+ }).focus( function ( e ) {
1393
+ focused = true;
1394
+ });
1395
+
1396
+ //smoothslider: Default Settings
1397
+ $.smoothslider.defaults = {
1398
+ namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin
1399
+ selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril
1400
+ animation: "fade", //String: Select your animation type, "fade" or "slide"
1401
+ easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!
1402
+ direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical"
1403
+ reverse: false, //{NEW} Boolean: Reverse the animation direction
1404
+ animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
1405
+ smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
1406
+ startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide)
1407
+ slideshow: true, //Boolean: Animate slider automatically
1408
+ slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds
1409
+ animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
1410
+ initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
1411
+ randomize: false, //Boolean: Randomize slide order
1412
+ fadeFirstSlide: true, //Boolean: Fade in the first slide when animation type is "fade"
1413
+ thumbCaptions: false, //Boolean: Whether or not to put captions on thumbnails when using the "thumbnails" controlNav.
1414
+
1415
+ // Usability features
1416
+ pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
1417
+ pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
1418
+ pauseInvisible: true, //{NEW} Boolean: Pause the slideshow when tab is invisible, resume when visible. Provides better UX, lower CPU usage.
1419
+ useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available
1420
+ touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
1421
+ video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
1422
+
1423
+ // Primary Controls
1424
+ controlNav: true, //Boolean: Create navigation for paging control of each slide? Note: Leave true for manualControls usage
1425
+ directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
1426
+ prevText: "Previous", //String: Set the text for the "previous" directionNav item
1427
+ nextText: "Next", //String: Set the text for the "next" directionNav item
1428
+
1429
+ // Secondary Navigation
1430
+ keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys
1431
+ multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.
1432
+ mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel
1433
+ pausePlay: false, //Boolean: Create pause/play dynamic element
1434
+ pauseText: "Pause", //String: Set the text for the "pause" pausePlay item
1435
+ playText: "Play", //String: Set the text for the "play" pausePlay item
1436
+
1437
+ // Special properties
1438
+ controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the smoothslider element. Example use would be $(".smoothslider-container"). Property is ignored if given element is not found.
1439
+ 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.
1440
+ customDirectionNav: "", //{NEW} jQuery Object/Selector: Custom prev / next button. Must be two jQuery elements. In order to make the events work they have to have the classes "prev" and "next" (plus namespace)
1441
+ sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
1442
+ asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
1443
+
1444
+ // Carousel Options
1445
+ itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.
1446
+ itemMargin: 0, //{NEW} Integer: Margin between carousel items.
1447
+ minItems: 1, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.
1448
+ maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.
1449
+ move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.
1450
+ allowOneSlide: true, //{NEW} Boolean: Whether or not to allow a slider comprised of a single slide
1451
+
1452
+ // Callback API
1453
+ start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide
1454
+ before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation
1455
+ after: function(){}, //Callback: function(slider) - Fires after each slider animation completes
1456
+ end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
1457
+ added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added
1458
+ removed: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is removed
1459
+ init: function() {} //{NEW} Callback: function(slider) - Fires after the slider is initially setup
1460
+ };
1461
+
1462
+ //smoothslider: Plugin Function
1463
+ $.fn.smoothslider = function(options) {
1464
+ if (options === undefined) { options = {}; }
1465
+
1466
+ if (typeof options === "object") {
1467
+ return this.each(function() {
1468
+ var $this = $(this),
1469
+ selector = (options.selector) ? options.selector : ".slides > li",
1470
+ $slides = $this.find(selector);
1471
+
1472
+ if ( ( $slides.length === 1 && options.allowOneSlide === false ) || $slides.length === 0 ) {
1473
+ $slides.fadeIn(400);
1474
+ if (options.start) { options.start($this); }
1475
+ } else if ($this.data('smoothslider') === undefined) {
1476
+ new $.smoothslider(this, options);
1477
+ }
1478
+ });
1479
+ } else {
1480
+ // Helper strings to quickly perform functions on the slider
1481
+ var $slider = $(this).data('smoothslider');
1482
+ switch (options) {
1483
+ case "play": $slider.play(); break;
1484
+ case "pause": $slider.pause(); break;
1485
+ case "stop": $slider.stop(); break;
1486
+ case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
1487
+ case "prev":
1488
+ case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
1489
+ default: if (typeof options === "number") { $slider.flexAnimate(options, true); }
1490
+ }
1491
+ }
1492
+ };
1493
+ })(jQuery);
1494
+
1495
+
1496
+ /*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
1497
+ * Licensed under the MIT License (LICENSE.txt).
1498
+ *
1499
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
1500
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
1501
+ * Thanks to: Seamus Leahy for adding deltaX and deltaY
1502
+ *
1503
+ * Version: 3.0.6
1504
+ *
1505
+ * Requires: 1.2.2+
1506
+ */
1507
+
1508
+ (function($) {
1509
+
1510
+ var types = ['DOMMouseScroll', 'mousewheel'];
1511
+
1512
+ if ($.event.fixHooks) {
1513
+ for ( var i=types.length; i; ) {
1514
+ $.event.fixHooks[ types[--i] ] = $.event.mouseHooks;
1515
+ }
1516
+ }
1517
+
1518
+ $.event.special.mousewheel = {
1519
+ setup: function() {
1520
+ if ( this.addEventListener ) {
1521
+ for ( var i=types.length; i; ) {
1522
+ this.addEventListener( types[--i], handler, false );
1523
+ }
1524
+ } else {
1525
+ this.onmousewheel = handler;
1526
+ }
1527
+ },
1528
+
1529
+ teardown: function() {
1530
+ if ( this.removeEventListener ) {
1531
+ for ( var i=types.length; i; ) {
1532
+ this.removeEventListener( types[--i], handler, false );
1533
+ }
1534
+ } else {
1535
+ this.onmousewheel = null;
1536
+ }
1537
+ }
1538
+ };
1539
+
1540
+ $.fn.extend({
1541
+ mousewheel: function(fn) {
1542
+ return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
1543
+ },
1544
+
1545
+ unmousewheel: function(fn) {
1546
+ return this.unbind("mousewheel", fn);
1547
+ }
1548
+ });
1549
+
1550
+
1551
+ function handler(event) {
1552
+ var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
1553
+ event = $.event.fix(orgEvent);
1554
+ event.type = "mousewheel";
1555
+
1556
+ // Old school scrollwheel delta
1557
+ if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; }
1558
+ if ( orgEvent.detail ) { delta = -orgEvent.detail/3; }
1559
+
1560
+ // New school multidimensional scroll (touchpads) deltas
1561
+ deltaY = delta;
1562
+
1563
+ // Gecko
1564
+ if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
1565
+ deltaY = 0;
1566
+ deltaX = -1*delta;
1567
+ }
1568
+
1569
+ // Webkit
1570
+ if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
1571
+ if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
1572
+
1573
+ // Add event and delta to the front of the arguments
1574
+ args.unshift(event, delta, deltaX, deltaY);
1575
+
1576
+ return ($.event.dispatch || $.event.handle).apply(this, args);
1577
+ }
1578
+
1579
+ })(jQuery);
1580
+
1581
+ /* Modernizr 2.0.6 (Custom Build) | MIT & BSD */
1582
+ ;window.Modernizr=function(a,b,c){function D(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+o.join(c+" ")+c).split(" ");return C(d,b)}function C(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function B(a,b){return!!~(""+a).indexOf(b)}function A(a,b){return typeof a===b}function z(a,b){return y(n.join(a+";")+(b||""))}function y(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=Object.prototype.toString,n=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),o="Webkit Moz O ms Khtml".split(" "),p={},q={},r={},s=[],t=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["&shy;","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},u=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;t("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},v,w={}.hasOwnProperty,x;!A(w,c)&&!A(w.call,c)?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],c)},p.rgba=function(){y("background-color:rgba(150,255,150,.5)");return B(k.backgroundColor,"rgba")},p.boxshadow=function(){return D("boxShadow")},p.csstransitions=function(){return D("transitionProperty")};for(var E in p)x(p,E)&&(v=E.toLowerCase(),e[v]=p[E](),s.push((e[v]?"":"no-")+v));e.addTest=function(a,b){if(typeof a=="object")for(var d in a)x(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},y(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=n,e._domPrefixes=o,e.mq=u,e.testProp=function(a){return C([a])},e.testAllProps=D,e.testStyles=t,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+s.join(" "):"");return e}(this,this.document),function(a,b){function u(){r(!0)}a.respond={},respond.update=function(){},respond.mediaQueriesSupported=b;if(!b){var c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=j.getElementsByTagName("link"),l=[],m=function(){var b=k,c=b.length,d=0,e,f,g,i;for(;d<c;d++)e=b[d],f=e.href,g=e.media,i=e.rel&&e.rel.toLowerCase()==="stylesheet",!!f&&i&&!h[f]&&(!/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test(f)||f.replace(RegExp.$1,"").split("/")[0]===a.location.host?l.push({href:f,media:g}):h[f]=!0);n()},n=function(){if(l.length){var a=l.shift();s(a.href,function(b){o(b,a.href,a.media),h[a.href]=!0,n()})}},o=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]+\{[^\}\{]+\})+/gi),g=d&&d.length||0,b=b.substring(0,b.lastIndexOf("/")),h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c,j=0,k,l,m,n,o;b.length&&(b+="/"),i&&(g=1);for(;j<g;j++){k=0,i?(l=c,f.push(h(a))):(l=d[j].match(/@media ([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),n=l.split(","),o=n.length;for(;k<o;k++)m=n[k],e.push({media:m.match(/(only\s+)?([a-zA-Z]+)(\sand)?/)&&RegExp.$2,rules:f.length-1,minw:m.match(/\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1),maxw:m.match(/\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/)&&parseFloat(RegExp.$1)})}r()},p,q,r=function(a){var b="clientWidth",h=d[b],l=c.compatMode==="CSS1Compat"&&h||c.body[b]||h,m={},n=c.createDocumentFragment(),o=k[k.length-1],s=(new Date).getTime();if(a&&p&&s-p<i)clearTimeout(q),q=setTimeout(r,i);else{p=s;for(var t in e){var u=e[t];if(!u.minw&&!u.maxw||(!u.minw||u.minw&&l>=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
1583
+
1584
+ $(function(){
1585
+ var toggles = $('.toggle a'),
1586
+ codes = $('.code');
1587
+
1588
+ toggles.on("click", function(event){
1589
+ event.preventDefault();
1590
+ var $this = $(this);
1591
+
1592
+ if (!$this.hasClass("active")) {
1593
+ toggles.removeClass("active");
1594
+ $this.addClass("active");
1595
+ codes.hide().filter(this.hash).show();
1596
+ }
1597
+ });
1598
+ toggles.first().click();
1599
+ });