Files
sage/js/plugins.js
2012-02-22 14:49:40 -06:00

100 lines
29 KiB
JavaScript

// usage: log('inside coolFunc', this, arguments);
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function f(){ log.history = log.history || []; log.history.push(arguments); if(this.console) { var args = arguments, newarr; args.callee = args.callee.caller; newarr = [].slice.call(args); if (typeof console.log === 'object') log.apply.call(console.log, console, newarr); else console.log.apply(console, newarr);}};
// make it safe to use console.log always
(function(a){function b(){}for(var c="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),d;!!(d=c.pop());){a[d]=a[d]||b;}})
(function(){try{console.log();return window.console;}catch(a){return (window.console={});}}());
// place any jQuery/helper plugins in here, instead of separate, slower script files.
/* ==========================================================
* Bootstrap Javascript Plugins
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
/* ==========================================================
* bootstrap-alert.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#alerts
* ========================================================== */
!function($){"use strict"var dismiss='[data-dismiss="alert"]',Alert=function(el){$(el).on('click',dismiss,this.close)}Alert.prototype={constructor:Alert,close:function(e){var $this=$(this),selector=$this.attr('data-target'),$parent if(!selector){selector=$this.attr('href')selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'')}$parent=$(selector)$parent.trigger('close')e&&e.preventDefault()$parent.length||($parent=$this.hasClass('alert')?$this:$this.parent())$parent.trigger('close').removeClass('in')function removeElement(){$parent.trigger('closed').remove()}$.support.transition&&$parent.hasClass('fade')?$parent.on($.support.transition.end,removeElement):removeElement()}}$.fn.alert=function(option){return this.each(function(){var $this=$(this),data=$this.data('alert')if(!data)$this.data('alert',(data=new Alert(this)))if(typeof option=='string')data[option].call($this)})}$.fn.alert.Constructor=Alert $(function(){$('body').on('click.alert.data-api',dismiss,Alert.prototype.close)})}(window.jQuery);
/* ============================================================
* bootstrap-button.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#buttons
* ============================================================ */
!function($){"use strict"var Button=function(element,options){this.$element=$(element)this.options=$.extend({},$.fn.button.defaults,options)}Button.prototype={constructor:Button,setState:function(state){var d='disabled',$el=this.$element,data=$el.data(),val=$el.is('input')?'val':'html'state=state+'Text'data.resetText||$el.data('resetText',$el[val]())$el[val](data[state]||this.options[state])setTimeout(function(){state=='loadingText'?$el.addClass(d).attr(d,d):$el.removeClass(d).removeAttr(d)},0)},toggle:function(){var $parent=this.$element.parent('[data-toggle="buttons-radio"]')$parent&&$parent.find('.active').removeClass('active')this.$element.toggleClass('active')}}$.fn.button=function(option){return this.each(function(){var $this=$(this),data=$this.data('button'),options=typeof option=='object'&&option if(!data)$this.data('button',(data=new Button(this,options)))if(option=='toggle')data.toggle()else if(option)data.setState(option)})}$.fn.button.defaults={loadingText:'loading...'}$.fn.button.Constructor=Button $(function(){$('body').on('click.button.data-api','[data-toggle^=button]',function(e){var $btn=$(e.target)if(!$btn.hasClass('btn'))$btn=$btn.closest('.btn')$btn.button('toggle')})})}(window.jQuery);
/* ==========================================================
* bootstrap-carousel.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#carousel
* ========================================================== */
!function($){"use strict"var Carousel=function(element,options){this.$element=$(element)this.options=$.extend({},$.fn.carousel.defaults,options)this.options.slide&&this.slide(this.options.slide)}Carousel.prototype={cycle:function(){this.interval=setInterval($.proxy(this.next,this),this.options.interval)return this},to:function(pos){var $active=this.$element.find('.active'),children=$active.parent().children(),activePos=children.index($active),that=this if(pos>(children.length-1)||pos<0)return if(this.sliding){return this.$element.one('slid',function(){that.to(pos)})}if(activePos==pos){return this.pause().cycle()}return this.slide(pos>activePos?'next':'prev',$(children[pos]))},pause:function(){clearInterval(this.interval)this.interval=null return this},next:function(){if(this.sliding)return return this.slide('next')},prev:function(){if(this.sliding)return return this.slide('prev')},slide:function(type,next){var $active=this.$element.find('.active'),$next=next||$active[type](),isCycling=this.interval,direction=type=='next'?'left':'right',fallback=type=='next'?'first':'last',that=this if(!$next.length)return this.sliding=true isCycling&&this.pause()$next=$next.length?$next:this.$element.find('.item')[fallback]()if(!$.support.transition&&this.$element.hasClass('slide')){this.$element.trigger('slide')$active.removeClass('active')$next.addClass('active')this.sliding=false this.$element.trigger('slid')}else{$next.addClass(type)$next[0].offsetWidth $active.addClass(direction)$next.addClass(direction)this.$element.trigger('slide')this.$element.one($.support.transition.end,function(){$next.removeClass([type,direction].join(' ')).addClass('active')$active.removeClass(['active',direction].join(' '))that.sliding=false setTimeout(function(){that.$element.trigger('slid')},0)})}isCycling&&this.cycle()return this}}$.fn.carousel=function(option){return this.each(function(){var $this=$(this),data=$this.data('carousel'),options=typeof option=='object'&&option if(!data)$this.data('carousel',(data=new Carousel(this,options)))if(typeof option=='number')data.to(option)else if(typeof option=='string'||(option=options.slide))data[option]()else data.cycle()})}$.fn.carousel.defaults={interval:5000}$.fn.carousel.Constructor=Carousel $(function(){$('body').on('click.carousel.data-api','[data-slide]',function(e){var $this=$(this),href,$target=$($this.attr('data-target')||(href=$this.attr('href'))&&href.replace(/.*(?=#[^\s]+$)/,'')),options=!$target.data('modal')&&$.extend({},$target.data(),$this.data())$target.carousel(options)e.preventDefault()})})}(window.jQuery);
/* =============================================================
* bootstrap-collapse.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#collapse
* ============================================================ */
!function($){"use strict"var Collapse=function(element,options){this.$element=$(element)this.options=$.extend({},$.fn.collapse.defaults,options)if(this.options["parent"]){this.$parent=$(this.options["parent"])}this.options.toggle&&this.toggle()}Collapse.prototype={constructor:Collapse,dimension:function(){var hasWidth=this.$element.hasClass('width')return hasWidth?'width':'height'},show:function(){var dimension=this.dimension(),scroll=$.camelCase(['scroll',dimension].join('-')),actives=this.$parent&&this.$parent.find('.in'),hasData if(actives&&actives.length){hasData=actives.data('collapse')actives.collapse('hide')hasData||actives.data('collapse',null)}this.$element[dimension](0)this.transition('addClass','show','shown')this.$element[dimension](this.$element[0][scroll])},hide:function(){var dimension=this.dimension()this.reset(this.$element[dimension]())this.transition('removeClass','hide','hidden')this.$element[dimension](0)},reset:function(size){var dimension=this.dimension()this.$element.removeClass('collapse')[dimension](size||'auto')[0].offsetWidth this.$element.addClass('collapse')},transition:function(method,startEvent,completeEvent){var that=this,complete=function(){if(startEvent=='show')that.reset()that.$element.trigger(completeEvent)}this.$element.trigger(startEvent)[method]('in')$.support.transition&&this.$element.hasClass('collapse')?this.$element.one($.support.transition.end,complete):complete()},toggle:function(){this[this.$element.hasClass('in')?'hide':'show']()}}$.fn.collapse=function(option){return this.each(function(){var $this=$(this),data=$this.data('collapse'),options=typeof option=='object'&&option if(!data)$this.data('collapse',(data=new Collapse(this,options)))if(typeof option=='string')data[option]()})}$.fn.collapse.defaults={toggle:true}$.fn.collapse.Constructor=Collapse $(function(){$('body').on('click.collapse.data-api','[data-toggle=collapse]',function(e){var $this=$(this),href,target=$this.attr('data-target')||e.preventDefault()||(href=$this.attr('href'))&&href.replace(/.*(?=#[^\s]+$)/,''),option=$(target).data('collapse')?'toggle':$this.data()$(target).collapse(option)})})}(window.jQuery);
/* ============================================================
* bootstrap-dropdown.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
* ============================================================ */
!function($){"use strict"var toggle='[data-toggle="dropdown"]',Dropdown=function(element){var $el=$(element).on('click.dropdown.data-api',this.toggle)$('html').on('click.dropdown.data-api',function(){$el.parent().removeClass('open')})}Dropdown.prototype={constructor:Dropdown,toggle:function(e){var $this=$(this),selector=$this.attr('data-target'),$parent,isActive if(!selector){selector=$this.attr('href')selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'')}$parent=$(selector)$parent.length||($parent=$this.parent())isActive=$parent.hasClass('open')clearMenus()!isActive&&$parent.toggleClass('open')return false}}function clearMenus(){$(toggle).parent().removeClass('open')}$.fn.dropdown=function(option){return this.each(function(){var $this=$(this),data=$this.data('dropdown')if(!data)$this.data('dropdown',(data=new Dropdown(this)))if(typeof option=='string')data[option].call($this)})}$.fn.dropdown.Constructor=Dropdown $(function(){$('html').on('click.dropdown.data-api',clearMenus)$('body').on('click.dropdown.data-api',toggle,Dropdown.prototype.toggle)})}(window.jQuery);
/* =========================================================
* bootstrap-modal.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#modals
* ========================================================= */
!function($){"use strict"var Modal=function(content,options){this.options=options this.$element=$(content).delegate('[data-dismiss="modal"]','click.dismiss.modal',$.proxy(this.hide,this))}Modal.prototype={constructor:Modal,toggle:function(){return this[!this.isShown?'show':'hide']()},show:function(){var that=this if(this.isShown)return $('body').addClass('modal-open')this.isShown=true this.$element.trigger('show')escape.call(this)backdrop.call(this,function(){var transition=$.support.transition&&that.$element.hasClass('fade')!that.$element.parent().length&&that.$element.appendTo(document.body)that.$element.show()if(transition){that.$element[0].offsetWidth}that.$element.addClass('in')transition?that.$element.one($.support.transition.end,function(){that.$element.trigger('shown')}):that.$element.trigger('shown')})},hide:function(e){e&&e.preventDefault()if(!this.isShown)return var that=this this.isShown=false $('body').removeClass('modal-open')escape.call(this)this.$element.trigger('hide').removeClass('in')$.support.transition&&this.$element.hasClass('fade')?hideWithTransition.call(this):hideModal.call(this)}}function hideWithTransition(){var that=this,timeout=setTimeout(function(){that.$element.off($.support.transition.end)hideModal.call(that)},500)this.$element.one($.support.transition.end,function(){clearTimeout(timeout)hideModal.call(that)})}function hideModal(that){this.$element.hide().trigger('hidden')backdrop.call(this)}function backdrop(callback){var that=this,animate=this.$element.hasClass('fade')?'fade':''if(this.isShown&&this.options.backdrop){var doAnimate=$.support.transition&&animate this.$backdrop=$('<div class="modal-backdrop '+animate+'" />').appendTo(document.body)if(this.options.backdrop!='static'){this.$backdrop.click($.proxy(this.hide,this))}if(doAnimate)this.$backdrop[0].offsetWidth this.$backdrop.addClass('in')doAnimate?this.$backdrop.one($.support.transition.end,callback):callback()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass('in')$.support.transition&&this.$element.hasClass('fade')?this.$backdrop.one($.support.transition.end,$.proxy(removeBackdrop,this)):removeBackdrop.call(this)}else if(callback){callback()}}function removeBackdrop(){this.$backdrop.remove()this.$backdrop=null}function escape(){var that=this if(this.isShown&&this.options.keyboard){$(document).on('keyup.dismiss.modal',function(e){e.which==27&&that.hide()})}else if(!this.isShown){$(document).off('keyup.dismiss.modal')}}$.fn.modal=function(option){return this.each(function(){var $this=$(this),data=$this.data('modal'),options=$.extend({},$.fn.modal.defaults,$this.data(),typeof option=='object'&&option)if(!data)$this.data('modal',(data=new Modal(this,options)))if(typeof option=='string')data[option]()else if(options.show)data.show()})}$.fn.modal.defaults={backdrop:true,keyboard:true,show:true}$.fn.modal.Constructor=Modal $(function(){$('body').on('click.modal.data-api','[data-toggle="modal"]',function(e){var $this=$(this),href,$target=$($this.attr('data-target')||(href=$this.attr('href'))&&href.replace(/.*(?=#[^\s]+$)/,'')),option=$target.data('modal')?'toggle':$.extend({},$target.data(),$this.data())e.preventDefault()$target.modal(option)})})}(window.jQuery);
/* =============================================================
* bootstrap-scrollspy.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#scrollspy
* ============================================================== */
!function($){"use strict"function ScrollSpy(element,options){var process=$.proxy(this.process,this),$element=$(element).is('body')?$(window):$(element),href this.options=$.extend({},$.fn.scrollspy.defaults,options)this.$scrollElement=$element.on('scroll.scroll.data-api',process)this.selector=(this.options.target||((href=$(element).attr('href'))&&href.replace(/.*(?=#[^\s]+$)/,''))||'')+' .nav li > a'this.$body=$('body').on('click.scroll.data-api',this.selector,process)this.refresh()this.process()}ScrollSpy.prototype={constructor:ScrollSpy,refresh:function(){this.targets=this.$body.find(this.selector).map(function(){var href=$(this).attr('href')return/^#\w/.test(href)&&$(href).length?href:null})this.offsets=$.map(this.targets,function(id){return $(id).position().top})},process:function(){var scrollTop=this.$scrollElement.scrollTop()+this.options.offset,offsets=this.offsets,targets=this.targets,activeTarget=this.activeTarget,i for(i=offsets.length;i--;){activeTarget!=targets[i]&&scrollTop>=offsets[i]&&(!offsets[i+1]||scrollTop<=offsets[i+1])&&this.activate(targets[i])}},activate:function(target){var active this.activeTarget=target this.$body.find(this.selector).parent('.active').removeClass('active')active=this.$body.find(this.selector+'[href="'+target+'"]').parent('li').addClass('active')if(active.parent('.dropdown-menu')){active.closest('li.dropdown').addClass('active')}}}$.fn.scrollspy=function(option){return this.each(function(){var $this=$(this),data=$this.data('scrollspy'),options=typeof option=='object'&&option if(!data)$this.data('scrollspy',(data=new ScrollSpy(this,options)))if(typeof option=='string')data[option]()})}$.fn.scrollspy.Constructor=ScrollSpy $.fn.scrollspy.defaults={offset:10}$(function(){$('[data-spy="scroll"]').each(function(){var $spy=$(this)$spy.scrollspy($spy.data())})})}(window.jQuery);
/* ========================================================
* bootstrap-tab.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#tabs
* ======================================================== */
!function($){"use strict"var Tab=function(element){this.element=$(element)}Tab.prototype={constructor:Tab,show:function(){var $this=this.element,$ul=$this.closest('ul:not(.dropdown-menu)'),selector=$this.attr('data-target'),previous,$target if(!selector){selector=$this.attr('href')selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'')}if($this.parent('li').hasClass('active'))return previous=$ul.find('.active a').last()[0]$this.trigger({type:'show',relatedTarget:previous})$target=$(selector)this.activate($this.parent('li'),$ul)this.activate($target,$target.parent(),function(){$this.trigger({type:'shown',relatedTarget:previous})})},activate:function(element,container,callback){var $active=container.find('> .active'),transition=callback&&$.support.transition&&$active.hasClass('fade')function next(){$active.removeClass('active').find('> .dropdown-menu > .active').removeClass('active')element.addClass('active')if(transition){element[0].offsetWidth element.addClass('in')}else{element.removeClass('fade')}if(element.parent('.dropdown-menu')){element.closest('li.dropdown').addClass('active')}callback&&callback()}transition?$active.one($.support.transition.end,next):next()$active.removeClass('in')}}$.fn.tab=function(option){return this.each(function(){var $this=$(this),data=$this.data('tab')if(!data)$this.data('tab',(data=new Tab(this)))if(typeof option=='string')data[option]()})}$.fn.tab.Constructor=Tab $(function(){$('body').on('click.tab.data-api','[data-toggle="tab"], [data-toggle="pill"]',function(e){e.preventDefault()$(this).tab('show')})})}(window.jQuery);
/* ===========================================================
* bootstrap-tooltip.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================== */
!function($){"use strict"var Tooltip=function(element,options){this.init('tooltip',element,options)}Tooltip.prototype={constructor:Tooltip,init:function(type,element,options){var eventIn,eventOut this.type=type this.$element=$(element)this.options=this.getOptions(options)this.enabled=true if(this.options.trigger!='manual'){eventIn=this.options.trigger=='hover'?'mouseenter':'focus'eventOut=this.options.trigger=='hover'?'mouseleave':'blur'this.$element.on(eventIn,this.options.selector,$.proxy(this.enter,this))this.$element.on(eventOut,this.options.selector,$.proxy(this.leave,this))}this.options.selector?(this._options=$.extend({},this.options,{trigger:'manual',selector:''})):this.fixTitle()},getOptions:function(options){options=$.extend({},$.fn[this.type].defaults,options,this.$element.data())if(options.delay&&typeof options.delay=='number'){options.delay={show:options.delay,hide:options.delay}}return options},enter:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type)if(!self.options.delay||!self.options.delay.show){self.show()}else{self.hoverState='in'setTimeout(function(){if(self.hoverState=='in'){self.show()}},self.options.delay.show)}},leave:function(e){var self=$(e.currentTarget)[this.type](this._options).data(this.type)if(!self.options.delay||!self.options.delay.hide){self.hide()}else{self.hoverState='out'setTimeout(function(){if(self.hoverState=='out'){self.hide()}},self.options.delay.hide)}},show:function(){var $tip,inside,pos,actualWidth,actualHeight,placement,tp if(this.hasContent()&&this.enabled){$tip=this.tip()this.setContent()if(this.options.animation){$tip.addClass('fade')}placement=typeof this.options.placement=='function'?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement inside=/in/.test(placement)$tip.remove().css({top:0,left:0,display:'block'}).appendTo(inside?this.$element:document.body)pos=this.getPosition(inside)actualWidth=$tip[0].offsetWidth actualHeight=$tip[0].offsetHeight switch(inside?placement.split(' ')[1]:placement){case'bottom':tp={top:pos.top+pos.height,left:pos.left+pos.width/2-actualWidth/2}break case'top':tp={top:pos.top-actualHeight,left:pos.left+pos.width/2-actualWidth/2}break case'left':tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth}break case'right':tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width}break}$tip.css(tp).addClass(placement).addClass('in')}},setContent:function(){var $tip=this.tip()$tip.find('.tooltip-inner').html(this.getTitle())$tip.removeClass('fade in top bottom left right')},hide:function(){var that=this,$tip=this.tip()$tip.removeClass('in')function removeWithAnimation(){var timeout=setTimeout(function(){$tip.off($.support.transition.end).remove()},500)$tip.one($.support.transition.end,function(){clearTimeout(timeout)$tip.remove()})}$.support.transition&&this.$tip.hasClass('fade')?removeWithAnimation():$tip.remove()},fixTitle:function(){var $e=this.$element if($e.attr('title')||typeof($e.attr('data-original-title'))!='string'){$e.attr('data-original-title',$e.attr('title')||'').removeAttr('title')}},hasContent:function(){return this.getTitle()},getPosition:function(inside){return $.extend({},(inside?{top:0,left:0}:this.$element.offset()),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var title,$e=this.$element,o=this.options title=$e.attr('data-original-title')||(typeof o.title=='function'?o.title.call($e[0]):o.title)title=title.toString().replace(/(^\s*|\s*$)/,"")return title},tip:function(){return this.$tip=this.$tip||$(this.options.template)},validate:function(){if(!this.$element[0].parentNode){this.hide()this.$element=null this.options=null}},enable:function(){this.enabled=true},disable:function(){this.enabled=false},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass('in')?'hide':'show']()}}$.fn.tooltip=function(option){return this.each(function(){var $this=$(this),data=$this.data('tooltip'),options=typeof option=='object'&&option if(!data)$this.data('tooltip',(data=new Tooltip(this,options)))if(typeof option=='string')data[option]()})}$.fn.tooltip.Constructor=Tooltip $.fn.tooltip.defaults={animation:true,delay:0,selector:false,placement:'top',trigger:'hover',title:'',template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'}}(window.jQuery);
/* ===========================================================
* bootstrap-popover.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#popovers
* =========================================================== */
!function($){"use strict"var Popover=function(element,options){this.init('popover',element,options)}Popover.prototype=$.extend({},$.fn.tooltip.Constructor.prototype,{constructor:Popover,setContent:function(){var $tip=this.tip(),title=this.getTitle(),content=this.getContent()$tip.find('.popover-title')[$.type(title)=='object'?'append':'html'](title)$tip.find('.popover-content > *')[$.type(content)=='object'?'append':'html'](content)$tip.removeClass('fade top bottom left right in')},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var content,$e=this.$element,o=this.options content=$e.attr('data-content')||(typeof o.content=='function'?o.content.call($e[0]):o.content)content=content.toString().replace(/(^\s*|\s*$)/,"")return content},tip:function(){if(!this.$tip){this.$tip=$(this.options.template)}return this.$tip}})$.fn.popover=function(option){return this.each(function(){var $this=$(this),data=$this.data('popover'),options=typeof option=='object'&&option if(!data)$this.data('popover',(data=new Popover(this,options)))if(typeof option=='string')data[option]()})}$.fn.popover.Constructor=Popover $.fn.popover.defaults=$.extend({},$.fn.tooltip.defaults,{placement:'right',content:'',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>'})}(window.jQuery);
/* ===================================================
* bootstrap-transition.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#transitions
* ========================================================== */
!function($){$(function(){"use strict"$.support.transition=(function(){var thisBody=document.body||document.documentElement,thisStyle=thisBody.style,support=thisStyle.transition!==undefined||thisStyle.WebkitTransition!==undefined||thisStyle.MozTransition!==undefined||thisStyle.MsTransition!==undefined||thisStyle.OTransition!==undefined return support&&{end:(function(){var transitionEnd="TransitionEnd"if($.browser.webkit){transitionEnd="webkitTransitionEnd"}else if($.browser.mozilla){transitionEnd="transitionend"}else if($.browser.opera){transitionEnd="oTransitionEnd"}return transitionEnd}())}})()})}(window.jQuery);
/* =============================================================
* bootstrap-typeahead.js v2.0.1
* http://twitter.github.com/bootstrap/javascript.html#typeahead
* ============================================================ */
!function($){"use strict"var Typeahead=function(element,options){this.$element=$(element)this.options=$.extend({},$.fn.typeahead.defaults,options)this.matcher=this.options.matcher||this.matcher this.sorter=this.options.sorter||this.sorter this.highlighter=this.options.highlighter||this.highlighter this.$menu=$(this.options.menu).appendTo('body')this.source=this.options.source this.shown=false this.listen()}Typeahead.prototype={constructor:Typeahead,select:function(){var val=this.$menu.find('.active').attr('data-value')this.$element.val(val)return this.hide()},show:function(){var pos=$.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight})this.$menu.css({top:pos.top+pos.height,left:pos.left})this.$menu.show()this.shown=true return this},hide:function(){this.$menu.hide()this.shown=false return this},lookup:function(event){var that=this,items,q this.query=this.$element.val()if(!this.query){return this.shown?this.hide():this}items=$.grep(this.source,function(item){if(that.matcher(item))return item})items=this.sorter(items)if(!items.length){return this.shown?this.hide():this}return this.render(items.slice(0,this.options.items)).show()},matcher:function(item){return~item.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(items){var beginswith=[],caseSensitive=[],caseInsensitive=[],item while(item=items.shift()){if(!item.toLowerCase().indexOf(this.query.toLowerCase()))beginswith.push(item)else if(~item.indexOf(this.query))caseSensitive.push(item)else caseInsensitive.push(item)}return beginswith.concat(caseSensitive,caseInsensitive)},highlighter:function(item){return item.replace(new RegExp('('+this.query+')','ig'),function($1,match){return'<strong>'+match+'</strong>'})},render:function(items){var that=this items=$(items).map(function(i,item){i=$(that.options.item).attr('data-value',item)i.find('a').html(that.highlighter(item))return i[0]})items.first().addClass('active')this.$menu.html(items)return this},next:function(event){var active=this.$menu.find('.active').removeClass('active'),next=active.next()if(!next.length){next=$(this.$menu.find('li')[0])}next.addClass('active')},prev:function(event){var active=this.$menu.find('.active').removeClass('active'),prev=active.prev()if(!prev.length){prev=this.$menu.find('li').last()}prev.addClass('active')},listen:function(){this.$element.on('blur',$.proxy(this.blur,this)).on('keypress',$.proxy(this.keypress,this)).on('keyup',$.proxy(this.keyup,this))if($.browser.webkit||$.browser.msie){this.$element.on('keydown',$.proxy(this.keypress,this))}this.$menu.on('click',$.proxy(this.click,this)).on('mouseenter','li',$.proxy(this.mouseenter,this))},keyup:function(e){e.stopPropagation()e.preventDefault()switch(e.keyCode){case 40:case 38:break case 9:case 13:if(!this.shown)return this.select()break case 27:this.hide()break default:this.lookup()}},keypress:function(e){e.stopPropagation()if(!this.shown)return switch(e.keyCode){case 9:case 13:case 27:e.preventDefault()break case 38:e.preventDefault()this.prev()break case 40:e.preventDefault()this.next()break}},blur:function(e){var that=this e.stopPropagation()e.preventDefault()setTimeout(function(){that.hide()},150)},click:function(e){e.stopPropagation()e.preventDefault()this.select()},mouseenter:function(e){this.$menu.find('.active').removeClass('active')$(e.currentTarget).addClass('active')}}$.fn.typeahead=function(option){return this.each(function(){var $this=$(this),data=$this.data('typeahead'),options=typeof option=='object'&&option if(!data)$this.data('typeahead',(data=new Typeahead(this,options)))if(typeof option=='string')data[option]()})}$.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'}$.fn.typeahead.Constructor=Typeahead $(function(){$('body').on('focus.typeahead.data-api','[data-provide="typeahead"]',function(e){var $this=$(this)if($this.data('typeahead'))return e.preventDefault()$this.typeahead($this.data())})})}(window.jQuery);