{"version":3,"names":["$","ui","version","widget","mouse","widgetEventPrefix","options","addClasses","appendTo","axis","connectToSortable","containment","cursor","cursorAt","grid","handle","helper","iframeFix","opacity","refreshPositions","revert","revertDuration","scope","scroll","scrollSensitivity","scrollSpeed","snap","snapMode","snapTolerance","stack","zIndex","drag","start","stop","_create","this","_setPositionRelative","_addClass","_setHandleClassName","_mouseInit","_setOption","key","value","_super","_removeHandleClassName","_destroy","element","is","destroyOnClear","_mouseDestroy","_mouseCapture","event","o","disabled","target","closest","length","_getHandle","_blurActiveElement","_blockFrames","selector","iframeBlocks","document","find","map","iframe","css","parent","outerWidth","outerHeight","offset","_unblockFrames","remove","activeElement","safeActiveElement","safeBlur","_mouseStart","_createHelper","_cacheHelperProportions","ddmanager","current","_cacheMargins","cssPosition","scrollParent","offsetParent","hasFixedAncestor","parents","filter","positionAbs","_refreshOffsets","originalPosition","position","_generatePosition","originalPageX","pageX","originalPageY","pageY","_adjustOffsetFromHelper","_setContainment","_trigger","_clear","dropBehaviour","prepareOffsets","_mouseDrag","dragStart","top","margins","left","_getParentOffset","relative","_getRelativeOffset","click","noPropagation","_convertPositionTo","_uiHash","_mouseUp","Event","style","_mouseStop","that","dropped","drop","isFunction","call","animate","parseInt","dragStop","handleElement","trigger","prototype","cancel","_removeClass","helperIsFunction","apply","clone","removeAttr","parentNode","test","obj","split","isArray","helperProportions","width","right","height","bottom","_isRootNode","tagName","po","contains","scrollLeft","scrollTop","p","scrollIsRootNode","isUserScrollable","c","ce","relativeContainer","constructor","Array","Math","max","scrollWidth","offsetWidth","scrollHeight","offsetHeight","body","window","d","pos","mod","constrainPosition","co","round","cancelHelperRemoval","destroy","type","plugin","Widget","plugins","add","draggable","uiSortable","extend","item","sortables","each","sortable","push","isOver","_storedCSS","placeholder","_helper","innermostIntersecting","_intersectsWith","containerCache","_parent","currentItem","data","fromOutside","_revert","instance","t","_cursor","_opacity","i","scrollParentNotHidden","overflowOffset","scrolled","snapElements","String","items","$t","$o","inst","ts","bs","ls","rs","l","r","b","first","x1","x2","y1","y2","ownerDocument","snapping","release","snapItem","abs","min","group","makeArray","sort","a","_zIndex","accept","greedy","tolerance","activate","deactivate","out","over","proportions","isover","isout","arguments","_addToManager","droppables","_splice","splice","_activate","_addActiveClass","_deactivate","_removeActiveClass","_over","_addHoverClass","_out","_removeHoverClass","_drop","custom","childrenIntersection","not","droppable","intersect","isOverAxis","x","reference","size","toleranceMode","absolute","default","j","m","list","addBack","droppablesLoop","visible","slice","parentsUntil","on","greedyChild","parentInstance","intersects","off","uiBackCompat","hoverClass","activeClass","addClass","removeClass","alsoResize","animateDuration","animateEasing","aspectRatio","autoHide","classes","ghost","handles","maxHeight","maxWidth","minHeight","minWidth","resize","_num","parseFloat","_isNumber","isNaN","_hasScroll","el","has","_aspectRatio","originalElement","_proportionallyResizeElements","nodeName","match","wrap","resizable","elementIsWrapper","marginTop","marginRight","marginBottom","marginLeft","originalResizeStyle","zoom","display","_proportionallyResize","_setupHandles","_handles","show","resizing","hide","wrapper","exp","removeData","insertAfter","_removeHandles","n","hname","e","s","w","se","sw","ne","nw","trim","append","_renderAxis","padPos","padWrapper","children","jquery","nodeType","_on","mousedown","_mouseDown","join","disableSelection","className","capture","curleft","curtop","_renderProxy","originalSize","sizeDiff","originalMousePosition","_propagate","props","smp","dx","dy","_change","_updatePrevProperties","_updateVirtualBoundaries","shiftKey","_updateRatio","_respectSize","_updateCache","_applyChanges","isEmptyObject","pr","ista","soffseth","soffsetw","prevPosition","prevSize","forceAspectRatio","pMinWidth","pMaxWidth","pMinHeight","pMaxHeight","Infinity","_vBoundaries","cpos","csize","ismaxw","ismaxh","isminw","isminh","dw","dh","cw","ch","_getPaddingPlusBorderDimensions","widths","borders","paddings","prel","outerDimensions","elementOffset","cs","duration","easing","step","oc","get","containerElement","containerOffset","containerPosition","parentData","name","containerSize","innerHeight","innerWidth","woset","hoset","isParent","isOffsetRelative","cp","pRatio","cop","continueResize","ho","h","os","op","delta","prop","sum","margin","removeChild","gridX","gridY","ox","oy","newWidth","newHeight","isMaxWidth","isMaxHeight","isMinWidth","isMinHeight","autoRefresh","distance","selected","selecting","unselected","unselecting","dragged","refresh","elementPos","selectees","$this","selecteeOffset","$element","startselected","hasClass","opos","selectee","metaKey","ctrlKey","doSelect","tmp","hit","ready","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","beforeStop","change","receive","update","_isOverAxis","_isFloating","widgetName","overrideHandle","validHandle","reverting","_refreshItems","_removeCurrentsFromItems","noActivation","currentContainer","domPosition","prev","_createPlaceholder","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","_preserveHelperProportions","containers","dragging","itemElement","intersection","lastPositionAbs","_intersectsWithPointer","direction","_intersectsWithSides","_rearrange","_contactContainers","cur","animation","_noFinalSort","after","prepend","serialize","_getItemsAsjQuery","connected","str","res","attr","attribute","expression","toArray","ret","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","floating","verticalDirection","horizontalDirection","_getDragVerticalDirection","_getDragHorizontalDirection","isOverBottomHalf","isOverRightHalf","_connectWith","queries","widgetFullName","addItems","grep","targetData","_queries","queriesLength","fast","toleranceElement","refreshContainers","toLowerCase","_createTrPlaceholder","eq","container","sourceTr","targetTr","dist","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","appendChild","ie","hardRefresh","insertBefore","nextSibling","counter","_delay","delayedTriggers","before","delayEvent","_inst","sender","factory","jQuery"],"sources":["jquery-ui.03.interactions.js"],"sourcesContent":["\n(function( factory ) {\n\tfactory( jQuery );\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( $.isFunction( this.options.revert ) &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\t( inst.options.snap.release &&\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\t( inst.options.snap.snap &&\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) ) );\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) { return; }\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Droppable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: http://api.jqueryui.com/droppable/\n//>>demos: http://jqueryui.com/droppable/\n\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = $.isFunction( accept ) ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\to.addClasses && this._addClass( \"ui-droppable\" );\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = $.isFunction( value ) ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( \":data(ui-droppable)\" )\n\t\t\t.not( \".ui-draggable-dragging\" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\tintersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false; }\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.13 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( \"ui-droppable-hover\" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( \"ui-droppable-hover\" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( \"ui-droppable-active\" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( \"ui-droppable-active\" );\n\t}\n} );\n\nvar intersect = $.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\tintersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).on( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t\"isout\" :\n\t\t\t\t\t( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === \"isout\" ? \"isover\" : \"isout\" ] = false;\n\t\t\tthis[ c === \"isover\" ? \"_over\" : \"_out\" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).off( \"scroll.droppable\" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( \"ui.droppable\", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Resizable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: http://api.jqueryui.com/resizable/\n//>>demos: http://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper' style='overflow: hidden;'></div>\" ).css( {\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\t\t\tthis.originalElement.css( \"margin\", 0 );\n\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\t// Support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css( margins );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" )\n\t\t\t\t\t.find( \".ui-resizable-handle\" )\n\t\t\t\t\t\t.remove();\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = $.trim( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tthis.element.append( axis );\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._handles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div style='overflow:hidden;'></div>\" );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\t( n !== \"resize\" && this._trigger( n, event, this.ui() ) );\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll ( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this );\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseFloat( el.width() ), height: parseFloat( el.height() ),\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat !== false && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Selectable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: http://api.jqueryui.com/selectable/\n//>>demos: http://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\n\nvar widgetsSelectable = $.widget( \"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( \"ui-selectable\" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, \"ui-selectee\" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( \"ui-selected\" ),\n\t\t\t\t\tselecting: $this.hasClass( \"ui-selecting\" ),\n\t\t\t\t\tunselecting: $this.hasClass( \"ui-unselecting\" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( \"<div>\" );\n\t\tthis._addClass( this.helper, \"ui-selectable-helper\" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( \"selectable-item\" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( \"start\", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( \".ui-selected\" ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, \"selectable-item\" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( \"ui-selected\" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? \"ui-unselecting\" : \"ui-selected\" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? \"ui-selecting\" : \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left   = selectee.left   + that.elementPos.left;\n\t\t\toffset.right  = selectee.right  + that.elementPos.left;\n\t\t\toffset.top    = selectee.top    + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === \"touch\" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n                    offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === \"fit\" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n                    offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( \".ui-unselecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( \"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( \".ui-selecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" )\n\t\t\t\t._addClass( selectee.$element, \"ui-selected\" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( \"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( \"stop\", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t// Execute the drag once - this causes the helper not to be visiblebefore getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event );\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tif ( !this.lastPositionAbs ) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( this.options.scroll ) {\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ? \"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" || this._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this._getDragVerticalDirection();\n\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 )\n\t\t\t: ( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ $.isFunction( this.options.items ) ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ $.isFunction( this.options.items ) ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( item.instance !== this.currentContainer && this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming\n\t\t\t\t\t// from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif ( !p.height() ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ?\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true ) :\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction( o.helper ) ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\t$( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\ta ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n\n}));\n"],"mappings":"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"}