http://git-wip-us.apache.org/repos/asf/james-site/blob/38b1b837/content/development-bundle/ui/jquery.ui.progressbar.js
----------------------------------------------------------------------
diff --git a/content/development-bundle/ui/jquery.ui.progressbar.js 
b/content/development-bundle/ui/jquery.ui.progressbar.js
new file mode 100644
index 0000000..4aa19d8
--- /dev/null
+++ b/content/development-bundle/ui/jquery.ui.progressbar.js
@@ -0,0 +1,105 @@
+/*!
+ * jQuery UI Progressbar 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/progressbar/
+ *
+ * Depends:
+ *   jquery.ui.core.js
+ *   jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget( "ui.progressbar", {
+       version: "1.9.2",
+       options: {
+               value: 0,
+               max: 100
+       },
+
+       min: 0,
+
+       _create: function() {
+               this.element
+                       .addClass( "ui-progressbar ui-widget ui-widget-content 
ui-corner-all" )
+                       .attr({
+                               role: "progressbar",
+                               "aria-valuemin": this.min,
+                               "aria-valuemax": this.options.max,
+                               "aria-valuenow": this._value()
+                       });
+
+               this.valueDiv = $( "<div class='ui-progressbar-value 
ui-widget-header ui-corner-left'></div>" )
+                       .appendTo( this.element );
+
+               this.oldValue = this._value();
+               this._refreshValue();
+       },
+
+       _destroy: function() {
+               this.element
+                       .removeClass( "ui-progressbar ui-widget 
ui-widget-content ui-corner-all" )
+                       .removeAttr( "role" )
+                       .removeAttr( "aria-valuemin" )
+                       .removeAttr( "aria-valuemax" )
+                       .removeAttr( "aria-valuenow" );
+
+               this.valueDiv.remove();
+       },
+
+       value: function( newValue ) {
+               if ( newValue === undefined ) {
+                       return this._value();
+               }
+
+               this._setOption( "value", newValue );
+               return this;
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "value" ) {
+                       this.options.value = value;
+                       this._refreshValue();
+                       if ( this._value() === this.options.max ) {
+                               this._trigger( "complete" );
+                       }
+               }
+
+               this._super( key, value );
+       },
+
+       _value: function() {
+               var val = this.options.value;
+               // normalize invalid value
+               if ( typeof val !== "number" ) {
+                       val = 0;
+               }
+               return Math.min( this.options.max, Math.max( this.min, val ) );
+       },
+
+       _percentage: function() {
+               return 100 * this._value() / this.options.max;
+       },
+
+       _refreshValue: function() {
+               var value = this.value(),
+                       percentage = this._percentage();
+
+               if ( this.oldValue !== value ) {
+                       this.oldValue = value;
+                       this._trigger( "change" );
+               }
+
+               this.valueDiv
+                       .toggle( value > this.min )
+                       .toggleClass( "ui-corner-right", value === 
this.options.max )
+                       .width( percentage.toFixed(0) + "%" );
+               this.element.attr( "aria-valuenow", value );
+       }
+});
+
+})( jQuery );

http://git-wip-us.apache.org/repos/asf/james-site/blob/38b1b837/content/development-bundle/ui/jquery.ui.resizable.js
----------------------------------------------------------------------
diff --git a/content/development-bundle/ui/jquery.ui.resizable.js 
b/content/development-bundle/ui/jquery.ui.resizable.js
new file mode 100644
index 0000000..bb277e2
--- /dev/null
+++ b/content/development-bundle/ui/jquery.ui.resizable.js
@@ -0,0 +1,801 @@
+/*!
+ * jQuery UI Resizable 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/resizable/
+ *
+ * Depends:
+ *     jquery.ui.core.js
+ *     jquery.ui.mouse.js
+ *     jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.resizable", $.ui.mouse, {
+       version: "1.9.2",
+       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,
+               maxWidth: null,
+               minHeight: 10,
+               minWidth: 10,
+               zIndex: 1000
+       },
+       _create: function() {
+
+               var that = this, o = this.options;
+               this.element.addClass("ui-resizable");
+
+               $.extend(this, {
+                       _aspectRatio: !!(o.aspectRatio),
+                       aspectRatio: o.aspectRatio,
+                       originalElement: this.element,
+                       _proportionallyResizeElements: [],
+                       _helper: o.helper || o.ghost || o.animate ? o.helper || 
'ui-resizable-helper' : null
+               });
+
+               //Wrap the element if it cannot hold child nodes
+               
if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+
+                       //Create a wrapper element and set the wrapper to the 
new current internal element
+                       this.element.wrap(
+                               $('<div class="ui-wrapper" style="overflow: 
hidden;"></div>').css({
+                                       position: this.element.css('position'),
+                                       width: this.element.outerWidth(),
+                                       height: this.element.outerHeight(),
+                                       top: this.element.css('top'),
+                                       left: this.element.css('left')
+                               })
+                       );
+
+                       //Overwrite the original this.element
+                       this.element = this.element.parent().data(
+                               "resizable", this.element.data('resizable')
+                       );
+
+                       this.elementIsWrapper = true;
+
+                       //Move margins to the wrapper
+                       this.element.css({ marginLeft: 
this.originalElement.css("marginLeft"), marginTop: 
this.originalElement.css("marginTop"), marginRight: 
this.originalElement.css("marginRight"), marginBottom: 
this.originalElement.css("marginBottom") });
+                       this.originalElement.css({ marginLeft: 0, marginTop: 0, 
marginRight: 0, marginBottom: 0});
+
+                       //Prevent Safari textarea resize
+                       this.originalResizeStyle = 
this.originalElement.css('resize');
+                       this.originalElement.css('resize', 'none');
+
+                       //Push the actual element to our proportionallyResize 
internal array
+                       
this._proportionallyResizeElements.push(this.originalElement.css({ position: 
'static', zoom: 1, display: 'block' }));
+
+                       // avoid IE jump (hard set the margin)
+                       this.originalElement.css({ margin: 
this.originalElement.css('margin') });
+
+                       // fix handlers offset
+                       this._proportionallyResize();
+
+               }
+
+               this.handles = o.handles || (!$('.ui-resizable-handle', 
this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', 
s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: 
'.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' });
+               if(this.handles.constructor == String) {
+
+                       if(this.handles == 'all') this.handles = 
'n,e,s,w,se,sw,ne,nw';
+                       var n = this.handles.split(","); this.handles = {};
+
+                       for(var i = 0; i < n.length; i++) {
+
+                               var handle = $.trim(n[i]), hname = 
'ui-resizable-'+handle;
+                               var axis = $('<div class="ui-resizable-handle ' 
+ hname + '"></div>');
+
+                               // Apply zIndex to all handles - see #7960
+                               axis.css({ zIndex: o.zIndex });
+
+                               //TODO : What's going on here?
+                               if ('se' == handle) {
+                                       axis.addClass('ui-icon 
ui-icon-gripsmall-diagonal-se');
+                               };
+
+                               //Insert into internal handles object and 
append to element
+                               this.handles[handle] = '.ui-resizable-'+handle;
+                               this.element.append(axis);
+                       }
+
+               }
+
+               this._renderAxis = function(target) {
+
+                       target = target || this.element;
+
+                       for(var i in this.handles) {
+
+                               if(this.handles[i].constructor == String)
+                                       this.handles[i] = $(this.handles[i], 
this.element).show();
+
+                               //Apply pad to wrapper element, needed to fix 
axis position (textarea, inputs, scrolls)
+                               if (this.elementIsWrapper && 
this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+
+                                       var axis = $(this.handles[i], 
this.element), padWrapper = 0;
+
+                                       //Checking the correct pad and border
+                                       padWrapper = /sw|ne|nw|se|n|s/.test(i) 
? axis.outerHeight() : axis.outerWidth();
+
+                                       //The padding type i have to apply...
+                                       var padPos = [ 'padding',
+                                               /ne|nw|n/.test(i) ? 'Top' :
+                                               /se|sw|s/.test(i) ? 'Bottom' :
+                                               /^e$/.test(i) ? 'Right' : 
'Left' ].join("");
+
+                                       target.css(padPos, padWrapper);
+
+                                       this._proportionallyResize();
+
+                               }
+
+                               //TODO: What's that good for? There's not 
anything to be executed left
+                               if(!$(this.handles[i]).length)
+                                       continue;
+
+                       }
+               };
+
+               //TODO: make renderAxis a prototype function
+               this._renderAxis(this.element);
+
+               this._handles = $('.ui-resizable-handle', this.element)
+                       .disableSelection();
+
+               //Matching axis name
+               this._handles.mouseover(function() {
+                       if (!that.resizing) {
+                               if (this.className)
+                                       var axis = 
this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+                               //Axis, default = se
+                               that.axis = axis && axis[1] ? axis[1] : 'se';
+                       }
+               });
+
+               //If we want to auto hide the elements
+               if (o.autoHide) {
+                       this._handles.hide();
+                       $(this.element)
+                               .addClass("ui-resizable-autohide")
+                               .mouseenter(function() {
+                                       if (o.disabled) return;
+                                       
$(this).removeClass("ui-resizable-autohide");
+                                       that._handles.show();
+                               })
+                               .mouseleave(function(){
+                                       if (o.disabled) return;
+                                       if (!that.resizing) {
+                                               
$(this).addClass("ui-resizable-autohide");
+                                               that._handles.hide();
+                                       }
+                               });
+               }
+
+               //Initialize the mouse interaction
+               this._mouseInit();
+
+       },
+
+       _destroy: function() {
+
+               this._mouseDestroy();
+
+               var _destroy = function(exp) {
+                       $(exp).removeClass("ui-resizable ui-resizable-disabled 
ui-resizable-resizing")
+                               
.removeData("resizable").removeData("ui-resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
+               };
+
+               //TODO: Unwrap at same DOM position
+               if (this.elementIsWrapper) {
+                       _destroy(this.element);
+                       var wrapper = this.element;
+                       this.originalElement.css({
+                               position: wrapper.css('position'),
+                               width: wrapper.outerWidth(),
+                               height: wrapper.outerHeight(),
+                               top: wrapper.css('top'),
+                               left: wrapper.css('left')
+                       }).insertAfter( wrapper );
+                       wrapper.remove();
+               }
+
+               this.originalElement.css('resize', this.originalResizeStyle);
+               _destroy(this.originalElement);
+
+               return this;
+       },
+
+       _mouseCapture: function(event) {
+               var handle = false;
+               for (var i in this.handles) {
+                       if ($(this.handles[i])[0] == event.target) {
+                               handle = true;
+                       }
+               }
+
+               return !this.options.disabled && handle;
+       },
+
+       _mouseStart: function(event) {
+
+               var o = this.options, iniPos = this.element.position(), el = 
this.element;
+
+               this.resizing = true;
+               this.documentScroll = { top: $(document).scrollTop(), left: 
$(document).scrollLeft() };
+
+               // bugfix for http://dev.jquery.com/ticket/1749
+               if (el.is('.ui-draggable') || 
(/absolute/).test(el.css('position'))) {
+                       el.css({ position: 'absolute', top: iniPos.top, left: 
iniPos.left });
+               }
+
+               this._renderProxy();
+
+               var curleft = num(this.helper.css('left')), curtop = 
num(this.helper.css('top'));
+
+               if (o.containment) {
+                       curleft += $(o.containment).scrollLeft() || 0;
+                       curtop += $(o.containment).scrollTop() || 0;
+               }
+
+               //Store needed variables
+               this.offset = this.helper.offset();
+               this.position = { left: curleft, top: curtop };
+               this.size = this._helper ? { width: el.outerWidth(), height: 
el.outerHeight() } : { width: el.width(), height: el.height() };
+               this.originalSize = this._helper ? { width: el.outerWidth(), 
height: el.outerHeight() } : { width: el.width(), height: el.height() };
+               this.originalPosition = { left: curleft, top: curtop };
+               this.sizeDiff = { width: el.outerWidth() - el.width(), height: 
el.outerHeight() - el.height() };
+               this.originalMousePosition = { left: event.pageX, top: 
event.pageY };
+
+               //Aspect Ratio
+               this.aspectRatio = (typeof o.aspectRatio == 'number') ? 
o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+
+               var cursor = $('.ui-resizable-' + this.axis).css('cursor');
+               $('body').css('cursor', cursor == 'auto' ? this.axis + 
'-resize' : cursor);
+
+               el.addClass("ui-resizable-resizing");
+               this._propagate("start", event);
+               return true;
+       },
+
+       _mouseDrag: function(event) {
+
+               //Increase performance, avoid regex
+               var el = this.helper, o = this.options, props = {},
+                       that = this, smp = this.originalMousePosition, a = 
this.axis;
+
+               var dx = (event.pageX-smp.left)||0, dy = 
(event.pageY-smp.top)||0;
+               var trigger = this._change[a];
+               if (!trigger) return false;
+
+               // Calculate the attrs that will be change
+               var data = trigger.apply(this, [event, dx, dy]);
+
+               // Put this in the mouseDrag handler since the user can start 
pressing shift while resizing
+               this._updateVirtualBoundaries(event.shiftKey);
+               if (this._aspectRatio || event.shiftKey)
+                       data = this._updateRatio(data, event);
+
+               data = this._respectSize(data, event);
+
+               // plugins callbacks need to be called first
+               this._propagate("resize", event);
+
+               el.css({
+                       top: this.position.top + "px", left: this.position.left 
+ "px",
+                       width: this.size.width + "px", height: this.size.height 
+ "px"
+               });
+
+               if (!this._helper && this._proportionallyResizeElements.length)
+                       this._proportionallyResize();
+
+               this._updateCache(data);
+
+               // calling the user callback at the end
+               this._trigger('resize', event, this.ui());
+
+               return false;
+       },
+
+       _mouseStop: function(event) {
+
+               this.resizing = false;
+               var o = this.options, that = this;
+
+               if(this._helper) {
+                       var pr = this._proportionallyResizeElements, ista = 
pr.length && (/textarea/i).test(pr[0].nodeName),
+                               soffseth = ista && $.ui.hasScroll(pr[0], 
'left') /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+                               soffsetw = ista ? 0 : that.sizeDiff.width;
+
+                       var s = { width: (that.helper.width()  - soffsetw), 
height: (that.helper.height() - soffseth) },
+                               left = (parseInt(that.element.css('left'), 10) 
+ (that.position.left - that.originalPosition.left)) || null,
+                               top = (parseInt(that.element.css('top'), 10) + 
(that.position.top - that.originalPosition.top)) || null;
+
+                       if (!o.animate)
+                               this.element.css($.extend(s, { top: top, left: 
left }));
+
+                       that.helper.height(that.size.height);
+                       that.helper.width(that.size.width);
+
+                       if (this._helper && !o.animate) 
this._proportionallyResize();
+               }
+
+               $('body').css('cursor', 'auto');
+
+               this.element.removeClass("ui-resizable-resizing");
+
+               this._propagate("stop", event);
+
+               if (this._helper) this.helper.remove();
+               return false;
+
+       },
+
+       _updateVirtualBoundaries: function(forceAspectRatio) {
+               var o = this.options, pMinWidth, pMaxWidth, pMinHeight, 
pMaxHeight, b;
+
+               b = {
+                       minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
+                       maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+                       minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
+                       maxHeight: isNumber(o.maxHeight) ? o.maxHeight : 
Infinity
+               };
+
+               if(this._aspectRatio || forceAspectRatio) {
+                       // We want to create an enclosing box whose aspect 
ration is the requested one
+                       // First, compute the "projected" size for each 
dimension based on the aspect ratio and other dimension
+                       pMinWidth = b.minHeight * this.aspectRatio;
+                       pMinHeight = b.minWidth / this.aspectRatio;
+                       pMaxWidth = b.maxHeight * this.aspectRatio;
+                       pMaxHeight = b.maxWidth / this.aspectRatio;
+
+                       if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
+                       if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
+                       if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
+                       if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
+               }
+               this._vBoundaries = b;
+       },
+
+       _updateCache: function(data) {
+               var o = this.options;
+               this.offset = this.helper.offset();
+               if (isNumber(data.left)) this.position.left = data.left;
+               if (isNumber(data.top)) this.position.top = data.top;
+               if (isNumber(data.height)) this.size.height = data.height;
+               if (isNumber(data.width)) this.size.width = data.width;
+       },
+
+       _updateRatio: function(data, event) {
+
+               var o = this.options, cpos = this.position, csize = this.size, 
a = this.axis;
+
+               if (isNumber(data.height)) data.width = (data.height * 
this.aspectRatio);
+               else if (isNumber(data.width)) data.height = (data.width / 
this.aspectRatio);
+
+               if (a == 'sw') {
+                       data.left = cpos.left + (csize.width - data.width);
+                       data.top = null;
+               }
+               if (a == 'nw') {
+                       data.top = cpos.top + (csize.height - data.height);
+                       data.left = cpos.left + (csize.width - data.width);
+               }
+
+               return data;
+       },
+
+       _respectSize: function(data, event) {
+
+               var el = this.helper, o = this._vBoundaries, pRatio = 
this._aspectRatio || event.shiftKey, a = this.axis,
+                               ismaxw = isNumber(data.width) && o.maxWidth && 
(o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && 
(o.maxHeight < data.height),
+                                       isminw = isNumber(data.width) && 
o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && 
o.minHeight && (o.minHeight > data.height);
+
+               if (isminw) data.width = o.minWidth;
+               if (isminh) data.height = o.minHeight;
+               if (ismaxw) data.width = o.maxWidth;
+               if (ismaxh) data.height = o.maxHeight;
+
+               var dw = this.originalPosition.left + this.originalSize.width, 
dh = this.position.top + this.size.height;
+               var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+
+               if (isminw && cw) data.left = dw - o.minWidth;
+               if (ismaxw && cw) data.left = dw - o.maxWidth;
+               if (isminh && ch)       data.top = dh - o.minHeight;
+               if (ismaxh && ch)       data.top = dh - o.maxHeight;
+
+               // fixing jump error on top/left - bug #2330
+               var isNotwh = !data.width && !data.height;
+               if (isNotwh && !data.left && data.top) data.top = null;
+               else if (isNotwh && !data.top && data.left) data.left = null;
+
+               return data;
+       },
+
+       _proportionallyResize: function() {
+
+               var o = this.options;
+               if (!this._proportionallyResizeElements.length) return;
+               var element = this.helper || this.element;
+
+               for (var i=0; i < this._proportionallyResizeElements.length; 
i++) {
+
+                       var prel = this._proportionallyResizeElements[i];
+
+                       if (!this.borderDif) {
+                               var b = [prel.css('borderTopWidth'), 
prel.css('borderRightWidth'), prel.css('borderBottomWidth'), 
prel.css('borderLeftWidth')],
+                                       p = [prel.css('paddingTop'), 
prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
+
+                               this.borderDif = $.map(b, function(v, i) {
+                                       var border = parseInt(v,10)||0, padding 
= parseInt(p[i],10)||0;
+                                       return border + padding;
+                               });
+                       }
+
+                       prel.css({
+                               height: (element.height() - this.borderDif[0] - 
this.borderDif[2]) || 0,
+                               width: (element.width() - this.borderDif[1] - 
this.borderDif[3]) || 0
+                       });
+
+               };
+
+       },
+
+       _renderProxy: function() {
+
+               var el = this.element, o = this.options;
+               this.elementOffset = el.offset();
+
+               if(this._helper) {
+
+                       this.helper = this.helper || $('<div 
style="overflow:hidden;"></div>');
+
+                       // fix ie6 offset TODO: This seems broken
+                       var ie6offset = ($.ui.ie6 ? 1 : 0),
+                       pxyoffset = ( $.ui.ie6 ? 2 : -1 );
+
+                       this.helper.addClass(this._helper).css({
+                               width: this.element.outerWidth() + pxyoffset,
+                               height: this.element.outerHeight() + pxyoffset,
+                               position: 'absolute',
+                               left: this.elementOffset.left - ie6offset +'px',
+                               top: this.elementOffset.top - ie6offset +'px',
+                               zIndex: ++o.zIndex //TODO: Don't modify option
+                       });
+
+                       this.helper
+                               .appendTo("body")
+                               .disableSelection();
+
+               } else {
+                       this.helper = this.element;
+               }
+
+       },
+
+       _change: {
+               e: function(event, dx, dy) {
+                       return { width: this.originalSize.width + dx };
+               },
+               w: function(event, dx, dy) {
+                       var o = this.options, cs = this.originalSize, sp = 
this.originalPosition;
+                       return { left: sp.left + dx, width: cs.width - dx };
+               },
+               n: function(event, dx, dy) {
+                       var o = this.options, cs = this.originalSize, sp = 
this.originalPosition;
+                       return { top: sp.top + dy, height: cs.height - dy };
+               },
+               s: function(event, dx, dy) {
+                       return { height: this.originalSize.height + dy };
+               },
+               se: function(event, dx, dy) {
+                       return $.extend(this._change.s.apply(this, arguments), 
this._change.e.apply(this, [event, dx, dy]));
+               },
+               sw: function(event, dx, dy) {
+                       return $.extend(this._change.s.apply(this, arguments), 
this._change.w.apply(this, [event, dx, dy]));
+               },
+               ne: function(event, dx, dy) {
+                       return $.extend(this._change.n.apply(this, arguments), 
this._change.e.apply(this, [event, dx, dy]));
+               },
+               nw: function(event, dx, dy) {
+                       return $.extend(this._change.n.apply(this, arguments), 
this._change.w.apply(this, [event, dx, dy]));
+               }
+       },
+
+       _propagate: function(n, event) {
+               $.ui.plugin.call(this, n, [event, this.ui()]);
+               (n != "resize" && this._trigger(n, event, this.ui()));
+       },
+
+       plugins: {},
+
+       ui: function() {
+               return {
+                       originalElement: this.originalElement,
+                       element: this.element,
+                       helper: this.helper,
+                       position: this.position,
+                       size: this.size,
+                       originalSize: this.originalSize,
+                       originalPosition: this.originalPosition
+               };
+       }
+
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+       start: function (event, ui) {
+               var that = $(this).data("resizable"), o = that.options;
+
+               var _store = function (exp) {
+                       $(exp).each(function() {
+                               var el = $(this);
+                               el.data("resizable-alsoresize", {
+                                       width: parseInt(el.width(), 10), 
height: parseInt(el.height(), 10),
+                                       left: parseInt(el.css('left'), 10), 
top: parseInt(el.css('top'), 10)
+                               });
+                       });
+               };
+
+               if (typeof(o.alsoResize) == 'object' && 
!o.alsoResize.parentNode) {
+                       if (o.alsoResize.length) { o.alsoResize = 
o.alsoResize[0]; _store(o.alsoResize); }
+                       else { $.each(o.alsoResize, function (exp) { 
_store(exp); }); }
+               }else{
+                       _store(o.alsoResize);
+               }
+       },
+
+       resize: function (event, ui) {
+               var that = $(this).data("resizable"), o = that.options, os = 
that.originalSize, op = that.originalPosition;
+
+               var delta = {
+                       height: (that.size.height - os.height) || 0, width: 
(that.size.width - os.width) || 0,
+                       top: (that.position.top - op.top) || 0, left: 
(that.position.left - op.left) || 0
+               },
+
+               _alsoResize = function (exp, c) {
+                       $(exp).each(function() {
+                               var el = $(this), start = 
$(this).data("resizable-alsoresize"), style = {},
+                                       css = c && c.length ? c : 
el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 
'height', 'top', 'left'];
+
+                               $.each(css, function (i, prop) {
+                                       var sum = (start[prop]||0) + 
(delta[prop]||0);
+                                       if (sum && sum >= 0)
+                                               style[prop] = sum || null;
+                               });
+
+                               el.css(style);
+                       });
+               };
+
+               if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) 
{
+                       $.each(o.alsoResize, function (exp, c) { 
_alsoResize(exp, c); });
+               }else{
+                       _alsoResize(o.alsoResize);
+               }
+       },
+
+       stop: function (event, ui) {
+               $(this).removeData("resizable-alsoresize");
+       }
+});
+
+$.ui.plugin.add("resizable", "animate", {
+
+       stop: function(event, ui) {
+               var that = $(this).data("resizable"), o = that.options;
+
+               var pr = that._proportionallyResizeElements, ista = pr.length 
&& (/textarea/i).test(pr[0].nodeName),
+                                       soffseth = ista && 
$.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : 
that.sizeDiff.height,
+                                               soffsetw = ista ? 0 : 
that.sizeDiff.width;
+
+               var style = { width: (that.size.width - soffsetw), height: 
(that.size.height - soffseth) },
+                                       left = 
(parseInt(that.element.css('left'), 10) + (that.position.left - 
that.originalPosition.left)) || null,
+                                               top = 
(parseInt(that.element.css('top'), 10) + (that.position.top - 
that.originalPosition.top)) || null;
+
+               that.element.animate(
+                       $.extend(style, top && left ? { top: top, left: left } 
: {}), {
+                               duration: o.animateDuration,
+                               easing: o.animateEasing,
+                               step: function() {
+
+                                       var data = {
+                                               width: 
parseInt(that.element.css('width'), 10),
+                                               height: 
parseInt(that.element.css('height'), 10),
+                                               top: 
parseInt(that.element.css('top'), 10),
+                                               left: 
parseInt(that.element.css('left'), 10)
+                                       };
+
+                                       if (pr && pr.length) $(pr[0]).css({ 
width: data.width, height: data.height });
+
+                                       // propagating resize, and updating 
values for each animation step
+                                       that._updateCache(data);
+                                       that._propagate("resize", event);
+
+                               }
+                       }
+               );
+       }
+
+});
+
+$.ui.plugin.add("resizable", "containment", {
+
+       start: function(event, ui) {
+               var that = $(this).data("resizable"), o = that.options, el = 
that.element;
+               var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : 
(/parent/.test(oc)) ? el.parent().get(0) : oc;
+               if (!ce) return;
+
+               that.containerElement = $(ce);
+
+               if (/document/.test(oc) || oc == document) {
+                       that.containerOffset = { left: 0, top: 0 };
+                       that.containerPosition = { left: 0, top: 0 };
+
+                       that.parentData = {
+                               element: $(document), left: 0, top: 0,
+                               width: $(document).width(), height: 
$(document).height() || document.body.parentNode.scrollHeight
+                       };
+               }
+
+               // i'm a node, so compute top, left, right, bottom
+               else {
+                       var element = $(ce), p = [];
+                       $([ "Top", "Right", "Left", "Bottom" 
]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+
+                       that.containerOffset = element.offset();
+                       that.containerPosition = element.position();
+                       that.containerSize = { height: (element.innerHeight() - 
p[3]), width: (element.innerWidth() - p[1]) };
+
+                       var co = that.containerOffset, ch = 
that.containerSize.height,  cw = that.containerSize.width,
+                                               width = ($.ui.hasScroll(ce, 
"left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight 
: ch);
+
+                       that.parentData = {
+                               element: ce, left: co.left, top: co.top, width: 
width, height: height
+                       };
+               }
+       },
+
+       resize: function(event, ui) {
+               var that = $(this).data("resizable"), o = that.options,
+                               ps = that.containerSize, co = 
that.containerOffset, cs = that.size, cp = that.position,
+                               pRatio = that._aspectRatio || event.shiftKey, 
cop = { top:0, left:0 }, ce = that.containerElement;
+
+               if (ce[0] != document && (/static/).test(ce.css('position'))) 
cop = co;
+
+               if (cp.left < (that._helper ? co.left : 0)) {
+                       that.size.width = that.size.width + (that._helper ? 
(that.position.left - co.left) : (that.position.left - cop.left));
+                       if (pRatio) that.size.height = that.size.width / 
that.aspectRatio;
+                       that.position.left = o.helper ? co.left : 0;
+               }
+
+               if (cp.top < (that._helper ? co.top : 0)) {
+                       that.size.height = that.size.height + (that._helper ? 
(that.position.top - co.top) : that.position.top);
+                       if (pRatio) that.size.width = that.size.height * 
that.aspectRatio;
+                       that.position.top = that._helper ? co.top : 0;
+               }
+
+               that.offset.left = that.parentData.left+that.position.left;
+               that.offset.top = that.parentData.top+that.position.top;
+
+               var woset = Math.abs( (that._helper ? that.offset.left - 
cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width ),
+                                       hoset = Math.abs( (that._helper ? 
that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height 
);
+
+               var isParent = that.containerElement.get(0) == 
that.element.parent().get(0),
+                       isOffsetRelative = 
/relative|absolute/.test(that.containerElement.css('position'));
+
+               if(isParent && isOffsetRelative) woset -= that.parentData.left;
+
+               if (woset + that.size.width >= that.parentData.width) {
+                       that.size.width = that.parentData.width - woset;
+                       if (pRatio) that.size.height = that.size.width / 
that.aspectRatio;
+               }
+
+               if (hoset + that.size.height >= that.parentData.height) {
+                       that.size.height = that.parentData.height - hoset;
+                       if (pRatio) that.size.width = that.size.height * 
that.aspectRatio;
+               }
+       },
+
+       stop: function(event, ui){
+               var that = $(this).data("resizable"), o = that.options, cp = 
that.position,
+                               co = that.containerOffset, cop = 
that.containerPosition, ce = that.containerElement;
+
+               var helper = $(that.helper), ho = helper.offset(), w = 
helper.outerWidth() - that.sizeDiff.width, h = helper.outerHeight() - 
that.sizeDiff.height;
+
+               if (that._helper && !o.animate && 
(/relative/).test(ce.css('position')))
+                       $(this).css({ left: ho.left - cop.left - co.left, 
width: w, height: h });
+
+               if (that._helper && !o.animate && 
(/static/).test(ce.css('position')))
+                       $(this).css({ left: ho.left - cop.left - co.left, 
width: w, height: h });
+
+       }
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+       start: function(event, ui) {
+
+               var that = $(this).data("resizable"), o = that.options, cs = 
that.size;
+
+               that.ghost = that.originalElement.clone();
+               that.ghost
+                       .css({ opacity: .25, display: 'block', position: 
'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+                       .addClass('ui-resizable-ghost')
+                       .addClass(typeof o.ghost == 'string' ? o.ghost : '');
+
+               that.ghost.appendTo(that.helper);
+
+       },
+
+       resize: function(event, ui){
+               var that = $(this).data("resizable"), o = that.options;
+               if (that.ghost) that.ghost.css({ position: 'relative', height: 
that.size.height, width: that.size.width });
+       },
+
+       stop: function(event, ui){
+               var that = $(this).data("resizable"), o = that.options;
+               if (that.ghost && that.helper) 
that.helper.get(0).removeChild(that.ghost.get(0));
+       }
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+       resize: function(event, ui) {
+               var that = $(this).data("resizable"), o = that.options, cs = 
that.size, os = that.originalSize, op = that.originalPosition, a = that.axis, 
ratio = o._aspectRatio || event.shiftKey;
+               o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
+               var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * 
(o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * 
(o.grid[1]||1);
+
+               if (/^(se|s|e)$/.test(a)) {
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
+               }
+               else if (/^(ne)$/.test(a)) {
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
+                       that.position.top = op.top - oy;
+               }
+               else if (/^(sw)$/.test(a)) {
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
+                       that.position.left = op.left - ox;
+               }
+               else {
+                       that.size.width = os.width + ox;
+                       that.size.height = os.height + oy;
+                       that.position.top = op.top - oy;
+                       that.position.left = op.left - ox;
+               }
+       }
+
+});
+
+var num = function(v) {
+       return parseInt(v, 10) || 0;
+};
+
+var isNumber = function(value) {
+       return !isNaN(parseInt(value, 10));
+};
+
+})(jQuery);

http://git-wip-us.apache.org/repos/asf/james-site/blob/38b1b837/content/development-bundle/ui/jquery.ui.selectable.js
----------------------------------------------------------------------
diff --git a/content/development-bundle/ui/jquery.ui.selectable.js 
b/content/development-bundle/ui/jquery.ui.selectable.js
new file mode 100644
index 0000000..3f27b73
--- /dev/null
+++ b/content/development-bundle/ui/jquery.ui.selectable.js
@@ -0,0 +1,261 @@
+/*!
+ * jQuery UI Selectable 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ *
+ * Depends:
+ *     jquery.ui.core.js
+ *     jquery.ui.mouse.js
+ *     jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+$.widget("ui.selectable", $.ui.mouse, {
+       version: "1.9.2",
+       options: {
+               appendTo: 'body',
+               autoRefresh: true,
+               distance: 0,
+               filter: '*',
+               tolerance: 'touch'
+       },
+       _create: function() {
+               var that = this;
+
+               this.element.addClass("ui-selectable");
+
+               this.dragged = false;
+
+               // cache selectee children based on filter
+               var selectees;
+               this.refresh = function() {
+                       selectees = $(that.options.filter, that.element[0]);
+                       selectees.addClass("ui-selectee");
+                       selectees.each(function() {
+                               var $this = $(this);
+                               var pos = $this.offset();
+                               $.data(this, "selectable-item", {
+                                       element: this,
+                                       $element: $this,
+                                       left: pos.left,
+                                       top: pos.top,
+                                       right: pos.left + $this.outerWidth(),
+                                       bottom: pos.top + $this.outerHeight(),
+                                       startselected: false,
+                                       selected: $this.hasClass('ui-selected'),
+                                       selecting: 
$this.hasClass('ui-selecting'),
+                                       unselecting: 
$this.hasClass('ui-unselecting')
+                               });
+                       });
+               };
+               this.refresh();
+
+               this.selectees = selectees.addClass("ui-selectee");
+
+               this._mouseInit();
+
+               this.helper = $("<div class='ui-selectable-helper'></div>");
+       },
+
+       _destroy: function() {
+               this.selectees
+                       .removeClass("ui-selectee")
+                       .removeData("selectable-item");
+               this.element
+                       .removeClass("ui-selectable ui-selectable-disabled");
+               this._mouseDestroy();
+       },
+
+       _mouseStart: function(event) {
+               var that = this;
+
+               this.opos = [event.pageX, event.pageY];
+
+               if (this.options.disabled)
+                       return;
+
+               var options = this.options;
+
+               this.selectees = $(options.filter, this.element[0]);
+
+               this._trigger("start", event);
+
+               $(options.appendTo).append(this.helper);
+               // position helper (lasso)
+               this.helper.css({
+                       "left": event.clientX,
+                       "top": event.clientY,
+                       "width": 0,
+                       "height": 0
+               });
+
+               if (options.autoRefresh) {
+                       this.refresh();
+               }
+
+               this.selectees.filter('.ui-selected').each(function() {
+                       var selectee = $.data(this, "selectable-item");
+                       selectee.startselected = true;
+                       if (!event.metaKey && !event.ctrlKey) {
+                               selectee.$element.removeClass('ui-selected');
+                               selectee.selected = false;
+                               selectee.$element.addClass('ui-unselecting');
+                               selectee.unselecting = true;
+                               // selectable UNSELECTING callback
+                               that._trigger("unselecting", event, {
+                                       unselecting: selectee.element
+                               });
+                       }
+               });
+
+               $(event.target).parents().andSelf().each(function() {
+                       var selectee = $.data(this, "selectable-item");
+                       if (selectee) {
+                               var doSelect = (!event.metaKey && 
!event.ctrlKey) || !selectee.$element.hasClass('ui-selected');
+                               selectee.$element
+                                       .removeClass(doSelect ? 
"ui-unselecting" : "ui-selected")
+                                       .addClass(doSelect ? "ui-selecting" : 
"ui-unselecting");
+                               selectee.unselecting = !doSelect;
+                               selectee.selecting = doSelect;
+                               selectee.selected = doSelect;
+                               // selectable (UN)SELECTING callback
+                               if (doSelect) {
+                                       that._trigger("selecting", event, {
+                                               selecting: selectee.element
+                                       });
+                               } else {
+                                       that._trigger("unselecting", event, {
+                                               unselecting: selectee.element
+                                       });
+                               }
+                               return false;
+                       }
+               });
+
+       },
+
+       _mouseDrag: function(event) {
+               var that = this;
+               this.dragged = true;
+
+               if (this.options.disabled)
+                       return;
+
+               var options = this.options;
+
+               var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 
= event.pageY;
+               if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; }
+               if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; }
+               this.helper.css({left: x1, top: y1, width: x2-x1, height: 
y2-y1});
+
+               this.selectees.each(function() {
+                       var selectee = $.data(this, "selectable-item");
+                       //prevent helper from being selected if appendTo: 
selectable
+                       if (!selectee || selectee.element == that.element[0])
+                               return;
+                       var hit = false;
+                       if (options.tolerance == 'touch') {
+                               hit = ( !(selectee.left > x2 || selectee.right 
< x1 || selectee.top > y2 || selectee.bottom < y1) );
+                       } else if (options.tolerance == 'fit') {
+                               hit = (selectee.left > x1 && selectee.right < 
x2 && selectee.top > y1 && selectee.bottom < y2);
+                       }
+
+                       if (hit) {
+                               // SELECT
+                               if (selectee.selected) {
+                                       
selectee.$element.removeClass('ui-selected');
+                                       selectee.selected = false;
+                               }
+                               if (selectee.unselecting) {
+                                       
selectee.$element.removeClass('ui-unselecting');
+                                       selectee.unselecting = false;
+                               }
+                               if (!selectee.selecting) {
+                                       
selectee.$element.addClass('ui-selecting');
+                                       selectee.selecting = true;
+                                       // selectable SELECTING callback
+                                       that._trigger("selecting", event, {
+                                               selecting: selectee.element
+                                       });
+                               }
+                       } else {
+                               // UNSELECT
+                               if (selectee.selecting) {
+                                       if ((event.metaKey || event.ctrlKey) && 
selectee.startselected) {
+                                               
selectee.$element.removeClass('ui-selecting');
+                                               selectee.selecting = false;
+                                               
selectee.$element.addClass('ui-selected');
+                                               selectee.selected = true;
+                                       } else {
+                                               
selectee.$element.removeClass('ui-selecting');
+                                               selectee.selecting = false;
+                                               if (selectee.startselected) {
+                                                       
selectee.$element.addClass('ui-unselecting');
+                                                       selectee.unselecting = 
true;
+                                               }
+                                               // selectable UNSELECTING 
callback
+                                               that._trigger("unselecting", 
event, {
+                                                       unselecting: 
selectee.element
+                                               });
+                                       }
+                               }
+                               if (selectee.selected) {
+                                       if (!event.metaKey && !event.ctrlKey && 
!selectee.startselected) {
+                                               
selectee.$element.removeClass('ui-selected');
+                                               selectee.selected = false;
+
+                                               
selectee.$element.addClass('ui-unselecting');
+                                               selectee.unselecting = true;
+                                               // selectable UNSELECTING 
callback
+                                               that._trigger("unselecting", 
event, {
+                                                       unselecting: 
selectee.element
+                                               });
+                                       }
+                               }
+                       }
+               });
+
+               return false;
+       },
+
+       _mouseStop: function(event) {
+               var that = this;
+
+               this.dragged = false;
+
+               var options = this.options;
+
+               $('.ui-unselecting', this.element[0]).each(function() {
+                       var selectee = $.data(this, "selectable-item");
+                       selectee.$element.removeClass('ui-unselecting');
+                       selectee.unselecting = false;
+                       selectee.startselected = false;
+                       that._trigger("unselected", event, {
+                               unselected: selectee.element
+                       });
+               });
+               $('.ui-selecting', this.element[0]).each(function() {
+                       var selectee = $.data(this, "selectable-item");
+                       
selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
+                       selectee.selecting = false;
+                       selectee.selected = true;
+                       selectee.startselected = true;
+                       that._trigger("selected", event, {
+                               selected: selectee.element
+                       });
+               });
+               this._trigger("stop", event);
+
+               this.helper.remove();
+
+               return false;
+       }
+
+});
+
+})(jQuery);

http://git-wip-us.apache.org/repos/asf/james-site/blob/38b1b837/content/development-bundle/ui/jquery.ui.slider.js
----------------------------------------------------------------------
diff --git a/content/development-bundle/ui/jquery.ui.slider.js 
b/content/development-bundle/ui/jquery.ui.slider.js
new file mode 100644
index 0000000..c3daa7a
--- /dev/null
+++ b/content/development-bundle/ui/jquery.ui.slider.js
@@ -0,0 +1,644 @@
+/*!
+ * jQuery UI Slider 1.9.2
+ * http://jqueryui.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ *
+ * Depends:
+ *     jquery.ui.core.js
+ *     jquery.ui.mouse.js
+ *     jquery.ui.widget.js
+ */
+(function( $, undefined ) {
+
+// number of pages in a slider
+// (how many times can you page up/down to go through the whole range)
+var numPages = 5;
+
+$.widget( "ui.slider", $.ui.mouse, {
+       version: "1.9.2",
+       widgetEventPrefix: "slide",
+
+       options: {
+               animate: false,
+               distance: 0,
+               max: 100,
+               min: 0,
+               orientation: "horizontal",
+               range: false,
+               step: 1,
+               value: 0,
+               values: null
+       },
+
+       _create: function() {
+               var i, handleCount,
+                       o = this.options,
+                       existingHandles = this.element.find( 
".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+                       handle = "<a class='ui-slider-handle ui-state-default 
ui-corner-all' href='#'></a>",
+                       handles = [];
+
+               this._keySliding = false;
+               this._mouseSliding = false;
+               this._animateOff = true;
+               this._handleIndex = null;
+               this._detectOrientation();
+               this._mouseInit();
+
+               this.element
+                       .addClass( "ui-slider" +
+                               " ui-slider-" + this.orientation +
+                               " ui-widget" +
+                               " ui-widget-content" +
+                               " ui-corner-all" +
+                               ( o.disabled ? " ui-slider-disabled 
ui-disabled" : "" ) );
+
+               this.range = $([]);
+
+               if ( o.range ) {
+                       if ( o.range === true ) {
+                               if ( !o.values ) {
+                                       o.values = [ this._valueMin(), 
this._valueMin() ];
+                               }
+                               if ( o.values.length && o.values.length !== 2 ) 
{
+                                       o.values = [ o.values[0], o.values[0] ];
+                               }
+                       }
+
+                       this.range = $( "<div></div>" )
+                               .appendTo( this.element )
+                               .addClass( "ui-slider-range" +
+                               // note: this isn't the most fittingly semantic 
framework class for this element,
+                               // but worked best visually with a variety of 
themes
+                               " ui-widget-header" +
+                               ( ( o.range === "min" || o.range === "max" ) ? 
" ui-slider-range-" + o.range : "" ) );
+               }
+
+               handleCount = ( o.values && o.values.length ) || 1;
+
+               for ( i = existingHandles.length; i < handleCount; i++ ) {
+                       handles.push( handle );
+               }
+
+               this.handles = existingHandles.add( $( handles.join( "" ) 
).appendTo( this.element ) );
+
+               this.handle = this.handles.eq( 0 );
+
+               this.handles.add( this.range ).filter( "a" )
+                       .click(function( event ) {
+                               event.preventDefault();
+                       })
+                       .mouseenter(function() {
+                               if ( !o.disabled ) {
+                                       $( this ).addClass( "ui-state-hover" );
+                               }
+                       })
+                       .mouseleave(function() {
+                               $( this ).removeClass( "ui-state-hover" );
+                       })
+                       .focus(function() {
+                               if ( !o.disabled ) {
+                                       $( ".ui-slider .ui-state-focus" 
).removeClass( "ui-state-focus" );
+                                       $( this ).addClass( "ui-state-focus" );
+                               } else {
+                                       $( this ).blur();
+                               }
+                       })
+                       .blur(function() {
+                               $( this ).removeClass( "ui-state-focus" );
+                       });
+
+               this.handles.each(function( i ) {
+                       $( this ).data( "ui-slider-handle-index", i );
+               });
+
+               this._on( this.handles, {
+                       keydown: function( event ) {
+                               var allowed, curVal, newVal, step,
+                                       index = $( event.target ).data( 
"ui-slider-handle-index" );
+
+                               switch ( event.keyCode ) {
+                                       case $.ui.keyCode.HOME:
+                                       case $.ui.keyCode.END:
+                                       case $.ui.keyCode.PAGE_UP:
+                                       case $.ui.keyCode.PAGE_DOWN:
+                                       case $.ui.keyCode.UP:
+                                       case $.ui.keyCode.RIGHT:
+                                       case $.ui.keyCode.DOWN:
+                                       case $.ui.keyCode.LEFT:
+                                               event.preventDefault();
+                                               if ( !this._keySliding ) {
+                                                       this._keySliding = true;
+                                                       $( event.target 
).addClass( "ui-state-active" );
+                                                       allowed = this._start( 
event, index );
+                                                       if ( allowed === false 
) {
+                                                               return;
+                                                       }
+                                               }
+                                               break;
+                               }
+
+                               step = this.options.step;
+                               if ( this.options.values && 
this.options.values.length ) {
+                                       curVal = newVal = this.values( index );
+                               } else {
+                                       curVal = newVal = this.value();
+                               }
+
+                               switch ( event.keyCode ) {
+                                       case $.ui.keyCode.HOME:
+                                               newVal = this._valueMin();
+                                               break;
+                                       case $.ui.keyCode.END:
+                                               newVal = this._valueMax();
+                                               break;
+                                       case $.ui.keyCode.PAGE_UP:
+                                               newVal = this._trimAlignValue( 
curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+                                               break;
+                                       case $.ui.keyCode.PAGE_DOWN:
+                                               newVal = this._trimAlignValue( 
curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+                                               break;
+                                       case $.ui.keyCode.UP:
+                                       case $.ui.keyCode.RIGHT:
+                                               if ( curVal === 
this._valueMax() ) {
+                                                       return;
+                                               }
+                                               newVal = this._trimAlignValue( 
curVal + step );
+                                               break;
+                                       case $.ui.keyCode.DOWN:
+                                       case $.ui.keyCode.LEFT:
+                                               if ( curVal === 
this._valueMin() ) {
+                                                       return;
+                                               }
+                                               newVal = this._trimAlignValue( 
curVal - step );
+                                               break;
+                               }
+
+                               this._slide( event, index, newVal );
+                       },
+                       keyup: function( event ) {
+                               var index = $( event.target ).data( 
"ui-slider-handle-index" );
+
+                               if ( this._keySliding ) {
+                                       this._keySliding = false;
+                                       this._stop( event, index );
+                                       this._change( event, index );
+                                       $( event.target ).removeClass( 
"ui-state-active" );
+                               }
+                       }
+               });
+
+               this._refreshValue();
+
+               this._animateOff = false;
+       },
+
+       _destroy: function() {
+               this.handles.remove();
+               this.range.remove();
+
+               this.element
+                       .removeClass( "ui-slider" +
+                               " ui-slider-horizontal" +
+                               " ui-slider-vertical" +
+                               " ui-slider-disabled" +
+                               " ui-widget" +
+                               " ui-widget-content" +
+                               " ui-corner-all" );
+
+               this._mouseDestroy();
+       },
+
+       _mouseCapture: function( event ) {
+               var position, normValue, distance, closestHandle, index, 
allowed, offset, mouseOverHandle,
+                       that = this,
+                       o = this.options;
+
+               if ( o.disabled ) {
+                       return false;
+               }
+
+               this.elementSize = {
+                       width: this.element.outerWidth(),
+                       height: this.element.outerHeight()
+               };
+               this.elementOffset = this.element.offset();
+
+               position = { x: event.pageX, y: event.pageY };
+               normValue = this._normValueFromMouse( position );
+               distance = this._valueMax() - this._valueMin() + 1;
+               this.handles.each(function( i ) {
+                       var thisDistance = Math.abs( normValue - that.values(i) 
);
+                       if ( distance > thisDistance ) {
+                               distance = thisDistance;
+                               closestHandle = $( this );
+                               index = i;
+                       }
+               });
+
+               // workaround for bug #3736 (if both handles of a range are at 
0,
+               // the first is always used as the one with least distance,
+               // and moving it is obviously prevented by preventing negative 
ranges)
+               if( o.range === true && this.values(1) === o.min ) {
+                       index += 1;
+                       closestHandle = $( this.handles[index] );
+               }
+
+               allowed = this._start( event, index );
+               if ( allowed === false ) {
+                       return false;
+               }
+               this._mouseSliding = true;
+
+               this._handleIndex = index;
+
+               closestHandle
+                       .addClass( "ui-state-active" )
+                       .focus();
+
+               offset = closestHandle.offset();
+               mouseOverHandle = !$( event.target ).parents().andSelf().is( 
".ui-slider-handle" );
+               this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+                       left: event.pageX - offset.left - ( 
closestHandle.width() / 2 ),
+                       top: event.pageY - offset.top -
+                               ( closestHandle.height() / 2 ) -
+                               ( parseInt( 
closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+                               ( parseInt( 
closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+                               ( parseInt( closestHandle.css("marginTop"), 10 
) || 0)
+               };
+
+               if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+                       this._slide( event, index, normValue );
+               }
+               this._animateOff = true;
+               return true;
+       },
+
+       _mouseStart: function() {
+               return true;
+       },
+
+       _mouseDrag: function( event ) {
+               var position = { x: event.pageX, y: event.pageY },
+                       normValue = this._normValueFromMouse( position );
+
+               this._slide( event, this._handleIndex, normValue );
+
+               return false;
+       },
+
+       _mouseStop: function( event ) {
+               this.handles.removeClass( "ui-state-active" );
+               this._mouseSliding = false;
+
+               this._stop( event, this._handleIndex );
+               this._change( event, this._handleIndex );
+
+               this._handleIndex = null;
+               this._clickOffset = null;
+               this._animateOff = false;
+
+               return false;
+       },
+
+       _detectOrientation: function() {
+               this.orientation = ( this.options.orientation === "vertical" ) 
? "vertical" : "horizontal";
+       },
+
+       _normValueFromMouse: function( position ) {
+               var pixelTotal,
+                       pixelMouse,
+                       percentMouse,
+                       valueTotal,
+                       valueMouse;
+
+               if ( this.orientation === "horizontal" ) {
+                       pixelTotal = this.elementSize.width;
+                       pixelMouse = position.x - this.elementOffset.left - ( 
this._clickOffset ? this._clickOffset.left : 0 );
+               } else {
+                       pixelTotal = this.elementSize.height;
+                       pixelMouse = position.y - this.elementOffset.top - ( 
this._clickOffset ? this._clickOffset.top : 0 );
+               }
+
+               percentMouse = ( pixelMouse / pixelTotal );
+               if ( percentMouse > 1 ) {
+                       percentMouse = 1;
+               }
+               if ( percentMouse < 0 ) {
+                       percentMouse = 0;
+               }
+               if ( this.orientation === "vertical" ) {
+                       percentMouse = 1 - percentMouse;
+               }
+
+               valueTotal = this._valueMax() - this._valueMin();
+               valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+               return this._trimAlignValue( valueMouse );
+       },
+
+       _start: function( event, index ) {
+               var uiHash = {
+                       handle: this.handles[ index ],
+                       value: this.value()
+               };
+               if ( this.options.values && this.options.values.length ) {
+                       uiHash.value = this.values( index );
+                       uiHash.values = this.values();
+               }
+               return this._trigger( "start", event, uiHash );
+       },
+
+       _slide: function( event, index, newVal ) {
+               var otherVal,
+                       newValues,
+                       allowed;
+
+               if ( this.options.values && this.options.values.length ) {
+                       otherVal = this.values( index ? 0 : 1 );
+
+                       if ( ( this.options.values.length === 2 && 
this.options.range === true ) &&
+                                       ( ( index === 0 && newVal > otherVal) 
|| ( index === 1 && newVal < otherVal ) )
+                               ) {
+                               newVal = otherVal;
+                       }
+
+                       if ( newVal !== this.values( index ) ) {
+                               newValues = this.values();
+                               newValues[ index ] = newVal;
+                               // A slide can be canceled by returning false 
from the slide callback
+                               allowed = this._trigger( "slide", event, {
+                                       handle: this.handles[ index ],
+                                       value: newVal,
+                                       values: newValues
+                               } );
+                               otherVal = this.values( index ? 0 : 1 );
+                               if ( allowed !== false ) {
+                                       this.values( index, newVal, true );
+                               }
+                       }
+               } else {
+                       if ( newVal !== this.value() ) {
+                               // A slide can be canceled by returning false 
from the slide callback
+                               allowed = this._trigger( "slide", event, {
+                                       handle: this.handles[ index ],
+                                       value: newVal
+                               } );
+                               if ( allowed !== false ) {
+                                       this.value( newVal );
+                               }
+                       }
+               }
+       },
+
+       _stop: function( event, index ) {
+               var uiHash = {
+                       handle: this.handles[ index ],
+                       value: this.value()
+               };
+               if ( this.options.values && this.options.values.length ) {
+                       uiHash.value = this.values( index );
+                       uiHash.values = this.values();
+               }
+
+               this._trigger( "stop", event, uiHash );
+       },
+
+       _change: function( event, index ) {
+               if ( !this._keySliding && !this._mouseSliding ) {
+                       var uiHash = {
+                               handle: this.handles[ index ],
+                               value: this.value()
+                       };
+                       if ( this.options.values && this.options.values.length 
) {
+                               uiHash.value = this.values( index );
+                               uiHash.values = this.values();
+                       }
+
+                       this._trigger( "change", event, uiHash );
+               }
+       },
+
+       value: function( newValue ) {
+               if ( arguments.length ) {
+                       this.options.value = this._trimAlignValue( newValue );
+                       this._refreshValue();
+                       this._change( null, 0 );
+                       return;
+               }
+
+               return this._value();
+       },
+
+       values: function( index, newValue ) {
+               var vals,
+                       newValues,
+                       i;
+
+               if ( arguments.length > 1 ) {
+                       this.options.values[ index ] = this._trimAlignValue( 
newValue );
+                       this._refreshValue();
+                       this._change( null, index );
+                       return;
+               }
+
+               if ( arguments.length ) {
+                       if ( $.isArray( arguments[ 0 ] ) ) {
+                               vals = this.options.values;
+                               newValues = arguments[ 0 ];
+                               for ( i = 0; i < vals.length; i += 1 ) {
+                                       vals[ i ] = this._trimAlignValue( 
newValues[ i ] );
+                                       this._change( null, i );
+                               }
+                               this._refreshValue();
+                       } else {
+                               if ( this.options.values && 
this.options.values.length ) {
+                                       return this._values( index );
+                               } else {
+                                       return this.value();
+                               }
+                       }
+               } else {
+                       return this._values();
+               }
+       },
+
+       _setOption: function( key, value ) {
+               var i,
+                       valsLength = 0;
+
+               if ( $.isArray( this.options.values ) ) {
+                       valsLength = this.options.values.length;
+               }
+
+               $.Widget.prototype._setOption.apply( this, arguments );
+
+               switch ( key ) {
+                       case "disabled":
+                               if ( value ) {
+                                       this.handles.filter( ".ui-state-focus" 
).blur();
+                                       this.handles.removeClass( 
"ui-state-hover" );
+                                       this.handles.prop( "disabled", true );
+                                       this.element.addClass( "ui-disabled" );
+                               } else {
+                                       this.handles.prop( "disabled", false );
+                                       this.element.removeClass( "ui-disabled" 
);
+                               }
+                               break;
+                       case "orientation":
+                               this._detectOrientation();
+                               this.element
+                                       .removeClass( "ui-slider-horizontal 
ui-slider-vertical" )
+                                       .addClass( "ui-slider-" + 
this.orientation );
+                               this._refreshValue();
+                               break;
+                       case "value":
+                               this._animateOff = true;
+                               this._refreshValue();
+                               this._change( null, 0 );
+                               this._animateOff = false;
+                               break;
+                       case "values":
+                               this._animateOff = true;
+                               this._refreshValue();
+                               for ( i = 0; i < valsLength; i += 1 ) {
+                                       this._change( null, i );
+                               }
+                               this._animateOff = false;
+                               break;
+                       case "min":
+                       case "max":
+                               this._animateOff = true;
+                               this._refreshValue();
+                               this._animateOff = false;
+                               break;
+               }
+       },
+
+       //internal value getter
+       // _value() returns value trimmed by min and max, aligned by step
+       _value: function() {
+               var val = this.options.value;
+               val = this._trimAlignValue( val );
+
+               return val;
+       },
+
+       //internal values getter
+       // _values() returns array of values trimmed by min and max, aligned by 
step
+       // _values( index ) returns single value trimmed by min and max, 
aligned by step
+       _values: function( index ) {
+               var val,
+                       vals,
+                       i;
+
+               if ( arguments.length ) {
+                       val = this.options.values[ index ];
+                       val = this._trimAlignValue( val );
+
+                       return val;
+               } else {
+                       // .slice() creates a copy of the array
+                       // this copy gets trimmed by min and max and then 
returned
+                       vals = this.options.values.slice();
+                       for ( i = 0; i < vals.length; i+= 1) {
+                               vals[ i ] = this._trimAlignValue( vals[ i ] );
+                       }
+
+                       return vals;
+               }
+       },
+
+       // returns the step-aligned value that val is closest to, between 
(inclusive) min and max
+       _trimAlignValue: function( val ) {
+               if ( val <= this._valueMin() ) {
+                       return this._valueMin();
+               }
+               if ( val >= this._valueMax() ) {
+                       return this._valueMax();
+               }
+               var step = ( this.options.step > 0 ) ? this.options.step : 1,
+                       valModStep = (val - this._valueMin()) % step,
+                       alignValue = val - valModStep;
+
+               if ( Math.abs(valModStep) * 2 >= step ) {
+                       alignValue += ( valModStep > 0 ) ? step : ( -step );
+               }
+
+               // Since JavaScript has problems with large floats, round
+               // the final value to 5 digits after the decimal point (see 
#4124)
+               return parseFloat( alignValue.toFixed(5) );
+       },
+
+       _valueMin: function() {
+               return this.options.min;
+       },
+
+       _valueMax: function() {
+               return this.options.max;
+       },
+
+       _refreshValue: function() {
+               var lastValPercent, valPercent, value, valueMin, valueMax,
+                       oRange = this.options.range,
+                       o = this.options,
+                       that = this,
+                       animate = ( !this._animateOff ) ? o.animate : false,
+                       _set = {};
+
+               if ( this.options.values && this.options.values.length ) {
+                       this.handles.each(function( i ) {
+                               valPercent = ( that.values(i) - 
that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+                               _set[ that.orientation === "horizontal" ? 
"left" : "bottom" ] = valPercent + "%";
+                               $( this ).stop( 1, 1 )[ animate ? "animate" : 
"css" ]( _set, o.animate );
+                               if ( that.options.range === true ) {
+                                       if ( that.orientation === "horizontal" 
) {
+                                               if ( i === 0 ) {
+                                                       that.range.stop( 1, 1 
)[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+                                               }
+                                               if ( i === 1 ) {
+                                                       that.range[ animate ? 
"animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: 
false, duration: o.animate } );
+                                               }
+                                       } else {
+                                               if ( i === 0 ) {
+                                                       that.range.stop( 1, 1 
)[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+                                               }
+                                               if ( i === 1 ) {
+                                                       that.range[ animate ? 
"animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { 
queue: false, duration: o.animate } );
+                                               }
+                                       }
+                               }
+                               lastValPercent = valPercent;
+                       });
+               } else {
+                       value = this.value();
+                       valueMin = this._valueMin();
+                       valueMax = this._valueMax();
+                       valPercent = ( valueMax !== valueMin ) ?
+                                       ( value - valueMin ) / ( valueMax - 
valueMin ) * 100 :
+                                       0;
+                       _set[ this.orientation === "horizontal" ? "left" : 
"bottom" ] = valPercent + "%";
+                       this.handle.stop( 1, 1 )[ animate ? "animate" : "css" 
]( _set, o.animate );
+
+                       if ( oRange === "min" && this.orientation === 
"horizontal" ) {
+                               this.range.stop( 1, 1 )[ animate ? "animate" : 
"css" ]( { width: valPercent + "%" }, o.animate );
+                       }
+                       if ( oRange === "max" && this.orientation === 
"horizontal" ) {
+                               this.range[ animate ? "animate" : "css" ]( { 
width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+                       }
+                       if ( oRange === "min" && this.orientation === 
"vertical" ) {
+                               this.range.stop( 1, 1 )[ animate ? "animate" : 
"css" ]( { height: valPercent + "%" }, o.animate );
+                       }
+                       if ( oRange === "max" && this.orientation === 
"vertical" ) {
+                               this.range[ animate ? "animate" : "css" ]( { 
height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+                       }
+               }
+       }
+
+});
+
+}(jQuery));


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to