PageSourceSearch

https://www.assises-riviere-loiret.fr/components/com_sppagebuilder/assets/js/sppagebuilder.js

js assises-riviere-loiret.fr collected 2026-10-03 02:46:28 UTC 63,609 bytes, 1,984 lines download raw bytes

vendor: 6,142 bytes, lines 1-225
1/**
2 * @package SP Page Builder
3 * @author JoomShaper http://www.joomshaper.com
4 * @copyright Copyright (c) 2010 - 2015 JoomShaper
5 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
6*/
7
8+function ($) {
9  'use strict';
10
11  // ALERT CLASS DEFINITION
12  // ======================
13
14  var dismiss = '[data-dismiss="sppb-alert"]'
15  var SPPBAlert   = function (el) {
16    $(el).on('click', dismiss, this.close)
17  }
18
19  SPPBAlert.VERSION = '3.2.0'
20
21  SPPBAlert.prototype.close = function (e) {
22    var $this    = $(this)
23    var selector = $this.attr('data-target')
24
25    if (!selector) {
26      selector = $this.attr('href')
27      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
28    }
29
30    var $parent = $(selector)
31
32    if (e) e.preventDefault()
33
34    if (!$parent.length) {
35      $parent = $this.hasClass('sppb-alert') ? $this : $this.parent()
36    }
37
38    $parent.trigger(e = $.Event('close.sppb.alert'))
39
40    if (e.isDefaultPrevented()) return
41
42    $parent.removeClass('in')
43
44    function removeElement() {
45      // detach from parent, fire event then clean up data
46      $parent.detach().trigger('closed.sppb.alert').remove()
47    }
48
49    $.support.transition && $parent.hasClass('sppb-fade') ?
50      $parent
51        .one('bsTransitionEnd', removeElement)
52        .emulateTransitionEnd(150) :
53      removeElement()
54  }
55
56
57  // ALERT PLUGIN DEFINITION
58  // =======================
59
60  function Plugin(option) {
61    return this.each(function () {
62      var $this = $(this)
63      var data  = $this.data('sppb.alert')
64
65      if (!data) $this.data('sppb.alert', (data = new SPPBAlert(this)))
66      if (typeof option == 'string') data[option].call($this)
67    })
68  }
69
70  var old = $.fn.spbalert
71
72  $.fn.spbalert             = Plugin
73  $.fn.spbalert.Constructor = SPPBAlert
74
75  // ALERT NO CONFLICT
76  // =================
77
78  $.fn.spbalert.noConflict = function () {
79    $.fn.spbalert = old
80    return this
81  }
82
83
84  // ALERT DATA-API
85  // ==============
86
87  $(document).on('click.sppb.alert.data-api', dismiss, SPPBAlert.prototype.close)
88
89}(jQuery);
90
91
92/* ========================================================================
93 * Bootstrap: carousel.js v3.2.0
94 * http://getbootstrap.com/javascript/#carousel
95 * ========================================================================
96 * Copyright 2011-2014 Twitter, Inc.
97 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
98 * ======================================================================== */
99
100
101+function ($) {
102  'use strict';
103
104  // CAROUSEL CLASS DEFINITION
105  // =========================
106
107  var SPPBCarousel = function (element, options) {
108    this.$element    = $(element).on('keydown.sppb.carousel', $.proxy(this.keydown, this))
109    this.$indicators = this.$element.find('.sppb-carousel-indicators')
110    this.options     = options
111    this.paused      =
112    this.sliding     =
113    this.interval    =
114    this.$active     =
115    this.$items      = null
116
117    this.options.pause == 'hover' && this.$element
118      .on('mouseenter.sppb.carousel', $.proxy(this.pause, this))
119      .on('mouseleave.sppb.carousel', $.proxy(this.cycle, this))
120  }
121
122  SPPBCarousel.VERSION  = '3.2.0'
123
124  SPPBCarousel.DEFAULTS = {
125    interval: 5000,
126    pause: 'hover',
127    wrap: true
128  }
129
130  SPPBCarousel.prototype.keydown = function (e) {
131    switch (e.which) {
132      case 37: this.prev(); break
133      case 39: this.next(); break
134      default: return
135    }
136
137    e.preventDefault()
138  }
139
140  SPPBCarousel.prototype.cycle = function (e) {
141    e || (this.paused = false)
142
143    this.interval && clearInterval(this.interval)
144
145    this.options.interval
146      && !this.paused
147      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
148
149    return this
150  }
151
152  SPPBCarousel.prototype.getItemIndex = function (item) {
153    this.$items = item.parent().children('.sppb-item')
154    return this.$items.index(item || this.$active)
155  }
156
157  SPPBCarousel.prototype.to = function (pos) {
158    var that        = this
159    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.sppb-item.active'))
160
161    if (pos > (this.$items.length - 1) || pos < 0) return
162
163    if (this.sliding)       return this.$element.one('slid.sppb.carousel', function () { that.to(pos) }) // yes, "slid"
164    if (activeIndex == pos) return this.pause().cycle()
165
166    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
167  }
168
169  SPPBCarousel.prototype.pause = function (e) {
170    e || (this.paused = true)
171
172    if (this.$element.find('.next, .prev').length && $.support.transition) {
173      this.$element.trigger($.support.transition.end)
174      this.cycle(true)
175    }
176
177    this.interval = clearInterval(this.interval)
178
179    return this
180  }
181
182  SPPBCarousel.prototype.next = function () {
183    if (this.sliding) return
184    return this.slide('next')
185  }
186
187  SPPBCarousel.prototype.prev = function () {
188    if (this.sliding) return
189    return this.slide('prev')
190  }
191
192  SPPBCarousel.prototype.slide = function (type, next) {
193    var $active   = this.$element.find('.sppb-item.active')
194    var $next     = next || $active[type]()
195    var isCycling = this.interval
196    var direction = type == 'next' ? 'left' : 'right'
197    var fallback  = type == 'next' ? 'first' : 'last'
198    var that      = this
199
200    if (!$next.length) {
201      if (!this.options.wrap) return
202      $next = this.$element.find('.sppb-item')[fallback]()
203    }
204
205    if ($next.hasClass('active')) return (this.sliding = false)
206
207    var relatedTarget = $next[0]
208    var slideEvent = $.Event('slide.sppb.carousel', {
209      relatedTarget: relatedTarget,
210      direction: direction
211    })
212    this.$element.trigger(slideEvent)
213    if (slideEvent.isDefaultPrevented()) return
214
215    this.sliding = true
216
217    isCycling && this.pause()
218
219    if (this.$indicators.length) {
220      this.$indicators.find('.active').removeClass('active')
221      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
222      $nextIndicator && $nextIndicator.addClass('active')
223    }
224
225    var slidEvent = $.Event('slid.sppb.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
226    if ($.support.transition && this.$element.hasClass('sppb-slide')) {
227      $next.addClass(type)
228      $next[0].offsetWidth // force reflow
229      $active.addClass(direction)
230      $next.addClass(direction)
231      $active
232        .one('bsTransitionEnd', function () {
233          $next.removeClass([type, direction].join(' ')).addClass('active')
234          $active.removeClass(['active', direction].join(' '))
235          that.sliding = false
236          setTimeout(function () {
237            that.$element.trigger(slidEvent)
238          }, 0)
239        })
240        .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
241    } else {
242      $active.removeClass('active')
243      $next.addClass('active')
244      this.sliding = false
245      this.$element.trigger(slidEvent)
246    }
247
248    isCycling && this.cycle()
249
250    return this
251  }
252
253
254  // CAROUSEL PLUGIN DEFINITION
255  // ==========================
256
257  function Plugin(option) {
258    return this.each(function () {
259      var $this   = $(this)
260      var data    = $this.data('sppb.carousel')
261      var options = $.extend({}, SPPBCarousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
262      var action  = typeof option == 'string' ? option : options.slide
263
264      if (!data) $this.data('sppb.carousel', (data = new SPPBCarousel(this, options)))
265      if (typeof option == 'number') data.to(option)
266      else if (action) data[action]()
267      else if (options.interval) data.pause().cycle()
268    })
269  }
270
271  var old = $.fn.sppbcarousel
272
273  $.fn.sppbcarousel             = Plugin
274  $.fn.sppbcarousel.Constructor = SPPBCarousel
275
276
277  // CAROUSEL NO CONFLICT
278  // ====================
279
280  $.fn.sppbcarousel.noConflict = function () {
281    $.fn.sppbcarousel = old
282    return this
283  }
284
285  //SP Page Builder
286  $(document).ready(function(){
287    $('.sppb-carousel').each(function (index) {
288      var items = $(this).find('.sppb-item');
289      var id = 'sppb-carousel' + (index+1);
290
291      //Set ID
292      $(this).attr('id', id );
293      
294      for (var i = 0; i < items.length; i++) {
295        if(i==0) {
296          $('<li data-sppb-target="#' + id + '" class="active" data-sppb-slide-to="0"></li>').appendTo($(this).find('>.sppb-carousel-indicators'));
297        } else {
298          $('<li data-sppb-target="#' + id + '" data-sppb-slide-to="' + i + '"></li>').appendTo($(this).find('>.sppb-carousel-indicators'));
299        }
300      };
301
302      $(this).find('.sppb-carousel-control').attr('href', '#' + id);
303
304      $(this).find('.sppb-item').first().addClass('active');
305    });
306  })
307
308
309  // CAROUSEL DATA-API
310  // =================
311
312  $(document).on('click.sppb.carousel.data-api', '[data-slide], [data-sppb-slide-to]', function (e) {
313    var href
314    var $this   = $(this)
315    var $target = $($this.attr('data-sppb-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
316    if (!$target.hasClass('sppb-carousel')) return
317    var options = $.extend({}, $target.data(), $this.data())
318    var slideIndex = $this.attr('data-sppb-slide-to')
319    if (slideIndex) options.interval = false
320
321    Plugin.call($target, options)
322
323    if (slideIndex) {
324      $target.data('sppb.carousel').to(slideIndex)
325    }
326
327    e.preventDefault()
328  })
329
330  $(window).on('load', function () {
331    $('[data-sppb-ride="sppb-carousel"]').each(function () {
332      var $carousel = $(this)
333      Plugin.call($carousel, $carousel.data())
334    })
335  })
336
337}(jQuery);
338
339
340/* ========================================================================
341 * Bootstrap: collapse.js v3.2.0
342 * http://getbootstrap.com/javascript/#collapse
343 * ========================================================================
344 * Copyright 2011-2014 Twitter, Inc.
345 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
346 * ======================================================================== */
347
348+function ($) {
349  'use strict';
350
351  $.fn.sppbAccordion = function(options){
352
353    var settings = $.extend({
354      hidefirst: 0
355    }, options);
356
357    return this.each(function(){
358
359      var $items      = $(this).find('>div');
360      var $handlers   = $items.find('.sppb-panel-heading');
361      var $panels     = $items.find('.sppb-panel-collapse');
362      $items.first().addClass('active');
363      $handlers.first().addClass('active');
364      $panels.hide().first().removeAttr('style');
365
366      $handlers.on('click', function(){
367
368        if( $(this).hasClass('active') )
369        {
370          $(this).removeClass('active');
371          $panels.slideUp();
372        }
373        else
374        {
375          $handlers.removeClass('active');
376          $panels.slideUp();
377          $(this).addClass('active').next().slideDown();
378        }
379      });
380
381    });
382  };
383
384  $(document).ready(function(){
385    $('.sppb-panel-group').sppbAccordion();
386  });
387
388}(jQuery);
389
390
391/* ========================================================================
392 * Bootstrap: tab.js v3.2.0
393 * http://getbootstrap.com/javascript/#tabs
394 * ========================================================================
395 * Copyright 2011-2014 Twitter, Inc.
396 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
397 * ======================================================================== */
398
399
400+function ($) {
401  'use strict';
402
403  // TAB CLASS DEFINITION
404  // ====================
405
406  var SPPBTab = function (element) {
407    this.element = $(element)
408  }
409
410  SPPBTab.VERSION = '3.2.0'
411
412  SPPBTab.prototype.show = function () {
413    var $this    = this.element
414    var $ul      = $this.closest('ul:not(.dropdown-menu)')
415    var selector = $this.data('target')
416
417    if (!selector) {
418      selector = $this.attr('href')
419      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
420    }
421
422    if ($this.parent('li').hasClass('active')) return
423
424    var previous = $ul.find('.active:last a')[0]
425    var e        = $.Event('show.sppb.tab', {
426      relatedTarget: previous
427    })
428
429    $this.trigger(e)
430
431    if (e.isDefaultPrevented()) return
432
433    var $target = $(selector)
434
435    this.activate($this.closest('li'), $ul)
436    this.activate($target, $target.parent(), function () {
437      $this.trigger({
438        type: 'shown.sppb.tab',
439        relatedTarget: previous
440      })
441    })
442  }
443
444  SPPBTab.prototype.activate = function (element, container, callback) {
445    var $active    = container.find('> .active')
446    var transition = callback
447      && $.support.transition
448      && $active.hasClass('sppb-fade')
449
450    function next() {
451      $active
452        .removeClass('active')
453        .find('> .dropdown-menu > .active')
454        .removeClass('active')
455
456      element.addClass('active')
457
458      if (transition) {
459        element[0].offsetWidth // reflow for transition
460        element.addClass('in')
461      } else {
462        element.removeClass('sppb-fade')
463      }
464
465      if (element.parent('.dropdown-menu')) {
466        element.closest('li.dropdown').addClass('active')
467      }
468
469      callback && callback()
470    }
471
472    transition ?
473      $active
474        .one('bsTransitionEnd', next)
475        .emulateTransitionEnd(150) :
476      next()
477
478    $active.removeClass('in')
479  }
480
481
482  // TAB PLUGIN DEFINITION
483  // =====================
484
485  function Plugin(option) {
486    return this.each(function () {
487      var $this = $(this)
488      var data  = $this.data('sppb.tab')
489
490      if (!data) $this.data('sppb.tab', (data = new SPPBTab(this)))
491      if (typeof option == 'string') data[option]()
492    })
493  }
494
495  var old = $.fn.sppbtab
496
497  $.fn.sppbtab             = Plugin
498  $.fn.sppbtab.Constructor = SPPBTab
499
500
501  // TAB NO CONFLICT
502  // ===============
503
504  $.fn.sppbtab.noConflict = function () {
505    $.fn.sppbtab = old
506    return this
507  }
508
509  //Dynamic IDS
510  $(document).ready(function () {
511    $('.sppb-tab').each(function (index){
512      var id = 'sppb-tab' + (index+1);
513
514      $(this).find('>.sppb-nav').children().each(function (index) {
515        $(this).find('>a').attr('href', '#' + id + '-' + (index+1) )
516      });
517
518      $(this).find('>.sppb-tab-content').children().each(function (index) {
519        $(this).attr('id', id + '-' + (index+1) )
520      });
521
522    });
523  });
524
525  // TAB DATA-API
526  // ============
527
528  $(document).on('click.sppb.tab.data-api', '[data-toggle="sppb-tab"], [data-toggle="sppb-pill"]', function (e) {
529    e.preventDefault()
530    Plugin.call($(this), 'show')
531  })
532
533}(jQuery);
534
535
536/* ========================================================================
537 * Bootstrap: tooltip.js v3.2.0
538 * http://getbootstrap.com/javascript/#tooltip
539 * Inspired by the original jQuery.tipsy by Jason Frame
540 * ========================================================================
541 * Copyright 2011-2014 Twitter, Inc.
542 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
543 * ======================================================================== */
544
545
546+function ($) {
547  'use strict';
548
549  // TOOLTIP PUBLIC CLASS DEFINITION
550  // ===============================
551
552  var SPPBTooltip = function (element, options) {
553    this.type       =
554    this.options    =
555    this.enabled    =
556    this.timeout    =
557    this.hoverState =
558    this.$element   = null
559
560    this.init('sppbtooltip', element, options)
561  }
562
563  SPPBTooltip.VERSION  = '3.2.0'
564
565  SPPBTooltip.DEFAULTS = {
566    animation: true,
567    placement: 'top',
568    selector: false,
569    template: '<div class="sppb-tooltip" role="tooltip"><div class="sppb-tooltip-arrow"></div><div class="sppb-tooltip-inner"></div></div>',
570    trigger: 'hover focus',
571    title: '',
572    delay: 0,
573    html: false,
574    container: false,
575    viewport: {
576      selector: 'body',
577      padding: 0
578    }
579  }
580
581  SPPBTooltip.prototype.init = function (type, element, options) {
582    this.enabled   = true
583    this.type      = type
584    this.$element  = $(element)
585    this.options   = this.getOptions(options)
586    this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
587
588    var triggers = this.options.trigger.split(' ')
589
590    for (var i = triggers.length; i--;) {
591      var trigger = triggers[i]
592
593      if (trigger == 'click') {
594        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
595      } else if (trigger != 'manual') {
596        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
597        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
598
599        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
600        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
601      }
602    }
603
604    this.options.selector ?
605      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
606      this.fixTitle()
607  }
608
609  SPPBTooltip.prototype.getDefaults = function () {
610    return SPPBTooltip.DEFAULTS
611  }
612
613  SPPBTooltip.prototype.getOptions = function (options) {
614    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
615
616    if (options.delay && typeof options.delay == 'number') {
617      options.delay = {
618        show: options.delay,
619        hide: options.delay
620      }
621    }
622
623    return options
624  }
625
626  SPPBTooltip.prototype.getDelegateOptions = function () {
627    var options  = {}
628    var defaults = this.getDefaults()
629
630    this._options && $.each(this._options, function (key, value) {
631      if (defaults[key] != value) options[key] = value
632    })
633
634    return options
635  }
636
637  SPPBTooltip.prototype.enter = function (obj) {
638    var self = obj instanceof this.constructor ?
639      obj : $(obj.currentTarget).data('sppb.' + this.type)
640
641    if (!self) {
642      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
643      $(obj.currentTarget).data('sppb.' + this.type, self)
644    }
645
646    clearTimeout(self.timeout)
647
648    self.hoverState = 'in'
649
650    if (!self.options.delay || !self.options.delay.show) return self.show()
651
652    self.timeout = setTimeout(function () {
653      if (self.hoverState == 'in') self.show()
654    }, self.options.delay.show)
655  }
656
657  SPPBTooltip.prototype.leave = function (obj) {
658    var self = obj instanceof this.constructor ?
659      obj : $(obj.currentTarget).data('sppb.' + this.type)
660
661    if (!self) {
662      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
663      $(obj.currentTarget).data('sppb.' + this.type, self)
664    }
665
666    clearTimeout(self.timeout)
667
668    self.hoverState = 'out'
669
670    if (!self.options.delay || !self.options.delay.hide) return self.hide()
671
672    self.timeout = setTimeout(function () {
673      if (self.hoverState == 'out') self.hide()
674    }, self.options.delay.hide)
675  }
676
677  SPPBTooltip.prototype.show = function () {
678    var e = $.Event('show.sppb.' + this.type)
679
680    if (this.hasContent() && this.enabled) {
681      this.$element.trigger(e)
682
683      var inDom = $.contains(document.documentElement, this.$element[0])
684      if (e.isDefaultPrevented() || !inDom) return
685      var that = this
686
687      var $tip = this.tip()
688
689      var tipId = this.getUID(this.type)
690
691      this.setContent()
692      $tip.attr('id', tipId)
693      this.$element.attr('aria-describedby', tipId)
694
695      if (this.options.animation) $tip.addClass('sppb-fade')
696
697      var placement = typeof this.options.placement == 'function' ?
698        this.options.placement.call(this, $tip[0], this.$element[0]) :
699        this.options.placement
700
701      var autoToken = /\s?auto?\s?/i
702      var autoPlace = autoToken.test(placement)
703      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
704
705      $tip
706        .detach()
707        .css({ top: 0, left: 0, display: 'block' })
708        .addClass(placement)
709        .data('sppb.' + this.type, this)
710
711      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
712
713      var pos          = this.getPosition()
714      var actualWidth  = $tip[0].offsetWidth
715      var actualHeight = $tip[0].offsetHeight
716
717      if (autoPlace) {
718        var orgPlacement = placement
719        var $parent      = this.$element.parent()
720        var parentDim    = this.getPosition($parent)
721
722        placement = placement == 'bottom' && pos.top   + pos.height       + actualHeight - parentDim.scroll > parentDim.height ? 'top'    :
723                    placement == 'top'    && pos.top   - parentDim.scroll - actualHeight < 0                                   ? 'bottom' :
724                    placement == 'right'  && pos.right + actualWidth      > parentDim.width                                    ? 'left'   :
725                    placement == 'left'   && pos.left  - actualWidth      < parentDim.left                                     ? 'right'  :
726                    placement
727
728        $tip
729          .removeClass(orgPlacement)
730          .addClass(placement)
731      }
732
733      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
734
735      this.applyPlacement(calculatedOffset, placement)
736
737      var complete = function () {
738        that.$element.trigger('shown.sppb.' + that.type)
739        that.hoverState = null
740      }
741
742      $.support.transition && this.$tip.hasClass('sppb-') ?
743        $tip
744          .one('bsTransitionEnd', complete)
745          .emulateTransitionEnd(150) :
746        complete()
747    }
748  }
749
750  SPPBTooltip.prototype.applyPlacement = function (offset, placement) {
751    var $tip   = this.tip()
752    var width  = $tip[0].offsetWidth
753    var height = $tip[0].offsetHeight
754
755    // manually read margins because getBoundingClientRect includes difference
756    var marginTop = parseInt($tip.css('margin-top'), 10)
757    var marginLeft = parseInt($tip.css('margin-left'), 10)
758
759    // we must check for NaN for ie 8/9
760    if (isNaN(marginTop))  marginTop  = 0
761    if (isNaN(marginLeft)) marginLeft = 0
762
763    offset.top  = offset.top  + marginTop
764    offset.left = offset.left + marginLeft
765
766    // $.fn.offset doesn't round pixel values
767    // so we use setOffset directly with our own function B-0
768    $.offset.setOffset($tip[0], $.extend({
769      using: function (props) {
770        $tip.css({
771          top: Math.round(props.top),
772          left: Math.round(props.left)
773        })
774      }
775    }, offset), 0)
776
777    $tip.addClass('in')
778
779    // check to see if placing tip in new offset caused the tip to resize itself
780    var actualWidth  = $tip[0].offsetWidth
781    var actualHeight = $tip[0].offsetHeight
782
783    if (placement == 'top' && actualHeight != height) {
784      offset.top = offset.top + height - actualHeight
785    }
786
787    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
788
789    if (delta.left) offset.left += delta.left
790    else offset.top += delta.top
791
792    var arrowDelta          = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
793    var arrowPosition       = delta.left ? 'left'        : 'top'
794    var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
795
796    $tip.offset(offset)
797    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
798  }
799
800  SPPBTooltip.prototype.replaceArrow = function (delta, dimension, position) {
801    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
802  }
803
804  SPPBTooltip.prototype.setContent = function () {
805    var $tip  = this.tip()
806    var title = this.getTitle()
807
808    $tip.find('.sppb-tooltip-inner')[this.options.html ? 'html' : 'text'](title)
809    $tip.removeClass('sppb-fade in top bottom left right')
810  }
811
812  SPPBTooltip.prototype.hide = function () {
813    var that = this
814    var $tip = this.tip()
815    var e    = $.Event('hide.sppb.' + this.type)
816
817    this.$element.removeAttr('aria-describedby')
818
819    function complete() {
820      if (that.hoverState != 'in') $tip.detach()
821      that.$element.trigger('hidden.sppb.' + that.type)
822    }
823
824    this.$element.trigger(e)
825
826    if (e.isDefaultPrevented()) return
827
828    $tip.removeClass('in')
829
830    $.support.transition && this.$tip.hasClass('sppb-fade') ?
831      $tip
832        .one('bsTransitionEnd', complete)
833        .emulateTransitionEnd(150) :
834      complete()
835
836    this.hoverState = null
837
838    return this
839  }
840
841  SPPBTooltip.prototype.fixTitle = function () {
842    var $e = this.$element
843    if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
844      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
845    }
846  }
847
848  SPPBTooltip.prototype.hasContent = function () {
849    return this.getTitle()
850  }
851
852  SPPBTooltip.prototype.getPosition = function ($element) {
853    $element   = $element || this.$element
854    var el     = $element[0]
855    var isBody = el.tagName == 'BODY'
856    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
857      scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
858      width:  isBody ? $(window).width()  : $element.outerWidth(),
859      height: isBody ? $(window).height() : $element.outerHeight()
860    }, isBody ? { top: 0, left: 0 } : $element.offset())
861  }
862
863  SPPBTooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
864    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :
865           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :
866           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
867        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
868
869  }
870
871  SPPBTooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
872    var delta = { top: 0, left: 0 }
873    if (!this.$viewport) return delta
874
875    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
876    var viewportDimensions = this.getPosition(this.$viewport)
877
878    if (/right|left/.test(placement)) {
879      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll
880      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
881      if (topEdgeOffset < viewportDimensions.top) { // top overflow
882        delta.top = viewportDimensions.top - topEdgeOffset
883      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
884        delta.top = viewportDimensions.top + viewportDimensions.height - bottom
vendor: 6,728 bytes, lines 884-1123
884EdgeOffset
885      }
886    } else {
887      var leftEdgeOffset  = pos.left - viewportPadding
888      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
889      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
890        delta.left = viewportDimensions.left - leftEdgeOffset
891      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
892        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
893      }
894    }
895
896    return delta
897  }
898
899  SPPBTooltip.prototype.getTitle = function () {
900    var title
901    var $e = this.$element
902    var o  = this.options
903
904    title = $e.attr('data-original-title')
905      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
906
907    return title
908  }
909
910  SPPBTooltip.prototype.getUID = function (prefix) {
911    do prefix += ~~(Math.random() * 1000000)
912    while (document.getElementById(prefix))
913    return prefix
914  }
915
916  SPPBTooltip.prototype.tip = function () {
917    return (this.$tip = this.$tip || $(this.options.template))
918  }
919
920  SPPBTooltip.prototype.arrow = function () {
921    return (this.$arrow = this.$arrow || this.tip().find('.sppb-tooltip-arrow'))
922  }
923
924  SPPBTooltip.prototype.validate = function () {
925    if (!this.$element[0].parentNode) {
926      this.hide()
927      this.$element = null
928      this.options  = null
929    }
930  }
931
932  SPPBTooltip.prototype.enable = function () {
933    this.enabled = true
934  }
935
936  SPPBTooltip.prototype.disable = function () {
937    this.enabled = false
938  }
939
940  SPPBTooltip.prototype.toggleEnabled = function () {
941    this.enabled = !this.enabled
942  }
943
944  SPPBTooltip.prototype.toggle = function (e) {
945    var self = this
946    if (e) {
947      self = $(e.currentTarget).data('sppb.' + this.type)
948      if (!self) {
949        self = new this.constructor(e.currentTarget, this.getDelegateOptions())
950        $(e.currentTarget).data('sppb.' + this.type, self)
951      }
952    }
953
954    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
955  }
956
957  SPPBTooltip.prototype.destroy = function () {
958    clearTimeout(this.timeout)
959    this.hide().$element.off('.' + this.type).removeData('sppb.' + this.type)
960  }
961
962
963  // TOOLTIP PLUGIN DEFINITION
964  // =========================
965
966  function Plugin(option) {
967    return this.each(function () {
968      var $this   = $(this)
969      var data    = $this.data('sppb.tooltip')
970      var options = typeof option == 'object' && option
971
972      if (!data && option == 'destroy') return
973      if (!data) $this.data('sppb.tooltip', (data = new SPPBTooltip(this, options)))
974      if (typeof option == 'string') data[option]()
975    })
976  }
977
978  var old = $.fn.sppbtooltip
979
980  $.fn.sppbtooltip             = Plugin
981  $.fn.sppbtooltip.Constructor = SPPBTooltip
982
983
984  // TOOLTIP NO CONFLICT
985  // ===================
986
987  $.fn.sppbtooltip.noConflict = function () {
988    $.fn.sppbtooltip = old
989    return this
990  }
991
992}(jQuery);
993
994
995
996/* ========================================================================
997 * Bootstrap: popover.js v3.2.0
998 * http://getbootstrap.com/javascript/#popovers
999 * ========================================================================
1000 * Copyright 2011-2014 Twitter, Inc.
1001 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1002 * ======================================================================== */
1003
1004
1005+function ($) {
1006  'use strict';
1007
1008  // POPOVER PUBLIC CLASS DEFINITION
1009  // ===============================
1010
1011  var SPPBPopover = function (element, options) {
1012    this.init('sppbpopover', element, options)
1013  }
1014
1015  if (!$.fn.sppbtooltip) throw new Error('Popover requires tooltip.js')
1016
1017  SPPBPopover.VERSION  = '3.2.0'
1018
1019  SPPBPopover.DEFAULTS = $.extend({}, $.fn.sppbtooltip.Constructor.DEFAULTS, {
1020    placement: 'right',
1021    trigger: 'click',
1022    content: '',
1023    template: '<div class="sppb-popover" role="tooltip"><div class="arrow"></div><h3 class="sppb-popover-title"></h3><div class="sppb-popover-content"></div></div>'
1024  })
1025
1026
1027  // NOTE: POPOVER EXTENDS tooltip.js
1028  // ================================
1029
1030  SPPBPopover.prototype = $.extend({}, $.fn.sppbtooltip.Constructor.prototype)
1031
1032  SPPBPopover.prototype.constructor = SPPBPopover
1033
1034  SPPBPopover.prototype.getDefaults = function () {
1035    return SPPBPopover.DEFAULTS
1036  }
1037
1038  SPPBPopover.prototype.setContent = function () {
1039    var $tip    = this.tip()
1040    var title   = this.getTitle()
1041    var content = this.getContent()
1042
1043    $tip.find('.sppb-popover-title')[this.options.html ? 'html' : 'text'](title)
1044    $tip.find('.sppb-popover-content').empty()[ // we use append for html objects to maintain js events
1045      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
1046    ](content)
1047
1048    $tip.removeClass('sppb-fade top bottom left right in')
1049
1050    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
1051    // this manually by checking the contents.
1052    if (!$tip.find('.sppb-popover-title').html()) $tip.find('.sppb-popover-title').hide()
1053  }
1054
1055  SPPBPopover.prototype.hasContent = function () {
1056    return this.getTitle() || this.getContent()
1057  }
1058
1059  SPPBPopover.prototype.getContent = function () {
1060    var $e = this.$element
1061    var o  = this.options
1062
1063    return $e.attr('data-content')
1064      || (typeof o.content == 'function' ?
1065            o.content.call($e[0]) :
1066            o.content)
1067  }
1068
1069  SPPBPopover.prototype.arrow = function () {
1070    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
1071  }
1072
1073  SPPBPopover.prototype.tip = function () {
1074    if (!this.$tip) this.$tip = $(this.options.template)
1075    return this.$tip
1076  }
1077
1078
1079  // POPOVER PLUGIN DEFINITION
1080  // =========================
1081
1082  function Plugin(option) {
1083    return this.each(function () {
1084      var $this   = $(this)
1085      var data    = $this.data('sppb.popover')
1086      var options = typeof option == 'object' && option
1087
1088      if (!data && option == 'destroy') return
1089      if (!data) $this.data('sppb.popover', (data = new SPPBPopover(this, options)))
1090      if (typeof option == 'string') data[option]()
1091    })
1092  }
1093
1094  var old = $.fn.sppbpopover
1095
1096  $.fn.sppbpopover             = Plugin
1097  $.fn.sppbpopover.Constructor = SPPBPopover
1098
1099
1100  // POPOVER NO CONFLICT
1101  // ===================
1102
1103  $.fn.sppbpopover.noConflict = function () {
1104    $.fn.sppbpopover = old
1105    return this
1106  }
1107
1108}(jQuery);
1109
1110
1111
1112/* ========================================================================
1113 * Bootstrap: transition.js v3.2.0
1114 * http://getbootstrap.com/javascript/#transitions
1115 * ========================================================================
1116 * Copyright 2011-2014 Twitter, Inc.
1117 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1118 * ======================================================================== */
1119
1120
1121+function ($) {
1122  'use strict';
1123
1124  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
1125  // ============================================================
1126
1127  function transitionEnd() {
1128    var el = document.createElement('bootstrap')
1129
1130    var transEndEventNames = {
1131      WebkitTransition : 'webkitTransitionEnd',
1132      MozTransition    : 'transitionend',
1133      OTransition      : 'oTransitionEnd otransitionend',
1134      transition       : 'transitionend'
1135    }
1136
1137    for (var name in transEndEventNames) {
1138      if (el.style[name] !== undefined) {
1139        return { end: transEndEventNames[name] }
1140      }
1141    }
1142
1143    return false // explicit for ie8 (  ._.)
1144  }
1145
1146  // http://blog.alexmaccaw.com/css-transitions
1147  $.fn.emulateTransitionEnd = function (duration) {
1148    var called = false
1149    var $el = this
1150    $(this).one('bsTransitionEnd', function () { called = true })
1151    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
1152    setTimeout(callback, duration)
1153    return this
1154  }
1155
1156  $(function () {
1157    $.support.transition = transitionEnd()
1158
1159    if (!$.support.transition) return
1160
1161    $.event.special.bsTransitionEnd = {
1162      bindType: $.support.transition.end,
1163      delegateType: $.support.transition.end,
1164      handle: function (e) {
1165        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
1166      }
1167    }
1168  })
1169
1170}(jQuery);
1171
1172//fix carousel issue fr mootools
1173if (typeof jQuery != 'undefined' && typeof MooTools != 'undefined' ) {
1174  (function($) {
1175   $(document).ready(function(){
1176    $('.sppb-carousel').each(function(index, element) {
1177      $(this)[index].slide = null;
1178    });
1179  });
1180 })(jQuery);
1181}
1182
1183
1184/*
1185 *  Vide - v0.1.2
1186 *  Easy as hell jQuery plugin for video backgrounds.
1187 *  http://vodkabears.github.io/vide/
1188 *
1189 *  Made by Ilya Makarov
1190 *  Under MIT License
1191 */
1192;(function ($, window, document, navigator) {
1193    "use strict";
1194
1195    /**
1196     * Vide settings
1197     */
1198    var pluginName = "vide",
1199        defaults = {
1200            volume: 1,
1201            playbackRate: 1,
1202            muted: true,
1203            loop: true,
1204            autoplay: true,
1205            position: "50% 50%"
1206        };
1207
1208    /**
1209     * Is iOs or Android?
1210     */
1211    var iOS = /iPad|iPhone|iPod/i.test(navigator.userAgent),
1212        android = /Android/i.test(navigator.userAgent);
1213
1214    /**
1215     * Special plugin object for instances.
1216     * @type {Object}
1217     */
1218    $[pluginName] = {
1219        lookup: []
1220    };
1221
1222    /**
1223     * Parse string with options
1224     * @param str
1225     * @returns {Object}
1226     */
1227    var parseOptions = function (str) {
1228        var obj = {}, clearedStr, arr;
1229
1230        // remove spaces before and after delimiters
1231        clearedStr = str.replace(/\s*:\s*/g, ":").replace(/\s*,\s*/g, ",");
1232
1233        // parse string
1234        arr = clearedStr.split(",");
1235        var i, len, val;
1236        for (i = 0, len = arr.length; i < len; i++) {
1237            arr[i] = arr[i].split(":");
1238            val = arr[i][1];
1239
1240            // if val is an empty string, make it undefined
1241            if (!val) {
1242                val = undefined;
1243            }
1244
1245            // convert string value if it is like a boolean
1246            if (typeof val === "string" || val instanceof String) {
1247                val = val === "true" || (val === "false" ? false : val);
1248            }
1249
1250            // convert string value if it is like a number
1251            if (typeof val === "string" || val instanceof String) {
1252                val = !isNaN(val) ? +val : val;
1253            }
1254
1255            obj[arr[i][0]] = val;
1256        }
1257
1258        return obj;
1259    };
1260
1261    /**
1262     * Parse position option
1263     * @param str
1264     * @returns {{x: *, y: *}}
1265     */
1266    var parsePosition = function (str) {
1267        // convert anything to the string
1268        str = "" + str;
1269
1270        // default value is a center
1271        var args = str.split(/\s+/),
1272            x = "50%", y = "50%";
1273
1274        for (var i = 0, len = args.length, arg; i < len; i++) {
1275            arg = args[i];
1276
1277            // convert values
1278            if (arg === "left") {
1279                x = "0%";
1280            } else if (arg === "right") {
1281                x = "100%";
1282            } else if (arg === "top") {
1283                y = "0%";
1284            } else if (arg === "bottom") {
1285                y = "100%";
1286            } else if (arg === "center"){
1287                if (i === 0) {
1288                    x = "50%";
1289                } else {
1290                    y = "50%";
1291                }
1292            } else {
1293                if (i === 0) {
1294                    x = arg;
1295                } else {
1296                    y = arg;
1297                }
1298            }
1299        }
1300
1301        return { x: x, y: y };
1302    };
1303
1304    /**
1305     * Vide constructor
1306     * @param element
1307     * @param path
1308     * @param options
1309     * @constructor
1310     */
1311    function Vide(element, path, options) {
1312        this.element = $(element);
1313        this._defaults = defaults;
1314        this._name = pluginName;
1315
1316        // remove extension
1317        path = path.replace(/\.\w*$/, "");
1318
1319        this.settings = $.extend({}, defaults, options);
1320        this.path = path;
1321
1322        this.init();
1323    }
1324
1325    /**
1326     * Initialization
1327     */
1328    Vide.prototype.init = function () {
1329        var that = this;
1330
1331        this.wrapper = $("<div>");
1332
1333        // Set video wrapper styles
1334        var position = parsePosition(this.settings.position);
1335        this.wrapper.css({
1336            "position": "absolute",
1337            "z-index": -1,
1338            "top": 0,
1339            "left": 0,
1340            "bottom": 0,
1341            "right": 0,
1342            "overflow": "hidden",
1343            "-webkit-background-size": "cover",
1344            "-moz-background-size": "cover",
1345            "-o-background-size": "cover",
1346            "background-size": "cover",
1347            "background-repeat": "no-repeat",
1348            "background-position": position.x + " " + position.y
1349        });
1350
1351        // Set video poster
1352        if ($(this.element).data('vide-image')) {
1353          this.wrapper.css("background-image", "url(" + $(this.element).data('vide-image') + ")");
1354        }
1355
1356        // if parent element has a static position, make it relative
1357        if (this.element.css("position") === "static") {
1358            this.element.css("position", "relative");
1359        }
1360
1361        this.element.prepend(this.wrapper);
1362
1363        if (!iOS && !android) {
1364
1365            var video_src = '';
1366
1367            if($(this.element).data('vide-mp4')) {
1368              video_src += "<source src='" + $(this.element).data('vide-mp4') + "' type='video/mp4'>";
1369            }
1370
1371            if($(this.element).data('vide-ogv')) {
1372              video_src += "<source src='" + $(this.element).data('vide-ogv') + "' type='video/ogg'>";
1373            }
1374
1375            this.video = $("<video>" + video_src + "</video>");
1376
1377            // Disable visibility, while loading
1378            this.video.css("visibility", "hidden");
1379
1380            // Set video properties
1381            this.video.prop({
1382                autoplay: this.settings.autoplay,
1383                loop: this.settings.loop,
1384                volume: this.settings.volume,
1385                muted: this.settings.muted,
1386                playbackRate: this.settings.playbackRate
1387            });
1388
1389            // Append video
1390            this.wrapper.append(this.video);
1391
1392            // Video alignment
1393            this.video.css({
1394                "margin": "auto",
1395                "position": "absolute",
1396                "z-index": -1,
1397                "top": position.y,
1398                "left": position.x,
1399                "-webkit-transform": "translate(-" + position.x + ", -" + position.y + ")",
1400                "-ms-transform": "translate(-" + position.x + ", -" + position.y + ")",
1401                "transform": "translate(-" + position.x + ", -" + position.y + ")"
1402            });
1403
1404            // resize video, when it's loaded
1405            this.video.bind("loadedmetadata." + pluginName, function () {
1406                that.video.css("visibility", "visible");
1407                that.resize();
1408            });
1409
1410            // resize event is available only for 'window',
1411            // use another code solutions to detect DOM elements resizing
1412            $(this.element).bind("resize." + pluginName, function () {
1413                that.resize();
1414            });
1415        }
1416    };
1417
1418    /**
1419     * Get video element of the background
1420     * @returns {HTMLVideoElement}
1421     */
1422    Vide.prototype.getVideoObject = function () {
1423        return this.video ? this.video[0] : null;
1424    };
1425
1426    /**
1427     * Resize video background
1428     */
1429    Vide.prototype.resize = function () {
1430        if (!this.video) {
1431            return;
1432        }
1433
1434        // get native video size
1435        var videoHeight = this.video[0].videoHeight,
1436            videoWidth = this.video[0].videoWidth;
1437
1438        // get wrapper size
1439        var wrapperHeight = this.wrapper.height(),
1440            wrapperWidth = this.wrapper.width();
1441
1442        if (wrapperWidth / videoWidth > wrapperHeight / videoHeight) {
1443            this.video.css({
1444                "width": wrapperWidth + 2, // +2 pixels to prevent empty space after transformation
1445                "height": "auto"
1446            });
1447        } else {
1448            this.video.css({
1449                "width": "auto",
1450                "height": wrapperHeight + 2 // +2 pixels to prevent empty space after transformation
1451            });
1452        }
1453    };
1454
1455    /**
1456     * Destroy video background
1457     */
1458    Vide.prototype.destroy = function () {
1459        this.element.unbind(pluginName);
1460        if (this.video) {
1461            this.video.unbind(pluginName);
1462        }
1463        
1464        delete $[pluginName].lookup[this.index];
1465        this.element.removeData(pluginName);
1466        this.wrapper.remove();
1467    };
1468
1469    /**
1470     * Plugin constructor
1471     * @param path
1472     * @param options
1473     * @returns {*}
1474     */
1475    $.fn[pluginName] = function (path, options) {
1476        var instance;
1477        this.each(function () {
1478            instance = $.data(this, pluginName);
1479            if (instance) {
1480                // destroy plugin instance if exists
1481                instance.destroy();
1482            }
1483            // create plugin instance
1484            instance = new Vide(this, path, options);
1485            instance.index = $[pluginName].lookup.push(instance) - 1;
1486            $.data(this, pluginName, instance);
1487        });
1488
1489        return this;
1490    };
1491
1492    $(document).ready(function () {
1493        // window resize event listener
1494        $(window).bind("resize." + pluginName, function () {
1495            for (var len = $[pluginName].lookup.length, instance, i = 0; i < len; i++) {
1496                instance = $[pluginName].lookup[i];
1497                if (instance) {
1498                    instance.resize();
1499                }
1500            }
1501        });
1502
1503        // Auto initialization.
1504        // Add 'data-vide-bg' attribute with a path to the video without extension.
1505        // Also you can pass options throw the 'data-vide-options' attribute.
1506        // 'data-vide-options' must be like "muted: false, volume: 0.5".
1507        $(document).find("[data-" + pluginName + "-bg]").each(function (i, element) {
1508            var $element = $(element),
1509                options = $element.data(pluginName + "-options"),
1510                path = '';
1511
1512            if (!options) {
1513                options = {};
1514            } else {
1515                options = parseOptions(options);
1516            }
1517
1518            $element[pluginName](path, options);
1519        });
1520    });
1521})(window.jQuery, window, document, navigator);
1522
1523
1524/*! WOW - v1.0.1 - 2014-08-15
1525 * Copyright (c) 2014 Matthieu Aussaguel; Licensed MIT */
1526;(function() {
1527    var a, b, c, d = function(a, b) {
1528            return function() {
1529                return a.apply(b, arguments)
1530            }
1531        },
1532        e = [].indexOf || function(a) {
1533            for (var b = 0, c = this.length; c > b; b++)
1534                if (b in this && this[b] === a) return b;
1535            return -1
1536        };
1537    b = function() {
1538        function a() {}
1539        return a.prototype.extend = function(a, b) {
1540            var c, d;
1541            for (c in b) d = b[c], null == a[c] && (a[c] = d);
1542            return a
1543        }, a.prototype.isMobile = function(a) {
1544            return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)
1545        }, a
1546    }(), c = this.WeakMap || this.MozWeakMap || (c = function() {
1547        function a() {
1548            this.keys = [], this.values = []
1549        }
1550        return a.prototype.get = function(a) {
1551            var b, c, d, e, f;
1552            for (f = this.keys, b = d = 0, e = f.length; e > d; b = ++d)
1553                if (c = f[b], c === a) return this.values[b]
1554        }, a.prototype.set = function(a, b) {
1555            var c, d, e, f, g;
1556            for (g = this.keys, c = e = 0, f = g.length; f > e; c = ++e)
1557                if (d = g[c], d === a) return void(this.values[c] = b);
1558            return this.keys.push(a), this.values.push(b) 
1559        }, a
1560    }()), a = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (a = function() {
1561        function a() {
1562            console.warn("MutationObserver is not supported by your browser."), console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")
1563        }
1564        return a.notSupported = !0, a.prototype.observe = function() {}, a
1565    }()), this.SPPBWOW = function() {
1566        function f(a) {
1567            null == a && (a = {}), this.scrollCallback = d(this.scrollCallback, this), this.scrollHandler = d(this.scrollHandler, this), this.start = d(this.start, this), this.scrolled = !0, this.config = this.util().extend(a, this.defaults), this.animationNameCache = new c
1568        }
1569        return f.prototype.defaults = {
1570            boxClass: "sppb-wow",
1571            animateClass: "sppb-animated",
1572            offset: 0,
1573            mobile: !0,
1574            live: !0
1575        }, f.prototype.init = function() {
1576            var a;
1577            return this.element = window.document.documentElement, "interactive" === (a = document.readyState) || "complete" === a ? this.start() : document.addEventListener("DOMContentLoaded", this.start), this.finished = []
1578        }, f.prototype.start = function() {
1579            var b, c, d, e;
1580            if (this.stopped = !1, this.boxes = function() {
1581                var a, c, d, e;
1582                for (d = this.element.querySelectorAll("." + this.config.boxClass), e = [], a = 0, c = d.length; c > a; a++) b = d[a], e.push(b);
1583                return e
1584            }.call(this), this.all = function() {
1585                var a, c, d, e;
1586                for (d = this.boxes, e = [], a = 0, c = d.length; c > a; a++) b = d[a], e.push(b);
1587                return e
1588            }.call(this), this.boxes.length)
1589                if (this.disabled()) this.resetStyle();
1590                else {
1591                    for (e = this.boxes, c = 0, d = e.length; d > c; c++) b = e[c], this.applyStyle(b, !0);
1592                    window.addEventListener("scroll", this.scrollHandler, !1), window.addEventListener("resize", this.scrollHandler, !1), this.interval = setInterval(this.scrollCallback, 50)
1593                }
1594            return this.config.live ? new a(function(a) {
1595                return function(b) {
1596                    var c, d, e, f, g;
1597                    for (g = [], e = 0, f = b.length; f > e;
vendor: 6,866 bytes, lines 1597-1734
1597 e++) d = b[e], g.push(function() {
1598                        var a, b, e, f;
1599                        for (e = d.addedNodes || [], f = [], a = 0, b = e.length; b > a; a++) c = e[a], f.push(this.doSync(c));
1600                        return f
1601                    }.call(a));
1602                    return g
1603                }
1604            }(this)).observe(document.body, {
1605                childList: !0,
1606                subtree: !0
1607            }) : void 0
1608        }, f.prototype.stop = function() {
1609            return this.stopped = !0, window.removeEventListener("scroll", this.scrollHandler, !1), window.removeEventListener("resize", this.scrollHandler, !1), null != this.interval ? clearInterval(this.interval) : void 0
1610        }, f.prototype.sync = function() {
1611            return a.notSupported ? this.doSync(this.element) : void 0
1612        }, f.prototype.doSync = function(a) {
1613            var b, c, d, f, g;
1614            if (!this.stopped) {
1615                if (null == a && (a = this.element), 1 !== a.nodeType) return;
1616                for (a = a.parentNode || a, f = a.querySelectorAll("." + this.config.boxClass), g = [], c = 0, d = f.length; d > c; c++) b = f[c], e.call(this.all, b) < 0 ? (this.applyStyle(b, !0), this.boxes.push(b), this.all.push(b), g.push(this.scrolled = !0)) : g.push(void 0);
1617                return g
1618            }
1619        }, f.prototype.show = function(a) {
1620            return this.applyStyle(a), a.className = "" + a.className + " " + this.config.animateClass
1621        }, f.prototype.applyStyle = function(a, b) {
1622            var c, d, e;
1623            return d = a.getAttribute("data-sppb-wow-duration"), c = a.getAttribute("data-sppb-wow-delay"), e = a.getAttribute("data-sppb-wow-iteration"), this.animate(function(f) {
1624                return function() {
1625                    return f.customStyle(a, b, d, c, e)
1626                }
1627            }(this))
1628        }, f.prototype.animate = function() {
1629            return "requestAnimationFrame" in window ? function(a) {
1630                return window.requestAnimationFrame(a)
1631            } : function(a) {
1632                return a()
1633            }
1634        }(), f.prototype.resetStyle = function() {
1635            var a, b, c, d, e;
1636            for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++) a = d[b], e.push(a.setAttribute("style", "visibility: visible;"));
1637            return e
1638        }, f.prototype.customStyle = function(a, b, c, d, e) {
1639            return b && this.cacheAnimationName(a), a.style.visibility = b ? "hidden" : "visible", c && this.vendorSet(a.style, {
1640                animationDuration: c
1641            }), d && this.vendorSet(a.style, {
1642                animationDelay: d
1643            }), e && this.vendorSet(a.style, {
1644                animationIterationCount: e
1645            }), this.vendorSet(a.style, {
1646                animationName: b ? "none" : this.cachedAnimationName(a)
1647            }), a
1648        }, f.prototype.vendors = ["moz", "webkit"], f.prototype.vendorSet = function(a, b) {
1649            var c, d, e, f;
1650            f = [];
1651            for (c in b) d = b[c], a["" + c] = d, f.push(function() {
1652                var b, f, g, h;
1653                for (g = this.vendors, h = [], b = 0, f = g.length; f > b; b++) e = g[b], h.push(a["" + e + c.charAt(0).toUpperCase() + c.substr(1)] = d);
1654                return h
1655            }.call(this));
1656            return f
1657        }, f.prototype.vendorCSS = function(a, b) {
1658            var c, d, e, f, g, h;
1659            for (d = window.getComputedStyle(a), c = d.getPropertyCSSValue(b), h = this.vendors, f = 0, g = h.length; g > f; f++) e = h[f], c = c || d.getPropertyCSSValue("-" + e + "-" + b);
1660            return c
1661        }, f.prototype.animationName = function(a) {
1662            var b;
1663            try {
1664                b = this.vendorCSS(a, "animation-name").cssText
1665            } catch (c) {
1666                b = window.getComputedStyle(a).getPropertyValue("animation-name")
1667            }
1668            return "none" === b ? "" : b
1669        }, f.prototype.cacheAnimationName = function(a) {
1670            return this.animationNameCache.set(a, this.animationName(a))
1671        }, f.prototype.cachedAnimationName = function(a) {
1672            return this.animationNameCache.get(a)
1673        }, f.prototype.scrollHandler = function() {
1674            return this.scrolled = !0
1675        }, f.prototype.scrollCallback = function() {
1676            var a;
1677            return !this.scrolled || (this.scrolled = !1, this.boxes = function() {
1678                var b, c, d, e;
1679                for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++) a = d[b], a && (this.isVisible(a) ? this.show(a) : e.push(a));
1680                return e
1681            }.call(this), this.boxes.length || this.config.live) ? void 0 : this.stop()
1682        }, f.prototype.offsetTop = function(a) {
1683            for (var b; void 0 === a.offsetTop;) a = a.parentNode;
1684            for (b = a.offsetTop; a = a.offsetParent;) b += a.offsetTop;
1685            return b
1686        }, f.prototype.isVisible = function(a) {
1687            var b, c, d, e, f;
1688            return c = a.getAttribute("data-sppb-wow-offset") || this.config.offset, f = window.pageYOffset, e = f + Math.min(this.element.clientHeight, innerHeight) - c, d = this.offsetTop(a), b = d + a.clientHeight, e >= d && b >= f
1689        }, f.prototype.util = function() {
1690            return null != this._util ? this._util : this._util = new b
1691        }, f.prototype.disabled = function() {
1692            return !this.config.mobile && this.util().isMobile(navigator.userAgent)
1693        }, f
1694    }()
1695}).call(this);
1696
1697//Initiat WOW JS
1698jQuery(function($){
1699   new SPPBWOW().init();
1700});
1701
1702
1703
1704
1705
1706/**
1707 * author Christopher Blum
1708 *    - based on the idea of Remy Sharp, http://remysharp.com/2009/01/26/element-in-view-event-plugin/
1709 *    - forked from http://github.com/zuk/jquery.inview/
1710 */
1711(function ($) {
1712  var inviewObjects = {}, viewportSize, viewportOffset,
1713      d = document, w = window, documentElement = d.documentElement, expando = $.expando, timer;
1714
1715  $.event.special.inview = {
1716    add: function(data) {
1717      inviewObjects[data.guid + "-" + this[expando]] = { data: data, $element: $(this) };
1718
1719      // Use setInterval in order to also make sure this captures elements within
1720      // "overflow:scroll" elements or elements that appeared in the dom tree due to
1721      // dom manipulation and reflow
1722      // old: $(window).scroll(checkInView);
1723      //
1724      // By the way, iOS (iPad, iPhone, ...) seems to not execute, or at least delays
1725      // intervals while the user scrolls. Therefore the inview event might fire a bit late there
1726      // 
1727      // Don't waste cycles with an interval until we get at least one element that
1728      // has bound to the inview event.  
1729      if (!timer && !$.isEmptyObject(inviewObjects)) {
1730         timer = setInterval(checkInView, 250);
1731      }
1732    },
1733
1734    remove: function(data) {
1735      try { delete inviewObjects[data.guid + "-" + this[expando]]; } catch(e) {}
1736
1737      // Clear interval when we no longer have any elements listening
1738      if ($.isEmptyObject(inviewObjects)) {
1739         clearInterval(timer);
1740         timer = null;
1741      }
1742    }
1743  };
1744
1745  function getViewportSize() {
1746    var mode, domObject, size = { height: w.innerHeight, width: w.innerWidth };
1747
1748    // if this is correct then return it. iPad has compat Mode, so will
1749    // go into check clientHeight/clientWidth (which has the wrong value).
1750    if (!size.height) {
1751      mode = d.compatMode;
1752      if (mode || !$.support.boxModel) { // IE, Gecko
1753        domObject = mode === 'CSS1Compat' ?
1754          documentElement : // Standards
1755          d.body; // Quirks
1756        size = {
1757          height: domObject.clientHeight,
1758          width:  domObject.clientWidth
1759        };
1760      }
1761    }
1762
1763    return size;
1764  }
1765
1766  function getViewportOffset() {
1767    return {
1768      top:  w.pageYOffset || documentElement.scrollTop   || d.body.scrollTop,
1769      left: w.pageXOffset || documentElement.scrollLeft  || d.body.scrollLeft
1770    };
1771  }
1772
1773  function checkInView() {
1774    var $elements = $(), elementsLength, i = 0;
1775
1776    $.each(inviewObjects, function(i, inviewObject) {
1777      var selector  = inviewObject.data.selector,
1778          $element  = inviewObject.$element;
1779      $elements = $elements.add(selector ? $element.find(selector) : $element);
1780    });
1781
1782    elementsLength = $elements.length;
1783    if (elementsLength) {
1784      viewportSize   = viewportSize   || getViewportSize();
1785      viewportOffset = viewportOffset || getViewportOffset();
1786
1787      for (; i<elementsLength; i++) {
1788        // Ignore elements that are not in the DOM tree
1789        if (!$.contains(documentElement, $elements[i])) {
1790          continue;
1791        }
1792
1793        var $element      = $($elements[i]),
1794            elementSize   = { height: $element.height(), width: $element.width() },
1795            elementOffset = $element.offset(),
1796            inView        = $element.data('inview'),
1797            visiblePartX,
1798            visiblePartY,
1799            visiblePartsMerged;
1800        
1801        // Don't ask me why because I haven't figured out yet:
1802        // viewportOffset and viewportSize are sometimes suddenly null in Firefox 5.
1803        // Even though it sounds weird:
1804        // It seems that the execution of this function is interferred by the onresize/onscroll event
1805        // where viewportOffset and viewportSize are unset
1806        if (!viewportOffset || !viewportSize) {
1807          return;
1808        }
1809        
1810        if (elementOffset.top + elementSize.height > viewportOffset.top &&
1811            elementOffset.top < viewportOffset.top + viewportSize.height &&
1812            elementOffset.left + elementSize.width > viewportOffset.left &&
1813            elementOffset.left < viewportOffset.left + viewportSize.width) {
1814          visiblePartX = (viewportOffset.left > elementOffset.left ?
1815            'right' : (viewportOffset.left + viewportSize.width) < (elementOffset.left + elementSize.width) ?
1816            'left' : 'both');
1817          visiblePartY = (viewportOffset.top > elementOffset.top ?
1818            'bottom' : (viewportOffset.top + viewportSize.height) < (elementOffset.top + elementSize.height) ?
1819            'top' : 'both');
1820          visiblePartsMerged = visiblePartX + "-" + visiblePartY;
1821          if (!inView || inView !== visiblePartsMerged) {
1822            $element.data('inview', visiblePartsMerged).trigger('inview', [true, visiblePartX, visiblePartY]);
1823          }
1824        } else if (inView) {
1825          $element.data('inview', false).trigger('inview', [false]);
1826        }
1827      }
1828    }
1829  }
1830
1831  $(w).bind("scroll resize scrollstop", function() {
1832    viewportSize = viewportOffset = null;
1833  });
1834  
1835  // IE < 9 scrolls to focused elements without firing the "scroll" event
1836  if (!documentElement.addEventListener && documentElement.attachEvent) {
1837    documentElement.attachEvent("onfocusin", function() {
1838      viewportOffset = null;
1839    });
1840  }
1841
1842  $(document).ready(function() {
1843    //Animated Progress
1844    $('.sppb-progress').bind('inview', function(event, visible, visiblePartX, visiblePartY) {
1845      var $bar = $(this).find('.sppb-progress-bar');
1846      if (visible) {
1847        $bar.css('width', $bar.data('width'));
1848        $(this).unbind('inview');
1849      }
1850    });
1851
1852    //Animated Number
1853    $.fn.sppbanimateNumbers = function(stop, commas, duration, ease) {
1854        return this.each(function() {
1855            var $this = $(this);
1856            var start = parseInt($this.text().replace(/,/g, ""));
1857      commas = (commas === undefined) ? true : commas;
1858            $({value: start}).animate({value: stop}, {
1859              duration: duration == undefined ? 1000 : duration,
1860              easing: ease == undefined ? "swing" : ease,
1861              step: function() {
1862                $this.text(Math.floor(this.value));
1863          if (commas) { $this.text($this.text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); }
1864              },
1865              complete: function() {
1866                 if (parseInt($this.text()) !== stop) {
1867                     $this.text(stop);
1868             if (commas) { $this.text($this.text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); }
1869                 }
1870              }
1871            });
1872        });
1873    };
1874
1875    $('.sppb-animated-number').bind('inview', function(event, visible, visiblePartX, visiblePartY) {
1876      var $this = $(this);
1877      if (visible) {
1878        $this.sppbanimateNumbers($this.data('digit'), false, $this.data('duration')); 
1879        $this.unbind('inview');
1880      }
1881    });
1882
1883  });
1884
1885})(jQuery);
1886
1887
1888//Flickr Photo Stream
1889(function (document, $) {
1890    "use strict";
1891 
1892    var sppbflickrPhotoStream = function ($el, options) {
1893        var url = ['http://api.flickr.com/services/feeds/photos_public.gne?id=' + options.id + '&format=json&jsoncallback=?'].join('');
1894 
1895        return $.getJSON(url).done(function (data) {  
1896
1897          for (var i = 0; i < options.count; i = i + 1) {
1898            var pic = data.items[i];
1899
1900            $("<img class='sppb-img-responsive' alt='"+pic.title+"' />")
1901            .attr("src", pic.media.m)
1902            .appendTo($el)
1903            .wrap(options.container || '')
1904            .wrap(['<a target="_blank" href="' + pic.link + '" title="' + pic.title + '"></a>'].join(''));
1905          }
1906
1907        });
1908    };
1909 
1910    $.fn.sppbflickrPhotoStream = function (options) {
1911        return sppbflickrPhotoStream($(this).get(), options || {});
1912    };
1913
1914    //Instance
1915    $(document).ready(function(){
1916      $('.sppb-flickr-gallery').each(function(){
1917        var $this = $(this);
1918        $this.sppbflickrPhotoStream({
1919          id: $this.data('id'),
1920          count: $this.data('count'),
1921          container: '<li />'
1922        });
1923      });
1924    });
1925
1926})(document, jQuery);
1927
1928//Pie Chart
1929jQuery(function($) {
1930
1931  $('.sppb-pie-chart').bind('inview', function(event, visible, visiblePartX, visiblePartY) {
1932      var $this = $(this);
1933
1934      if (visible) {
1935        
1936        $this.easyPieChart({
1937          barColor: $this.data('barcolor'),
1938          trackColor: $this.data('trackcolor'),
1939          scaleColor: false,
1940          lineWidth: $this.data('width'),
1941          size: $this.data('size'),
1942          onStep: function(from, to, percent) {
1943            $this.find('.sppb-chart-percent > span').text(Math.round(percent) + '%');
1944          }
1945        });
1946
1947        $this.unbind('inview');
1948      }
1949    });
1950
1951});
1952
1953//Ajax Contact Form
1954jQuery(function($) {
1955    $('.sppb-ajaxt-contact-form').on('submit', function(event) {
1956
1957        event.preventDefault();
1958
1959        var $self   = $(this);
1960        var value   = $(this).serializeArray();
1961        var request = {
1962            'option' : 'com_sppagebuilder',
1963            'task' : 'ajax',
1964            'addon' : 'ajax_contact',
1965            'data'   : value
1966        };
1967
1968        $.ajax({
1969            type   : 'POST',
1970            data   : request,
1971            beforeSend: function(){
1972                $self.find('.fa').addClass('fa-spinner fa-spin');
1973            },
1974            success: function (response) {
1975                $self.find('.fa-spin').removeClass('fa-spinner fa-spin');
1976                $self.next('.sppb-ajax-contact-status').html($.parseJSON(response).data).fadeIn().delay(2000).fadeOut(500);;
1977            }
1978        });
1979
1980        return false;
1981    });
1982});
1983
1984

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.