jail 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- 24607
1
+ 37685
@@ -0,0 +1,662 @@
1
+ /*
2
+ * jQuery Nivo Slider v3.1
3
+ * http://nivo.dev7studios.com
4
+ *
5
+ * Copyright 2012, Dev7studios
6
+ * Free to use and abuse under the MIT license.
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ */
9
+
10
+ (function($) {
11
+ var NivoSlider = function(element, options){
12
+ // Defaults are below
13
+ var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
14
+
15
+ // Useful variables. Play carefully.
16
+ var vars = {
17
+ currentSlide: 0,
18
+ currentImage: '',
19
+ totalSlides: 0,
20
+ running: false,
21
+ paused: false,
22
+ stop: false,
23
+ controlNavEl: false
24
+ };
25
+
26
+ // Get this slider
27
+ var slider = $(element);
28
+ slider.data('nivo:vars', vars).addClass('nivoSlider');
29
+
30
+ // Find our slider children
31
+ var kids = slider.children();
32
+ kids.each(function() {
33
+ var child = $(this);
34
+ var link = '';
35
+ if(!child.is('img')){
36
+ if(child.is('a')){
37
+ child.addClass('nivo-imageLink');
38
+ link = child;
39
+ }
40
+ child = child.find('img:first');
41
+ }
42
+ // Get img width & height
43
+ var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
44
+ childHeight = (childHeight === 0) ? child.attr('height') : child.height();
45
+
46
+ if(link !== ''){
47
+ link.css('display','none');
48
+ }
49
+ child.css('display','none');
50
+ vars.totalSlides++;
51
+ });
52
+
53
+ // If randomStart
54
+ if(settings.randomStart){
55
+ settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
56
+ }
57
+
58
+ // Set startSlide
59
+ if(settings.startSlide > 0){
60
+ if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
61
+ vars.currentSlide = settings.startSlide;
62
+ }
63
+
64
+ // Get initial image
65
+ if($(kids[vars.currentSlide]).is('img')){
66
+ vars.currentImage = $(kids[vars.currentSlide]);
67
+ } else {
68
+ vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
69
+ }
70
+
71
+ // Show initial link
72
+ if($(kids[vars.currentSlide]).is('a')){
73
+ $(kids[vars.currentSlide]).css('display','block');
74
+ }
75
+
76
+ // Set first background
77
+ var sliderImg = $('<img class="nivo-main-image" src="#" />');
78
+ sliderImg.attr('src', vars.currentImage.attr('src')).show();
79
+ slider.append(sliderImg);
80
+
81
+ // Detect Window Resize
82
+ $(window).resize(function() {
83
+ slider.children('img').width(slider.width());
84
+ sliderImg.attr('src', vars.currentImage.attr('src'));
85
+ sliderImg.stop().height('auto');
86
+ $('.nivo-slice').remove();
87
+ $('.nivo-box').remove();
88
+ });
89
+
90
+ //Create caption
91
+ slider.append($('<div class="nivo-caption"></div>'));
92
+
93
+ // Process caption function
94
+ var processCaption = function(settings){
95
+ var nivoCaption = $('.nivo-caption', slider);
96
+ if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){
97
+ var title = vars.currentImage.attr('title');
98
+ if(title.substr(0,1) == '#') title = $(title).html();
99
+
100
+ if(nivoCaption.css('display') == 'block'){
101
+ setTimeout(function(){
102
+ nivoCaption.html(title);
103
+ }, settings.animSpeed);
104
+ } else {
105
+ nivoCaption.html(title);
106
+ nivoCaption.stop().fadeIn(settings.animSpeed);
107
+ }
108
+ } else {
109
+ nivoCaption.stop().fadeOut(settings.animSpeed);
110
+ }
111
+ }
112
+
113
+ //Process initial caption
114
+ processCaption(settings);
115
+
116
+ // In the words of Super Mario "let's a go!"
117
+ var timer = 0;
118
+ if(!settings.manualAdvance && kids.length > 1){
119
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
120
+ }
121
+
122
+ // Add Direction nav
123
+ if(settings.directionNav){
124
+ slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
125
+
126
+ $('a.nivo-prevNav', slider).live('click', function(){
127
+ if(vars.running) { return false; }
128
+ clearInterval(timer);
129
+ timer = '';
130
+ vars.currentSlide -= 2;
131
+ nivoRun(slider, kids, settings, 'prev');
132
+ });
133
+
134
+ $('a.nivo-nextNav', slider).live('click', function(){
135
+ if(vars.running) { return false; }
136
+ clearInterval(timer);
137
+ timer = '';
138
+ nivoRun(slider, kids, settings, 'next');
139
+ });
140
+ }
141
+
142
+ // Add Control nav
143
+ if(settings.controlNav){
144
+ vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
145
+ slider.after(vars.controlNavEl);
146
+ for(var i = 0; i < kids.length; i++){
147
+ if(settings.controlNavThumbs){
148
+ vars.controlNavEl.addClass('nivo-thumbs-enabled');
149
+ var child = kids.eq(i);
150
+ if(!child.is('img')){
151
+ child = child.find('img:first');
152
+ }
153
+ if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
154
+ } else {
155
+ vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
156
+ }
157
+ }
158
+
159
+ //Set initial active link
160
+ $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
161
+
162
+ $('a', vars.controlNavEl).bind('click', function(){
163
+ if(vars.running) return false;
164
+ if($(this).hasClass('active')) return false;
165
+ clearInterval(timer);
166
+ timer = '';
167
+ sliderImg.attr('src', vars.currentImage.attr('src'));
168
+ vars.currentSlide = $(this).attr('rel') - 1;
169
+ nivoRun(slider, kids, settings, 'control');
170
+ });
171
+ }
172
+
173
+ //For pauseOnHover setting
174
+ if(settings.pauseOnHover){
175
+ slider.hover(function(){
176
+ vars.paused = true;
177
+ clearInterval(timer);
178
+ timer = '';
179
+ }, function(){
180
+ vars.paused = false;
181
+ // Restart the timer
182
+ if(timer === '' && !settings.manualAdvance){
183
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
184
+ }
185
+ });
186
+ }
187
+
188
+ // Event when Animation finishes
189
+ slider.bind('nivo:animFinished', function(){
190
+ sliderImg.attr('src', vars.currentImage.attr('src'));
191
+ vars.running = false;
192
+ // Hide child links
193
+ $(kids).each(function(){
194
+ if($(this).is('a')){
195
+ $(this).css('display','none');
196
+ }
197
+ });
198
+ // Show current link
199
+ if($(kids[vars.currentSlide]).is('a')){
200
+ $(kids[vars.currentSlide]).css('display','block');
201
+ }
202
+ // Restart the timer
203
+ if(timer === '' && !vars.paused && !settings.manualAdvance){
204
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
205
+ }
206
+ // Trigger the afterChange callback
207
+ settings.afterChange.call(this);
208
+ });
209
+
210
+ // Add slices for slice animations
211
+ var createSlices = function(slider, settings, vars) {
212
+ if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
213
+ $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
214
+ var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
215
+
216
+ for(var i = 0; i < settings.slices; i++){
217
+ var sliceWidth = Math.round(slider.width()/settings.slices);
218
+
219
+ if(i === settings.slices-1){
220
+ slider.append(
221
+ $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
222
+ left:(sliceWidth*i)+'px',
223
+ width:(slider.width()-(sliceWidth*i))+'px',
224
+ height:sliceHeight+'px',
225
+ opacity:'0',
226
+ overflow:'hidden'
227
+ })
228
+ );
229
+ } else {
230
+ slider.append(
231
+ $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
232
+ left:(sliceWidth*i)+'px',
233
+ width:sliceWidth+'px',
234
+ height:sliceHeight+'px',
235
+ opacity:'0',
236
+ overflow:'hidden'
237
+ })
238
+ );
239
+ }
240
+ }
241
+
242
+ $('.nivo-slice', slider).height(sliceHeight);
243
+ sliderImg.stop().animate({
244
+ height: $(vars.currentImage).height()
245
+ }, settings.animSpeed);
246
+ };
247
+
248
+ // Add boxes for box animations
249
+ var createBoxes = function(slider, settings, vars){
250
+ if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
251
+ $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
252
+ var boxWidth = Math.round(slider.width()/settings.boxCols),
253
+ boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
254
+
255
+
256
+ for(var rows = 0; rows < settings.boxRows; rows++){
257
+ for(var cols = 0; cols < settings.boxCols; cols++){
258
+ if(cols === settings.boxCols-1){
259
+ slider.append(
260
+ $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
261
+ opacity:0,
262
+ left:(boxWidth*cols)+'px',
263
+ top:(boxHeight*rows)+'px',
264
+ width:(slider.width()-(boxWidth*cols))+'px'
265
+
266
+ })
267
+ );
268
+ $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
269
+ } else {
270
+ slider.append(
271
+ $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
272
+ opacity:0,
273
+ left:(boxWidth*cols)+'px',
274
+ top:(boxHeight*rows)+'px',
275
+ width:boxWidth+'px'
276
+ })
277
+ );
278
+ $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
279
+ }
280
+ }
281
+ }
282
+
283
+ sliderImg.stop().animate({
284
+ height: $(vars.currentImage).height()
285
+ }, settings.animSpeed);
286
+ };
287
+
288
+ // Private run method
289
+ var nivoRun = function(slider, kids, settings, nudge){
290
+ // Get our vars
291
+ var vars = slider.data('nivo:vars');
292
+
293
+ // Trigger the lastSlide callback
294
+ if(vars && (vars.currentSlide === vars.totalSlides - 1)){
295
+ settings.lastSlide.call(this);
296
+ }
297
+
298
+ // Stop
299
+ if((!vars || vars.stop) && !nudge) { return false; }
300
+
301
+ // Trigger the beforeChange callback
302
+ settings.beforeChange.call(this);
303
+
304
+ // Set current background before change
305
+ if(!nudge){
306
+ sliderImg.attr('src', vars.currentImage.attr('src'));
307
+ } else {
308
+ if(nudge === 'prev'){
309
+ sliderImg.attr('src', vars.currentImage.attr('src'));
310
+ }
311
+ if(nudge === 'next'){
312
+ sliderImg.attr('src', vars.currentImage.attr('src'));
313
+ }
314
+ }
315
+
316
+ vars.currentSlide++;
317
+ // Trigger the slideshowEnd callback
318
+ if(vars.currentSlide === vars.totalSlides){
319
+ vars.currentSlide = 0;
320
+ settings.slideshowEnd.call(this);
321
+ }
322
+ if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
323
+ // Set vars.currentImage
324
+ if($(kids[vars.currentSlide]).is('img')){
325
+ vars.currentImage = $(kids[vars.currentSlide]);
326
+ } else {
327
+ vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
328
+ }
329
+
330
+ // Set active links
331
+ if(settings.controlNav){
332
+ $('a', vars.controlNavEl).removeClass('active');
333
+ $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
334
+ }
335
+
336
+ // Process caption
337
+ processCaption(settings);
338
+
339
+ // Remove any slices from last transition
340
+ $('.nivo-slice', slider).remove();
341
+
342
+ // Remove any boxes from last transition
343
+ $('.nivo-box', slider).remove();
344
+
345
+ var currentEffect = settings.effect,
346
+ anims = '';
347
+
348
+ // Generate random effect
349
+ if(settings.effect === 'random'){
350
+ anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
351
+ 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
352
+ currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
353
+ if(currentEffect === undefined) { currentEffect = 'fade'; }
354
+ }
355
+
356
+ // Run random effect from specified set (eg: effect:'fold,fade')
357
+ if(settings.effect.indexOf(',') !== -1){
358
+ anims = settings.effect.split(',');
359
+ currentEffect = anims[Math.floor(Math.random()*(anims.length))];
360
+ if(currentEffect === undefined) { currentEffect = 'fade'; }
361
+ }
362
+
363
+ // Custom transition as defined by "data-transition" attribute
364
+ if(vars.currentImage.attr('data-transition')){
365
+ currentEffect = vars.currentImage.attr('data-transition');
366
+ }
367
+
368
+ // Run effects
369
+ vars.running = true;
370
+ var timeBuff = 0,
371
+ i = 0,
372
+ slices = '',
373
+ firstSlice = '',
374
+ totalBoxes = '',
375
+ boxes = '';
376
+
377
+ if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
378
+ createSlices(slider, settings, vars);
379
+ timeBuff = 0;
380
+ i = 0;
381
+ slices = $('.nivo-slice', slider);
382
+ if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
383
+
384
+ slices.each(function(){
385
+ var slice = $(this);
386
+ slice.css({ 'top': '0px' });
387
+ if(i === settings.slices-1){
388
+ setTimeout(function(){
389
+ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
390
+ }, (100 + timeBuff));
391
+ } else {
392
+ setTimeout(function(){
393
+ slice.animate({opacity:'1.0' }, settings.animSpeed);
394
+ }, (100 + timeBuff));
395
+ }
396
+ timeBuff += 50;
397
+ i++;
398
+ });
399
+ } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
400
+ createSlices(slider, settings, vars);
401
+ timeBuff = 0;
402
+ i = 0;
403
+ slices = $('.nivo-slice', slider);
404
+ if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); }
405
+
406
+ slices.each(function(){
407
+ var slice = $(this);
408
+ slice.css({ 'bottom': '0px' });
409
+ if(i === settings.slices-1){
410
+ setTimeout(function(){
411
+ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
412
+ }, (100 + timeBuff));
413
+ } else {
414
+ setTimeout(function(){
415
+ slice.animate({opacity:'1.0' }, settings.animSpeed);
416
+ }, (100 + timeBuff));
417
+ }
418
+ timeBuff += 50;
419
+ i++;
420
+ });
421
+ } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
422
+ createSlices(slider, settings, vars);
423
+ timeBuff = 0;
424
+ i = 0;
425
+ var v = 0;
426
+ slices = $('.nivo-slice', slider);
427
+ if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); }
428
+
429
+ slices.each(function(){
430
+ var slice = $(this);
431
+ if(i === 0){
432
+ slice.css('top','0px');
433
+ i++;
434
+ } else {
435
+ slice.css('bottom','0px');
436
+ i = 0;
437
+ }
438
+
439
+ if(v === settings.slices-1){
440
+ setTimeout(function(){
441
+ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
442
+ }, (100 + timeBuff));
443
+ } else {
444
+ setTimeout(function(){
445
+ slice.animate({opacity:'1.0' }, settings.animSpeed);
446
+ }, (100 + timeBuff));
447
+ }
448
+ timeBuff += 50;
449
+ v++;
450
+ });
451
+ } else if(currentEffect === 'fold'){
452
+ createSlices(slider, settings, vars);
453
+ timeBuff = 0;
454
+ i = 0;
455
+
456
+ $('.nivo-slice', slider).each(function(){
457
+ var slice = $(this);
458
+ var origWidth = slice.width();
459
+ slice.css({ top:'0px', width:'0px' });
460
+ if(i === settings.slices-1){
461
+ setTimeout(function(){
462
+ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
463
+ }, (100 + timeBuff));
464
+ } else {
465
+ setTimeout(function(){
466
+ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
467
+ }, (100 + timeBuff));
468
+ }
469
+ timeBuff += 50;
470
+ i++;
471
+ });
472
+ } else if(currentEffect === 'fade'){
473
+ createSlices(slider, settings, vars);
474
+
475
+ firstSlice = $('.nivo-slice:first', slider);
476
+ firstSlice.css({
477
+ 'width': slider.width() + 'px'
478
+ });
479
+
480
+ firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
481
+ } else if(currentEffect === 'slideInRight'){
482
+ createSlices(slider, settings, vars);
483
+
484
+ firstSlice = $('.nivo-slice:first', slider);
485
+ firstSlice.css({
486
+ 'width': '0px',
487
+ 'opacity': '1'
488
+ });
489
+
490
+ firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); });
491
+ } else if(currentEffect === 'slideInLeft'){
492
+ createSlices(slider, settings, vars);
493
+
494
+ firstSlice = $('.nivo-slice:first', slider);
495
+ firstSlice.css({
496
+ 'width': '0px',
497
+ 'opacity': '1',
498
+ 'left': '',
499
+ 'right': '0px'
500
+ });
501
+
502
+ firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){
503
+ // Reset positioning
504
+ firstSlice.css({
505
+ 'left': '0px',
506
+ 'right': ''
507
+ });
508
+ slider.trigger('nivo:animFinished');
509
+ });
510
+ } else if(currentEffect === 'boxRandom'){
511
+ createBoxes(slider, settings, vars);
512
+
513
+ totalBoxes = settings.boxCols * settings.boxRows;
514
+ i = 0;
515
+ timeBuff = 0;
516
+
517
+ boxes = shuffle($('.nivo-box', slider));
518
+ boxes.each(function(){
519
+ var box = $(this);
520
+ if(i === totalBoxes-1){
521
+ setTimeout(function(){
522
+ box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
523
+ }, (100 + timeBuff));
524
+ } else {
525
+ setTimeout(function(){
526
+ box.animate({ opacity:'1' }, settings.animSpeed);
527
+ }, (100 + timeBuff));
528
+ }
529
+ timeBuff += 20;
530
+ i++;
531
+ });
532
+ } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
533
+ createBoxes(slider, settings, vars);
534
+
535
+ totalBoxes = settings.boxCols * settings.boxRows;
536
+ i = 0;
537
+ timeBuff = 0;
538
+
539
+ // Split boxes into 2D array
540
+ var rowIndex = 0;
541
+ var colIndex = 0;
542
+ var box2Darr = [];
543
+ box2Darr[rowIndex] = [];
544
+ boxes = $('.nivo-box', slider);
545
+ if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
546
+ boxes = $('.nivo-box', slider)._reverse();
547
+ }
548
+ boxes.each(function(){
549
+ box2Darr[rowIndex][colIndex] = $(this);
550
+ colIndex++;
551
+ if(colIndex === settings.boxCols){
552
+ rowIndex++;
553
+ colIndex = 0;
554
+ box2Darr[rowIndex] = [];
555
+ }
556
+ });
557
+
558
+ // Run animation
559
+ for(var cols = 0; cols < (settings.boxCols * 2); cols++){
560
+ var prevCol = cols;
561
+ for(var rows = 0; rows < settings.boxRows; rows++){
562
+ if(prevCol >= 0 && prevCol < settings.boxCols){
563
+ /* Due to some weird JS bug with loop vars
564
+ being used in setTimeout, this is wrapped
565
+ with an anonymous function call */
566
+ (function(row, col, time, i, totalBoxes) {
567
+ var box = $(box2Darr[row][col]);
568
+ var w = box.width();
569
+ var h = box.height();
570
+ if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
571
+ box.width(0).height(0);
572
+ }
573
+ if(i === totalBoxes-1){
574
+ setTimeout(function(){
575
+ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
576
+ }, (100 + time));
577
+ } else {
578
+ setTimeout(function(){
579
+ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
580
+ }, (100 + time));
581
+ }
582
+ })(rows, prevCol, timeBuff, i, totalBoxes);
583
+ i++;
584
+ }
585
+ prevCol--;
586
+ }
587
+ timeBuff += 100;
588
+ }
589
+ }
590
+ };
591
+
592
+ // Shuffle an array
593
+ var shuffle = function(arr){
594
+ for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x);
595
+ return arr;
596
+ };
597
+
598
+ // For debugging
599
+ var trace = function(msg){
600
+ if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
601
+ };
602
+
603
+ // Start / Stop
604
+ this.stop = function(){
605
+ if(!$(element).data('nivo:vars').stop){
606
+ $(element).data('nivo:vars').stop = true;
607
+ trace('Stop Slider');
608
+ }
609
+ };
610
+
611
+ this.start = function(){
612
+ if($(element).data('nivo:vars').stop){
613
+ $(element).data('nivo:vars').stop = false;
614
+ trace('Start Slider');
615
+ }
616
+ };
617
+
618
+ // Trigger the afterLoad callback
619
+ settings.afterLoad.call(this);
620
+
621
+ return this;
622
+ };
623
+
624
+ $.fn.nivoSlider = function(options) {
625
+ return this.each(function(key, value){
626
+ var element = $(this);
627
+ // Return early if this element already has a plugin instance
628
+ if (element.data('nivoslider')) { return element.data('nivoslider'); }
629
+ // Pass options to plugin constructor
630
+ var nivoslider = new NivoSlider(this, options);
631
+ // Store plugin object in this element's data
632
+ element.data('nivoslider', nivoslider);
633
+ });
634
+ };
635
+
636
+ //Default settings
637
+ $.fn.nivoSlider.defaults = {
638
+ effect: 'random',
639
+ slices: 15,
640
+ boxCols: 8,
641
+ boxRows: 4,
642
+ animSpeed: 500,
643
+ pauseTime: 3000,
644
+ startSlide: 0,
645
+ directionNav: true,
646
+ controlNav: true,
647
+ controlNavThumbs: false,
648
+ pauseOnHover: true,
649
+ manualAdvance: false,
650
+ prevText: 'Prev',
651
+ nextText: 'Next',
652
+ randomStart: false,
653
+ beforeChange: function(){},
654
+ afterChange: function(){},
655
+ slideshowEnd: function(){},
656
+ lastSlide: function(){},
657
+ afterLoad: function(){}
658
+ };
659
+
660
+ $.fn._reverse = [].reverse;
661
+
662
+ })(jQuery);