http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/71e53ae5/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
----------------------------------------------------------------------
diff --git 
a/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
 
b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
new file mode 100755
index 0000000..ecac757
--- /dev/null
+++ 
b/nar-bundles/framework-bundle/framework/web/nifi-web-ui/src/main/webapp/js/jquery/ui-smoothness/jquery-ui-1.10.4.js
@@ -0,0 +1,15008 @@
+/*! jQuery UI - v1.10.4 - 2014-12-08
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, 
jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, 
jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, 
jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, 
jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, 
jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, 
jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, 
jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, 
jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, 
jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, 
jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, 
jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, 
jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, 
jquery.ui.effect-transfer.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( $, undefined ) {
+
+var uuid = 0,
+       runiqueId = /^ui-id-\d+$/;
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+$.ui = $.ui || {};
+
+$.extend( $.ui, {
+       version: "1.10.4",
+
+       keyCode: {
+               BACKSPACE: 8,
+               COMMA: 188,
+               DELETE: 46,
+               DOWN: 40,
+               END: 35,
+               ENTER: 13,
+               ESCAPE: 27,
+               HOME: 36,
+               LEFT: 37,
+               NUMPAD_ADD: 107,
+               NUMPAD_DECIMAL: 110,
+               NUMPAD_DIVIDE: 111,
+               NUMPAD_ENTER: 108,
+               NUMPAD_MULTIPLY: 106,
+               NUMPAD_SUBTRACT: 109,
+               PAGE_DOWN: 34,
+               PAGE_UP: 33,
+               PERIOD: 190,
+               RIGHT: 39,
+               SPACE: 32,
+               TAB: 9,
+               UP: 38
+       }
+});
+
+// plugins
+$.fn.extend({
+       focus: (function( orig ) {
+               return function( delay, fn ) {
+                       return typeof delay === "number" ?
+                               this.each(function() {
+                                       var elem = this;
+                                       setTimeout(function() {
+                                               $( elem ).focus();
+                                               if ( fn ) {
+                                                       fn.call( elem );
+                                               }
+                                       }, delay );
+                               }) :
+                               orig.apply( this, arguments );
+               };
+       })( $.fn.focus ),
+
+       scrollParent: function() {
+               var scrollParent;
+               if (($.ui.ie && 
(/(static|relative)/).test(this.css("position"))) || 
(/absolute/).test(this.css("position"))) {
+                       scrollParent = this.parents().filter(function() {
+                               return 
(/(relative|absolute|fixed)/).test($.css(this,"position")) && 
(/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+                       }).eq(0);
+               } else {
+                       scrollParent = this.parents().filter(function() {
+                               return 
(/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
+                       }).eq(0);
+               }
+
+               return (/fixed/).test(this.css("position")) || 
!scrollParent.length ? $(document) : scrollParent;
+       },
+
+       zIndex: function( zIndex ) {
+               if ( zIndex !== undefined ) {
+                       return this.css( "zIndex", zIndex );
+               }
+
+               if ( this.length ) {
+                       var elem = $( this[ 0 ] ), position, value;
+                       while ( elem.length && elem[ 0 ] !== document ) {
+                               // Ignore z-index if position is set to a value 
where z-index is ignored by the browser
+                               // This makes behavior of this function 
consistent across browsers
+                               // WebKit always returns auto if the element is 
positioned
+                               position = elem.css( "position" );
+                               if ( position === "absolute" || position === 
"relative" || position === "fixed" ) {
+                                       // IE returns 0 when zIndex is not 
specified
+                                       // other browsers return a string
+                                       // we ignore the case of nested 
elements with an explicit value of 0
+                                       // <div style="z-index: -10;"><div 
style="z-index: 0;"></div></div>
+                                       value = parseInt( elem.css( "zIndex" ), 
10 );
+                                       if ( !isNaN( value ) && value !== 0 ) {
+                                               return value;
+                                       }
+                               }
+                               elem = elem.parent();
+                       }
+               }
+
+               return 0;
+       },
+
+       uniqueId: function() {
+               return this.each(function() {
+                       if ( !this.id ) {
+                               this.id = "ui-id-" + (++uuid);
+                       }
+               });
+       },
+
+       removeUniqueId: function() {
+               return this.each(function() {
+                       if ( runiqueId.test( this.id ) ) {
+                               $( this ).removeAttr( "id" );
+                       }
+               });
+       }
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+       var map, mapName, img,
+               nodeName = element.nodeName.toLowerCase();
+       if ( "area" === nodeName ) {
+               map = element.parentNode;
+               mapName = map.name;
+               if ( !element.href || !mapName || map.nodeName.toLowerCase() 
!== "map" ) {
+                       return false;
+               }
+               img = $( "img[usemap=#" + mapName + "]" )[0];
+               return !!img && visible( img );
+       }
+       return ( /input|select|textarea|button|object/.test( nodeName ) ?
+               !element.disabled :
+               "a" === nodeName ?
+                       element.href || isTabIndexNotNaN :
+                       isTabIndexNotNaN) &&
+               // the element and all of its ancestors must be visible
+               visible( element );
+}
+
+function visible( element ) {
+       return $.expr.filters.visible( element ) &&
+               !$( element ).parents().addBack().filter(function() {
+                       return $.css( this, "visibility" ) === "hidden";
+               }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+       data: $.expr.createPseudo ?
+               $.expr.createPseudo(function( dataName ) {
+                       return function( elem ) {
+                               return !!$.data( elem, dataName );
+                       };
+               }) :
+               // support: jQuery <1.8
+               function( elem, i, match ) {
+                       return !!$.data( elem, match[ 3 ] );
+               },
+
+       focusable: function( element ) {
+               return focusable( element, !isNaN( $.attr( element, "tabindex" 
) ) );
+       },
+
+       tabbable: function( element ) {
+               var tabIndex = $.attr( element, "tabindex" ),
+                       isTabIndexNaN = isNaN( tabIndex );
+               return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( 
element, !isTabIndexNaN );
+       }
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+       $.each( [ "Width", "Height" ], function( i, name ) {
+               var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", 
"Bottom" ],
+                       type = name.toLowerCase(),
+                       orig = {
+                               innerWidth: $.fn.innerWidth,
+                               innerHeight: $.fn.innerHeight,
+                               outerWidth: $.fn.outerWidth,
+                               outerHeight: $.fn.outerHeight
+                       };
+
+               function reduce( elem, size, border, margin ) {
+                       $.each( side, function() {
+                               size -= parseFloat( $.css( elem, "padding" + 
this ) ) || 0;
+                               if ( border ) {
+                                       size -= parseFloat( $.css( elem, 
"border" + this + "Width" ) ) || 0;
+                               }
+                               if ( margin ) {
+                                       size -= parseFloat( $.css( elem, 
"margin" + this ) ) || 0;
+                               }
+                       });
+                       return size;
+               }
+
+               $.fn[ "inner" + name ] = function( size ) {
+                       if ( size === undefined ) {
+                               return orig[ "inner" + name ].call( this );
+                       }
+
+                       return this.each(function() {
+                               $( this ).css( type, reduce( this, size ) + 
"px" );
+                       });
+               };
+
+               $.fn[ "outer" + name] = function( size, margin ) {
+                       if ( typeof size !== "number" ) {
+                               return orig[ "outer" + name ].call( this, size 
);
+                       }
+
+                       return this.each(function() {
+                               $( this).css( type, reduce( this, size, true, 
margin ) + "px" );
+                       });
+               };
+       });
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+       $.fn.addBack = function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter( selector )
+               );
+       };
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+       $.fn.removeData = (function( removeData ) {
+               return function( key ) {
+                       if ( arguments.length ) {
+                               return removeData.call( this, $.camelCase( key 
) );
+                       } else {
+                               return removeData.call( this );
+                       }
+               };
+       })( $.fn.removeData );
+}
+
+
+
+
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.support.selectstart = "onselectstart" in document.createElement( "div" );
+$.fn.extend({
+       disableSelection: function() {
+               return this.bind( ( $.support.selectstart ? "selectstart" : 
"mousedown" ) +
+                       ".ui-disableSelection", function( event ) {
+                               event.preventDefault();
+                       });
+       },
+
+       enableSelection: function() {
+               return this.unbind( ".ui-disableSelection" );
+       }
+});
+
+$.extend( $.ui, {
+       // $.ui.plugin is deprecated. Use $.widget() extensions instead.
+       plugin: {
+               add: function( module, option, set ) {
+                       var i,
+                               proto = $.ui[ module ].prototype;
+                       for ( i in set ) {
+                               proto.plugins[ i ] = proto.plugins[ i ] || [];
+                               proto.plugins[ i ].push( [ option, set[ i ] ] );
+                       }
+               },
+               call: function( instance, name, args ) {
+                       var i,
+                               set = instance.plugins[ name ];
+                       if ( !set || !instance.element[ 0 ].parentNode || 
instance.element[ 0 ].parentNode.nodeType === 11 ) {
+                               return;
+                       }
+
+                       for ( i = 0; i < set.length; i++ ) {
+                               if ( instance.options[ set[ i ][ 0 ] ] ) {
+                                       set[ i ][ 1 ].apply( instance.element, 
args );
+                               }
+                       }
+               }
+       },
+
+       // only used by resizable
+       hasScroll: function( el, a ) {
+
+               //If overflow is hidden, the element might have extra content, 
but the user wants to hide it
+               if ( $( el ).css( "overflow" ) === "hidden") {
+                       return false;
+               }
+
+               var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+                       has = false;
+
+               if ( el[ scroll ] > 0 ) {
+                       return true;
+               }
+
+               // TODO: determine which cases actually cause this to happen
+               // if the element doesn't have the scroll set, see if it's 
possible to
+               // set the scroll
+               el[ scroll ] = 1;
+               has = ( el[ scroll ] > 0 );
+               el[ scroll ] = 0;
+               return has;
+       }
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+var uuid = 0,
+       slice = Array.prototype.slice,
+       _cleanData = $.cleanData;
+$.cleanData = function( elems ) {
+       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+               try {
+                       $( elem ).triggerHandler( "remove" );
+               // http://bugs.jquery.com/ticket/8235
+               } catch( e ) {}
+       }
+       _cleanData( elems );
+};
+
+$.widget = function( name, base, prototype ) {
+       var fullName, existingConstructor, constructor, basePrototype,
+               // proxiedPrototype allows the provided prototype to remain 
unmodified
+               // so that it can be used as a mixin for multiple widgets 
(#8876)
+               proxiedPrototype = {},
+               namespace = name.split( "." )[ 0 ];
+
+       name = name.split( "." )[ 1 ];
+       fullName = namespace + "-" + name;
+
+       if ( !prototype ) {
+               prototype = base;
+               base = $.Widget;
+       }
+
+       // create selector for plugin
+       $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+               return !!$.data( elem, fullName );
+       };
+
+       $[ namespace ] = $[ namespace ] || {};
+       existingConstructor = $[ namespace ][ name ];
+       constructor = $[ namespace ][ name ] = function( options, element ) {
+               // allow instantiation without "new" keyword
+               if ( !this._createWidget ) {
+                       return new constructor( options, element );
+               }
+
+               // allow instantiation without initializing for simple 
inheritance
+               // must use "new" keyword (the code above always passes args)
+               if ( arguments.length ) {
+                       this._createWidget( options, element );
+               }
+       };
+       // extend with the existing constructor to carry over any static 
properties
+       $.extend( constructor, existingConstructor, {
+               version: prototype.version,
+               // copy the object used to create the prototype in case we need 
to
+               // redefine the widget later
+               _proto: $.extend( {}, prototype ),
+               // track widgets that inherit from this widget in case this 
widget is
+               // redefined after a widget inherits from it
+               _childConstructors: []
+       });
+
+       basePrototype = new base();
+       // we need to make the options hash a property directly on the new 
instance
+       // otherwise we'll modify the options hash on the prototype that we're
+       // inheriting from
+       basePrototype.options = $.widget.extend( {}, basePrototype.options );
+       $.each( prototype, function( prop, value ) {
+               if ( !$.isFunction( value ) ) {
+                       proxiedPrototype[ prop ] = value;
+                       return;
+               }
+               proxiedPrototype[ prop ] = (function() {
+                       var _super = function() {
+                                       return base.prototype[ prop ].apply( 
this, arguments );
+                               },
+                               _superApply = function( args ) {
+                                       return base.prototype[ prop ].apply( 
this, args );
+                               };
+                       return function() {
+                               var __super = this._super,
+                                       __superApply = this._superApply,
+                                       returnValue;
+
+                               this._super = _super;
+                               this._superApply = _superApply;
+
+                               returnValue = value.apply( this, arguments );
+
+                               this._super = __super;
+                               this._superApply = __superApply;
+
+                               return returnValue;
+                       };
+               })();
+       });
+       constructor.prototype = $.widget.extend( basePrototype, {
+               // TODO: remove support for widgetEventPrefix
+               // always use the name + a colon as the prefix, e.g., 
draggable:start
+               // don't prefix for widgets that aren't DOM-based
+               widgetEventPrefix: existingConstructor ? 
(basePrototype.widgetEventPrefix || name) : name
+       }, proxiedPrototype, {
+               constructor: constructor,
+               namespace: namespace,
+               widgetName: name,
+               widgetFullName: fullName
+       });
+
+       // If this widget is being redefined then we need to find all widgets 
that
+       // are inheriting from it and redefine all of them so that they inherit 
from
+       // the new version of this widget. We're essentially trying to replace 
one
+       // level in the prototype chain.
+       if ( existingConstructor ) {
+               $.each( existingConstructor._childConstructors, function( i, 
child ) {
+                       var childPrototype = child.prototype;
+
+                       // redefine the child widget using the same prototype 
that was
+                       // originally used, but inherit from the new version of 
the base
+                       $.widget( childPrototype.namespace + "." + 
childPrototype.widgetName, constructor, child._proto );
+               });
+               // remove the list of existing child constructors from the old 
constructor
+               // so the old child constructors can be garbage collected
+               delete existingConstructor._childConstructors;
+       } else {
+               base._childConstructors.push( constructor );
+       }
+
+       $.widget.bridge( name, constructor );
+};
+
+$.widget.extend = function( target ) {
+       var input = slice.call( arguments, 1 ),
+               inputIndex = 0,
+               inputLength = input.length,
+               key,
+               value;
+       for ( ; inputIndex < inputLength; inputIndex++ ) {
+               for ( key in input[ inputIndex ] ) {
+                       value = input[ inputIndex ][ key ];
+                       if ( input[ inputIndex ].hasOwnProperty( key ) && value 
!== undefined ) {
+                               // Clone objects
+                               if ( $.isPlainObject( value ) ) {
+                                       target[ key ] = $.isPlainObject( 
target[ key ] ) ?
+                                               $.widget.extend( {}, target[ 
key ], value ) :
+                                               // Don't extend strings, 
arrays, etc. with objects
+                                               $.widget.extend( {}, value );
+                               // Copy everything else by reference
+                               } else {
+                                       target[ key ] = value;
+                               }
+                       }
+               }
+       }
+       return target;
+};
+
+$.widget.bridge = function( name, object ) {
+       var fullName = object.prototype.widgetFullName || name;
+       $.fn[ name ] = function( options ) {
+               var isMethodCall = typeof options === "string",
+                       args = slice.call( arguments, 1 ),
+                       returnValue = this;
+
+               // allow multiple hashes to be passed on init
+               options = !isMethodCall && args.length ?
+                       $.widget.extend.apply( null, [ options ].concat(args) ) 
:
+                       options;
+
+               if ( isMethodCall ) {
+                       this.each(function() {
+                               var methodValue,
+                                       instance = $.data( this, fullName );
+                               if ( !instance ) {
+                                       return $.error( "cannot call methods on 
" + name + " prior to initialization; " +
+                                               "attempted to call method '" + 
options + "'" );
+                               }
+                               if ( !$.isFunction( instance[options] ) || 
options.charAt( 0 ) === "_" ) {
+                                       return $.error( "no such method '" + 
options + "' for " + name + " widget instance" );
+                               }
+                               methodValue = instance[ options ].apply( 
instance, args );
+                               if ( methodValue !== instance && methodValue 
!== undefined ) {
+                                       returnValue = methodValue && 
methodValue.jquery ?
+                                               returnValue.pushStack( 
methodValue.get() ) :
+                                               methodValue;
+                                       return false;
+                               }
+                       });
+               } else {
+                       this.each(function() {
+                               var instance = $.data( this, fullName );
+                               if ( instance ) {
+                                       instance.option( options || {} 
)._init();
+                               } else {
+                                       $.data( this, fullName, new object( 
options, this ) );
+                               }
+                       });
+               }
+
+               return returnValue;
+       };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+       widgetName: "widget",
+       widgetEventPrefix: "",
+       defaultElement: "<div>",
+       options: {
+               disabled: false,
+
+               // callbacks
+               create: null
+       },
+       _createWidget: function( options, element ) {
+               element = $( element || this.defaultElement || this )[ 0 ];
+               this.element = $( element );
+               this.uuid = uuid++;
+               this.eventNamespace = "." + this.widgetName + this.uuid;
+               this.options = $.widget.extend( {},
+                       this.options,
+                       this._getCreateOptions(),
+                       options );
+
+               this.bindings = $();
+               this.hoverable = $();
+               this.focusable = $();
+
+               if ( element !== this ) {
+                       $.data( element, this.widgetFullName, this );
+                       this._on( true, this.element, {
+                               remove: function( event ) {
+                                       if ( event.target === element ) {
+                                               this.destroy();
+                                       }
+                               }
+                       });
+                       this.document = $( element.style ?
+                               // element within the document
+                               element.ownerDocument :
+                               // element is window or document
+                               element.document || element );
+                       this.window = $( this.document[0].defaultView || 
this.document[0].parentWindow );
+               }
+
+               this._create();
+               this._trigger( "create", null, this._getCreateEventData() );
+               this._init();
+       },
+       _getCreateOptions: $.noop,
+       _getCreateEventData: $.noop,
+       _create: $.noop,
+       _init: $.noop,
+
+       destroy: function() {
+               this._destroy();
+               // we can probably remove the unbind calls in 2.0
+               // all event bindings should go through this._on()
+               this.element
+                       .unbind( this.eventNamespace )
+                       // 1.9 BC for #7810
+                       // TODO remove dual storage
+                       .removeData( this.widgetName )
+                       .removeData( this.widgetFullName )
+                       // support: jquery <1.6.3
+                       // http://bugs.jquery.com/ticket/9413
+                       .removeData( $.camelCase( this.widgetFullName ) );
+               this.widget()
+                       .unbind( this.eventNamespace )
+                       .removeAttr( "aria-disabled" )
+                       .removeClass(
+                               this.widgetFullName + "-disabled " +
+                               "ui-state-disabled" );
+
+               // clean up events and states
+               this.bindings.unbind( this.eventNamespace );
+               this.hoverable.removeClass( "ui-state-hover" );
+               this.focusable.removeClass( "ui-state-focus" );
+       },
+       _destroy: $.noop,
+
+       widget: function() {
+               return this.element;
+       },
+
+       option: function( key, value ) {
+               var options = key,
+                       parts,
+                       curOption,
+                       i;
+
+               if ( arguments.length === 0 ) {
+                       // don't return a reference to the internal hash
+                       return $.widget.extend( {}, this.options );
+               }
+
+               if ( typeof key === "string" ) {
+                       // handle nested keys, e.g., "foo.bar" => { foo: { bar: 
___ } }
+                       options = {};
+                       parts = key.split( "." );
+                       key = parts.shift();
+                       if ( parts.length ) {
+                               curOption = options[ key ] = $.widget.extend( 
{}, this.options[ key ] );
+                               for ( i = 0; i < parts.length - 1; i++ ) {
+                                       curOption[ parts[ i ] ] = curOption[ 
parts[ i ] ] || {};
+                                       curOption = curOption[ parts[ i ] ];
+                               }
+                               key = parts.pop();
+                               if ( arguments.length === 1 ) {
+                                       return curOption[ key ] === undefined ? 
null : curOption[ key ];
+                               }
+                               curOption[ key ] = value;
+                       } else {
+                               if ( arguments.length === 1 ) {
+                                       return this.options[ key ] === 
undefined ? null : this.options[ key ];
+                               }
+                               options[ key ] = value;
+                       }
+               }
+
+               this._setOptions( options );
+
+               return this;
+       },
+       _setOptions: function( options ) {
+               var key;
+
+               for ( key in options ) {
+                       this._setOption( key, options[ key ] );
+               }
+
+               return this;
+       },
+       _setOption: function( key, value ) {
+               this.options[ key ] = value;
+
+               if ( key === "disabled" ) {
+                       this.widget()
+                               .toggleClass( this.widgetFullName + "-disabled 
ui-state-disabled", !!value )
+                               .attr( "aria-disabled", value );
+                       this.hoverable.removeClass( "ui-state-hover" );
+                       this.focusable.removeClass( "ui-state-focus" );
+               }
+
+               return this;
+       },
+
+       enable: function() {
+               return this._setOption( "disabled", false );
+       },
+       disable: function() {
+               return this._setOption( "disabled", true );
+       },
+
+       _on: function( suppressDisabledCheck, element, handlers ) {
+               var delegateElement,
+                       instance = this;
+
+               // no suppressDisabledCheck flag, shuffle arguments
+               if ( typeof suppressDisabledCheck !== "boolean" ) {
+                       handlers = element;
+                       element = suppressDisabledCheck;
+                       suppressDisabledCheck = false;
+               }
+
+               // no element argument, shuffle and use this.element
+               if ( !handlers ) {
+                       handlers = element;
+                       element = this.element;
+                       delegateElement = this.widget();
+               } else {
+                       // accept selectors, DOM elements
+                       element = delegateElement = $( element );
+                       this.bindings = this.bindings.add( element );
+               }
+
+               $.each( handlers, function( event, handler ) {
+                       function handlerProxy() {
+                               // allow widgets to customize the disabled 
handling
+                               // - disabled as an array instead of boolean
+                               // - disabled class as method for disabling 
individual parts
+                               if ( !suppressDisabledCheck &&
+                                               ( instance.options.disabled === 
true ||
+                                                       $( this ).hasClass( 
"ui-state-disabled" ) ) ) {
+                                       return;
+                               }
+                               return ( typeof handler === "string" ? 
instance[ handler ] : handler )
+                                       .apply( instance, arguments );
+                       }
+
+                       // copy the guid so direct unbinding works
+                       if ( typeof handler !== "string" ) {
+                               handlerProxy.guid = handler.guid =
+                                       handler.guid || handlerProxy.guid || 
$.guid++;
+                       }
+
+                       var match = event.match( /^(\w+)\s*(.*)$/ ),
+                               eventName = match[1] + instance.eventNamespace,
+                               selector = match[2];
+                       if ( selector ) {
+                               delegateElement.delegate( selector, eventName, 
handlerProxy );
+                       } else {
+                               element.bind( eventName, handlerProxy );
+                       }
+               });
+       },
+
+       _off: function( element, eventName ) {
+               eventName = (eventName || "").split( " " ).join( 
this.eventNamespace + " " ) + this.eventNamespace;
+               element.unbind( eventName ).undelegate( eventName );
+       },
+
+       _delay: function( handler, delay ) {
+               function handlerProxy() {
+                       return ( typeof handler === "string" ? instance[ 
handler ] : handler )
+                               .apply( instance, arguments );
+               }
+               var instance = this;
+               return setTimeout( handlerProxy, delay || 0 );
+       },
+
+       _hoverable: function( element ) {
+               this.hoverable = this.hoverable.add( element );
+               this._on( element, {
+                       mouseenter: function( event ) {
+                               $( event.currentTarget ).addClass( 
"ui-state-hover" );
+                       },
+                       mouseleave: function( event ) {
+                               $( event.currentTarget ).removeClass( 
"ui-state-hover" );
+                       }
+               });
+       },
+
+       _focusable: function( element ) {
+               this.focusable = this.focusable.add( element );
+               this._on( element, {
+                       focusin: function( event ) {
+                               $( event.currentTarget ).addClass( 
"ui-state-focus" );
+                       },
+                       focusout: function( event ) {
+                               $( event.currentTarget ).removeClass( 
"ui-state-focus" );
+                       }
+               });
+       },
+
+       _trigger: function( type, event, data ) {
+               var prop, orig,
+                       callback = this.options[ type ];
+
+               data = data || {};
+               event = $.Event( event );
+               event.type = ( type === this.widgetEventPrefix ?
+                       type :
+                       this.widgetEventPrefix + type ).toLowerCase();
+               // the original event may come from any element
+               // so we need to reset the target on the new event
+               event.target = this.element[ 0 ];
+
+               // copy original event properties over to the new event
+               orig = event.originalEvent;
+               if ( orig ) {
+                       for ( prop in orig ) {
+                               if ( !( prop in event ) ) {
+                                       event[ prop ] = orig[ prop ];
+                               }
+                       }
+               }
+
+               this.element.trigger( event, data );
+               return !( $.isFunction( callback ) &&
+                       callback.apply( this.element[0], [ event ].concat( data 
) ) === false ||
+                       event.isDefaultPrevented() );
+       }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) 
{
+       $.Widget.prototype[ "_" + method ] = function( element, options, 
callback ) {
+               if ( typeof options === "string" ) {
+                       options = { effect: options };
+               }
+               var hasOptions,
+                       effectName = !options ?
+                               method :
+                               options === true || typeof options === "number" 
?
+                                       defaultEffect :
+                                       options.effect || defaultEffect;
+               options = options || {};
+               if ( typeof options === "number" ) {
+                       options = { duration: options };
+               }
+               hasOptions = !$.isEmptyObject( options );
+               options.complete = callback;
+               if ( options.delay ) {
+                       element.delay( options.delay );
+               }
+               if ( hasOptions && $.effects && $.effects.effect[ effectName ] 
) {
+                       element[ method ]( options );
+               } else if ( effectName !== method && element[ effectName ] ) {
+                       element[ effectName ]( options.duration, 
options.easing, callback );
+               } else {
+                       element.queue(function( next ) {
+                               $( this )[ method ]();
+                               if ( callback ) {
+                                       callback.call( element[ 0 ] );
+                               }
+                               next();
+                       });
+               }
+       };
+});
+
+})( jQuery );
+(function( $, undefined ) {
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+       mouseHandled = false;
+});
+
+$.widget("ui.mouse", {
+       version: "1.10.4",
+       options: {
+               cancel: "input,textarea,button,select,option",
+               distance: 1,
+               delay: 0
+       },
+       _mouseInit: function() {
+               var that = this;
+
+               this.element
+                       .bind("mousedown."+this.widgetName, function(event) {
+                               return that._mouseDown(event);
+                       })
+                       .bind("click."+this.widgetName, function(event) {
+                               if (true === $.data(event.target, 
that.widgetName + ".preventClickEvent")) {
+                                       $.removeData(event.target, 
that.widgetName + ".preventClickEvent");
+                                       event.stopImmediatePropagation();
+                                       return false;
+                               }
+                       });
+
+               this.started = false;
+       },
+
+       // TODO: make sure destroying one instance of mouse doesn't mess with
+       // other instances of mouse
+       _mouseDestroy: function() {
+               this.element.unbind("."+this.widgetName);
+               if ( this._mouseMoveDelegate ) {
+                       $(document)
+                               .unbind("mousemove."+this.widgetName, 
this._mouseMoveDelegate)
+                               .unbind("mouseup."+this.widgetName, 
this._mouseUpDelegate);
+               }
+       },
+
+       _mouseDown: function(event) {
+               // don't let more than one widget handle mouseStart
+               if( mouseHandled ) { return; }
+
+               // we may have missed mouseup (out of window)
+               (this._mouseStarted && this._mouseUp(event));
+
+               this._mouseDownEvent = event;
+
+               var that = this,
+                       btnIsLeft = (event.which === 1),
+                       // event.target.nodeName works around a bug in IE 8 with
+                       // disabled inputs (#7620)
+                       elIsCancel = (typeof this.options.cancel === "string" 
&& event.target.nodeName ? $(event.target).closest(this.options.cancel).length 
: false);
+               if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+                       return true;
+               }
+
+               this.mouseDelayMet = !this.options.delay;
+               if (!this.mouseDelayMet) {
+                       this._mouseDelayTimer = setTimeout(function() {
+                               that.mouseDelayMet = true;
+                       }, this.options.delay);
+               }
+
+               if (this._mouseDistanceMet(event) && 
this._mouseDelayMet(event)) {
+                       this._mouseStarted = (this._mouseStart(event) !== 
false);
+                       if (!this._mouseStarted) {
+                               event.preventDefault();
+                               return true;
+                       }
+               }
+
+               // Click event may never have fired (Gecko & Opera)
+               if (true === $.data(event.target, this.widgetName + 
".preventClickEvent")) {
+                       $.removeData(event.target, this.widgetName + 
".preventClickEvent");
+               }
+
+               // these delegates are required to keep context
+               this._mouseMoveDelegate = function(event) {
+                       return that._mouseMove(event);
+               };
+               this._mouseUpDelegate = function(event) {
+                       return that._mouseUp(event);
+               };
+               $(document)
+                       .bind("mousemove."+this.widgetName, 
this._mouseMoveDelegate)
+                       .bind("mouseup."+this.widgetName, 
this._mouseUpDelegate);
+
+               event.preventDefault();
+
+               mouseHandled = true;
+               return true;
+       },
+
+       _mouseMove: function(event) {
+               // IE mouseup check - mouseup happened when mouse was out of 
window
+               if ($.ui.ie && ( !document.documentMode || 
document.documentMode < 9 ) && !event.button) {
+                       return this._mouseUp(event);
+               }
+
+               if (this._mouseStarted) {
+                       this._mouseDrag(event);
+                       return event.preventDefault();
+               }
+
+               if (this._mouseDistanceMet(event) && 
this._mouseDelayMet(event)) {
+                       this._mouseStarted =
+                               (this._mouseStart(this._mouseDownEvent, event) 
!== false);
+                       (this._mouseStarted ? this._mouseDrag(event) : 
this._mouseUp(event));
+               }
+
+               return !this._mouseStarted;
+       },
+
+       _mouseUp: function(event) {
+               $(document)
+                       .unbind("mousemove."+this.widgetName, 
this._mouseMoveDelegate)
+                       .unbind("mouseup."+this.widgetName, 
this._mouseUpDelegate);
+
+               if (this._mouseStarted) {
+                       this._mouseStarted = false;
+
+                       if (event.target === this._mouseDownEvent.target) {
+                               $.data(event.target, this.widgetName + 
".preventClickEvent", true);
+                       }
+
+                       this._mouseStop(event);
+               }
+
+               return false;
+       },
+
+       _mouseDistanceMet: function(event) {
+               return (Math.max(
+                               Math.abs(this._mouseDownEvent.pageX - 
event.pageX),
+                               Math.abs(this._mouseDownEvent.pageY - 
event.pageY)
+                       ) >= this.options.distance
+               );
+       },
+
+       _mouseDelayMet: function(/* event */) {
+               return this.mouseDelayMet;
+       },
+
+       // These are placeholder methods, to be overriden by extending plugin
+       _mouseStart: function(/* event */) {},
+       _mouseDrag: function(/* event */) {},
+       _mouseStop: function(/* event */) {},
+       _mouseCapture: function(/* event */) { return true; }
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth,
+       max = Math.max,
+       abs = Math.abs,
+       round = Math.round,
+       rhorizontal = /left|center|right/,
+       rvertical = /top|center|bottom/,
+       roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+       rposition = /^\w+/,
+       rpercent = /%$/,
+       _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+       return [
+               parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? 
width / 100 : 1 ),
+               parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? 
height / 100 : 1 )
+       ];
+}
+
+function parseCss( element, property ) {
+       return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+       var raw = elem[0];
+       if ( raw.nodeType === 9 ) {
+               return {
+                       width: elem.width(),
+                       height: elem.height(),
+                       offset: { top: 0, left: 0 }
+               };
+       }
+       if ( $.isWindow( raw ) ) {
+               return {
+                       width: elem.width(),
+                       height: elem.height(),
+                       offset: { top: elem.scrollTop(), left: 
elem.scrollLeft() }
+               };
+       }
+       if ( raw.preventDefault ) {
+               return {
+                       width: 0,
+                       height: 0,
+                       offset: { top: raw.pageY, left: raw.pageX }
+               };
+       }
+       return {
+               width: elem.outerWidth(),
+               height: elem.outerHeight(),
+               offset: elem.offset()
+       };
+}
+
+$.position = {
+       scrollbarWidth: function() {
+               if ( cachedScrollbarWidth !== undefined ) {
+                       return cachedScrollbarWidth;
+               }
+               var w1, w2,
+                       div = $( "<div 
style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div
 style='height:100px;width:auto;'></div></div>" ),
+                       innerDiv = div.children()[0];
+
+               $( "body" ).append( div );
+               w1 = innerDiv.offsetWidth;
+               div.css( "overflow", "scroll" );
+
+               w2 = innerDiv.offsetWidth;
+
+               if ( w1 === w2 ) {
+                       w2 = div[0].clientWidth;
+               }
+
+               div.remove();
+
+               return (cachedScrollbarWidth = w1 - w2);
+       },
+       getScrollInfo: function( within ) {
+               var overflowX = within.isWindow || within.isDocument ? "" :
+                               within.element.css( "overflow-x" ),
+                       overflowY = within.isWindow || within.isDocument ? "" :
+                               within.element.css( "overflow-y" ),
+                       hasOverflowX = overflowX === "scroll" ||
+                               ( overflowX === "auto" && within.width < 
within.element[0].scrollWidth ),
+                       hasOverflowY = overflowY === "scroll" ||
+                               ( overflowY === "auto" && within.height < 
within.element[0].scrollHeight );
+               return {
+                       width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+                       height: hasOverflowX ? $.position.scrollbarWidth() : 0
+               };
+       },
+       getWithinInfo: function( element ) {
+               var withinElement = $( element || window ),
+                       isWindow = $.isWindow( withinElement[0] ),
+                       isDocument = !!withinElement[ 0 ] && withinElement[ 0 
].nodeType === 9;
+               return {
+                       element: withinElement,
+                       isWindow: isWindow,
+                       isDocument: isDocument,
+                       offset: withinElement.offset() || { left: 0, top: 0 },
+                       scrollLeft: withinElement.scrollLeft(),
+                       scrollTop: withinElement.scrollTop(),
+                       width: isWindow ? withinElement.width() : 
withinElement.outerWidth(),
+                       height: isWindow ? withinElement.height() : 
withinElement.outerHeight()
+               };
+       }
+};
+
+$.fn.position = function( options ) {
+       if ( !options || !options.of ) {
+               return _position.apply( this, arguments );
+       }
+
+       // make a copy, we don't want to modify arguments
+       options = $.extend( {}, options );
+
+       var atOffset, targetWidth, targetHeight, targetOffset, basePosition, 
dimensions,
+               target = $( options.of ),
+               within = $.position.getWithinInfo( options.within ),
+               scrollInfo = $.position.getScrollInfo( within ),
+               collision = ( options.collision || "flip" ).split( " " ),
+               offsets = {};
+
+       dimensions = getDimensions( target );
+       if ( target[0].preventDefault ) {
+               // force left top to allow flipping
+               options.at = "left top";
+       }
+       targetWidth = dimensions.width;
+       targetHeight = dimensions.height;
+       targetOffset = dimensions.offset;
+       // clone to reuse original targetOffset later
+       basePosition = $.extend( {}, targetOffset );
+
+       // force my and at to have valid horizontal and vertical positions
+       // if a value is missing or invalid, it will be converted to center
+       $.each( [ "my", "at" ], function() {
+               var pos = ( options[ this ] || "" ).split( " " ),
+                       horizontalOffset,
+                       verticalOffset;
+
+               if ( pos.length === 1) {
+                       pos = rhorizontal.test( pos[ 0 ] ) ?
+                               pos.concat( [ "center" ] ) :
+                               rvertical.test( pos[ 0 ] ) ?
+                                       [ "center" ].concat( pos ) :
+                                       [ "center", "center" ];
+               }
+               pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+               pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+               // calculate offsets
+               horizontalOffset = roffset.exec( pos[ 0 ] );
+               verticalOffset = roffset.exec( pos[ 1 ] );
+               offsets[ this ] = [
+                       horizontalOffset ? horizontalOffset[ 0 ] : 0,
+                       verticalOffset ? verticalOffset[ 0 ] : 0
+               ];
+
+               // reduce to just the positions without the offsets
+               options[ this ] = [
+                       rposition.exec( pos[ 0 ] )[ 0 ],
+                       rposition.exec( pos[ 1 ] )[ 0 ]
+               ];
+       });
+
+       // normalize collision option
+       if ( collision.length === 1 ) {
+               collision[ 1 ] = collision[ 0 ];
+       }
+
+       if ( options.at[ 0 ] === "right" ) {
+               basePosition.left += targetWidth;
+       } else if ( options.at[ 0 ] === "center" ) {
+               basePosition.left += targetWidth / 2;
+       }
+
+       if ( options.at[ 1 ] === "bottom" ) {
+               basePosition.top += targetHeight;
+       } else if ( options.at[ 1 ] === "center" ) {
+               basePosition.top += targetHeight / 2;
+       }
+
+       atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+       basePosition.left += atOffset[ 0 ];
+       basePosition.top += atOffset[ 1 ];
+
+       return this.each(function() {
+               var collisionPosition, using,
+                       elem = $( this ),
+                       elemWidth = elem.outerWidth(),
+                       elemHeight = elem.outerHeight(),
+                       marginLeft = parseCss( this, "marginLeft" ),
+                       marginTop = parseCss( this, "marginTop" ),
+                       collisionWidth = elemWidth + marginLeft + parseCss( 
this, "marginRight" ) + scrollInfo.width,
+                       collisionHeight = elemHeight + marginTop + parseCss( 
this, "marginBottom" ) + scrollInfo.height,
+                       position = $.extend( {}, basePosition ),
+                       myOffset = getOffsets( offsets.my, elem.outerWidth(), 
elem.outerHeight() );
+
+               if ( options.my[ 0 ] === "right" ) {
+                       position.left -= elemWidth;
+               } else if ( options.my[ 0 ] === "center" ) {
+                       position.left -= elemWidth / 2;
+               }
+
+               if ( options.my[ 1 ] === "bottom" ) {
+                       position.top -= elemHeight;
+               } else if ( options.my[ 1 ] === "center" ) {
+                       position.top -= elemHeight / 2;
+               }
+
+               position.left += myOffset[ 0 ];
+               position.top += myOffset[ 1 ];
+
+               // if the browser doesn't support fractions, then round for 
consistent results
+               if ( !$.support.offsetFractions ) {
+                       position.left = round( position.left );
+                       position.top = round( position.top );
+               }
+
+               collisionPosition = {
+                       marginLeft: marginLeft,
+                       marginTop: marginTop
+               };
+
+               $.each( [ "left", "top" ], function( i, dir ) {
+                       if ( $.ui.position[ collision[ i ] ] ) {
+                               $.ui.position[ collision[ i ] ][ dir ]( 
position, {
+                                       targetWidth: targetWidth,
+                                       targetHeight: targetHeight,
+                                       elemWidth: elemWidth,
+                                       elemHeight: elemHeight,
+                                       collisionPosition: collisionPosition,
+                                       collisionWidth: collisionWidth,
+                                       collisionHeight: collisionHeight,
+                                       offset: [ atOffset[ 0 ] + myOffset[ 0 
], atOffset [ 1 ] + myOffset[ 1 ] ],
+                                       my: options.my,
+                                       at: options.at,
+                                       within: within,
+                                       elem : elem
+                               });
+                       }
+               });
+
+               if ( options.using ) {
+                       // adds feedback as second argument to using callback, 
if present
+                       using = function( props ) {
+                               var left = targetOffset.left - position.left,
+                                       right = left + targetWidth - elemWidth,
+                                       top = targetOffset.top - position.top,
+                                       bottom = top + targetHeight - 
elemHeight,
+                                       feedback = {
+                                               target: {
+                                                       element: target,
+                                                       left: targetOffset.left,
+                                                       top: targetOffset.top,
+                                                       width: targetWidth,
+                                                       height: targetHeight
+                                               },
+                                               element: {
+                                                       element: elem,
+                                                       left: position.left,
+                                                       top: position.top,
+                                                       width: elemWidth,
+                                                       height: elemHeight
+                                               },
+                                               horizontal: right < 0 ? "left" 
: left > 0 ? "right" : "center",
+                                               vertical: bottom < 0 ? "top" : 
top > 0 ? "bottom" : "middle"
+                                       };
+                               if ( targetWidth < elemWidth && abs( left + 
right ) < targetWidth ) {
+                                       feedback.horizontal = "center";
+                               }
+                               if ( targetHeight < elemHeight && abs( top + 
bottom ) < targetHeight ) {
+                                       feedback.vertical = "middle";
+                               }
+                               if ( max( abs( left ), abs( right ) ) > max( 
abs( top ), abs( bottom ) ) ) {
+                                       feedback.important = "horizontal";
+                               } else {
+                                       feedback.important = "vertical";
+                               }
+                               options.using.call( this, props, feedback );
+                       };
+               }
+
+               elem.offset( $.extend( position, { using: using } ) );
+       });
+};
+
+$.ui.position = {
+       fit: {
+               left: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.isWindow ? 
within.scrollLeft : within.offset.left,
+                               outerWidth = within.width,
+                               collisionPosLeft = position.left - 
data.collisionPosition.marginLeft,
+                               overLeft = withinOffset - collisionPosLeft,
+                               overRight = collisionPosLeft + 
data.collisionWidth - outerWidth - withinOffset,
+                               newOverRight;
+
+                       // element is wider than within
+                       if ( data.collisionWidth > outerWidth ) {
+                               // element is initially over the left side of 
within
+                               if ( overLeft > 0 && overRight <= 0 ) {
+                                       newOverRight = position.left + overLeft 
+ data.collisionWidth - outerWidth - withinOffset;
+                                       position.left += overLeft - 
newOverRight;
+                               // element is initially over right side of 
within
+                               } else if ( overRight > 0 && overLeft <= 0 ) {
+                                       position.left = withinOffset;
+                               // element is initially over both left and 
right sides of within
+                               } else {
+                                       if ( overLeft > overRight ) {
+                                               position.left = withinOffset + 
outerWidth - data.collisionWidth;
+                                       } else {
+                                               position.left = withinOffset;
+                                       }
+                               }
+                       // too far left -> align with left edge
+                       } else if ( overLeft > 0 ) {
+                               position.left += overLeft;
+                       // too far right -> align with right edge
+                       } else if ( overRight > 0 ) {
+                               position.left -= overRight;
+                       // adjust based on position and margin
+                       } else {
+                               position.left = max( position.left - 
collisionPosLeft, position.left );
+                       }
+               },
+               top: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.isWindow ? 
within.scrollTop : within.offset.top,
+                               outerHeight = data.within.height,
+                               collisionPosTop = position.top - 
data.collisionPosition.marginTop,
+                               overTop = withinOffset - collisionPosTop,
+                               overBottom = collisionPosTop + 
data.collisionHeight - outerHeight - withinOffset,
+                               newOverBottom;
+
+                       // element is taller than within
+                       if ( data.collisionHeight > outerHeight ) {
+                               // element is initially over the top of within
+                               if ( overTop > 0 && overBottom <= 0 ) {
+                                       newOverBottom = position.top + overTop 
+ data.collisionHeight - outerHeight - withinOffset;
+                                       position.top += overTop - newOverBottom;
+                               // element is initially over bottom of within
+                               } else if ( overBottom > 0 && overTop <= 0 ) {
+                                       position.top = withinOffset;
+                               // element is initially over both top and 
bottom of within
+                               } else {
+                                       if ( overTop > overBottom ) {
+                                               position.top = withinOffset + 
outerHeight - data.collisionHeight;
+                                       } else {
+                                               position.top = withinOffset;
+                                       }
+                               }
+                       // too far up -> align with top
+                       } else if ( overTop > 0 ) {
+                               position.top += overTop;
+                       // too far down -> align with bottom edge
+                       } else if ( overBottom > 0 ) {
+                               position.top -= overBottom;
+                       // adjust based on position and margin
+                       } else {
+                               position.top = max( position.top - 
collisionPosTop, position.top );
+                       }
+               }
+       },
+       flip: {
+               left: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.offset.left + 
within.scrollLeft,
+                               outerWidth = within.width,
+                               offsetLeft = within.isWindow ? 
within.scrollLeft : within.offset.left,
+                               collisionPosLeft = position.left - 
data.collisionPosition.marginLeft,
+                               overLeft = collisionPosLeft - offsetLeft,
+                               overRight = collisionPosLeft + 
data.collisionWidth - outerWidth - offsetLeft,
+                               myOffset = data.my[ 0 ] === "left" ?
+                                       -data.elemWidth :
+                                       data.my[ 0 ] === "right" ?
+                                               data.elemWidth :
+                                               0,
+                               atOffset = data.at[ 0 ] === "left" ?
+                                       data.targetWidth :
+                                       data.at[ 0 ] === "right" ?
+                                               -data.targetWidth :
+                                               0,
+                               offset = -2 * data.offset[ 0 ],
+                               newOverRight,
+                               newOverLeft;
+
+                       if ( overLeft < 0 ) {
+                               newOverRight = position.left + myOffset + 
atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+                               if ( newOverRight < 0 || newOverRight < abs( 
overLeft ) ) {
+                                       position.left += myOffset + atOffset + 
offset;
+                               }
+                       }
+                       else if ( overRight > 0 ) {
+                               newOverLeft = position.left - 
data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+                               if ( newOverLeft > 0 || abs( newOverLeft ) < 
overRight ) {
+                                       position.left += myOffset + atOffset + 
offset;
+                               }
+                       }
+               },
+               top: function( position, data ) {
+                       var within = data.within,
+                               withinOffset = within.offset.top + 
within.scrollTop,
+                               outerHeight = within.height,
+                               offsetTop = within.isWindow ? within.scrollTop 
: within.offset.top,
+                               collisionPosTop = position.top - 
data.collisionPosition.marginTop,
+                               overTop = collisionPosTop - offsetTop,
+                               overBottom = collisionPosTop + 
data.collisionHeight - outerHeight - offsetTop,
+                               top = data.my[ 1 ] === "top",
+                               myOffset = top ?
+                                       -data.elemHeight :
+                                       data.my[ 1 ] === "bottom" ?
+                                               data.elemHeight :
+                                               0,
+                               atOffset = data.at[ 1 ] === "top" ?
+                                       data.targetHeight :
+                                       data.at[ 1 ] === "bottom" ?
+                                               -data.targetHeight :
+                                               0,
+                               offset = -2 * data.offset[ 1 ],
+                               newOverTop,
+                               newOverBottom;
+                       if ( overTop < 0 ) {
+                               newOverBottom = position.top + myOffset + 
atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+                               if ( ( position.top + myOffset + atOffset + 
offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+                                       position.top += myOffset + atOffset + 
offset;
+                               }
+                       }
+                       else if ( overBottom > 0 ) {
+                               newOverTop = position.top - 
data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+                               if ( ( position.top + myOffset + atOffset + 
offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+                                       position.top += myOffset + atOffset + 
offset;
+                               }
+                       }
+               }
+       },
+       flipfit: {
+               left: function() {
+                       $.ui.position.flip.left.apply( this, arguments );
+                       $.ui.position.fit.left.apply( this, arguments );
+               },
+               top: function() {
+                       $.ui.position.flip.top.apply( this, arguments );
+                       $.ui.position.fit.top.apply( this, arguments );
+               }
+       }
+};
+
+// fraction support test
+(function () {
+       var testElement, testElementParent, testElementStyle, offsetLeft, i,
+               body = document.getElementsByTagName( "body" )[ 0 ],
+               div = document.createElement( "div" );
+
+       //Create a "fake body" for testing based on method used in 
jQuery.support
+       testElement = document.createElement( body ? "div" : "body" );
+       testElementStyle = {
+               visibility: "hidden",
+               width: 0,
+               height: 0,
+               border: 0,
+               margin: 0,
+               background: "none"
+       };
+       if ( body ) {
+               $.extend( testElementStyle, {
+                       position: "absolute",
+                       left: "-1000px",
+                       top: "-1000px"
+               });
+       }
+       for ( i in testElementStyle ) {
+               testElement.style[ i ] = testElementStyle[ i ];
+       }
+       testElement.appendChild( div );
+       testElementParent = body || document.documentElement;
+       testElementParent.insertBefore( testElement, 
testElementParent.firstChild );
+
+       div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+       offsetLeft = $( div ).offset().left;
+       $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+       testElement.innerHTML = "";
+       testElementParent.removeChild( testElement );
+})();
+
+}( jQuery ) );
+(function( $, undefined ) {
+
+$.widget("ui.draggable", $.ui.mouse, {
+       version: "1.10.4",
+       widgetEventPrefix: "drag",
+       options: {
+               addClasses: true,
+               appendTo: "parent",
+               axis: false,
+               connectToSortable: false,
+               containment: false,
+               cursor: "auto",
+               cursorAt: false,
+               grid: false,
+               handle: false,
+               helper: "original",
+               iframeFix: false,
+               opacity: false,
+               refreshPositions: false,
+               revert: false,
+               revertDuration: 500,
+               scope: "default",
+               scroll: true,
+               scrollSensitivity: 20,
+               scrollSpeed: 20,
+               snap: false,
+               snapMode: "both",
+               snapTolerance: 20,
+               stack: false,
+               zIndex: false,
+
+               // callbacks
+               drag: null,
+               start: null,
+               stop: null
+       },
+       _create: function() {
+
+               if (this.options.helper === "original" && 
!(/^(?:r|a|f)/).test(this.element.css("position"))) {
+                       this.element[0].style.position = "relative";
+               }
+               if (this.options.addClasses){
+                       this.element.addClass("ui-draggable");
+               }
+               if (this.options.disabled){
+                       this.element.addClass("ui-draggable-disabled");
+               }
+
+               this._mouseInit();
+
+       },
+
+       _destroy: function() {
+               this.element.removeClass( "ui-draggable ui-draggable-dragging 
ui-draggable-disabled" );
+               this._mouseDestroy();
+       },
+
+       _mouseCapture: function(event) {
+
+               var o = this.options;
+
+               // among others, prevent a drag on a resizable-handle
+               if (this.helper || o.disabled || 
$(event.target).closest(".ui-resizable-handle").length > 0) {
+                       return false;
+               }
+
+               //Quit if we're not on a valid handle
+               this.handle = this._getHandle(event);
+               if (!this.handle) {
+                       return false;
+               }
+
+               $(o.iframeFix === true ? "iframe" : 
o.iframeFix).each(function() {
+                       $("<div class='ui-draggable-iframeFix' 
style='background: #fff;'></div>")
+                       .css({
+                               width: this.offsetWidth+"px", height: 
this.offsetHeight+"px",
+                               position: "absolute", opacity: "0.001", zIndex: 
1000
+                       })
+                       .css($(this).offset())
+                       .appendTo("body");
+               });
+
+               return true;
+
+       },
+
+       _mouseStart: function(event) {
+
+               var o = this.options;
+
+               //Create and append the visible helper
+               this.helper = this._createHelper(event);
+
+               this.helper.addClass("ui-draggable-dragging");
+
+               //Cache the helper size
+               this._cacheHelperProportions();
+
+               //If ddmanager is used for droppables, set the global draggable
+               if($.ui.ddmanager) {
+                       $.ui.ddmanager.current = this;
+               }
+
+               /*
+                * - Position generation -
+                * This block generates everything position related - it's the 
core of draggables.
+                */
+
+               //Cache the margins of the original element
+               this._cacheMargins();
+
+               //Store the helper's css position
+               this.cssPosition = this.helper.css( "position" );
+               this.scrollParent = this.helper.scrollParent();
+               this.offsetParent = this.helper.offsetParent();
+               this.offsetParentCssPosition = this.offsetParent.css( 
"position" );
+
+               //The element's absolute position on the page minus margins
+               this.offset = this.positionAbs = this.element.offset();
+               this.offset = {
+                       top: this.offset.top - this.margins.top,
+                       left: this.offset.left - this.margins.left
+               };
+
+               //Reset scroll cache
+               this.offset.scroll = false;
+
+               $.extend(this.offset, {
+                       click: { //Where the click happened, relative to the 
element
+                               left: event.pageX - this.offset.left,
+                               top: event.pageY - this.offset.top
+                       },
+                       parent: this._getParentOffset(),
+                       relative: this._getRelativeOffset() //This is a 
relative to absolute position minus the actual position calculation - only used 
for relative positioned helper
+               });
+
+               //Generate the original position
+               this.originalPosition = this.position = 
this._generatePosition(event);
+               this.originalPageX = event.pageX;
+               this.originalPageY = event.pageY;
+
+               //Adjust the mouse offset relative to the helper if "cursorAt" 
is supplied
+               (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+               //Set a containment if given in the options
+               this._setContainment();
+
+               //Trigger event + callbacks
+               if(this._trigger("start", event) === false) {
+                       this._clear();
+                       return false;
+               }
+
+               //Recache the helper size
+               this._cacheHelperProportions();
+
+               //Prepare the droppable offsets
+               if ($.ui.ddmanager && !o.dropBehaviour) {
+                       $.ui.ddmanager.prepareOffsets(this, event);
+               }
+
+
+               this._mouseDrag(event, true); //Execute the drag once - this 
causes the helper not to be visible before getting its correct position
+
+               //If the ddmanager is used for droppables, inform the manager 
that dragging has started (see #5003)
+               if ( $.ui.ddmanager ) {
+                       $.ui.ddmanager.dragStart(this, event);
+               }
+
+               return true;
+       },
+
+       _mouseDrag: function(event, noPropagation) {
+               // reset any necessary cached properties (see #5009)
+               if ( this.offsetParentCssPosition === "fixed" ) {
+                       this.offset.parent = this._getParentOffset();
+               }
+
+               //Compute the helpers position
+               this.position = this._generatePosition(event);
+               this.positionAbs = this._convertPositionTo("absolute");
+
+               //Call plugins and callbacks and use the resulting position if 
something is returned
+               if (!noPropagation) {
+                       var ui = this._uiHash();
+                       if(this._trigger("drag", event, ui) === false) {
+                               this._mouseUp({});
+                               return false;
+                       }
+                       this.position = ui.position;
+               }
+
+               if(!this.options.axis || this.options.axis !== "y") {
+                       this.helper[0].style.left = this.position.left+"px";
+               }
+               if(!this.options.axis || this.options.axis !== "x") {
+                       this.helper[0].style.top = this.position.top+"px";
+               }
+               if($.ui.ddmanager) {
+                       $.ui.ddmanager.drag(this, event);
+               }
+
+               return false;
+       },
+
+       _mouseStop: function(event) {
+
+               //If we are using droppables, inform the manager about the drop
+               var that = this,
+                       dropped = false;
+               if ($.ui.ddmanager && !this.options.dropBehaviour) {
+                       dropped = $.ui.ddmanager.drop(this, event);
+               }
+
+               //if a drop comes from outside (a sortable)
+               if(this.dropped) {
+                       dropped = this.dropped;
+                       this.dropped = false;
+               }
+
+               //if the original element is no longer in the DOM don't bother 
to continue (see #8269)
+               if ( this.options.helper === "original" && !$.contains( 
this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
+                       return false;
+               }
+
+               if((this.options.revert === "invalid" && !dropped) || 
(this.options.revert === "valid" && dropped) || this.options.revert === true || 
($.isFunction(this.options.revert) && this.options.revert.call(this.element, 
dropped))) {
+                       $(this.helper).animate(this.originalPosition, 
parseInt(this.options.revertDuration, 10), function() {
+                               if(that._trigger("stop", event) !== false) {
+                                       that._clear();
+                               }
+                       });
+               } else {
+                       if(this._trigger("stop", event) !== false) {
+                               this._clear();
+                       }
+               }
+
+               return false;
+       },
+
+       _mouseUp: function(event) {
+               //Remove frame helpers
+               $("div.ui-draggable-iframeFix").each(function() {
+                       this.parentNode.removeChild(this);
+               });
+
+               //If the ddmanager is used for droppables, inform the manager 
that dragging has stopped (see #5003)
+               if( $.ui.ddmanager ) {
+                       $.ui.ddmanager.dragStop(this, event);
+               }
+
+               return $.ui.mouse.prototype._mouseUp.call(this, event);
+       },
+
+       cancel: function() {
+
+               if(this.helper.is(".ui-draggable-dragging")) {
+                       this._mouseUp({});
+               } else {
+                       this._clear();
+               }
+
+               return this;
+
+       },
+
+       _getHandle: function(event) {
+               return this.options.handle ?
+                       !!$( event.target ).closest( this.element.find( 
this.options.handle ) ).length :
+                       true;
+       },
+
+       _createHelper: function(event) {
+
+               var o = this.options,
+                       helper = $.isFunction(o.helper) ? 
$(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? 
this.element.clone().removeAttr("id") : this.element);
+
+               if(!helper.parents("body").length) {
+                       helper.appendTo((o.appendTo === "parent" ? 
this.element[0].parentNode : o.appendTo));
+               }
+
+               if(helper[0] !== this.element[0] && 
!(/(fixed|absolute)/).test(helper.css("position"))) {
+                       helper.css("position", "absolute");
+               }
+
+               return helper;
+
+       },
+
+       _adjustOffsetFromHelper: function(obj) {
+               if (typeof obj === "string") {
+                       obj = obj.split(" ");
+               }
+               if ($.isArray(obj)) {
+                       obj = {left: +obj[0], top: +obj[1] || 0};
+               }
+               if ("left" in obj) {
+                       this.offset.click.left = obj.left + this.margins.left;
+               }
+               if ("right" in obj) {
+                       this.offset.click.left = this.helperProportions.width - 
obj.right + this.margins.left;
+               }
+               if ("top" in obj) {
+                       this.offset.click.top = obj.top + this.margins.top;
+               }
+               if ("bottom" in obj) {
+                       this.offset.click.top = this.helperProportions.height - 
obj.bottom + this.margins.top;
+               }
+       },
+
+       _getParentOffset: function() {
+
+               //Get the offsetParent and cache its position
+               var po = this.offsetParent.offset();
+
+               // This is a special case where we need to modify a offset 
calculated on start, since the following happened:
+               // 1. The position of the helper is absolute, so it's position 
is calculated based on the next positioned parent
+               // 2. The actual offset parent is a child of the scroll parent, 
and the scroll parent isn't the document, which means that
+               //    the scroll is included in the initial calculation of the 
offset of the parent, and never recalculated upon drag
+               if(this.cssPosition === "absolute" && this.scrollParent[0] !== 
document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+                       po.left += this.scrollParent.scrollLeft();
+                       po.top += this.scrollParent.scrollTop();
+               }
+
+               //This needs to be actually done for all browsers, since 
pageX/pageY includes this information
+               //Ugly IE fix
+               if((this.offsetParent[0] === document.body) ||
+                       (this.offsetParent[0].tagName && 
this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+                       po = { top: 0, left: 0 };
+               }
+
+               return {
+                       top: po.top + 
(parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+                       left: po.left + 
(parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+               };
+
+       },
+
+       _getRelativeOffset: function() {
+
+               if(this.cssPosition === "relative") {
+                       var p = this.element.position();
+                       return {
+                               top: p.top - 
(parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+                               left: p.left - 
(parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+                       };
+               } else {
+                       return { top: 0, left: 0 };
+               }
+
+       },
+
+       _cacheMargins: function() {
+               this.margins = {
+                       left: (parseInt(this.element.css("marginLeft"),10) || 
0),
+                       top: (parseInt(this.element.css("marginTop"),10) || 0),
+                       right: (parseInt(this.element.css("marginRight"),10) || 
0),
+                       bottom: (parseInt(this.element.css("marginBottom"),10) 
|| 0)
+               };
+       },
+
+       _cacheHelperProportions: function() {
+               this.helperProportions = {
+                       width: this.helper.outerWidth(),
+                       height: this.helper.outerHeight()
+               };
+       },
+
+       _setContainment: function() {
+
+               var over, c, ce,
+                       o = this.options;
+
+               if ( !o.containment ) {
+                       this.containment = null;
+                       return;
+               }
+
+               if ( o.containment === "window" ) {
+                       this.containment = [
+                               $( window ).scrollLeft() - 
this.offset.relative.left - this.offset.parent.left,
+                               $( window ).scrollTop() - 
this.offset.relative.top - this.offset.parent.top,
+                               $( window ).scrollLeft() + $( window ).width() 
- this.helperProportions.width - this.margins.left,
+                               $( window ).scrollTop() + ( $( window 
).height() || document.body.parentNode.scrollHeight ) - 
this.helperProportions.height - this.margins.top
+                       ];
+                       return;
+               }
+
+               if ( o.containment === "document") {
+                       this.containment = [
+                               0,
+                               0,
+                               $( document ).width() - 
this.helperProportions.width - this.margins.left,
+                               ( $( document ).height() || 
document.body.parentNode.scrollHeight ) - this.helperProportions.height - 
this.margins.top
+                       ];
+                       return;
+               }
+
+               if ( o.containment.constructor === Array ) {
+                       this.containment = o.containment;
+                       return;
+               }
+
+               if ( o.containment === "parent" ) {
+                       o.containment = this.helper[ 0 ].parentNode;
+               }
+
+               c = $( o.containment );
+               ce = c[ 0 ];
+
+               if( !ce ) {
+                       return;
+               }
+
+               over = c.css( "overflow" ) !== "hidden";
+
+               this.containment = [
+                       ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( 
parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+                       ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( 
parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
+                       ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : 
ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( 
parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - 
this.margins.left - this.margins.right,
+                       ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : 
ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( 
parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height 
- this.margins.top  - this.margins.bottom
+               ];
+               this.relative_container = c;
+       },
+
+       _convertPositionTo: function(d, pos) {
+
+               if(!pos) {
+                       pos = this.position;
+               }
+
+               var mod = d === "absolute" ? 1 : -1,
+                       scroll = this.cssPosition === "absolute" && !( 
this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], 
this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
+
+               //Cache the scroll
+               if (!this.offset.scroll) {
+                       this.offset.scroll = {top : scroll.scrollTop(), left : 
scroll.scrollLeft()};
+               }
+
+               return {
+                       top: (
+                               pos.top +                                       
                                                                                
        // The absolute mouse position
+                               this.offset.relative.top * mod +                
                                                                // Only for 
relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.parent.top * mod -                  
                                                        // The offsetParent's 
offset without borders (offset + border)
+                               ( ( this.cssPosition === "fixed" ? 
-this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+                       ),
+                       left: (
+                               pos.left +                                      
                                                                                
        // The absolute mouse position
+                               this.offset.relative.left * mod +               
                                                                // Only for 
relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.parent.left * mod   -               
                                                                // The 
offsetParent's offset without borders (offset + border)
+                               ( ( this.cssPosition === "fixed" ? 
-this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+                       )
+               };
+
+       },
+
+       _generatePosition: function(event) {
+
+               var containment, co, top, left,
+                       o = this.options,
+                       scroll = this.cssPosition === "absolute" && !( 
this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], 
this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+                       pageX = event.pageX,
+                       pageY = event.pageY;
+
+               //Cache the scroll
+               if (!this.offset.scroll) {
+                       this.offset.scroll = {top : scroll.scrollTop(), left : 
scroll.scrollLeft()};
+               }
+
+               /*
+                * - Position constraining -
+                * Constrain the position to a mix of grid, containment.
+                */
+
+               // If we are not dragging yet, we won't check for options
+               if ( this.originalPosition ) {
+                       if ( this.containment ) {
+                               if ( this.relative_container ){
+                                       co = this.relative_container.offset();
+                                       containment = [
+                                               this.containment[ 0 ] + co.left,
+                                               this.containment[ 1 ] + co.top,
+                                               this.containment[ 2 ] + co.left,
+                                               this.containment[ 3 ] + co.top
+                                       ];
+                               }
+                               else {
+                                       containment = this.containment;
+                               }
+
+                               if(event.pageX - this.offset.click.left < 
containment[0]) {
+                                       pageX = containment[0] + 
this.offset.click.left;
+                               }
+                               if(event.pageY - this.offset.click.top < 
containment[1]) {
+                                       pageY = containment[1] + 
this.offset.click.top;
+                               }
+                               if(event.pageX - this.offset.click.left > 
containment[2]) {
+                                       pageX = containment[2] + 
this.offset.click.left;
+                               }
+                               if(event.pageY - this.offset.click.top > 
containment[3]) {
+                                       pageY = containment[3] + 
this.offset.click.top;
+                               }
+                       }
+
+                       if(o.grid) {
+                               //Check for grid elements set to 0 to prevent 
divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+                               top = o.grid[1] ? this.originalPageY + 
Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : 
this.originalPageY;
+                               pageY = containment ? ((top - 
this.offset.click.top >= containment[1] || top - this.offset.click.top > 
containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top 
- o.grid[1] : top + o.grid[1])) : top;
+
+                               left = o.grid[0] ? this.originalPageX + 
Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : 
this.originalPageX;
+                               pageX = containment ? ((left - 
this.offset.click.left >= containment[0] || left - this.offset.click.left > 
containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? 
left - o.grid[0] : left + o.grid[0])) : left;
+                       }
+
+               }
+
+               return {
+                       top: (
+                               pageY -                                         
                                                                                
        // The absolute mouse position
+                               this.offset.click.top   -                       
                                                                        // 
Click offset (relative to the element)
+                               this.offset.relative.top -                      
                                                                        // Only 
for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.parent.top +                        
                                                                        // The 
offsetParent's offset without borders (offset + border)
+                               ( this.cssPosition === "fixed" ? 
-this.scrollParent.scrollTop() : this.offset.scroll.top )
+                       ),
+                       left: (
+                               pageX -                                         
                                                                                
        // The absolute mouse position
+                               this.offset.click.left -                        
                                                                        // 
Click offset (relative to the element)
+                               this.offset.relative.left -                     
                                                                        // Only 
for relative positioned nodes: Relative offset from element to offset parent
+                               this.offset.parent.left +                       
                                                                        // The 
offsetParent's offset without borders (offset + border)
+                               ( this.cssPosition === "fixed" ? 
-this.scrollParent.scrollLeft() : this.offset.scroll.left )
+                       )
+               };
+
+       },
+
+       _clear: function() {
+               this.helper.removeClass("ui-draggable-dragging");
+               if(this.helper[0] !== this.element[0] && 
!this.cancelHelperRemoval) {
+                       this.helper.remove();
+               }
+               this.helper = null;
+               this.cancelHelperRemoval = false;
+       },
+
+       // From now on bulk stuff - mainly helpers
+
+       _trigger: function(type, event, ui) {
+               ui = ui || this._uiHash();
+               $.ui.plugin.call(this, type, [event, ui]);
+               //The absolute position has to be recalculated after plugins
+               if(type === "drag") {
+                       this.positionAbs = this._convertPositionTo("absolute");
+               }
+               return $.Widget.prototype._trigger.call(this, type, event, ui);
+       },
+
+       plugins: {},
+
+       _uiHash: function() {
+               return {
+                       helper: this.helper,
+                       position: this.position,
+                       originalPosition: this.originalPosition,
+                       offset: this.positionAbs
+               };
+       }
+
+});
+
+$.ui.plugin.add("draggable", "connectToSortable", {
+       start: function(event, ui) {
+
+               var inst = $(this).data("ui-draggable"), o = inst.options,
+                       uiSortable = $.extend({}, ui, { item: inst.element });
+               inst.sortables = [];
+               $(o.connectToSortable).each(function() {
+                       var sortable = $.data(this, "ui-sortable");
+                       if (sortable && !sortable.options.disabled) {
+                               inst.sortables.push({
+                                       instance: sortable,
+                                       shouldRevert: sortable.options.revert
+                               });
+                               sortable.refreshPositions();    // Call the 
sortable's refreshPositions at drag start to refresh the containerCache since 
the sortable container cache is used in drag and needs to be up to date (this 
will ensure it's initialised as well as being kept in step with any changes 
that might have happened on the page).
+                               sortable._trigger("activate", event, 
uiSortable);
+                       }
+               });
+
+       },
+       stop: function(event, ui) {
+
+               //If we are still over the sortable, we fake the stop event of 
the sortable, but also remove helper
+               var inst = $(this).data("ui-draggable"),
+                       uiSortable = $.extend({}, ui, { item: inst.element });
+
+               $.each(inst.sortables, function() {
+                       if(this.instance.isOver) {
+
+                               this.instance.isOver = 0;
+
+                               inst.cancelHelperRemoval = true; //Don't remove 
the helper in the draggable instance
+                               this.instance.cancelHelperRemoval = false; 
//Remove it in the sortable instance (so sortable plugins like revert still 
work)
+
+                               //The sortable revert is supported, and we have 
to set a temporary dropped variable on the draggable to support revert: 
"valid/invalid"
+                               if(this.shouldRevert) {
+                                       this.instance.options.revert = 
this.shouldRevert;
+                               }
+
+                               //Trigger the stop of the sortable
+                               this.instance._mouseStop(event);
+
+                               this.instance.options.helper = 
this.instance.options._helper;
+
+                               //If the helper has been the original item, 
restore properties in the sortable
+                               if(inst.options.helper === "original") {
+                                       this.instance.currentItem.css({ top: 
"auto", left: "auto" });
+                               }
+
+                       } else {
+                               this.instance.cancelHelperRemoval = false; 
//Remove the helper in the sortable instance
+                               this.instance._trigger("deactivate", event, 
uiSortable);
+                       }
+
+               });
+
+       },
+       drag: function(event, ui) {
+
+               var inst = $(this).data("ui-draggable"), that = this;
+
+               $.each(inst.sortables, function() {
+
+                       var innermostIntersecting = false,
+                               thisSortable = this;
+
+                       //Copy over some variables to allow calling the 
sortable's native _intersectsWith
+                       this.instance.positionAbs = inst.positionAbs;
+                       this.instance.helperProportions = 
inst.helperProportions;
+                       this.instance.offset.click = inst.offset.click;
+
+                       
if(this.instance._intersectsWith(this.instance.containerCache)) {
+                               innermostIntersecting = true;
+                               $.each(inst.sortables, function () {
+                                       this.instance.positionAbs = 
inst.positionAbs;
+                                       this.instance.helperProportions = 
inst.helperProportions;
+                                       this.instance.offset.click = 
inst.offset.click;
+                                       if (this !== thisSortable &&
+                                               
this.instance._intersectsWith(this.instance.containerCache) &&
+                                               
$.contains(thisSortable.instance.element[0], this.instance.element[0])
+                                       ) {
+                                               innermostIntersecting = false;
+                                       }
+                                       return innermostIntersecting;
+                               });
+                       }
+
+
+                       if(innermostIntersecting) {
+                               //If it intersects, we use a little isOver 
variable and set it once, so our move-in stuff gets fired only once
+                               if(!this.instance.isOver) {
+
+                                       this.instance.isOver = 1;
+                                       //Now we fake the start of dragging for 
the sortable instance,
+                                       //by cloning the list group item, 
appending it to the sortable and using it as inst.currentItem
+                                       //We can then fire the start event of 
the sortable with our passed browser event, and our own helper (so it doesn't 
create a new one)
+                                       this.instance.currentItem = 
$(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",
 true);
+                                       this.instance.options._helper = 
this.instance.options.helper; //Store helper option to later restore it
+                                       this.instance.options.helper = 
function() { return ui.helper[0]; };
+
+                                       event.target = 
this.instance.currentItem[0];
+                                       this.instance._mouseCapture(event, 
true);
+                                       this.instance._mouseStart(event, true, 
true);
+
+                                       //Because the browser event is way off 
the new appended portlet, we modify a couple of variables to reflect the changes
+                                       this.instance.offset.click.top = 
inst.offset.click.top;
+                                       this.instance.offset.click.left = 
inst.offset.click.left;
+                                       this.instance.offset.parent.left -= 
inst.offset.parent.left - this.instance.offset.parent.left;
+                                       this.instance.offset.parent.top -= 
inst.offset.parent.top - this.instance.offset.parent.top;
+
+                                       inst._trigger("toSortable", event);
+                                       inst.dropped = this.instance.element; 
//draggable revert needs that
+                                       //hack so receive/update callbacks work 
(mostly)
+                                       inst.currentItem = inst.element;
+                                       this.instance.fromOutside = inst;
+
+                               }
+
+                               //Provided we did all the previous steps, we 
can fire the drag event of the sortable on every draggable drag, when it 
intersects with the sortable
+                               if(this.instance.currentItem) {
+                                       this.instance._mouseDrag(event);
+                               }
+
+                       } else {
+
+                               //If it doesn't intersect with the sortable, 
and it intersected before,
+                               //we fake the drag stop of the sortable, but 
make sure it doesn't remove the helper by using cancelHelperRemoval
+                               if(this.instance.isOver) {
+
+                                       this.instance.isOver = 0;
+                                       this.instance.cancelHelperRemoval = 
true;
+
+                                       //Prevent reverting on this forced stop
+                                       this.instance.options.revert = false;
+
+                                       // The out event needs to be triggered 
independently
+                                       this.instance._trigger("out", event, 
this.instance._uiHash(this.instance));
+
+                                       this.instance._mouseStop(event, true);
+                                       this.instance.options.helper = 
this.instance.options._helper;
+
+                                       //Now we remove our currentItem, the 
list group clone again, and the placeholder, and animate the helper back to 
it's original size
+                                       this.instance.currentItem.remove();
+                                       if(this.instance.placeholder) {
+                                               
this.instance.placeholder.remove();
+                                       }
+
+                                       inst._trigger("fromSortable", event);
+                                       inst.dropped = false; //draggable 
revert needs that
+                               }
+
+                       }
+
+               });
+
+       }
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+       start: function() {
+               var t = $("body"), o = $(this).data("ui-draggable").options;
+               if (t.css("cursor")) {
+                       o._cursor = t.css("cursor");
+               }
+               t.css("cursor", o.cursor);
+       },
+       stop: function() {
+               var o = $(this).data("ui-draggable").options;
+               if (o._cursor) {
+                       $("body").css("cursor", o._cursor);
+               }
+       }
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+       start: function(event, ui) {
+               var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+               if(t.css("opacity")) {
+                       o._opacity = t.css("opacity");
+               }
+               t.css("opacity", o.opacity);
+       },
+       stop: function(event, ui) {
+               var o = $(this).data("ui-draggable").options;
+               if(o._opacity) {
+                       $(ui.helper).css("opacity", o._opacity);
+               }
+       }
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+       start: function() {
+               var i = $(this).data("ui-draggable");
+               if(i.scrollParent[0] !== document && i.scrollParent[0].tagName 
!== "HTML") {
+                       i.overflowOffset = i.scrollParent.offset();
+               }
+       },
+       drag: function( event ) {
+
+               var i = $(this).data("ui-draggable"), o = i.options, scrolled = 
false;
+
+               if(i.scrollParent[0] !== document && i.scrollParent[0].tagName 
!== "HTML") {
+
+                       if(!o.axis || o.axis !== "x") {
+                               if((i.overflowOffset.top + 
i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+                                       i.scrollParent[0].scrollTop = scrolled 
= i.scrollParent[0].scrollTop + o.scrollSpeed;
+                               } else if(event.pageY - i.overflowOffset.top < 
o.scrollSensitivity) {
+                                       i.scrollParent[0].scrollTop = scrolled 
= i.scrollParent[0].scrollTop - o.scrollSpeed;
+                               }
+                       }
+
+                       if(!o.axis || o.axis !== "y") {
+                               if((i.overflowOffset.left + 
i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+                                       i.scrollParent[0].scrollLeft = scrolled 
= i.scrollParent[0].scrollLeft + o.scrollSpeed;
+                               } else if(event.pageX - i.overflowOffset.left < 
o.scrollSensitivity) {
+                                       i.scrollParent[0].scrollLeft = scrolled 
= i.scrollParent[0].scrollLeft - o.scrollSpeed;
+                               }
+                       }
+
+               } else {
+
+                       if(!o.axis || o.axis !== "x") {
+                               if(event.pageY - $(document).scrollTop() < 
o.scrollSensitivity) {
+                                       scrolled = 
$(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+                               } else if($(window).height() - (event.pageY - 
$(document).scrollTop()) < o.scrollSensitivity) {
+                                       scrolled = 
$(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+                               }
+                       }
+
+                       if(!o.axis || o.axis !== "y") {
+                               if(event.pageX - $(document).scrollLeft() < 
o.scrollSensitivity) {
+                                       scrolled = 
$(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+                               } else if($(window).width() - (event.pageX - 
$(document).scrollLeft()) < o.scrollSensitivity) {
+                                       scrolled = 
$(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+                               }
+                       }
+
+               }
+
+               if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+                       $.ui.ddmanager.prepareOffsets(i, event);
+               }
+
+       }
+});
+
+$.ui.plugin.add("draggable", "snap", {
+       start: function() {
+
+               var i = $(this).data("ui-draggable"),
+                       o = i.options;
+
+               i.snapElements = [];
+
+               $(o.snap.constructor !== String ? ( o.snap.items || 
":data(ui-draggable)" ) : o.snap).each(function() {
+                       var $t = $(this),
+                               $o = $t.offset();
+                       if(this !== i.element[0]) {
+                               i.snapElements.push({
+                                       item: this,
+                                       width: $t.outerWidth(), height: 
$t.outerHeight(),
+                                       top: $o.top, left: $o.left
+                               });
+                       }
+               });
+
+       },
+       drag: function(event, ui) {
+
+               var ts, bs, ls, rs, l, r, t, b, i, first,
+                       inst = $(this).data("ui-draggable"),
+                       o = inst.options,
+                       d = o.snapTolerance,
+                       x1 = ui.offset.left, x2 = x1 + 
inst.helperProportions.width,
+                       y1 = ui.offset.top, y2 = y1 + 
inst.helperProportions.height;
+
+               for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+                       l = inst.snapElements[i].left;
+                       r = l + inst.snapElements[i].width;
+                       t = inst.snapElements[i].top;
+                       b = t + inst.snapElements[i].height;
+
+                       if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + 
d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ 
i ].item ) ) {
+                               if(inst.snapElements[i].snapping) {
+                                       (inst.options.snap.release && 
inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { 
snapItem: inst.snapElements[i].item })));
+                               }
+                               inst.snapElements[i].snapping = false;
+                               continue;
+                       }
+
+                       if(o.snapMode !== "inner") {
+                               ts = Math.abs(t - y2) <= d;
+                               bs = Math.abs(b - y1) <= d;
+                               ls = Math.abs(l - x2) <= d;
+                               rs = Math.abs(r - x1) <= d;
+                               if(ts) {
+                                       ui.position.top = 
inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, 
left: 0 }).top - inst.margins.top;
+                               }
+                               if(bs) {
+                                       ui.position.top = 
inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+                               }
+                               if(ls) {
+                                       ui.position.left = 
inst._convertPositionTo("relative", { top: 0, left: l - 
inst.helperProportions.width }).left - inst.margins.left;
+                               }
+                               if(rs) {
+                                       ui.position.left = 
inst._convertPositionTo("relative", { top: 0, left: r }).left - 
inst.margins.left;
+                               }
+                       }
+
+                       first = (ts || bs || ls || rs);
+
+                       if(o.snapMode !== "outer") {
+                               ts = Math.abs(t - y1) <= d;
+                               bs = Math.abs(b - y2) <= d;
+                               ls = Math.abs(l - x1) <= d;
+                               rs = Math.abs(r - x2) <= d;
+                               if(ts) {
+                                       ui.position.top = 
inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+                               }
+                               if(bs) {
+                                       ui.position.top = 
inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, 
left: 0 }).top - inst.margins.top;
+                               }
+                               if(ls) {
+                                       ui.position.left = 
inst._convertPositionTo("relative", { top: 0, left: l }).left - 
inst.margins.left;
+                               }
+                               if(rs) {
+                                       ui.position.left = 
inst._convertPositionTo("relative", { top: 0, left: r - 
inst.helperProportions.width }).left - inst.margins.left;
+                               }
+                       }
+
+                       if(!inst.snapElements[i].snapping && (ts || bs || ls || 
rs || first)) {
+                               (inst.options.snap.snap && 
inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { 
snapItem: inst.snapElements[i].item })));
+                       }
+                       inst.snapElements[i].snapping = (ts || bs || ls || rs 
|| first);
+
+               }
+
+       }
+});
+
+$.ui.plugin.add("draggable", "stack", {
+       start: function() {
+               var min,
+                       o = this.data("ui-draggable").options,
+                       group = $.makeArray($(o.stack)).sort(function(a,b) {
+                               return (parseInt($(a).css("zIndex"),10) || 0) - 
(parseInt($(b).css("zIndex"),10) || 0);
+                       });
+
+               if (!group.length) { return; }
+
+               min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+               $(group).each(function(i) {
+                       $(this).css("zIndex", min + i);
+               });
+               this.css("zIndex", (min + group.length));
+       }
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+       start: function(event, ui) {
+               var t = $(ui.helper), o = $(this).data("ui-draggable").options;
+               if(t.css("zIndex")) {
+                       o._zIndex = t.css("zIndex");
+               }
+               t.css("zIndex", o.zIndex);
+       },
+       stop: function(event, ui) {
+               var o = $(this).data("ui-draggable").options;
+               if(o._zIndex) {
+                       $(ui.helper).css("zIndex", o._zIndex);
+               }
+       }
+});
+
+})(jQuery);
+(function( $, undefined ) {
+
+function isOverAxis( x, reference, size ) {
+       return ( x > reference ) && ( x < ( reference + size ) );
+}
+
+$.widget("ui.droppable", {
+       version: "1.10.4",
+       widgetEventPrefix: "drop",
+       options: {
+               accept: "*",
+               activeClass: false,
+               addClasses: true,
+               greedy: false,
+               hoverClass: false,
+               scope: "default",
+               tolerance: "intersect",
+
+               // callbacks
+               activate: null,
+               deactivate: null,
+               drop: null,
+               out: null,
+               over: null
+       },
+       _create: function() {
+
+               var proportions,
+                       o = this.options,
+                       accept = o.accept;
+
+               this.isover = false;
+               this.isout = true;
+
+               this.accept = $.isFunction(accept) ? accept : function(d) {
+                       return d.is(accept);
+               };
+
+               this.proportions = function( /* valueToWrite */ ) {
+                       if ( arguments.length ) {
+                               // Store the droppable's proportions
+                               proportions = arguments[ 0 ];
+                       } else {
+                               // Retrieve or derive the droppable's 
proportions
+                               return proportions ?
+                                       proportions :
+                                       proportions = {
+                                               width: this.element[ 0 
].offsetWidth,
+                                               height: this.element[ 0 
].offsetHeight
+                                       };
+                       }
+               };
+
+               // Add the reference and positions to the manager
+               $.ui.ddmanager.droppables[o.scope] = 
$.ui.ddmanager.droppables[o.scope] || [];
+               $.ui.ddmanager.droppables[o.scope].push(this);
+
+               (o.addClasses && this.element.addClass("ui-droppable"));
+
+       },
+
+       _destroy: function() {
+               var i = 0,
+                       drop = $.ui.ddmanager.droppables[this.options.scope];
+
+               for ( ; i < drop.length; i++ ) {
+                       if ( drop[i] === this ) {
+                               drop.splice(i, 1);
+                       }
+               }
+
+               this.element.removeClass("ui-droppable ui-droppable-disabled");
+       },
+
+       _setOption: function(key, value) {
+
+               if(key === "accept") {
+                       this.accept = $.isFunction(value) ? value : function(d) 
{
+                               return d.is(value);
+                       };
+               }
+               $.Widget.prototype._setOption.apply(this, arguments);
+       },
+
+       _activate: function(event) {
+               var draggable = $.ui.ddmanager.current;
+               if(this.options.activeClass) {
+                       this.element.addClass(this.options.activeClass);
+               }
+               if(draggable){
+                       this._trigger("activate", event, this.ui(draggable));
+               }
+       },
+
+       _deactivate: function(event) {
+               var draggable = $.ui.ddmanager.current;
+               if(this.options.activeClass) {
+                       this.element.removeClass(this.options.activeClass);
+               }
+               if(draggable){
+                       this._trigger("deactivate", event, this.ui(draggable));
+               }
+       },
+
+       _over: function(event) {
+
+               var draggable = $.ui.ddmanager.current;
+
+               // Bail if draggable and droppable are same element
+               if (!draggable || (draggable.currentItem || 
draggable.element)[0] === this.element[0]) {
+                       return;
+               }
+
+               if (this.accept.call(this.element[0],(draggable.currentItem || 
draggable.element))) {
+                       if(this.options.hoverClass) {
+                               this.element.addClass(this.options.hoverClass);
+                       }
+                       this._trigger("over", event, this.ui(draggable));
+               }
+
+       },
+
+       _out: function(event) {
+
+               var draggable = $.ui.ddmanager.current;
+
+               // Bail if draggable and droppable are same element
+               if (!draggable || (draggable.currentItem || 
draggable.element)[0] === this.element[0]) {
+                       return;
+               }
+
+               if (this.accept.call(this.element[0],(draggable.currentItem || 
draggable.element))) {
+                       if(this.options.hoverClass) {
+                               
this.element.removeClass(this.options.hoverClass);
+                       }
+                       this._trigger("out", event, this.ui(draggable));
+               }
+
+       },
+
+       _drop: function(event,custom) {
+
+               var draggable = custom || $.ui.ddmanager.current,
+                       childrenIntersection = false;
+
+               // Bail if draggable and droppable are same element
+               if (!draggable || (draggable.currentItem || 
draggable.element)[0] === this.element[0]) {
+                       return false;
+               }
+
+               
this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function()
 {
+                       var inst = $.data(this, "ui-droppable");
+                       if(
+                               inst.options.greedy &&
+                               !inst.options.disabled &&
+                               inst.options.scope === draggable.options.scope 
&&
+                               inst.accept.call(inst.element[0], 
(draggable.currentItem || draggable.element)) &&
+                               $.ui.intersect(draggable, $.extend(inst, { 
offset: inst.element.offset() }), inst.options.tolerance)
+                       ) { childrenIntersection = true; return false; }
+               });
+               if(childrenIntersection) {
+                       return false;
+               }
+
+               if(this.accept.call(this.element[0],(draggable.currentItem || 
draggable.element))) {
+                       if(this.options.activeClass) {
+                               
this.element.removeClass(this.options.activeClass);
+                       }
+                       if(this.options.hoverClass) {
+                               
this.element.removeClass(this.options.hoverClass);
+                       }
+                       this._trigger("drop", event, this.ui(draggable));
+                       return this.element;
+               }
+
+               return false;
+
+       },
+
+       ui: function(c) {
+               return {
+                       draggable: (c.currentItem || c.element),
+                       helper: c.helper,
+                       position: c.position,
+                       offset: c.positionAbs
+               };
+       }
+
+});
+
+$.ui.intersect = function(draggable, droppable, toleranceMode) {
+
+       if (!droppable.offset) {
+               return false;
+       }
+
+       var draggableLeft, draggableTop,
+               x1 = (draggable.positionAbs || 
draggable.position.absolute).left,
+               y1 = (draggable.positionAbs || draggable.position.absolute).top,
+               x2 = x1 + draggable.helperProportions.width,
+               y2 = y1 + draggable.helperProportions.height,
+               l = droppable.offset.left,
+               t = droppable.offset.top,
+               r = l + droppable.proportions().width,
+               b = t + droppable.proportions().height;
+
+       switch (toleranceMode) {
+               case "fit":
+                       return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+               case "intersect":
+                       return (l < x1 + (draggable.helperProportions.width / 
2) && // Right Half
+                               x2 - (draggable.helperProportions.width / 2) < 
r && // Left Half
+                               t < y1 + (draggable.helperProportions.height / 
2) && // Bottom Half
+                               y2 - (draggable.helperProportions.height / 2) < 
b ); // Top Half
+               case "pointer":
+                       draggableLeft = ((draggable.positionAbs || 
draggable.position.absolute).left + (draggable.clickOffset || 
draggable.offset.click).left);
+                       draggableTop = ((draggable.positionAbs || 
draggable.position.absolute).top + (draggable.clickOffset || 
draggable.offset.click).top);
+                       return isOverAxis( draggableTop, t, 
droppable.proportions().height ) && isOverAxis( draggableLeft, l, 
droppable.proportions().width );
+               case "touch":
+                       return (
+                               (y1 >= t && y1 <= b) || // Top edge touching
+                               (y2 >= t && y2 <= b) || // Bottom edge touching
+                               (y1 < t && y2 > b)              // Surrounded 
vertically
+                       ) && (
+                               (x1 >= l && x1 <= r) || // Left edge touching
+                               (x2 >= l && x2 <= r) || // Right edge touching
+                               (x1 < l && x2 > r)              // Surrounded 
horizontally
+                       );
+               default:
+                       return false;
+               }
+
+};
+
+/*
+       This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+       current: null,
+       droppables: { "default": [] },
+       prepareOffsets: function(t, event) {
+
+               var i, j,
+                       m = $.ui.ddmanager.droppables[t.options.scope] || [],
+                       type = event ? event.type : null, // workaround for 
#2317
+                       list = (t.currentItem || 
t.element).find(":data(ui-droppable)").addBack();
+
+               droppablesLoop: for (i = 0; i < m.length; i++) {
+
+                       //No disabled and non-accepted
+                       if(m[i].options.disabled || (t && 
!m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+                               continue;
+                       }
+
+                       // Filter out elements in the current dragged item
+                       for (j=0; j < list.length; j++) {
+                               if(list[j] === m[i].element[0]) {
+                                       m[i].proportions().height = 0;
+                                       continue droppablesLoop;
+                               }
+                       }
+
+                       m[i].visible = m[i].element.css("display") !== "none";
+                       if(!m[i].visible) {
+                               continue;
+                       }
+
+                       //Activate the droppable if used directly from 
draggables
+                       if(type === "mousedown") {
+                               m[i]._activate.call(m[i], event);
+                       }
+
+                       m[ i ].offset = m[ i ].element.offset();
+                       m[ i ].proportions({ width: m[ i ].element[ 0 
].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
+
+               }
+
+       },
+       drop: function(draggable, event) {
+
+               var dropped = false;
+               // Create a copy of the droppables in case the list changes 
during the drop (#9116)
+               $.each(($.ui.ddmanager.droppables[draggable.options.scope] || 
[]).slice(), function() {
+
+                       if(!this.options) {
+                               return;
+                       }
+                       if (!this.options.disabled && this.visible && 
$.ui.intersect(draggable, this, this.options.tolerance)) {
+                               dropped = this._drop.call(this, event) || 
dropped;
+                       }
+
+                       if (!this.options.disabled && this.visible && 
this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) 
{
+                               this.isout = true;
+                               this.isover = false;
+                               this._deactivate.call(this, event);
+                       }
+
+               });
+               return dropped;
+
+       },
+       dragStart: function( draggable, event ) {
+               //Listen for scrolling so that if the dragging causes scrolling 
the position of the droppables can be recalculated (see #5003)
+               draggable.element.parentsUntil( "body" ).bind( 
"scroll.droppable", function() {
+                       if( !draggable.options.refreshPositions ) {
+                               $.ui.ddmanager.prepareOffsets( draggable, event 
);
+                       }
+               });
+       },
+       drag: function(draggable, event) {
+
+               //If you have a highly dynamic page, you might try this option. 
It renders positions every time you move the mouse.
+               if(draggable.options.refreshPositions) {
+                       $.ui.ddmanager.prepareOffsets(draggable, event);
+               }
+
+               //Run through all droppables and check their positions based on 
specific tolerance options
+               $.each($.ui.ddmanager.droppables[draggable.options.scope] || 
[], function() {
+
+                       if(this.options.disabled || this.greedyChild || 
!this.visible) {
+                               return;
+                       }
+
+                       var parentInstance, scope, parent,
+                               intersects = $.ui.intersect(draggable, this, 
this.options.tolerance),
+                               c = !intersects && this.isover ? "isout" : 
(intersects && !this.isover ? "isover" : null);
+                       if(!c) {
+                               return;
+                       }
+
+                       if (this.options.greedy) {
+                               // find droppable parents with same scope
+                               scope = this.options.scope;
+                               parent = 
this.element.parents(":data(ui-droppable)").filter(function () {
+                                       return $.data(this, 
"ui-droppable").options.scope === scope;
+                               });
+
+                               if (parent.length) {
+                                       parentInstance = $.data(parent[0], 
"ui-droppable");
+                                       parentInstance.greedyChild = (c === 
"isover");
+                               }
+                       }
+
+                       // we just moved into a greedy child
+                       if (parentInstance && c === "isover") {
+                               parentInstance.isover = false;
+                               parentInstance.isout = true;
+                               parentInstance._out.call(parentInstance, event);
+                       }
+
+                       this[c] = true;
+                       this[c === "isout" ? "isover" : "isout"] = false;
+                       this[c === "isover" ? "_over" : "_out"].call(this, 
event);
+
+                       // we just moved out of a greedy child
+                       if (parentInstance && c === "isout") {
+                               parentInstance.isout = false;
+                               parentInstance.isover = true;
+                               parentInstance._over.call(parentInstance, 
event);
+                       }
+               });
+
+       },
+       dragStop: function( draggable, event ) {
+               draggable.element.parentsUntil( "body" ).unbind( 
"scroll.droppable" );
+               //Call prepareOffsets one final time since IE does not fire 
return scroll events when overflow was caused by drag (see #5003)
+               if( !draggable.options.refreshPositions ) {
+                       $.ui.ddmanager.prepareOffsets( draggable, event );
+               }
+       }
+};
+
+})(jQuery);
+(function( $, undefined ) {
+
+function num(v) {
+       return parseInt(v, 10) || 0;
+}
+
+function isNumber(value) {
+       return !isNaN(parseInt(value, 10));
+}
+
+$.widget("ui.resizable", $.ui.mouse, {
+       version: "1.10.4",
+       widgetEventPrefix: "resize",
+       options: {
+               alsoResize: false,
+               animate: false,
+               animateDuration: "slow",
+               animateEasing: "swing",
+               aspectRatio: false,
+               autoHide: false,
+               containment: false,
+               ghost: false,
+               grid: false,
+               handles: "e,s,se",
+               helper: false,
+               maxHeight: null

<TRUNCATED>

Reply via email to