{"version":3,"file":"site.js","sources":["../../uhr.frontend/Static/Scripts/prebuilt/jquery-ui.js","../../uhr.frontend/Static/Scripts/jquery.validate.js","../../uhr.frontend/Static/Scripts/jquery.validate.unobtrusive.js","../../uhr.frontend/Static/Scripts/jquery.reflowcolumns.js","../../uhr.frontend/Static/Scripts/jquery.simplefilter.js","../../uhr.frontend/Static/Scripts/jquery.citetofootnote.js","../../uhr.frontend/Static/Scripts/_extensions.js","../../uhr.frontend/Static/Bootstrap/js/bootstrap.js","../../uhr.frontend/Static/Scripts/autocomplete.js","../../uhr.frontend/Static/uhrdictionary/autocomplete.js","../../uhr.frontend/Static/Scripts/progress-circle.js","../../uhr.frontend/Static/Scripts/site/education-comparison.js","../../uhr.frontend/Static/Scripts/site/foreigngradecalculator.js","../../uhr.frontend/Static/Scripts/site/navigation.js","../../uhr.frontend/Static/Scripts/site/resursbanken.js","../../uhr.frontend/Static/Scripts/site/filterpanelblock.js","../../uhr.frontend/Static/Scripts/site/sunburstchart.js","../../uhr.frontend/Static/Scripts/site/searchpage.js","../../uhr.frontend/Static/Scripts/site/searchevaluationpage.js","../../uhr.frontend/Static/Scripts/site/altarnativeselectionform.js","../../uhr.frontend/Static/Scripts/site/countryselectorblock.js","../../uhr.frontend/Static/Scripts/site/main.js","../../uhr.frontend/Static/Scripts/site/mediablock.js","../../uhr.frontend/Static/Scripts/site/columnbasedlandingpage.js","../../uhr.frontend/Static/Scripts/antagningsstatistik.sokblock.js","../../uhr.frontend/Static/Scripts/programpagelist.js","../../uhr.frontend/node_modules/js-cookie/dist/js.cookie.mjs","../../uhr.frontend/node_modules/vue/dist/vue.runtime.esm.js","../../uhr.frontend/node_modules/vue-router/dist/vue-router.esm.js","../../uhr.frontend/node_modules/vue-unique-id/dist/vue-unique-id.esm.js","../../uhr.frontend/js/vue/components/jw-paginate.js","../../uhr.frontend/js/vue/components/jwPaginationCustom.vue","../../uhr.frontend/node_modules/axios/lib/helpers/bind.js","../../uhr.frontend/node_modules/axios/lib/utils.js","../../uhr.frontend/node_modules/axios/lib/core/AxiosError.js","../../uhr.frontend/node_modules/axios/lib/helpers/null.js","../../uhr.frontend/node_modules/axios/lib/helpers/toFormData.js","../../uhr.frontend/node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../uhr.frontend/node_modules/axios/lib/helpers/buildURL.js","../../uhr.frontend/node_modules/axios/lib/core/InterceptorManager.js","../../uhr.frontend/node_modules/axios/lib/defaults/transitional.js","../../uhr.frontend/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../uhr.frontend/node_modules/axios/lib/platform/browser/classes/FormData.js","../../uhr.frontend/node_modules/axios/lib/platform/browser/classes/Blob.js","../../uhr.frontend/node_modules/axios/lib/platform/browser/index.js","../../uhr.frontend/node_modules/axios/lib/platform/common/utils.js","../../uhr.frontend/node_modules/axios/lib/platform/index.js","../../uhr.frontend/node_modules/axios/lib/helpers/toURLEncodedForm.js","../../uhr.frontend/node_modules/axios/lib/helpers/formDataToJSON.js","../../uhr.frontend/node_modules/axios/lib/defaults/index.js","../../uhr.frontend/node_modules/axios/lib/helpers/parseHeaders.js","../../uhr.frontend/node_modules/axios/lib/core/AxiosHeaders.js","../../uhr.frontend/node_modules/axios/lib/core/transformData.js","../../uhr.frontend/node_modules/axios/lib/cancel/isCancel.js","../../uhr.frontend/node_modules/axios/lib/cancel/CanceledError.js","../../uhr.frontend/node_modules/axios/lib/core/settle.js","../../uhr.frontend/node_modules/axios/lib/helpers/cookies.js","../../uhr.frontend/node_modules/axios/lib/helpers/isAbsoluteURL.js","../../uhr.frontend/node_modules/axios/lib/helpers/combineURLs.js","../../uhr.frontend/node_modules/axios/lib/core/buildFullPath.js","../../uhr.frontend/node_modules/axios/lib/helpers/isURLSameOrigin.js","../../uhr.frontend/node_modules/axios/lib/helpers/parseProtocol.js","../../uhr.frontend/node_modules/axios/lib/helpers/speedometer.js","../../uhr.frontend/node_modules/axios/lib/adapters/xhr.js","../../uhr.frontend/node_modules/axios/lib/adapters/adapters.js","../../uhr.frontend/node_modules/axios/lib/core/dispatchRequest.js","../../uhr.frontend/node_modules/axios/lib/core/mergeConfig.js","../../uhr.frontend/node_modules/axios/lib/env/data.js","../../uhr.frontend/node_modules/axios/lib/helpers/validator.js","../../uhr.frontend/node_modules/axios/lib/core/Axios.js","../../uhr.frontend/node_modules/axios/lib/cancel/CancelToken.js","../../uhr.frontend/node_modules/axios/lib/helpers/spread.js","../../uhr.frontend/node_modules/axios/lib/helpers/isAxiosError.js","../../uhr.frontend/node_modules/axios/lib/helpers/HttpStatusCode.js","../../uhr.frontend/node_modules/axios/lib/axios.js","../../uhr.frontend/js/vue/plugins/commentservice.js","../../uhr.frontend/js/vue/components/profilePhoto.vue","../../uhr.frontend/js/vue/comments/comment-form.vue","../../uhr.frontend/js/vue/components/svgicon.vue","../../uhr.frontend/js/vue/comments/comment-delete.vue","../../uhr.frontend/js/vue/comments/edit-form.vue","../../uhr.frontend/js/vue/components/loading.vue","../../uhr.frontend/js/vue/components/profilelink.vue","../../uhr.frontend/js/vue/comments/pagelike-modal.vue","../../uhr.frontend/js/vue/comments/comment.vue","../../uhr.frontend/js/vue/comments/pagelike-summary.vue","../../uhr.frontend/js/vue/comments/pagelike.vue","../../uhr.frontend/js/vue/comments.vue","../../uhr.frontend/js/vue/plugins/staffservice.js","../../uhr.frontend/js/vue/staffcatalog/staffsearch.vue","../../uhr.frontend/js/vue/staffcatalog/staffcard.vue","../../uhr.frontend/js/vue/staffcatalog/staffresult.vue","../../uhr.frontend/js/vue/staffcatalog/staffcatalog.vue","../../uhr.frontend/js/main.js","../../uhr.frontend/static/site.ts"],"sourcesContent":["/*! jQuery UI - v1.12.1 - 2016-09-14\r\n* http://jqueryui.com\r\n* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine([ \"jquery\" ], factory );\r\n\t} else {\r\n\r\n\t\t// Browser globals\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n\r\n$.ui = $.ui || {};\r\n\r\nvar version = $.ui.version = \"1.12.1\";\r\n\r\n\r\n/*!\r\n * jQuery UI Widget 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Widget\r\n//>>group: Core\r\n//>>description: Provides a factory for creating stateful widgets with a common API.\r\n//>>docs: http://api.jqueryui.com/jQuery.widget/\r\n//>>demos: http://jqueryui.com/widget/\r\n\r\n\r\n\r\nvar widgetUuid = 0;\r\nvar widgetSlice = Array.prototype.slice;\r\n\r\n$.cleanData = ( function( orig ) {\r\n\treturn function( elems ) {\r\n\t\tvar events, elem, i;\r\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\r\n\t\t\ttry {\r\n\r\n\t\t\t\t// Only trigger remove when necessary to save time\r\n\t\t\t\tevents = $._data( elem, \"events\" );\r\n\t\t\t\tif ( events && events.remove ) {\r\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\r\n\t\t\t\t}\r\n\r\n\t\t\t// Http://bugs.jquery.com/ticket/8235\r\n\t\t\t} catch ( e ) {}\r\n\t\t}\r\n\t\torig( elems );\r\n\t};\r\n} )( $.cleanData );\r\n\r\n$.widget = function( name, base, prototype ) {\r\n\tvar existingConstructor, constructor, basePrototype;\r\n\r\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\r\n\t// so that it can be used as a mixin for multiple widgets (#8876)\r\n\tvar proxiedPrototype = {};\r\n\r\n\tvar namespace = name.split( \".\" )[ 0 ];\r\n\tname = name.split( \".\" )[ 1 ];\r\n\tvar fullName = namespace + \"-\" + name;\r\n\r\n\tif ( !prototype ) {\r\n\t\tprototype = base;\r\n\t\tbase = $.Widget;\r\n\t}\r\n\r\n\tif ( $.isArray( prototype ) ) {\r\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\r\n\t}\r\n\r\n\t// Create selector for plugin\r\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\r\n\t\treturn !!$.data( elem, fullName );\r\n\t};\r\n\r\n\t$[ namespace ] = $[ namespace ] || {};\r\n\texistingConstructor = $[ namespace ][ name ];\r\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\r\n\r\n\t\t// Allow instantiation without \"new\" keyword\r\n\t\tif ( !this._createWidget ) {\r\n\t\t\treturn new constructor( options, element );\r\n\t\t}\r\n\r\n\t\t// Allow instantiation without initializing for simple inheritance\r\n\t\t// must use \"new\" keyword (the code above always passes args)\r\n\t\tif ( arguments.length ) {\r\n\t\t\tthis._createWidget( options, element );\r\n\t\t}\r\n\t};\r\n\r\n\t// Extend with the existing constructor to carry over any static properties\r\n\t$.extend( constructor, existingConstructor, {\r\n\t\tversion: prototype.version,\r\n\r\n\t\t// Copy the object used to create the prototype in case we need to\r\n\t\t// redefine the widget later\r\n\t\t_proto: $.extend( {}, prototype ),\r\n\r\n\t\t// Track widgets that inherit from this widget in case this widget is\r\n\t\t// redefined after a widget inherits from it\r\n\t\t_childConstructors: []\r\n\t} );\r\n\r\n\tbasePrototype = new base();\r\n\r\n\t// We need to make the options hash a property directly on the new instance\r\n\t// otherwise we'll modify the options hash on the prototype that we're\r\n\t// inheriting from\r\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\r\n\t$.each( prototype, function( prop, value ) {\r\n\t\tif ( !$.isFunction( value ) ) {\r\n\t\t\tproxiedPrototype[ prop ] = value;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tproxiedPrototype[ prop ] = ( function() {\r\n\t\t\tfunction _super() {\r\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\r\n\t\t\t}\r\n\r\n\t\t\tfunction _superApply( args ) {\r\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\r\n\t\t\t}\r\n\r\n\t\t\treturn function() {\r\n\t\t\t\tvar __super = this._super;\r\n\t\t\t\tvar __superApply = this._superApply;\r\n\t\t\t\tvar returnValue;\r\n\r\n\t\t\t\tthis._super = _super;\r\n\t\t\t\tthis._superApply = _superApply;\r\n\r\n\t\t\t\treturnValue = value.apply( this, arguments );\r\n\r\n\t\t\t\tthis._super = __super;\r\n\t\t\t\tthis._superApply = __superApply;\r\n\r\n\t\t\t\treturn returnValue;\r\n\t\t\t};\r\n\t\t} )();\r\n\t} );\r\n\tconstructor.prototype = $.widget.extend( basePrototype, {\r\n\r\n\t\t// TODO: remove support for widgetEventPrefix\r\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\r\n\t\t// don't prefix for widgets that aren't DOM-based\r\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\r\n\t}, proxiedPrototype, {\r\n\t\tconstructor: constructor,\r\n\t\tnamespace: namespace,\r\n\t\twidgetName: name,\r\n\t\twidgetFullName: fullName\r\n\t} );\r\n\r\n\t// If this widget is being redefined then we need to find all widgets that\r\n\t// are inheriting from it and redefine all of them so that they inherit from\r\n\t// the new version of this widget. We're essentially trying to replace one\r\n\t// level in the prototype chain.\r\n\tif ( existingConstructor ) {\r\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\r\n\t\t\tvar childPrototype = child.prototype;\r\n\r\n\t\t\t// Redefine the child widget using the same prototype that was\r\n\t\t\t// originally used, but inherit from the new version of the base\r\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\r\n\t\t\t\tchild._proto );\r\n\t\t} );\r\n\r\n\t\t// Remove the list of existing child constructors from the old constructor\r\n\t\t// so the old child constructors can be garbage collected\r\n\t\tdelete existingConstructor._childConstructors;\r\n\t} else {\r\n\t\tbase._childConstructors.push( constructor );\r\n\t}\r\n\r\n\t$.widget.bridge( name, constructor );\r\n\r\n\treturn constructor;\r\n};\r\n\r\n$.widget.extend = function( target ) {\r\n\tvar input = widgetSlice.call( arguments, 1 );\r\n\tvar inputIndex = 0;\r\n\tvar inputLength = input.length;\r\n\tvar key;\r\n\tvar value;\r\n\r\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\r\n\t\tfor ( key in input[ inputIndex ] ) {\r\n\t\t\tvalue = input[ inputIndex ][ key ];\r\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\r\n\r\n\t\t\t\t// Clone objects\r\n\t\t\t\tif ( $.isPlainObject( value ) ) {\r\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\r\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\r\n\r\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\r\n\t\t\t\t\t\t$.widget.extend( {}, value );\r\n\r\n\t\t\t\t// Copy everything else by reference\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttarget[ key ] = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n};\r\n\r\n$.widget.bridge = function( name, object ) {\r\n\tvar fullName = object.prototype.widgetFullName || name;\r\n\t$.fn[ name ] = function( options ) {\r\n\t\tvar isMethodCall = typeof options === \"string\";\r\n\t\tvar args = widgetSlice.call( arguments, 1 );\r\n\t\tvar returnValue = this;\r\n\r\n\t\tif ( isMethodCall ) {\r\n\r\n\t\t\t// If this is an empty collection, we need to have the instance method\r\n\t\t\t// return undefined instead of the jQuery instance\r\n\t\t\tif ( !this.length && options === \"instance\" ) {\r\n\t\t\t\treturnValue = undefined;\r\n\t\t\t} else {\r\n\t\t\t\tthis.each( function() {\r\n\t\t\t\t\tvar methodValue;\r\n\t\t\t\t\tvar instance = $.data( this, fullName );\r\n\r\n\t\t\t\t\tif ( options === \"instance\" ) {\r\n\t\t\t\t\t\treturnValue = instance;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( !instance ) {\r\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\r\n\t\t\t\t\t\t\t\" prior to initialization; \" +\r\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\r\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\r\n\t\t\t\t\t\t\t\" widget instance\" );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\r\n\r\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\r\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\r\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\r\n\t\t\t\t\t\t\tmethodValue;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t} else {\r\n\r\n\t\t\t// Allow multiple hashes to be passed on init\r\n\t\t\tif ( args.length ) {\r\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\r\n\t\t\t}\r\n\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tvar instance = $.data( this, fullName );\r\n\t\t\t\tif ( instance ) {\r\n\t\t\t\t\tinstance.option( options || {} );\r\n\t\t\t\t\tif ( instance._init ) {\r\n\t\t\t\t\t\tinstance._init();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\treturn returnValue;\r\n\t};\r\n};\r\n\r\n$.Widget = function( /* options, element */ ) {};\r\n$.Widget._childConstructors = [];\r\n\r\n$.Widget.prototype = {\r\n\twidgetName: \"widget\",\r\n\twidgetEventPrefix: \"\",\r\n\tdefaultElement: \"
\",\r\n\r\n\toptions: {\r\n\t\tclasses: {},\r\n\t\tdisabled: false,\r\n\r\n\t\t// Callbacks\r\n\t\tcreate: null\r\n\t},\r\n\r\n\t_createWidget: function( options, element ) {\r\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\r\n\t\tthis.element = $( element );\r\n\t\tthis.uuid = widgetUuid++;\r\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\r\n\r\n\t\tthis.bindings = $();\r\n\t\tthis.hoverable = $();\r\n\t\tthis.focusable = $();\r\n\t\tthis.classesElementLookup = {};\r\n\r\n\t\tif ( element !== this ) {\r\n\t\t\t$.data( element, this.widgetFullName, this );\r\n\t\t\tthis._on( true, this.element, {\r\n\t\t\t\tremove: function( event ) {\r\n\t\t\t\t\tif ( event.target === element ) {\r\n\t\t\t\t\t\tthis.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t\tthis.document = $( element.style ?\r\n\r\n\t\t\t\t// Element within the document\r\n\t\t\t\telement.ownerDocument :\r\n\r\n\t\t\t\t// Element is window or document\r\n\t\t\t\telement.document || element );\r\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\r\n\t\t}\r\n\r\n\t\tthis.options = $.widget.extend( {},\r\n\t\t\tthis.options,\r\n\t\t\tthis._getCreateOptions(),\r\n\t\t\toptions );\r\n\r\n\t\tthis._create();\r\n\r\n\t\tif ( this.options.disabled ) {\r\n\t\t\tthis._setOptionDisabled( this.options.disabled );\r\n\t\t}\r\n\r\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\r\n\t\tthis._init();\r\n\t},\r\n\r\n\t_getCreateOptions: function() {\r\n\t\treturn {};\r\n\t},\r\n\r\n\t_getCreateEventData: $.noop,\r\n\r\n\t_create: $.noop,\r\n\r\n\t_init: $.noop,\r\n\r\n\tdestroy: function() {\r\n\t\tvar that = this;\r\n\r\n\t\tthis._destroy();\r\n\t\t$.each( this.classesElementLookup, function( key, value ) {\r\n\t\t\tthat._removeClass( value, key );\r\n\t\t} );\r\n\r\n\t\t// We can probably remove the unbind calls in 2.0\r\n\t\t// all event bindings should go through this._on()\r\n\t\tthis.element\r\n\t\t\t.off( this.eventNamespace )\r\n\t\t\t.removeData( this.widgetFullName );\r\n\t\tthis.widget()\r\n\t\t\t.off( this.eventNamespace )\r\n\t\t\t.removeAttr( \"aria-disabled\" );\r\n\r\n\t\t// Clean up events and states\r\n\t\tthis.bindings.off( this.eventNamespace );\r\n\t},\r\n\r\n\t_destroy: $.noop,\r\n\r\n\twidget: function() {\r\n\t\treturn this.element;\r\n\t},\r\n\r\n\toption: function( key, value ) {\r\n\t\tvar options = key;\r\n\t\tvar parts;\r\n\t\tvar curOption;\r\n\t\tvar i;\r\n\r\n\t\tif ( arguments.length === 0 ) {\r\n\r\n\t\t\t// Don't return a reference to the internal hash\r\n\t\t\treturn $.widget.extend( {}, this.options );\r\n\t\t}\r\n\r\n\t\tif ( typeof key === \"string\" ) {\r\n\r\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\r\n\t\t\toptions = {};\r\n\t\t\tparts = key.split( \".\" );\r\n\t\t\tkey = parts.shift();\r\n\t\t\tif ( parts.length ) {\r\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\r\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\r\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\r\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\r\n\t\t\t\t}\r\n\t\t\t\tkey = parts.pop();\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\r\n\t\t\t\t}\r\n\t\t\t\tcurOption[ key ] = value;\r\n\t\t\t} else {\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\r\n\t\t\t\t}\r\n\t\t\t\toptions[ key ] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._setOptions( options );\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_setOptions: function( options ) {\r\n\t\tvar key;\r\n\r\n\t\tfor ( key in options ) {\r\n\t\t\tthis._setOption( key, options[ key ] );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tif ( key === \"classes\" ) {\r\n\t\t\tthis._setOptionClasses( value );\r\n\t\t}\r\n\r\n\t\tthis.options[ key ] = value;\r\n\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis._setOptionDisabled( value );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_setOptionClasses: function( value ) {\r\n\t\tvar classKey, elements, currentElements;\r\n\r\n\t\tfor ( classKey in value ) {\r\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\r\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\r\n\t\t\t\t\t!currentElements ||\r\n\t\t\t\t\t!currentElements.length ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\r\n\t\t\t// on the next line is going to destroy the reference to the current elements being\r\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\r\n\t\t\t// below.\r\n\t\t\telements = $( currentElements.get() );\r\n\t\t\tthis._removeClass( currentElements, classKey );\r\n\r\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\r\n\t\t\t// for generating the string of classes. We want to use the value passed in from\r\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\r\n\t\t\t// _setOption(). We pass this value directly to _classes().\r\n\t\t\telements.addClass( this._classes( {\r\n\t\t\t\telement: elements,\r\n\t\t\t\tkeys: classKey,\r\n\t\t\t\tclasses: value,\r\n\t\t\t\tadd: true\r\n\t\t\t} ) );\r\n\t\t}\r\n\t},\r\n\r\n\t_setOptionDisabled: function( value ) {\r\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\r\n\r\n\t\t// If the widget is becoming disabled, then nothing is interactive\r\n\t\tif ( value ) {\r\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\r\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\r\n\t\t}\r\n\t},\r\n\r\n\tenable: function() {\r\n\t\treturn this._setOptions( { disabled: false } );\r\n\t},\r\n\r\n\tdisable: function() {\r\n\t\treturn this._setOptions( { disabled: true } );\r\n\t},\r\n\r\n\t_classes: function( options ) {\r\n\t\tvar full = [];\r\n\t\tvar that = this;\r\n\r\n\t\toptions = $.extend( {\r\n\t\t\telement: this.element,\r\n\t\t\tclasses: this.options.classes || {}\r\n\t\t}, options );\r\n\r\n\t\tfunction processClassString( classes, checkOption ) {\r\n\t\t\tvar current, i;\r\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\r\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\r\n\t\t\t\tif ( options.add ) {\r\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\r\n\t\t\t\t}\r\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\r\n\t\t\t\tfull.push( classes[ i ] );\r\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\r\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._on( options.element, {\r\n\t\t\t\"remove\": \"_untrackClassesElement\"\r\n\t\t} );\r\n\r\n\t\tif ( options.keys ) {\r\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\r\n\t\t}\r\n\t\tif ( options.extra ) {\r\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\r\n\t\t}\r\n\r\n\t\treturn full.join( \" \" );\r\n\t},\r\n\r\n\t_untrackClassesElement: function( event ) {\r\n\t\tvar that = this;\r\n\t\t$.each( that.classesElementLookup, function( key, value ) {\r\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\r\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\t_removeClass: function( element, keys, extra ) {\r\n\t\treturn this._toggleClass( element, keys, extra, false );\r\n\t},\r\n\r\n\t_addClass: function( element, keys, extra ) {\r\n\t\treturn this._toggleClass( element, keys, extra, true );\r\n\t},\r\n\r\n\t_toggleClass: function( element, keys, extra, add ) {\r\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\r\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\r\n\t\t\toptions = {\r\n\t\t\t\textra: shift ? keys : extra,\r\n\t\t\t\tkeys: shift ? element : keys,\r\n\t\t\t\telement: shift ? this.element : element,\r\n\t\t\t\tadd: add\r\n\t\t\t};\r\n\t\toptions.element.toggleClass( this._classes( options ), add );\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_on: function( suppressDisabledCheck, element, handlers ) {\r\n\t\tvar delegateElement;\r\n\t\tvar instance = this;\r\n\r\n\t\t// No suppressDisabledCheck flag, shuffle arguments\r\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = suppressDisabledCheck;\r\n\t\t\tsuppressDisabledCheck = false;\r\n\t\t}\r\n\r\n\t\t// No element argument, shuffle and use this.element\r\n\t\tif ( !handlers ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = this.element;\r\n\t\t\tdelegateElement = this.widget();\r\n\t\t} else {\r\n\t\t\telement = delegateElement = $( element );\r\n\t\t\tthis.bindings = this.bindings.add( element );\r\n\t\t}\r\n\r\n\t\t$.each( handlers, function( event, handler ) {\r\n\t\t\tfunction handlerProxy() {\r\n\r\n\t\t\t\t// Allow widgets to customize the disabled handling\r\n\t\t\t\t// - disabled as an array instead of boolean\r\n\t\t\t\t// - disabled class as method for disabling individual parts\r\n\t\t\t\tif ( !suppressDisabledCheck &&\r\n\t\t\t\t\t\t( instance.options.disabled === true ||\r\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t\t.apply( instance, arguments );\r\n\t\t\t}\r\n\r\n\t\t\t// Copy the guid so direct unbinding works\r\n\t\t\tif ( typeof handler !== \"string\" ) {\r\n\t\t\t\thandlerProxy.guid = handler.guid =\r\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\r\n\t\t\t}\r\n\r\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\r\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\r\n\t\t\tvar selector = match[ 2 ];\r\n\r\n\t\t\tif ( selector ) {\r\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\r\n\t\t\t} else {\r\n\t\t\t\telement.on( eventName, handlerProxy );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\t_off: function( element, eventName ) {\r\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\r\n\t\t\tthis.eventNamespace;\r\n\t\telement.off( eventName ).off( eventName );\r\n\r\n\t\t// Clear the stack to avoid memory leaks (#10056)\r\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\r\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\r\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\r\n\t},\r\n\r\n\t_delay: function( handler, delay ) {\r\n\t\tfunction handlerProxy() {\r\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t.apply( instance, arguments );\r\n\t\t}\r\n\t\tvar instance = this;\r\n\t\treturn setTimeout( handlerProxy, delay || 0 );\r\n\t},\r\n\r\n\t_hoverable: function( element ) {\r\n\t\tthis.hoverable = this.hoverable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tmouseenter: function( event ) {\r\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\r\n\t\t\t},\r\n\t\t\tmouseleave: function( event ) {\r\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\t_focusable: function( element ) {\r\n\t\tthis.focusable = this.focusable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tfocusin: function( event ) {\r\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\r\n\t\t\t},\r\n\t\t\tfocusout: function( event ) {\r\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\t_trigger: function( type, event, data ) {\r\n\t\tvar prop, orig;\r\n\t\tvar callback = this.options[ type ];\r\n\r\n\t\tdata = data || {};\r\n\t\tevent = $.Event( event );\r\n\t\tevent.type = ( type === this.widgetEventPrefix ?\r\n\t\t\ttype :\r\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\r\n\r\n\t\t// The original event may come from any element\r\n\t\t// so we need to reset the target on the new event\r\n\t\tevent.target = this.element[ 0 ];\r\n\r\n\t\t// Copy original event properties over to the new event\r\n\t\torig = event.originalEvent;\r\n\t\tif ( orig ) {\r\n\t\t\tfor ( prop in orig ) {\r\n\t\t\t\tif ( !( prop in event ) ) {\r\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element.trigger( event, data );\r\n\t\treturn !( $.isFunction( callback ) &&\r\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\r\n\t\t\tevent.isDefaultPrevented() );\r\n\t}\r\n};\r\n\r\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\r\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\r\n\t\tif ( typeof options === \"string\" ) {\r\n\t\t\toptions = { effect: options };\r\n\t\t}\r\n\r\n\t\tvar hasOptions;\r\n\t\tvar effectName = !options ?\r\n\t\t\tmethod :\r\n\t\t\toptions === true || typeof options === \"number\" ?\r\n\t\t\t\tdefaultEffect :\r\n\t\t\t\toptions.effect || defaultEffect;\r\n\r\n\t\toptions = options || {};\r\n\t\tif ( typeof options === \"number\" ) {\r\n\t\t\toptions = { duration: options };\r\n\t\t}\r\n\r\n\t\thasOptions = !$.isEmptyObject( options );\r\n\t\toptions.complete = callback;\r\n\r\n\t\tif ( options.delay ) {\r\n\t\t\telement.delay( options.delay );\r\n\t\t}\r\n\r\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\r\n\t\t\telement[ method ]( options );\r\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\r\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\r\n\t\t} else {\r\n\t\t\telement.queue( function( next ) {\r\n\t\t\t\t$( this )[ method ]();\r\n\t\t\t\tif ( callback ) {\r\n\t\t\t\t\tcallback.call( element[ 0 ] );\r\n\t\t\t\t}\r\n\t\t\t\tnext();\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n} );\r\n\r\nvar widget = $.widget;\r\n\r\n\r\n/*!\r\n * jQuery UI Position 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/position/\r\n */\r\n\r\n//>>label: Position\r\n//>>group: Core\r\n//>>description: Positions elements relative to other elements.\r\n//>>docs: http://api.jqueryui.com/position/\r\n//>>demos: http://jqueryui.com/position/\r\n\r\n\r\n( function() {\r\nvar cachedScrollbarWidth,\r\n\tmax = Math.max,\r\n\tabs = Math.abs,\r\n\trhorizontal = /left|center|right/,\r\n\trvertical = /top|center|bottom/,\r\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\r\n\trposition = /^\\w+/,\r\n\trpercent = /%$/,\r\n\t_position = $.fn.position;\r\n\r\nfunction getOffsets( offsets, width, height ) {\r\n\treturn [\r\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\r\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\r\n\t];\r\n}\r\n\r\nfunction parseCss( element, property ) {\r\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\r\n}\r\n\r\nfunction getDimensions( elem ) {\r\n\tvar raw = elem[ 0 ];\r\n\tif ( raw.nodeType === 9 ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: 0, left: 0 }\r\n\t\t};\r\n\t}\r\n\tif ( $.isWindow( raw ) ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\r\n\t\t};\r\n\t}\r\n\tif ( raw.preventDefault ) {\r\n\t\treturn {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0,\r\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\r\n\t\t};\r\n\t}\r\n\treturn {\r\n\t\twidth: elem.outerWidth(),\r\n\t\theight: elem.outerHeight(),\r\n\t\toffset: elem.offset()\r\n\t};\r\n}\r\n\r\n$.position = {\r\n\tscrollbarWidth: function() {\r\n\t\tif ( cachedScrollbarWidth !== undefined ) {\r\n\t\t\treturn cachedScrollbarWidth;\r\n\t\t}\r\n\t\tvar w1, w2,\r\n\t\t\tdiv = $( \"
\" +\r\n\t\t\t\t\"
\" ),\r\n\t\t\tinnerDiv = div.children()[ 0 ];\r\n\r\n\t\t$( \"body\" ).append( div );\r\n\t\tw1 = innerDiv.offsetWidth;\r\n\t\tdiv.css( \"overflow\", \"scroll\" );\r\n\r\n\t\tw2 = innerDiv.offsetWidth;\r\n\r\n\t\tif ( w1 === w2 ) {\r\n\t\t\tw2 = div[ 0 ].clientWidth;\r\n\t\t}\r\n\r\n\t\tdiv.remove();\r\n\r\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\r\n\t},\r\n\tgetScrollInfo: function( within ) {\r\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-x\" ),\r\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-y\" ),\r\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\r\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\r\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\r\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\r\n\t\treturn {\r\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\r\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\r\n\t\t};\r\n\t},\r\n\tgetWithinInfo: function( element ) {\r\n\t\tvar withinElement = $( element || window ),\r\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\r\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\r\n\t\t\thasOffset = !isWindow && !isDocument;\r\n\t\treturn {\r\n\t\t\telement: withinElement,\r\n\t\t\tisWindow: isWindow,\r\n\t\t\tisDocument: isDocument,\r\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\r\n\t\t\tscrollLeft: withinElement.scrollLeft(),\r\n\t\t\tscrollTop: withinElement.scrollTop(),\r\n\t\t\twidth: withinElement.outerWidth(),\r\n\t\t\theight: withinElement.outerHeight()\r\n\t\t};\r\n\t}\r\n};\r\n\r\n$.fn.position = function( options ) {\r\n\tif ( !options || !options.of ) {\r\n\t\treturn _position.apply( this, arguments );\r\n\t}\r\n\r\n\t// Make a copy, we don't want to modify arguments\r\n\toptions = $.extend( {}, options );\r\n\r\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\r\n\t\ttarget = $( options.of ),\r\n\t\twithin = $.position.getWithinInfo( options.within ),\r\n\t\tscrollInfo = $.position.getScrollInfo( within ),\r\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\r\n\t\toffsets = {};\r\n\r\n\tdimensions = getDimensions( target );\r\n\tif ( target[ 0 ].preventDefault ) {\r\n\r\n\t\t// Force left top to allow flipping\r\n\t\toptions.at = \"left top\";\r\n\t}\r\n\ttargetWidth = dimensions.width;\r\n\ttargetHeight = dimensions.height;\r\n\ttargetOffset = dimensions.offset;\r\n\r\n\t// Clone to reuse original targetOffset later\r\n\tbasePosition = $.extend( {}, targetOffset );\r\n\r\n\t// Force my and at to have valid horizontal and vertical positions\r\n\t// if a value is missing or invalid, it will be converted to center\r\n\t$.each( [ \"my\", \"at\" ], function() {\r\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\r\n\t\t\thorizontalOffset,\r\n\t\t\tverticalOffset;\r\n\r\n\t\tif ( pos.length === 1 ) {\r\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\r\n\t\t\t\tpos.concat( [ \"center\" ] ) :\r\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\r\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\r\n\t\t\t\t\t[ \"center\", \"center\" ];\r\n\t\t}\r\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\r\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\r\n\r\n\t\t// Calculate offsets\r\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\r\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\r\n\t\toffsets[ this ] = [\r\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\r\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\r\n\t\t];\r\n\r\n\t\t// Reduce to just the positions without the offsets\r\n\t\toptions[ this ] = [\r\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\r\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\r\n\t\t];\r\n\t} );\r\n\r\n\t// Normalize collision option\r\n\tif ( collision.length === 1 ) {\r\n\t\tcollision[ 1 ] = collision[ 0 ];\r\n\t}\r\n\r\n\tif ( options.at[ 0 ] === \"right\" ) {\r\n\t\tbasePosition.left += targetWidth;\r\n\t} else if ( options.at[ 0 ] === \"center\" ) {\r\n\t\tbasePosition.left += targetWidth / 2;\r\n\t}\r\n\r\n\tif ( options.at[ 1 ] === \"bottom\" ) {\r\n\t\tbasePosition.top += targetHeight;\r\n\t} else if ( options.at[ 1 ] === \"center\" ) {\r\n\t\tbasePosition.top += targetHeight / 2;\r\n\t}\r\n\r\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\r\n\tbasePosition.left += atOffset[ 0 ];\r\n\tbasePosition.top += atOffset[ 1 ];\r\n\r\n\treturn this.each( function() {\r\n\t\tvar collisionPosition, using,\r\n\t\t\telem = $( this ),\r\n\t\t\telemWidth = elem.outerWidth(),\r\n\t\t\telemHeight = elem.outerHeight(),\r\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\r\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\r\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\r\n\t\t\t\tscrollInfo.width,\r\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\r\n\t\t\t\tscrollInfo.height,\r\n\t\t\tposition = $.extend( {}, basePosition ),\r\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\r\n\r\n\t\tif ( options.my[ 0 ] === \"right\" ) {\r\n\t\t\tposition.left -= elemWidth;\r\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\r\n\t\t\tposition.left -= elemWidth / 2;\r\n\t\t}\r\n\r\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\r\n\t\t\tposition.top -= elemHeight;\r\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\r\n\t\t\tposition.top -= elemHeight / 2;\r\n\t\t}\r\n\r\n\t\tposition.left += myOffset[ 0 ];\r\n\t\tposition.top += myOffset[ 1 ];\r\n\r\n\t\tcollisionPosition = {\r\n\t\t\tmarginLeft: marginLeft,\r\n\t\t\tmarginTop: marginTop\r\n\t\t};\r\n\r\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\r\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\r\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\r\n\t\t\t\t\ttargetWidth: targetWidth,\r\n\t\t\t\t\ttargetHeight: targetHeight,\r\n\t\t\t\t\telemWidth: elemWidth,\r\n\t\t\t\t\telemHeight: elemHeight,\r\n\t\t\t\t\tcollisionPosition: collisionPosition,\r\n\t\t\t\t\tcollisionWidth: collisionWidth,\r\n\t\t\t\t\tcollisionHeight: collisionHeight,\r\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\r\n\t\t\t\t\tmy: options.my,\r\n\t\t\t\t\tat: options.at,\r\n\t\t\t\t\twithin: within,\r\n\t\t\t\t\telem: elem\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tif ( options.using ) {\r\n\r\n\t\t\t// Adds feedback as second argument to using callback, if present\r\n\t\t\tusing = function( props ) {\r\n\t\t\t\tvar left = targetOffset.left - position.left,\r\n\t\t\t\t\tright = left + targetWidth - elemWidth,\r\n\t\t\t\t\ttop = targetOffset.top - position.top,\r\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\r\n\t\t\t\t\tfeedback = {\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\telement: target,\r\n\t\t\t\t\t\t\tleft: targetOffset.left,\r\n\t\t\t\t\t\t\ttop: targetOffset.top,\r\n\t\t\t\t\t\t\twidth: targetWidth,\r\n\t\t\t\t\t\t\theight: targetHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\telement: {\r\n\t\t\t\t\t\t\telement: elem,\r\n\t\t\t\t\t\t\tleft: position.left,\r\n\t\t\t\t\t\t\ttop: position.top,\r\n\t\t\t\t\t\t\twidth: elemWidth,\r\n\t\t\t\t\t\t\theight: elemHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\r\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\r\n\t\t\t\t\t};\r\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\r\n\t\t\t\t\tfeedback.horizontal = \"center\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\r\n\t\t\t\t\tfeedback.vertical = \"middle\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\r\n\t\t\t\t\tfeedback.important = \"horizontal\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfeedback.important = \"vertical\";\r\n\t\t\t\t}\r\n\t\t\t\toptions.using.call( this, props, feedback );\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\telem.offset( $.extend( position, { using: using } ) );\r\n\t} );\r\n};\r\n\r\n$.ui.position = {\r\n\tfit: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\r\n\t\t\t\tnewOverRight;\r\n\r\n\t\t\t// Element is wider than within\r\n\t\t\tif ( data.collisionWidth > outerWidth ) {\r\n\r\n\t\t\t\t// Element is initially over the left side of within\r\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\r\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\r\n\t\t\t\t\t\twithinOffset;\r\n\t\t\t\t\tposition.left += overLeft - newOverRight;\r\n\r\n\t\t\t\t// Element is initially over right side of within\r\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\r\n\t\t\t\t\tposition.left = withinOffset;\r\n\r\n\t\t\t\t// Element is initially over both left and right sides of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overLeft > overRight ) {\r\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.left = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t// Too far left -> align with left edge\r\n\t\t\t} else if ( overLeft > 0 ) {\r\n\t\t\t\tposition.left += overLeft;\r\n\r\n\t\t\t// Too far right -> align with right edge\r\n\t\t\t} else if ( overRight > 0 ) {\r\n\t\t\t\tposition.left -= overRight;\r\n\r\n\t\t\t// Adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\touterHeight = data.within.height,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = withinOffset - collisionPosTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\r\n\t\t\t\tnewOverBottom;\r\n\r\n\t\t\t// Element is taller than within\r\n\t\t\tif ( data.collisionHeight > outerHeight ) {\r\n\r\n\t\t\t\t// Element is initially over the top of within\r\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\r\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\r\n\t\t\t\t\t\twithinOffset;\r\n\t\t\t\t\tposition.top += overTop - newOverBottom;\r\n\r\n\t\t\t\t// Element is initially over bottom of within\r\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\r\n\t\t\t\t\tposition.top = withinOffset;\r\n\r\n\t\t\t\t// Element is initially over both top and bottom of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overTop > overBottom ) {\r\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.top = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t// Too far up -> align with top\r\n\t\t\t} else if ( overTop > 0 ) {\r\n\t\t\t\tposition.top += overTop;\r\n\r\n\t\t\t// Too far down -> align with bottom edge\r\n\t\t\t} else if ( overBottom > 0 ) {\r\n\t\t\t\tposition.top -= overBottom;\r\n\r\n\t\t\t// Adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflip: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\r\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\r\n\t\t\t\t\t-data.elemWidth :\r\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\tdata.elemWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\r\n\t\t\t\t\tdata.targetWidth :\r\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\t-data.targetWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 0 ],\r\n\t\t\t\tnewOverRight,\r\n\t\t\t\tnewOverLeft;\r\n\r\n\t\t\tif ( overLeft < 0 ) {\r\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\r\n\t\t\t\t\touterWidth - withinOffset;\r\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t} else if ( overRight > 0 ) {\r\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\r\n\t\t\t\t\tatOffset + offset - offsetLeft;\r\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\r\n\t\t\t\touterHeight = within.height,\r\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = collisionPosTop - offsetTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\r\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\r\n\t\t\t\tmyOffset = top ?\r\n\t\t\t\t\t-data.elemHeight :\r\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\tdata.elemHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\r\n\t\t\t\t\tdata.targetHeight :\r\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\t-data.targetHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 1 ],\r\n\t\t\t\tnewOverTop,\r\n\t\t\t\tnewOverBottom;\r\n\t\t\tif ( overTop < 0 ) {\r\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\r\n\t\t\t\t\touterHeight - withinOffset;\r\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t} else if ( overBottom > 0 ) {\r\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\r\n\t\t\t\t\toffset - offsetTop;\r\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflipfit: {\r\n\t\tleft: function() {\r\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\r\n\t\t},\r\n\t\ttop: function() {\r\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\r\n\t\t}\r\n\t}\r\n};\r\n\r\n} )();\r\n\r\nvar position = $.ui.position;\r\n\r\n\r\n/*!\r\n * jQuery UI :data 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: :data Selector\r\n//>>group: Core\r\n//>>description: Selects elements which have data stored under the specified key.\r\n//>>docs: http://api.jqueryui.com/data-selector/\r\n\r\n\r\nvar data = $.extend( $.expr[ \":\" ], {\r\n\tdata: $.expr.createPseudo ?\r\n\t\t$.expr.createPseudo( function( dataName ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn !!$.data( elem, dataName );\r\n\t\t\t};\r\n\t\t} ) :\r\n\r\n\t\t// Support: jQuery <1.8\r\n\t\tfunction( elem, i, match ) {\r\n\t\t\treturn !!$.data( elem, match[ 3 ] );\r\n\t\t}\r\n} );\r\n\r\n/*!\r\n * jQuery UI Disable Selection 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: disableSelection\r\n//>>group: Core\r\n//>>description: Disable selection of text content within the set of matched elements.\r\n//>>docs: http://api.jqueryui.com/disableSelection/\r\n\r\n// This file is deprecated\r\n\r\n\r\nvar disableSelection = $.fn.extend( {\r\n\tdisableSelection: ( function() {\r\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\r\n\t\t\t\"selectstart\" :\r\n\t\t\t\"mousedown\";\r\n\r\n\t\treturn function() {\r\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t} );\r\n\t\t};\r\n\t} )(),\r\n\r\n\tenableSelection: function() {\r\n\t\treturn this.off( \".ui-disableSelection\" );\r\n\t}\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Effects Core\r\n//>>group: Effects\r\n// jscs:disable maximumLineLength\r\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\r\n// jscs:enable maximumLineLength\r\n//>>docs: http://api.jqueryui.com/category/effects-core/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar dataSpace = \"ui-effects-\",\r\n\tdataSpaceStyle = \"ui-effects-style\",\r\n\tdataSpaceAnimated = \"ui-effects-animated\",\r\n\r\n\t// Create a local jQuery because jQuery Color relies on it and the\r\n\t// global may not exist with AMD and a custom build (#10199)\r\n\tjQuery = $;\r\n\r\n$.effects = {\r\n\teffect: {}\r\n};\r\n\r\n/*!\r\n * jQuery Color Animations v2.1.2\r\n * https://github.com/jquery/jquery-color\r\n *\r\n * Copyright 2014 jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * Date: Wed Jan 16 08:47:09 2013 -0600\r\n */\r\n( function( jQuery, undefined ) {\r\n\r\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\r\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\r\n\r\n\t// Plusequals test for += 100 -= 100\r\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\r\n\r\n\t// A set of RE's that can match strings and generate color tuples.\r\n\tstringParsers = [ {\r\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\r\n\t\t\tparse: function( execResult ) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\texecResult[ 1 ],\r\n\t\t\t\t\texecResult[ 2 ],\r\n\t\t\t\t\texecResult[ 3 ],\r\n\t\t\t\t\texecResult[ 4 ]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\r\n\t\t\tparse: function( execResult ) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\texecResult[ 1 ] * 2.55,\r\n\t\t\t\t\texecResult[ 2 ] * 2.55,\r\n\t\t\t\t\texecResult[ 3 ] * 2.55,\r\n\t\t\t\t\texecResult[ 4 ]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t}, {\r\n\r\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\r\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\r\n\t\t\tparse: function( execResult ) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\r\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\r\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t}, {\r\n\r\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\r\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\r\n\t\t\tparse: function( execResult ) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\r\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\r\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\r\n\t\t\tspace: \"hsla\",\r\n\t\t\tparse: function( execResult ) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\texecResult[ 1 ],\r\n\t\t\t\t\texecResult[ 2 ] / 100,\r\n\t\t\t\t\texecResult[ 3 ] / 100,\r\n\t\t\t\t\texecResult[ 4 ]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t} ],\r\n\r\n\t// JQuery.Color( )\r\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\r\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\r\n\t},\r\n\tspaces = {\r\n\t\trgba: {\r\n\t\t\tprops: {\r\n\t\t\t\tred: {\r\n\t\t\t\t\tidx: 0,\r\n\t\t\t\t\ttype: \"byte\"\r\n\t\t\t\t},\r\n\t\t\t\tgreen: {\r\n\t\t\t\t\tidx: 1,\r\n\t\t\t\t\ttype: \"byte\"\r\n\t\t\t\t},\r\n\t\t\t\tblue: {\r\n\t\t\t\t\tidx: 2,\r\n\t\t\t\t\ttype: \"byte\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\thsla: {\r\n\t\t\tprops: {\r\n\t\t\t\thue: {\r\n\t\t\t\t\tidx: 0,\r\n\t\t\t\t\ttype: \"degrees\"\r\n\t\t\t\t},\r\n\t\t\t\tsaturation: {\r\n\t\t\t\t\tidx: 1,\r\n\t\t\t\t\ttype: \"percent\"\r\n\t\t\t\t},\r\n\t\t\t\tlightness: {\r\n\t\t\t\t\tidx: 2,\r\n\t\t\t\t\ttype: \"percent\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tpropTypes = {\r\n\t\t\"byte\": {\r\n\t\t\tfloor: true,\r\n\t\t\tmax: 255\r\n\t\t},\r\n\t\t\"percent\": {\r\n\t\t\tmax: 1\r\n\t\t},\r\n\t\t\"degrees\": {\r\n\t\t\tmod: 360,\r\n\t\t\tfloor: true\r\n\t\t}\r\n\t},\r\n\tsupport = color.support = {},\r\n\r\n\t// Element for support tests\r\n\tsupportElem = jQuery( \"

\" )[ 0 ],\r\n\r\n\t// Colors = jQuery.Color.names\r\n\tcolors,\r\n\r\n\t// Local aliases of functions called often\r\n\teach = jQuery.each;\r\n\r\n// Determine rgba support immediately\r\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\r\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\r\n\r\n// Define cache name and alpha properties\r\n// for rgba and hsla spaces\r\neach( spaces, function( spaceName, space ) {\r\n\tspace.cache = \"_\" + spaceName;\r\n\tspace.props.alpha = {\r\n\t\tidx: 3,\r\n\t\ttype: \"percent\",\r\n\t\tdef: 1\r\n\t};\r\n} );\r\n\r\nfunction clamp( value, prop, allowEmpty ) {\r\n\tvar type = propTypes[ prop.type ] || {};\r\n\r\n\tif ( value == null ) {\r\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\r\n\t}\r\n\r\n\t// ~~ is an short way of doing floor for positive numbers\r\n\tvalue = type.floor ? ~~value : parseFloat( value );\r\n\r\n\t// IE will pass in empty strings as value for alpha,\r\n\t// which will hit this case\r\n\tif ( isNaN( value ) ) {\r\n\t\treturn prop.def;\r\n\t}\r\n\r\n\tif ( type.mod ) {\r\n\r\n\t\t// We add mod before modding to make sure that negatives values\r\n\t\t// get converted properly: -10 -> 350\r\n\t\treturn ( value + type.mod ) % type.mod;\r\n\t}\r\n\r\n\t// For now all property types without mod have min and max\r\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\r\n}\r\n\r\nfunction stringParse( string ) {\r\n\tvar inst = color(),\r\n\t\trgba = inst._rgba = [];\r\n\r\n\tstring = string.toLowerCase();\r\n\r\n\teach( stringParsers, function( i, parser ) {\r\n\t\tvar parsed,\r\n\t\t\tmatch = parser.re.exec( string ),\r\n\t\t\tvalues = match && parser.parse( match ),\r\n\t\t\tspaceName = parser.space || \"rgba\";\r\n\r\n\t\tif ( values ) {\r\n\t\t\tparsed = inst[ spaceName ]( values );\r\n\r\n\t\t\t// If this was an rgba parse the assignment might happen twice\r\n\t\t\t// oh well....\r\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\r\n\t\t\trgba = inst._rgba = parsed._rgba;\r\n\r\n\t\t\t// Exit each( stringParsers ) here because we matched\r\n\t\t\treturn false;\r\n\t\t}\r\n\t} );\r\n\r\n\t// Found a stringParser that handled it\r\n\tif ( rgba.length ) {\r\n\r\n\t\t// If this came from a parsed string, force \"transparent\" when alpha is 0\r\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\r\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\r\n\t\t\tjQuery.extend( rgba, colors.transparent );\r\n\t\t}\r\n\t\treturn inst;\r\n\t}\r\n\r\n\t// Named colors\r\n\treturn colors[ string ];\r\n}\r\n\r\ncolor.fn = jQuery.extend( color.prototype, {\r\n\tparse: function( red, green, blue, alpha ) {\r\n\t\tif ( red === undefined ) {\r\n\t\t\tthis._rgba = [ null, null, null, null ];\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( red.jquery || red.nodeType ) {\r\n\t\t\tred = jQuery( red ).css( green );\r\n\t\t\tgreen = undefined;\r\n\t\t}\r\n\r\n\t\tvar inst = this,\r\n\t\t\ttype = jQuery.type( red ),\r\n\t\t\trgba = this._rgba = [];\r\n\r\n\t\t// More than 1 argument specified - assume ( red, green, blue, alpha )\r\n\t\tif ( green !== undefined ) {\r\n\t\t\tred = [ red, green, blue, alpha ];\r\n\t\t\ttype = \"array\";\r\n\t\t}\r\n\r\n\t\tif ( type === \"string\" ) {\r\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\r\n\t\t}\r\n\r\n\t\tif ( type === \"array\" ) {\r\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\r\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\r\n\t\t\t} );\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif ( type === \"object\" ) {\r\n\t\t\tif ( red instanceof color ) {\r\n\t\t\t\teach( spaces, function( spaceName, space ) {\r\n\t\t\t\t\tif ( red[ space.cache ] ) {\r\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t} else {\r\n\t\t\t\teach( spaces, function( spaceName, space ) {\r\n\t\t\t\t\tvar cache = space.cache;\r\n\t\t\t\t\teach( space.props, function( key, prop ) {\r\n\r\n\t\t\t\t\t\t// If the cache doesn't exist, and we know how to convert\r\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\r\n\r\n\t\t\t\t\t\t\t// If the value was null, we don't need to copy it\r\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\r\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// This is the only case where we allow nulls for ALL properties.\r\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\r\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t\t// Everything defined but alpha?\r\n\t\t\t\t\tif ( inst[ cache ] &&\r\n\t\t\t\t\t\t\tjQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\r\n\r\n\t\t\t\t\t\t// Use the default of 1\r\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\r\n\t\t\t\t\t\tif ( space.from ) {\r\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t},\r\n\tis: function( compare ) {\r\n\t\tvar is = color( compare ),\r\n\t\t\tsame = true,\r\n\t\t\tinst = this;\r\n\r\n\t\teach( spaces, function( _, space ) {\r\n\t\t\tvar localCache,\r\n\t\t\t\tisCache = is[ space.cache ];\r\n\t\t\tif ( isCache ) {\r\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\r\n\t\t\t\teach( space.props, function( _, prop ) {\r\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\r\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\r\n\t\t\t\t\t\treturn same;\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\treturn same;\r\n\t\t} );\r\n\t\treturn same;\r\n\t},\r\n\t_space: function() {\r\n\t\tvar used = [],\r\n\t\t\tinst = this;\r\n\t\teach( spaces, function( spaceName, space ) {\r\n\t\t\tif ( inst[ space.cache ] ) {\r\n\t\t\t\tused.push( spaceName );\r\n\t\t\t}\r\n\t\t} );\r\n\t\treturn used.pop();\r\n\t},\r\n\ttransition: function( other, distance ) {\r\n\t\tvar end = color( other ),\r\n\t\t\tspaceName = end._space(),\r\n\t\t\tspace = spaces[ spaceName ],\r\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\r\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\r\n\t\t\tresult = start.slice();\r\n\r\n\t\tend = end[ space.cache ];\r\n\t\teach( space.props, function( key, prop ) {\r\n\t\t\tvar index = prop.idx,\r\n\t\t\t\tstartValue = start[ index ],\r\n\t\t\t\tendValue = end[ index ],\r\n\t\t\t\ttype = propTypes[ prop.type ] || {};\r\n\r\n\t\t\t// If null, don't override start value\r\n\t\t\tif ( endValue === null ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// If null - use end\r\n\t\t\tif ( startValue === null ) {\r\n\t\t\t\tresult[ index ] = endValue;\r\n\t\t\t} else {\r\n\t\t\t\tif ( type.mod ) {\r\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\r\n\t\t\t\t\t\tstartValue += type.mod;\r\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\r\n\t\t\t\t\t\tstartValue -= type.mod;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\r\n\t\t\t}\r\n\t\t} );\r\n\t\treturn this[ spaceName ]( result );\r\n\t},\r\n\tblend: function( opaque ) {\r\n\r\n\t\t// If we are already opaque - return ourself\r\n\t\tif ( this._rgba[ 3 ] === 1 ) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar rgb = this._rgba.slice(),\r\n\t\t\ta = rgb.pop(),\r\n\t\t\tblend = color( opaque )._rgba;\r\n\r\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\r\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\r\n\t\t} ) );\r\n\t},\r\n\ttoRgbaString: function() {\r\n\t\tvar prefix = \"rgba(\",\r\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\r\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\r\n\t\t\t} );\r\n\r\n\t\tif ( rgba[ 3 ] === 1 ) {\r\n\t\t\trgba.pop();\r\n\t\t\tprefix = \"rgb(\";\r\n\t\t}\r\n\r\n\t\treturn prefix + rgba.join() + \")\";\r\n\t},\r\n\ttoHslaString: function() {\r\n\t\tvar prefix = \"hsla(\",\r\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\r\n\t\t\t\tif ( v == null ) {\r\n\t\t\t\t\tv = i > 2 ? 1 : 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Catch 1 and 2\r\n\t\t\t\tif ( i && i < 3 ) {\r\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\r\n\t\t\t\t}\r\n\t\t\t\treturn v;\r\n\t\t\t} );\r\n\r\n\t\tif ( hsla[ 3 ] === 1 ) {\r\n\t\t\thsla.pop();\r\n\t\t\tprefix = \"hsl(\";\r\n\t\t}\r\n\t\treturn prefix + hsla.join() + \")\";\r\n\t},\r\n\ttoHexString: function( includeAlpha ) {\r\n\t\tvar rgba = this._rgba.slice(),\r\n\t\t\talpha = rgba.pop();\r\n\r\n\t\tif ( includeAlpha ) {\r\n\t\t\trgba.push( ~~( alpha * 255 ) );\r\n\t\t}\r\n\r\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\r\n\r\n\t\t\t// Default to 0 when nulls exist\r\n\t\t\tv = ( v || 0 ).toString( 16 );\r\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\r\n\t\t} ).join( \"\" );\r\n\t},\r\n\ttoString: function() {\r\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\r\n\t}\r\n} );\r\ncolor.fn.parse.prototype = color.fn;\r\n\r\n// Hsla conversions adapted from:\r\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\r\n\r\nfunction hue2rgb( p, q, h ) {\r\n\th = ( h + 1 ) % 1;\r\n\tif ( h * 6 < 1 ) {\r\n\t\treturn p + ( q - p ) * h * 6;\r\n\t}\r\n\tif ( h * 2 < 1 ) {\r\n\t\treturn q;\r\n\t}\r\n\tif ( h * 3 < 2 ) {\r\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\r\n\t}\r\n\treturn p;\r\n}\r\n\r\nspaces.hsla.to = function( rgba ) {\r\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\r\n\t\treturn [ null, null, null, rgba[ 3 ] ];\r\n\t}\r\n\tvar r = rgba[ 0 ] / 255,\r\n\t\tg = rgba[ 1 ] / 255,\r\n\t\tb = rgba[ 2 ] / 255,\r\n\t\ta = rgba[ 3 ],\r\n\t\tmax = Math.max( r, g, b ),\r\n\t\tmin = Math.min( r, g, b ),\r\n\t\tdiff = max - min,\r\n\t\tadd = max + min,\r\n\t\tl = add * 0.5,\r\n\t\th, s;\r\n\r\n\tif ( min === max ) {\r\n\t\th = 0;\r\n\t} else if ( r === max ) {\r\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\r\n\t} else if ( g === max ) {\r\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\r\n\t} else {\r\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\r\n\t}\r\n\r\n\t// Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\r\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\r\n\tif ( diff === 0 ) {\r\n\t\ts = 0;\r\n\t} else if ( l <= 0.5 ) {\r\n\t\ts = diff / add;\r\n\t} else {\r\n\t\ts = diff / ( 2 - add );\r\n\t}\r\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\r\n};\r\n\r\nspaces.hsla.from = function( hsla ) {\r\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\r\n\t\treturn [ null, null, null, hsla[ 3 ] ];\r\n\t}\r\n\tvar h = hsla[ 0 ] / 360,\r\n\t\ts = hsla[ 1 ],\r\n\t\tl = hsla[ 2 ],\r\n\t\ta = hsla[ 3 ],\r\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\r\n\t\tp = 2 * l - q;\r\n\r\n\treturn [\r\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\r\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\r\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\r\n\t\ta\r\n\t];\r\n};\r\n\r\neach( spaces, function( spaceName, space ) {\r\n\tvar props = space.props,\r\n\t\tcache = space.cache,\r\n\t\tto = space.to,\r\n\t\tfrom = space.from;\r\n\r\n\t// Makes rgba() and hsla()\r\n\tcolor.fn[ spaceName ] = function( value ) {\r\n\r\n\t\t// Generate a cache for this space if it doesn't exist\r\n\t\tif ( to && !this[ cache ] ) {\r\n\t\t\tthis[ cache ] = to( this._rgba );\r\n\t\t}\r\n\t\tif ( value === undefined ) {\r\n\t\t\treturn this[ cache ].slice();\r\n\t\t}\r\n\r\n\t\tvar ret,\r\n\t\t\ttype = jQuery.type( value ),\r\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\r\n\t\t\tlocal = this[ cache ].slice();\r\n\r\n\t\teach( props, function( key, prop ) {\r\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\r\n\t\t\tif ( val == null ) {\r\n\t\t\t\tval = local[ prop.idx ];\r\n\t\t\t}\r\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\r\n\t\t} );\r\n\r\n\t\tif ( from ) {\r\n\t\t\tret = color( from( local ) );\r\n\t\t\tret[ cache ] = local;\r\n\t\t\treturn ret;\r\n\t\t} else {\r\n\t\t\treturn color( local );\r\n\t\t}\r\n\t};\r\n\r\n\t// Makes red() green() blue() alpha() hue() saturation() lightness()\r\n\teach( props, function( key, prop ) {\r\n\r\n\t\t// Alpha is included in more than one space\r\n\t\tif ( color.fn[ key ] ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tcolor.fn[ key ] = function( value ) {\r\n\t\t\tvar vtype = jQuery.type( value ),\r\n\t\t\t\tfn = ( key === \"alpha\" ? ( this._hsla ? \"hsla\" : \"rgba\" ) : spaceName ),\r\n\t\t\t\tlocal = this[ fn ](),\r\n\t\t\t\tcur = local[ prop.idx ],\r\n\t\t\t\tmatch;\r\n\r\n\t\t\tif ( vtype === \"undefined\" ) {\r\n\t\t\t\treturn cur;\r\n\t\t\t}\r\n\r\n\t\t\tif ( vtype === \"function\" ) {\r\n\t\t\t\tvalue = value.call( this, cur );\r\n\t\t\t\tvtype = jQuery.type( value );\r\n\t\t\t}\r\n\t\t\tif ( value == null && prop.empty ) {\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t\tif ( vtype === \"string\" ) {\r\n\t\t\t\tmatch = rplusequals.exec( value );\r\n\t\t\t\tif ( match ) {\r\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlocal[ prop.idx ] = value;\r\n\t\t\treturn this[ fn ]( local );\r\n\t\t};\r\n\t} );\r\n} );\r\n\r\n// Add cssHook and .fx.step function for each named hook.\r\n// accept a space separated string of properties\r\ncolor.hook = function( hook ) {\r\n\tvar hooks = hook.split( \" \" );\r\n\teach( hooks, function( i, hook ) {\r\n\t\tjQuery.cssHooks[ hook ] = {\r\n\t\t\tset: function( elem, value ) {\r\n\t\t\t\tvar parsed, curElem,\r\n\t\t\t\t\tbackgroundColor = \"\";\r\n\r\n\t\t\t\tif ( value !== \"transparent\" && ( jQuery.type( value ) !== \"string\" ||\r\n\t\t\t\t\t\t( parsed = stringParse( value ) ) ) ) {\r\n\t\t\t\t\tvalue = color( parsed || value );\r\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\r\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\r\n\t\t\t\t\t\twhile (\r\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\r\n\t\t\t\t\t\t\tcurElem && curElem.style\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\r\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\r\n\t\t\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\r\n\t\t\t\t\t\t\tbackgroundColor :\r\n\t\t\t\t\t\t\t\"_default\" );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvalue = value.toRgbaString();\r\n\t\t\t\t}\r\n\t\t\t\ttry {\r\n\t\t\t\t\telem.style[ hook ] = value;\r\n\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\t// Wrapped to prevent IE from throwing errors on \"invalid\" values like\r\n\t\t\t\t\t// 'auto' or 'inherit'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\r\n\t\t\tif ( !fx.colorInit ) {\r\n\t\t\t\tfx.start = color( fx.elem, hook );\r\n\t\t\t\tfx.end = color( fx.end );\r\n\t\t\t\tfx.colorInit = true;\r\n\t\t\t}\r\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\r\n\t\t};\r\n\t} );\r\n\r\n};\r\n\r\ncolor.hook( stepHooks );\r\n\r\njQuery.cssHooks.borderColor = {\r\n\texpand: function( value ) {\r\n\t\tvar expanded = {};\r\n\r\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( i, part ) {\r\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\r\n\t\t} );\r\n\t\treturn expanded;\r\n\t}\r\n};\r\n\r\n// Basic color names only.\r\n// Usage of any of the other color names requires adding yourself or including\r\n// jquery.color.svg-names.js.\r\ncolors = jQuery.Color.names = {\r\n\r\n\t// 4.1. Basic color keywords\r\n\taqua: \"#00ffff\",\r\n\tblack: \"#000000\",\r\n\tblue: \"#0000ff\",\r\n\tfuchsia: \"#ff00ff\",\r\n\tgray: \"#808080\",\r\n\tgreen: \"#008000\",\r\n\tlime: \"#00ff00\",\r\n\tmaroon: \"#800000\",\r\n\tnavy: \"#000080\",\r\n\tolive: \"#808000\",\r\n\tpurple: \"#800080\",\r\n\tred: \"#ff0000\",\r\n\tsilver: \"#c0c0c0\",\r\n\tteal: \"#008080\",\r\n\twhite: \"#ffffff\",\r\n\tyellow: \"#ffff00\",\r\n\r\n\t// 4.2.3. \"transparent\" color keyword\r\n\ttransparent: [ null, null, null, 0 ],\r\n\r\n\t_default: \"#ffffff\"\r\n};\r\n\r\n} )( jQuery );\r\n\r\n/******************************************************************************/\r\n/****************************** CLASS ANIMATIONS ******************************/\r\n/******************************************************************************/\r\n( function() {\r\n\r\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\r\n\tshorthandStyles = {\r\n\t\tborder: 1,\r\n\t\tborderBottom: 1,\r\n\t\tborderColor: 1,\r\n\t\tborderLeft: 1,\r\n\t\tborderRight: 1,\r\n\t\tborderTop: 1,\r\n\t\tborderWidth: 1,\r\n\t\tmargin: 1,\r\n\t\tpadding: 1\r\n\t};\r\n\r\n$.each(\r\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\r\n\tfunction( _, prop ) {\r\n\t\t$.fx.step[ prop ] = function( fx ) {\r\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\r\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\r\n\t\t\t\tfx.setAttr = true;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n);\r\n\r\nfunction getElementStyles( elem ) {\r\n\tvar key, len,\r\n\t\tstyle = elem.ownerDocument.defaultView ?\r\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\r\n\t\t\telem.currentStyle,\r\n\t\tstyles = {};\r\n\r\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\r\n\t\tlen = style.length;\r\n\t\twhile ( len-- ) {\r\n\t\t\tkey = style[ len ];\r\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\r\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t// Support: Opera, IE <9\r\n\t} else {\r\n\t\tfor ( key in style ) {\r\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\r\n\t\t\t\tstyles[ key ] = style[ key ];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn styles;\r\n}\r\n\r\nfunction styleDifference( oldStyle, newStyle ) {\r\n\tvar diff = {},\r\n\t\tname, value;\r\n\r\n\tfor ( name in newStyle ) {\r\n\t\tvalue = newStyle[ name ];\r\n\t\tif ( oldStyle[ name ] !== value ) {\r\n\t\t\tif ( !shorthandStyles[ name ] ) {\r\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\r\n\t\t\t\t\tdiff[ name ] = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn diff;\r\n}\r\n\r\n// Support: jQuery <1.8\r\nif ( !$.fn.addBack ) {\r\n\t$.fn.addBack = function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\r\n\t\t);\r\n\t};\r\n}\r\n\r\n$.effects.animateClass = function( value, duration, easing, callback ) {\r\n\tvar o = $.speed( duration, easing, callback );\r\n\r\n\treturn this.queue( function() {\r\n\t\tvar animated = $( this ),\r\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\r\n\t\t\tapplyClassChange,\r\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\r\n\r\n\t\t// Map the animated objects to store the original styles.\r\n\t\tallAnimations = allAnimations.map( function() {\r\n\t\t\tvar el = $( this );\r\n\t\t\treturn {\r\n\t\t\t\tel: el,\r\n\t\t\t\tstart: getElementStyles( this )\r\n\t\t\t};\r\n\t\t} );\r\n\r\n\t\t// Apply class change\r\n\t\tapplyClassChange = function() {\r\n\t\t\t$.each( classAnimationActions, function( i, action ) {\r\n\t\t\t\tif ( value[ action ] ) {\r\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t};\r\n\t\tapplyClassChange();\r\n\r\n\t\t// Map all animated objects again - calculate new styles and diff\r\n\t\tallAnimations = allAnimations.map( function() {\r\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\r\n\t\t\tthis.diff = styleDifference( this.start, this.end );\r\n\t\t\treturn this;\r\n\t\t} );\r\n\r\n\t\t// Apply original class\r\n\t\tanimated.attr( \"class\", baseClass );\r\n\r\n\t\t// Map all animated objects again - this time collecting a promise\r\n\t\tallAnimations = allAnimations.map( function() {\r\n\t\t\tvar styleInfo = this,\r\n\t\t\t\tdfd = $.Deferred(),\r\n\t\t\t\topts = $.extend( {}, o, {\r\n\t\t\t\t\tqueue: false,\r\n\t\t\t\t\tcomplete: function() {\r\n\t\t\t\t\t\tdfd.resolve( styleInfo );\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\r\n\t\t\tthis.el.animate( this.diff, opts );\r\n\t\t\treturn dfd.promise();\r\n\t\t} );\r\n\r\n\t\t// Once all animations have completed:\r\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\r\n\r\n\t\t\t// Set the final class\r\n\t\t\tapplyClassChange();\r\n\r\n\t\t\t// For each animated element,\r\n\t\t\t// clear all css properties that were animated\r\n\t\t\t$.each( arguments, function() {\r\n\t\t\t\tvar el = this.el;\r\n\t\t\t\t$.each( this.diff, function( key ) {\r\n\t\t\t\t\tel.css( key, \"\" );\r\n\t\t\t\t} );\r\n\t\t\t} );\r\n\r\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\r\n\t\t\t// it also handles dequeuing the next anim...\r\n\t\t\to.complete.call( animated[ 0 ] );\r\n\t\t} );\r\n\t} );\r\n};\r\n\r\n$.fn.extend( {\r\n\taddClass: ( function( orig ) {\r\n\t\treturn function( classNames, speed, easing, callback ) {\r\n\t\t\treturn speed ?\r\n\t\t\t\t$.effects.animateClass.call( this,\r\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\r\n\t\t\t\torig.apply( this, arguments );\r\n\t\t};\r\n\t} )( $.fn.addClass ),\r\n\r\n\tremoveClass: ( function( orig ) {\r\n\t\treturn function( classNames, speed, easing, callback ) {\r\n\t\t\treturn arguments.length > 1 ?\r\n\t\t\t\t$.effects.animateClass.call( this,\r\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\r\n\t\t\t\torig.apply( this, arguments );\r\n\t\t};\r\n\t} )( $.fn.removeClass ),\r\n\r\n\ttoggleClass: ( function( orig ) {\r\n\t\treturn function( classNames, force, speed, easing, callback ) {\r\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\r\n\t\t\t\tif ( !speed ) {\r\n\r\n\t\t\t\t\t// Without speed parameter\r\n\t\t\t\t\treturn orig.apply( this, arguments );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn $.effects.animateClass.call( this,\r\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\r\n\t\t\t\t\t\tspeed, easing, callback );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// Without force parameter\r\n\t\t\t\treturn $.effects.animateClass.call( this,\r\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\r\n\t\t\t}\r\n\t\t};\r\n\t} )( $.fn.toggleClass ),\r\n\r\n\tswitchClass: function( remove, add, speed, easing, callback ) {\r\n\t\treturn $.effects.animateClass.call( this, {\r\n\t\t\tadd: add,\r\n\t\t\tremove: remove\r\n\t\t}, speed, easing, callback );\r\n\t}\r\n} );\r\n\r\n} )();\r\n\r\n/******************************************************************************/\r\n/*********************************** EFFECTS **********************************/\r\n/******************************************************************************/\r\n\r\n( function() {\r\n\r\nif ( $.expr && $.expr.filters && $.expr.filters.animated ) {\r\n\t$.expr.filters.animated = ( function( orig ) {\r\n\t\treturn function( elem ) {\r\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\r\n\t\t};\r\n\t} )( $.expr.filters.animated );\r\n}\r\n\r\nif ( $.uiBackCompat !== false ) {\r\n\t$.extend( $.effects, {\r\n\r\n\t\t// Saves a set of properties in a data storage\r\n\t\tsave: function( element, set ) {\r\n\t\t\tvar i = 0, length = set.length;\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( set[ i ] !== null ) {\r\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Restores a set of previously saved properties from a data storage\r\n\t\trestore: function( element, set ) {\r\n\t\t\tvar val, i = 0, length = set.length;\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( set[ i ] !== null ) {\r\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\r\n\t\t\t\t\telement.css( set[ i ], val );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tsetMode: function( el, mode ) {\r\n\t\t\tif ( mode === \"toggle\" ) {\r\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\r\n\t\t\t}\r\n\t\t\treturn mode;\r\n\t\t},\r\n\r\n\t\t// Wraps the element around a wrapper that copies position properties\r\n\t\tcreateWrapper: function( element ) {\r\n\r\n\t\t\t// If the element is already wrapped, return it\r\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\r\n\t\t\t\treturn element.parent();\r\n\t\t\t}\r\n\r\n\t\t\t// Wrap the element\r\n\t\t\tvar props = {\r\n\t\t\t\t\twidth: element.outerWidth( true ),\r\n\t\t\t\t\theight: element.outerHeight( true ),\r\n\t\t\t\t\t\"float\": element.css( \"float\" )\r\n\t\t\t\t},\r\n\t\t\t\twrapper = $( \"

\" )\r\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\r\n\t\t\t\t\t.css( {\r\n\t\t\t\t\t\tfontSize: \"100%\",\r\n\t\t\t\t\t\tbackground: \"transparent\",\r\n\t\t\t\t\t\tborder: \"none\",\r\n\t\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\t\tpadding: 0\r\n\t\t\t\t\t} ),\r\n\r\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\r\n\t\t\t\tsize = {\r\n\t\t\t\t\twidth: element.width(),\r\n\t\t\t\t\theight: element.height()\r\n\t\t\t\t},\r\n\t\t\t\tactive = document.activeElement;\r\n\r\n\t\t\t// Support: Firefox\r\n\t\t\t// Firefox incorrectly exposes anonymous content\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\r\n\t\t\ttry {\r\n\t\t\t\tactive.id;\r\n\t\t\t} catch ( e ) {\r\n\t\t\t\tactive = document.body;\r\n\t\t\t}\r\n\r\n\t\t\telement.wrap( wrapper );\r\n\r\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\r\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\r\n\t\t\t\t$( active ).trigger( \"focus\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\r\n\t\t\t// lose the reference to the wrapped element\r\n\t\t\twrapper = element.parent();\r\n\r\n\t\t\t// Transfer positioning properties to the wrapper\r\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\r\n\t\t\t\twrapper.css( { position: \"relative\" } );\r\n\t\t\t\telement.css( { position: \"relative\" } );\r\n\t\t\t} else {\r\n\t\t\t\t$.extend( props, {\r\n\t\t\t\t\tposition: element.css( \"position\" ),\r\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\r\n\t\t\t\t} );\r\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\r\n\t\t\t\t\tprops[ pos ] = element.css( pos );\r\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\r\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t\telement.css( {\r\n\t\t\t\t\tposition: \"relative\",\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\tright: \"auto\",\r\n\t\t\t\t\tbottom: \"auto\"\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\telement.css( size );\r\n\r\n\t\t\treturn wrapper.css( props ).show();\r\n\t\t},\r\n\r\n\t\tremoveWrapper: function( element ) {\r\n\t\t\tvar active = document.activeElement;\r\n\r\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\r\n\t\t\t\telement.parent().replaceWith( element );\r\n\r\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\r\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\r\n\t\t\t\t\t$( active ).trigger( \"focus\" );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn element;\r\n\t\t}\r\n\t} );\r\n}\r\n\r\n$.extend( $.effects, {\r\n\tversion: \"1.12.1\",\r\n\r\n\tdefine: function( name, mode, effect ) {\r\n\t\tif ( !effect ) {\r\n\t\t\teffect = mode;\r\n\t\t\tmode = \"effect\";\r\n\t\t}\r\n\r\n\t\t$.effects.effect[ name ] = effect;\r\n\t\t$.effects.effect[ name ].mode = mode;\r\n\r\n\t\treturn effect;\r\n\t},\r\n\r\n\tscaledDimensions: function( element, percent, direction ) {\r\n\t\tif ( percent === 0 ) {\r\n\t\t\treturn {\r\n\t\t\t\theight: 0,\r\n\t\t\t\twidth: 0,\r\n\t\t\t\touterHeight: 0,\r\n\t\t\t\touterWidth: 0\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\r\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\r\n\r\n\t\treturn {\r\n\t\t\theight: element.height() * y,\r\n\t\t\twidth: element.width() * x,\r\n\t\t\touterHeight: element.outerHeight() * y,\r\n\t\t\touterWidth: element.outerWidth() * x\r\n\t\t};\r\n\r\n\t},\r\n\r\n\tclipToBox: function( animation ) {\r\n\t\treturn {\r\n\t\t\twidth: animation.clip.right - animation.clip.left,\r\n\t\t\theight: animation.clip.bottom - animation.clip.top,\r\n\t\t\tleft: animation.clip.left,\r\n\t\t\ttop: animation.clip.top\r\n\t\t};\r\n\t},\r\n\r\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\r\n\tunshift: function( element, queueLength, count ) {\r\n\t\tvar queue = element.queue();\r\n\r\n\t\tif ( queueLength > 1 ) {\r\n\t\t\tqueue.splice.apply( queue,\r\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\r\n\t\t}\r\n\t\telement.dequeue();\r\n\t},\r\n\r\n\tsaveStyle: function( element ) {\r\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\r\n\t},\r\n\r\n\trestoreStyle: function( element ) {\r\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\r\n\t\telement.removeData( dataSpaceStyle );\r\n\t},\r\n\r\n\tmode: function( element, mode ) {\r\n\t\tvar hidden = element.is( \":hidden\" );\r\n\r\n\t\tif ( mode === \"toggle\" ) {\r\n\t\t\tmode = hidden ? \"show\" : \"hide\";\r\n\t\t}\r\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\r\n\t\t\tmode = \"none\";\r\n\t\t}\r\n\t\treturn mode;\r\n\t},\r\n\r\n\t// Translates a [top,left] array into a baseline value\r\n\tgetBaseline: function( origin, original ) {\r\n\t\tvar y, x;\r\n\r\n\t\tswitch ( origin[ 0 ] ) {\r\n\t\tcase \"top\":\r\n\t\t\ty = 0;\r\n\t\t\tbreak;\r\n\t\tcase \"middle\":\r\n\t\t\ty = 0.5;\r\n\t\t\tbreak;\r\n\t\tcase \"bottom\":\r\n\t\t\ty = 1;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\ty = origin[ 0 ] / original.height;\r\n\t\t}\r\n\r\n\t\tswitch ( origin[ 1 ] ) {\r\n\t\tcase \"left\":\r\n\t\t\tx = 0;\r\n\t\t\tbreak;\r\n\t\tcase \"center\":\r\n\t\t\tx = 0.5;\r\n\t\t\tbreak;\r\n\t\tcase \"right\":\r\n\t\t\tx = 1;\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tx = origin[ 1 ] / original.width;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x,\r\n\t\t\ty: y\r\n\t\t};\r\n\t},\r\n\r\n\t// Creates a placeholder element so that the original element can be made absolute\r\n\tcreatePlaceholder: function( element ) {\r\n\t\tvar placeholder,\r\n\t\t\tcssPosition = element.css( \"position\" ),\r\n\t\t\tposition = element.position();\r\n\r\n\t\t// Lock in margins first to account for form elements, which\r\n\t\t// will change margin if you explicitly set height\r\n\t\t// see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\r\n\t\t// Support: Safari\r\n\t\telement.css( {\r\n\t\t\tmarginTop: element.css( \"marginTop\" ),\r\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\r\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\r\n\t\t\tmarginRight: element.css( \"marginRight\" )\r\n\t\t} )\r\n\t\t.outerWidth( element.outerWidth() )\r\n\t\t.outerHeight( element.outerHeight() );\r\n\r\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\r\n\t\t\tcssPosition = \"absolute\";\r\n\r\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\r\n\r\n\t\t\t\t// Convert inline to inline block to account for inline elements\r\n\t\t\t\t// that turn to inline block based on content (like img)\r\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\r\n\t\t\t\t\t\"inline-block\" :\r\n\t\t\t\t\t\"block\",\r\n\t\t\t\tvisibility: \"hidden\",\r\n\r\n\t\t\t\t// Margins need to be set to account for margin collapse\r\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\r\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\r\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\r\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\r\n\t\t\t\t\"float\": element.css( \"float\" )\r\n\t\t\t} )\r\n\t\t\t.outerWidth( element.outerWidth() )\r\n\t\t\t.outerHeight( element.outerHeight() )\r\n\t\t\t.addClass( \"ui-effects-placeholder\" );\r\n\r\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\r\n\t\t}\r\n\r\n\t\telement.css( {\r\n\t\t\tposition: cssPosition,\r\n\t\t\tleft: position.left,\r\n\t\t\ttop: position.top\r\n\t\t} );\r\n\r\n\t\treturn placeholder;\r\n\t},\r\n\r\n\tremovePlaceholder: function( element ) {\r\n\t\tvar dataKey = dataSpace + \"placeholder\",\r\n\t\t\t\tplaceholder = element.data( dataKey );\r\n\r\n\t\tif ( placeholder ) {\r\n\t\t\tplaceholder.remove();\r\n\t\t\telement.removeData( dataKey );\r\n\t\t}\r\n\t},\r\n\r\n\t// Removes a placeholder if it exists and restores\r\n\t// properties that were modified during placeholder creation\r\n\tcleanUp: function( element ) {\r\n\t\t$.effects.restoreStyle( element );\r\n\t\t$.effects.removePlaceholder( element );\r\n\t},\r\n\r\n\tsetTransition: function( element, list, factor, value ) {\r\n\t\tvalue = value || {};\r\n\t\t$.each( list, function( i, x ) {\r\n\t\t\tvar unit = element.cssUnit( x );\r\n\t\t\tif ( unit[ 0 ] > 0 ) {\r\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\r\n\t\t\t}\r\n\t\t} );\r\n\t\treturn value;\r\n\t}\r\n} );\r\n\r\n// Return an effect options object for the given parameters:\r\nfunction _normalizeArguments( effect, options, speed, callback ) {\r\n\r\n\t// Allow passing all options as the first parameter\r\n\tif ( $.isPlainObject( effect ) ) {\r\n\t\toptions = effect;\r\n\t\teffect = effect.effect;\r\n\t}\r\n\r\n\t// Convert to an object\r\n\teffect = { effect: effect };\r\n\r\n\t// Catch (effect, null, ...)\r\n\tif ( options == null ) {\r\n\t\toptions = {};\r\n\t}\r\n\r\n\t// Catch (effect, callback)\r\n\tif ( $.isFunction( options ) ) {\r\n\t\tcallback = options;\r\n\t\tspeed = null;\r\n\t\toptions = {};\r\n\t}\r\n\r\n\t// Catch (effect, speed, ?)\r\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\r\n\t\tcallback = speed;\r\n\t\tspeed = options;\r\n\t\toptions = {};\r\n\t}\r\n\r\n\t// Catch (effect, options, callback)\r\n\tif ( $.isFunction( speed ) ) {\r\n\t\tcallback = speed;\r\n\t\tspeed = null;\r\n\t}\r\n\r\n\t// Add options to effect\r\n\tif ( options ) {\r\n\t\t$.extend( effect, options );\r\n\t}\r\n\r\n\tspeed = speed || options.duration;\r\n\teffect.duration = $.fx.off ? 0 :\r\n\t\ttypeof speed === \"number\" ? speed :\r\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\r\n\t\t$.fx.speeds._default;\r\n\r\n\teffect.complete = callback || options.complete;\r\n\r\n\treturn effect;\r\n}\r\n\r\nfunction standardAnimationOption( option ) {\r\n\r\n\t// Valid standard speeds (nothing, number, named speed)\r\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Invalid strings - treat as \"normal\" speed\r\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Complete callback\r\n\tif ( $.isFunction( option ) ) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Options hash (but not naming an effect)\r\n\tif ( typeof option === \"object\" && !option.effect ) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Didn't match any standard API\r\n\treturn false;\r\n}\r\n\r\n$.fn.extend( {\r\n\teffect: function( /* effect, options, speed, callback */ ) {\r\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\r\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\r\n\t\t\tdefaultMode = effectMethod.mode,\r\n\t\t\tqueue = args.queue,\r\n\t\t\tqueueName = queue || \"fx\",\r\n\t\t\tcomplete = args.complete,\r\n\t\t\tmode = args.mode,\r\n\t\t\tmodes = [],\r\n\t\t\tprefilter = function( next ) {\r\n\t\t\t\tvar el = $( this ),\r\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\r\n\r\n\t\t\t\t// Sentinel for duck-punching the :animated psuedo-selector\r\n\t\t\t\tel.data( dataSpaceAnimated, true );\r\n\r\n\t\t\t\t// Save effect mode for later use,\r\n\t\t\t\t// we can't just call $.effects.mode again later,\r\n\t\t\t\t// as the .show() below destroys the initial state\r\n\t\t\t\tmodes.push( normalizedMode );\r\n\r\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.13\r\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\r\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\r\n\t\t\t\t\tel.show();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\r\n\t\t\t\t\t$.effects.saveStyle( el );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( $.isFunction( next ) ) {\r\n\t\t\t\t\tnext();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\tif ( $.fx.off || !effectMethod ) {\r\n\r\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\r\n\t\t\tif ( mode ) {\r\n\t\t\t\treturn this[ mode ]( args.duration, complete );\r\n\t\t\t} else {\r\n\t\t\t\treturn this.each( function() {\r\n\t\t\t\t\tif ( complete ) {\r\n\t\t\t\t\t\tcomplete.call( this );\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction run( next ) {\r\n\t\t\tvar elem = $( this );\r\n\r\n\t\t\tfunction cleanup() {\r\n\t\t\t\telem.removeData( dataSpaceAnimated );\r\n\r\n\t\t\t\t$.effects.cleanUp( elem );\r\n\r\n\t\t\t\tif ( args.mode === \"hide\" ) {\r\n\t\t\t\t\telem.hide();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdone();\r\n\t\t\t}\r\n\r\n\t\t\tfunction done() {\r\n\t\t\t\tif ( $.isFunction( complete ) ) {\r\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( $.isFunction( next ) ) {\r\n\t\t\t\t\tnext();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Override mode option on a per element basis,\r\n\t\t\t// as toggle can be either show or hide depending on element state\r\n\t\t\targs.mode = modes.shift();\r\n\r\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\r\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\r\n\r\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\r\n\t\t\t\t\telem[ mode ]();\r\n\t\t\t\t\tdone();\r\n\t\t\t\t} else {\r\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif ( args.mode === \"none\" ) {\r\n\r\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\r\n\t\t\t\t\telem[ mode ]();\r\n\t\t\t\t\tdone();\r\n\t\t\t\t} else {\r\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Run prefilter on all elements first to ensure that\r\n\t\t// any showing or hiding happens before placeholder creation,\r\n\t\t// which ensures that any layout changes are correctly captured.\r\n\t\treturn queue === false ?\r\n\t\t\tthis.each( prefilter ).each( run ) :\r\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\r\n\t},\r\n\r\n\tshow: ( function( orig ) {\r\n\t\treturn function( option ) {\r\n\t\t\tif ( standardAnimationOption( option ) ) {\r\n\t\t\t\treturn orig.apply( this, arguments );\r\n\t\t\t} else {\r\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\r\n\t\t\t\targs.mode = \"show\";\r\n\t\t\t\treturn this.effect.call( this, args );\r\n\t\t\t}\r\n\t\t};\r\n\t} )( $.fn.show ),\r\n\r\n\thide: ( function( orig ) {\r\n\t\treturn function( option ) {\r\n\t\t\tif ( standardAnimationOption( option ) ) {\r\n\t\t\t\treturn orig.apply( this, arguments );\r\n\t\t\t} else {\r\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\r\n\t\t\t\targs.mode = \"hide\";\r\n\t\t\t\treturn this.effect.call( this, args );\r\n\t\t\t}\r\n\t\t};\r\n\t} )( $.fn.hide ),\r\n\r\n\ttoggle: ( function( orig ) {\r\n\t\treturn function( option ) {\r\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\r\n\t\t\t\treturn orig.apply( this, arguments );\r\n\t\t\t} else {\r\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\r\n\t\t\t\targs.mode = \"toggle\";\r\n\t\t\t\treturn this.effect.call( this, args );\r\n\t\t\t}\r\n\t\t};\r\n\t} )( $.fn.toggle ),\r\n\r\n\tcssUnit: function( key ) {\r\n\t\tvar style = this.css( key ),\r\n\t\t\tval = [];\r\n\r\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\r\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\r\n\t\t\t\tval = [ parseFloat( style ), unit ];\r\n\t\t\t}\r\n\t\t} );\r\n\t\treturn val;\r\n\t},\r\n\r\n\tcssClip: function( clipObj ) {\r\n\t\tif ( clipObj ) {\r\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\r\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\r\n\t\t}\r\n\t\treturn parseClip( this.css( \"clip\" ), this );\r\n\t},\r\n\r\n\ttransfer: function( options, done ) {\r\n\t\tvar element = $( this ),\r\n\t\t\ttarget = $( options.to ),\r\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\r\n\t\t\tbody = $( \"body\" ),\r\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\r\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\r\n\t\t\tendPosition = target.offset(),\r\n\t\t\tanimation = {\r\n\t\t\t\ttop: endPosition.top - fixTop,\r\n\t\t\t\tleft: endPosition.left - fixLeft,\r\n\t\t\t\theight: target.innerHeight(),\r\n\t\t\t\twidth: target.innerWidth()\r\n\t\t\t},\r\n\t\t\tstartPosition = element.offset(),\r\n\t\t\ttransfer = $( \"
\" )\r\n\t\t\t\t.appendTo( \"body\" )\r\n\t\t\t\t.addClass( options.className )\r\n\t\t\t\t.css( {\r\n\t\t\t\t\ttop: startPosition.top - fixTop,\r\n\t\t\t\t\tleft: startPosition.left - fixLeft,\r\n\t\t\t\t\theight: element.innerHeight(),\r\n\t\t\t\t\twidth: element.innerWidth(),\r\n\t\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\r\n\t\t\t\t} )\r\n\t\t\t\t.animate( animation, options.duration, options.easing, function() {\r\n\t\t\t\t\ttransfer.remove();\r\n\t\t\t\t\tif ( $.isFunction( done ) ) {\r\n\t\t\t\t\t\tdone();\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t}\r\n} );\r\n\r\nfunction parseClip( str, element ) {\r\n\t\tvar outerWidth = element.outerWidth(),\r\n\t\t\touterHeight = element.outerHeight(),\r\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\r\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\r\n\r\n\t\treturn {\r\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\r\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\r\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\r\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\r\n\t\t};\r\n}\r\n\r\n$.fx.step.clip = function( fx ) {\r\n\tif ( !fx.clipInit ) {\r\n\t\tfx.start = $( fx.elem ).cssClip();\r\n\t\tif ( typeof fx.end === \"string\" ) {\r\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\r\n\t\t}\r\n\t\tfx.clipInit = true;\r\n\t}\r\n\r\n\t$( fx.elem ).cssClip( {\r\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\r\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\r\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\r\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\r\n\t} );\r\n};\r\n\r\n} )();\r\n\r\n/******************************************************************************/\r\n/*********************************** EASING ***********************************/\r\n/******************************************************************************/\r\n\r\n( function() {\r\n\r\n// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\r\n\r\nvar baseEasings = {};\r\n\r\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\r\n\tbaseEasings[ name ] = function( p ) {\r\n\t\treturn Math.pow( p, i + 2 );\r\n\t};\r\n} );\r\n\r\n$.extend( baseEasings, {\r\n\tSine: function( p ) {\r\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\r\n\t},\r\n\tCirc: function( p ) {\r\n\t\treturn 1 - Math.sqrt( 1 - p * p );\r\n\t},\r\n\tElastic: function( p ) {\r\n\t\treturn p === 0 || p === 1 ? p :\r\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\r\n\t},\r\n\tBack: function( p ) {\r\n\t\treturn p * p * ( 3 * p - 2 );\r\n\t},\r\n\tBounce: function( p ) {\r\n\t\tvar pow2,\r\n\t\t\tbounce = 4;\r\n\r\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\r\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\r\n\t}\r\n} );\r\n\r\n$.each( baseEasings, function( name, easeIn ) {\r\n\t$.easing[ \"easeIn\" + name ] = easeIn;\r\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\r\n\t\treturn 1 - easeIn( 1 - p );\r\n\t};\r\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\r\n\t\treturn p < 0.5 ?\r\n\t\t\teaseIn( p * 2 ) / 2 :\r\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\r\n\t};\r\n} );\r\n\r\n} )();\r\n\r\nvar effect = $.effects;\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Blind 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Blind Effect\r\n//>>group: Effects\r\n//>>description: Blinds the element.\r\n//>>docs: http://api.jqueryui.com/blind-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectBlind = $.effects.define( \"blind\", \"hide\", function( options, done ) {\r\n\tvar map = {\r\n\t\t\tup: [ \"bottom\", \"top\" ],\r\n\t\t\tvertical: [ \"bottom\", \"top\" ],\r\n\t\t\tdown: [ \"top\", \"bottom\" ],\r\n\t\t\tleft: [ \"right\", \"left\" ],\r\n\t\t\thorizontal: [ \"right\", \"left\" ],\r\n\t\t\tright: [ \"left\", \"right\" ]\r\n\t\t},\r\n\t\telement = $( this ),\r\n\t\tdirection = options.direction || \"up\",\r\n\t\tstart = element.cssClip(),\r\n\t\tanimate = { clip: $.extend( {}, start ) },\r\n\t\tplaceholder = $.effects.createPlaceholder( element );\r\n\r\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\r\n\r\n\tif ( options.mode === \"show\" ) {\r\n\t\telement.cssClip( animate.clip );\r\n\t\tif ( placeholder ) {\r\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\r\n\t\t}\r\n\r\n\t\tanimate.clip = start;\r\n\t}\r\n\r\n\tif ( placeholder ) {\r\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\r\n\t}\r\n\r\n\telement.animate( animate, {\r\n\t\tqueue: false,\r\n\t\tduration: options.duration,\r\n\t\teasing: options.easing,\r\n\t\tcomplete: done\r\n\t} );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Bounce 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Bounce Effect\r\n//>>group: Effects\r\n//>>description: Bounces an element horizontally or vertically n times.\r\n//>>docs: http://api.jqueryui.com/bounce-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectBounce = $.effects.define( \"bounce\", function( options, done ) {\r\n\tvar upAnim, downAnim, refValue,\r\n\t\telement = $( this ),\r\n\r\n\t\t// Defaults:\r\n\t\tmode = options.mode,\r\n\t\thide = mode === \"hide\",\r\n\t\tshow = mode === \"show\",\r\n\t\tdirection = options.direction || \"up\",\r\n\t\tdistance = options.distance,\r\n\t\ttimes = options.times || 5,\r\n\r\n\t\t// Number of internal animations\r\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\r\n\t\tspeed = options.duration / anims,\r\n\t\teasing = options.easing,\r\n\r\n\t\t// Utility:\r\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\r\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\r\n\t\ti = 0,\r\n\r\n\t\tqueuelen = element.queue().length;\r\n\r\n\t$.effects.createPlaceholder( element );\r\n\r\n\trefValue = element.css( ref );\r\n\r\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\r\n\tif ( !distance ) {\r\n\t\tdistance = element[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\r\n\t}\r\n\r\n\tif ( show ) {\r\n\t\tdownAnim = { opacity: 1 };\r\n\t\tdownAnim[ ref ] = refValue;\r\n\r\n\t\t// If we are showing, force opacity 0 and set the initial position\r\n\t\t// then do the \"first\" animation\r\n\t\telement\r\n\t\t\t.css( \"opacity\", 0 )\r\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\r\n\t\t\t.animate( downAnim, speed, easing );\r\n\t}\r\n\r\n\t// Start at the smallest distance if we are hiding\r\n\tif ( hide ) {\r\n\t\tdistance = distance / Math.pow( 2, times - 1 );\r\n\t}\r\n\r\n\tdownAnim = {};\r\n\tdownAnim[ ref ] = refValue;\r\n\r\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\r\n\tfor ( ; i < times; i++ ) {\r\n\t\tupAnim = {};\r\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\r\n\r\n\t\telement\r\n\t\t\t.animate( upAnim, speed, easing )\r\n\t\t\t.animate( downAnim, speed, easing );\r\n\r\n\t\tdistance = hide ? distance * 2 : distance / 2;\r\n\t}\r\n\r\n\t// Last Bounce when Hiding\r\n\tif ( hide ) {\r\n\t\tupAnim = { opacity: 0 };\r\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\r\n\r\n\t\telement.animate( upAnim, speed, easing );\r\n\t}\r\n\r\n\telement.queue( done );\r\n\r\n\t$.effects.unshift( element, queuelen, anims + 1 );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Clip 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Clip Effect\r\n//>>group: Effects\r\n//>>description: Clips the element on and off like an old TV.\r\n//>>docs: http://api.jqueryui.com/clip-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectClip = $.effects.define( \"clip\", \"hide\", function( options, done ) {\r\n\tvar start,\r\n\t\tanimate = {},\r\n\t\telement = $( this ),\r\n\t\tdirection = options.direction || \"vertical\",\r\n\t\tboth = direction === \"both\",\r\n\t\thorizontal = both || direction === \"horizontal\",\r\n\t\tvertical = both || direction === \"vertical\";\r\n\r\n\tstart = element.cssClip();\r\n\tanimate.clip = {\r\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\r\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\r\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\r\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\r\n\t};\r\n\r\n\t$.effects.createPlaceholder( element );\r\n\r\n\tif ( options.mode === \"show\" ) {\r\n\t\telement.cssClip( animate.clip );\r\n\t\tanimate.clip = start;\r\n\t}\r\n\r\n\telement.animate( animate, {\r\n\t\tqueue: false,\r\n\t\tduration: options.duration,\r\n\t\teasing: options.easing,\r\n\t\tcomplete: done\r\n\t} );\r\n\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Drop 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Drop Effect\r\n//>>group: Effects\r\n//>>description: Moves an element in one direction and hides it at the same time.\r\n//>>docs: http://api.jqueryui.com/drop-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectDrop = $.effects.define( \"drop\", \"hide\", function( options, done ) {\r\n\r\n\tvar distance,\r\n\t\telement = $( this ),\r\n\t\tmode = options.mode,\r\n\t\tshow = mode === \"show\",\r\n\t\tdirection = options.direction || \"left\",\r\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\r\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"-=\" : \"+=\",\r\n\t\toppositeMotion = ( motion === \"+=\" ) ? \"-=\" : \"+=\",\r\n\t\tanimation = {\r\n\t\t\topacity: 0\r\n\t\t};\r\n\r\n\t$.effects.createPlaceholder( element );\r\n\r\n\tdistance = options.distance ||\r\n\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\r\n\r\n\tanimation[ ref ] = motion + distance;\r\n\r\n\tif ( show ) {\r\n\t\telement.css( animation );\r\n\r\n\t\tanimation[ ref ] = oppositeMotion + distance;\r\n\t\tanimation.opacity = 1;\r\n\t}\r\n\r\n\t// Animate\r\n\telement.animate( animation, {\r\n\t\tqueue: false,\r\n\t\tduration: options.duration,\r\n\t\teasing: options.easing,\r\n\t\tcomplete: done\r\n\t} );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Explode 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Explode Effect\r\n//>>group: Effects\r\n// jscs:disable maximumLineLength\r\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\r\n// jscs:enable maximumLineLength\r\n//>>docs: http://api.jqueryui.com/explode-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectExplode = $.effects.define( \"explode\", \"hide\", function( options, done ) {\r\n\r\n\tvar i, j, left, top, mx, my,\r\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\r\n\t\tcells = rows,\r\n\t\telement = $( this ),\r\n\t\tmode = options.mode,\r\n\t\tshow = mode === \"show\",\r\n\r\n\t\t// Show and then visibility:hidden the element before calculating offset\r\n\t\toffset = element.show().css( \"visibility\", \"hidden\" ).offset(),\r\n\r\n\t\t// Width and height of a piece\r\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\r\n\t\theight = Math.ceil( element.outerHeight() / rows ),\r\n\t\tpieces = [];\r\n\r\n\t// Children animate complete:\r\n\tfunction childComplete() {\r\n\t\tpieces.push( this );\r\n\t\tif ( pieces.length === rows * cells ) {\r\n\t\t\tanimComplete();\r\n\t\t}\r\n\t}\r\n\r\n\t// Clone the element for each row and cell.\r\n\tfor ( i = 0; i < rows; i++ ) { // ===>\r\n\t\ttop = offset.top + i * height;\r\n\t\tmy = i - ( rows - 1 ) / 2;\r\n\r\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\r\n\t\t\tleft = offset.left + j * width;\r\n\t\t\tmx = j - ( cells - 1 ) / 2;\r\n\r\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\r\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\r\n\t\t\telement\r\n\t\t\t\t.clone()\r\n\t\t\t\t.appendTo( \"body\" )\r\n\t\t\t\t.wrap( \"
\" )\r\n\t\t\t\t.css( {\r\n\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\tvisibility: \"visible\",\r\n\t\t\t\t\tleft: -j * width,\r\n\t\t\t\t\ttop: -i * height\r\n\t\t\t\t} )\r\n\r\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\r\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\r\n\t\t\t\t.parent()\r\n\t\t\t\t\t.addClass( \"ui-effects-explode\" )\r\n\t\t\t\t\t.css( {\r\n\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\toverflow: \"hidden\",\r\n\t\t\t\t\t\twidth: width,\r\n\t\t\t\t\t\theight: height,\r\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\r\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\r\n\t\t\t\t\t\topacity: show ? 0 : 1\r\n\t\t\t\t\t} )\r\n\t\t\t\t\t.animate( {\r\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\r\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\r\n\t\t\t\t\t\topacity: show ? 1 : 0\r\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\r\n\t\t}\r\n\t}\r\n\r\n\tfunction animComplete() {\r\n\t\telement.css( {\r\n\t\t\tvisibility: \"visible\"\r\n\t\t} );\r\n\t\t$( pieces ).remove();\r\n\t\tdone();\r\n\t}\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Fade 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Fade Effect\r\n//>>group: Effects\r\n//>>description: Fades the element.\r\n//>>docs: http://api.jqueryui.com/fade-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\r\n\tvar show = options.mode === \"show\";\r\n\r\n\t$( this )\r\n\t\t.css( \"opacity\", show ? 0 : 1 )\r\n\t\t.animate( {\r\n\t\t\topacity: show ? 1 : 0\r\n\t\t}, {\r\n\t\t\tqueue: false,\r\n\t\t\tduration: options.duration,\r\n\t\t\teasing: options.easing,\r\n\t\t\tcomplete: done\r\n\t\t} );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Fold 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Fold Effect\r\n//>>group: Effects\r\n//>>description: Folds an element first horizontally and then vertically.\r\n//>>docs: http://api.jqueryui.com/fold-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectFold = $.effects.define( \"fold\", \"hide\", function( options, done ) {\r\n\r\n\t// Create element\r\n\tvar element = $( this ),\r\n\t\tmode = options.mode,\r\n\t\tshow = mode === \"show\",\r\n\t\thide = mode === \"hide\",\r\n\t\tsize = options.size || 15,\r\n\t\tpercent = /([0-9]+)%/.exec( size ),\r\n\t\thorizFirst = !!options.horizFirst,\r\n\t\tref = horizFirst ? [ \"right\", \"bottom\" ] : [ \"bottom\", \"right\" ],\r\n\t\tduration = options.duration / 2,\r\n\r\n\t\tplaceholder = $.effects.createPlaceholder( element ),\r\n\r\n\t\tstart = element.cssClip(),\r\n\t\tanimation1 = { clip: $.extend( {}, start ) },\r\n\t\tanimation2 = { clip: $.extend( {}, start ) },\r\n\r\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\r\n\r\n\t\tqueuelen = element.queue().length;\r\n\r\n\tif ( percent ) {\r\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\r\n\t}\r\n\tanimation1.clip[ ref[ 0 ] ] = size;\r\n\tanimation2.clip[ ref[ 0 ] ] = size;\r\n\tanimation2.clip[ ref[ 1 ] ] = 0;\r\n\r\n\tif ( show ) {\r\n\t\telement.cssClip( animation2.clip );\r\n\t\tif ( placeholder ) {\r\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\r\n\t\t}\r\n\r\n\t\tanimation2.clip = start;\r\n\t}\r\n\r\n\t// Animate\r\n\telement\r\n\t\t.queue( function( next ) {\r\n\t\t\tif ( placeholder ) {\r\n\t\t\t\tplaceholder\r\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\r\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\r\n\t\t\t}\r\n\r\n\t\t\tnext();\r\n\t\t} )\r\n\t\t.animate( animation1, duration, options.easing )\r\n\t\t.animate( animation2, duration, options.easing )\r\n\t\t.queue( done );\r\n\r\n\t$.effects.unshift( element, queuelen, 4 );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Highlight 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Highlight Effect\r\n//>>group: Effects\r\n//>>description: Highlights the background of an element in a defined color for a custom duration.\r\n//>>docs: http://api.jqueryui.com/highlight-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectHighlight = $.effects.define( \"highlight\", \"show\", function( options, done ) {\r\n\tvar element = $( this ),\r\n\t\tanimation = {\r\n\t\t\tbackgroundColor: element.css( \"backgroundColor\" )\r\n\t\t};\r\n\r\n\tif ( options.mode === \"hide\" ) {\r\n\t\tanimation.opacity = 0;\r\n\t}\r\n\r\n\t$.effects.saveStyle( element );\r\n\r\n\telement\r\n\t\t.css( {\r\n\t\t\tbackgroundImage: \"none\",\r\n\t\t\tbackgroundColor: options.color || \"#ffff99\"\r\n\t\t} )\r\n\t\t.animate( animation, {\r\n\t\t\tqueue: false,\r\n\t\t\tduration: options.duration,\r\n\t\t\teasing: options.easing,\r\n\t\t\tcomplete: done\r\n\t\t} );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Size 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Size Effect\r\n//>>group: Effects\r\n//>>description: Resize an element to a specified width and height.\r\n//>>docs: http://api.jqueryui.com/size-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\r\n\r\n\t// Create element\r\n\tvar baseline, factor, temp,\r\n\t\telement = $( this ),\r\n\r\n\t\t// Copy for children\r\n\t\tcProps = [ \"fontSize\" ],\r\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\r\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\r\n\r\n\t\t// Set options\r\n\t\tmode = options.mode,\r\n\t\trestore = mode !== \"effect\",\r\n\t\tscale = options.scale || \"both\",\r\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\r\n\t\tposition = element.css( \"position\" ),\r\n\t\tpos = element.position(),\r\n\t\toriginal = $.effects.scaledDimensions( element ),\r\n\t\tfrom = options.from || original,\r\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\r\n\r\n\t$.effects.createPlaceholder( element );\r\n\r\n\tif ( mode === \"show\" ) {\r\n\t\ttemp = from;\r\n\t\tfrom = to;\r\n\t\tto = temp;\r\n\t}\r\n\r\n\t// Set scaling factor\r\n\tfactor = {\r\n\t\tfrom: {\r\n\t\t\ty: from.height / original.height,\r\n\t\t\tx: from.width / original.width\r\n\t\t},\r\n\t\tto: {\r\n\t\t\ty: to.height / original.height,\r\n\t\t\tx: to.width / original.width\r\n\t\t}\r\n\t};\r\n\r\n\t// Scale the css box\r\n\tif ( scale === \"box\" || scale === \"both\" ) {\r\n\r\n\t\t// Vertical props scaling\r\n\t\tif ( factor.from.y !== factor.to.y ) {\r\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\r\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\r\n\t\t}\r\n\r\n\t\t// Horizontal props scaling\r\n\t\tif ( factor.from.x !== factor.to.x ) {\r\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\r\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\r\n\t\t}\r\n\t}\r\n\r\n\t// Scale the content\r\n\tif ( scale === \"content\" || scale === \"both\" ) {\r\n\r\n\t\t// Vertical props scaling\r\n\t\tif ( factor.from.y !== factor.to.y ) {\r\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\r\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\r\n\t\t}\r\n\t}\r\n\r\n\t// Adjust the position properties based on the provided origin points\r\n\tif ( origin ) {\r\n\t\tbaseline = $.effects.getBaseline( origin, original );\r\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\r\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\r\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\r\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\r\n\t}\r\n\telement.css( from );\r\n\r\n\t// Animate the children if desired\r\n\tif ( scale === \"content\" || scale === \"both\" ) {\r\n\r\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\r\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\r\n\r\n\t\t// Only animate children with width attributes specified\r\n\t\t// TODO: is this right? should we include anything with css width specified as well\r\n\t\telement.find( \"*[width]\" ).each( function() {\r\n\t\t\tvar child = $( this ),\r\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\r\n\t\t\t\tchildFrom = {\r\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\r\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\r\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\r\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\r\n\t\t\t\t},\r\n\t\t\t\tchildTo = {\r\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\r\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\r\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\r\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\r\n\t\t\t\t};\r\n\r\n\t\t\t// Vertical props scaling\r\n\t\t\tif ( factor.from.y !== factor.to.y ) {\r\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\r\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\r\n\t\t\t}\r\n\r\n\t\t\t// Horizontal props scaling\r\n\t\t\tif ( factor.from.x !== factor.to.x ) {\r\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\r\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\r\n\t\t\t}\r\n\r\n\t\t\tif ( restore ) {\r\n\t\t\t\t$.effects.saveStyle( child );\r\n\t\t\t}\r\n\r\n\t\t\t// Animate children\r\n\t\t\tchild.css( childFrom );\r\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\r\n\r\n\t\t\t\t// Restore children\r\n\t\t\t\tif ( restore ) {\r\n\t\t\t\t\t$.effects.restoreStyle( child );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t} );\r\n\t}\r\n\r\n\t// Animate\r\n\telement.animate( to, {\r\n\t\tqueue: false,\r\n\t\tduration: options.duration,\r\n\t\teasing: options.easing,\r\n\t\tcomplete: function() {\r\n\r\n\t\t\tvar offset = element.offset();\r\n\r\n\t\t\tif ( to.opacity === 0 ) {\r\n\t\t\t\telement.css( \"opacity\", from.opacity );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !restore ) {\r\n\t\t\t\telement\r\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\r\n\t\t\t\t\t.offset( offset );\r\n\r\n\t\t\t\t// Need to save style here so that automatic style restoration\r\n\t\t\t\t// doesn't restore to the original styles from before the animation.\r\n\t\t\t\t$.effects.saveStyle( element );\r\n\t\t\t}\r\n\r\n\t\t\tdone();\r\n\t\t}\r\n\t} );\r\n\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Scale 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Scale Effect\r\n//>>group: Effects\r\n//>>description: Grows or shrinks an element and its content.\r\n//>>docs: http://api.jqueryui.com/scale-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\r\n\r\n\t// Create element\r\n\tvar el = $( this ),\r\n\t\tmode = options.mode,\r\n\t\tpercent = parseInt( options.percent, 10 ) ||\r\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\r\n\r\n\t\tnewOptions = $.extend( true, {\r\n\t\t\tfrom: $.effects.scaledDimensions( el ),\r\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\r\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\r\n\t\t}, options );\r\n\r\n\t// Fade option to support puff\r\n\tif ( options.fade ) {\r\n\t\tnewOptions.from.opacity = 1;\r\n\t\tnewOptions.to.opacity = 0;\r\n\t}\r\n\r\n\t$.effects.effect.size.call( this, newOptions, done );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Puff 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Puff Effect\r\n//>>group: Effects\r\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\r\n//>>docs: http://api.jqueryui.com/puff-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\r\n\tvar newOptions = $.extend( true, {}, options, {\r\n\t\tfade: true,\r\n\t\tpercent: parseInt( options.percent, 10 ) || 150\r\n\t} );\r\n\r\n\t$.effects.effect.scale.call( this, newOptions, done );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Pulsate 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Pulsate Effect\r\n//>>group: Effects\r\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\r\n//>>docs: http://api.jqueryui.com/pulsate-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectPulsate = $.effects.define( \"pulsate\", \"show\", function( options, done ) {\r\n\tvar element = $( this ),\r\n\t\tmode = options.mode,\r\n\t\tshow = mode === \"show\",\r\n\t\thide = mode === \"hide\",\r\n\t\tshowhide = show || hide,\r\n\r\n\t\t// Showing or hiding leaves off the \"last\" animation\r\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\r\n\t\tduration = options.duration / anims,\r\n\t\tanimateTo = 0,\r\n\t\ti = 1,\r\n\t\tqueuelen = element.queue().length;\r\n\r\n\tif ( show || !element.is( \":visible\" ) ) {\r\n\t\telement.css( \"opacity\", 0 ).show();\r\n\t\tanimateTo = 1;\r\n\t}\r\n\r\n\t// Anims - 1 opacity \"toggles\"\r\n\tfor ( ; i < anims; i++ ) {\r\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\r\n\t\tanimateTo = 1 - animateTo;\r\n\t}\r\n\r\n\telement.animate( { opacity: animateTo }, duration, options.easing );\r\n\r\n\telement.queue( done );\r\n\r\n\t$.effects.unshift( element, queuelen, anims + 1 );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Shake 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Shake Effect\r\n//>>group: Effects\r\n//>>description: Shakes an element horizontally or vertically n times.\r\n//>>docs: http://api.jqueryui.com/shake-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectShake = $.effects.define( \"shake\", function( options, done ) {\r\n\r\n\tvar i = 1,\r\n\t\telement = $( this ),\r\n\t\tdirection = options.direction || \"left\",\r\n\t\tdistance = options.distance || 20,\r\n\t\ttimes = options.times || 3,\r\n\t\tanims = times * 2 + 1,\r\n\t\tspeed = Math.round( options.duration / anims ),\r\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\r\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\r\n\t\tanimation = {},\r\n\t\tanimation1 = {},\r\n\t\tanimation2 = {},\r\n\r\n\t\tqueuelen = element.queue().length;\r\n\r\n\t$.effects.createPlaceholder( element );\r\n\r\n\t// Animation\r\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\r\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\r\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\r\n\r\n\t// Animate\r\n\telement.animate( animation, speed, options.easing );\r\n\r\n\t// Shakes\r\n\tfor ( ; i < times; i++ ) {\r\n\t\telement\r\n\t\t\t.animate( animation1, speed, options.easing )\r\n\t\t\t.animate( animation2, speed, options.easing );\r\n\t}\r\n\r\n\telement\r\n\t\t.animate( animation1, speed, options.easing )\r\n\t\t.animate( animation, speed / 2, options.easing )\r\n\t\t.queue( done );\r\n\r\n\t$.effects.unshift( element, queuelen, anims + 1 );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Slide 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Slide Effect\r\n//>>group: Effects\r\n//>>description: Slides an element in and out of the viewport.\r\n//>>docs: http://api.jqueryui.com/slide-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effectsEffectSlide = $.effects.define( \"slide\", \"show\", function( options, done ) {\r\n\tvar startClip, startRef,\r\n\t\telement = $( this ),\r\n\t\tmap = {\r\n\t\t\tup: [ \"bottom\", \"top\" ],\r\n\t\t\tdown: [ \"top\", \"bottom\" ],\r\n\t\t\tleft: [ \"right\", \"left\" ],\r\n\t\t\tright: [ \"left\", \"right\" ]\r\n\t\t},\r\n\t\tmode = options.mode,\r\n\t\tdirection = options.direction || \"left\",\r\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\r\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\r\n\t\tdistance = options.distance ||\r\n\t\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ),\r\n\t\tanimation = {};\r\n\r\n\t$.effects.createPlaceholder( element );\r\n\r\n\tstartClip = element.cssClip();\r\n\tstartRef = element.position()[ ref ];\r\n\r\n\t// Define hide animation\r\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\r\n\tanimation.clip = element.cssClip();\r\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\r\n\r\n\t// Reverse the animation if we're showing\r\n\tif ( mode === \"show\" ) {\r\n\t\telement.cssClip( animation.clip );\r\n\t\telement.css( ref, animation[ ref ] );\r\n\t\tanimation.clip = startClip;\r\n\t\tanimation[ ref ] = startRef;\r\n\t}\r\n\r\n\t// Actually animate\r\n\telement.animate( animation, {\r\n\t\tqueue: false,\r\n\t\tduration: options.duration,\r\n\t\teasing: options.easing,\r\n\t\tcomplete: done\r\n\t} );\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Effects Transfer 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Transfer Effect\r\n//>>group: Effects\r\n//>>description: Displays a transfer effect from one element to another.\r\n//>>docs: http://api.jqueryui.com/transfer-effect/\r\n//>>demos: http://jqueryui.com/effect/\r\n\r\n\r\n\r\nvar effect;\r\nif ( $.uiBackCompat !== false ) {\r\n\teffect = $.effects.define( \"transfer\", function( options, done ) {\r\n\t\t$( this ).transfer( options, done );\r\n\t} );\r\n}\r\nvar effectsEffectTransfer = effect;\r\n\r\n\r\n/*!\r\n * jQuery UI Focusable 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: :focusable Selector\r\n//>>group: Core\r\n//>>description: Selects elements which can be focused.\r\n//>>docs: http://api.jqueryui.com/focusable-selector/\r\n\r\n\r\n\r\n// Selectors\r\n$.ui.focusable = function( element, hasTabindex ) {\r\n\tvar map, mapName, img, focusableIfVisible, fieldset,\r\n\t\tnodeName = element.nodeName.toLowerCase();\r\n\r\n\tif ( \"area\" === nodeName ) {\r\n\t\tmap = element.parentNode;\r\n\t\tmapName = map.name;\r\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\r\n\t\treturn img.length > 0 && img.is( \":visible\" );\r\n\t}\r\n\r\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\r\n\t\tfocusableIfVisible = !element.disabled;\r\n\r\n\t\tif ( focusableIfVisible ) {\r\n\r\n\t\t\t// Form controls within a disabled fieldset are disabled.\r\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\r\n\t\t\t// Since controls generally aren't placed inside legends, we skip\r\n\t\t\t// this portion of the check.\r\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\r\n\t\t\tif ( fieldset ) {\r\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\r\n\t\t\t}\r\n\t\t}\r\n\t} else if ( \"a\" === nodeName ) {\r\n\t\tfocusableIfVisible = element.href || hasTabindex;\r\n\t} else {\r\n\t\tfocusableIfVisible = hasTabindex;\r\n\t}\r\n\r\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\r\n};\r\n\r\n// Support: IE 8 only\r\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\r\nfunction visible( element ) {\r\n\tvar visibility = element.css( \"visibility\" );\r\n\twhile ( visibility === \"inherit\" ) {\r\n\t\telement = element.parent();\r\n\t\tvisibility = element.css( \"visibility\" );\r\n\t}\r\n\treturn visibility !== \"hidden\";\r\n}\r\n\r\n$.extend( $.expr[ \":\" ], {\r\n\tfocusable: function( element ) {\r\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\r\n\t}\r\n} );\r\n\r\nvar focusable = $.ui.focusable;\r\n\r\n\r\n\r\n\r\n// Support: IE8 Only\r\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\r\n// with a string, so we need to find the proper form.\r\nvar form = $.fn.form = function() {\r\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\r\n};\r\n\r\n\r\n/*!\r\n * jQuery UI Form Reset Mixin 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Form Reset Mixin\r\n//>>group: Core\r\n//>>description: Refresh input widgets when their form is reset\r\n//>>docs: http://api.jqueryui.com/form-reset-mixin/\r\n\r\n\r\n\r\nvar formResetMixin = $.ui.formResetMixin = {\r\n\t_formResetHandler: function() {\r\n\t\tvar form = $( this );\r\n\r\n\t\t// Wait for the form reset to actually happen before refreshing\r\n\t\tsetTimeout( function() {\r\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\r\n\t\t\t$.each( instances, function() {\r\n\t\t\t\tthis.refresh();\r\n\t\t\t} );\r\n\t\t} );\r\n\t},\r\n\r\n\t_bindFormResetHandler: function() {\r\n\t\tthis.form = this.element.form();\r\n\t\tif ( !this.form.length ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\r\n\t\tif ( !instances.length ) {\r\n\r\n\t\t\t// We don't use _on() here because we use a single event handler per form\r\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\r\n\t\t}\r\n\t\tinstances.push( this );\r\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\r\n\t},\r\n\r\n\t_unbindFormResetHandler: function() {\r\n\t\tif ( !this.form.length ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\r\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\r\n\t\tif ( instances.length ) {\r\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\r\n\t\t} else {\r\n\t\t\tthis.form\r\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\r\n\t\t\t\t.off( \"reset.ui-form-reset\" );\r\n\t\t}\r\n\t}\r\n};\r\n\r\n\r\n/*!\r\n * jQuery UI Support for jQuery core 1.7.x 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n */\r\n\r\n//>>label: jQuery 1.7 Support\r\n//>>group: Core\r\n//>>description: Support version 1.7.x of jQuery core\r\n\r\n\r\n\r\n// Support: jQuery 1.7 only\r\n// Not a great way to check versions, but since we only support 1.7+ and only\r\n// need to detect <1.8, this is a simple check that should suffice. Checking\r\n// for \"1.7.\" would be a bit safer, but the version string is 1.7, not 1.7.0\r\n// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting\r\n// 1.7 anymore). See #11197 for why we're not using feature detection.\r\nif ( $.fn.jquery.substring( 0, 3 ) === \"1.7\" ) {\r\n\r\n\t// Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight()\r\n\t// Unlike jQuery Core 1.8+, these only support numeric values to set the\r\n\t// dimensions in pixels\r\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\r\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\r\n\t\t\ttype = name.toLowerCase(),\r\n\t\t\torig = {\r\n\t\t\t\tinnerWidth: $.fn.innerWidth,\r\n\t\t\t\tinnerHeight: $.fn.innerHeight,\r\n\t\t\t\touterWidth: $.fn.outerWidth,\r\n\t\t\t\touterHeight: $.fn.outerHeight\r\n\t\t\t};\r\n\r\n\t\tfunction reduce( elem, size, border, margin ) {\r\n\t\t\t$.each( side, function() {\r\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\r\n\t\t\t\tif ( border ) {\r\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\r\n\t\t\t\t}\r\n\t\t\t\tif ( margin ) {\r\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t\treturn size;\r\n\t\t}\r\n\r\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\r\n\t\t\tif ( size === undefined ) {\r\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\r\n\t\t\t}\r\n\r\n\t\t\treturn this.each( function() {\r\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\r\n\t\t\t} );\r\n\t\t};\r\n\r\n\t\t$.fn[ \"outer\" + name ] = function( size, margin ) {\r\n\t\t\tif ( typeof size !== \"number\" ) {\r\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\r\n\t\t\t}\r\n\r\n\t\t\treturn this.each( function() {\r\n\t\t\t\t$( this ).css( type, reduce( this, size, true, margin ) + \"px\" );\r\n\t\t\t} );\r\n\t\t};\r\n\t} );\r\n\r\n\t$.fn.addBack = function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\r\n\t\t);\r\n\t};\r\n}\r\n\r\n;\r\n/*!\r\n * jQuery UI Keycode 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Keycode\r\n//>>group: Core\r\n//>>description: Provide keycodes as keynames\r\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\r\n\r\n\r\nvar keycode = $.ui.keyCode = {\r\n\tBACKSPACE: 8,\r\n\tCOMMA: 188,\r\n\tDELETE: 46,\r\n\tDOWN: 40,\r\n\tEND: 35,\r\n\tENTER: 13,\r\n\tESCAPE: 27,\r\n\tHOME: 36,\r\n\tLEFT: 37,\r\n\tPAGE_DOWN: 34,\r\n\tPAGE_UP: 33,\r\n\tPERIOD: 190,\r\n\tRIGHT: 39,\r\n\tSPACE: 32,\r\n\tTAB: 9,\r\n\tUP: 38\r\n};\r\n\r\n\r\n\r\n\r\n// Internal use only\r\nvar escapeSelector = $.ui.escapeSelector = ( function() {\r\n\tvar selectorEscape = /([!\"#$%&'()*+,./:;<=>?@[\\]^`{|}~])/g;\r\n\treturn function( selector ) {\r\n\t\treturn selector.replace( selectorEscape, \"\\\\$1\" );\r\n\t};\r\n} )();\r\n\r\n\r\n/*!\r\n * jQuery UI Labels 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: labels\r\n//>>group: Core\r\n//>>description: Find all the labels associated with a given input\r\n//>>docs: http://api.jqueryui.com/labels/\r\n\r\n\r\n\r\nvar labels = $.fn.labels = function() {\r\n\tvar ancestor, selector, id, labels, ancestors;\r\n\r\n\t// Check control.labels first\r\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\r\n\t\treturn this.pushStack( this[ 0 ].labels );\r\n\t}\r\n\r\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\r\n\t// Above browsers do not support control.labels. Everything below is to support them\r\n\t// as well as document fragments. control.labels does not work on document fragments\r\n\tlabels = this.eq( 0 ).parents( \"label\" );\r\n\r\n\t// Look for the label based on the id\r\n\tid = this.attr( \"id\" );\r\n\tif ( id ) {\r\n\r\n\t\t// We don't search against the document in case the element\r\n\t\t// is disconnected from the DOM\r\n\t\tancestor = this.eq( 0 ).parents().last();\r\n\r\n\t\t// Get a full set of top level ancestors\r\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\r\n\r\n\t\t// Create a selector for the label based on the id\r\n\t\tselector = \"label[for='\" + $.ui.escapeSelector( id ) + \"']\";\r\n\r\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\r\n\r\n\t}\r\n\r\n\t// Return whatever we have found for labels\r\n\treturn this.pushStack( labels );\r\n};\r\n\r\n\r\n/*!\r\n * jQuery UI Scroll Parent 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: scrollParent\r\n//>>group: Core\r\n//>>description: Get the closest ancestor element that is scrollable.\r\n//>>docs: http://api.jqueryui.com/scrollParent/\r\n\r\n\r\n\r\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\r\n\tvar position = this.css( \"position\" ),\r\n\t\texcludeStaticParent = position === \"absolute\",\r\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\r\n\t\tscrollParent = this.parents().filter( function() {\r\n\t\t\tvar parent = $( this );\r\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\r\n\t\t\t\tparent.css( \"overflow-x\" ) );\r\n\t\t} ).eq( 0 );\r\n\r\n\treturn position === \"fixed\" || !scrollParent.length ?\r\n\t\t$( this[ 0 ].ownerDocument || document ) :\r\n\t\tscrollParent;\r\n};\r\n\r\n\r\n/*!\r\n * jQuery UI Tabbable 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: :tabbable Selector\r\n//>>group: Core\r\n//>>description: Selects elements which can be tabbed to.\r\n//>>docs: http://api.jqueryui.com/tabbable-selector/\r\n\r\n\r\n\r\nvar tabbable = $.extend( $.expr[ \":\" ], {\r\n\ttabbable: function( element ) {\r\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\r\n\t\t\thasTabindex = tabIndex != null;\r\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\r\n\t}\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Unique ID 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: uniqueId\r\n//>>group: Core\r\n//>>description: Functions to generate and remove uniqueId's\r\n//>>docs: http://api.jqueryui.com/uniqueId/\r\n\r\n\r\n\r\nvar uniqueId = $.fn.extend( {\r\n\tuniqueId: ( function() {\r\n\t\tvar uuid = 0;\r\n\r\n\t\treturn function() {\r\n\t\t\treturn this.each( function() {\r\n\t\t\t\tif ( !this.id ) {\r\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t};\r\n\t} )(),\r\n\r\n\tremoveUniqueId: function() {\r\n\t\treturn this.each( function() {\r\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\r\n\t\t\t\t$( this ).removeAttr( \"id\" );\r\n\t\t\t}\r\n\t\t} );\r\n\t}\r\n} );\r\n\r\n\r\n/*!\r\n * jQuery UI Accordion 1.12.1\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n */\r\n\r\n//>>label: Accordion\r\n//>>group: Widgets\r\n// jscs:disable maximumLineLength\r\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\r\n// jscs:enable maximumLineLength\r\n//>>docs: http://api.jqueryui.com/accordion/\r\n//>>demos: http://jqueryui.com/accordion/\r\n//>>css.structure: ../../themes/base/core.css\r\n//>>css.structure: ../../themes/base/accordion.css\r\n//>>css.theme: ../../themes/base/theme.css\r\n\r\n\r\n\r\nvar widgetsAccordion = $.widget( \"ui.accordion\", {\r\n\tversion: \"1.12.1\",\r\n\toptions: {\r\n\t\tactive: 0,\r\n\t\tanimate: {},\r\n\t\tclasses: {\r\n\t\t\t\"ui-accordion-header\": \"ui-corner-top\",\r\n\t\t\t\"ui-accordion-header-collapsed\": \"ui-corner-all\",\r\n\t\t\t\"ui-accordion-content\": \"ui-corner-bottom\"\r\n\t\t},\r\n\t\tcollapsible: false,\r\n\t\tevent: \"click\",\r\n\t\theader: \"> li > :first-child, > :not(li):even\",\r\n\t\theightStyle: \"auto\",\r\n\t\ticons: {\r\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\r\n\t\t\theader: \"ui-icon-triangle-1-e\"\r\n\t\t},\r\n\r\n\t\t// Callbacks\r\n\t\tactivate: null,\r\n\t\tbeforeActivate: null\r\n\t},\r\n\r\n\thideProps: {\r\n\t\tborderTopWidth: \"hide\",\r\n\t\tborderBottomWidth: \"hide\",\r\n\t\tpaddingTop: \"hide\",\r\n\t\tpaddingBottom: \"hide\",\r\n\t\theight: \"hide\"\r\n\t},\r\n\r\n\tshowProps: {\r\n\t\tborderTopWidth: \"show\",\r\n\t\tborderBottomWidth: \"show\",\r\n\t\tpaddingTop: \"show\",\r\n\t\tpaddingBottom: \"show\",\r\n\t\theight: \"show\"\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tvar options = this.options;\r\n\r\n\t\tthis.prevShow = this.prevHide = $();\r\n\t\tthis._addClass( \"ui-accordion\", \"ui-widget ui-helper-reset\" );\r\n\t\tthis.element.attr( \"role\", \"tablist\" );\r\n\r\n\t\t// Don't allow collapsible: false and active: false / null\r\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\r\n\t\t\toptions.active = 0;\r\n\t\t}\r\n\r\n\t\tthis._processPanels();\r\n\r\n\t\t// handle negative values\r\n\t\tif ( options.active < 0 ) {\r\n\t\t\toptions.active += this.headers.length;\r\n\t\t}\r\n\t\tthis._refresh();\r\n\t},\r\n\r\n\t_getCreateEventData: function() {\r\n\t\treturn {\r\n\t\t\theader: this.active,\r\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\r\n\t\t};\r\n\t},\r\n\r\n\t_createIcons: function() {\r\n\t\tvar icon, children,\r\n\t\t\ticons = this.options.icons;\r\n\r\n\t\tif ( icons ) {\r\n\t\t\ticon = $( \"\" );\r\n\t\t\tthis._addClass( icon, \"ui-accordion-header-icon\", \"ui-icon \" + icons.header );\r\n\t\t\ticon.prependTo( this.headers );\r\n\t\t\tchildren = this.active.children( \".ui-accordion-header-icon\" );\r\n\t\t\tthis._removeClass( children, icons.header )\r\n\t\t\t\t._addClass( children, null, icons.activeHeader )\r\n\t\t\t\t._addClass( this.headers, \"ui-accordion-icons\" );\r\n\t\t}\r\n\t},\r\n\r\n\t_destroyIcons: function() {\r\n\t\tthis._removeClass( this.headers, \"ui-accordion-icons\" );\r\n\t\tthis.headers.children( \".ui-accordion-header-icon\" ).remove();\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tvar contents;\r\n\r\n\t\t// Clean up main element\r\n\t\tthis.element.removeAttr( \"role\" );\r\n\r\n\t\t// Clean up headers\r\n\t\tthis.headers\r\n\t\t\t.removeAttr( \"role aria-expanded aria-selected aria-controls tabIndex\" )\r\n\t\t\t.removeUniqueId();\r\n\r\n\t\tthis._destroyIcons();\r\n\r\n\t\t// Clean up content panels\r\n\t\tcontents = this.headers.next()\r\n\t\t\t.css( \"display\", \"\" )\r\n\t\t\t.removeAttr( \"role aria-hidden aria-labelledby\" )\r\n\t\t\t.removeUniqueId();\r\n\r\n\t\tif ( this.options.heightStyle !== \"content\" ) {\r\n\t\t\tcontents.css( \"height\", \"\" );\r\n\t\t}\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tif ( key === \"active\" ) {\r\n\r\n\t\t\t// _activate() will handle invalid values and update this.options\r\n\t\t\tthis._activate( value );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( key === \"event\" ) {\r\n\t\t\tif ( this.options.event ) {\r\n\t\t\t\tthis._off( this.headers, this.options.event );\r\n\t\t\t}\r\n\t\t\tthis._setupEvents( value );\r\n\t\t}\r\n\r\n\t\tthis._super( key, value );\r\n\r\n\t\t// Setting collapsible: false while collapsed; open first panel\r\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\r\n\t\t\tthis._activate( 0 );\r\n\t\t}\r\n\r\n\t\tif ( key === \"icons\" ) {\r\n\t\t\tthis._destroyIcons();\r\n\t\t\tif ( value ) {\r\n\t\t\t\tthis._createIcons();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_setOptionDisabled: function( value ) {\r\n\t\tthis._super( value );\r\n\r\n\t\tthis.element.attr( \"aria-disabled\", value );\r\n\r\n\t\t// Support: IE8 Only\r\n\t\t// #5332 / #6059 - opacity doesn't cascade to positioned elements in IE\r\n\t\t// so we need to add the disabled class to the headers and panels\r\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\r\n\t\tthis._toggleClass( this.headers.add( this.headers.next() ), null, \"ui-state-disabled\",\r\n\t\t\t!!value );\r\n\t},\r\n\r\n\t_keydown: function( event ) {\r\n\t\tif ( event.altKey || event.ctrlKey ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar keyCode = $.ui.keyCode,\r\n\t\t\tlength = this.headers.length,\r\n\t\t\tcurrentIndex = this.headers.index( event.target ),\r\n\t\t\ttoFocus = false;\r\n\r\n\t\tswitch ( event.keyCode ) {\r\n\t\tcase keyCode.RIGHT:\r\n\t\tcase keyCode.DOWN:\r\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\r\n\t\t\tbreak;\r\n\t\tcase keyCode.LEFT:\r\n\t\tcase keyCode.UP:\r\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\r\n\t\t\tbreak;\r\n\t\tcase keyCode.SPACE:\r\n\t\tcase keyCode.ENTER:\r\n\t\t\tthis._eventHandler( event );\r\n\t\t\tbreak;\r\n\t\tcase keyCode.HOME:\r\n\t\t\ttoFocus = this.headers[ 0 ];\r\n\t\t\tbreak;\r\n\t\tcase keyCode.END:\r\n\t\t\ttoFocus = this.headers[ length - 1 ];\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif ( toFocus ) {\r\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\r\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\r\n\t\t\t$( toFocus ).trigger( \"focus\" );\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t},\r\n\r\n\t_panelKeyDown: function( event ) {\r\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\r\n\t\t\t$( event.currentTarget ).prev().trigger( \"focus\" );\r\n\t\t}\r\n\t},\r\n\r\n\trefresh: function() {\r\n\t\tvar options = this.options;\r\n\t\tthis._processPanels();\r\n\r\n\t\t// Was collapsed or no panel\r\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\r\n\t\t\t\t!this.headers.length ) {\r\n\t\t\toptions.active = false;\r\n\t\t\tthis.active = $();\r\n\r\n\t\t// active false only when collapsible is true\r\n\t\t} else if ( options.active === false ) {\r\n\t\t\tthis._activate( 0 );\r\n\r\n\t\t// was active, but active panel is gone\r\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\r\n\r\n\t\t\t// all remaining panel are disabled\r\n\t\t\tif ( this.headers.length === this.headers.find( \".ui-state-disabled\" ).length ) {\r\n\t\t\t\toptions.active = false;\r\n\t\t\t\tthis.active = $();\r\n\r\n\t\t\t// activate previous panel\r\n\t\t\t} else {\r\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\r\n\t\t\t}\r\n\r\n\t\t// was active, active panel still exists\r\n\t\t} else {\r\n\r\n\t\t\t// make sure active index is correct\r\n\t\t\toptions.active = this.headers.index( this.active );\r\n\t\t}\r\n\r\n\t\tthis._destroyIcons();\r\n\r\n\t\tthis._refresh();\r\n\t},\r\n\r\n\t_processPanels: function() {\r\n\t\tvar prevHeaders = this.headers,\r\n\t\t\tprevPanels = this.panels;\r\n\r\n\t\tthis.headers = this.element.find( this.options.header );\r\n\t\tthis._addClass( this.headers, \"ui-accordion-header ui-accordion-header-collapsed\",\r\n\t\t\t\"ui-state-default\" );\r\n\r\n\t\tthis.panels = this.headers.next().filter( \":not(.ui-accordion-content-active)\" ).hide();\r\n\t\tthis._addClass( this.panels, \"ui-accordion-content\", \"ui-helper-reset ui-widget-content\" );\r\n\r\n\t\t// Avoid memory leaks (#10056)\r\n\t\tif ( prevPanels ) {\r\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\r\n\t\t\tthis._off( prevPanels.not( this.panels ) );\r\n\t\t}\r\n\t},\r\n\r\n\t_refresh: function() {\r\n\t\tvar maxHeight,\r\n\t\t\toptions = this.options,\r\n\t\t\theightStyle = options.heightStyle,\r\n\t\t\tparent = this.element.parent();\r\n\r\n\t\tthis.active = this._findActive( options.active );\r\n\t\tthis._addClass( this.active, \"ui-accordion-header-active\", \"ui-state-active\" )\r\n\t\t\t._removeClass( this.active, \"ui-accordion-header-collapsed\" );\r\n\t\tthis._addClass( this.active.next(), \"ui-accordion-content-active\" );\r\n\t\tthis.active.next().show();\r\n\r\n\t\tthis.headers\r\n\t\t\t.attr( \"role\", \"tab\" )\r\n\t\t\t.each( function() {\r\n\t\t\t\tvar header = $( this ),\r\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\r\n\t\t\t\t\tpanel = header.next(),\r\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\r\n\t\t\t\theader.attr( \"aria-controls\", panelId );\r\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\r\n\t\t\t} )\r\n\t\t\t.next()\r\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\r\n\r\n\t\tthis.headers\r\n\t\t\t.not( this.active )\r\n\t\t\t\t.attr( {\r\n\t\t\t\t\t\"aria-selected\": \"false\",\r\n\t\t\t\t\t\"aria-expanded\": \"false\",\r\n\t\t\t\t\ttabIndex: -1\r\n\t\t\t\t} )\r\n\t\t\t\t.next()\r\n\t\t\t\t\t.attr( {\r\n\t\t\t\t\t\t\"aria-hidden\": \"true\"\r\n\t\t\t\t\t} )\r\n\t\t\t\t\t.hide();\r\n\r\n\t\t// Make sure at least one header is in the tab order\r\n\t\tif ( !this.active.length ) {\r\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\r\n\t\t} else {\r\n\t\t\tthis.active.attr( {\r\n\t\t\t\t\"aria-selected\": \"true\",\r\n\t\t\t\t\"aria-expanded\": \"true\",\r\n\t\t\t\ttabIndex: 0\r\n\t\t\t} )\r\n\t\t\t\t.next()\r\n\t\t\t\t\t.attr( {\r\n\t\t\t\t\t\t\"aria-hidden\": \"false\"\r\n\t\t\t\t\t} );\r\n\t\t}\r\n\r\n\t\tthis._createIcons();\r\n\r\n\t\tthis._setupEvents( options.event );\r\n\r\n\t\tif ( heightStyle === \"fill\" ) {\r\n\t\t\tmaxHeight = parent.height();\r\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\r\n\t\t\t\tvar elem = $( this ),\r\n\t\t\t\t\tposition = elem.css( \"position\" );\r\n\r\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\r\n\t\t\t} );\r\n\r\n\t\t\tthis.headers.each( function() {\r\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\r\n\t\t\t} );\r\n\r\n\t\t\tthis.headers.next()\r\n\t\t\t\t.each( function() {\r\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\r\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\r\n\t\t\t\t} )\r\n\t\t\t\t.css( \"overflow\", \"auto\" );\r\n\t\t} else if ( heightStyle === \"auto\" ) {\r\n\t\t\tmaxHeight = 0;\r\n\t\t\tthis.headers.next()\r\n\t\t\t\t.each( function() {\r\n\t\t\t\t\tvar isVisible = $( this ).is( \":visible\" );\r\n\t\t\t\t\tif ( !isVisible ) {\r\n\t\t\t\t\t\t$( this ).show();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\r\n\t\t\t\t\tif ( !isVisible ) {\r\n\t\t\t\t\t\t$( this ).hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t} )\r\n\t\t\t\t.height( maxHeight );\r\n\t\t}\r\n\t},\r\n\r\n\t_activate: function( index ) {\r\n\t\tvar active = this._findActive( index )[ 0 ];\r\n\r\n\t\t// Trying to activate the already active panel\r\n\t\tif ( active === this.active[ 0 ] ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Trying to collapse, simulate a click on the currently active header\r\n\t\tactive = active || this.active[ 0 ];\r\n\r\n\t\tthis._eventHandler( {\r\n\t\t\ttarget: active,\r\n\t\t\tcurrentTarget: active,\r\n\t\t\tpreventDefault: $.noop\r\n\t\t} );\r\n\t},\r\n\r\n\t_findActive: function( selector ) {\r\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\r\n\t},\r\n\r\n\t_setupEvents: function( event ) {\r\n\t\tvar events = {\r\n\t\t\tkeydown: \"_keydown\"\r\n\t\t};\r\n\t\tif ( event ) {\r\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\r\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\tthis._off( this.headers.add( this.headers.next() ) );\r\n\t\tthis._on( this.headers, events );\r\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" } );\r\n\t\tthis._hoverable( this.headers );\r\n\t\tthis._focusable( this.headers );\r\n\t},\r\n\r\n\t_eventHandler: function( event ) {\r\n\t\tvar activeChildren, clickedChildren,\r\n\t\t\toptions = this.options,\r\n\t\t\tactive = this.active,\r\n\t\t\tclicked = $( event.currentTarget ),\r\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\r\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\r\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\r\n\t\t\ttoHide = active.next(),\r\n\t\t\teventData = {\r\n\t\t\t\toldHeader: active,\r\n\t\t\t\toldPanel: toHide,\r\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\r\n\t\t\t\tnewPanel: toShow\r\n\t\t\t};\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (\r\n\r\n\t\t\t\t// click on active header, but not collapsible\r\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\r\n\r\n\t\t\t\t// allow canceling activation\r\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\r\n\r\n\t\t// When the call to ._toggle() comes after the class changes\r\n\t\t// it causes a very odd bug in IE 8 (see #6720)\r\n\t\tthis.active = clickedIsActive ? $() : clicked;\r\n\t\tthis._toggle( eventData );\r\n\r\n\t\t// Switch classes\r\n\t\t// corner classes on the previously active header stay after the animation\r\n\t\tthis._removeClass( active, \"ui-accordion-header-active\", \"ui-state-active\" );\r\n\t\tif ( options.icons ) {\r\n\t\t\tactiveChildren = active.children( \".ui-accordion-header-icon\" );\r\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\r\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\r\n\t\t}\r\n\r\n\t\tif ( !clickedIsActive ) {\r\n\t\t\tthis._removeClass( clicked, \"ui-accordion-header-collapsed\" )\r\n\t\t\t\t._addClass( clicked, \"ui-accordion-header-active\", \"ui-state-active\" );\r\n\t\t\tif ( options.icons ) {\r\n\t\t\t\tclickedChildren = clicked.children( \".ui-accordion-header-icon\" );\r\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\r\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\r\n\t\t\t}\r\n\r\n\t\t\tthis._addClass( clicked.next(), \"ui-accordion-content-active\" );\r\n\t\t}\r\n\t},\r\n\r\n\t_toggle: function( data ) {\r\n\t\tvar toShow = data.newPanel,\r\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\r\n\r\n\t\t// Handle activating a panel during the animation for another activation\r\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\r\n\t\tthis.prevShow = toShow;\r\n\t\tthis.prevHide = toHide;\r\n\r\n\t\tif ( this.options.animate ) {\r\n\t\t\tthis._animate( toShow, toHide, data );\r\n\t\t} else {\r\n\t\t\ttoHide.hide();\r\n\t\t\ttoShow.show();\r\n\t\t\tthis._toggleComplete( data );\r\n\t\t}\r\n\r\n\t\ttoHide.attr( {\r\n\t\t\t\"aria-hidden\": \"true\"\r\n\t\t} );\r\n\t\ttoHide.prev().attr( {\r\n\t\t\t\"aria-selected\": \"false\",\r\n\t\t\t\"aria-expanded\": \"false\"\r\n\t\t} );\r\n\r\n\t\t// if we're switching panels, remove the old header from the tab order\r\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\r\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\r\n\t\tif ( toShow.length && toHide.length ) {\r\n\t\t\ttoHide.prev().attr( {\r\n\t\t\t\t\"tabIndex\": -1,\r\n\t\t\t\t\"aria-expanded\": \"false\"\r\n\t\t\t} );\r\n\t\t} else if ( toShow.length ) {\r\n\t\t\tthis.headers.filter( function() {\r\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\r\n\t\t\t} )\r\n\t\t\t\t.attr( \"tabIndex\", -1 );\r\n\t\t}\r\n\r\n\t\ttoShow\r\n\t\t\t.attr( \"aria-hidden\", \"false\" )\r\n\t\t\t.prev()\r\n\t\t\t\t.attr( {\r\n\t\t\t\t\t\"aria-selected\": \"true\",\r\n\t\t\t\t\t\"aria-expanded\": \"true\",\r\n\t\t\t\t\ttabIndex: 0\r\n\t\t\t\t} );\r\n\t},\r\n\r\n\t_animate: function( toShow, toHide, data ) {\r\n\t\tvar total, easing, duration,\r\n\t\t\tthat = this,\r\n\t\t\tadjust = 0,\r\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\r\n\t\t\tdown = toShow.length &&\r\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\r\n\t\t\tanimate = this.options.animate || {},\r\n\t\t\toptions = down && animate.down || animate,\r\n\t\t\tcomplete = function() {\r\n\t\t\t\tthat._toggleComplete( data );\r\n\t\t\t};\r\n\r\n\t\tif ( typeof options === \"number\" ) {\r\n\t\t\tduration = options;\r\n\t\t}\r\n\t\tif ( typeof options === \"string\" ) {\r\n\t\t\teasing = options;\r\n\t\t}\r\n\r\n\t\t// fall back from options to animation in case of partial down settings\r\n\t\teasing = easing || options.easing || animate.easing;\r\n\t\tduration = duration || options.duration || animate.duration;\r\n\r\n\t\tif ( !toHide.length ) {\r\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\r\n\t\t}\r\n\t\tif ( !toShow.length ) {\r\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\r\n\t\t}\r\n\r\n\t\ttotal = toShow.show().outerHeight();\r\n\t\ttoHide.animate( this.hideProps, {\r\n\t\t\tduration: duration,\r\n\t\t\teasing: easing,\r\n\t\t\tstep: function( now, fx ) {\r\n\t\t\t\tfx.now = Math.round( now );\r\n\t\t\t}\r\n\t\t} );\r\n\t\ttoShow\r\n\t\t\t.hide()\r\n\t\t\t.animate( this.showProps, {\r\n\t\t\t\tduration: duration,\r\n\t\t\t\teasing: easing,\r\n\t\t\t\tcomplete: complete,\r\n\t\t\t\tstep: function( now, fx ) {\r\n\t\t\t\t\tfx.now = Math.round( now );\r\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\r\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\r\n\t\t\t\t\t\t\tadjust += fx.now;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\r\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\r\n\t\t\t\t\t\tadjust = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t},\r\n\r\n\t_toggleComplete: function( data ) {\r\n\t\tvar toHide = data.oldPanel,\r\n\t\t\tprev = toHide.prev();\r\n\r\n\t\tthis._removeClass( toHide, \"ui-accordion-content-active\" );\r\n\t\tthis._removeClass( prev, \"ui-accordion-header-active\" )\r\n\t\t\t._addClass( prev, \"ui-accordion-header-collapsed\" );\r\n\r\n\t\t// Work around for rendering bug in IE (#5421)\r\n\t\tif ( toHide.length ) {\r\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\r\n\t\t}\r\n\t\tthis._trigger( \"activate\", null, data );\r\n\t}\r\n} );\r\n\r\n\r\n\r\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\r\n\tvar activeElement;\r\n\r\n\t// Support: IE 9 only\r\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an