+function ($){
'use strict';
var Collapse=function (element, options){
this.$element=$(element)
this.options=$.extend({}, Collapse.DEFAULTS, options)
this.transitioning=null
if(this.options.parent) this.$parent=$(this.options.parent)
if(this.options.toggle) this.toggle()
}
Collapse.DEFAULTS={
toggle: true
}
Collapse.prototype.dimension=function (){
var hasWidth=this.$element.hasClass('width')
return hasWidth ? 'width':'height'
}
Collapse.prototype.show=function (){
if(this.transitioning||this.$element.hasClass('in')) return
var startEvent=$.Event('show.bs.collapse')
this.$element.trigger(startEvent)
if(startEvent.isDefaultPrevented()) return
var actives=this.$parent&&this.$parent.find('> .panel > .in')
if(actives&&actives.length){
var hasData=actives.data('bs.collapse')
if(hasData&&hasData.transitioning) return
var parentNoToggle=this.$parent.data('no-toggle')
if(!parentNoToggle){
actives.collapse('hide')
}
hasData||actives.data('bs.collapse', null)
}
var dimension=this.dimension()
this.$element
.removeClass('collapse')
.addClass('collapsing')[dimension](0)
this.transitioning=1
var complete=function (e){
if(e&&e.target!=this.$element[0]) return
this.$element
.removeClass('collapsing')
.addClass('collapse in')[dimension]('auto')
this.transitioning=0
this.$element.trigger('shown.bs.collapse')
}
if(!$.support.transition) return complete.call(this)
var scrollSize=$.camelCase(['scroll', dimension].join('-'))
this.$element
.one($.support.transition.end, $.proxy(complete, this))
.emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
}
Collapse.prototype.hide=function (){
if(this.transitioning||!this.$element.hasClass('in')) return
var startEvent=$.Event('hide.bs.collapse')
this.$element.trigger(startEvent)
if(startEvent.isDefaultPrevented()) return
var dimension=this.dimension()
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
this.$element
.addClass('collapsing')
.removeClass('collapse')
.removeClass('in')
this.transitioning=1
var complete=function (e){
if(e&&e.target!=this.$element[0]) return
this.transitioning=0
this.$element
.trigger('hidden.bs.collapse')
.removeClass('collapsing')
.addClass('collapse')
}
if(!$.support.transition) return complete.call(this)
this.$element
[dimension](0)
.one($.support.transition.end, $.proxy(complete, this))
.emulateTransitionEnd(350)
}
Collapse.prototype.toggle=function (){
this[this.$element.hasClass('in') ? 'hide':'show']()
}
var old=$.fn.collapse
$.fn.collapse=function (option){
return this.each(function (){
var $this=$(this)
var data=$this.data('bs.collapse')
var options=$.extend({}, Collapse.DEFAULTS, $this.data(), typeof option=='object'&&option)
if(!data&&options.toggle&&option=='show') option = !option
if(!data) $this.data('bs.collapse', (data=new Collapse(this, options)))
if(typeof option=='string') data[option]()
})
}
$.fn.collapse.Constructor=Collapse
$.fn.collapse.noConflict=function (){
$.fn.collapse=old
return this
}
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e){
var $this=$(this), href
var target=$this.attr('data-target')
|| e.preventDefault()
|| (href=$this.attr('href'))&&href.replace(/.*(?=#[^\s]+$)/, '')
var _target=href.replace(/^#/, "");
if($('[data-id="' + _target + '"]').length){
var $target=$('[data-id="' + _target + '"]')
}else{
var $target=$(target)
}
var data=$target.data('bs.collapse')
var option=data ? 'toggle':$this.data()
var parent=$this.attr('data-parent')
var $parent=parent&&$(parent)
if(!data||!data.transitioning){
if($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
$this[$target.hasClass('in') ? 'addClass':'removeClass']('collapsed')
}
$target.collapse(option)
})
}(jQuery);