diff options
Diffstat (limited to 'h-source/Js/jquery/ui/js')
| -rw-r--r-- | h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js | 1937 | 
1 files changed, 1937 insertions, 0 deletions
| diff --git a/h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js b/h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js new file mode 100644 index 0000000..42413ed --- /dev/null +++ b/h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js @@ -0,0 +1,1937 @@ +/*! + * jQuery UI 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function( $, undefined ) { + +// prevent duplicate loading +// this is only a problem because we proxy existing functions +// and we don't want to double proxy them +$.ui = $.ui || {}; +if ( $.ui.version ) { +	return; +} + +$.extend( $.ui, { +	version: "1.8.21", + +	keyCode: { +		ALT: 18, +		BACKSPACE: 8, +		CAPS_LOCK: 20, +		COMMA: 188, +		COMMAND: 91, +		COMMAND_LEFT: 91, // COMMAND +		COMMAND_RIGHT: 93, +		CONTROL: 17, +		DELETE: 46, +		DOWN: 40, +		END: 35, +		ENTER: 13, +		ESCAPE: 27, +		HOME: 36, +		INSERT: 45, +		LEFT: 37, +		MENU: 93, // COMMAND_RIGHT +		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, +		SHIFT: 16, +		SPACE: 32, +		TAB: 9, +		UP: 38, +		WINDOWS: 91 // COMMAND +	} +}); + +// plugins +$.fn.extend({ +	propAttr: $.fn.prop || $.fn.attr, + +	_focus: $.fn.focus, +	focus: function( delay, fn ) { +		return typeof delay === "number" ? +			this.each(function() { +				var elem = this; +				setTimeout(function() { +					$( elem ).focus(); +					if ( fn ) { +						fn.call( elem ); +					} +				}, delay ); +			}) : +			this._focus.apply( this, arguments ); +	}, + +	scrollParent: function() { +		var scrollParent; +		if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { +			scrollParent = this.parents().filter(function() { +				return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); +			}).eq(0); +		} else { +			scrollParent = this.parents().filter(function() { +				return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); +			}).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; +	}, + +	disableSelection: function() { +		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + +			".ui-disableSelection", function( event ) { +				event.preventDefault(); +			}); +	}, + +	enableSelection: function() { +		return this.unbind( ".ui-disableSelection" ); +	} +}); + +$.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( $.curCSS( elem, "padding" + this, true) ) || 0; +			if ( border ) { +				size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; +			} +			if ( margin ) { +				size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 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" ); +		}); +	}; +}); + +// selectors +function focusable( element, isTabIndexNotNaN ) { +	var nodeName = element.nodeName.toLowerCase(); +	if ( "area" === nodeName ) { +		var map = element.parentNode, +			mapName = map.name, +			img; +		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 !$( element ).parents().andSelf().filter(function() { +		return $.curCSS( this, "visibility" ) === "hidden" || +			$.expr.filters.hidden( this ); +	}).length; +} + +$.extend( $.expr[ ":" ], { +	data: 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 +$(function() { +	var body = document.body, +		div = body.appendChild( div = document.createElement( "div" ) ); + +	// access offsetHeight before setting the style to prevent a layout bug +	// in IE 9 which causes the elemnt to continue to take up space even +	// after it is removed from the DOM (#8026) +	div.offsetHeight; + +	$.extend( div.style, { +		minHeight: "100px", +		height: "auto", +		padding: 0, +		borderWidth: 0 +	}); + +	$.support.minHeight = div.offsetHeight === 100; +	$.support.selectstart = "onselectstart" in div; + +	// set display to none to avoid a layout bug in IE +	// http://dev.jquery.com/ticket/4014 +	body.removeChild( div ).style.display = "none"; +}); + + + + + +// deprecated +$.extend( $.ui, { +	// $.ui.plugin is deprecated.  Use the proxy pattern instead. +	plugin: { +		add: function( module, option, set ) { +			var proto = $.ui[ module ].prototype; +			for ( var i in set ) { +				proto.plugins[ i ] = proto.plugins[ i ] || []; +				proto.plugins[ i ].push( [ option, set[ i ] ] ); +			} +		}, +		call: function( instance, name, args ) { +			var set = instance.plugins[ name ]; +			if ( !set || !instance.element[ 0 ].parentNode ) { +				return; +			} +	 +			for ( var i = 0; i < set.length; i++ ) { +				if ( instance.options[ set[ i ][ 0 ] ] ) { +					set[ i ][ 1 ].apply( instance.element, args ); +				} +			} +		} +	}, +	 +	// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() +	contains: function( a, b ) { +		return document.compareDocumentPosition ? +			a.compareDocumentPosition( b ) & 16 : +			a !== b && a.contains( b ); +	}, +	 +	// 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; +	}, +	 +	// these are odd functions, fix the API or move into individual plugins +	isOverAxis: function( x, reference, size ) { +		//Determines when x coordinate is over "b" element axis +		return ( x > reference ) && ( x < ( reference + size ) ); +	}, +	isOver: function( y, x, top, left, height, width ) { +		//Determines when x, y coordinates is over "b" element +		return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); +	} +}); + +})( jQuery ); +/*! + * jQuery UI Widget 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function( $, undefined ) { + +// jQuery 1.4+ +if ( $.cleanData ) { +	var _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 ); +	}; +} else { +	var _remove = $.fn.remove; +	$.fn.remove = function( selector, keepData ) { +		return this.each(function() { +			if ( !keepData ) { +				if ( !selector || $.filter( selector, [ this ] ).length ) { +					$( "*", this ).add( [ this ] ).each(function() { +						try { +							$( this ).triggerHandler( "remove" ); +						// http://bugs.jquery.com/ticket/8235 +						} catch( e ) {} +					}); +				} +			} +			return _remove.call( $(this), selector, keepData ); +		}); +	}; +} + +$.widget = function( name, base, prototype ) { +	var namespace = name.split( "." )[ 0 ], +		fullName; +	name = name.split( "." )[ 1 ]; +	fullName = namespace + "-" + name; + +	if ( !prototype ) { +		prototype = base; +		base = $.Widget; +	} + +	// create selector for plugin +	$.expr[ ":" ][ fullName ] = function( elem ) { +		return !!$.data( elem, name ); +	}; + +	$[ namespace ] = $[ namespace ] || {}; +	$[ namespace ][ name ] = function( options, element ) { +		// allow instantiation without initializing for simple inheritance +		if ( arguments.length ) { +			this._createWidget( options, element ); +		} +	}; + +	var 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 +//	$.each( basePrototype, function( key, val ) { +//		if ( $.isPlainObject(val) ) { +//			basePrototype[ key ] = $.extend( {}, val ); +//		} +//	}); +	basePrototype.options = $.extend( true, {}, basePrototype.options ); +	$[ namespace ][ name ].prototype = $.extend( true, basePrototype, { +		namespace: namespace, +		widgetName: name, +		widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, +		widgetBaseClass: fullName +	}, prototype ); + +	$.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { +	$.fn[ name ] = function( options ) { +		var isMethodCall = typeof options === "string", +			args = Array.prototype.slice.call( arguments, 1 ), +			returnValue = this; + +		// allow multiple hashes to be passed on init +		options = !isMethodCall && args.length ? +			$.extend.apply( null, [ true, options ].concat(args) ) : +			options; + +		// prevent calls to internal methods +		if ( isMethodCall && options.charAt( 0 ) === "_" ) { +			return returnValue; +		} + +		if ( isMethodCall ) { +			this.each(function() { +				var instance = $.data( this, name ), +					methodValue = instance && $.isFunction( instance[options] ) ? +						instance[ options ].apply( instance, args ) : +						instance; +				// TODO: add this back in 1.9 and use $.error() (see #5972) +//				if ( !instance ) { +//					throw "cannot call methods on " + name + " prior to initialization; " + +//						"attempted to call method '" + options + "'"; +//				} +//				if ( !$.isFunction( instance[options] ) ) { +//					throw "no such method '" + options + "' for " + name + " widget instance"; +//				} +//				var methodValue = instance[ options ].apply( instance, args ); +				if ( methodValue !== instance && methodValue !== undefined ) { +					returnValue = methodValue; +					return false; +				} +			}); +		} else { +			this.each(function() { +				var instance = $.data( this, name ); +				if ( instance ) { +					instance.option( options || {} )._init(); +				} else { +					$.data( this, name, new object( options, this ) ); +				} +			}); +		} + +		return returnValue; +	}; +}; + +$.Widget = function( options, element ) { +	// allow instantiation without initializing for simple inheritance +	if ( arguments.length ) { +		this._createWidget( options, element ); +	} +}; + +$.Widget.prototype = { +	widgetName: "widget", +	widgetEventPrefix: "", +	options: { +		disabled: false +	}, +	_createWidget: function( options, element ) { +		// $.widget.bridge stores the plugin instance, but we do it anyway +		// so that it's stored even before the _create function runs +		$.data( element, this.widgetName, this ); +		this.element = $( element ); +		this.options = $.extend( true, {}, +			this.options, +			this._getCreateOptions(), +			options ); + +		var self = this; +		this.element.bind( "remove." + this.widgetName, function() { +			self.destroy(); +		}); + +		this._create(); +		this._trigger( "create" ); +		this._init(); +	}, +	_getCreateOptions: function() { +		return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; +	}, +	_create: function() {}, +	_init: function() {}, + +	destroy: function() { +		this.element +			.unbind( "." + this.widgetName ) +			.removeData( this.widgetName ); +		this.widget() +			.unbind( "." + this.widgetName ) +			.removeAttr( "aria-disabled" ) +			.removeClass( +				this.widgetBaseClass + "-disabled " + +				"ui-state-disabled" ); +	}, + +	widget: function() { +		return this.element; +	}, + +	option: function( key, value ) { +		var options = key; + +		if ( arguments.length === 0 ) { +			// don't return a reference to the internal hash +			return $.extend( {}, this.options ); +		} + +		if  (typeof key === "string" ) { +			if ( value === undefined ) { +				return this.options[ key ]; +			} +			options = {}; +			options[ key ] = value; +		} + +		this._setOptions( options ); + +		return this; +	}, +	_setOptions: function( options ) { +		var self = this; +		$.each( options, function( key, value ) { +			self._setOption( key, value ); +		}); + +		return this; +	}, +	_setOption: function( key, value ) { +		this.options[ key ] = value; + +		if ( key === "disabled" ) { +			this.widget() +				[ value ? "addClass" : "removeClass"]( +					this.widgetBaseClass + "-disabled" + " " + +					"ui-state-disabled" ) +				.attr( "aria-disabled", value ); +		} + +		return this; +	}, + +	enable: function() { +		return this._setOption( "disabled", false ); +	}, +	disable: function() { +		return this._setOption( "disabled", true ); +	}, + +	_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.call( this.element[0], event, data ) === false || +			event.isDefaultPrevented() ); +	} +}; + +})( jQuery ); +/*! + * jQuery UI Mouse 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + *	jquery.ui.widget.js + */ +(function( $, undefined ) { + +var mouseHandled = false; +$( document ).mouseup( function( e ) { +	mouseHandled = false; +}); + +$.widget("ui.mouse", { +	options: { +		cancel: ':input,option', +		distance: 1, +		delay: 0 +	}, +	_mouseInit: function() { +		var self = this; + +		this.element +			.bind('mousedown.'+this.widgetName, function(event) { +				return self._mouseDown(event); +			}) +			.bind('click.'+this.widgetName, function(event) { +				if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { +				    $.removeData(event.target, self.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); +		$(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 self = 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() { +				self.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 self._mouseMove(event); +		}; +		this._mouseUpDelegate = function(event) { +			return self._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 ($.browser.msie && !(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); +/*! + * jQuery UI Position 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function( $, undefined ) { + +$.ui = $.ui || {}; + +var horizontalPositions = /left|center|right/, +	verticalPositions = /top|center|bottom/, +	center = "center", +	support = {}, +	_position = $.fn.position, +	_offset = $.fn.offset; + +$.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 target = $( options.of ), +		targetElem = target[0], +		collision = ( options.collision || "flip" ).split( " " ), +		offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], +		targetWidth, +		targetHeight, +		basePosition; + +	if ( targetElem.nodeType === 9 ) { +		targetWidth = target.width(); +		targetHeight = target.height(); +		basePosition = { top: 0, left: 0 }; +	// TODO: use $.isWindow() in 1.9 +	} else if ( targetElem.setTimeout ) { +		targetWidth = target.width(); +		targetHeight = target.height(); +		basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; +	} else if ( targetElem.preventDefault ) { +		// force left top to allow flipping +		options.at = "left top"; +		targetWidth = targetHeight = 0; +		basePosition = { top: options.of.pageY, left: options.of.pageX }; +	} else { +		targetWidth = target.outerWidth(); +		targetHeight = target.outerHeight(); +		basePosition = target.offset(); +	} + +	// force my and at to have valid horizontal and veritcal positions +	// if a value is missing or invalid, it will be converted to center  +	$.each( [ "my", "at" ], function() { +		var pos = ( options[this] || "" ).split( " " ); +		if ( pos.length === 1) { +			pos = horizontalPositions.test( pos[0] ) ? +				pos.concat( [center] ) : +				verticalPositions.test( pos[0] ) ? +					[ center ].concat( pos ) : +					[ center, center ]; +		} +		pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; +		pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; +		options[ this ] = pos; +	}); + +	// normalize collision option +	if ( collision.length === 1 ) { +		collision[ 1 ] = collision[ 0 ]; +	} + +	// normalize offset option +	offset[ 0 ] = parseInt( offset[0], 10 ) || 0; +	if ( offset.length === 1 ) { +		offset[ 1 ] = offset[ 0 ]; +	} +	offset[ 1 ] = parseInt( offset[1], 10 ) || 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; +	} + +	basePosition.left += offset[ 0 ]; +	basePosition.top += offset[ 1 ]; + +	return this.each(function() { +		var elem = $( this ), +			elemWidth = elem.outerWidth(), +			elemHeight = elem.outerHeight(), +			marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, +			marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, +			collisionWidth = elemWidth + marginLeft + +				( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), +			collisionHeight = elemHeight + marginTop + +				( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), +			position = $.extend( {}, basePosition ), +			collisionPosition; + +		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; +		} + +		// prevent fractions if jQuery version doesn't support them (see #5280) +		if ( !support.fractions ) { +			position.left = Math.round( position.left ); +			position.top = Math.round( position.top ); +		} + +		collisionPosition = { +			left: position.left - marginLeft, +			top: position.top - 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: offset, +					my: options.my, +					at: options.at +				}); +			} +		}); + +		if ( $.fn.bgiframe ) { +			elem.bgiframe(); +		} +		elem.offset( $.extend( position, { using: options.using } ) ); +	}); +}; + +$.ui.position = { +	fit: { +		left: function( position, data ) { +			var win = $( window ), +				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); +			position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); +		}, +		top: function( position, data ) { +			var win = $( window ), +				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); +			position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); +		} +	}, + +	flip: { +		left: function( position, data ) { +			if ( data.at[0] === center ) { +				return; +			} +			var win = $( window ), +				over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), +				myOffset = data.my[ 0 ] === "left" ? +					-data.elemWidth : +					data.my[ 0 ] === "right" ? +						data.elemWidth : +						0, +				atOffset = data.at[ 0 ] === "left" ? +					data.targetWidth : +					-data.targetWidth, +				offset = -2 * data.offset[ 0 ]; +			position.left += data.collisionPosition.left < 0 ? +				myOffset + atOffset + offset : +				over > 0 ? +					myOffset + atOffset + offset : +					0; +		}, +		top: function( position, data ) { +			if ( data.at[1] === center ) { +				return; +			} +			var win = $( window ), +				over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), +				myOffset = data.my[ 1 ] === "top" ? +					-data.elemHeight : +					data.my[ 1 ] === "bottom" ? +						data.elemHeight : +						0, +				atOffset = data.at[ 1 ] === "top" ? +					data.targetHeight : +					-data.targetHeight, +				offset = -2 * data.offset[ 1 ]; +			position.top += data.collisionPosition.top < 0 ? +				myOffset + atOffset + offset : +				over > 0 ? +					myOffset + atOffset + offset : +					0; +		} +	} +}; + +// offset setter from jQuery 1.4 +if ( !$.offset.setOffset ) { +	$.offset.setOffset = function( elem, options ) { +		// set position first, in-case top/left are set even on static elem +		if ( /static/.test( $.curCSS( elem, "position" ) ) ) { +			elem.style.position = "relative"; +		} +		var curElem   = $( elem ), +			curOffset = curElem.offset(), +			curTop    = parseInt( $.curCSS( elem, "top",  true ), 10 ) || 0, +			curLeft   = parseInt( $.curCSS( elem, "left", true ), 10)  || 0, +			props     = { +				top:  (options.top  - curOffset.top)  + curTop, +				left: (options.left - curOffset.left) + curLeft +			}; +		 +		if ( 'using' in options ) { +			options.using.call( elem, props ); +		} else { +			curElem.css( props ); +		} +	}; + +	$.fn.offset = function( options ) { +		var elem = this[ 0 ]; +		if ( !elem || !elem.ownerDocument ) { return null; } +		if ( options ) { +			if ( $.isFunction( options ) ) { +				return this.each(function( i ) { +					$( this ).offset( options.call( this, i, $( this ).offset() ) ); +				}); +			} +			return this.each(function() { +				$.offset.setOffset( this, options ); +			}); +		} +		return _offset.call( this ); +	}; +} + +// fraction support test (older versions of jQuery don't support fractions) +(function () { +	var body = document.getElementsByTagName( "body" )[ 0 ],  +		div = document.createElement( "div" ), +		testElement, testElementParent, testElementStyle, offset, offsetTotal; + +	//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 ( var 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; top: 10.432325px; height: 30px; width: 201px;"; + +	offset = $( div ).offset( function( _, offset ) { +		return offset; +	}).offset(); + +	testElement.innerHTML = ""; +	testElementParent.removeChild( testElement ); + +	offsetTotal = offset.top + offset.left + ( body ? 2000 : 0 ); +	support.fractions = offsetTotal > 21 && offsetTotal < 22; +})(); + +}( jQuery )); +/*! + * jQuery UI Dialog 1.8.21 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + *	jquery.ui.core.js + *	jquery.ui.widget.js + *  jquery.ui.button.js + *	jquery.ui.draggable.js + *	jquery.ui.mouse.js + *	jquery.ui.position.js + *	jquery.ui.resizable.js + */ +(function( $, undefined ) { + +var uiDialogClasses = +		'ui-dialog ' + +		'ui-widget ' + +		'ui-widget-content ' + +		'ui-corner-all ', +	sizeRelatedOptions = { +		buttons: true, +		height: true, +		maxHeight: true, +		maxWidth: true, +		minHeight: true, +		minWidth: true, +		width: true +	}, +	resizableRelatedOptions = { +		maxHeight: true, +		maxWidth: true, +		minHeight: true, +		minWidth: true +	}, +	// support for jQuery 1.3.2 - handle common attrFn methods for dialog +	attrFn = $.attrFn || { +		val: true, +		css: true, +		html: true, +		text: true, +		data: true, +		width: true, +		height: true, +		offset: true, +		click: true +	}; + +$.widget("ui.dialog", { +	options: { +		autoOpen: true, +		buttons: {}, +		closeOnEscape: true, +		closeText: 'close', +		dialogClass: '', +		draggable: true, +		hide: null, +		height: 'auto', +		maxHeight: false, +		maxWidth: false, +		minHeight: 150, +		minWidth: 150, +		modal: false, +		position: { +			my: 'center', +			at: 'center', +			collision: 'fit', +			// ensure that the titlebar is never outside the document +			using: function(pos) { +				var topOffset = $(this).css(pos).offset().top; +				if (topOffset < 0) { +					$(this).css('top', pos.top - topOffset); +				} +			} +		}, +		resizable: true, +		show: null, +		stack: true, +		title: '', +		width: 300, +		zIndex: 1000 +	}, + +	_create: function() { +		this.originalTitle = this.element.attr('title'); +		// #5742 - .attr() might return a DOMElement +		if ( typeof this.originalTitle !== "string" ) { +			this.originalTitle = ""; +		} + +		this.options.title = this.options.title || this.originalTitle; +		var self = this, +			options = self.options, + +			title = options.title || ' ', +			titleId = $.ui.dialog.getTitleId(self.element), + +			uiDialog = (self.uiDialog = $('<div></div>')) +				.appendTo(document.body) +				.hide() +				.addClass(uiDialogClasses + options.dialogClass) +				.css({ +					zIndex: options.zIndex +				}) +				// setting tabIndex makes the div focusable +				// setting outline to 0 prevents a border on focus in Mozilla +				.attr('tabIndex', -1).css('outline', 0).keydown(function(event) { +					if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && +						event.keyCode === $.ui.keyCode.ESCAPE) { +						 +						self.close(event); +						event.preventDefault(); +					} +				}) +				.attr({ +					role: 'dialog', +					'aria-labelledby': titleId +				}) +				.mousedown(function(event) { +					self.moveToTop(false, event); +				}), + +			uiDialogContent = self.element +				.show() +				.removeAttr('title') +				.addClass( +					'ui-dialog-content ' + +					'ui-widget-content') +				.appendTo(uiDialog), + +			uiDialogTitlebar = (self.uiDialogTitlebar = $('<div></div>')) +				.addClass( +					'ui-dialog-titlebar ' + +					'ui-widget-header ' + +					'ui-corner-all ' + +					'ui-helper-clearfix' +				) +				.prependTo(uiDialog), + +			uiDialogTitlebarClose = $('<a href="#"></a>') +				.addClass( +					'ui-dialog-titlebar-close ' + +					'ui-corner-all' +				) +				.attr('role', 'button') +				.hover( +					function() { +						uiDialogTitlebarClose.addClass('ui-state-hover'); +					}, +					function() { +						uiDialogTitlebarClose.removeClass('ui-state-hover'); +					} +				) +				.focus(function() { +					uiDialogTitlebarClose.addClass('ui-state-focus'); +				}) +				.blur(function() { +					uiDialogTitlebarClose.removeClass('ui-state-focus'); +				}) +				.click(function(event) { +					self.close(event); +					return false; +				}) +				.appendTo(uiDialogTitlebar), + +			uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('<span></span>')) +				.addClass( +					'ui-icon ' + +					'ui-icon-closethick' +				) +				.text(options.closeText) +				.appendTo(uiDialogTitlebarClose), + +			uiDialogTitle = $('<span></span>') +				.addClass('ui-dialog-title') +				.attr('id', titleId) +				.html(title) +				.prependTo(uiDialogTitlebar); + +		//handling of deprecated beforeclose (vs beforeClose) option +		//Ticket #4669 http://dev.jqueryui.com/ticket/4669 +		//TODO: remove in 1.9pre +		if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { +			options.beforeClose = options.beforeclose; +		} + +		uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); + +		if (options.draggable && $.fn.draggable) { +			self._makeDraggable(); +		} +		if (options.resizable && $.fn.resizable) { +			self._makeResizable(); +		} + +		self._createButtons(options.buttons); +		self._isOpen = false; + +		if ($.fn.bgiframe) { +			uiDialog.bgiframe(); +		} +	}, + +	_init: function() { +		if ( this.options.autoOpen ) { +			this.open(); +		} +	}, + +	destroy: function() { +		var self = this; +		 +		if (self.overlay) { +			self.overlay.destroy(); +		} +		self.uiDialog.hide(); +		self.element +			.unbind('.dialog') +			.removeData('dialog') +			.removeClass('ui-dialog-content ui-widget-content') +			.hide().appendTo('body'); +		self.uiDialog.remove(); + +		if (self.originalTitle) { +			self.element.attr('title', self.originalTitle); +		} + +		return self; +	}, + +	widget: function() { +		return this.uiDialog; +	}, + +	close: function(event) { +		var self = this, +			maxZ, thisZ; +		 +		if (false === self._trigger('beforeClose', event)) { +			return; +		} + +		if (self.overlay) { +			self.overlay.destroy(); +		} +		self.uiDialog.unbind('keypress.ui-dialog'); + +		self._isOpen = false; + +		if (self.options.hide) { +			self.uiDialog.hide(self.options.hide, function() { +				self._trigger('close', event); +			}); +		} else { +			self.uiDialog.hide(); +			self._trigger('close', event); +		} + +		$.ui.dialog.overlay.resize(); + +		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309) +		if (self.options.modal) { +			maxZ = 0; +			$('.ui-dialog').each(function() { +				if (this !== self.uiDialog[0]) { +					thisZ = $(this).css('z-index'); +					if(!isNaN(thisZ)) { +						maxZ = Math.max(maxZ, thisZ); +					} +				} +			}); +			$.ui.dialog.maxZ = maxZ; +		} + +		return self; +	}, + +	isOpen: function() { +		return this._isOpen; +	}, + +	// the force parameter allows us to move modal dialogs to their correct +	// position on open +	moveToTop: function(force, event) { +		var self = this, +			options = self.options, +			saveScroll; + +		if ((options.modal && !force) || +			(!options.stack && !options.modal)) { +			return self._trigger('focus', event); +		} + +		if (options.zIndex > $.ui.dialog.maxZ) { +			$.ui.dialog.maxZ = options.zIndex; +		} +		if (self.overlay) { +			$.ui.dialog.maxZ += 1; +			self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); +		} + +		//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. +		//  http://ui.jquery.com/bugs/ticket/3193 +		saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() }; +		$.ui.dialog.maxZ += 1; +		self.uiDialog.css('z-index', $.ui.dialog.maxZ); +		self.element.attr(saveScroll); +		self._trigger('focus', event); + +		return self; +	}, + +	open: function() { +		if (this._isOpen) { return; } + +		var self = this, +			options = self.options, +			uiDialog = self.uiDialog; + +		self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; +		self._size(); +		self._position(options.position); +		uiDialog.show(options.show); +		self.moveToTop(true); + +		// prevent tabbing out of modal dialogs +		if ( options.modal ) { +			uiDialog.bind( "keydown.ui-dialog", function( event ) { +				if ( event.keyCode !== $.ui.keyCode.TAB ) { +					return; +				} + +				var tabbables = $(':tabbable', this), +					first = tabbables.filter(':first'), +					last  = tabbables.filter(':last'); + +				if (event.target === last[0] && !event.shiftKey) { +					first.focus(1); +					return false; +				} else if (event.target === first[0] && event.shiftKey) { +					last.focus(1); +					return false; +				} +			}); +		} + +		// set focus to the first tabbable element in the content area or the first button +		// if there are no tabbable elements, set focus on the dialog itself +		$(self.element.find(':tabbable').get().concat( +			uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( +				uiDialog.get()))).eq(0).focus(); + +		self._isOpen = true; +		self._trigger('open'); + +		return self; +	}, + +	_createButtons: function(buttons) { +		var self = this, +			hasButtons = false, +			uiDialogButtonPane = $('<div></div>') +				.addClass( +					'ui-dialog-buttonpane ' + +					'ui-widget-content ' + +					'ui-helper-clearfix' +				), +			uiButtonSet = $( "<div></div>" ) +				.addClass( "ui-dialog-buttonset" ) +				.appendTo( uiDialogButtonPane ); + +		// if we already have a button pane, remove it +		self.uiDialog.find('.ui-dialog-buttonpane').remove(); + +		if (typeof buttons === 'object' && buttons !== null) { +			$.each(buttons, function() { +				return !(hasButtons = true); +			}); +		} +		if (hasButtons) { +			$.each(buttons, function(name, props) { +				props = $.isFunction( props ) ? +					{ click: props, text: name } : +					props; +				var button = $('<button type="button"></button>') +					.click(function() { +						props.click.apply(self.element[0], arguments); +					}) +					.appendTo(uiButtonSet); +				// can't use .attr( props, true ) with jQuery 1.3.2. +				$.each( props, function( key, value ) { +					if ( key === "click" ) { +						return; +					} +					if ( key in attrFn ) { +						button[ key ]( value ); +					} else { +						button.attr( key, value ); +					} +				}); +				if ($.fn.button) { +					button.button(); +				} +			}); +			uiDialogButtonPane.appendTo(self.uiDialog); +		} +	}, + +	_makeDraggable: function() { +		var self = this, +			options = self.options, +			doc = $(document), +			heightBeforeDrag; + +		function filteredUi(ui) { +			return { +				position: ui.position, +				offset: ui.offset +			}; +		} + +		self.uiDialog.draggable({ +			cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', +			handle: '.ui-dialog-titlebar', +			containment: 'document', +			start: function(event, ui) { +				heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); +				$(this).height($(this).height()).addClass("ui-dialog-dragging"); +				self._trigger('dragStart', event, filteredUi(ui)); +			}, +			drag: function(event, ui) { +				self._trigger('drag', event, filteredUi(ui)); +			}, +			stop: function(event, ui) { +				options.position = [ui.position.left - doc.scrollLeft(), +					ui.position.top - doc.scrollTop()]; +				$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); +				self._trigger('dragStop', event, filteredUi(ui)); +				$.ui.dialog.overlay.resize(); +			} +		}); +	}, + +	_makeResizable: function(handles) { +		handles = (handles === undefined ? this.options.resizable : handles); +		var self = this, +			options = self.options, +			// .ui-resizable has position: relative defined in the stylesheet +			// but dialogs have to use absolute or fixed positioning +			position = self.uiDialog.css('position'), +			resizeHandles = (typeof handles === 'string' ? +				handles	: +				'n,e,s,w,se,sw,ne,nw' +			); + +		function filteredUi(ui) { +			return { +				originalPosition: ui.originalPosition, +				originalSize: ui.originalSize, +				position: ui.position, +				size: ui.size +			}; +		} + +		self.uiDialog.resizable({ +			cancel: '.ui-dialog-content', +			containment: 'document', +			alsoResize: self.element, +			maxWidth: options.maxWidth, +			maxHeight: options.maxHeight, +			minWidth: options.minWidth, +			minHeight: self._minHeight(), +			handles: resizeHandles, +			start: function(event, ui) { +				$(this).addClass("ui-dialog-resizing"); +				self._trigger('resizeStart', event, filteredUi(ui)); +			}, +			resize: function(event, ui) { +				self._trigger('resize', event, filteredUi(ui)); +			}, +			stop: function(event, ui) { +				$(this).removeClass("ui-dialog-resizing"); +				options.height = $(this).height(); +				options.width = $(this).width(); +				self._trigger('resizeStop', event, filteredUi(ui)); +				$.ui.dialog.overlay.resize(); +			} +		}) +		.css('position', position) +		.find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); +	}, + +	_minHeight: function() { +		var options = this.options; + +		if (options.height === 'auto') { +			return options.minHeight; +		} else { +			return Math.min(options.minHeight, options.height); +		} +	}, + +	_position: function(position) { +		var myAt = [], +			offset = [0, 0], +			isVisible; + +		if (position) { +			// deep extending converts arrays to objects in jQuery <= 1.3.2 :-( +	//		if (typeof position == 'string' || $.isArray(position)) { +	//			myAt = $.isArray(position) ? position : position.split(' '); + +			if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { +				myAt = position.split ? position.split(' ') : [position[0], position[1]]; +				if (myAt.length === 1) { +					myAt[1] = myAt[0]; +				} + +				$.each(['left', 'top'], function(i, offsetPosition) { +					if (+myAt[i] === myAt[i]) { +						offset[i] = myAt[i]; +						myAt[i] = offsetPosition; +					} +				}); + +				position = { +					my: myAt.join(" "), +					at: myAt.join(" "), +					offset: offset.join(" ") +				}; +			}  + +			position = $.extend({}, $.ui.dialog.prototype.options.position, position); +		} else { +			position = $.ui.dialog.prototype.options.position; +		} + +		// need to show the dialog to get the actual offset in the position plugin +		isVisible = this.uiDialog.is(':visible'); +		if (!isVisible) { +			this.uiDialog.show(); +		} +		this.uiDialog +			// workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 +			.css({ top: 0, left: 0 }) +			.position($.extend({ of: window }, position)); +		if (!isVisible) { +			this.uiDialog.hide(); +		} +	}, + +	_setOptions: function( options ) { +		var self = this, +			resizableOptions = {}, +			resize = false; + +		$.each( options, function( key, value ) { +			self._setOption( key, value ); +			 +			if ( key in sizeRelatedOptions ) { +				resize = true; +			} +			if ( key in resizableRelatedOptions ) { +				resizableOptions[ key ] = value; +			} +		}); + +		if ( resize ) { +			this._size(); +		} +		if ( this.uiDialog.is( ":data(resizable)" ) ) { +			this.uiDialog.resizable( "option", resizableOptions ); +		} +	}, + +	_setOption: function(key, value){ +		var self = this, +			uiDialog = self.uiDialog; + +		switch (key) { +			//handling of deprecated beforeclose (vs beforeClose) option +			//Ticket #4669 http://dev.jqueryui.com/ticket/4669 +			//TODO: remove in 1.9pre +			case "beforeclose": +				key = "beforeClose"; +				break; +			case "buttons": +				self._createButtons(value); +				break; +			case "closeText": +				// ensure that we always pass a string +				self.uiDialogTitlebarCloseText.text("" + value); +				break; +			case "dialogClass": +				uiDialog +					.removeClass(self.options.dialogClass) +					.addClass(uiDialogClasses + value); +				break; +			case "disabled": +				if (value) { +					uiDialog.addClass('ui-dialog-disabled'); +				} else { +					uiDialog.removeClass('ui-dialog-disabled'); +				} +				break; +			case "draggable": +				var isDraggable = uiDialog.is( ":data(draggable)" ); +				if ( isDraggable && !value ) { +					uiDialog.draggable( "destroy" ); +				} +				 +				if ( !isDraggable && value ) { +					self._makeDraggable(); +				} +				break; +			case "position": +				self._position(value); +				break; +			case "resizable": +				// currently resizable, becoming non-resizable +				var isResizable = uiDialog.is( ":data(resizable)" ); +				if (isResizable && !value) { +					uiDialog.resizable('destroy'); +				} + +				// currently resizable, changing handles +				if (isResizable && typeof value === 'string') { +					uiDialog.resizable('option', 'handles', value); +				} + +				// currently non-resizable, becoming resizable +				if (!isResizable && value !== false) { +					self._makeResizable(value); +				} +				break; +			case "title": +				// convert whatever was passed in o a string, for html() to not throw up +				$(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); +				break; +		} + +		$.Widget.prototype._setOption.apply(self, arguments); +	}, + +	_size: function() { +		/* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content +		 * divs will both have width and height set, so we need to reset them +		 */ +		var options = this.options, +			nonContentHeight, +			minContentHeight, +			isVisible = this.uiDialog.is( ":visible" ); + +		// reset content sizing +		this.element.show().css({ +			width: 'auto', +			minHeight: 0, +			height: 0 +		}); + +		if (options.minWidth > options.width) { +			options.width = options.minWidth; +		} + +		// reset wrapper sizing +		// determine the height of all the non-content elements +		nonContentHeight = this.uiDialog.css({ +				height: 'auto', +				width: options.width +			}) +			.height(); +		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); +		 +		if ( options.height === "auto" ) { +			// only needed for IE6 support +			if ( $.support.minHeight ) { +				this.element.css({ +					minHeight: minContentHeight, +					height: "auto" +				}); +			} else { +				this.uiDialog.show(); +				var autoHeight = this.element.css( "height", "auto" ).height(); +				if ( !isVisible ) { +					this.uiDialog.hide(); +				} +				this.element.height( Math.max( autoHeight, minContentHeight ) ); +			} +		} else { +			this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); +		} + +		if (this.uiDialog.is(':data(resizable)')) { +			this.uiDialog.resizable('option', 'minHeight', this._minHeight()); +		} +	} +}); + +$.extend($.ui.dialog, { +	version: "1.8.21", + +	uuid: 0, +	maxZ: 0, + +	getTitleId: function($el) { +		var id = $el.attr('id'); +		if (!id) { +			this.uuid += 1; +			id = this.uuid; +		} +		return 'ui-dialog-title-' + id; +	}, + +	overlay: function(dialog) { +		this.$el = $.ui.dialog.overlay.create(dialog); +	} +}); + +$.extend($.ui.dialog.overlay, { +	instances: [], +	// reuse old instances due to IE memory leak with alpha transparency (see #5185) +	oldInstances: [], +	maxZ: 0, +	events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), +		function(event) { return event + '.dialog-overlay'; }).join(' '), +	create: function(dialog) { +		if (this.instances.length === 0) { +			// prevent use of anchors and inputs +			// we use a setTimeout in case the overlay is created from an +			// event that we're going to be cancelling (see #2804) +			setTimeout(function() { +				// handle $(el).dialog().dialog('close') (see #4065) +				if ($.ui.dialog.overlay.instances.length) { +					$(document).bind($.ui.dialog.overlay.events, function(event) { +						// stop events if the z-index of the target is < the z-index of the overlay +						// we cannot return true when we don't want to cancel the event (#3523) +						if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { +							return false; +						} +					}); +				} +			}, 1); + +			// allow closing by pressing the escape key +			$(document).bind('keydown.dialog-overlay', function(event) { +				if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && +					event.keyCode === $.ui.keyCode.ESCAPE) { +					 +					dialog.close(event); +					event.preventDefault(); +				} +			}); + +			// handle window resize +			$(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); +		} + +		var $el = (this.oldInstances.pop() || $('<div></div>').addClass('ui-widget-overlay')) +			.appendTo(document.body) +			.css({ +				width: this.width(), +				height: this.height() +			}); + +		if ($.fn.bgiframe) { +			$el.bgiframe(); +		} + +		this.instances.push($el); +		return $el; +	}, + +	destroy: function($el) { +		var indexOf = $.inArray($el, this.instances); +		if (indexOf != -1){ +			this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); +		} + +		if (this.instances.length === 0) { +			$([document, window]).unbind('.dialog-overlay'); +		} + +		$el.remove(); +		 +		// adjust the maxZ to allow other modal dialogs to continue to work (see #4309) +		var maxZ = 0; +		$.each(this.instances, function() { +			maxZ = Math.max(maxZ, this.css('z-index')); +		}); +		this.maxZ = maxZ; +	}, + +	height: function() { +		var scrollHeight, +			offsetHeight; +		// handle IE 6 +		if ($.browser.msie && $.browser.version < 7) { +			scrollHeight = Math.max( +				document.documentElement.scrollHeight, +				document.body.scrollHeight +			); +			offsetHeight = Math.max( +				document.documentElement.offsetHeight, +				document.body.offsetHeight +			); + +			if (scrollHeight < offsetHeight) { +				return $(window).height() + 'px'; +			} else { +				return scrollHeight + 'px'; +			} +		// handle "good" browsers +		} else { +			return $(document).height() + 'px'; +		} +	}, + +	width: function() { +		var scrollWidth, +			offsetWidth; +		// handle IE +		if ( $.browser.msie ) { +			scrollWidth = Math.max( +				document.documentElement.scrollWidth, +				document.body.scrollWidth +			); +			offsetWidth = Math.max( +				document.documentElement.offsetWidth, +				document.body.offsetWidth +			); + +			if (scrollWidth < offsetWidth) { +				return $(window).width() + 'px'; +			} else { +				return scrollWidth + 'px'; +			} +		// handle "good" browsers +		} else { +			return $(document).width() + 'px'; +		} +	}, + +	resize: function() { +		/* If the dialog is draggable and the user drags it past the +		 * right edge of the window, the document becomes wider so we +		 * need to stretch the overlay. If the user then drags the +		 * dialog back to the left, the document will become narrower, +		 * so we need to shrink the overlay to the appropriate size. +		 * This is handled by shrinking the overlay before setting it +		 * to the full document size. +		 */ +		var $overlays = $([]); +		$.each($.ui.dialog.overlay.instances, function() { +			$overlays = $overlays.add(this); +		}); + +		$overlays.css({ +			width: 0, +			height: 0 +		}).css({ +			width: $.ui.dialog.overlay.width(), +			height: $.ui.dialog.overlay.height() +		}); +	} +}); + +$.extend($.ui.dialog.overlay.prototype, { +	destroy: function() { +		$.ui.dialog.overlay.destroy(this.$el); +	} +}); + +}(jQuery)); | 
