caroufredsel_rails 6.2.1

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,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Yzk0MWYzODI5MjhkZGUyYjRlZWNmOGMyNjM3MmZmZjY3MGMxODk3ZA==
5
+ data.tar.gz: !binary |-
6
+ MmFhYjIyYWM3ODFhMTVkODMwYjgxM2E0Y2Y4MzkxZDZjYmQzZjIzYg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ODU3ZDAxYjk3NzJiYWVjNzU1MmRkZjJhMDhkOGNjMGY3YmRiYTVlZTdkZWUy
10
+ YzljZmE4NjVkZTAyY2RhYzBmMGZkZTQ2MTI0NGYzMGRlYmYwNTE5M2M0NTYy
11
+ OWE0MGEwNzU3YWM3NDQ0YzU3ZTFkYzE1MDljZTAyZTEyNzUxYjU=
12
+ data.tar.gz: !binary |-
13
+ ZmQwOGU5MjkyYWMzNTYxZmM3NTY4ZGY4MzI0MDNhYjg1MGVmYmFlNDA5MjFl
14
+ ZmQ2NzU1YjRkMjQ5OTVhZmViNWZiYjRkOGYwOTlmODI0YTJmY2U1ZmVkOTIw
15
+ ZDc1NDRmMTMwYjcwNzBjNDE4ODAwZTg4ZWZlMGRmNTYyN2EzY2Q=
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in caroufredsel_rails.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Guy Israeli
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,40 @@
1
+ # CaroufredselRails
2
+
3
+ carouFredSel. Asset Pipeline. Horray!
4
+
5
+ see http://caroufredsel.dev7studios.com/ for more stuff...
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'caroufredsel_rails'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install caroufredsel_rails
20
+
21
+ ## Usage
22
+
23
+ add to manifest (watch the caps)
24
+
25
+ //= jquery.carouFredSel.js
26
+
27
+ in case you will use mousewheel/touchswipe/bouncing and such (choose the one that is applicable to your use)
28
+
29
+ //= jquery.mousewheel
30
+ //= jquery.touchSwipe
31
+ //= jquery.transit
32
+ //= jquery.ba-throttle-debounce
33
+
34
+ ## Contributing
35
+
36
+ 1. Fork it
37
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
38
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
39
+ 4. Push to the branch (`git push origin my-new-feature`)
40
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,9 @@
1
+ /*
2
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
3
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
4
+ *
5
+ * Copyright (c) 2010 "Cowboy" Ben Alman
6
+ * Dual licensed under the MIT and GPL licenses.
7
+ * http://benalman.com/about/license/
8
+ */
9
+ (function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
@@ -0,0 +1,4255 @@
1
+ /*
2
+ * jQuery carouFredSel 6.2.1
3
+ * Demo's and documentation:
4
+ * caroufredsel.dev7studios.com
5
+ *
6
+ * Copyright (c) 2013 Fred Heusschen
7
+ * www.frebsite.nl
8
+ *
9
+ * Dual licensed under the MIT and GPL licenses.
10
+ * http://en.wikipedia.org/wiki/MIT_License
11
+ * http://en.wikipedia.org/wiki/GNU_General_Public_License
12
+ */
13
+
14
+
15
+ (function($) {
16
+
17
+
18
+ // LOCAL
19
+
20
+ if ( $.fn.carouFredSel )
21
+ {
22
+ return;
23
+ }
24
+
25
+ $.fn.caroufredsel = $.fn.carouFredSel = function(options, configs)
26
+ {
27
+
28
+ // no element
29
+ if (this.length == 0)
30
+ {
31
+ debug( true, 'No element found for "' + this.selector + '".' );
32
+ return this;
33
+ }
34
+
35
+ // multiple elements
36
+ if (this.length > 1)
37
+ {
38
+ return this.each(function() {
39
+ $(this).carouFredSel(options, configs);
40
+ });
41
+ }
42
+
43
+
44
+ var $cfs = this,
45
+ $tt0 = this[0],
46
+ starting_position = false;
47
+
48
+ if ($cfs.data('_cfs_isCarousel'))
49
+ {
50
+ starting_position = $cfs.triggerHandler('_cfs_triggerEvent', 'currentPosition');
51
+ $cfs.trigger('_cfs_triggerEvent', ['destroy', true]);
52
+ }
53
+
54
+ var FN = {};
55
+
56
+ FN._init = function(o, setOrig, start)
57
+ {
58
+ o = go_getObject($tt0, o);
59
+
60
+ o.items = go_getItemsObject($tt0, o.items);
61
+ o.scroll = go_getScrollObject($tt0, o.scroll);
62
+ o.auto = go_getAutoObject($tt0, o.auto);
63
+ o.prev = go_getPrevNextObject($tt0, o.prev);
64
+ o.next = go_getPrevNextObject($tt0, o.next);
65
+ o.pagination = go_getPaginationObject($tt0, o.pagination);
66
+ o.swipe = go_getSwipeObject($tt0, o.swipe);
67
+ o.mousewheel = go_getMousewheelObject($tt0, o.mousewheel);
68
+
69
+ if (setOrig)
70
+ {
71
+ opts_orig = $.extend(true, {}, $.fn.carouFredSel.defaults, o);
72
+ }
73
+
74
+ opts = $.extend(true, {}, $.fn.carouFredSel.defaults, o);
75
+ opts.d = cf_getDimensions(opts);
76
+
77
+ crsl.direction = (opts.direction == 'up' || opts.direction == 'left') ? 'next' : 'prev';
78
+
79
+ var a_itm = $cfs.children(),
80
+ avail_primary = ms_getParentSize($wrp, opts, 'width');
81
+
82
+ if (is_true(opts.cookie))
83
+ {
84
+ opts.cookie = 'caroufredsel_cookie_' + conf.serialNumber;
85
+ }
86
+
87
+ opts.maxDimension = ms_getMaxDimension(opts, avail_primary);
88
+
89
+ // complement items and sizes
90
+ opts.items = in_complementItems(opts.items, opts, a_itm, start);
91
+ opts[opts.d['width']] = in_complementPrimarySize(opts[opts.d['width']], opts, a_itm);
92
+ opts[opts.d['height']] = in_complementSecondarySize(opts[opts.d['height']], opts, a_itm);
93
+
94
+ // primary size not set for a responsive carousel
95
+ if (opts.responsive)
96
+ {
97
+ if (!is_percentage(opts[opts.d['width']]))
98
+ {
99
+ opts[opts.d['width']] = '100%';
100
+ }
101
+ }
102
+
103
+ // primary size is percentage
104
+ if (is_percentage(opts[opts.d['width']]))
105
+ {
106
+ crsl.upDateOnWindowResize = true;
107
+ crsl.primarySizePercentage = opts[opts.d['width']];
108
+ opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage);
109
+ if (!opts.items.visible)
110
+ {
111
+ opts.items.visibleConf.variable = true;
112
+ }
113
+ }
114
+
115
+ if (opts.responsive)
116
+ {
117
+ opts.usePadding = false;
118
+ opts.padding = [0, 0, 0, 0];
119
+ opts.align = false;
120
+ opts.items.visibleConf.variable = false;
121
+ }
122
+ else
123
+ {
124
+ // visible-items not set
125
+ if (!opts.items.visible)
126
+ {
127
+ opts = in_complementVisibleItems(opts, avail_primary);
128
+ }
129
+
130
+ // primary size not set -> calculate it or set to "variable"
131
+ if (!opts[opts.d['width']])
132
+ {
133
+ if (!opts.items.visibleConf.variable && is_number(opts.items[opts.d['width']]) && opts.items.filter == '*')
134
+ {
135
+ opts[opts.d['width']] = opts.items.visible * opts.items[opts.d['width']];
136
+ opts.align = false;
137
+ }
138
+ else
139
+ {
140
+ opts[opts.d['width']] = 'variable';
141
+ }
142
+ }
143
+ // align not set -> set to center if primary size is number
144
+ if (is_undefined(opts.align))
145
+ {
146
+ opts.align = (is_number(opts[opts.d['width']]))
147
+ ? 'center'
148
+ : false;
149
+ }
150
+ // set variabe visible-items
151
+ if (opts.items.visibleConf.variable)
152
+ {
153
+ opts.items.visible = gn_getVisibleItemsNext(a_itm, opts, 0);
154
+ }
155
+ }
156
+
157
+ // set visible items by filter
158
+ if (opts.items.filter != '*' && !opts.items.visibleConf.variable)
159
+ {
160
+ opts.items.visibleConf.org = opts.items.visible;
161
+ opts.items.visible = gn_getVisibleItemsNextFilter(a_itm, opts, 0);
162
+ }
163
+
164
+ opts.items.visible = cf_getItemsAdjust(opts.items.visible, opts, opts.items.visibleConf.adjust, $tt0);
165
+ opts.items.visibleConf.old = opts.items.visible;
166
+
167
+ if (opts.responsive)
168
+ {
169
+ if (!opts.items.visibleConf.min)
170
+ {
171
+ opts.items.visibleConf.min = opts.items.visible;
172
+ }
173
+ if (!opts.items.visibleConf.max)
174
+ {
175
+ opts.items.visibleConf.max = opts.items.visible;
176
+ }
177
+ opts = in_getResponsiveValues(opts, a_itm, avail_primary);
178
+ }
179
+ else
180
+ {
181
+ opts.padding = cf_getPadding(opts.padding);
182
+
183
+ if (opts.align == 'top')
184
+ {
185
+ opts.align = 'left';
186
+ }
187
+ else if (opts.align == 'bottom')
188
+ {
189
+ opts.align = 'right';
190
+ }
191
+
192
+ switch (opts.align)
193
+ {
194
+ // align: center, left or right
195
+ case 'center':
196
+ case 'left':
197
+ case 'right':
198
+ if (opts[opts.d['width']] != 'variable')
199
+ {
200
+ opts = in_getAlignPadding(opts, a_itm);
201
+ opts.usePadding = true;
202
+ }
203
+ break;
204
+
205
+ // padding
206
+ default:
207
+ opts.align = false;
208
+ opts.usePadding = (
209
+ opts.padding[0] == 0 &&
210
+ opts.padding[1] == 0 &&
211
+ opts.padding[2] == 0 &&
212
+ opts.padding[3] == 0
213
+ ) ? false : true;
214
+ break;
215
+ }
216
+ }
217
+
218
+ if (!is_number(opts.scroll.duration))
219
+ {
220
+ opts.scroll.duration = 500;
221
+ }
222
+ if (is_undefined(opts.scroll.items))
223
+ {
224
+ opts.scroll.items = (opts.responsive || opts.items.visibleConf.variable || opts.items.filter != '*')
225
+ ? 'visible'
226
+ : opts.items.visible;
227
+ }
228
+
229
+ opts.auto = $.extend(true, {}, opts.scroll, opts.auto);
230
+ opts.prev = $.extend(true, {}, opts.scroll, opts.prev);
231
+ opts.next = $.extend(true, {}, opts.scroll, opts.next);
232
+ opts.pagination = $.extend(true, {}, opts.scroll, opts.pagination);
233
+ // swipe and mousewheel extend later on, per direction
234
+
235
+ opts.auto = go_complementAutoObject($tt0, opts.auto);
236
+ opts.prev = go_complementPrevNextObject($tt0, opts.prev);
237
+ opts.next = go_complementPrevNextObject($tt0, opts.next);
238
+ opts.pagination = go_complementPaginationObject($tt0, opts.pagination);
239
+ opts.swipe = go_complementSwipeObject($tt0, opts.swipe);
240
+ opts.mousewheel = go_complementMousewheelObject($tt0, opts.mousewheel);
241
+
242
+ if (opts.synchronise)
243
+ {
244
+ opts.synchronise = cf_getSynchArr(opts.synchronise);
245
+ }
246
+
247
+
248
+ // DEPRECATED
249
+ if (opts.auto.onPauseStart)
250
+ {
251
+ opts.auto.onTimeoutStart = opts.auto.onPauseStart;
252
+ deprecated('auto.onPauseStart', 'auto.onTimeoutStart');
253
+ }
254
+ if (opts.auto.onPausePause)
255
+ {
256
+ opts.auto.onTimeoutPause = opts.auto.onPausePause;
257
+ deprecated('auto.onPausePause', 'auto.onTimeoutPause');
258
+ }
259
+ if (opts.auto.onPauseEnd)
260
+ {
261
+ opts.auto.onTimeoutEnd = opts.auto.onPauseEnd;
262
+ deprecated('auto.onPauseEnd', 'auto.onTimeoutEnd');
263
+ }
264
+ if (opts.auto.pauseDuration)
265
+ {
266
+ opts.auto.timeoutDuration = opts.auto.pauseDuration;
267
+ deprecated('auto.pauseDuration', 'auto.timeoutDuration');
268
+ }
269
+ // /DEPRECATED
270
+
271
+
272
+ }; // /init
273
+
274
+
275
+ FN._build = function() {
276
+ $cfs.data('_cfs_isCarousel', true);
277
+
278
+ var a_itm = $cfs.children(),
279
+ orgCSS = in_mapCss($cfs, ['textAlign', 'float', 'position', 'top', 'right', 'bottom', 'left', 'zIndex', 'width', 'height', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft']),
280
+ newPosition = 'relative';
281
+
282
+ switch (orgCSS.position)
283
+ {
284
+ case 'absolute':
285
+ case 'fixed':
286
+ newPosition = orgCSS.position;
287
+ break;
288
+ }
289
+
290
+ if (conf.wrapper == 'parent')
291
+ {
292
+ sz_storeOrigCss($wrp);
293
+ }
294
+ else
295
+ {
296
+ $wrp.css(orgCSS);
297
+ }
298
+ $wrp.css({
299
+ 'overflow' : 'hidden',
300
+ 'position' : newPosition
301
+ });
302
+
303
+ sz_storeOrigCss($cfs);
304
+ $cfs.data('_cfs_origCssZindex', orgCSS.zIndex);
305
+ $cfs.css({
306
+ 'textAlign' : 'left',
307
+ 'float' : 'none',
308
+ 'position' : 'absolute',
309
+ 'top' : 0,
310
+ 'right' : 'auto',
311
+ 'bottom' : 'auto',
312
+ 'left' : 0,
313
+ 'marginTop' : 0,
314
+ 'marginRight' : 0,
315
+ 'marginBottom' : 0,
316
+ 'marginLeft' : 0
317
+ });
318
+
319
+ sz_storeMargin(a_itm, opts);
320
+ sz_storeOrigCss(a_itm);
321
+ if (opts.responsive)
322
+ {
323
+ sz_setResponsiveSizes(opts, a_itm);
324
+ }
325
+
326
+ }; // /build
327
+
328
+
329
+ FN._bind_events = function() {
330
+ FN._unbind_events();
331
+
332
+
333
+ // stop event
334
+ $cfs.bind(cf_e('stop', conf), function(e, imm) {
335
+ e.stopPropagation();
336
+
337
+ // button
338
+ if (!crsl.isStopped)
339
+ {
340
+ if (opts.auto.button)
341
+ {
342
+ opts.auto.button.addClass(cf_c('stopped', conf));
343
+ }
344
+ }
345
+
346
+ // set stopped
347
+ crsl.isStopped = true;
348
+
349
+ if (opts.auto.play)
350
+ {
351
+ opts.auto.play = false;
352
+ $cfs.trigger(cf_e('pause', conf), imm);
353
+ }
354
+ return true;
355
+ });
356
+
357
+
358
+ // finish event
359
+ $cfs.bind(cf_e('finish', conf), function(e) {
360
+ e.stopPropagation();
361
+ if (crsl.isScrolling)
362
+ {
363
+ sc_stopScroll(scrl);
364
+ }
365
+ return true;
366
+ });
367
+
368
+
369
+ // pause event
370
+ $cfs.bind(cf_e('pause', conf), function(e, imm, res) {
371
+ e.stopPropagation();
372
+ tmrs = sc_clearTimers(tmrs);
373
+
374
+ // immediately pause
375
+ if (imm && crsl.isScrolling)
376
+ {
377
+ scrl.isStopped = true;
378
+ var nst = getTime() - scrl.startTime;
379
+ scrl.duration -= nst;
380
+ if (scrl.pre)
381
+ {
382
+ scrl.pre.duration -= nst;
383
+ }
384
+ if (scrl.post)
385
+ {
386
+ scrl.post.duration -= nst;
387
+ }
388
+ sc_stopScroll(scrl, false);
389
+ }
390
+
391
+ // update remaining pause-time
392
+ if (!crsl.isPaused && !crsl.isScrolling)
393
+ {
394
+ if (res)
395
+ {
396
+ tmrs.timePassed += getTime() - tmrs.startTime;
397
+ }
398
+ }
399
+
400
+ // button
401
+ if (!crsl.isPaused)
402
+ {
403
+ if (opts.auto.button)
404
+ {
405
+ opts.auto.button.addClass(cf_c('paused', conf));
406
+ }
407
+ }
408
+
409
+ // set paused
410
+ crsl.isPaused = true;
411
+
412
+ // pause pause callback
413
+ if (opts.auto.onTimeoutPause)
414
+ {
415
+ var dur1 = opts.auto.timeoutDuration - tmrs.timePassed,
416
+ perc = 100 - Math.ceil( dur1 * 100 / opts.auto.timeoutDuration );
417
+
418
+ opts.auto.onTimeoutPause.call($tt0, perc, dur1);
419
+ }
420
+ return true;
421
+ });
422
+
423
+
424
+ // play event
425
+ $cfs.bind(cf_e('play', conf), function(e, dir, del, res) {
426
+ e.stopPropagation();
427
+ tmrs = sc_clearTimers(tmrs);
428
+
429
+ // sort params
430
+ var v = [dir, del, res],
431
+ t = ['string', 'number', 'boolean'],
432
+ a = cf_sortParams(v, t);
433
+
434
+ dir = a[0];
435
+ del = a[1];
436
+ res = a[2];
437
+
438
+ if (dir != 'prev' && dir != 'next')
439
+ {
440
+ dir = crsl.direction;
441
+ }
442
+ if (!is_number(del))
443
+ {
444
+ del = 0;
445
+ }
446
+ if (!is_boolean(res))
447
+ {
448
+ res = false;
449
+ }
450
+
451
+ // stopped?
452
+ if (res)
453
+ {
454
+ crsl.isStopped = false;
455
+ opts.auto.play = true;
456
+ }
457
+ if (!opts.auto.play)
458
+ {
459
+ e.stopImmediatePropagation();
460
+ return debug(conf, 'Carousel stopped: Not scrolling.');
461
+ }
462
+
463
+ // button
464
+ if (crsl.isPaused)
465
+ {
466
+ if (opts.auto.button)
467
+ {
468
+ opts.auto.button.removeClass(cf_c('stopped', conf));
469
+ opts.auto.button.removeClass(cf_c('paused', conf));
470
+ }
471
+ }
472
+
473
+ // set playing
474
+ crsl.isPaused = false;
475
+ tmrs.startTime = getTime();
476
+
477
+ // timeout the scrolling
478
+ var dur1 = opts.auto.timeoutDuration + del;
479
+ dur2 = dur1 - tmrs.timePassed;
480
+ perc = 100 - Math.ceil(dur2 * 100 / dur1);
481
+
482
+ if (opts.auto.progress)
483
+ {
484
+ tmrs.progress = setInterval(function() {
485
+ var pasd = getTime() - tmrs.startTime + tmrs.timePassed,
486
+ perc = Math.ceil(pasd * 100 / dur1);
487
+ opts.auto.progress.updater.call(opts.auto.progress.bar[0], perc);
488
+ }, opts.auto.progress.interval);
489
+ }
490
+
491
+ tmrs.auto = setTimeout(function() {
492
+ if (opts.auto.progress)
493
+ {
494
+ opts.auto.progress.updater.call(opts.auto.progress.bar[0], 100);
495
+ }
496
+ if (opts.auto.onTimeoutEnd)
497
+ {
498
+ opts.auto.onTimeoutEnd.call($tt0, perc, dur2);
499
+ }
500
+ if (crsl.isScrolling)
501
+ {
502
+ $cfs.trigger(cf_e('play', conf), dir);
503
+ }
504
+ else
505
+ {
506
+ $cfs.trigger(cf_e(dir, conf), opts.auto);
507
+ }
508
+ }, dur2);
509
+
510
+ // pause start callback
511
+ if (opts.auto.onTimeoutStart)
512
+ {
513
+ opts.auto.onTimeoutStart.call($tt0, perc, dur2);
514
+ }
515
+
516
+ return true;
517
+ });
518
+
519
+
520
+ // resume event
521
+ $cfs.bind(cf_e('resume', conf), function(e) {
522
+ e.stopPropagation();
523
+ if (scrl.isStopped)
524
+ {
525
+ scrl.isStopped = false;
526
+ crsl.isPaused = false;
527
+ crsl.isScrolling = true;
528
+ scrl.startTime = getTime();
529
+ sc_startScroll(scrl, conf);
530
+ }
531
+ else
532
+ {
533
+ $cfs.trigger(cf_e('play', conf));
534
+ }
535
+ return true;
536
+ });
537
+
538
+
539
+ // prev + next events
540
+ $cfs.bind(cf_e('prev', conf)+' '+cf_e('next', conf), function(e, obj, num, clb, que) {
541
+ e.stopPropagation();
542
+
543
+ // stopped or hidden carousel, don't scroll, don't queue
544
+ if (crsl.isStopped || $cfs.is(':hidden'))
545
+ {
546
+ e.stopImmediatePropagation();
547
+ return debug(conf, 'Carousel stopped or hidden: Not scrolling.');
548
+ }
549
+
550
+ // not enough items
551
+ var minimum = (is_number(opts.items.minimum)) ? opts.items.minimum : opts.items.visible + 1;
552
+ if (minimum > itms.total)
553
+ {
554
+ e.stopImmediatePropagation();
555
+ return debug(conf, 'Not enough items ('+itms.total+' total, '+minimum+' needed): Not scrolling.');
556
+ }
557
+
558
+ // get config
559
+ var v = [obj, num, clb, que],
560
+ t = ['object', 'number/string', 'function', 'boolean'],
561
+ a = cf_sortParams(v, t);
562
+
563
+ obj = a[0];
564
+ num = a[1];
565
+ clb = a[2];
566
+ que = a[3];
567
+
568
+ var eType = e.type.slice(conf.events.prefix.length);
569
+
570
+ if (!is_object(obj))
571
+ {
572
+ obj = {};
573
+ }
574
+ if (is_function(clb))
575
+ {
576
+ obj.onAfter = clb;
577
+ }
578
+ if (is_boolean(que))
579
+ {
580
+ obj.queue = que;
581
+ }
582
+ obj = $.extend(true, {}, opts[eType], obj);
583
+
584
+ // test conditions callback
585
+ if (obj.conditions && !obj.conditions.call($tt0, eType))
586
+ {
587
+ e.stopImmediatePropagation();
588
+ return debug(conf, 'Callback "conditions" returned false.');
589
+ }
590
+
591
+ if (!is_number(num))
592
+ {
593
+ if (opts.items.filter != '*')
594
+ {
595
+ num = 'visible';
596
+ }
597
+ else
598
+ {
599
+ var arr = [num, obj.items, opts[eType].items];
600
+ for (var a = 0, l = arr.length; a < l; a++)
601
+ {
602
+ if (is_number(arr[a]) || arr[a] == 'page' || arr[a] == 'visible') {
603
+ num = arr[a];
604
+ break;
605
+ }
606
+ }
607
+ }
608
+ switch(num) {
609
+ case 'page':
610
+ e.stopImmediatePropagation();
611
+ return $cfs.triggerHandler(cf_e(eType+'Page', conf), [obj, clb]);
612
+ break;
613
+
614
+ case 'visible':
615
+ if (!opts.items.visibleConf.variable && opts.items.filter == '*')
616
+ {
617
+ num = opts.items.visible;
618
+ }
619
+ break;
620
+ }
621
+ }
622
+
623
+ // resume animation, add current to queue
624
+ if (scrl.isStopped)
625
+ {
626
+ $cfs.trigger(cf_e('resume', conf));
627
+ $cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);
628
+ e.stopImmediatePropagation();
629
+ return debug(conf, 'Carousel resumed scrolling.');
630
+ }
631
+
632
+ // queue if scrolling
633
+ if (obj.duration > 0)
634
+ {
635
+ if (crsl.isScrolling)
636
+ {
637
+ if (obj.queue)
638
+ {
639
+ if (obj.queue == 'last')
640
+ {
641
+ queu = [];
642
+ }
643
+ if (obj.queue != 'first' || queu.length == 0)
644
+ {
645
+ $cfs.trigger(cf_e('queue', conf), [eType, [obj, num, clb]]);
646
+ }
647
+ }
648
+ e.stopImmediatePropagation();
649
+ return debug(conf, 'Carousel currently scrolling.');
650
+ }
651
+ }
652
+
653
+ tmrs.timePassed = 0;
654
+ $cfs.trigger(cf_e('slide_'+eType, conf), [obj, num]);
655
+
656
+ // synchronise
657
+ if (opts.synchronise)
658
+ {
659
+ var s = opts.synchronise,
660
+ c = [obj, num];
661
+
662
+ for (var j = 0, l = s.length; j < l; j++) {
663
+ var d = eType;
664
+ if (!s[j][2])
665
+ {
666
+ d = (d == 'prev') ? 'next' : 'prev';
667
+ }
668
+ if (!s[j][1])
669
+ {
670
+ c[0] = s[j][0].triggerHandler('_cfs_triggerEvent', ['configuration', d]);
671
+ }
672
+ c[1] = num + s[j][3];
673
+ s[j][0].trigger('_cfs_triggerEvent', ['slide_'+d, c]);
674
+ }
675
+ }
676
+ return true;
677
+ });
678
+
679
+
680
+ // prev event
681
+ $cfs.bind(cf_e('slide_prev', conf), function(e, sO, nI) {
682
+ e.stopPropagation();
683
+ var a_itm = $cfs.children();
684
+
685
+ // non-circular at start, scroll to end
686
+ if (!opts.circular)
687
+ {
688
+ if (itms.first == 0)
689
+ {
690
+ if (opts.infinite)
691
+ {
692
+ $cfs.trigger(cf_e('next', conf), itms.total-1);
693
+ }
694
+ return e.stopImmediatePropagation();
695
+ }
696
+ }
697
+
698
+ sz_resetMargin(a_itm, opts);
699
+
700
+ // find number of items to scroll
701
+ if (!is_number(nI))
702
+ {
703
+ if (opts.items.visibleConf.variable)
704
+ {
705
+ nI = gn_getVisibleItemsPrev(a_itm, opts, itms.total-1);
706
+ }
707
+ else if (opts.items.filter != '*')
708
+ {
709
+ var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts);
710
+ nI = gn_getScrollItemsPrevFilter(a_itm, opts, itms.total-1, xI);
711
+ }
712
+ else
713
+ {
714
+ nI = opts.items.visible;
715
+ }
716
+ nI = cf_getAdjust(nI, opts, sO.items, $tt0);
717
+ }
718
+
719
+ // prevent non-circular from scrolling to far
720
+ if (!opts.circular)
721
+ {
722
+ if (itms.total - nI < itms.first)
723
+ {
724
+ nI = itms.total - itms.first;
725
+ }
726
+ }
727
+
728
+ // set new number of visible items
729
+ opts.items.visibleConf.old = opts.items.visible;
730
+ if (opts.items.visibleConf.variable)
731
+ {
732
+ var vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0);
733
+ if (opts.items.visible+nI <= vI && nI < itms.total)
734
+ {
735
+ nI++;
736
+ vI = cf_getItemsAdjust(gn_getVisibleItemsNext(a_itm, opts, itms.total-nI), opts, opts.items.visibleConf.adjust, $tt0);
737
+ }
738
+ opts.items.visible = vI;
739
+ }
740
+ else if (opts.items.filter != '*')
741
+ {
742
+ var vI = gn_getVisibleItemsNextFilter(a_itm, opts, itms.total-nI);
743
+ opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
744
+ }
745
+
746
+ sz_resetMargin(a_itm, opts, true);
747
+
748
+ // scroll 0, don't scroll
749
+ if (nI == 0)
750
+ {
751
+ e.stopImmediatePropagation();
752
+ return debug(conf, '0 items to scroll: Not scrolling.');
753
+ }
754
+ debug(conf, 'Scrolling '+nI+' items backward.');
755
+
756
+
757
+ // save new config
758
+ itms.first += nI;
759
+ while (itms.first >= itms.total)
760
+ {
761
+ itms.first -= itms.total;
762
+ }
763
+
764
+ // non-circular callback
765
+ if (!opts.circular)
766
+ {
767
+ if (itms.first == 0 && sO.onEnd)
768
+ {
769
+ sO.onEnd.call($tt0, 'prev');
770
+ }
771
+ if (!opts.infinite)
772
+ {
773
+ nv_enableNavi(opts, itms.first, conf);
774
+ }
775
+ }
776
+
777
+ // rearrange items
778
+ $cfs.children().slice(itms.total-nI, itms.total).prependTo($cfs);
779
+ if (itms.total < opts.items.visible + nI)
780
+ {
781
+ $cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);
782
+ }
783
+
784
+ // the needed items
785
+ var a_itm = $cfs.children(),
786
+ i_old = gi_getOldItemsPrev(a_itm, opts, nI),
787
+ i_new = gi_getNewItemsPrev(a_itm, opts),
788
+ i_cur_l = a_itm.eq(nI-1),
789
+ i_old_l = i_old.last(),
790
+ i_new_l = i_new.last();
791
+
792
+ sz_resetMargin(a_itm, opts);
793
+
794
+ var pL = 0,
795
+ pR = 0;
796
+
797
+ if (opts.align)
798
+ {
799
+ var p = cf_getAlignPadding(i_new, opts);
800
+ pL = p[0];
801
+ pR = p[1];
802
+ }
803
+ var oL = (pL < 0) ? opts.padding[opts.d[3]] : 0;
804
+
805
+ // hide items for fx directscroll
806
+ var hiddenitems = false,
807
+ i_skp = $();
808
+ if (opts.items.visible < nI)
809
+ {
810
+ i_skp = a_itm.slice(opts.items.visibleConf.old, nI);
811
+ if (sO.fx == 'directscroll')
812
+ {
813
+ var orgW = opts.items[opts.d['width']];
814
+ hiddenitems = i_skp;
815
+ i_cur_l = i_new_l;
816
+ sc_hideHiddenItems(hiddenitems);
817
+ opts.items[opts.d['width']] = 'variable';
818
+ }
819
+ }
820
+
821
+ // save new sizes
822
+ var $cf2 = false,
823
+ i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),
824
+ w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding),
825
+ i_siz_vis = 0,
826
+ a_cfs = {},
827
+ a_wsz = {},
828
+ a_cur = {},
829
+ a_old = {},
830
+ a_new = {},
831
+ a_lef = {},
832
+ a_lef_vis = {},
833
+ a_dur = sc_getDuration(sO, opts, nI, i_siz);
834
+
835
+ switch(sO.fx)
836
+ {
837
+ case 'cover':
838
+ case 'cover-fade':
839
+ i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visible), opts, 'width');
840
+ break;
841
+ }
842
+
843
+ if (hiddenitems)
844
+ {
845
+ opts.items[opts.d['width']] = orgW;
846
+ }
847
+
848
+ sz_resetMargin(a_itm, opts, true);
849
+ if (pR >= 0)
850
+ {
851
+ sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]);
852
+ }
853
+ if (pL >= 0)
854
+ {
855
+ sz_resetMargin(i_cur_l, opts, opts.padding[opts.d[3]]);
856
+ }
857
+
858
+ if (opts.align)
859
+ {
860
+ opts.padding[opts.d[1]] = pR;
861
+ opts.padding[opts.d[3]] = pL;
862
+ }
863
+
864
+ a_lef[opts.d['left']] = -(i_siz - oL);
865
+ a_lef_vis[opts.d['left']] = -(i_siz_vis - oL);
866
+ a_wsz[opts.d['left']] = w_siz[opts.d['width']];
867
+
868
+ // scrolling functions
869
+ var _s_wrapper = function() {},
870
+ _a_wrapper = function() {},
871
+ _s_paddingold = function() {},
872
+ _a_paddingold = function() {},
873
+ _s_paddingnew = function() {},
874
+ _a_paddingnew = function() {},
875
+ _s_paddingcur = function() {},
876
+ _a_paddingcur = function() {},
877
+ _onafter = function() {},
878
+ _moveitems = function() {},
879
+ _position = function() {};
880
+
881
+ // clone carousel
882
+ switch(sO.fx)
883
+ {
884
+ case 'crossfade':
885
+ case 'cover':
886
+ case 'cover-fade':
887
+ case 'uncover':
888
+ case 'uncover-fade':
889
+ $cf2 = $cfs.clone(true).appendTo($wrp);
890
+ break;
891
+ }
892
+ switch(sO.fx)
893
+ {
894
+ case 'crossfade':
895
+ case 'uncover':
896
+ case 'uncover-fade':
897
+ $cf2.children().slice(0, nI).remove();
898
+ $cf2.children().slice(opts.items.visibleConf.old).remove();
899
+ break;
900
+
901
+ case 'cover':
902
+ case 'cover-fade':
903
+ $cf2.children().slice(opts.items.visible).remove();
904
+ $cf2.css(a_lef_vis);
905
+ break;
906
+ }
907
+
908
+ $cfs.css(a_lef);
909
+
910
+ // reset all scrolls
911
+ scrl = sc_setScroll(a_dur, sO.easing, conf);
912
+
913
+ // animate / set carousel
914
+ a_cfs[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0;
915
+
916
+ // animate / set wrapper
917
+ if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable')
918
+ {
919
+ _s_wrapper = function() {
920
+ $wrp.css(w_siz);
921
+ };
922
+ _a_wrapper = function() {
923
+ scrl.anims.push([$wrp, w_siz]);
924
+ };
925
+ }
926
+
927
+ // animate / set items
928
+ if (opts.usePadding)
929
+ {
930
+ if (i_new_l.not(i_cur_l).length)
931
+ {
932
+ a_cur[opts.d['marginRight']] = i_cur_l.data('_cfs_origCssMargin');
933
+
934
+ if (pL < 0)
935
+ {
936
+ i_cur_l.css(a_cur);
937
+ }
938
+ else
939
+ {
940
+ _s_paddingcur = function() {
941
+ i_cur_l.css(a_cur);
942
+ };
943
+ _a_paddingcur = function() {
944
+ scrl.anims.push([i_cur_l, a_cur]);
945
+ };
946
+ }
947
+ }
948
+ switch(sO.fx)
949
+ {
950
+ case 'cover':
951
+ case 'cover-fade':
952
+ $cf2.children().eq(nI-1).css(a_cur);
953
+ break;
954
+ }
955
+
956
+ if (i_new_l.not(i_old_l).length)
957
+ {
958
+ a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin');
959
+ _s_paddingold = function() {
960
+ i_old_l.css(a_old);
961
+ };
962
+ _a_paddingold = function() {
963
+ scrl.anims.push([i_old_l, a_old]);
964
+ };
965
+ }
966
+
967
+ if (pR >= 0)
968
+ {
969
+ a_new[opts.d['marginRight']] = i_new_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]];
970
+ _s_paddingnew = function() {
971
+ i_new_l.css(a_new);
972
+ };
973
+ _a_paddingnew = function() {
974
+ scrl.anims.push([i_new_l, a_new]);
975
+ };
976
+ }
977
+ }
978
+
979
+ // set position
980
+ _position = function() {
981
+ $cfs.css(a_cfs);
982
+ };
983
+
984
+
985
+ var overFill = opts.items.visible+nI-itms.total;
986
+
987
+ // rearrange items
988
+ _moveitems = function() {
989
+ if (overFill > 0)
990
+ {
991
+ $cfs.children().slice(itms.total).remove();
992
+ i_old = $( $cfs.children().slice(itms.total-(opts.items.visible-overFill)).get().concat( $cfs.children().slice(0, overFill).get() ) );
993
+ }
994
+ sc_showHiddenItems(hiddenitems);
995
+
996
+ if (opts.usePadding)
997
+ {
998
+ var l_itm = $cfs.children().eq(opts.items.visible+nI-1);
999
+ l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin'));
1000
+ }
1001
+ };
1002
+
1003
+
1004
+ var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'prev', a_dur, w_siz);
1005
+
1006
+ // fire onAfter callbacks
1007
+ _onafter = function() {
1008
+ sc_afterScroll($cfs, $cf2, sO);
1009
+ crsl.isScrolling = false;
1010
+ clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk);
1011
+ queu = sc_fireQueue($cfs, queu, conf);
1012
+
1013
+ if (!crsl.isPaused)
1014
+ {
1015
+ $cfs.trigger(cf_e('play', conf));
1016
+ }
1017
+ };
1018
+
1019
+ // fire onBefore callback
1020
+ crsl.isScrolling = true;
1021
+ tmrs = sc_clearTimers(tmrs);
1022
+ clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk);
1023
+
1024
+ switch(sO.fx)
1025
+ {
1026
+ case 'none':
1027
+ $cfs.css(a_cfs);
1028
+ _s_wrapper();
1029
+ _s_paddingold();
1030
+ _s_paddingnew();
1031
+ _s_paddingcur();
1032
+ _position();
1033
+ _moveitems();
1034
+ _onafter();
1035
+ break;
1036
+
1037
+ case 'fade':
1038
+ scrl.anims.push([$cfs, { 'opacity': 0 }, function() {
1039
+ _s_wrapper();
1040
+ _s_paddingold();
1041
+ _s_paddingnew();
1042
+ _s_paddingcur();
1043
+ _position();
1044
+ _moveitems();
1045
+ scrl = sc_setScroll(a_dur, sO.easing, conf);
1046
+ scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
1047
+ sc_startScroll(scrl, conf);
1048
+ }]);
1049
+ break;
1050
+
1051
+ case 'crossfade':
1052
+ $cfs.css({ 'opacity': 0 });
1053
+ scrl.anims.push([$cf2, { 'opacity': 0 }]);
1054
+ scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
1055
+ _a_wrapper();
1056
+ _s_paddingold();
1057
+ _s_paddingnew();
1058
+ _s_paddingcur();
1059
+ _position();
1060
+ _moveitems();
1061
+ break;
1062
+
1063
+ case 'cover':
1064
+ scrl.anims.push([$cf2, a_cfs, function() {
1065
+ _s_paddingold();
1066
+ _s_paddingnew();
1067
+ _s_paddingcur();
1068
+ _position();
1069
+ _moveitems();
1070
+ _onafter();
1071
+ }]);
1072
+ _a_wrapper();
1073
+ break;
1074
+
1075
+ case 'cover-fade':
1076
+ scrl.anims.push([$cfs, { 'opacity': 0 }]);
1077
+ scrl.anims.push([$cf2, a_cfs, function() {
1078
+ _s_paddingold();
1079
+ _s_paddingnew();
1080
+ _s_paddingcur();
1081
+ _position();
1082
+ _moveitems();
1083
+ _onafter();
1084
+ }]);
1085
+ _a_wrapper();
1086
+ break;
1087
+
1088
+ case 'uncover':
1089
+ scrl.anims.push([$cf2, a_wsz, _onafter]);
1090
+ _a_wrapper();
1091
+ _s_paddingold();
1092
+ _s_paddingnew();
1093
+ _s_paddingcur();
1094
+ _position();
1095
+ _moveitems();
1096
+ break;
1097
+
1098
+ case 'uncover-fade':
1099
+ $cfs.css({ 'opacity': 0 });
1100
+ scrl.anims.push([$cfs, { 'opacity': 1 }]);
1101
+ scrl.anims.push([$cf2, a_wsz, _onafter]);
1102
+ _a_wrapper();
1103
+ _s_paddingold();
1104
+ _s_paddingnew();
1105
+ _s_paddingcur();
1106
+ _position();
1107
+ _moveitems();
1108
+ break;
1109
+
1110
+ default:
1111
+ scrl.anims.push([$cfs, a_cfs, function() {
1112
+ _moveitems();
1113
+ _onafter();
1114
+ }]);
1115
+ _a_wrapper();
1116
+ _a_paddingold();
1117
+ _a_paddingnew();
1118
+ _a_paddingcur();
1119
+ break;
1120
+ }
1121
+
1122
+ sc_startScroll(scrl, conf);
1123
+ cf_setCookie(opts.cookie, $cfs, conf);
1124
+
1125
+ $cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);
1126
+
1127
+ return true;
1128
+ });
1129
+
1130
+
1131
+ // next event
1132
+ $cfs.bind(cf_e('slide_next', conf), function(e, sO, nI) {
1133
+ e.stopPropagation();
1134
+ var a_itm = $cfs.children();
1135
+
1136
+ // non-circular at end, scroll to start
1137
+ if (!opts.circular)
1138
+ {
1139
+ if (itms.first == opts.items.visible)
1140
+ {
1141
+ if (opts.infinite)
1142
+ {
1143
+ $cfs.trigger(cf_e('prev', conf), itms.total-1);
1144
+ }
1145
+ return e.stopImmediatePropagation();
1146
+ }
1147
+ }
1148
+
1149
+ sz_resetMargin(a_itm, opts);
1150
+
1151
+ // find number of items to scroll
1152
+ if (!is_number(nI))
1153
+ {
1154
+ if (opts.items.filter != '*')
1155
+ {
1156
+ var xI = (is_number(sO.items)) ? sO.items : gn_getVisibleOrg($cfs, opts);
1157
+ nI = gn_getScrollItemsNextFilter(a_itm, opts, 0, xI);
1158
+ }
1159
+ else
1160
+ {
1161
+ nI = opts.items.visible;
1162
+ }
1163
+ nI = cf_getAdjust(nI, opts, sO.items, $tt0);
1164
+ }
1165
+
1166
+ var lastItemNr = (itms.first == 0) ? itms.total : itms.first;
1167
+
1168
+ // prevent non-circular from scrolling to far
1169
+ if (!opts.circular)
1170
+ {
1171
+ if (opts.items.visibleConf.variable)
1172
+ {
1173
+ var vI = gn_getVisibleItemsNext(a_itm, opts, nI),
1174
+ xI = gn_getVisibleItemsPrev(a_itm, opts, lastItemNr-1);
1175
+ }
1176
+ else
1177
+ {
1178
+ var vI = opts.items.visible,
1179
+ xI = opts.items.visible;
1180
+ }
1181
+
1182
+ if (nI + vI > lastItemNr)
1183
+ {
1184
+ nI = lastItemNr - xI;
1185
+ }
1186
+ }
1187
+
1188
+ // set new number of visible items
1189
+ opts.items.visibleConf.old = opts.items.visible;
1190
+ if (opts.items.visibleConf.variable)
1191
+ {
1192
+ var vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0);
1193
+ while (opts.items.visible-nI >= vI && nI < itms.total)
1194
+ {
1195
+ nI++;
1196
+ vI = cf_getItemsAdjust(gn_getVisibleItemsNextTestCircular(a_itm, opts, nI, lastItemNr), opts, opts.items.visibleConf.adjust, $tt0);
1197
+ }
1198
+ opts.items.visible = vI;
1199
+ }
1200
+ else if (opts.items.filter != '*')
1201
+ {
1202
+ var vI = gn_getVisibleItemsNextFilter(a_itm, opts, nI);
1203
+ opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
1204
+ }
1205
+
1206
+ sz_resetMargin(a_itm, opts, true);
1207
+
1208
+ // scroll 0, don't scroll
1209
+ if (nI == 0)
1210
+ {
1211
+ e.stopImmediatePropagation();
1212
+ return debug(conf, '0 items to scroll: Not scrolling.');
1213
+ }
1214
+ debug(conf, 'Scrolling '+nI+' items forward.');
1215
+
1216
+
1217
+ // save new config
1218
+ itms.first -= nI;
1219
+ while (itms.first < 0)
1220
+ {
1221
+ itms.first += itms.total;
1222
+ }
1223
+
1224
+ // non-circular callback
1225
+ if (!opts.circular)
1226
+ {
1227
+ if (itms.first == opts.items.visible && sO.onEnd)
1228
+ {
1229
+ sO.onEnd.call($tt0, 'next');
1230
+ }
1231
+ if (!opts.infinite)
1232
+ {
1233
+ nv_enableNavi(opts, itms.first, conf);
1234
+ }
1235
+ }
1236
+
1237
+ // rearrange items
1238
+ if (itms.total < opts.items.visible+nI)
1239
+ {
1240
+ $cfs.children().slice(0, (opts.items.visible+nI)-itms.total).clone(true).appendTo($cfs);
1241
+ }
1242
+
1243
+ // the needed items
1244
+ var a_itm = $cfs.children(),
1245
+ i_old = gi_getOldItemsNext(a_itm, opts),
1246
+ i_new = gi_getNewItemsNext(a_itm, opts, nI),
1247
+ i_cur_l = a_itm.eq(nI-1),
1248
+ i_old_l = i_old.last(),
1249
+ i_new_l = i_new.last();
1250
+
1251
+ sz_resetMargin(a_itm, opts);
1252
+
1253
+ var pL = 0,
1254
+ pR = 0;
1255
+
1256
+ if (opts.align)
1257
+ {
1258
+ var p = cf_getAlignPadding(i_new, opts);
1259
+ pL = p[0];
1260
+ pR = p[1];
1261
+ }
1262
+
1263
+ // hide items for fx directscroll
1264
+ var hiddenitems = false,
1265
+ i_skp = $();
1266
+ if (opts.items.visibleConf.old < nI)
1267
+ {
1268
+ i_skp = a_itm.slice(opts.items.visibleConf.old, nI);
1269
+ if (sO.fx == 'directscroll')
1270
+ {
1271
+ var orgW = opts.items[opts.d['width']];
1272
+ hiddenitems = i_skp;
1273
+ i_cur_l = i_old_l;
1274
+ sc_hideHiddenItems(hiddenitems);
1275
+ opts.items[opts.d['width']] = 'variable';
1276
+ }
1277
+ }
1278
+
1279
+ // save new sizes
1280
+ var $cf2 = false,
1281
+ i_siz = ms_getTotalSize(a_itm.slice(0, nI), opts, 'width'),
1282
+ w_siz = cf_mapWrapperSizes(ms_getSizes(i_new, opts, true), opts, !opts.usePadding),
1283
+ i_siz_vis = 0,
1284
+ a_cfs = {},
1285
+ a_cfs_vis = {},
1286
+ a_cur = {},
1287
+ a_old = {},
1288
+ a_lef = {},
1289
+ a_dur = sc_getDuration(sO, opts, nI, i_siz);
1290
+
1291
+ switch(sO.fx)
1292
+ {
1293
+ case 'uncover':
1294
+ case 'uncover-fade':
1295
+ i_siz_vis = ms_getTotalSize(a_itm.slice(0, opts.items.visibleConf.old), opts, 'width');
1296
+ break;
1297
+ }
1298
+
1299
+ if (hiddenitems)
1300
+ {
1301
+ opts.items[opts.d['width']] = orgW;
1302
+ }
1303
+
1304
+ if (opts.align)
1305
+ {
1306
+ if (opts.padding[opts.d[1]] < 0)
1307
+ {
1308
+ opts.padding[opts.d[1]] = 0;
1309
+ }
1310
+ }
1311
+ sz_resetMargin(a_itm, opts, true);
1312
+ sz_resetMargin(i_old_l, opts, opts.padding[opts.d[1]]);
1313
+
1314
+ if (opts.align)
1315
+ {
1316
+ opts.padding[opts.d[1]] = pR;
1317
+ opts.padding[opts.d[3]] = pL;
1318
+ }
1319
+
1320
+ a_lef[opts.d['left']] = (opts.usePadding) ? opts.padding[opts.d[3]] : 0;
1321
+
1322
+ // scrolling functions
1323
+ var _s_wrapper = function() {},
1324
+ _a_wrapper = function() {},
1325
+ _s_paddingold = function() {},
1326
+ _a_paddingold = function() {},
1327
+ _s_paddingcur = function() {},
1328
+ _a_paddingcur = function() {},
1329
+ _onafter = function() {},
1330
+ _moveitems = function() {},
1331
+ _position = function() {};
1332
+
1333
+ // clone carousel
1334
+ switch(sO.fx)
1335
+ {
1336
+ case 'crossfade':
1337
+ case 'cover':
1338
+ case 'cover-fade':
1339
+ case 'uncover':
1340
+ case 'uncover-fade':
1341
+ $cf2 = $cfs.clone(true).appendTo($wrp);
1342
+ $cf2.children().slice(opts.items.visibleConf.old).remove();
1343
+ break;
1344
+ }
1345
+ switch(sO.fx)
1346
+ {
1347
+ case 'crossfade':
1348
+ case 'cover':
1349
+ case 'cover-fade':
1350
+ $cfs.css('zIndex', 1);
1351
+ $cf2.css('zIndex', 0);
1352
+ break;
1353
+ }
1354
+
1355
+ // reset all scrolls
1356
+ scrl = sc_setScroll(a_dur, sO.easing, conf);
1357
+
1358
+ // animate / set carousel
1359
+ a_cfs[opts.d['left']] = -i_siz;
1360
+ a_cfs_vis[opts.d['left']] = -i_siz_vis;
1361
+
1362
+ if (pL < 0)
1363
+ {
1364
+ a_cfs[opts.d['left']] += pL;
1365
+ }
1366
+
1367
+ // animate / set wrapper
1368
+ if (opts[opts.d['width']] == 'variable' || opts[opts.d['height']] == 'variable')
1369
+ {
1370
+ _s_wrapper = function() {
1371
+ $wrp.css(w_siz);
1372
+ };
1373
+ _a_wrapper = function() {
1374
+ scrl.anims.push([$wrp, w_siz]);
1375
+ };
1376
+ }
1377
+
1378
+ // animate / set items
1379
+ if (opts.usePadding)
1380
+ {
1381
+ var i_new_l_m = i_new_l.data('_cfs_origCssMargin');
1382
+
1383
+ if (pR >= 0)
1384
+ {
1385
+ i_new_l_m += opts.padding[opts.d[1]];
1386
+ }
1387
+ i_new_l.css(opts.d['marginRight'], i_new_l_m);
1388
+
1389
+ if (i_cur_l.not(i_old_l).length)
1390
+ {
1391
+ a_old[opts.d['marginRight']] = i_old_l.data('_cfs_origCssMargin');
1392
+ }
1393
+ _s_paddingold = function() {
1394
+ i_old_l.css(a_old);
1395
+ };
1396
+ _a_paddingold = function() {
1397
+ scrl.anims.push([i_old_l, a_old]);
1398
+ };
1399
+
1400
+ var i_cur_l_m = i_cur_l.data('_cfs_origCssMargin');
1401
+ if (pL > 0)
1402
+ {
1403
+ i_cur_l_m += opts.padding[opts.d[3]];
1404
+ }
1405
+
1406
+ a_cur[opts.d['marginRight']] = i_cur_l_m;
1407
+
1408
+ _s_paddingcur = function() {
1409
+ i_cur_l.css(a_cur);
1410
+ };
1411
+ _a_paddingcur = function() {
1412
+ scrl.anims.push([i_cur_l, a_cur]);
1413
+ };
1414
+ }
1415
+
1416
+ // set position
1417
+ _position = function() {
1418
+ $cfs.css(a_lef);
1419
+ };
1420
+
1421
+
1422
+ var overFill = opts.items.visible+nI-itms.total;
1423
+
1424
+ // rearrange items
1425
+ _moveitems = function() {
1426
+ if (overFill > 0)
1427
+ {
1428
+ $cfs.children().slice(itms.total).remove();
1429
+ }
1430
+ var l_itm = $cfs.children().slice(0, nI).appendTo($cfs).last();
1431
+ if (overFill > 0)
1432
+ {
1433
+ i_new = gi_getCurrentItems(a_itm, opts);
1434
+ }
1435
+ sc_showHiddenItems(hiddenitems);
1436
+
1437
+ if (opts.usePadding)
1438
+ {
1439
+ if (itms.total < opts.items.visible+nI) {
1440
+ var i_cur_l = $cfs.children().eq(opts.items.visible-1);
1441
+ i_cur_l.css(opts.d['marginRight'], i_cur_l.data('_cfs_origCssMargin') + opts.padding[opts.d[1]]);
1442
+ }
1443
+ l_itm.css(opts.d['marginRight'], l_itm.data('_cfs_origCssMargin'));
1444
+ }
1445
+ };
1446
+
1447
+
1448
+ var cb_arguments = sc_mapCallbackArguments(i_old, i_skp, i_new, nI, 'next', a_dur, w_siz);
1449
+
1450
+ // fire onAfter callbacks
1451
+ _onafter = function() {
1452
+ $cfs.css('zIndex', $cfs.data('_cfs_origCssZindex'));
1453
+ sc_afterScroll($cfs, $cf2, sO);
1454
+ crsl.isScrolling = false;
1455
+ clbk.onAfter = sc_fireCallbacks($tt0, sO, 'onAfter', cb_arguments, clbk);
1456
+ queu = sc_fireQueue($cfs, queu, conf);
1457
+
1458
+ if (!crsl.isPaused)
1459
+ {
1460
+ $cfs.trigger(cf_e('play', conf));
1461
+ }
1462
+ };
1463
+
1464
+ // fire onBefore callbacks
1465
+ crsl.isScrolling = true;
1466
+ tmrs = sc_clearTimers(tmrs);
1467
+ clbk.onBefore = sc_fireCallbacks($tt0, sO, 'onBefore', cb_arguments, clbk);
1468
+
1469
+ switch(sO.fx)
1470
+ {
1471
+ case 'none':
1472
+ $cfs.css(a_cfs);
1473
+ _s_wrapper();
1474
+ _s_paddingold();
1475
+ _s_paddingcur();
1476
+ _position();
1477
+ _moveitems();
1478
+ _onafter();
1479
+ break;
1480
+
1481
+ case 'fade':
1482
+ scrl.anims.push([$cfs, { 'opacity': 0 }, function() {
1483
+ _s_wrapper();
1484
+ _s_paddingold();
1485
+ _s_paddingcur();
1486
+ _position();
1487
+ _moveitems();
1488
+ scrl = sc_setScroll(a_dur, sO.easing, conf);
1489
+ scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
1490
+ sc_startScroll(scrl, conf);
1491
+ }]);
1492
+ break;
1493
+
1494
+ case 'crossfade':
1495
+ $cfs.css({ 'opacity': 0 });
1496
+ scrl.anims.push([$cf2, { 'opacity': 0 }]);
1497
+ scrl.anims.push([$cfs, { 'opacity': 1 }, _onafter]);
1498
+ _a_wrapper();
1499
+ _s_paddingold();
1500
+ _s_paddingcur();
1501
+ _position();
1502
+ _moveitems();
1503
+ break;
1504
+
1505
+ case 'cover':
1506
+ $cfs.css(opts.d['left'], $wrp[opts.d['width']]());
1507
+ scrl.anims.push([$cfs, a_lef, _onafter]);
1508
+ _a_wrapper();
1509
+ _s_paddingold();
1510
+ _s_paddingcur();
1511
+ _moveitems();
1512
+ break;
1513
+
1514
+ case 'cover-fade':
1515
+ $cfs.css(opts.d['left'], $wrp[opts.d['width']]());
1516
+ scrl.anims.push([$cf2, { 'opacity': 0 }]);
1517
+ scrl.anims.push([$cfs, a_lef, _onafter]);
1518
+ _a_wrapper();
1519
+ _s_paddingold();
1520
+ _s_paddingcur();
1521
+ _moveitems();
1522
+ break;
1523
+
1524
+ case 'uncover':
1525
+ scrl.anims.push([$cf2, a_cfs_vis, _onafter]);
1526
+ _a_wrapper();
1527
+ _s_paddingold();
1528
+ _s_paddingcur();
1529
+ _position();
1530
+ _moveitems();
1531
+ break;
1532
+
1533
+ case 'uncover-fade':
1534
+ $cfs.css({ 'opacity': 0 });
1535
+ scrl.anims.push([$cfs, { 'opacity': 1 }]);
1536
+ scrl.anims.push([$cf2, a_cfs_vis, _onafter]);
1537
+ _a_wrapper();
1538
+ _s_paddingold();
1539
+ _s_paddingcur();
1540
+ _position();
1541
+ _moveitems();
1542
+ break;
1543
+
1544
+ default:
1545
+ scrl.anims.push([$cfs, a_cfs, function() {
1546
+ _position();
1547
+ _moveitems();
1548
+ _onafter();
1549
+ }]);
1550
+ _a_wrapper();
1551
+ _a_paddingold();
1552
+ _a_paddingcur();
1553
+ break;
1554
+ }
1555
+
1556
+ sc_startScroll(scrl, conf);
1557
+ cf_setCookie(opts.cookie, $cfs, conf);
1558
+
1559
+ $cfs.trigger(cf_e('updatePageStatus', conf), [false, w_siz]);
1560
+
1561
+ return true;
1562
+ });
1563
+
1564
+
1565
+ // slideTo event
1566
+ $cfs.bind(cf_e('slideTo', conf), function(e, num, dev, org, obj, dir, clb) {
1567
+ e.stopPropagation();
1568
+
1569
+ var v = [num, dev, org, obj, dir, clb],
1570
+ t = ['string/number/object', 'number', 'boolean', 'object', 'string', 'function'],
1571
+ a = cf_sortParams(v, t);
1572
+
1573
+ obj = a[3];
1574
+ dir = a[4];
1575
+ clb = a[5];
1576
+
1577
+ num = gn_getItemIndex(a[0], a[1], a[2], itms, $cfs);
1578
+
1579
+ if (num == 0)
1580
+ {
1581
+ return false;
1582
+ }
1583
+ if (!is_object(obj))
1584
+ {
1585
+ obj = false;
1586
+ }
1587
+
1588
+ if (dir != 'prev' && dir != 'next')
1589
+ {
1590
+ if (opts.circular)
1591
+ {
1592
+ dir = (num <= itms.total / 2) ? 'next' : 'prev';
1593
+ }
1594
+ else
1595
+ {
1596
+ dir = (itms.first == 0 || itms.first > num) ? 'next' : 'prev';
1597
+ }
1598
+ }
1599
+
1600
+ if (dir == 'prev')
1601
+ {
1602
+ num = itms.total-num;
1603
+ }
1604
+ $cfs.trigger(cf_e(dir, conf), [obj, num, clb]);
1605
+
1606
+ return true;
1607
+ });
1608
+
1609
+
1610
+ // prevPage event
1611
+ $cfs.bind(cf_e('prevPage', conf), function(e, obj, clb) {
1612
+ e.stopPropagation();
1613
+ var cur = $cfs.triggerHandler(cf_e('currentPage', conf));
1614
+ return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur-1, obj, 'prev', clb]);
1615
+ });
1616
+
1617
+
1618
+ // nextPage event
1619
+ $cfs.bind(cf_e('nextPage', conf), function(e, obj, clb) {
1620
+ e.stopPropagation();
1621
+ var cur = $cfs.triggerHandler(cf_e('currentPage', conf));
1622
+ return $cfs.triggerHandler(cf_e('slideToPage', conf), [cur+1, obj, 'next', clb]);
1623
+ });
1624
+
1625
+
1626
+ // slideToPage event
1627
+ $cfs.bind(cf_e('slideToPage', conf), function(e, pag, obj, dir, clb) {
1628
+ e.stopPropagation();
1629
+ if (!is_number(pag))
1630
+ {
1631
+ pag = $cfs.triggerHandler(cf_e('currentPage', conf));
1632
+ }
1633
+ var ipp = opts.pagination.items || opts.items.visible,
1634
+ max = Math.ceil(itms.total / ipp)-1;
1635
+
1636
+ if (pag < 0)
1637
+ {
1638
+ pag = max;
1639
+ }
1640
+ if (pag > max)
1641
+ {
1642
+ pag = 0;
1643
+ }
1644
+ return $cfs.triggerHandler(cf_e('slideTo', conf), [pag*ipp, 0, true, obj, dir, clb]);
1645
+ });
1646
+
1647
+ // jumpToStart event
1648
+ $cfs.bind(cf_e('jumpToStart', conf), function(e, s) {
1649
+ e.stopPropagation();
1650
+ if (s)
1651
+ {
1652
+ s = gn_getItemIndex(s, 0, true, itms, $cfs);
1653
+ }
1654
+ else
1655
+ {
1656
+ s = 0;
1657
+ }
1658
+
1659
+ s += itms.first;
1660
+ if (s != 0)
1661
+ {
1662
+ if (itms.total > 0)
1663
+ {
1664
+ while (s > itms.total)
1665
+ {
1666
+ s -= itms.total;
1667
+ }
1668
+ }
1669
+ $cfs.prepend($cfs.children().slice(s, itms.total));
1670
+ }
1671
+ return true;
1672
+ });
1673
+
1674
+
1675
+ // synchronise event
1676
+ $cfs.bind(cf_e('synchronise', conf), function(e, s) {
1677
+ e.stopPropagation();
1678
+ if (s)
1679
+ {
1680
+ s = cf_getSynchArr(s);
1681
+ }
1682
+ else if (opts.synchronise)
1683
+ {
1684
+ s = opts.synchronise;
1685
+ }
1686
+ else
1687
+ {
1688
+ return debug(conf, 'No carousel to synchronise.');
1689
+ }
1690
+
1691
+ var n = $cfs.triggerHandler(cf_e('currentPosition', conf)),
1692
+ x = true;
1693
+
1694
+ for (var j = 0, l = s.length; j < l; j++)
1695
+ {
1696
+ if (!s[j][0].triggerHandler(cf_e('slideTo', conf), [n, s[j][3], true]))
1697
+ {
1698
+ x = false;
1699
+ }
1700
+ }
1701
+ return x;
1702
+ });
1703
+
1704
+
1705
+ // queue event
1706
+ $cfs.bind(cf_e('queue', conf), function(e, dir, opt) {
1707
+ e.stopPropagation();
1708
+ if (is_function(dir))
1709
+ {
1710
+ dir.call($tt0, queu);
1711
+ }
1712
+ else if (is_array(dir))
1713
+ {
1714
+ queu = dir;
1715
+ }
1716
+ else if (!is_undefined(dir))
1717
+ {
1718
+ queu.push([dir, opt]);
1719
+ }
1720
+ return queu;
1721
+ });
1722
+
1723
+
1724
+ // insertItem event
1725
+ $cfs.bind(cf_e('insertItem', conf), function(e, itm, num, org, dev) {
1726
+ e.stopPropagation();
1727
+
1728
+ var v = [itm, num, org, dev],
1729
+ t = ['string/object', 'string/number/object', 'boolean', 'number'],
1730
+ a = cf_sortParams(v, t);
1731
+
1732
+ itm = a[0];
1733
+ num = a[1];
1734
+ org = a[2];
1735
+ dev = a[3];
1736
+
1737
+ if (is_object(itm) && !is_jquery(itm))
1738
+ {
1739
+ itm = $(itm);
1740
+ }
1741
+ else if (is_string(itm))
1742
+ {
1743
+ itm = $(itm);
1744
+ }
1745
+ if (!is_jquery(itm) || itm.length == 0)
1746
+ {
1747
+ return debug(conf, 'Not a valid object.');
1748
+ }
1749
+
1750
+ if (is_undefined(num))
1751
+ {
1752
+ num = 'end';
1753
+ }
1754
+
1755
+ sz_storeMargin(itm, opts);
1756
+ sz_storeOrigCss(itm);
1757
+
1758
+ var orgNum = num,
1759
+ before = 'before';
1760
+
1761
+ if (num == 'end')
1762
+ {
1763
+ if (org)
1764
+ {
1765
+ if (itms.first == 0)
1766
+ {
1767
+ num = itms.total-1;
1768
+ before = 'after';
1769
+ }
1770
+ else
1771
+ {
1772
+ num = itms.first;
1773
+ itms.first += itm.length;
1774
+ }
1775
+ if (num < 0)
1776
+ {
1777
+ num = 0;
1778
+ }
1779
+ }
1780
+ else
1781
+ {
1782
+ num = itms.total-1;
1783
+ before = 'after';
1784
+ }
1785
+ }
1786
+ else
1787
+ {
1788
+ num = gn_getItemIndex(num, dev, org, itms, $cfs);
1789
+ }
1790
+
1791
+ var $cit = $cfs.children().eq(num);
1792
+ if ($cit.length)
1793
+ {
1794
+ $cit[before](itm);
1795
+ }
1796
+ else
1797
+ {
1798
+ debug(conf, 'Correct insert-position not found! Appending item to the end.');
1799
+ $cfs.append(itm);
1800
+ }
1801
+
1802
+ if (orgNum != 'end' && !org)
1803
+ {
1804
+ if (num < itms.first)
1805
+ {
1806
+ itms.first += itm.length;
1807
+ }
1808
+ }
1809
+ itms.total = $cfs.children().length;
1810
+ if (itms.first >= itms.total)
1811
+ {
1812
+ itms.first -= itms.total;
1813
+ }
1814
+
1815
+ $cfs.trigger(cf_e('updateSizes', conf));
1816
+ $cfs.trigger(cf_e('linkAnchors', conf));
1817
+
1818
+ return true;
1819
+ });
1820
+
1821
+
1822
+ // removeItem event
1823
+ $cfs.bind(cf_e('removeItem', conf), function(e, num, org, dev) {
1824
+ e.stopPropagation();
1825
+
1826
+ var v = [num, org, dev],
1827
+ t = ['string/number/object', 'boolean', 'number'],
1828
+ a = cf_sortParams(v, t);
1829
+
1830
+ num = a[0];
1831
+ org = a[1];
1832
+ dev = a[2];
1833
+
1834
+ var removed = false;
1835
+
1836
+ if (num instanceof $ && num.length > 1)
1837
+ {
1838
+ $removed = $();
1839
+ num.each(function(i, el) {
1840
+ var $rem = $cfs.trigger(cf_e('removeItem', conf), [$(this), org, dev]);
1841
+ if ( $rem )
1842
+ {
1843
+ $removed = $removed.add($rem);
1844
+ }
1845
+ });
1846
+ return $removed;
1847
+ }
1848
+
1849
+ if (is_undefined(num) || num == 'end')
1850
+ {
1851
+ $removed = $cfs.children().last();
1852
+ }
1853
+ else
1854
+ {
1855
+ num = gn_getItemIndex(num, dev, org, itms, $cfs);
1856
+ var $removed = $cfs.children().eq(num);
1857
+ if ( $removed.length )
1858
+ {
1859
+ if (num < itms.first)
1860
+ {
1861
+ itms.first -= $removed.length;
1862
+ }
1863
+ }
1864
+ }
1865
+ if ( $removed && $removed.length )
1866
+ {
1867
+ $removed.detach();
1868
+ itms.total = $cfs.children().length;
1869
+ $cfs.trigger(cf_e('updateSizes', conf));
1870
+ }
1871
+
1872
+ return $removed;
1873
+ });
1874
+
1875
+
1876
+ // onBefore and onAfter event
1877
+ $cfs.bind(cf_e('onBefore', conf)+' '+cf_e('onAfter', conf), function(e, fn) {
1878
+ e.stopPropagation();
1879
+ var eType = e.type.slice(conf.events.prefix.length);
1880
+ if (is_array(fn))
1881
+ {
1882
+ clbk[eType] = fn;
1883
+ }
1884
+ if (is_function(fn))
1885
+ {
1886
+ clbk[eType].push(fn);
1887
+ }
1888
+ return clbk[eType];
1889
+ });
1890
+
1891
+
1892
+ // currentPosition event
1893
+ $cfs.bind(cf_e('currentPosition', conf), function(e, fn) {
1894
+ e.stopPropagation();
1895
+ if (itms.first == 0)
1896
+ {
1897
+ var val = 0;
1898
+ }
1899
+ else
1900
+ {
1901
+ var val = itms.total - itms.first;
1902
+ }
1903
+ if (is_function(fn))
1904
+ {
1905
+ fn.call($tt0, val);
1906
+ }
1907
+ return val;
1908
+ });
1909
+
1910
+
1911
+ // currentPage event
1912
+ $cfs.bind(cf_e('currentPage', conf), function(e, fn) {
1913
+ e.stopPropagation();
1914
+ var ipp = opts.pagination.items || opts.items.visible,
1915
+ max = Math.ceil(itms.total/ipp-1),
1916
+ nr;
1917
+ if (itms.first == 0)
1918
+ {
1919
+ nr = 0;
1920
+ }
1921
+ else if (itms.first < itms.total % ipp)
1922
+ {
1923
+ nr = 0;
1924
+ }
1925
+ else if (itms.first == ipp && !opts.circular)
1926
+ {
1927
+ nr = max;
1928
+ }
1929
+ else
1930
+ {
1931
+ nr = Math.round((itms.total-itms.first)/ipp);
1932
+ }
1933
+ if (nr < 0)
1934
+ {
1935
+ nr = 0;
1936
+ }
1937
+ if (nr > max)
1938
+ {
1939
+ nr = max;
1940
+ }
1941
+ if (is_function(fn))
1942
+ {
1943
+ fn.call($tt0, nr);
1944
+ }
1945
+ return nr;
1946
+ });
1947
+
1948
+
1949
+ // currentVisible event
1950
+ $cfs.bind(cf_e('currentVisible', conf), function(e, fn) {
1951
+ e.stopPropagation();
1952
+ var $i = gi_getCurrentItems($cfs.children(), opts);
1953
+ if (is_function(fn))
1954
+ {
1955
+ fn.call($tt0, $i);
1956
+ }
1957
+ return $i;
1958
+ });
1959
+
1960
+
1961
+ // slice event
1962
+ $cfs.bind(cf_e('slice', conf), function(e, f, l, fn) {
1963
+ e.stopPropagation();
1964
+
1965
+ if (itms.total == 0)
1966
+ {
1967
+ return false;
1968
+ }
1969
+
1970
+ var v = [f, l, fn],
1971
+ t = ['number', 'number', 'function'],
1972
+ a = cf_sortParams(v, t);
1973
+
1974
+ f = (is_number(a[0])) ? a[0] : 0;
1975
+ l = (is_number(a[1])) ? a[1] : itms.total;
1976
+ fn = a[2];
1977
+
1978
+ f += itms.first;
1979
+ l += itms.first;
1980
+
1981
+ if (items.total > 0)
1982
+ {
1983
+ while (f > itms.total)
1984
+ {
1985
+ f -= itms.total;
1986
+ }
1987
+ while (l > itms.total)
1988
+ {
1989
+ l -= itms.total;
1990
+ }
1991
+ while (f < 0)
1992
+ {
1993
+ f += itms.total;
1994
+ }
1995
+ while (l < 0)
1996
+ {
1997
+ l += itms.total;
1998
+ }
1999
+ }
2000
+ var $iA = $cfs.children(),
2001
+ $i;
2002
+
2003
+ if (l > f)
2004
+ {
2005
+ $i = $iA.slice(f, l);
2006
+ }
2007
+ else
2008
+ {
2009
+ $i = $( $iA.slice(f, itms.total).get().concat( $iA.slice(0, l).get() ) );
2010
+ }
2011
+
2012
+ if (is_function(fn))
2013
+ {
2014
+ fn.call($tt0, $i);
2015
+ }
2016
+ return $i;
2017
+ });
2018
+
2019
+
2020
+ // isPaused, isStopped and isScrolling events
2021
+ $cfs.bind(cf_e('isPaused', conf)+' '+cf_e('isStopped', conf)+' '+cf_e('isScrolling', conf), function(e, fn) {
2022
+ e.stopPropagation();
2023
+ var eType = e.type.slice(conf.events.prefix.length),
2024
+ value = crsl[eType];
2025
+ if (is_function(fn))
2026
+ {
2027
+ fn.call($tt0, value);
2028
+ }
2029
+ return value;
2030
+ });
2031
+
2032
+
2033
+ // configuration event
2034
+ $cfs.bind(cf_e('configuration', conf), function(e, a, b, c) {
2035
+ e.stopPropagation();
2036
+ var reInit = false;
2037
+
2038
+ // return entire configuration-object
2039
+ if (is_function(a))
2040
+ {
2041
+ a.call($tt0, opts);
2042
+ }
2043
+ // set multiple options via object
2044
+ else if (is_object(a))
2045
+ {
2046
+ opts_orig = $.extend(true, {}, opts_orig, a);
2047
+ if (b !== false) reInit = true;
2048
+ else opts = $.extend(true, {}, opts, a);
2049
+
2050
+ }
2051
+ else if (!is_undefined(a))
2052
+ {
2053
+
2054
+ // callback function for specific option
2055
+ if (is_function(b))
2056
+ {
2057
+ var val = eval('opts.'+a);
2058
+ if (is_undefined(val))
2059
+ {
2060
+ val = '';
2061
+ }
2062
+ b.call($tt0, val);
2063
+ }
2064
+ // set individual option
2065
+ else if (!is_undefined(b))
2066
+ {
2067
+ if (typeof c !== 'boolean') c = true;
2068
+ eval('opts_orig.'+a+' = b');
2069
+ if (c !== false) reInit = true;
2070
+ else eval('opts.'+a+' = b');
2071
+ }
2072
+ // return value for specific option
2073
+ else
2074
+ {
2075
+ return eval('opts.'+a);
2076
+ }
2077
+ }
2078
+ if (reInit)
2079
+ {
2080
+ sz_resetMargin($cfs.children(), opts);
2081
+ FN._init(opts_orig);
2082
+ FN._bind_buttons();
2083
+ var sz = sz_setSizes($cfs, opts);
2084
+ $cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);
2085
+ }
2086
+ return opts;
2087
+ });
2088
+
2089
+
2090
+ // linkAnchors event
2091
+ $cfs.bind(cf_e('linkAnchors', conf), function(e, $con, sel) {
2092
+ e.stopPropagation();
2093
+
2094
+ if (is_undefined($con))
2095
+ {
2096
+ $con = $('body');
2097
+ }
2098
+ else if (is_string($con))
2099
+ {
2100
+ $con = $($con);
2101
+ }
2102
+ if (!is_jquery($con) || $con.length == 0)
2103
+ {
2104
+ return debug(conf, 'Not a valid object.');
2105
+ }
2106
+ if (!is_string(sel))
2107
+ {
2108
+ sel = 'a.caroufredsel';
2109
+ }
2110
+
2111
+ $con.find(sel).each(function() {
2112
+ var h = this.hash || '';
2113
+ if (h.length > 0 && $cfs.children().index($(h)) != -1)
2114
+ {
2115
+ $(this).unbind('click').click(function(e) {
2116
+ e.preventDefault();
2117
+ $cfs.trigger(cf_e('slideTo', conf), h);
2118
+ });
2119
+ }
2120
+ });
2121
+ return true;
2122
+ });
2123
+
2124
+
2125
+ // updatePageStatus event
2126
+ $cfs.bind(cf_e('updatePageStatus', conf), function(e, build, sizes) {
2127
+ e.stopPropagation();
2128
+ if (!opts.pagination.container)
2129
+ {
2130
+ return;
2131
+ }
2132
+
2133
+ var ipp = opts.pagination.items || opts.items.visible,
2134
+ pgs = Math.ceil(itms.total/ipp);
2135
+
2136
+ if (build)
2137
+ {
2138
+ if (opts.pagination.anchorBuilder)
2139
+ {
2140
+ opts.pagination.container.children().remove();
2141
+ opts.pagination.container.each(function() {
2142
+ for (var a = 0; a < pgs; a++)
2143
+ {
2144
+ var i = $cfs.children().eq( gn_getItemIndex(a*ipp, 0, true, itms, $cfs) );
2145
+ $(this).append(opts.pagination.anchorBuilder.call(i[0], a+1));
2146
+ }
2147
+ });
2148
+ }
2149
+ opts.pagination.container.each(function() {
2150
+ $(this).children().unbind(opts.pagination.event).each(function(a) {
2151
+ $(this).bind(opts.pagination.event, function(e) {
2152
+ e.preventDefault();
2153
+ $cfs.trigger(cf_e('slideTo', conf), [a*ipp, -opts.pagination.deviation, true, opts.pagination]);
2154
+ });
2155
+ });
2156
+ });
2157
+ }
2158
+
2159
+ var selected = $cfs.triggerHandler(cf_e('currentPage', conf)) + opts.pagination.deviation;
2160
+ if (selected >= pgs)
2161
+ {
2162
+ selected = 0;
2163
+ }
2164
+ if (selected < 0)
2165
+ {
2166
+ selected = pgs-1;
2167
+ }
2168
+ opts.pagination.container.each(function() {
2169
+ $(this).children().removeClass(cf_c('selected', conf)).eq(selected).addClass(cf_c('selected', conf));
2170
+ });
2171
+ return true;
2172
+ });
2173
+
2174
+
2175
+ // updateSizes event
2176
+ $cfs.bind(cf_e('updateSizes', conf), function(e) {
2177
+ var vI = opts.items.visible,
2178
+ a_itm = $cfs.children(),
2179
+ avail_primary = ms_getParentSize($wrp, opts, 'width');
2180
+
2181
+ itms.total = a_itm.length;
2182
+
2183
+ if (crsl.primarySizePercentage)
2184
+ {
2185
+ opts.maxDimension = avail_primary;
2186
+ opts[opts.d['width']] = ms_getPercentage(avail_primary, crsl.primarySizePercentage);
2187
+ }
2188
+ else
2189
+ {
2190
+ opts.maxDimension = ms_getMaxDimension(opts, avail_primary);
2191
+ }
2192
+
2193
+ if (opts.responsive)
2194
+ {
2195
+ opts.items.width = opts.items.sizesConf.width;
2196
+ opts.items.height = opts.items.sizesConf.height;
2197
+ opts = in_getResponsiveValues(opts, a_itm, avail_primary);
2198
+ vI = opts.items.visible;
2199
+ sz_setResponsiveSizes(opts, a_itm);
2200
+ }
2201
+ else if (opts.items.visibleConf.variable)
2202
+ {
2203
+ vI = gn_getVisibleItemsNext(a_itm, opts, 0);
2204
+ }
2205
+ else if (opts.items.filter != '*')
2206
+ {
2207
+ vI = gn_getVisibleItemsNextFilter(a_itm, opts, 0);
2208
+ }
2209
+
2210
+ if (!opts.circular && itms.first != 0 && vI > itms.first) {
2211
+ if (opts.items.visibleConf.variable)
2212
+ {
2213
+ var nI = gn_getVisibleItemsPrev(a_itm, opts, itms.first) - itms.first;
2214
+ }
2215
+ else if (opts.items.filter != '*')
2216
+ {
2217
+ var nI = gn_getVisibleItemsPrevFilter(a_itm, opts, itms.first) - itms.first;
2218
+ }
2219
+ else
2220
+ {
2221
+ var nI = opts.items.visible - itms.first;
2222
+ }
2223
+ debug(conf, 'Preventing non-circular: sliding '+nI+' items backward.');
2224
+ $cfs.trigger(cf_e('prev', conf), nI);
2225
+ }
2226
+
2227
+ opts.items.visible = cf_getItemsAdjust(vI, opts, opts.items.visibleConf.adjust, $tt0);
2228
+ opts.items.visibleConf.old = opts.items.visible;
2229
+ opts = in_getAlignPadding(opts, a_itm);
2230
+
2231
+ var sz = sz_setSizes($cfs, opts);
2232
+ $cfs.trigger(cf_e('updatePageStatus', conf), [true, sz]);
2233
+ nv_showNavi(opts, itms.total, conf);
2234
+ nv_enableNavi(opts, itms.first, conf);
2235
+
2236
+ return sz;
2237
+ });
2238
+
2239
+
2240
+ // destroy event
2241
+ $cfs.bind(cf_e('destroy', conf), function(e, orgOrder) {
2242
+ e.stopPropagation();
2243
+ tmrs = sc_clearTimers(tmrs);
2244
+
2245
+ $cfs.data('_cfs_isCarousel', false);
2246
+ $cfs.trigger(cf_e('finish', conf));
2247
+ if (orgOrder)
2248
+ {
2249
+ $cfs.trigger(cf_e('jumpToStart', conf));
2250
+ }
2251
+ sz_restoreOrigCss($cfs.children());
2252
+ sz_restoreOrigCss($cfs);
2253
+ FN._unbind_events();
2254
+ FN._unbind_buttons();
2255
+ if (conf.wrapper == 'parent')
2256
+ {
2257
+ sz_restoreOrigCss($wrp);
2258
+ }
2259
+ else
2260
+ {
2261
+ $wrp.replaceWith($cfs);
2262
+ }
2263
+
2264
+ return true;
2265
+ });
2266
+
2267
+
2268
+ // debug event
2269
+ $cfs.bind(cf_e('debug', conf), function(e) {
2270
+ debug(conf, 'Carousel width: ' + opts.width);
2271
+ debug(conf, 'Carousel height: ' + opts.height);
2272
+ debug(conf, 'Item widths: ' + opts.items.width);
2273
+ debug(conf, 'Item heights: ' + opts.items.height);
2274
+ debug(conf, 'Number of items visible: ' + opts.items.visible);
2275
+ if (opts.auto.play)
2276
+ {
2277
+ debug(conf, 'Number of items scrolled automatically: ' + opts.auto.items);
2278
+ }
2279
+ if (opts.prev.button)
2280
+ {
2281
+ debug(conf, 'Number of items scrolled backward: ' + opts.prev.items);
2282
+ }
2283
+ if (opts.next.button)
2284
+ {
2285
+ debug(conf, 'Number of items scrolled forward: ' + opts.next.items);
2286
+ }
2287
+ return conf.debug;
2288
+ });
2289
+
2290
+
2291
+ // triggerEvent, making prefixed and namespaced events accessible from outside
2292
+ $cfs.bind('_cfs_triggerEvent', function(e, n, o) {
2293
+ e.stopPropagation();
2294
+ return $cfs.triggerHandler(cf_e(n, conf), o);
2295
+ });
2296
+ }; // /bind_events
2297
+
2298
+
2299
+ FN._unbind_events = function() {
2300
+ $cfs.unbind(cf_e('', conf));
2301
+ $cfs.unbind(cf_e('', conf, false));
2302
+ $cfs.unbind('_cfs_triggerEvent');
2303
+ }; // /unbind_events
2304
+
2305
+
2306
+ FN._bind_buttons = function() {
2307
+ FN._unbind_buttons();
2308
+ nv_showNavi(opts, itms.total, conf);
2309
+ nv_enableNavi(opts, itms.first, conf);
2310
+
2311
+ if (opts.auto.pauseOnHover)
2312
+ {
2313
+ var pC = bt_pauseOnHoverConfig(opts.auto.pauseOnHover);
2314
+ $wrp.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
2315
+ .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
2316
+ }
2317
+
2318
+ // play button
2319
+ if (opts.auto.button)
2320
+ {
2321
+ opts.auto.button.bind(cf_e(opts.auto.event, conf, false), function(e) {
2322
+ e.preventDefault();
2323
+ var ev = false,
2324
+ pC = null;
2325
+
2326
+ if (crsl.isPaused)
2327
+ {
2328
+ ev = 'play';
2329
+ }
2330
+ else if (opts.auto.pauseOnEvent)
2331
+ {
2332
+ ev = 'pause';
2333
+ pC = bt_pauseOnHoverConfig(opts.auto.pauseOnEvent);
2334
+ }
2335
+ if (ev)
2336
+ {
2337
+ $cfs.trigger(cf_e(ev, conf), pC);
2338
+ }
2339
+ });
2340
+ }
2341
+
2342
+ // prev button
2343
+ if (opts.prev.button)
2344
+ {
2345
+ opts.prev.button.bind(cf_e(opts.prev.event, conf, false), function(e) {
2346
+ e.preventDefault();
2347
+ $cfs.trigger(cf_e('prev', conf));
2348
+ });
2349
+ if (opts.prev.pauseOnHover)
2350
+ {
2351
+ var pC = bt_pauseOnHoverConfig(opts.prev.pauseOnHover);
2352
+ opts.prev.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
2353
+ .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
2354
+ }
2355
+ }
2356
+
2357
+ // next butotn
2358
+ if (opts.next.button)
2359
+ {
2360
+ opts.next.button.bind(cf_e(opts.next.event, conf, false), function(e) {
2361
+ e.preventDefault();
2362
+ $cfs.trigger(cf_e('next', conf));
2363
+ });
2364
+ if (opts.next.pauseOnHover)
2365
+ {
2366
+ var pC = bt_pauseOnHoverConfig(opts.next.pauseOnHover);
2367
+ opts.next.button.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
2368
+ .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
2369
+ }
2370
+ }
2371
+
2372
+ // pagination
2373
+ if (opts.pagination.container)
2374
+ {
2375
+ if (opts.pagination.pauseOnHover)
2376
+ {
2377
+ var pC = bt_pauseOnHoverConfig(opts.pagination.pauseOnHover);
2378
+ opts.pagination.container.bind(cf_e('mouseenter', conf, false), function() { $cfs.trigger(cf_e('pause', conf), pC); })
2379
+ .bind(cf_e('mouseleave', conf, false), function() { $cfs.trigger(cf_e('resume', conf)); });
2380
+ }
2381
+ }
2382
+
2383
+ // prev/next keys
2384
+ if (opts.prev.key || opts.next.key)
2385
+ {
2386
+ $(document).bind(cf_e('keyup', conf, false, true, true), function(e) {
2387
+ var k = e.keyCode;
2388
+ if (k == opts.next.key)
2389
+ {
2390
+ e.preventDefault();
2391
+ $cfs.trigger(cf_e('next', conf));
2392
+ }
2393
+ if (k == opts.prev.key)
2394
+ {
2395
+ e.preventDefault();
2396
+ $cfs.trigger(cf_e('prev', conf));
2397
+ }
2398
+ });
2399
+ }
2400
+
2401
+ // pagination keys
2402
+ if (opts.pagination.keys)
2403
+ {
2404
+ $(document).bind(cf_e('keyup', conf, false, true, true), function(e) {
2405
+ var k = e.keyCode;
2406
+ if (k >= 49 && k < 58)
2407
+ {
2408
+ k = (k-49) * opts.items.visible;
2409
+ if (k <= itms.total)
2410
+ {
2411
+ e.preventDefault();
2412
+ $cfs.trigger(cf_e('slideTo', conf), [k, 0, true, opts.pagination]);
2413
+ }
2414
+ }
2415
+ });
2416
+ }
2417
+
2418
+ // swipe
2419
+ if ($.fn.swipe)
2420
+ {
2421
+ var isTouch = 'ontouchstart' in window;
2422
+ if ((isTouch && opts.swipe.onTouch) || (!isTouch && opts.swipe.onMouse))
2423
+ {
2424
+ var scP = $.extend(true, {}, opts.prev, opts.swipe),
2425
+ scN = $.extend(true, {}, opts.next, opts.swipe),
2426
+ swP = function() { $cfs.trigger(cf_e('prev', conf), [scP]) },
2427
+ swN = function() { $cfs.trigger(cf_e('next', conf), [scN]) };
2428
+
2429
+ switch (opts.direction)
2430
+ {
2431
+ case 'up':
2432
+ case 'down':
2433
+ opts.swipe.options.swipeUp = swN;
2434
+ opts.swipe.options.swipeDown = swP;
2435
+ break;
2436
+ default:
2437
+ opts.swipe.options.swipeLeft = swN;
2438
+ opts.swipe.options.swipeRight = swP;
2439
+ }
2440
+ if (crsl.swipe)
2441
+ {
2442
+ $cfs.swipe('destroy');
2443
+ }
2444
+ $wrp.swipe(opts.swipe.options);
2445
+ $wrp.css('cursor', 'move');
2446
+ crsl.swipe = true;
2447
+ }
2448
+ }
2449
+
2450
+ // mousewheel
2451
+ if ($.fn.mousewheel)
2452
+ {
2453
+
2454
+ if (opts.mousewheel)
2455
+ {
2456
+ var mcP = $.extend(true, {}, opts.prev, opts.mousewheel),
2457
+ mcN = $.extend(true, {}, opts.next, opts.mousewheel);
2458
+
2459
+ if (crsl.mousewheel)
2460
+ {
2461
+ $wrp.unbind(cf_e('mousewheel', conf, false));
2462
+ }
2463
+ $wrp.bind(cf_e('mousewheel', conf, false), function(e, delta) {
2464
+ e.preventDefault();
2465
+ if (delta > 0)
2466
+ {
2467
+ $cfs.trigger(cf_e('prev', conf), [mcP]);
2468
+ }
2469
+ else
2470
+ {
2471
+ $cfs.trigger(cf_e('next', conf), [mcN]);
2472
+ }
2473
+ });
2474
+ crsl.mousewheel = true;
2475
+ }
2476
+ }
2477
+
2478
+ if (opts.auto.play)
2479
+ {
2480
+ $cfs.trigger(cf_e('play', conf), opts.auto.delay);
2481
+ }
2482
+
2483
+ if (crsl.upDateOnWindowResize)
2484
+ {
2485
+ var resizeFn = function(e) {
2486
+ $cfs.trigger(cf_e('finish', conf));
2487
+ if (opts.auto.pauseOnResize && !crsl.isPaused)
2488
+ {
2489
+ $cfs.trigger(cf_e('play', conf));
2490
+ }
2491
+ sz_resetMargin($cfs.children(), opts);
2492
+ $cfs.trigger(cf_e('updateSizes', conf));
2493
+ };
2494
+
2495
+ var $w = $(window),
2496
+ onResize = null;
2497
+
2498
+ if ($.debounce && conf.onWindowResize == 'debounce')
2499
+ {
2500
+ onResize = $.debounce(200, resizeFn);
2501
+ }
2502
+ else if ($.throttle && conf.onWindowResize == 'throttle')
2503
+ {
2504
+ onResize = $.throttle(300, resizeFn);
2505
+ }
2506
+ else
2507
+ {
2508
+ var _windowWidth = 0,
2509
+ _windowHeight = 0;
2510
+
2511
+ onResize = function() {
2512
+ var nw = $w.width(),
2513
+ nh = $w.height();
2514
+
2515
+ if (nw != _windowWidth || nh != _windowHeight)
2516
+ {
2517
+ resizeFn();
2518
+ _windowWidth = nw;
2519
+ _windowHeight = nh;
2520
+ }
2521
+ };
2522
+ }
2523
+ $w.bind(cf_e('resize', conf, false, true, true), onResize);
2524
+ }
2525
+ }; // /bind_buttons
2526
+
2527
+
2528
+ FN._unbind_buttons = function() {
2529
+ var ns1 = cf_e('', conf),
2530
+ ns2 = cf_e('', conf, false);
2531
+ ns3 = cf_e('', conf, false, true, true);
2532
+
2533
+ $(document).unbind(ns3);
2534
+ $(window).unbind(ns3);
2535
+ $wrp.unbind(ns2);
2536
+
2537
+ if (opts.auto.button)
2538
+ {
2539
+ opts.auto.button.unbind(ns2);
2540
+ }
2541
+ if (opts.prev.button)
2542
+ {
2543
+ opts.prev.button.unbind(ns2);
2544
+ }
2545
+ if (opts.next.button)
2546
+ {
2547
+ opts.next.button.unbind(ns2);
2548
+ }
2549
+ if (opts.pagination.container)
2550
+ {
2551
+ opts.pagination.container.unbind(ns2);
2552
+ if (opts.pagination.anchorBuilder)
2553
+ {
2554
+ opts.pagination.container.children().remove();
2555
+ }
2556
+ }
2557
+ if (crsl.swipe)
2558
+ {
2559
+ $cfs.swipe('destroy');
2560
+ $wrp.css('cursor', 'default');
2561
+ crsl.swipe = false;
2562
+ }
2563
+ if (crsl.mousewheel)
2564
+ {
2565
+ crsl.mousewheel = false;
2566
+ }
2567
+
2568
+ nv_showNavi(opts, 'hide', conf);
2569
+ nv_enableNavi(opts, 'removeClass', conf);
2570
+
2571
+ }; // /unbind_buttons
2572
+
2573
+
2574
+
2575
+ // START
2576
+
2577
+ if (is_boolean(configs))
2578
+ {
2579
+ configs = {
2580
+ 'debug': configs
2581
+ };
2582
+ }
2583
+
2584
+ // set vars
2585
+ var crsl = {
2586
+ 'direction' : 'next',
2587
+ 'isPaused' : true,
2588
+ 'isScrolling' : false,
2589
+ 'isStopped' : false,
2590
+ 'mousewheel' : false,
2591
+ 'swipe' : false
2592
+ },
2593
+ itms = {
2594
+ 'total' : $cfs.children().length,
2595
+ 'first' : 0
2596
+ },
2597
+ tmrs = {
2598
+ 'auto' : null,
2599
+ 'progress' : null,
2600
+ 'startTime' : getTime(),
2601
+ 'timePassed' : 0
2602
+ },
2603
+ scrl = {
2604
+ 'isStopped' : false,
2605
+ 'duration' : 0,
2606
+ 'startTime' : 0,
2607
+ 'easing' : '',
2608
+ 'anims' : []
2609
+ },
2610
+ clbk = {
2611
+ 'onBefore' : [],
2612
+ 'onAfter' : []
2613
+ },
2614
+ queu = [],
2615
+ conf = $.extend(true, {}, $.fn.carouFredSel.configs, configs),
2616
+ opts = {},
2617
+ opts_orig = $.extend(true, {}, options),
2618
+ $wrp = (conf.wrapper == 'parent')
2619
+ ? $cfs.parent()
2620
+ : $cfs.wrap('<'+conf.wrapper.element+' class="'+conf.wrapper.classname+'" />').parent();
2621
+
2622
+
2623
+ conf.selector = $cfs.selector;
2624
+ conf.serialNumber = $.fn.carouFredSel.serialNumber++;
2625
+
2626
+ conf.transition = (conf.transition && $.fn.transition) ? 'transition' : 'animate';
2627
+
2628
+ // create carousel
2629
+ FN._init(opts_orig, true, starting_position);
2630
+ FN._build();
2631
+ FN._bind_events();
2632
+ FN._bind_buttons();
2633
+
2634
+ // find item to start
2635
+ if (is_array(opts.items.start))
2636
+ {
2637
+ var start_arr = opts.items.start;
2638
+ }
2639
+ else
2640
+ {
2641
+ var start_arr = [];
2642
+ if (opts.items.start != 0)
2643
+ {
2644
+ start_arr.push(opts.items.start);
2645
+ }
2646
+ }
2647
+ if (opts.cookie)
2648
+ {
2649
+ start_arr.unshift(parseInt(cf_getCookie(opts.cookie), 10));
2650
+ }
2651
+
2652
+ if (start_arr.length > 0)
2653
+ {
2654
+ for (var a = 0, l = start_arr.length; a < l; a++)
2655
+ {
2656
+ var s = start_arr[a];
2657
+ if (s == 0)
2658
+ {
2659
+ continue;
2660
+ }
2661
+ if (s === true)
2662
+ {
2663
+ s = window.location.hash;
2664
+ if (s.length < 1)
2665
+ {
2666
+ continue;
2667
+ }
2668
+ }
2669
+ else if (s === 'random')
2670
+ {
2671
+ s = Math.floor(Math.random()*itms.total);
2672
+ }
2673
+ if ($cfs.triggerHandler(cf_e('slideTo', conf), [s, 0, true, { fx: 'none' }]))
2674
+ {
2675
+ break;
2676
+ }
2677
+ }
2678
+ }
2679
+ var siz = sz_setSizes($cfs, opts),
2680
+ itm = gi_getCurrentItems($cfs.children(), opts);
2681
+
2682
+ if (opts.onCreate)
2683
+ {
2684
+ opts.onCreate.call($tt0, {
2685
+ 'width': siz.width,
2686
+ 'height': siz.height,
2687
+ 'items': itm
2688
+ });
2689
+ }
2690
+
2691
+ $cfs.trigger(cf_e('updatePageStatus', conf), [true, siz]);
2692
+ $cfs.trigger(cf_e('linkAnchors', conf));
2693
+
2694
+ if (conf.debug)
2695
+ {
2696
+ $cfs.trigger(cf_e('debug', conf));
2697
+ }
2698
+
2699
+ return $cfs;
2700
+ };
2701
+
2702
+
2703
+
2704
+ // GLOBAL PUBLIC
2705
+
2706
+ $.fn.carouFredSel.serialNumber = 1;
2707
+ $.fn.carouFredSel.defaults = {
2708
+ 'synchronise' : false,
2709
+ 'infinite' : true,
2710
+ 'circular' : true,
2711
+ 'responsive' : false,
2712
+ 'direction' : 'left',
2713
+ 'items' : {
2714
+ 'start' : 0
2715
+ },
2716
+ 'scroll' : {
2717
+ 'easing' : 'swing',
2718
+ 'duration' : 500,
2719
+ 'pauseOnHover' : false,
2720
+ 'event' : 'click',
2721
+ 'queue' : false
2722
+ }
2723
+ };
2724
+ $.fn.carouFredSel.configs = {
2725
+ 'debug' : false,
2726
+ 'transition' : false,
2727
+ 'onWindowResize': 'throttle',
2728
+ 'events' : {
2729
+ 'prefix' : '',
2730
+ 'namespace' : 'cfs'
2731
+ },
2732
+ 'wrapper' : {
2733
+ 'element' : 'div',
2734
+ 'classname' : 'caroufredsel_wrapper'
2735
+ },
2736
+ 'classnames' : {}
2737
+ };
2738
+ $.fn.carouFredSel.pageAnchorBuilder = function(nr) {
2739
+ return '<a href="#"><span>'+nr+'</span></a>';
2740
+ };
2741
+ $.fn.carouFredSel.progressbarUpdater = function(perc) {
2742
+ $(this).css('width', perc+'%');
2743
+ };
2744
+
2745
+ $.fn.carouFredSel.cookie = {
2746
+ get: function(n) {
2747
+ n += '=';
2748
+ var ca = document.cookie.split(';');
2749
+ for (var a = 0, l = ca.length; a < l; a++)
2750
+ {
2751
+ var c = ca[a];
2752
+ while (c.charAt(0) == ' ')
2753
+ {
2754
+ c = c.slice(1);
2755
+ }
2756
+ if (c.indexOf(n) == 0)
2757
+ {
2758
+ return c.slice(n.length);
2759
+ }
2760
+ }
2761
+ return 0;
2762
+ },
2763
+ set: function(n, v, d) {
2764
+ var e = "";
2765
+ if (d)
2766
+ {
2767
+ var date = new Date();
2768
+ date.setTime(date.getTime() + (d * 24 * 60 * 60 * 1000));
2769
+ e = "; expires=" + date.toGMTString();
2770
+ }
2771
+ document.cookie = n + '=' + v + e + '; path=/';
2772
+ },
2773
+ remove: function(n) {
2774
+ $.fn.carouFredSel.cookie.set(n, "", -1);
2775
+ }
2776
+ };
2777
+
2778
+
2779
+ // GLOBAL PRIVATE
2780
+
2781
+ // scrolling functions
2782
+ function sc_setScroll(d, e, c) {
2783
+ if (c.transition == 'transition')
2784
+ {
2785
+ if (e == 'swing')
2786
+ {
2787
+ e = 'ease';
2788
+ }
2789
+ }
2790
+ return {
2791
+ anims: [],
2792
+ duration: d,
2793
+ orgDuration: d,
2794
+ easing: e,
2795
+ startTime: getTime()
2796
+ };
2797
+ }
2798
+ function sc_startScroll(s, c) {
2799
+ for (var a = 0, l = s.anims.length; a < l; a++)
2800
+ {
2801
+ var b = s.anims[a];
2802
+ if (!b)
2803
+ {
2804
+ continue;
2805
+ }
2806
+ b[0][c.transition](b[1], s.duration, s.easing, b[2]);
2807
+ }
2808
+ }
2809
+ function sc_stopScroll(s, finish) {
2810
+ if (!is_boolean(finish))
2811
+ {
2812
+ finish = true;
2813
+ }
2814
+ if (is_object(s.pre))
2815
+ {
2816
+ sc_stopScroll(s.pre, finish);
2817
+ }
2818
+ for (var a = 0, l = s.anims.length; a < l; a++)
2819
+ {
2820
+ var b = s.anims[a];
2821
+ b[0].stop(true);
2822
+ if (finish)
2823
+ {
2824
+ b[0].css(b[1]);
2825
+ if (is_function(b[2]))
2826
+ {
2827
+ b[2]();
2828
+ }
2829
+ }
2830
+ }
2831
+ if (is_object(s.post))
2832
+ {
2833
+ sc_stopScroll(s.post, finish);
2834
+ }
2835
+ }
2836
+ function sc_afterScroll( $c, $c2, o ) {
2837
+ if ($c2)
2838
+ {
2839
+ $c2.remove();
2840
+ }
2841
+
2842
+ switch(o.fx) {
2843
+ case 'fade':
2844
+ case 'crossfade':
2845
+ case 'cover-fade':
2846
+ case 'uncover-fade':
2847
+ $c.css('opacity', 1);
2848
+ $c.css('filter', '');
2849
+ break;
2850
+ }
2851
+ }
2852
+ function sc_fireCallbacks($t, o, b, a, c) {
2853
+ if (o[b])
2854
+ {
2855
+ o[b].call($t, a);
2856
+ }
2857
+ if (c[b].length)
2858
+ {
2859
+ for (var i = 0, l = c[b].length; i < l; i++)
2860
+ {
2861
+ c[b][i].call($t, a);
2862
+ }
2863
+ }
2864
+ return [];
2865
+ }
2866
+ function sc_fireQueue($c, q, c) {
2867
+
2868
+ if (q.length)
2869
+ {
2870
+ $c.trigger(cf_e(q[0][0], c), q[0][1]);
2871
+ q.shift();
2872
+ }
2873
+ return q;
2874
+ }
2875
+ function sc_hideHiddenItems(hiddenitems) {
2876
+ hiddenitems.each(function() {
2877
+ var hi = $(this);
2878
+ hi.data('_cfs_isHidden', hi.is(':hidden')).hide();
2879
+ });
2880
+ }
2881
+ function sc_showHiddenItems(hiddenitems) {
2882
+ if (hiddenitems)
2883
+ {
2884
+ hiddenitems.each(function() {
2885
+ var hi = $(this);
2886
+ if (!hi.data('_cfs_isHidden'))
2887
+ {
2888
+ hi.show();
2889
+ }
2890
+ });
2891
+ }
2892
+ }
2893
+ function sc_clearTimers(t) {
2894
+ if (t.auto)
2895
+ {
2896
+ clearTimeout(t.auto);
2897
+ }
2898
+ if (t.progress)
2899
+ {
2900
+ clearInterval(t.progress);
2901
+ }
2902
+ return t;
2903
+ }
2904
+ function sc_mapCallbackArguments(i_old, i_skp, i_new, s_itm, s_dir, s_dur, w_siz) {
2905
+ return {
2906
+ 'width': w_siz.width,
2907
+ 'height': w_siz.height,
2908
+ 'items': {
2909
+ 'old': i_old,
2910
+ 'skipped': i_skp,
2911
+ 'visible': i_new
2912
+ },
2913
+ 'scroll': {
2914
+ 'items': s_itm,
2915
+ 'direction': s_dir,
2916
+ 'duration': s_dur
2917
+ }
2918
+ };
2919
+ }
2920
+ function sc_getDuration( sO, o, nI, siz ) {
2921
+ var dur = sO.duration;
2922
+ if (sO.fx == 'none')
2923
+ {
2924
+ return 0;
2925
+ }
2926
+ if (dur == 'auto')
2927
+ {
2928
+ dur = o.scroll.duration / o.scroll.items * nI;
2929
+ }
2930
+ else if (dur < 10)
2931
+ {
2932
+ dur = siz / dur;
2933
+ }
2934
+ if (dur < 1)
2935
+ {
2936
+ return 0;
2937
+ }
2938
+ if (sO.fx == 'fade')
2939
+ {
2940
+ dur = dur / 2;
2941
+ }
2942
+ return Math.round(dur);
2943
+ }
2944
+
2945
+ // navigation functions
2946
+ function nv_showNavi(o, t, c) {
2947
+ var minimum = (is_number(o.items.minimum)) ? o.items.minimum : o.items.visible + 1;
2948
+ if (t == 'show' || t == 'hide')
2949
+ {
2950
+ var f = t;
2951
+ }
2952
+ else if (minimum > t)
2953
+ {
2954
+ debug(c, 'Not enough items ('+t+' total, '+minimum+' needed): Hiding navigation.');
2955
+ var f = 'hide';
2956
+ }
2957
+ else
2958
+ {
2959
+ var f = 'show';
2960
+ }
2961
+ var s = (f == 'show') ? 'removeClass' : 'addClass',
2962
+ h = cf_c('hidden', c);
2963
+
2964
+ if (o.auto.button)
2965
+ {
2966
+ o.auto.button[f]()[s](h);
2967
+ }
2968
+ if (o.prev.button)
2969
+ {
2970
+ o.prev.button[f]()[s](h);
2971
+ }
2972
+ if (o.next.button)
2973
+ {
2974
+ o.next.button[f]()[s](h);
2975
+ }
2976
+ if (o.pagination.container)
2977
+ {
2978
+ o.pagination.container[f]()[s](h);
2979
+ }
2980
+ }
2981
+ function nv_enableNavi(o, f, c) {
2982
+ if (o.circular || o.infinite) return;
2983
+ var fx = (f == 'removeClass' || f == 'addClass') ? f : false,
2984
+ di = cf_c('disabled', c);
2985
+
2986
+ if (o.auto.button && fx)
2987
+ {
2988
+ o.auto.button[fx](di);
2989
+ }
2990
+ if (o.prev.button)
2991
+ {
2992
+ var fn = fx || (f == 0) ? 'addClass' : 'removeClass';
2993
+ o.prev.button[fn](di);
2994
+ }
2995
+ if (o.next.button)
2996
+ {
2997
+ var fn = fx || (f == o.items.visible) ? 'addClass' : 'removeClass';
2998
+ o.next.button[fn](di);
2999
+ }
3000
+ }
3001
+
3002
+ // get object functions
3003
+ function go_getObject($tt, obj) {
3004
+ if (is_function(obj))
3005
+ {
3006
+ obj = obj.call($tt);
3007
+ }
3008
+ else if (is_undefined(obj))
3009
+ {
3010
+ obj = {};
3011
+ }
3012
+ return obj;
3013
+ }
3014
+ function go_getItemsObject($tt, obj) {
3015
+ obj = go_getObject($tt, obj);
3016
+ if (is_number(obj))
3017
+ {
3018
+ obj = {
3019
+ 'visible': obj
3020
+ };
3021
+ }
3022
+ else if (obj == 'variable')
3023
+ {
3024
+ obj = {
3025
+ 'visible': obj,
3026
+ 'width': obj,
3027
+ 'height': obj
3028
+ };
3029
+ }
3030
+ else if (!is_object(obj))
3031
+ {
3032
+ obj = {};
3033
+ }
3034
+ return obj;
3035
+ }
3036
+ function go_getScrollObject($tt, obj) {
3037
+ obj = go_getObject($tt, obj);
3038
+ if (is_number(obj))
3039
+ {
3040
+ if (obj <= 50)
3041
+ {
3042
+ obj = {
3043
+ 'items': obj
3044
+ };
3045
+ }
3046
+ else
3047
+ {
3048
+ obj = {
3049
+ 'duration': obj
3050
+ };
3051
+ }
3052
+ }
3053
+ else if (is_string(obj))
3054
+ {
3055
+ obj = {
3056
+ 'easing': obj
3057
+ };
3058
+ }
3059
+ else if (!is_object(obj))
3060
+ {
3061
+ obj = {};
3062
+ }
3063
+ return obj;
3064
+ }
3065
+ function go_getNaviObject($tt, obj) {
3066
+ obj = go_getObject($tt, obj);
3067
+ if (is_string(obj))
3068
+ {
3069
+ var temp = cf_getKeyCode(obj);
3070
+ if (temp == -1)
3071
+ {
3072
+ obj = $(obj);
3073
+ }
3074
+ else
3075
+ {
3076
+ obj = temp;
3077
+ }
3078
+ }
3079
+ return obj;
3080
+ }
3081
+
3082
+ function go_getAutoObject($tt, obj) {
3083
+ obj = go_getNaviObject($tt, obj);
3084
+ if (is_jquery(obj))
3085
+ {
3086
+ obj = {
3087
+ 'button': obj
3088
+ };
3089
+ }
3090
+ else if (is_boolean(obj))
3091
+ {
3092
+ obj = {
3093
+ 'play': obj
3094
+ };
3095
+ }
3096
+ else if (is_number(obj))
3097
+ {
3098
+ obj = {
3099
+ 'timeoutDuration': obj
3100
+ };
3101
+ }
3102
+ if (obj.progress)
3103
+ {
3104
+ if (is_string(obj.progress) || is_jquery(obj.progress))
3105
+ {
3106
+ obj.progress = {
3107
+ 'bar': obj.progress
3108
+ };
3109
+ }
3110
+ }
3111
+ return obj;
3112
+ }
3113
+ function go_complementAutoObject($tt, obj) {
3114
+ if (is_function(obj.button))
3115
+ {
3116
+ obj.button = obj.button.call($tt);
3117
+ }
3118
+ if (is_string(obj.button))
3119
+ {
3120
+ obj.button = $(obj.button);
3121
+ }
3122
+ if (!is_boolean(obj.play))
3123
+ {
3124
+ obj.play = true;
3125
+ }
3126
+ if (!is_number(obj.delay))
3127
+ {
3128
+ obj.delay = 0;
3129
+ }
3130
+ if (is_undefined(obj.pauseOnEvent))
3131
+ {
3132
+ obj.pauseOnEvent = true;
3133
+ }
3134
+ if (!is_boolean(obj.pauseOnResize))
3135
+ {
3136
+ obj.pauseOnResize = true;
3137
+ }
3138
+ if (!is_number(obj.timeoutDuration))
3139
+ {
3140
+ obj.timeoutDuration = (obj.duration < 10)
3141
+ ? 2500
3142
+ : obj.duration * 5;
3143
+ }
3144
+ if (obj.progress)
3145
+ {
3146
+ if (is_function(obj.progress.bar))
3147
+ {
3148
+ obj.progress.bar = obj.progress.bar.call($tt);
3149
+ }
3150
+ if (is_string(obj.progress.bar))
3151
+ {
3152
+ obj.progress.bar = $(obj.progress.bar);
3153
+ }
3154
+ if (obj.progress.bar)
3155
+ {
3156
+ if (!is_function(obj.progress.updater))
3157
+ {
3158
+ obj.progress.updater = $.fn.carouFredSel.progressbarUpdater;
3159
+ }
3160
+ if (!is_number(obj.progress.interval))
3161
+ {
3162
+ obj.progress.interval = 50;
3163
+ }
3164
+ }
3165
+ else
3166
+ {
3167
+ obj.progress = false;
3168
+ }
3169
+ }
3170
+ return obj;
3171
+ }
3172
+
3173
+ function go_getPrevNextObject($tt, obj) {
3174
+ obj = go_getNaviObject($tt, obj);
3175
+ if (is_jquery(obj))
3176
+ {
3177
+ obj = {
3178
+ 'button': obj
3179
+ };
3180
+ }
3181
+ else if (is_number(obj))
3182
+ {
3183
+ obj = {
3184
+ 'key': obj
3185
+ };
3186
+ }
3187
+ return obj;
3188
+ }
3189
+ function go_complementPrevNextObject($tt, obj) {
3190
+ if (is_function(obj.button))
3191
+ {
3192
+ obj.button = obj.button.call($tt);
3193
+ }
3194
+ if (is_string(obj.button))
3195
+ {
3196
+ obj.button = $(obj.button);
3197
+ }
3198
+ if (is_string(obj.key))
3199
+ {
3200
+ obj.key = cf_getKeyCode(obj.key);
3201
+ }
3202
+ return obj;
3203
+ }
3204
+
3205
+ function go_getPaginationObject($tt, obj) {
3206
+ obj = go_getNaviObject($tt, obj);
3207
+ if (is_jquery(obj))
3208
+ {
3209
+ obj = {
3210
+ 'container': obj
3211
+ };
3212
+ }
3213
+ else if (is_boolean(obj))
3214
+ {
3215
+ obj = {
3216
+ 'keys': obj
3217
+ };
3218
+ }
3219
+ return obj;
3220
+ }
3221
+ function go_complementPaginationObject($tt, obj) {
3222
+ if (is_function(obj.container))
3223
+ {
3224
+ obj.container = obj.container.call($tt);
3225
+ }
3226
+ if (is_string(obj.container))
3227
+ {
3228
+ obj.container = $(obj.container);
3229
+ }
3230
+ if (!is_number(obj.items))
3231
+ {
3232
+ obj.items = false;
3233
+ }
3234
+ if (!is_boolean(obj.keys))
3235
+ {
3236
+ obj.keys = false;
3237
+ }
3238
+ if (!is_function(obj.anchorBuilder) && !is_false(obj.anchorBuilder))
3239
+ {
3240
+ obj.anchorBuilder = $.fn.carouFredSel.pageAnchorBuilder;
3241
+ }
3242
+ if (!is_number(obj.deviation))
3243
+ {
3244
+ obj.deviation = 0;
3245
+ }
3246
+ return obj;
3247
+ }
3248
+
3249
+ function go_getSwipeObject($tt, obj) {
3250
+ if (is_function(obj))
3251
+ {
3252
+ obj = obj.call($tt);
3253
+ }
3254
+ if (is_undefined(obj))
3255
+ {
3256
+ obj = {
3257
+ 'onTouch': false
3258
+ };
3259
+ }
3260
+ if (is_true(obj))
3261
+ {
3262
+ obj = {
3263
+ 'onTouch': obj
3264
+ };
3265
+ }
3266
+ else if (is_number(obj))
3267
+ {
3268
+ obj = {
3269
+ 'items': obj
3270
+ };
3271
+ }
3272
+ return obj;
3273
+ }
3274
+ function go_complementSwipeObject($tt, obj) {
3275
+ if (!is_boolean(obj.onTouch))
3276
+ {
3277
+ obj.onTouch = true;
3278
+ }
3279
+ if (!is_boolean(obj.onMouse))
3280
+ {
3281
+ obj.onMouse = false;
3282
+ }
3283
+ if (!is_object(obj.options))
3284
+ {
3285
+ obj.options = {};
3286
+ }
3287
+ if (!is_boolean(obj.options.triggerOnTouchEnd))
3288
+ {
3289
+ obj.options.triggerOnTouchEnd = false;
3290
+ }
3291
+ return obj;
3292
+ }
3293
+ function go_getMousewheelObject($tt, obj) {
3294
+ if (is_function(obj))
3295
+ {
3296
+ obj = obj.call($tt);
3297
+ }
3298
+ if (is_true(obj))
3299
+ {
3300
+ obj = {};
3301
+ }
3302
+ else if (is_number(obj))
3303
+ {
3304
+ obj = {
3305
+ 'items': obj
3306
+ };
3307
+ }
3308
+ else if (is_undefined(obj))
3309
+ {
3310
+ obj = false;
3311
+ }
3312
+ return obj;
3313
+ }
3314
+ function go_complementMousewheelObject($tt, obj) {
3315
+ return obj;
3316
+ }
3317
+
3318
+ // get number functions
3319
+ function gn_getItemIndex(num, dev, org, items, $cfs) {
3320
+ if (is_string(num))
3321
+ {
3322
+ num = $(num, $cfs);
3323
+ }
3324
+
3325
+ if (is_object(num))
3326
+ {
3327
+ num = $(num, $cfs);
3328
+ }
3329
+ if (is_jquery(num))
3330
+ {
3331
+ num = $cfs.children().index(num);
3332
+ if (!is_boolean(org))
3333
+ {
3334
+ org = false;
3335
+ }
3336
+ }
3337
+ else
3338
+ {
3339
+ if (!is_boolean(org))
3340
+ {
3341
+ org = true;
3342
+ }
3343
+ }
3344
+ if (!is_number(num))
3345
+ {
3346
+ num = 0;
3347
+ }
3348
+ if (!is_number(dev))
3349
+ {
3350
+ dev = 0;
3351
+ }
3352
+
3353
+ if (org)
3354
+ {
3355
+ num += items.first;
3356
+ }
3357
+ num += dev;
3358
+ if (items.total > 0)
3359
+ {
3360
+ while (num >= items.total)
3361
+ {
3362
+ num -= items.total;
3363
+ }
3364
+ while (num < 0)
3365
+ {
3366
+ num += items.total;
3367
+ }
3368
+ }
3369
+ return num;
3370
+ }
3371
+
3372
+ // items prev
3373
+ function gn_getVisibleItemsPrev(i, o, s) {
3374
+ var t = 0,
3375
+ x = 0;
3376
+
3377
+ for (var a = s; a >= 0; a--)
3378
+ {
3379
+ var j = i.eq(a);
3380
+ t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;
3381
+ if (t > o.maxDimension)
3382
+ {
3383
+ return x;
3384
+ }
3385
+ if (a == 0)
3386
+ {
3387
+ a = i.length;
3388
+ }
3389
+ x++;
3390
+ }
3391
+ }
3392
+ function gn_getVisibleItemsPrevFilter(i, o, s) {
3393
+ return gn_getItemsPrevFilter(i, o.items.filter, o.items.visibleConf.org, s);
3394
+ }
3395
+ function gn_getScrollItemsPrevFilter(i, o, s, m) {
3396
+ return gn_getItemsPrevFilter(i, o.items.filter, m, s);
3397
+ }
3398
+ function gn_getItemsPrevFilter(i, f, m, s) {
3399
+ var t = 0,
3400
+ x = 0;
3401
+
3402
+ for (var a = s, l = i.length; a >= 0; a--)
3403
+ {
3404
+ x++;
3405
+ if (x == l)
3406
+ {
3407
+ return x;
3408
+ }
3409
+
3410
+ var j = i.eq(a);
3411
+ if (j.is(f))
3412
+ {
3413
+ t++;
3414
+ if (t == m)
3415
+ {
3416
+ return x;
3417
+ }
3418
+ }
3419
+ if (a == 0)
3420
+ {
3421
+ a = l;
3422
+ }
3423
+ }
3424
+ }
3425
+
3426
+ function gn_getVisibleOrg($c, o) {
3427
+ return o.items.visibleConf.org || $c.children().slice(0, o.items.visible).filter(o.items.filter).length;
3428
+ }
3429
+
3430
+ // items next
3431
+ function gn_getVisibleItemsNext(i, o, s) {
3432
+ var t = 0,
3433
+ x = 0;
3434
+
3435
+ for (var a = s, l = i.length-1; a <= l; a++)
3436
+ {
3437
+ var j = i.eq(a);
3438
+
3439
+ t += (j.is(':visible')) ? j[o.d['outerWidth']](true) : 0;
3440
+ if (t > o.maxDimension)
3441
+ {
3442
+ return x;
3443
+ }
3444
+
3445
+ x++;
3446
+ if (x == l+1)
3447
+ {
3448
+ return x;
3449
+ }
3450
+ if (a == l)
3451
+ {
3452
+ a = -1;
3453
+ }
3454
+ }
3455
+ }
3456
+ function gn_getVisibleItemsNextTestCircular(i, o, s, l) {
3457
+ var v = gn_getVisibleItemsNext(i, o, s);
3458
+ if (!o.circular)
3459
+ {
3460
+ if (s + v > l)
3461
+ {
3462
+ v = l - s;
3463
+ }
3464
+ }
3465
+ return v;
3466
+ }
3467
+ function gn_getVisibleItemsNextFilter(i, o, s) {
3468
+ return gn_getItemsNextFilter(i, o.items.filter, o.items.visibleConf.org, s, o.circular);
3469
+ }
3470
+ function gn_getScrollItemsNextFilter(i, o, s, m) {
3471
+ return gn_getItemsNextFilter(i, o.items.filter, m+1, s, o.circular) - 1;
3472
+ }
3473
+ function gn_getItemsNextFilter(i, f, m, s, c) {
3474
+ var t = 0,
3475
+ x = 0;
3476
+
3477
+ for (var a = s, l = i.length-1; a <= l; a++)
3478
+ {
3479
+ x++;
3480
+ if (x >= l)
3481
+ {
3482
+ return x;
3483
+ }
3484
+
3485
+ var j = i.eq(a);
3486
+ if (j.is(f))
3487
+ {
3488
+ t++;
3489
+ if (t == m)
3490
+ {
3491
+ return x;
3492
+ }
3493
+ }
3494
+ if (a == l)
3495
+ {
3496
+ a = -1;
3497
+ }
3498
+ }
3499
+ }
3500
+
3501
+ // get items functions
3502
+ function gi_getCurrentItems(i, o) {
3503
+ return i.slice(0, o.items.visible);
3504
+ }
3505
+ function gi_getOldItemsPrev(i, o, n) {
3506
+ return i.slice(n, o.items.visibleConf.old+n);
3507
+ }
3508
+ function gi_getNewItemsPrev(i, o) {
3509
+ return i.slice(0, o.items.visible);
3510
+ }
3511
+ function gi_getOldItemsNext(i, o) {
3512
+ return i.slice(0, o.items.visibleConf.old);
3513
+ }
3514
+ function gi_getNewItemsNext(i, o, n) {
3515
+ return i.slice(n, o.items.visible+n);
3516
+ }
3517
+
3518
+ // sizes functions
3519
+ function sz_storeMargin(i, o, d) {
3520
+ if (o.usePadding)
3521
+ {
3522
+ if (!is_string(d))
3523
+ {
3524
+ d = '_cfs_origCssMargin';
3525
+ }
3526
+ i.each(function() {
3527
+ var j = $(this),
3528
+ m = parseInt(j.css(o.d['marginRight']), 10);
3529
+ if (!is_number(m))
3530
+ {
3531
+ m = 0;
3532
+ }
3533
+ j.data(d, m);
3534
+ });
3535
+ }
3536
+ }
3537
+ function sz_resetMargin(i, o, m) {
3538
+ if (o.usePadding)
3539
+ {
3540
+ var x = (is_boolean(m)) ? m : false;
3541
+ if (!is_number(m))
3542
+ {
3543
+ m = 0;
3544
+ }
3545
+ sz_storeMargin(i, o, '_cfs_tempCssMargin');
3546
+ i.each(function() {
3547
+ var j = $(this);
3548
+ j.css(o.d['marginRight'], ((x) ? j.data('_cfs_tempCssMargin') : m + j.data('_cfs_origCssMargin')));
3549
+ });
3550
+ }
3551
+ }
3552
+ function sz_storeOrigCss(i) {
3553
+ i.each(function() {
3554
+ var j = $(this);
3555
+ j.data('_cfs_origCss', j.attr('style') || '');
3556
+ });
3557
+ }
3558
+ function sz_restoreOrigCss(i) {
3559
+ i.each(function() {
3560
+ var j = $(this);
3561
+ j.attr('style', j.data('_cfs_origCss') || '');
3562
+ });
3563
+ }
3564
+ function sz_setResponsiveSizes(o, all) {
3565
+ var visb = o.items.visible,
3566
+ newS = o.items[o.d['width']],
3567
+ seco = o[o.d['height']],
3568
+ secp = is_percentage(seco);
3569
+
3570
+ all.each(function() {
3571
+ var $t = $(this),
3572
+ nw = newS - ms_getPaddingBorderMargin($t, o, 'Width');
3573
+
3574
+ $t[o.d['width']](nw);
3575
+ if (secp)
3576
+ {
3577
+ $t[o.d['height']](ms_getPercentage(nw, seco));
3578
+ }
3579
+ });
3580
+ }
3581
+ function sz_setSizes($c, o) {
3582
+ var $w = $c.parent(),
3583
+ $i = $c.children(),
3584
+ $v = gi_getCurrentItems($i, o),
3585
+ sz = cf_mapWrapperSizes(ms_getSizes($v, o, true), o, false);
3586
+
3587
+ $w.css(sz);
3588
+
3589
+ if (o.usePadding)
3590
+ {
3591
+ var p = o.padding,
3592
+ r = p[o.d[1]];
3593
+
3594
+ if (o.align && r < 0)
3595
+ {
3596
+ r = 0;
3597
+ }
3598
+ var $l = $v.last();
3599
+ $l.css(o.d['marginRight'], $l.data('_cfs_origCssMargin') + r);
3600
+ $c.css(o.d['top'], p[o.d[0]]);
3601
+ $c.css(o.d['left'], p[o.d[3]]);
3602
+ }
3603
+
3604
+ $c.css(o.d['width'], sz[o.d['width']]+(ms_getTotalSize($i, o, 'width')*2));
3605
+ $c.css(o.d['height'], ms_getLargestSize($i, o, 'height'));
3606
+ return sz;
3607
+ }
3608
+
3609
+ // measuring functions
3610
+ function ms_getSizes(i, o, wrapper) {
3611
+ return [ms_getTotalSize(i, o, 'width', wrapper), ms_getLargestSize(i, o, 'height', wrapper)];
3612
+ }
3613
+ function ms_getLargestSize(i, o, dim, wrapper) {
3614
+ if (!is_boolean(wrapper))
3615
+ {
3616
+ wrapper = false;
3617
+ }
3618
+ if (is_number(o[o.d[dim]]) && wrapper)
3619
+ {
3620
+ return o[o.d[dim]];
3621
+ }
3622
+ if (is_number(o.items[o.d[dim]]))
3623
+ {
3624
+ return o.items[o.d[dim]];
3625
+ }
3626
+ dim = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight';
3627
+ return ms_getTrueLargestSize(i, o, dim);
3628
+ }
3629
+ function ms_getTrueLargestSize(i, o, dim) {
3630
+ var s = 0;
3631
+
3632
+ for (var a = 0, l = i.length; a < l; a++)
3633
+ {
3634
+ var j = i.eq(a);
3635
+
3636
+ var m = (j.is(':visible')) ? j[o.d[dim]](true) : 0;
3637
+ if (s < m)
3638
+ {
3639
+ s = m;
3640
+ }
3641
+ }
3642
+ return s;
3643
+ }
3644
+
3645
+ function ms_getTotalSize(i, o, dim, wrapper) {
3646
+ if (!is_boolean(wrapper))
3647
+ {
3648
+ wrapper = false;
3649
+ }
3650
+ if (is_number(o[o.d[dim]]) && wrapper)
3651
+ {
3652
+ return o[o.d[dim]];
3653
+ }
3654
+ if (is_number(o.items[o.d[dim]]))
3655
+ {
3656
+ return o.items[o.d[dim]] * i.length;
3657
+ }
3658
+
3659
+ var d = (dim.toLowerCase().indexOf('width') > -1) ? 'outerWidth' : 'outerHeight',
3660
+ s = 0;
3661
+
3662
+ for (var a = 0, l = i.length; a < l; a++)
3663
+ {
3664
+ var j = i.eq(a);
3665
+ s += (j.is(':visible')) ? j[o.d[d]](true) : 0;
3666
+ }
3667
+ return s;
3668
+ }
3669
+ function ms_getParentSize($w, o, d) {
3670
+ var isVisible = $w.is(':visible');
3671
+ if (isVisible)
3672
+ {
3673
+ $w.hide();
3674
+ }
3675
+ var s = $w.parent()[o.d[d]]();
3676
+ if (isVisible)
3677
+ {
3678
+ $w.show();
3679
+ }
3680
+ return s;
3681
+ }
3682
+ function ms_getMaxDimension(o, a) {
3683
+ return (is_number(o[o.d['width']])) ? o[o.d['width']] : a;
3684
+ }
3685
+ function ms_hasVariableSizes(i, o, dim) {
3686
+ var s = false,
3687
+ v = false;
3688
+
3689
+ for (var a = 0, l = i.length; a < l; a++)
3690
+ {
3691
+ var j = i.eq(a);
3692
+
3693
+ var c = (j.is(':visible')) ? j[o.d[dim]](true) : 0;
3694
+ if (s === false)
3695
+ {
3696
+ s = c;
3697
+ }
3698
+ else if (s != c)
3699
+ {
3700
+ v = true;
3701
+ }
3702
+ if (s == 0)
3703
+ {
3704
+ v = true;
3705
+ }
3706
+ }
3707
+ return v;
3708
+ }
3709
+ function ms_getPaddingBorderMargin(i, o, d) {
3710
+ return i[o.d['outer'+d]](true) - i[o.d[d.toLowerCase()]]();
3711
+ }
3712
+ function ms_getPercentage(s, o) {
3713
+ if (is_percentage(o))
3714
+ {
3715
+ o = parseInt( o.slice(0, -1), 10 );
3716
+ if (!is_number(o))
3717
+ {
3718
+ return s;
3719
+ }
3720
+ s *= o/100;
3721
+ }
3722
+ return s;
3723
+ }
3724
+
3725
+ // config functions
3726
+ function cf_e(n, c, pf, ns, rd) {
3727
+ if (!is_boolean(pf))
3728
+ {
3729
+ pf = true;
3730
+ }
3731
+ if (!is_boolean(ns))
3732
+ {
3733
+ ns = true;
3734
+ }
3735
+ if (!is_boolean(rd))
3736
+ {
3737
+ rd = false;
3738
+ }
3739
+
3740
+ if (pf)
3741
+ {
3742
+ n = c.events.prefix + n;
3743
+ }
3744
+ if (ns)
3745
+ {
3746
+ n = n +'.'+ c.events.namespace;
3747
+ }
3748
+ if (ns && rd)
3749
+ {
3750
+ n += c.serialNumber;
3751
+ }
3752
+
3753
+ return n;
3754
+ }
3755
+ function cf_c(n, c) {
3756
+ return (is_string(c.classnames[n])) ? c.classnames[n] : n;
3757
+ }
3758
+ function cf_mapWrapperSizes(ws, o, p) {
3759
+ if (!is_boolean(p))
3760
+ {
3761
+ p = true;
3762
+ }
3763
+ var pad = (o.usePadding && p) ? o.padding : [0, 0, 0, 0];
3764
+ var wra = {};
3765
+
3766
+ wra[o.d['width']] = ws[0] + pad[1] + pad[3];
3767
+ wra[o.d['height']] = ws[1] + pad[0] + pad[2];
3768
+
3769
+ return wra;
3770
+ }
3771
+ function cf_sortParams(vals, typs) {
3772
+ var arr = [];
3773
+ for (var a = 0, l1 = vals.length; a < l1; a++)
3774
+ {
3775
+ for (var b = 0, l2 = typs.length; b < l2; b++)
3776
+ {
3777
+ if (typs[b].indexOf(typeof vals[a]) > -1 && is_undefined(arr[b]))
3778
+ {
3779
+ arr[b] = vals[a];
3780
+ break;
3781
+ }
3782
+ }
3783
+ }
3784
+ return arr;
3785
+ }
3786
+ function cf_getPadding(p) {
3787
+ if (is_undefined(p))
3788
+ {
3789
+ return [0, 0, 0, 0];
3790
+ }
3791
+ if (is_number(p))
3792
+ {
3793
+ return [p, p, p, p];
3794
+ }
3795
+ if (is_string(p))
3796
+ {
3797
+ p = p.split('px').join('').split('em').join('').split(' ');
3798
+ }
3799
+
3800
+ if (!is_array(p))
3801
+ {
3802
+ return [0, 0, 0, 0];
3803
+ }
3804
+ for (var i = 0; i < 4; i++)
3805
+ {
3806
+ p[i] = parseInt(p[i], 10);
3807
+ }
3808
+ switch (p.length)
3809
+ {
3810
+ case 0:
3811
+ return [0, 0, 0, 0];
3812
+ case 1:
3813
+ return [p[0], p[0], p[0], p[0]];
3814
+ case 2:
3815
+ return [p[0], p[1], p[0], p[1]];
3816
+ case 3:
3817
+ return [p[0], p[1], p[2], p[1]];
3818
+ default:
3819
+ return [p[0], p[1], p[2], p[3]];
3820
+ }
3821
+ }
3822
+ function cf_getAlignPadding(itm, o) {
3823
+ var x = (is_number(o[o.d['width']])) ? Math.ceil(o[o.d['width']] - ms_getTotalSize(itm, o, 'width')) : 0;
3824
+ switch (o.align)
3825
+ {
3826
+ case 'left':
3827
+ return [0, x];
3828
+ case 'right':
3829
+ return [x, 0];
3830
+ case 'center':
3831
+ default:
3832
+ return [Math.ceil(x/2), Math.floor(x/2)];
3833
+ }
3834
+ }
3835
+ function cf_getDimensions(o) {
3836
+ var dm = [
3837
+ ['width' , 'innerWidth' , 'outerWidth' , 'height' , 'innerHeight' , 'outerHeight' , 'left', 'top' , 'marginRight' , 0, 1, 2, 3],
3838
+ ['height' , 'innerHeight' , 'outerHeight' , 'width' , 'innerWidth' , 'outerWidth' , 'top' , 'left', 'marginBottom', 3, 2, 1, 0]
3839
+ ];
3840
+
3841
+ var dl = dm[0].length,
3842
+ dx = (o.direction == 'right' || o.direction == 'left') ? 0 : 1;
3843
+
3844
+ var dimensions = {};
3845
+ for (var d = 0; d < dl; d++)
3846
+ {
3847
+ dimensions[dm[0][d]] = dm[dx][d];
3848
+ }
3849
+ return dimensions;
3850
+ }
3851
+ function cf_getAdjust(x, o, a, $t) {
3852
+ var v = x;
3853
+ if (is_function(a))
3854
+ {
3855
+ v = a.call($t, v);
3856
+
3857
+ }
3858
+ else if (is_string(a))
3859
+ {
3860
+ var p = a.split('+'),
3861
+ m = a.split('-');
3862
+
3863
+ if (m.length > p.length)
3864
+ {
3865
+ var neg = true,
3866
+ sta = m[0],
3867
+ adj = m[1];
3868
+ }
3869
+ else
3870
+ {
3871
+ var neg = false,
3872
+ sta = p[0],
3873
+ adj = p[1];
3874
+ }
3875
+
3876
+ switch(sta)
3877
+ {
3878
+ case 'even':
3879
+ v = (x % 2 == 1) ? x-1 : x;
3880
+ break;
3881
+ case 'odd':
3882
+ v = (x % 2 == 0) ? x-1 : x;
3883
+ break;
3884
+ default:
3885
+ v = x;
3886
+ break;
3887
+ }
3888
+ adj = parseInt(adj, 10);
3889
+ if (is_number(adj))
3890
+ {
3891
+ if (neg)
3892
+ {
3893
+ adj = -adj;
3894
+ }
3895
+ v += adj;
3896
+ }
3897
+ }
3898
+ if (!is_number(v) || v < 1)
3899
+ {
3900
+ v = 1;
3901
+ }
3902
+ return v;
3903
+ }
3904
+ function cf_getItemsAdjust(x, o, a, $t) {
3905
+ return cf_getItemAdjustMinMax(cf_getAdjust(x, o, a, $t), o.items.visibleConf);
3906
+ }
3907
+ function cf_getItemAdjustMinMax(v, i) {
3908
+ if (is_number(i.min) && v < i.min)
3909
+ {
3910
+ v = i.min;
3911
+ }
3912
+ if (is_number(i.max) && v > i.max)
3913
+ {
3914
+ v = i.max;
3915
+ }
3916
+ if (v < 1)
3917
+ {
3918
+ v = 1;
3919
+ }
3920
+ return v;
3921
+ }
3922
+ function cf_getSynchArr(s) {
3923
+ if (!is_array(s))
3924
+ {
3925
+ s = [[s]];
3926
+ }
3927
+ if (!is_array(s[0]))
3928
+ {
3929
+ s = [s];
3930
+ }
3931
+ for (var j = 0, l = s.length; j < l; j++)
3932
+ {
3933
+ if (is_string(s[j][0]))
3934
+ {
3935
+ s[j][0] = $(s[j][0]);
3936
+ }
3937
+ if (!is_boolean(s[j][1]))
3938
+ {
3939
+ s[j][1] = true;
3940
+ }
3941
+ if (!is_boolean(s[j][2]))
3942
+ {
3943
+ s[j][2] = true;
3944
+ }
3945
+ if (!is_number(s[j][3]))
3946
+ {
3947
+ s[j][3] = 0;
3948
+ }
3949
+ }
3950
+ return s;
3951
+ }
3952
+ function cf_getKeyCode(k) {
3953
+ if (k == 'right')
3954
+ {
3955
+ return 39;
3956
+ }
3957
+ if (k == 'left')
3958
+ {
3959
+ return 37;
3960
+ }
3961
+ if (k == 'up')
3962
+ {
3963
+ return 38;
3964
+ }
3965
+ if (k == 'down')
3966
+ {
3967
+ return 40;
3968
+ }
3969
+ return -1;
3970
+ }
3971
+ function cf_setCookie(n, $c, c) {
3972
+ if (n)
3973
+ {
3974
+ var v = $c.triggerHandler(cf_e('currentPosition', c));
3975
+ $.fn.carouFredSel.cookie.set(n, v);
3976
+ }
3977
+ }
3978
+ function cf_getCookie(n) {
3979
+ var c = $.fn.carouFredSel.cookie.get(n);
3980
+ return (c == '') ? 0 : c;
3981
+ }
3982
+
3983
+ // init function
3984
+ function in_mapCss($elem, props) {
3985
+ var css = {};
3986
+ for (var p = 0, l = props.length; p < l; p++)
3987
+ {
3988
+ css[props[p]] = $elem.css(props[p]);
3989
+ }
3990
+ return css;
3991
+ }
3992
+ function in_complementItems(obj, opt, itm, sta) {
3993
+ if (!is_object(obj.visibleConf))
3994
+ {
3995
+ obj.visibleConf = {};
3996
+ }
3997
+ if (!is_object(obj.sizesConf))
3998
+ {
3999
+ obj.sizesConf = {};
4000
+ }
4001
+
4002
+ if (obj.start == 0 && is_number(sta))
4003
+ {
4004
+ obj.start = sta;
4005
+ }
4006
+
4007
+ // visible items
4008
+ if (is_object(obj.visible))
4009
+ {
4010
+ obj.visibleConf.min = obj.visible.min;
4011
+ obj.visibleConf.max = obj.visible.max;
4012
+ obj.visible = false;
4013
+ }
4014
+ else if (is_string(obj.visible))
4015
+ {
4016
+ // variable visible items
4017
+ if (obj.visible == 'variable')
4018
+ {
4019
+ obj.visibleConf.variable = true;
4020
+ }
4021
+ // adjust string visible items
4022
+ else
4023
+ {
4024
+ obj.visibleConf.adjust = obj.visible;
4025
+ }
4026
+ obj.visible = false;
4027
+ }
4028
+ else if (is_function(obj.visible))
4029
+ {
4030
+ obj.visibleConf.adjust = obj.visible;
4031
+ obj.visible = false;
4032
+ }
4033
+
4034
+ // set items filter
4035
+ if (!is_string(obj.filter))
4036
+ {
4037
+ obj.filter = (itm.filter(':hidden').length > 0) ? ':visible' : '*';
4038
+ }
4039
+
4040
+ // primary item-size not set
4041
+ if (!obj[opt.d['width']])
4042
+ {
4043
+ // responsive carousel -> set to largest
4044
+ if (opt.responsive)
4045
+ {
4046
+ debug(true, 'Set a '+opt.d['width']+' for the items!');
4047
+ obj[opt.d['width']] = ms_getTrueLargestSize(itm, opt, 'outerWidth');
4048
+ }
4049
+ // non-responsive -> measure it or set to "variable"
4050
+ else
4051
+ {
4052
+ obj[opt.d['width']] = (ms_hasVariableSizes(itm, opt, 'outerWidth'))
4053
+ ? 'variable'
4054
+ : itm[opt.d['outerWidth']](true);
4055
+ }
4056
+ }
4057
+
4058
+ // secondary item-size not set -> measure it or set to "variable"
4059
+ if (!obj[opt.d['height']])
4060
+ {
4061
+ obj[opt.d['height']] = (ms_hasVariableSizes(itm, opt, 'outerHeight'))
4062
+ ? 'variable'
4063
+ : itm[opt.d['outerHeight']](true);
4064
+ }
4065
+
4066
+ obj.sizesConf.width = obj.width;
4067
+ obj.sizesConf.height = obj.height;
4068
+ return obj;
4069
+ }
4070
+ function in_complementVisibleItems(opt, avl) {
4071
+ // primary item-size variable -> set visible items variable
4072
+ if (opt.items[opt.d['width']] == 'variable')
4073
+ {
4074
+ opt.items.visibleConf.variable = true;
4075
+ }
4076
+ if (!opt.items.visibleConf.variable) {
4077
+ // primary size is number -> calculate visible-items
4078
+ if (is_number(opt[opt.d['width']]))
4079
+ {
4080
+ opt.items.visible = Math.floor(opt[opt.d['width']] / opt.items[opt.d['width']]);
4081
+ }
4082
+ // measure and calculate primary size and visible-items
4083
+ else
4084
+ {
4085
+ opt.items.visible = Math.floor(avl / opt.items[opt.d['width']]);
4086
+ opt[opt.d['width']] = opt.items.visible * opt.items[opt.d['width']];
4087
+ if (!opt.items.visibleConf.adjust)
4088
+ {
4089
+ opt.align = false;
4090
+ }
4091
+ }
4092
+ if (opt.items.visible == 'Infinity' || opt.items.visible < 1)
4093
+ {
4094
+ debug(true, 'Not a valid number of visible items: Set to "variable".');
4095
+ opt.items.visibleConf.variable = true;
4096
+ }
4097
+ }
4098
+ return opt;
4099
+ }
4100
+ function in_complementPrimarySize(obj, opt, all) {
4101
+ // primary size set to auto -> measure largest item-size and set it
4102
+ if (obj == 'auto')
4103
+ {
4104
+ obj = ms_getTrueLargestSize(all, opt, 'outerWidth');
4105
+ }
4106
+ return obj;
4107
+ }
4108
+ function in_complementSecondarySize(obj, opt, all) {
4109
+ // secondary size set to auto -> measure largest item-size and set it
4110
+ if (obj == 'auto')
4111
+ {
4112
+ obj = ms_getTrueLargestSize(all, opt, 'outerHeight');
4113
+ }
4114
+ // secondary size not set -> set to secondary item-size
4115
+ if (!obj)
4116
+ {
4117
+ obj = opt.items[opt.d['height']];
4118
+ }
4119
+ return obj;
4120
+ }
4121
+ function in_getAlignPadding(o, all) {
4122
+ var p = cf_getAlignPadding(gi_getCurrentItems(all, o), o);
4123
+ o.padding[o.d[1]] = p[1];
4124
+ o.padding[o.d[3]] = p[0];
4125
+ return o;
4126
+ }
4127
+ function in_getResponsiveValues(o, all, avl) {
4128
+
4129
+ var visb = cf_getItemAdjustMinMax(Math.ceil(o[o.d['width']] / o.items[o.d['width']]), o.items.visibleConf);
4130
+ if (visb > all.length)
4131
+ {
4132
+ visb = all.length;
4133
+ }
4134
+
4135
+ var newS = Math.floor(o[o.d['width']]/visb);
4136
+
4137
+ o.items.visible = visb;
4138
+ o.items[o.d['width']] = newS;
4139
+ o[o.d['width']] = visb * newS;
4140
+ return o;
4141
+ }
4142
+
4143
+
4144
+ // buttons functions
4145
+ function bt_pauseOnHoverConfig(p) {
4146
+ if (is_string(p))
4147
+ {
4148
+ var i = (p.indexOf('immediate') > -1) ? true : false,
4149
+ r = (p.indexOf('resume') > -1) ? true : false;
4150
+ }
4151
+ else
4152
+ {
4153
+ var i = r = false;
4154
+ }
4155
+ return [i, r];
4156
+ }
4157
+ function bt_mousesheelNumber(mw) {
4158
+ return (is_number(mw)) ? mw : null
4159
+ }
4160
+
4161
+ // helper functions
4162
+ function is_null(a) {
4163
+ return (a === null);
4164
+ }
4165
+ function is_undefined(a) {
4166
+ return (is_null(a) || typeof a == 'undefined' || a === '' || a === 'undefined');
4167
+ }
4168
+ function is_array(a) {
4169
+ return (a instanceof Array);
4170
+ }
4171
+ function is_jquery(a) {
4172
+ return (a instanceof jQuery);
4173
+ }
4174
+ function is_object(a) {
4175
+ return ((a instanceof Object || typeof a == 'object') && !is_null(a) && !is_jquery(a) && !is_array(a) && !is_function(a));
4176
+ }
4177
+ function is_number(a) {
4178
+ return ((a instanceof Number || typeof a == 'number') && !isNaN(a));
4179
+ }
4180
+ function is_string(a) {
4181
+ return ((a instanceof String || typeof a == 'string') && !is_undefined(a) && !is_true(a) && !is_false(a));
4182
+ }
4183
+ function is_function(a) {
4184
+ return (a instanceof Function || typeof a == 'function');
4185
+ }
4186
+ function is_boolean(a) {
4187
+ return (a instanceof Boolean || typeof a == 'boolean' || is_true(a) || is_false(a));
4188
+ }
4189
+ function is_true(a) {
4190
+ return (a === true || a === 'true');
4191
+ }
4192
+ function is_false(a) {
4193
+ return (a === false || a === 'false');
4194
+ }
4195
+ function is_percentage(x) {
4196
+ return (is_string(x) && x.slice(-1) == '%');
4197
+ }
4198
+
4199
+
4200
+ function getTime() {
4201
+ return new Date().getTime();
4202
+ }
4203
+
4204
+ function deprecated( o, n ) {
4205
+ debug(true, o+' is DEPRECATED, support for it will be removed. Use '+n+' instead.');
4206
+ }
4207
+ function debug(d, m) {
4208
+ if (!is_undefined(window.console) && !is_undefined(window.console.log))
4209
+ {
4210
+ if (is_object(d))
4211
+ {
4212
+ var s = ' ('+d.selector+')';
4213
+ d = d.debug;
4214
+ }
4215
+ else
4216
+ {
4217
+ var s = '';
4218
+ }
4219
+ if (!d)
4220
+ {
4221
+ return false;
4222
+ }
4223
+
4224
+ if (is_string(m))
4225
+ {
4226
+ m = 'carouFredSel'+s+': ' + m;
4227
+ }
4228
+ else
4229
+ {
4230
+ m = ['carouFredSel'+s+':', m];
4231
+ }
4232
+ window.console.log(m);
4233
+ }
4234
+ return false;
4235
+ }
4236
+
4237
+
4238
+
4239
+ // EASING FUNCTIONS
4240
+ $.extend($.easing, {
4241
+ 'quadratic': function(t) {
4242
+ var t2 = t * t;
4243
+ return t * (-t2 * t + 4 * t2 - 6 * t + 4);
4244
+ },
4245
+ 'cubic': function(t) {
4246
+ return t * (4 * t * t - 9 * t + 6);
4247
+ },
4248
+ 'elastic': function(t) {
4249
+ var t2 = t * t;
4250
+ return t * (33 * t2 * t2 - 106 * t2 * t + 126 * t2 - 67 * t + 15);
4251
+ }
4252
+ });
4253
+
4254
+
4255
+ })(jQuery);