/*
 * jQuery UI popup utility
 */
(function($) {
	
var idIncrement = 0;

$.widget( "ui.popup", {
	options: {
		position: {
			my: "left top",
			at: "left bottom"
		}
	},
	_create: function() {
		if ( !this.options.trigger ) {
			this.options.trigger = this.element.prev();
		}
		
		if ( !this.element.attr( "id" ) ) {
			this.element.attr( "id", "ui-popup-" + idIncrement++ );
			this.generatedId = true;
		}
		
		if ( !this.element.attr( "role" ) ) {
			// TODO alternatives to tooltip are dialog and menu, all three aren't generic popups
			this.element.attr( "role", "tooltip" );
			this.generatedRole = true;
		}
		
		this.options.trigger
			.attr( "aria-haspop", true )
			.attr( "aria-owns", this.element.attr( "id" ) );
		
		this.element
			.addClass("ui-popup")
		this._close();
		
		this._bind(this.options.trigger, {
			click: function( event ) {
				event.stopPropagation();
				event.preventDefault();
				this._open( event );
			}
		});
		
		this._bind({
			keyup: function( event ) {
				if (event.keyCode == $.ui.keyCode.ESCAPE && this.element.is( ":visible" )) {
					this._close( event );
					this.options.trigger.focus();
				}
			}
		});
		
		this._bind(document, {
			click: function( event ) {
				if (this.open && !$(event.target).closest(".ui-popup").length) {
					this._close( event );
				}
			}
		})
	},
	
	_destroy: function() {
		this.element
			.show()
			.removeClass( "ui-popup" )
			.removeAttr( "aria-hidden" )
			.removeAttr( "aria-expanded" );
			
		if ( this.generatedId ) {
			this.element.removeAttr( "id" );
		}
		if ( this.generatedRole ) {
			this.element.removeAttr( "role" );
		}
	},
	
	_open: function( event ) {
		var position = $.extend( {}, {
			of: this.options.trigger
		}, this.options.position );

		this.element
			.show()
			.attr( "aria-hidden", false )
			.attr( "aria-expanded", true )
			.position( position )
			.focus();
		this.open = true;
		this._trigger( "open", event );
	},

	_close: function( event ) {
		this.element
			.hide()
			.attr( "aria-hidden", true )
			.attr( "aria-expanded", false );
		this.open = false;
		this._trigger( "close", event );
	}
	
	
});

}(jQuery));

@@ -659,16 +659,18 @@
 a-haspop
+up
 %22, true 
@@ -867,63 +867,84 @@
 ent.
-stopPropagation();%0A%09%09%09%09event.preventDefault();%0A
+preventDefault();%0A%09%09%09%09var that = this;%0A%09%09%09%09setTimeout(function() %7B%0A%09
 %09%09%09%09th
-is
+at
 ._op
@@ -956,16 +956,27 @@
 vent );%0A
+%09%09%09%09%7D, 1);%0A
 %09%09%09%7D%0A%09%09%7D
@@ -1504,24 +1504,113 @@
 expanded%22 );
+%0A%0A%09%09this.options.trigger%0A%09%09%09.removeAttr( %22aria-haspopup%22 )%0A%09%09%09.removeAttr( %22aria-owns%22 );
 %0A%09%09%09%0A%09%09if ( 

Update popup utility: Defer _open call and let click event propagate. Fixes other popups to close. Also update aria usage.