Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
12345 anikendra 1
/* ===================================================
2
 * bootstrap-transition.js v2.1.1
3
 * http://twitter.github.com/bootstrap/javascript.html#transitions
4
 * ===================================================
5
 * Copyright 2012 Twitter, Inc.
6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 * http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 * ========================================================== */
19
 
20
 
21
!function ($) {
22
 
23
  $(function () {
24
 
25
    "use strict"; // jshint ;_;
26
 
27
 
28
    /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
29
     * ======================================================= */
30
 
31
    $.support.transition = (function () {
32
 
33
      var transitionEnd = (function () {
34
 
35
        var el = document.createElement('bootstrap')
36
          , transEndEventNames = {
37
               'WebkitTransition' : 'webkitTransitionEnd'
38
            ,  'MozTransition'    : 'transitionend'
39
            ,  'OTransition'      : 'oTransitionEnd otransitionend'
40
            ,  'transition'       : 'transitionend'
41
            }
42
          , name
43
 
44
        for (name in transEndEventNames){
45
          if (el.style[name] !== undefined) {
46
            return transEndEventNames[name]
47
          }
48
        }
49
 
50
      }())
51
 
52
      return transitionEnd && {
53
        end: transitionEnd
54
      }
55
 
56
    })()
57
 
58
  })
59
 
60
}(window.jQuery);
61
/* =========================================================
62
 * bootstrap-modal.js v2.1.1
63
 * http://twitter.github.com/bootstrap/javascript.html#modals
64
 * =========================================================
65
 * Copyright 2012 Twitter, Inc.
66
 *
67
 * Licensed under the Apache License, Version 2.0 (the "License");
68
 * you may not use this file except in compliance with the License.
69
 * You may obtain a copy of the License at
70
 *
71
 * http://www.apache.org/licenses/LICENSE-2.0
72
 *
73
 * Unless required by applicable law or agreed to in writing, software
74
 * distributed under the License is distributed on an "AS IS" BASIS,
75
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
76
 * See the License for the specific language governing permissions and
77
 * limitations under the License.
78
 * ========================================================= */
79
 
80
 
81
!function ($) {
82
 
83
  "use strict"; // jshint ;_;
84
 
85
 
86
 /* MODAL CLASS DEFINITION
87
  * ====================== */
88
 
89
  var Modal = function (element, options) {
90
    this.options = options
91
    this.$element = $(element)
92
      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
93
    this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
94
  }
95
 
96
  Modal.prototype = {
97
 
98
      constructor: Modal
99
 
100
    , toggle: function () {
101
        return this[!this.isShown ? 'show' : 'hide']()
102
      }
103
 
104
    , show: function () {
105
        var that = this
106
          , e = $.Event('show')
107
 
108
        this.$element.trigger(e)
109
 
110
        if (this.isShown || e.isDefaultPrevented()) return
111
 
112
        $('body').addClass('modal-open')
113
 
114
        this.isShown = true
115
 
116
        this.escape()
117
 
118
        this.backdrop(function () {
119
          var transition = $.support.transition && that.$element.hasClass('fade')
120
 
121
          if (!that.$element.parent().length) {
122
            that.$element.appendTo(document.body) //don't move modals dom position
123
          }
124
 
125
          that.$element
126
            .show()
127
 
128
          if (transition) {
129
            that.$element[0].offsetWidth // force reflow
130
          }
131
 
132
          that.$element
133
            .addClass('in')
134
            .attr('aria-hidden', false)
135
            .focus()
136
 
137
          that.enforceFocus()
138
 
139
          transition ?
140
            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
141
            that.$element.trigger('shown')
142
 
143
        })
144
      }
145
 
146
    , hide: function (e) {
147
        e && e.preventDefault()
148
 
149
        var that = this
150
 
151
        e = $.Event('hide')
152
 
153
        this.$element.trigger(e)
154
 
155
        if (!this.isShown || e.isDefaultPrevented()) return
156
 
157
        this.isShown = false
158
 
159
        $('body').removeClass('modal-open')
160
 
161
        this.escape()
162
 
163
        $(document).off('focusin.modal')
164
 
165
        this.$element
166
          .removeClass('in')
167
          .attr('aria-hidden', true)
168
 
169
        $.support.transition && this.$element.hasClass('fade') ?
170
          this.hideWithTransition() :
171
          this.hideModal()
172
      }
173
 
174
    , enforceFocus: function () {
175
        var that = this
176
        $(document).on('focusin.modal', function (e) {
177
          if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
178
            that.$element.focus()
179
          }
180
        })
181
      }
182
 
183
    , escape: function () {
184
        var that = this
185
        if (this.isShown && this.options.keyboard) {
186
          this.$element.on('keyup.dismiss.modal', function ( e ) {
187
            e.which == 27 && that.hide()
188
          })
189
        } else if (!this.isShown) {
190
          this.$element.off('keyup.dismiss.modal')
191
        }
192
      }
193
 
194
    , hideWithTransition: function () {
195
        var that = this
196
          , timeout = setTimeout(function () {
197
              that.$element.off($.support.transition.end)
198
              that.hideModal()
199
            }, 500)
200
 
201
        this.$element.one($.support.transition.end, function () {
202
          clearTimeout(timeout)
203
          that.hideModal()
204
        })
205
      }
206
 
207
    , hideModal: function (that) {
208
        this.$element
209
          .hide()
210
          .trigger('hidden')
211
 
212
        this.backdrop()
213
      }
214
 
215
    , removeBackdrop: function () {
216
        this.$backdrop.remove()
217
        this.$backdrop = null
218
      }
219
 
220
    , backdrop: function (callback) {
221
        var that = this
222
          , animate = this.$element.hasClass('fade') ? 'fade' : ''
223
 
224
        if (this.isShown && this.options.backdrop) {
225
          var doAnimate = $.support.transition && animate
226
 
227
          this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
228
            .appendTo(document.body)
229
 
230
          if (this.options.backdrop != 'static') {
231
            this.$backdrop.click($.proxy(this.hide, this))
232
          }
233
 
234
          if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
235
 
236
          this.$backdrop.addClass('in')
237
 
238
          doAnimate ?
239
            this.$backdrop.one($.support.transition.end, callback) :
240
            callback()
241
 
242
        } else if (!this.isShown && this.$backdrop) {
243
          this.$backdrop.removeClass('in')
244
 
245
          $.support.transition && this.$element.hasClass('fade')?
246
            this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
247
            this.removeBackdrop()
248
 
249
        } else if (callback) {
250
          callback()
251
        }
252
      }
253
  }
254
 
255
 
256
 /* MODAL PLUGIN DEFINITION
257
  * ======================= */
258
 
259
  $.fn.modal = function (option) {
260
    return this.each(function () {
261
      var $this = $(this)
262
        , data = $this.data('modal')
263
        , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
264
      if (!data) $this.data('modal', (data = new Modal(this, options)))
265
      if (typeof option == 'string') data[option]()
266
      else if (options.show) data.show()
267
    })
268
  }
269
 
270
  $.fn.modal.defaults = {
271
      backdrop: true
272
    , keyboard: true
273
    , show: true
274
  }
275
 
276
  $.fn.modal.Constructor = Modal
277
 
278
 
279
 /* MODAL DATA-API
280
  * ============== */
281
 
282
  $(function () {
283
    $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
284
      var $this = $(this)
285
        , href = $this.attr('href')
286
        , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
287
        , option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
288
 
289
      e.preventDefault()
290
 
291
      $target
292
        .modal(option)
293
        .one('hide', function () {
294
          $this.focus()
295
        })
296
    })
297
  })
298
 
299
}(window.jQuery);
300
/* ============================================================
301
 * bootstrap-dropdown.js v2.1.1
302
 * http://twitter.github.com/bootstrap/javascript.html#dropdowns
303
 * ============================================================
304
 * Copyright 2012 Twitter, Inc.
305
 *
306
 * Licensed under the Apache License, Version 2.0 (the "License");
307
 * you may not use this file except in compliance with the License.
308
 * You may obtain a copy of the License at
309
 *
310
 * http://www.apache.org/licenses/LICENSE-2.0
311
 *
312
 * Unless required by applicable law or agreed to in writing, software
313
 * distributed under the License is distributed on an "AS IS" BASIS,
314
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
315
 * See the License for the specific language governing permissions and
316
 * limitations under the License.
317
 * ============================================================ */
318
 
319
 
320
!function ($) {
321
 
322
  "use strict"; // jshint ;_;
323
 
324
 
325
 /* DROPDOWN CLASS DEFINITION
326
  * ========================= */
327
 
328
  var toggle = '[data-toggle=dropdown]'
329
    , Dropdown = function (element) {
330
        var $el = $(element).on('click.dropdown.data-api', this.toggle)
331
        $('html').on('click.dropdown.data-api', function () {
332
          $el.parent().removeClass('open')
333
        })
334
      }
335
 
336
  Dropdown.prototype = {
337
 
338
    constructor: Dropdown
339
 
340
  , toggle: function (e) {
341
      var $this = $(this)
342
        , $parent
343
        , isActive
344
 
345
      if ($this.is('.disabled, :disabled')) return
346
 
347
      $parent = getParent($this)
348
 
349
      isActive = $parent.hasClass('open')
350
 
351
      clearMenus()
352
 
353
      if (!isActive) {
354
        $parent.toggleClass('open')
355
        $this.focus()
356
      }
357
 
358
      return false
359
    }
360
 
361
  , keydown: function (e) {
362
      var $this
363
        , $items
364
        , $active
365
        , $parent
366
        , isActive
367
        , index
368
 
369
      if (!/(38|40|27)/.test(e.keyCode)) return
370
 
371
      $this = $(this)
372
 
373
      e.preventDefault()
374
      e.stopPropagation()
375
 
376
      if ($this.is('.disabled, :disabled')) return
377
 
378
      $parent = getParent($this)
379
 
380
      isActive = $parent.hasClass('open')
381
 
382
      if (!isActive || (isActive && e.keyCode == 27)) return $this.click()
383
 
384
      $items = $('[role=menu] li:not(.divider) a', $parent)
385
 
386
      if (!$items.length) return
387
 
388
      index = $items.index($items.filter(':focus'))
389
 
390
      if (e.keyCode == 38 && index > 0) index--                                        // up
391
      if (e.keyCode == 40 && index < $items.length - 1) index++                        // down
392
      if (!~index) index = 0
393
 
394
      $items
395
        .eq(index)
396
        .focus()
397
    }
398
 
399
  }
400
 
401
  function clearMenus() {
402
    getParent($(toggle))
403
      .removeClass('open')
404
  }
405
 
406
  function getParent($this) {
407
    var selector = $this.attr('data-target')
408
      , $parent
409
 
410
    if (!selector) {
411
      selector = $this.attr('href')
412
      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
413
    }
414
 
415
    $parent = $(selector)
416
    $parent.length || ($parent = $this.parent())
417
 
418
    return $parent
419
  }
420
 
421
 
422
  /* DROPDOWN PLUGIN DEFINITION
423
   * ========================== */
424
 
425
  $.fn.dropdown = function (option) {
426
    return this.each(function () {
427
      var $this = $(this)
428
        , data = $this.data('dropdown')
429
      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
430
      if (typeof option == 'string') data[option].call($this)
431
    })
432
  }
433
 
434
  $.fn.dropdown.Constructor = Dropdown
435
 
436
 
437
  /* APPLY TO STANDARD DROPDOWN ELEMENTS
438
   * =================================== */
439
 
440
  $(function () {
441
    $('html')
442
      .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)
443
    $('body')
444
      .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
445
      .on('click.dropdown.data-api touchstart.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)
446
      .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
447
  })
448
 
449
}(window.jQuery);
450
/* =============================================================
451
 * bootstrap-scrollspy.js v2.1.1
452
 * http://twitter.github.com/bootstrap/javascript.html#scrollspy
453
 * =============================================================
454
 * Copyright 2012 Twitter, Inc.
455
 *
456
 * Licensed under the Apache License, Version 2.0 (the "License");
457
 * you may not use this file except in compliance with the License.
458
 * You may obtain a copy of the License at
459
 *
460
 * http://www.apache.org/licenses/LICENSE-2.0
461
 *
462
 * Unless required by applicable law or agreed to in writing, software
463
 * distributed under the License is distributed on an "AS IS" BASIS,
464
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
465
 * See the License for the specific language governing permissions and
466
 * limitations under the License.
467
 * ============================================================== */
468
 
469
 
470
!function ($) {
471
 
472
  "use strict"; // jshint ;_;
473
 
474
 
475
 /* SCROLLSPY CLASS DEFINITION
476
  * ========================== */
477
 
478
  function ScrollSpy(element, options) {
479
    var process = $.proxy(this.process, this)
480
      , $element = $(element).is('body') ? $(window) : $(element)
481
      , href
482
    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
483
    this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
484
    this.selector = (this.options.target
485
      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
486
      || '') + ' .nav li > a'
487
    this.$body = $('body')
488
    this.refresh()
489
    this.process()
490
  }
491
 
492
  ScrollSpy.prototype = {
493
 
494
      constructor: ScrollSpy
495
 
496
    , refresh: function () {
497
        var self = this
498
          , $targets
499
 
500
        this.offsets = $([])
501
        this.targets = $([])
502
 
503
        $targets = this.$body
504
          .find(this.selector)
505
          .map(function () {
506
            var $el = $(this)
507
              , href = $el.data('target') || $el.attr('href')
508
              , $href = /^#\w/.test(href) && $(href)
509
            return ( $href
510
              && $href.length
511
              && [[ $href.position().top, href ]] ) || null
512
          })
513
          .sort(function (a, b) { return a[0] - b[0] })
514
          .each(function () {
515
            self.offsets.push(this[0])
516
            self.targets.push(this[1])
517
          })
518
      }
519
 
520
    , process: function () {
521
        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
522
          , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
523
          , maxScroll = scrollHeight - this.$scrollElement.height()
524
          , offsets = this.offsets
525
          , targets = this.targets
526
          , activeTarget = this.activeTarget
527
          , i
528
 
529
        if (scrollTop >= maxScroll) {
530
          return activeTarget != (i = targets.last()[0])
531
            && this.activate ( i )
532
        }
533
 
534
        for (i = offsets.length; i--;) {
535
          activeTarget != targets[i]
536
            && scrollTop >= offsets[i]
537
            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
538
            && this.activate( targets[i] )
539
        }
540
      }
541
 
542
    , activate: function (target) {
543
        var active
544
          , selector
545
 
546
        this.activeTarget = target
547
 
548
        $(this.selector)
549
          .parent('.active')
550
          .removeClass('active')
551
 
552
        selector = this.selector
553
          + '[data-target="' + target + '"],'
554
          + this.selector + '[href="' + target + '"]'
555
 
556
        active = $(selector)
557
          .parent('li')
558
          .addClass('active')
559
 
560
        if (active.parent('.dropdown-menu').length)  {
561
          active = active.closest('li.dropdown').addClass('active')
562
        }
563
 
564
        active.trigger('activate')
565
      }
566
 
567
  }
568
 
569
 
570
 /* SCROLLSPY PLUGIN DEFINITION
571
  * =========================== */
572
 
573
  $.fn.scrollspy = function (option) {
574
    return this.each(function () {
575
      var $this = $(this)
576
        , data = $this.data('scrollspy')
577
        , options = typeof option == 'object' && option
578
      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
579
      if (typeof option == 'string') data[option]()
580
    })
581
  }
582
 
583
  $.fn.scrollspy.Constructor = ScrollSpy
584
 
585
  $.fn.scrollspy.defaults = {
586
    offset: 10
587
  }
588
 
589
 
590
 /* SCROLLSPY DATA-API
591
  * ================== */
592
 
593
  $(window).on('load', function () {
594
    $('[data-spy="scroll"]').each(function () {
595
      var $spy = $(this)
596
      $spy.scrollspy($spy.data())
597
    })
598
  })
599
 
600
}(window.jQuery);
601
/* ========================================================
602
 * bootstrap-tab.js v2.1.1
603
 * http://twitter.github.com/bootstrap/javascript.html#tabs
604
 * ========================================================
605
 * Copyright 2012 Twitter, Inc.
606
 *
607
 * Licensed under the Apache License, Version 2.0 (the "License");
608
 * you may not use this file except in compliance with the License.
609
 * You may obtain a copy of the License at
610
 *
611
 * http://www.apache.org/licenses/LICENSE-2.0
612
 *
613
 * Unless required by applicable law or agreed to in writing, software
614
 * distributed under the License is distributed on an "AS IS" BASIS,
615
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
616
 * See the License for the specific language governing permissions and
617
 * limitations under the License.
618
 * ======================================================== */
619
 
620
 
621
!function ($) {
622
 
623
  "use strict"; // jshint ;_;
624
 
625
 
626
 /* TAB CLASS DEFINITION
627
  * ==================== */
628
 
629
  var Tab = function (element) {
630
    this.element = $(element)
631
  }
632
 
633
  Tab.prototype = {
634
 
635
    constructor: Tab
636
 
637
  , show: function () {
638
      var $this = this.element
639
        , $ul = $this.closest('ul:not(.dropdown-menu)')
640
        , selector = $this.attr('data-target')
641
        , previous
642
        , $target
643
        , e
644
 
645
      if (!selector) {
646
        selector = $this.attr('href')
647
        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
648
      }
649
 
650
      if ( $this.parent('li').hasClass('active') ) return
651
 
652
      previous = $ul.find('.active a').last()[0]
653
 
654
      e = $.Event('show', {
655
        relatedTarget: previous
656
      })
657
 
658
      $this.trigger(e)
659
 
660
      if (e.isDefaultPrevented()) return
661
 
662
      $target = $(selector)
663
 
664
      this.activate($this.parent('li'), $ul)
665
      this.activate($target, $target.parent(), function () {
666
        $this.trigger({
667
          type: 'shown'
668
        , relatedTarget: previous
669
        })
670
      })
671
    }
672
 
673
  , activate: function ( element, container, callback) {
674
      var $active = container.find('> .active')
675
        , transition = callback
676
            && $.support.transition
677
            && $active.hasClass('fade')
678
 
679
      function next() {
680
        $active
681
          .removeClass('active')
682
          .find('> .dropdown-menu > .active')
683
          .removeClass('active')
684
 
685
        element.addClass('active')
686
 
687
        if (transition) {
688
          element[0].offsetWidth // reflow for transition
689
          element.addClass('in')
690
        } else {
691
          element.removeClass('fade')
692
        }
693
 
694
        if ( element.parent('.dropdown-menu') ) {
695
          element.closest('li.dropdown').addClass('active')
696
        }
697
 
698
        callback && callback()
699
      }
700
 
701
      transition ?
702
        $active.one($.support.transition.end, next) :
703
        next()
704
 
705
      $active.removeClass('in')
706
    }
707
  }
708
 
709
 
710
 /* TAB PLUGIN DEFINITION
711
  * ===================== */
712
 
713
  $.fn.tab = function ( option ) {
714
    return this.each(function () {
715
      var $this = $(this)
716
        , data = $this.data('tab')
717
      if (!data) $this.data('tab', (data = new Tab(this)))
718
      if (typeof option == 'string') data[option]()
719
    })
720
  }
721
 
722
  $.fn.tab.Constructor = Tab
723
 
724
 
725
 /* TAB DATA-API
726
  * ============ */
727
 
728
  $(function () {
729
    $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
730
      e.preventDefault()
731
      $(this).tab('show')
732
    })
733
  })
734
 
735
}(window.jQuery);
736
/* ===========================================================
737
 * bootstrap-tooltip.js v2.1.1
738
 * http://twitter.github.com/bootstrap/javascript.html#tooltips
739
 * Inspired by the original jQuery.tipsy by Jason Frame
740
 * ===========================================================
741
 * Copyright 2012 Twitter, Inc.
742
 *
743
 * Licensed under the Apache License, Version 2.0 (the "License");
744
 * you may not use this file except in compliance with the License.
745
 * You may obtain a copy of the License at
746
 *
747
 * http://www.apache.org/licenses/LICENSE-2.0
748
 *
749
 * Unless required by applicable law or agreed to in writing, software
750
 * distributed under the License is distributed on an "AS IS" BASIS,
751
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
752
 * See the License for the specific language governing permissions and
753
 * limitations under the License.
754
 * ========================================================== */
755
 
756
 
757
!function ($) {
758
 
759
  "use strict"; // jshint ;_;
760
 
761
 
762
 /* TOOLTIP PUBLIC CLASS DEFINITION
763
  * =============================== */
764
 
765
  var Tooltip = function (element, options) {
766
    this.init('tooltip', element, options)
767
  }
768
 
769
  Tooltip.prototype = {
770
 
771
    constructor: Tooltip
772
 
773
  , init: function (type, element, options) {
774
      var eventIn
775
        , eventOut
776
 
777
      this.type = type
778
      this.$element = $(element)
779
      this.options = this.getOptions(options)
780
      this.enabled = true
781
 
782
      if (this.options.trigger == 'click') {
783
        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
784
      } else if (this.options.trigger != 'manual') {
785
        eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
786
        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
787
        this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
788
        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
789
      }
790
 
791
      this.options.selector ?
792
        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
793
        this.fixTitle()
794
    }
795
 
796
  , getOptions: function (options) {
797
      options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
798
 
799
      if (options.delay && typeof options.delay == 'number') {
800
        options.delay = {
801
          show: options.delay
802
        , hide: options.delay
803
        }
804
      }
805
 
806
      return options
807
    }
808
 
809
  , enter: function (e) {
810
      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
811
 
812
      if (!self.options.delay || !self.options.delay.show) return self.show()
813
 
814
      clearTimeout(this.timeout)
815
      self.hoverState = 'in'
816
      this.timeout = setTimeout(function() {
817
        if (self.hoverState == 'in') self.show()
818
      }, self.options.delay.show)
819
    }
820
 
821
  , leave: function (e) {
822
      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
823
 
824
      if (this.timeout) clearTimeout(this.timeout)
825
      if (!self.options.delay || !self.options.delay.hide) return self.hide()
826
 
827
      self.hoverState = 'out'
828
      this.timeout = setTimeout(function() {
829
        if (self.hoverState == 'out') self.hide()
830
      }, self.options.delay.hide)
831
    }
832
 
833
  , show: function () {
834
      var $tip
835
        , inside
836
        , pos
837
        , actualWidth
838
        , actualHeight
839
        , placement
840
        , tp
841
 
842
      if (this.hasContent() && this.enabled) {
843
        $tip = this.tip()
844
        this.setContent()
845
 
846
        if (this.options.animation) {
847
          $tip.addClass('fade')
848
        }
849
 
850
        placement = typeof this.options.placement == 'function' ?
851
          this.options.placement.call(this, $tip[0], this.$element[0]) :
852
          this.options.placement
853
 
854
        inside = /in/.test(placement)
855
 
856
        $tip
857
          .remove()
858
          .css({ top: 0, left: 0, display: 'block' })
859
          .appendTo(inside ? this.$element : document.body)
860
 
861
        pos = this.getPosition(inside)
862
 
863
        actualWidth = $tip[0].offsetWidth
864
        actualHeight = $tip[0].offsetHeight
865
 
866
        switch (inside ? placement.split(' ')[1] : placement) {
867
          case 'bottom':
868
            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
869
            break
870
          case 'top':
871
            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
872
            break
873
          case 'left':
874
            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
875
            break
876
          case 'right':
877
            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
878
            break
879
        }
880
 
881
        $tip
882
          .css(tp)
883
          .addClass(placement)
884
          .addClass('in')
885
      }
886
    }
887
 
888
  , setContent: function () {
889
      var $tip = this.tip()
890
        , title = this.getTitle()
891
 
892
      $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
893
      $tip.removeClass('fade in top bottom left right')
894
    }
895
 
896
  , hide: function () {
897
      var that = this
898
        , $tip = this.tip()
899
 
900
      $tip.removeClass('in')
901
 
902
      function removeWithAnimation() {
903
        var timeout = setTimeout(function () {
904
          $tip.off($.support.transition.end).remove()
905
        }, 500)
906
 
907
        $tip.one($.support.transition.end, function () {
908
          clearTimeout(timeout)
909
          $tip.remove()
910
        })
911
      }
912
 
913
      $.support.transition && this.$tip.hasClass('fade') ?
914
        removeWithAnimation() :
915
        $tip.remove()
916
 
917
      return this
918
    }
919
 
920
  , fixTitle: function () {
921
      var $e = this.$element
922
      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
923
        $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
924
      }
925
    }
926
 
927
  , hasContent: function () {
928
      return this.getTitle()
929
    }
930
 
931
  , getPosition: function (inside) {
932
      return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
933
        width: this.$element[0].offsetWidth
934
      , height: this.$element[0].offsetHeight
935
      })
936
    }
937
 
938
  , getTitle: function () {
939
      var title
940
        , $e = this.$element
941
        , o = this.options
942
 
943
      title = $e.attr('data-original-title')
944
        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
945
 
946
      return title
947
    }
948
 
949
  , tip: function () {
950
      return this.$tip = this.$tip || $(this.options.template)
951
    }
952
 
953
  , validate: function () {
954
      if (!this.$element[0].parentNode) {
955
        this.hide()
956
        this.$element = null
957
        this.options = null
958
      }
959
    }
960
 
961
  , enable: function () {
962
      this.enabled = true
963
    }
964
 
965
  , disable: function () {
966
      this.enabled = false
967
    }
968
 
969
  , toggleEnabled: function () {
970
      this.enabled = !this.enabled
971
    }
972
 
973
  , toggle: function () {
974
      this[this.tip().hasClass('in') ? 'hide' : 'show']()
975
    }
976
 
977
  , destroy: function () {
978
      this.hide().$element.off('.' + this.type).removeData(this.type)
979
    }
980
 
981
  }
982
 
983
 
984
 /* TOOLTIP PLUGIN DEFINITION
985
  * ========================= */
986
 
987
  $.fn.tooltip = function ( option ) {
988
    return this.each(function () {
989
      var $this = $(this)
990
        , data = $this.data('tooltip')
991
        , options = typeof option == 'object' && option
992
      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
993
      if (typeof option == 'string') data[option]()
994
    })
995
  }
996
 
997
  $.fn.tooltip.Constructor = Tooltip
998
 
999
  $.fn.tooltip.defaults = {
1000
    animation: true
1001
  , placement: 'top'
1002
  , selector: false
1003
  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1004
  , trigger: 'hover'
1005
  , title: ''
1006
  , delay: 0
1007
  , html: true
1008
  }
1009
 
1010
}(window.jQuery);
1011
 
1012
/* ===========================================================
1013
 * bootstrap-popover.js v2.1.1
1014
 * http://twitter.github.com/bootstrap/javascript.html#popovers
1015
 * ===========================================================
1016
 * Copyright 2012 Twitter, Inc.
1017
 *
1018
 * Licensed under the Apache License, Version 2.0 (the "License");
1019
 * you may not use this file except in compliance with the License.
1020
 * You may obtain a copy of the License at
1021
 *
1022
 * http://www.apache.org/licenses/LICENSE-2.0
1023
 *
1024
 * Unless required by applicable law or agreed to in writing, software
1025
 * distributed under the License is distributed on an "AS IS" BASIS,
1026
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1027
 * See the License for the specific language governing permissions and
1028
 * limitations under the License.
1029
 * =========================================================== */
1030
 
1031
 
1032
!function ($) {
1033
 
1034
  "use strict"; // jshint ;_;
1035
 
1036
 
1037
 /* POPOVER PUBLIC CLASS DEFINITION
1038
  * =============================== */
1039
 
1040
  var Popover = function (element, options) {
1041
    this.init('popover', element, options)
1042
  }
1043
 
1044
 
1045
  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1046
     ========================================== */
1047
 
1048
  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1049
 
1050
    constructor: Popover
1051
 
1052
  , setContent: function () {
1053
      var $tip = this.tip()
1054
        , title = this.getTitle()
1055
        , content = this.getContent()
1056
 
1057
      $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1058
      $tip.find('.popover-content > *')[this.options.html ? 'html' : 'text'](content)
1059
 
1060
      $tip.removeClass('fade top bottom left right in')
1061
    }
1062
 
1063
  , hasContent: function () {
1064
      return this.getTitle() || this.getContent()
1065
    }
1066
 
1067
  , getContent: function () {
1068
      var content
1069
        , $e = this.$element
1070
        , o = this.options
1071
 
1072
      content = $e.attr('data-content')
1073
        || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
1074
 
1075
      return content
1076
    }
1077
 
1078
  , tip: function () {
1079
      if (!this.$tip) {
1080
        this.$tip = $(this.options.template)
1081
      }
1082
      return this.$tip
1083
    }
1084
 
1085
  , destroy: function () {
1086
      this.hide().$element.off('.' + this.type).removeData(this.type)
1087
    }
1088
 
1089
  })
1090
 
1091
 
1092
 /* POPOVER PLUGIN DEFINITION
1093
  * ======================= */
1094
 
1095
  $.fn.popover = function (option) {
1096
    return this.each(function () {
1097
      var $this = $(this)
1098
        , data = $this.data('popover')
1099
        , options = typeof option == 'object' && option
1100
      if (!data) $this.data('popover', (data = new Popover(this, options)))
1101
      if (typeof option == 'string') data[option]()
1102
    })
1103
  }
1104
 
1105
  $.fn.popover.Constructor = Popover
1106
 
1107
  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1108
    placement: 'right'
1109
  , trigger: 'click'
1110
  , content: ''
1111
  , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
1112
  })
1113
 
1114
}(window.jQuery);
1115
/* ==========================================================
1116
 * bootstrap-affix.js v2.1.1
1117
 * http://twitter.github.com/bootstrap/javascript.html#affix
1118
 * ==========================================================
1119
 * Copyright 2012 Twitter, Inc.
1120
 *
1121
 * Licensed under the Apache License, Version 2.0 (the "License");
1122
 * you may not use this file except in compliance with the License.
1123
 * You may obtain a copy of the License at
1124
 *
1125
 * http://www.apache.org/licenses/LICENSE-2.0
1126
 *
1127
 * Unless required by applicable law or agreed to in writing, software
1128
 * distributed under the License is distributed on an "AS IS" BASIS,
1129
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1130
 * See the License for the specific language governing permissions and
1131
 * limitations under the License.
1132
 * ========================================================== */
1133
 
1134
 
1135
!function ($) {
1136
 
1137
  "use strict"; // jshint ;_;
1138
 
1139
 
1140
 /* AFFIX CLASS DEFINITION
1141
  * ====================== */
1142
 
1143
  var Affix = function (element, options) {
1144
    this.options = $.extend({}, $.fn.affix.defaults, options)
1145
    this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
1146
    this.$element = $(element)
1147
    this.checkPosition()
1148
  }
1149
 
1150
  Affix.prototype.checkPosition = function () {
1151
    if (!this.$element.is(':visible')) return
1152
 
1153
    var scrollHeight = $(document).height()
1154
      , scrollTop = this.$window.scrollTop()
1155
      , position = this.$element.offset()
1156
      , offset = this.options.offset
1157
      , offsetBottom = offset.bottom
1158
      , offsetTop = offset.top
1159
      , reset = 'affix affix-top affix-bottom'
1160
      , affix
1161
 
1162
    if (typeof offset != 'object') offsetBottom = offsetTop = offset
1163
    if (typeof offsetTop == 'function') offsetTop = offset.top()
1164
    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
1165
 
1166
    affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
1167
      false    : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
1168
      'bottom' : offsetTop != null && scrollTop <= offsetTop ?
1169
      'top'    : false
1170
 
1171
    if (this.affixed === affix) return
1172
 
1173
    this.affixed = affix
1174
    this.unpin = affix == 'bottom' ? position.top - scrollTop : null
1175
 
1176
    this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
1177
  }
1178
 
1179
 
1180
 /* AFFIX PLUGIN DEFINITION
1181
  * ======================= */
1182
 
1183
  $.fn.affix = function (option) {
1184
    return this.each(function () {
1185
      var $this = $(this)
1186
        , data = $this.data('affix')
1187
        , options = typeof option == 'object' && option
1188
      if (!data) $this.data('affix', (data = new Affix(this, options)))
1189
      if (typeof option == 'string') data[option]()
1190
    })
1191
  }
1192
 
1193
  $.fn.affix.Constructor = Affix
1194
 
1195
  $.fn.affix.defaults = {
1196
    offset: 0
1197
  }
1198
 
1199
 
1200
 /* AFFIX DATA-API
1201
  * ============== */
1202
 
1203
  $(window).on('load', function () {
1204
    $('[data-spy="affix"]').each(function () {
1205
      var $spy = $(this)
1206
        , data = $spy.data()
1207
 
1208
      data.offset = data.offset || {}
1209
 
1210
      data.offsetBottom && (data.offset.bottom = data.offsetBottom)
1211
      data.offsetTop && (data.offset.top = data.offsetTop)
1212
 
1213
      $spy.affix(data)
1214
    })
1215
  })
1216
 
1217
 
1218
}(window.jQuery);
1219
/* ==========================================================
1220
 * bootstrap-alert.js v2.1.1
1221
 * http://twitter.github.com/bootstrap/javascript.html#alerts
1222
 * ==========================================================
1223
 * Copyright 2012 Twitter, Inc.
1224
 *
1225
 * Licensed under the Apache License, Version 2.0 (the "License");
1226
 * you may not use this file except in compliance with the License.
1227
 * You may obtain a copy of the License at
1228
 *
1229
 * http://www.apache.org/licenses/LICENSE-2.0
1230
 *
1231
 * Unless required by applicable law or agreed to in writing, software
1232
 * distributed under the License is distributed on an "AS IS" BASIS,
1233
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1234
 * See the License for the specific language governing permissions and
1235
 * limitations under the License.
1236
 * ========================================================== */
1237
 
1238
 
1239
!function ($) {
1240
 
1241
  "use strict"; // jshint ;_;
1242
 
1243
 
1244
 /* ALERT CLASS DEFINITION
1245
  * ====================== */
1246
 
1247
  var dismiss = '[data-dismiss="alert"]'
1248
    , Alert = function (el) {
1249
        $(el).on('click', dismiss, this.close)
1250
      }
1251
 
1252
  Alert.prototype.close = function (e) {
1253
    var $this = $(this)
1254
      , selector = $this.attr('data-target')
1255
      , $parent
1256
 
1257
    if (!selector) {
1258
      selector = $this.attr('href')
1259
      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1260
    }
1261
 
1262
    $parent = $(selector)
1263
 
1264
    e && e.preventDefault()
1265
 
1266
    $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
1267
 
1268
    $parent.trigger(e = $.Event('close'))
1269
 
1270
    if (e.isDefaultPrevented()) return
1271
 
1272
    $parent.removeClass('in')
1273
 
1274
    function removeElement() {
1275
      $parent
1276
        .trigger('closed')
1277
        .remove()
1278
    }
1279
 
1280
    $.support.transition && $parent.hasClass('fade') ?
1281
      $parent.on($.support.transition.end, removeElement) :
1282
      removeElement()
1283
  }
1284
 
1285
 
1286
 /* ALERT PLUGIN DEFINITION
1287
  * ======================= */
1288
 
1289
  $.fn.alert = function (option) {
1290
    return this.each(function () {
1291
      var $this = $(this)
1292
        , data = $this.data('alert')
1293
      if (!data) $this.data('alert', (data = new Alert(this)))
1294
      if (typeof option == 'string') data[option].call($this)
1295
    })
1296
  }
1297
 
1298
  $.fn.alert.Constructor = Alert
1299
 
1300
 
1301
 /* ALERT DATA-API
1302
  * ============== */
1303
 
1304
  $(function () {
1305
    $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
1306
  })
1307
 
1308
}(window.jQuery);
1309
/* ============================================================
1310
 * bootstrap-button.js v2.1.1
1311
 * http://twitter.github.com/bootstrap/javascript.html#buttons
1312
 * ============================================================
1313
 * Copyright 2012 Twitter, Inc.
1314
 *
1315
 * Licensed under the Apache License, Version 2.0 (the "License");
1316
 * you may not use this file except in compliance with the License.
1317
 * You may obtain a copy of the License at
1318
 *
1319
 * http://www.apache.org/licenses/LICENSE-2.0
1320
 *
1321
 * Unless required by applicable law or agreed to in writing, software
1322
 * distributed under the License is distributed on an "AS IS" BASIS,
1323
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1324
 * See the License for the specific language governing permissions and
1325
 * limitations under the License.
1326
 * ============================================================ */
1327
 
1328
 
1329
!function ($) {
1330
 
1331
  "use strict"; // jshint ;_;
1332
 
1333
 
1334
 /* BUTTON PUBLIC CLASS DEFINITION
1335
  * ============================== */
1336
 
1337
  var Button = function (element, options) {
1338
    this.$element = $(element)
1339
    this.options = $.extend({}, $.fn.button.defaults, options)
1340
  }
1341
 
1342
  Button.prototype.setState = function (state) {
1343
    var d = 'disabled'
1344
      , $el = this.$element
1345
      , data = $el.data()
1346
      , val = $el.is('input') ? 'val' : 'html'
1347
 
1348
    state = state + 'Text'
1349
    data.resetText || $el.data('resetText', $el[val]())
1350
 
1351
    $el[val](data[state] || this.options[state])
1352
 
1353
    // push to event loop to allow forms to submit
1354
    setTimeout(function () {
1355
      state == 'loadingText' ?
1356
        $el.addClass(d).attr(d, d) :
1357
        $el.removeClass(d).removeAttr(d)
1358
    }, 0)
1359
  }
1360
 
1361
  Button.prototype.toggle = function () {
1362
    var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
1363
 
1364
    $parent && $parent
1365
      .find('.active')
1366
      .removeClass('active')
1367
 
1368
    this.$element.toggleClass('active')
1369
  }
1370
 
1371
 
1372
 /* BUTTON PLUGIN DEFINITION
1373
  * ======================== */
1374
 
1375
  $.fn.button = function (option) {
1376
    return this.each(function () {
1377
      var $this = $(this)
1378
        , data = $this.data('button')
1379
        , options = typeof option == 'object' && option
1380
      if (!data) $this.data('button', (data = new Button(this, options)))
1381
      if (option == 'toggle') data.toggle()
1382
      else if (option) data.setState(option)
1383
    })
1384
  }
1385
 
1386
  $.fn.button.defaults = {
1387
    loadingText: 'loading...'
1388
  }
1389
 
1390
  $.fn.button.Constructor = Button
1391
 
1392
 
1393
 /* BUTTON DATA-API
1394
  * =============== */
1395
 
1396
  $(function () {
1397
    $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
1398
      var $btn = $(e.target)
1399
      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
1400
      $btn.button('toggle')
1401
    })
1402
  })
1403
 
1404
}(window.jQuery);
1405
/* =============================================================
1406
 * bootstrap-collapse.js v2.1.1
1407
 * http://twitter.github.com/bootstrap/javascript.html#collapse
1408
 * =============================================================
1409
 * Copyright 2012 Twitter, Inc.
1410
 *
1411
 * Licensed under the Apache License, Version 2.0 (the "License");
1412
 * you may not use this file except in compliance with the License.
1413
 * You may obtain a copy of the License at
1414
 *
1415
 * http://www.apache.org/licenses/LICENSE-2.0
1416
 *
1417
 * Unless required by applicable law or agreed to in writing, software
1418
 * distributed under the License is distributed on an "AS IS" BASIS,
1419
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1420
 * See the License for the specific language governing permissions and
1421
 * limitations under the License.
1422
 * ============================================================ */
1423
 
1424
 
1425
!function ($) {
1426
 
1427
  "use strict"; // jshint ;_;
1428
 
1429
 
1430
 /* COLLAPSE PUBLIC CLASS DEFINITION
1431
  * ================================ */
1432
 
1433
  var Collapse = function (element, options) {
1434
    this.$element = $(element)
1435
    this.options = $.extend({}, $.fn.collapse.defaults, options)
1436
 
1437
    if (this.options.parent) {
1438
      this.$parent = $(this.options.parent)
1439
    }
1440
 
1441
    this.options.toggle && this.toggle()
1442
  }
1443
 
1444
  Collapse.prototype = {
1445
 
1446
    constructor: Collapse
1447
 
1448
  , dimension: function () {
1449
      var hasWidth = this.$element.hasClass('width')
1450
      return hasWidth ? 'width' : 'height'
1451
    }
1452
 
1453
  , show: function () {
1454
      var dimension
1455
        , scroll
1456
        , actives
1457
        , hasData
1458
 
1459
      if (this.transitioning) return
1460
 
1461
      dimension = this.dimension()
1462
      scroll = $.camelCase(['scroll', dimension].join('-'))
1463
      actives = this.$parent && this.$parent.find('> .accordion-group > .in')
1464
 
1465
      if (actives && actives.length) {
1466
        hasData = actives.data('collapse')
1467
        if (hasData && hasData.transitioning) return
1468
        actives.collapse('hide')
1469
        hasData || actives.data('collapse', null)
1470
      }
1471
 
1472
      this.$element[dimension](0)
1473
      this.transition('addClass', $.Event('show'), 'shown')
1474
      $.support.transition && this.$element[dimension](this.$element[0][scroll])
1475
    }
1476
 
1477
  , hide: function () {
1478
      var dimension
1479
      if (this.transitioning) return
1480
      dimension = this.dimension()
1481
      this.reset(this.$element[dimension]())
1482
      this.transition('removeClass', $.Event('hide'), 'hidden')
1483
      this.$element[dimension](0)
1484
    }
1485
 
1486
  , reset: function (size) {
1487
      var dimension = this.dimension()
1488
 
1489
      this.$element
1490
        .removeClass('collapse')
1491
        [dimension](size || 'auto')
1492
        [0].offsetWidth
1493
 
1494
      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
1495
 
1496
      return this
1497
    }
1498
 
1499
  , transition: function (method, startEvent, completeEvent) {
1500
      var that = this
1501
        , complete = function () {
1502
            if (startEvent.type == 'show') that.reset()
1503
            that.transitioning = 0
1504
            that.$element.trigger(completeEvent)
1505
          }
1506
 
1507
      this.$element.trigger(startEvent)
1508
 
1509
      if (startEvent.isDefaultPrevented()) return
1510
 
1511
      this.transitioning = 1
1512
 
1513
      this.$element[method]('in')
1514
 
1515
      $.support.transition && this.$element.hasClass('collapse') ?
1516
        this.$element.one($.support.transition.end, complete) :
1517
        complete()
1518
    }
1519
 
1520
  , toggle: function () {
1521
      this[this.$element.hasClass('in') ? 'hide' : 'show']()
1522
    }
1523
 
1524
  }
1525
 
1526
 
1527
 /* COLLAPSIBLE PLUGIN DEFINITION
1528
  * ============================== */
1529
 
1530
  $.fn.collapse = function (option) {
1531
    return this.each(function () {
1532
      var $this = $(this)
1533
        , data = $this.data('collapse')
1534
        , options = typeof option == 'object' && option
1535
      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
1536
      if (typeof option == 'string') data[option]()
1537
    })
1538
  }
1539
 
1540
  $.fn.collapse.defaults = {
1541
    toggle: true
1542
  }
1543
 
1544
  $.fn.collapse.Constructor = Collapse
1545
 
1546
 
1547
 /* COLLAPSIBLE DATA-API
1548
  * ==================== */
1549
 
1550
  $(function () {
1551
    $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
1552
      var $this = $(this), href
1553
        , target = $this.attr('data-target')
1554
          || e.preventDefault()
1555
          || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
1556
        , option = $(target).data('collapse') ? 'toggle' : $this.data()
1557
      $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
1558
      $(target).collapse(option)
1559
    })
1560
  })
1561
 
1562
}(window.jQuery);
1563
/* ==========================================================
1564
 * bootstrap-carousel.js v2.1.1
1565
 * http://twitter.github.com/bootstrap/javascript.html#carousel
1566
 * ==========================================================
1567
 * Copyright 2012 Twitter, Inc.
1568
 *
1569
 * Licensed under the Apache License, Version 2.0 (the "License");
1570
 * you may not use this file except in compliance with the License.
1571
 * You may obtain a copy of the License at
1572
 *
1573
 * http://www.apache.org/licenses/LICENSE-2.0
1574
 *
1575
 * Unless required by applicable law or agreed to in writing, software
1576
 * distributed under the License is distributed on an "AS IS" BASIS,
1577
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1578
 * See the License for the specific language governing permissions and
1579
 * limitations under the License.
1580
 * ========================================================== */
1581
 
1582
 
1583
!function ($) {
1584
 
1585
  "use strict"; // jshint ;_;
1586
 
1587
 
1588
 /* CAROUSEL CLASS DEFINITION
1589
  * ========================= */
1590
 
1591
  var Carousel = function (element, options) {
1592
    this.$element = $(element)
1593
    this.options = options
1594
    this.options.slide && this.slide(this.options.slide)
1595
    this.options.pause == 'hover' && this.$element
1596
      .on('mouseenter', $.proxy(this.pause, this))
1597
      .on('mouseleave', $.proxy(this.cycle, this))
1598
  }
1599
 
1600
  Carousel.prototype = {
1601
 
1602
    cycle: function (e) {
1603
      if (!e) this.paused = false
1604
      this.options.interval
1605
        && !this.paused
1606
        && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
1607
      return this
1608
    }
1609
 
1610
  , to: function (pos) {
1611
      var $active = this.$element.find('.item.active')
1612
        , children = $active.parent().children()
1613
        , activePos = children.index($active)
1614
        , that = this
1615
 
1616
      if (pos > (children.length - 1) || pos < 0) return
1617
 
1618
      if (this.sliding) {
1619
        return this.$element.one('slid', function () {
1620
          that.to(pos)
1621
        })
1622
      }
1623
 
1624
      if (activePos == pos) {
1625
        return this.pause().cycle()
1626
      }
1627
 
1628
      return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
1629
    }
1630
 
1631
  , pause: function (e) {
1632
      if (!e) this.paused = true
1633
      if (this.$element.find('.next, .prev').length && $.support.transition.end) {
1634
        this.$element.trigger($.support.transition.end)
1635
        this.cycle()
1636
      }
1637
      clearInterval(this.interval)
1638
      this.interval = null
1639
      return this
1640
    }
1641
 
1642
  , next: function () {
1643
      if (this.sliding) return
1644
      return this.slide('next')
1645
    }
1646
 
1647
  , prev: function () {
1648
      if (this.sliding) return
1649
      return this.slide('prev')
1650
    }
1651
 
1652
  , slide: function (type, next) {
1653
      var $active = this.$element.find('.item.active')
1654
        , $next = next || $active[type]()
1655
        , isCycling = this.interval
1656
        , direction = type == 'next' ? 'left' : 'right'
1657
        , fallback  = type == 'next' ? 'first' : 'last'
1658
        , that = this
1659
        , e = $.Event('slide', {
1660
            relatedTarget: $next[0]
1661
          })
1662
 
1663
      this.sliding = true
1664
 
1665
      isCycling && this.pause()
1666
 
1667
      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
1668
 
1669
      if ($next.hasClass('active')) return
1670
 
1671
      if ($.support.transition && this.$element.hasClass('slide')) {
1672
        this.$element.trigger(e)
1673
        if (e.isDefaultPrevented()) return
1674
        $next.addClass(type)
1675
        $next[0].offsetWidth // force reflow
1676
        $active.addClass(direction)
1677
        $next.addClass(direction)
1678
        this.$element.one($.support.transition.end, function () {
1679
          $next.removeClass([type, direction].join(' ')).addClass('active')
1680
          $active.removeClass(['active', direction].join(' '))
1681
          that.sliding = false
1682
          setTimeout(function () { that.$element.trigger('slid') }, 0)
1683
        })
1684
      } else {
1685
        this.$element.trigger(e)
1686
        if (e.isDefaultPrevented()) return
1687
        $active.removeClass('active')
1688
        $next.addClass('active')
1689
        this.sliding = false
1690
        this.$element.trigger('slid')
1691
      }
1692
 
1693
      isCycling && this.cycle()
1694
 
1695
      return this
1696
    }
1697
 
1698
  }
1699
 
1700
 
1701
 /* CAROUSEL PLUGIN DEFINITION
1702
  * ========================== */
1703
 
1704
  $.fn.carousel = function (option) {
1705
    return this.each(function () {
1706
      var $this = $(this)
1707
        , data = $this.data('carousel')
1708
        , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
1709
        , action = typeof option == 'string' ? option : options.slide
1710
      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
1711
      if (typeof option == 'number') data.to(option)
1712
      else if (action) data[action]()
1713
      else if (options.interval) data.cycle()
1714
    })
1715
  }
1716
 
1717
  $.fn.carousel.defaults = {
1718
    interval: 5000
1719
  , pause: 'hover'
1720
  }
1721
 
1722
  $.fn.carousel.Constructor = Carousel
1723
 
1724
 
1725
 /* CAROUSEL DATA-API
1726
  * ================= */
1727
 
1728
  $(function () {
1729
    $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
1730
      var $this = $(this), href
1731
        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1732
        , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
1733
      $target.carousel(options)
1734
      e.preventDefault()
1735
    })
1736
  })
1737
 
1738
}(window.jQuery);
1739
/* =============================================================
1740
 * bootstrap-typeahead.js v2.1.1
1741
 * http://twitter.github.com/bootstrap/javascript.html#typeahead
1742
 * =============================================================
1743
 * Copyright 2012 Twitter, Inc.
1744
 *
1745
 * Licensed under the Apache License, Version 2.0 (the "License");
1746
 * you may not use this file except in compliance with the License.
1747
 * You may obtain a copy of the License at
1748
 *
1749
 * http://www.apache.org/licenses/LICENSE-2.0
1750
 *
1751
 * Unless required by applicable law or agreed to in writing, software
1752
 * distributed under the License is distributed on an "AS IS" BASIS,
1753
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1754
 * See the License for the specific language governing permissions and
1755
 * limitations under the License.
1756
 * ============================================================ */
1757
 
1758
 
1759
!function($){
1760
 
1761
  "use strict"; // jshint ;_;
1762
 
1763
 
1764
 /* TYPEAHEAD PUBLIC CLASS DEFINITION
1765
  * ================================= */
1766
 
1767
  var Typeahead = function (element, options) {
1768
    this.$element = $(element)
1769
    this.options = $.extend({}, $.fn.typeahead.defaults, options)
1770
    this.matcher = this.options.matcher || this.matcher
1771
    this.sorter = this.options.sorter || this.sorter
1772
    this.highlighter = this.options.highlighter || this.highlighter
1773
    this.updater = this.options.updater || this.updater
1774
    this.$menu = $(this.options.menu).appendTo('body')
1775
    this.source = this.options.source
1776
    this.shown = false
1777
    this.listen()
1778
  }
1779
 
1780
  Typeahead.prototype = {
1781
 
1782
    constructor: Typeahead
1783
 
1784
  , select: function () {
1785
      var val = this.$menu.find('.active').attr('data-value')
1786
      this.$element
1787
        .val(this.updater(val))
1788
        .change()
1789
      return this.hide()
1790
    }
1791
 
1792
  , updater: function (item) {
1793
      return item
1794
    }
1795
 
1796
  , show: function () {
1797
      var pos = $.extend({}, this.$element.offset(), {
1798
        height: this.$element[0].offsetHeight
1799
      })
1800
 
1801
      this.$menu.css({
1802
        top: pos.top + pos.height
1803
      , left: pos.left
1804
      })
1805
 
1806
      this.$menu.show()
1807
      this.shown = true
1808
      return this
1809
    }
1810
 
1811
  , hide: function () {
1812
      this.$menu.hide()
1813
      this.shown = false
1814
      return this
1815
    }
1816
 
1817
  , lookup: function (event) {
1818
      var items
1819
 
1820
      this.query = this.$element.val()
1821
 
1822
      if (!this.query || this.query.length < this.options.minLength) {
1823
        return this.shown ? this.hide() : this
1824
      }
1825
 
1826
      items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
1827
 
1828
      return items ? this.process(items) : this
1829
    }
1830
 
1831
  , process: function (items) {
1832
      var that = this
1833
 
1834
      items = $.grep(items, function (item) {
1835
        return that.matcher(item)
1836
      })
1837
 
1838
      items = this.sorter(items)
1839
 
1840
      if (!items.length) {
1841
        return this.shown ? this.hide() : this
1842
      }
1843
 
1844
      return this.render(items.slice(0, this.options.items)).show()
1845
    }
1846
 
1847
  , matcher: function (item) {
1848
      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1849
    }
1850
 
1851
  , sorter: function (items) {
1852
      var beginswith = []
1853
        , caseSensitive = []
1854
        , caseInsensitive = []
1855
        , item
1856
 
1857
      while (item = items.shift()) {
1858
        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1859
        else if (~item.indexOf(this.query)) caseSensitive.push(item)
1860
        else caseInsensitive.push(item)
1861
      }
1862
 
1863
      return beginswith.concat(caseSensitive, caseInsensitive)
1864
    }
1865
 
1866
  , highlighter: function (item) {
1867
      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
1868
      return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1869
        return '<strong>' + match + '</strong>'
1870
      })
1871
    }
1872
 
1873
  , render: function (items) {
1874
      var that = this
1875
 
1876
      items = $(items).map(function (i, item) {
1877
        i = $(that.options.item).attr('data-value', item)
1878
        i.find('a').html(that.highlighter(item))
1879
        return i[0]
1880
      })
1881
 
1882
      items.first().addClass('active')
1883
      this.$menu.html(items)
1884
      return this
1885
    }
1886
 
1887
  , next: function (event) {
1888
      var active = this.$menu.find('.active').removeClass('active')
1889
        , next = active.next()
1890
 
1891
      if (!next.length) {
1892
        next = $(this.$menu.find('li')[0])
1893
      }
1894
 
1895
      next.addClass('active')
1896
    }
1897
 
1898
  , prev: function (event) {
1899
      var active = this.$menu.find('.active').removeClass('active')
1900
        , prev = active.prev()
1901
 
1902
      if (!prev.length) {
1903
        prev = this.$menu.find('li').last()
1904
      }
1905
 
1906
      prev.addClass('active')
1907
    }
1908
 
1909
  , listen: function () {
1910
      this.$element
1911
        .on('blur',     $.proxy(this.blur, this))
1912
        .on('keypress', $.proxy(this.keypress, this))
1913
        .on('keyup',    $.proxy(this.keyup, this))
1914
 
1915
      if ($.browser.chrome || $.browser.webkit || $.browser.msie) {
1916
        this.$element.on('keydown', $.proxy(this.keydown, this))
1917
      }
1918
 
1919
      this.$menu
1920
        .on('click', $.proxy(this.click, this))
1921
        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1922
    }
1923
 
1924
  , move: function (e) {
1925
      if (!this.shown) return
1926
 
1927
      switch(e.keyCode) {
1928
        case 9: // tab
1929
        case 13: // enter
1930
        case 27: // escape
1931
          e.preventDefault()
1932
          break
1933
 
1934
        case 38: // up arrow
1935
          e.preventDefault()
1936
          this.prev()
1937
          break
1938
 
1939
        case 40: // down arrow
1940
          e.preventDefault()
1941
          this.next()
1942
          break
1943
      }
1944
 
1945
      e.stopPropagation()
1946
    }
1947
 
1948
  , keydown: function (e) {
1949
      this.suppressKeyPressRepeat = !~$.inArray(e.keyCode, [40,38,9,13,27])
1950
      this.move(e)
1951
    }
1952
 
1953
  , keypress: function (e) {
1954
      if (this.suppressKeyPressRepeat) return
1955
      this.move(e)
1956
    }
1957
 
1958
  , keyup: function (e) {
1959
      switch(e.keyCode) {
1960
        case 40: // down arrow
1961
        case 38: // up arrow
1962
          break
1963
 
1964
        case 9: // tab
1965
        case 13: // enter
1966
          if (!this.shown) return
1967
          this.select()
1968
          break
1969
 
1970
        case 27: // escape
1971
          if (!this.shown) return
1972
          this.hide()
1973
          break
1974
 
1975
        default:
1976
          this.lookup()
1977
      }
1978
 
1979
      e.stopPropagation()
1980
      e.preventDefault()
1981
  }
1982
 
1983
  , blur: function (e) {
1984
      var that = this
1985
      setTimeout(function () { that.hide() }, 150)
1986
    }
1987
 
1988
  , click: function (e) {
1989
      e.stopPropagation()
1990
      e.preventDefault()
1991
      this.select()
1992
    }
1993
 
1994
  , mouseenter: function (e) {
1995
      this.$menu.find('.active').removeClass('active')
1996
      $(e.currentTarget).addClass('active')
1997
    }
1998
 
1999
  }
2000
 
2001
 
2002
  /* TYPEAHEAD PLUGIN DEFINITION
2003
   * =========================== */
2004
 
2005
  $.fn.typeahead = function (option) {
2006
    return this.each(function () {
2007
      var $this = $(this)
2008
        , data = $this.data('typeahead')
2009
        , options = typeof option == 'object' && option
2010
      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
2011
      if (typeof option == 'string') data[option]()
2012
    })
2013
  }
2014
 
2015
  $.fn.typeahead.defaults = {
2016
    source: []
2017
  , items: 8
2018
  , menu: '<ul class="typeahead dropdown-menu"></ul>'
2019
  , item: '<li><a href="#"></a></li>'
2020
  , minLength: 1
2021
  }
2022
 
2023
  $.fn.typeahead.Constructor = Typeahead
2024
 
2025
 
2026
 /*   TYPEAHEAD DATA-API
2027
  * ================== */
2028
 
2029
  $(function () {
2030
    $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
2031
      var $this = $(this)
2032
      if ($this.data('typeahead')) return
2033
      e.preventDefault()
2034
      $this.typeahead($this.data())
2035
    })
2036
  })
2037
 
2038
}(window.jQuery);