/*jQuery UI Dialog
 * Depends:
 *	ui.core.js
 *	ui.draggable.js
 *	ui.resizable.js
 */
( function($) {
	var setDataSwitch = {
		dragStart :"start.draggable",
		drag :"drag.draggable",
		dragStop :"stop.draggable",
		maxHeight :"maxHeight.resizable",
		minHeight :"minHeight.resizable",
		maxWidth :"maxWidth.resizable",
		minWidth :"minWidth.resizable",
		resizeStart :"start.resizable",
		resize :"drag.resizable",
		resizeStop :"stop.resizable"
	};
	$.widget(
			"ui.dialog",{
			init : function() {
				this.options.title = this.options.title
						|| this.element.attr('title');
				var self = this, options = this.options, resizeHandles = typeof options.resizable == 'string' ? options.resizable
						: 'n,e,s,w,se,sw,ne,nw', uiDialogContent = this.element
						.addClass('ui-dialog-content').wrap(
								'<div/>').wrap('<div/>'), uiDialogContainer = (this.uiDialogContainer = uiDialogContent
						.parent()).addClass('ui-dialog-container')
						.css( {
							position :'relative',
							width :'100%',
							height :'100%'
						}), title = options.title || ' ', uiDialogTitlebar = (this.uiDialogTitlebar = $('<div class="ui-dialog-titlebar"' + (options.titlebar ? "" : " style='display:none;'") + '/>'))
						.append(
								'<span class="ui-dialog-title">' + title + '</span>')
						.append(
								'<a href="#" class="ui-dialog-titlebar-close"><span></span></a>')
						.prependTo(uiDialogContainer), uiDialog = (this.uiDialog = uiDialogContainer
						.parent()).addClass('ui-dialog').attr('id', 'dialogFrame').addClass(
						options.dialogClass).addClass(
						uiDialogContent.attr('className'))
						.removeClass('ui-dialog-content').css( {
							width :options.width,
							height :options.height,
							zIndex :options.zIndex
						}).attr('tabIndex', -1).css('outline', 0)
						.mousedown( function() {
							self.moveToTop()
						}), uiDialogTable = (this.uiDialogTable = $(
						"<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"/>")
						.append(
								"<tr><td class=\"topleft\"></td><td class=\"windowtop\"></td><td class=\"topright\"></td></tr>")
						.append(
								"<tr><td class=\"windowleft\"></td><td id=\"fordialogWrapper\" valign=\"top\"></td><td class=\"windowleft\"></td></tr>")
						.append(
								"<tr><td class=\"btmleft\"></td><td class=\"windowtop\"></td><td class=\"btmright\"></td></tr>")
						.find("#fordialogWrapper").append(
								this.uiDialog).end())
						.appendTo(document.body)
						.hide()
						.css( {
							position :'absolute',
							zIndex :options.zIndex + 100
						})
						.css('outline', 0)
						.keydown(
								function(ev) {
									if (options.closeOnEscape) {
										var ESC = 27;
										(ev.keyCode
												&& ev.keyCode == ESC && self
												.close())
									}
								}), uiDialogButtonPane = (this.uiDialogButtonPane = $('<div/>'))
						.addClass('ui-dialog-buttonpane').css( {
							position :'absolute',
							bottom :0
						}).appendTo(uiDialog);
				this.uiDialogTitlebarClose = $(
						'.ui-dialog-titlebar-close',
						uiDialogTitlebar)
						.hover(
								function() {
									$(this)
											.addClass(
													'ui-dialog-titlebar-close-hover')
								},
								function() {
									$(this)
											.removeClass(
													'ui-dialog-titlebar-close-hover')
								}).mousedown( function(ev) {
							ev.stopPropagation()
						}).click( function() {
							self.close();
							options.closeFunction($(this));
							return false
						});
				uiDialogTitlebar.find("*").add(uiDialogTitlebar)
						.each( function() {
							$.ui.disableSelection(this)
						});
				if ($.fn.draggable) {
					uiDialogTable.draggable( {
						cancel :'.ui-dialog-content',
						helper :options.dragHelper,
						handle :'.ui-dialog-titlebar',
						start : function() {
							self.moveToTop();
							(options.dragStart && options.dragStart
									.apply(self.element[0],
											arguments))
						},
						drag : function() {
							(options.drag && options.drag.apply(
									self.element[0], arguments))
						},
						stop : function() {
							(options.dragStop && options.dragStop
									.apply(self.element[0],
											arguments));
							$.ui.dialog.overlay.resize()
						}
					});
					(options.draggable || uiDialogTable
							.draggable('disable'))
				}
				this.createButtons(options.buttons);
				this.isOpen = false;
				(options.bgiframe && $.fn.bgiframe && uiDialog
						.bgiframe());
				(options.autoOpen && this.open())
			},
			setData : function(key, value) {
				(setDataSwitch[key] && this.uiDialogTable.data(
						setDataSwitch[key], value));
				switch (key) {
				case "buttons":
					this.createButtons(value);
					break;
				case "draggable":
					this.uiDialogTable.draggable(value ? 'enable'
							: 'disable');
					break;
				case "height":
					this.uiDialogTable.height(value);
					break;
				case "position":
					this.position(value);
					break;
				case "title":
					$(".ui-dialog-title", this.uiDialogTitlebar)
							.html(value || ' ');
					break;
				case "width":
					this.uiDialogTable.width(value);
					break
				}
				$.widget.prototype.setData.apply(this, arguments)
			},
			position : function(pos) {
				var wnd = $(window), doc = $(document), pTop = doc
						.scrollTop(), pLeft = doc.scrollLeft(), minTop = pTop;
				if ($.inArray(pos, [ 'center', 'top', 'right',
						'bottom', 'left' ]) >= 0) {
					pos = [
							pos == 'right' || pos == 'left' ? pos
									: 'center',
							pos == 'top' || pos == 'bottom' ? pos
									: 'middle' ]
				}
				if (pos.constructor != Array) {
					pos = [ 'center', 'middle' ]
				}
				if (pos[0].constructor == Number) {
					pLeft += pos[0]
				} else {
					switch (pos[0]) {
					case 'left':
						pLeft += 0;
						break;
					case 'right':
						pLeft += wnd.width()
								- this.uiDialogTable.width();
						break;
					default:
					case 'center':
						pLeft += (wnd.width() - this.uiDialogTable
								.width()) / 2
					}
				}
				if (pos[1].constructor == Number) {
					pTop += pos[1]
				} else {
					switch (pos[1]) {
					case 'top':
						pTop += 0;
						break;
					case 'bottom':
						pTop += wnd.height()
								- this.uiDialogTable.height();
						break;
					default:
					case 'middle':
						pTop += (wnd.height() - this.uiDialogTable
								.height()) / 2
					}
				}
				pTop = Math.max(pTop, minTop);
				this.uiDialogTable.css( {
					top :pTop,
					left :pLeft
				})
			},
			size : function() {
				var container = this.uiDialogContainer, titlebar = this.uiDialogTitlebar, content = this.element, tbMargin = (parseInt(
						content.css('margin-top'), 10) || 0)
						+ (parseInt(content.css('margin-bottom'),
								10) || 0), lrMargin = (parseInt(
						content.css('margin-left'), 10) || 0)
						+ (parseInt(content.css('margin-right'), 10) || 0);
				content.height(container.height()
						- titlebar.outerHeight() - tbMargin);
				content
						.height(container.height() - "25"
								- tbMargin);
				content.width(container.width() - lrMargin)
			},
			open : function() {
				if (this.isOpen) {
					return
				}
				this.overlay = this.options.modal ? new $.ui.dialog.overlay(
						this)
						: null;
				(this.uiDialogTable.next().length && this.uiDialogTable
						.appendTo('body'));
				this.position(this.options.position);
				this.uiDialogTable.show(this.options.show);
				(this.options.autoResize && this.size());
				this.moveToTop(true);
				this.trigger('open', null, {
					options :this.options
				});
				this.isOpen = true
			},
			moveToTop : function(force) {
				if ((this.options.modal && !force)
						|| (!this.options.stack && !this.options.modal)) {
					return this.trigger('focus', null, {
						options :this.options
					})
				}
				var maxZ = this.options.zIndex, options = this.options;
				$('.ui-dialog:visible').each(
						function() {
							maxZ = Math.max(maxZ, parseInt($(this)
									.css('z-index'), 10)
									|| options.zIndex)
						});
				(this.overlay && this.overlay.$el.css('z-index',
						++maxZ));
				this.uiDialogTable.css('z-index', ++maxZ);
				this.trigger('focus', null, {
					options :this.options
				})
			},
			close : function() {
				this.destroy()
			},
			destroy : function() {
				(this.overlay && this.overlay.destroy());
				this.uiDialogTable.hide();
				this.element.unbind('.dialog').removeData('dialog')
						.removeClass('ui-dialog-content').hide()
						.appendTo('body');
				this.uiDialogTable.remove()
			},
			createButtons : function(buttons) {
				var self = this, hasButtons = false, uiDialogButtonPane = this.uiDialogButtonPane;
				uiDialogButtonPane.empty().hide();
				$.each(buttons, function() {
					return !(hasButtons = true)
				});
				if (hasButtons) {
					uiDialogButtonPane.show();
					$.each(buttons, function(name, fn) {
						$('<button/>').text(name).click(
								function() {
									fn.apply(self.element[0],
											arguments)
								}).appendTo(uiDialogButtonPane)
					})
				}
			},
			fakeEvent : function(type) {
				return $.event.fix( {
					type :type,
					target :this.element[0]
				})
			}
		});
	$.extend($.ui.dialog, {
		defaults : {
			autoOpen :true,
			autoResize :true,
			bgiframe :false,
			buttons : {},
			closeOnEscape :true,
			draggable :true,
			height :200,
			minHeight :100,
			minWidth :150,
			modal :false,
			overlay : {},
			position :'center',
			resizable :true,
			stack :true,
			width :300,
			zIndex :1000,
			titlebar :true,
			closeFunction : function(){}
		},
		overlay : function(dialog) {
			this.$el = $.ui.dialog.overlay.create(dialog)
		}
	});
	$.extend(
		$.ui.dialog.overlay,{
			instances : [],
			events :$.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), function(e) {
					return e + '.dialog-overlay'}).join(' '),
			create : function(dialog) {
				if (this.instances.length === 0) {
					setTimeout(
						function() {
							$('a, :input')
								.bind($.ui.dialog.overlay.events,function() {
									var allow = false;
									var $dialog = $(this)
											.parents('.ui-dialog');
									if ($dialog.length) {
										var $overlays = $('.ui-dialog-overlay');
										if ($overlays.length) {
											var maxZ = parseInt($overlays.css('z-index'),10);
											$overlays.each( function() {
												maxZ = Math.max(maxZ,parseInt(
													$(this).css('z-index'),10))
											});
											allow = parseInt($dialog.css('z-index'),10) > maxZ
										} else {
											allow = true
										}
									}
									return allow
								})
							}, 1);
							$(document).bind('keydown.dialog-overlay',
								function(e) {
									var ESC = 27;
									(e.keyCode&& e.keyCode == ESC && dialog.close())
								});
							$(window).bind('resize.dialog-overlay',
								$.ui.dialog.overlay.resize)
							}
							var $el = $('<div/>').appendTo(document.body)
									.addClass('ui-dialog-overlay').css(
											$.extend( {
												borderWidth :0,
												margin :0,
												padding :0,
												position :'absolute',
												top :0,
												left :0,
												width :this.width(),
												height :this.height()
											}, dialog.options.overlay));
							(dialog.options.bgiframe && $.fn.bgiframe && $el
									.bgiframe());
							this.instances.push($el);
							return $el
						},
						destroy : function($el) {
							this.instances.splice($
									.inArray(this.instances, $el), 1);
							if (this.instances.length === 0) {
								$('a, :input').add( [ document, window ])
										.unbind('.dialog-overlay')
							}
							$el.remove()
						},
						height : function() {
							if ($.browser.msie && $.browser.version < 7) {
								var scrollHeight = Math.max(
										document.documentElement.scrollHeight,
										document.body.scrollHeight);
								var offsetHeight = Math.max(
										document.documentElement.offsetHeight,
										document.body.offsetHeight);
								if (scrollHeight < offsetHeight) {
									return $(window).height() + 'px'
								} else {
									return scrollHeight + 'px'
								}
							} else if ($.browser.opera) {
								return Math.max(window.innerHeight, $(document)
										.height()) + 'px'
							} else {
								return $(document).height() + 'px'
							}
						},
						width : function() {
							if ($.browser.msie && $.browser.version < 7) {
								var scrollWidth = Math.max(
										document.documentElement.scrollWidth,
										document.body.scrollWidth);
								var offsetWidth = Math.max(
										document.documentElement.offsetWidth,
										document.body.offsetWidth);
								if (scrollWidth < offsetWidth) {
									return $(window).width() + 'px'
								} else {
									return scrollWidth + 'px'
								}
							} else if ($.browser.opera) {
								return Math.max(window.innerWidth, $(document)
										.width()) + 'px'
							} else {
								return $(document).width() + 'px'
							}
						},
						resize : function() {
							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);
/*
 * jQuery UI Draggable Depends: ui.core.js
 */
( function($) {
	$
			.widget(
					"ui.draggable",
					$
							.extend(
									{},
									$.ui.mouse,
									{
										init : function() {
											if (this.options.helper == 'original'
													&& !(/^(?:r|a|f)/)
															.test(this.element
																	.css("position")))
												this.element[0].style.position = 'relative';
											(this.options.cssNamespace && this.element
													.addClass(this.options.cssNamespace
															+ "-draggable"));
											(this.options.disabled && this.element
													.addClass('ui-draggable-disabled'));
											this.mouseInit()
										},
										mouseStart : function(e) {
											var o = this.options;
											if (this.helper
													|| o.disabled
													|| $(e.target)
															.is(
																	'.ui-resizable-handle'))
												return false;
											var handle = !this.options.handle
													|| !$(this.options.handle,
															this.element).length ? true
													: false;
											$(this.options.handle, this.element)
													.find("*").andSelf()
													.each( function() {
														if (this == e.target)
															handle = true
													});
											if (!handle)
												return false;
											if ($.ui.ddmanager)
												$.ui.ddmanager.current = this;
											this.helper = $
													.isFunction(o.helper) ? $(o.helper
													.apply(this.element[0],
															[ e ]))
													: (o.helper == 'clone' ? this.element
															.clone()
															: this.element);
											if (!this.helper.parents('body').length)
												this.helper
														.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode
																: o.appendTo));
											if (this.helper[0] != this.element[0]
													&& !(/(fixed|absolute)/)
															.test(this.helper
																	.css("position")))
												this.helper.css("position",
														"absolute");
											this.margins = {
												left :(parseInt(this.element
														.css("marginLeft"), 10) || 0),
												top :(parseInt(this.element
														.css("marginTop"), 10) || 0)
											};
											this.cssPosition = this.helper
													.css("position");
											this.offset = this.element.offset();
											this.offset = {
												top :this.offset.top
														- this.margins.top,
												left :this.offset.left
														- this.margins.left
											};
											this.offset.click = {
												left :e.pageX
														- this.offset.left,
												top :e.pageY - this.offset.top
											};
											this.scrollTopParent = function(el) {
												do {
													if (/auto|scroll/.test(el
															.css('overflow'))
															|| (/auto|scroll/)
																	.test(el
																			.css('overflow-y')))
														return el;
													el = el.parent()
												} while (el[0].parentNode);
												return $(document)
											}(this.helper);
											this.scrollLeftParent = function(el) {
												do {
													if (/auto|scroll/.test(el
															.css('overflow'))
															|| (/auto|scroll/)
																	.test(el
																			.css('overflow-x')))
														return el;
													el = el.parent()
												} while (el[0].parentNode);
												return $(document)
											}(this.helper);
											this.offsetParent = this.helper
													.offsetParent();
											var po = this.offsetParent.offset();
											if (this.offsetParent[0] == document.body
													&& $.browser.mozilla)
												po = {
													top :0,
													left :0
												};
											this.offset.parent = {
												top :po.top
														+ (parseInt(
																this.offsetParent
																		.css("borderTopWidth"),
																10) || 0),
												left :po.left
														+ (parseInt(
																this.offsetParent
																		.css("borderLeftWidth"),
																10) || 0)
											};
											var p = this.element.position();
											this.offset.relative = this.cssPosition == "relative" ? {
												top :p.top
														- (parseInt(this.helper
																.css("top"), 10) || 0)
														+ (this.scrollTopParent[0].scrollTop || 0),
												left :p.left
														- (parseInt(this.helper
																.css("left"),
																10) || 0)
														+ (this.scrollLeftParent[0].scrollLeft || 0)
											}
													: {
														top :0,
														left :0
													};
											this.originalPosition = this
													.generatePosition(e);
											this.helperProportions = {
												width :this.helper.outerWidth(),
												height :this.helper
														.outerHeight()
											};
											if (o.cursorAt) {
												if (o.cursorAt.left != undefined)
													this.offset.click.left = o.cursorAt.left
															+ this.margins.left;
												if (o.cursorAt.right != undefined)
													this.offset.click.left = this.helperProportions.width
															- o.cursorAt.right
															+ this.margins.left;
												if (o.cursorAt.top != undefined)
													this.offset.click.top = o.cursorAt.top
															+ this.margins.top;
												if (o.cursorAt.bottom != undefined)
													this.offset.click.top = this.helperProportions.height
															- o.cursorAt.bottom
															+ this.margins.top
											}
											if (o.containment) {
												if (o.containment == 'parent')
													o.containment = this.helper[0].parentNode;
												if (o.containment == 'document'
														|| o.containment == 'window')
													this.containment = [
															0
																	- this.offset.relative.left
																	- this.offset.parent.left,
															0
																	- this.offset.relative.top
																	- this.offset.parent.top,
															$(
																	o.containment == 'document' ? document
																			: window)
																	.width()
																	- this.offset.relative.left
																	- this.offset.parent.left
																	- this.helperProportions.width
																	- this.margins.left
																	- (parseInt(
																			this.element
																					.css("marginRight"),
																			10) || 0),
															($(
																	o.containment == 'document' ? document
																			: window)
																	.height() || document.body.parentNode.scrollHeight)
																	- this.offset.relative.top
																	- this.offset.parent.top
																	- this.helperProportions.height
																	- this.margins.top
																	- (parseInt(
																			this.element
																					.css("marginBottom"),
																			10) || 0) ];
												if (!(/^(document|window|parent)$/)
														.test(o.containment)) {
													var ce = $(o.containment)[0];
													var co = $(o.containment)
															.offset();
													this.containment = [
															co.left
																	+ (parseInt(
																			$(
																					ce)
																					.css(
																							"borderLeftWidth"),
																			10) || 0)
																	- this.offset.relative.left
																	- this.offset.parent.left,
															co.top
																	+ (parseInt(
																			$(
																					ce)
																					.css(
																							"borderTopWidth"),
																			10) || 0)
																	- this.offset.relative.top
																	- this.offset.parent.top,
															co.left
																	+ Math
																			.max(
																					ce.scrollWidth,
																					ce.offsetWidth)
																	- (parseInt(
																			$(
																					ce)
																					.css(
																							"borderLeftWidth"),
																			10) || 0)
																	- this.offset.relative.left
																	- this.offset.parent.left
																	- this.helperProportions.width
																	- this.margins.left
																	- (parseInt(
																			this.element
																					.css("marginRight"),
																			10) || 0),
															co.top
																	+ Math
																			.max(
																					ce.scrollHeight,
																					ce.offsetHeight)
																	- (parseInt(
																			$(
																					ce)
																					.css(
																							"borderTopWidth"),
																			10) || 0)
																	- this.offset.relative.top
																	- this.offset.parent.top
																	- this.helperProportions.height
																	- this.margins.top
																	- (parseInt(
																			this.element
																					.css("marginBottom"),
																			10) || 0) ]
												}
											}
											this.propagate("start", e);
											this.helperProportions = {
												width :this.helper.outerWidth(),
												height :this.helper
														.outerHeight()
											};
											if ($.ui.ddmanager
													&& !o.dropBehaviour)
												$.ui.ddmanager.prepareOffsets(
														this, e);
											this.helper
													.addClass("ui-draggable-dragging");
											this.mouseDrag(e);
											return true
										},
										convertPositionTo : function(d, pos) {
											if (!pos)
												pos = this.position;
											var mod = d == "absolute" ? 1 : -1;
											return {
												top :(pos.top
														+ this.offset.relative.top
														* mod
														+ this.offset.parent.top
														* mod
														- (this.cssPosition == "fixed"
																|| (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0
																: (this.scrollTopParent[0].scrollTop || 0))
														* mod
														+ (this.cssPosition == "fixed" ? $(
																document)
																.scrollTop()
																: 0) * mod + this.margins.top
														* mod),
												left :(pos.left
														+ this.offset.relative.left
														* mod
														+ this.offset.parent.left
														* mod
														- (this.cssPosition == "fixed"
																|| (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0
																: (this.scrollLeftParent[0].scrollLeft || 0))
														* mod
														+ (this.cssPosition == "fixed" ? $(
																document)
																.scrollLeft()
																: 0) * mod + this.margins.left
														* mod)
											}
										},
										generatePosition : function(e) {
											var o = this.options;
											var position = {
												top :(e.pageY
														- this.offset.click.top
														- this.offset.relative.top
														- this.offset.parent.top
														+ (this.cssPosition == "fixed"
																|| (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0
																: (this.scrollTopParent[0].scrollTop || 0)) - (this.cssPosition == "fixed" ? $(
														document).scrollTop()
														: 0)),
												left :(e.pageX
														- this.offset.click.left
														- this.offset.relative.left
														- this.offset.parent.left
														+ (this.cssPosition == "fixed"
																|| (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0
																: (this.scrollLeftParent[0].scrollLeft || 0)) - (this.cssPosition == "fixed" ? $(
														document).scrollLeft()
														: 0))
											};
											if (!this.originalPosition)
												return position;
											if (this.containment) {
												if (position.left < this.containment[0])
													position.left = this.containment[0];
												if (position.top < this.containment[1])
													position.top = this.containment[1];
												if (position.left > this.containment[2])
													position.left = this.containment[2];
												if (position.top > this.containment[3])
													position.top = this.containment[3]
											}
											if (o.grid) {
												var top = this.originalPosition.top
														+ Math
																.round((position.top - this.originalPosition.top)
																		/ o.grid[1])
														* o.grid[1];
												position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top
														: (!(top < this.containment[1]) ? top
																- o.grid[1]
																: top
																		+ o.grid[1]))
														: top;
												var left = this.originalPosition.left
														+ Math
																.round((position.left - this.originalPosition.left)
																		/ o.grid[0])
														* o.grid[0];
												position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left
														: (!(left < this.containment[0]) ? left
																- o.grid[0]
																: left
																		+ o.grid[0]))
														: left
											}
											return position
										},
										mouseDrag : function(e) {
											this.position = this
													.generatePosition(e);
											this.positionAbs = this
													.convertPositionTo("absolute");
											this.position = this.propagate(
													"drag", e)
													|| this.position;
											if (!this.options.axis
													|| this.options.axis != "y")
												this.helper[0].style.left = this.position.left + 'px';
											if (!this.options.axis
													|| this.options.axis != "x")
												this.helper[0].style.top = this.position.top + 'px';
											if ($.ui.ddmanager)
												$.ui.ddmanager.drag(this, e);
											return false
										},
										mouseStop : function(e) {
											var dropped = false;
											if ($.ui.ddmanager
													&& !this.options.dropBehaviour)
												var dropped = $.ui.ddmanager
														.drop(this, e);
											if ((this.options.revert == "invalid" && !dropped)
													|| (this.options.revert == "valid" && dropped)
													|| this.options.revert === true) {
												var self = this;
												$(this.helper)
														.animate(
																this.originalPosition,
																parseInt(
																		this.options.revertDuration,
																		10) || 500,
																function() {
																	self
																			.propagate(
																					"stop",
																					e);
																	self
																			.clear()
																})
											} else {
												this.propagate("stop", e);
												this.clear()
											}
											return false
										},
										clear : function() {
											this.helper
													.removeClass("ui-draggable-dragging");
											if (this.options.helper != 'original'
													&& !this.cancelHelperRemoval)
												this.helper.remove();
											this.helper = null;
											this.cancelHelperRemoval = false
										},
										plugins : {},
										uiHash : function(e) {
											return {
												helper :this.helper,
												position :this.position,
												absolutePosition :this.positionAbs,
												options :this.options
											}
										},
										propagate : function(n, e) {
											$.ui.plugin.call(this, n, [ e,
													this.uiHash() ]);
											if (n == "drag")
												this.positionAbs = this
														.convertPositionTo("absolute");
											return this.element.triggerHandler(
													n == "drag" ? n : "drag"
															+ n, [ e,
															this.uiHash() ],
													this.options[n])
										},
										destroy : function() {
											if (!this.element.data('draggable'))
												return;
											this.element
													.removeData("draggable")
													.unbind(".draggable")
													.removeClass(
															'ui-draggable-dragging ui-draggable-disabled');
											this.mouseDestroy()
										}
									}));
	$.extend($.ui.draggable, {
		defaults : {
			appendTo :"parent",
			axis :false,
			cancel :":input",
			delay :0,
			distance :1,
			helper :"original",
			scope :"default",
			cssNamespace :"ui"
		}
	});
	$.ui.plugin.add("draggable", "cursor", {
		start : function(e, ui) {
			var t = $('body');
			if (t.css("cursor"))
				ui.options._cursor = t.css("cursor");
			t.css("cursor", ui.options.cursor)
		},
		stop : function(e, ui) {
			if (ui.options._cursor)
				$('body').css("cursor", ui.options._cursor)
		}
	});
	$.ui.plugin.add("draggable", "zIndex", {
		start : function(e, ui) {
			var t = $(ui.helper);
			if (t.css("zIndex"))
				ui.options._zIndex = t.css("zIndex");
			t.css('zIndex', ui.options.zIndex)
		},
		stop : function(e, ui) {
			if (ui.options._zIndex)
				$(ui.helper).css('zIndex', ui.options._zIndex)
		}
	});
	$.ui.plugin.add("draggable", "opacity", {
		start : function(e, ui) {
			var t = $(ui.helper);
			if (t.css("opacity"))
				ui.options._opacity = t.css("opacity");
			t.css('opacity', ui.options.opacity)
		},
		stop : function(e, ui) {
			if (ui.options._opacity)
				$(ui.helper).css('opacity', ui.options._opacity)
		}
	});
	$.ui.plugin
			.add(
					"draggable",
					"iframeFix",
					{
						start : function(e, ui) {
							$(
									ui.options.iframeFix === true ? "iframe"
											: ui.options.iframeFix)
									.each(
											function() {
												$(
														'<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
														.css(
																{
																	width :this.offsetWidth
																			+ "px",
																	height :this.offsetHeight
																			+ "px",
																	position :"absolute",
																	opacity :"0.001",
																	zIndex :1000
																})
														.css($(this).offset())
														.appendTo("body")
											})
						},
						stop : function(e, ui) {
							$("div.DragDropIframeFix").each( function() {
								this.parentNode.removeChild(this)
							})
						}
					});
	$.ui.plugin
			.add(
					"draggable",
					"scroll",
					{
						start : function(e, ui) {
							var o = ui.options;
							var i = $(this).data("draggable");
							o.scrollSensitivity = o.scrollSensitivity || 20;
							o.scrollSpeed = o.scrollSpeed || 20;
							i.overflowY = function(el) {
								do {
									if (/auto|scroll/.test(el.css('overflow'))
											|| (/auto|scroll/).test(el
													.css('overflow-y')))
										return el;
									el = el.parent()
								} while (el[0].parentNode);
								return $(document)
							}(this);
							i.overflowX = function(el) {
								do {
									if (/auto|scroll/.test(el.css('overflow'))
											|| (/auto|scroll/).test(el
													.css('overflow-x')))
										return el;
									el = el.parent()
								} while (el[0].parentNode);
								return $(document)
							}(this);
							if (i.overflowY[0] != document
									&& i.overflowY[0].tagName != 'HTML')
								i.overflowYOffset = i.overflowY.offset();
							if (i.overflowX[0] != document
									&& i.overflowX[0].tagName != 'HTML')
								i.overflowXOffset = i.overflowX.offset()
						},
						drag : function(e, ui) {
							var o = ui.options, scrolled = false;
							var i = $(this).data("draggable");
							if (i.overflowY[0] != document
									&& i.overflowY[0].tagName != 'HTML') {
								if ((i.overflowYOffset.top + i.overflowY[0].offsetHeight)
										- e.pageY < o.scrollSensitivity)
									i.overflowY[0].scrollTop = scrolled = i.overflowY[0].scrollTop
											+ o.scrollSpeed;
								if (e.pageY - i.overflowYOffset.top < o.scrollSensitivity)
									i.overflowY[0].scrollTop = scrolled = i.overflowY[0].scrollTop
											- o.scrollSpeed
							} else {
								if (e.pageY - $(document).scrollTop() < o.scrollSensitivity)
									scrolled = $(document).scrollTop(
											$(document).scrollTop()
													- o.scrollSpeed);
								if ($(window).height()
										- (e.pageY - $(document).scrollTop()) < o.scrollSensitivity)
									scrolled = $(document).scrollTop(
											$(document).scrollTop()
													+ o.scrollSpeed)
							}
							if (i.overflowX[0] != document
									&& i.overflowX[0].tagName != 'HTML') {
								if ((i.overflowXOffset.left + i.overflowX[0].offsetWidth)
										- e.pageX < o.scrollSensitivity)
									i.overflowX[0].scrollLeft = scrolled = i.overflowX[0].scrollLeft
											+ o.scrollSpeed;
								if (e.pageX - i.overflowXOffset.left < o.scrollSensitivity)
									i.overflowX[0].scrollLeft = scrolled = i.overflowX[0].scrollLeft
											- o.scrollSpeed
							} else {
								if (e.pageX - $(document).scrollLeft() < o.scrollSensitivity)
									scrolled = $(document).scrollLeft(
											$(document).scrollLeft()
													- o.scrollSpeed);
								if ($(window).width()
										- (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
									scrolled = $(document).scrollLeft(
											$(document).scrollLeft()
													+ o.scrollSpeed)
							}
							if (scrolled !== false)
								$.ui.ddmanager.prepareOffsets(i, e)
						}
					});
	$.ui.plugin
			.add(
					"draggable",
					"snap",
					{
						start : function(e, ui) {
							var inst = $(this).data("draggable");
							inst.snapElements = [];
							$(
									ui.options.snap.constructor != String ? (ui.options.snap.items || ':data(draggable)')
											: ui.options.snap).each(
									function() {
										var $t = $(this);
										var $o = $t.offset();
										if (this != inst.element[0])
											inst.snapElements.push( {
												item :this,
												width :$t.outerWidth(),
												height :$t.outerHeight(),
												top :$o.top,
												left :$o.left
											})
									})
						},
						drag : function(e, ui) {
							var inst = $(this).data("draggable");
							var d = ui.options.snapTolerance || 20;
							var x1 = ui.absolutePosition.left, x2 = x1
									+ inst.helperProportions.width, y1 = ui.absolutePosition.top, y2 = y1
									+ inst.helperProportions.height;
							for ( var i = inst.snapElements.length - 1; i >= 0; i--) {
								var l = inst.snapElements[i].left, r = l
										+ inst.snapElements[i].width, t = inst.snapElements[i].top, b = t
										+ inst.snapElements[i].height;
								if (!((l - d < x1 && x1 < r + d && t - d < y1 && y1 < b
										+ d)
										|| (l - d < x1 && x1 < r + d
												&& t - d < y2 && y2 < b + d)
										|| (l - d < x2 && x2 < r + d
												&& t - d < y1 && y1 < b + d) || (l
										- d < x2
										&& x2 < r + d && t - d < y2 && y2 < b
										+ d))) {
									if (inst.snapElements[i].snapping)
										(inst.options.snap.release && inst.options.snap.release
												.call(
														inst.element,
														null,
														$
																.extend(
																		inst
																				.uiHash(),
																		{
																			snapItem :inst.snapElements[i].item
																		})));
									inst.snapElements[i].snapping = false;
									continue
								}
								if (ui.options.snapMode != 'inner') {
									var ts = Math.abs(t - y2) <= d;
									var bs = Math.abs(b - y1) <= d;
									var ls = Math.abs(l - x2) <= d;
									var rs = Math.abs(r - x1) <= d;
									if (ts)
										ui.position.top = inst
												.convertPositionTo(
														"relative",
														{
															top :t
																	- inst.helperProportions.height,
															left :0
														}).top;
									if (bs)
										ui.position.top = inst
												.convertPositionTo("relative",
														{
															top :b,
															left :0
														}).top;
									if (ls)
										ui.position.left = inst
												.convertPositionTo(
														"relative",
														{
															top :0,
															left :l
																	- inst.helperProportions.width
														}).left;
									if (rs)
										ui.position.left = inst
												.convertPositionTo("relative",
														{
															top :0,
															left :r
														}).left
								}
								var first = (ts || bs || ls || rs);
								if (ui.options.snapMode != 'outer') {
									var ts = Math.abs(t - y1) <= d;
									var bs = Math.abs(b - y2) <= d;
									var ls = Math.abs(l - x1) <= d;
									var rs = Math.abs(r - x2) <= d;
									if (ts)
										ui.position.top = inst
												.convertPositionTo("relative",
														{
															top :t,
															left :0
														}).top;
									if (bs)
										ui.position.top = inst
												.convertPositionTo(
														"relative",
														{
															top :b
																	- inst.helperProportions.height,
															left :0
														}).top;
									if (ls)
										ui.position.left = inst
												.convertPositionTo("relative",
														{
															top :0,
															left :l
														}).left;
									if (rs)
										ui.position.left = inst
												.convertPositionTo(
														"relative",
														{
															top :0,
															left :r
																	- inst.helperProportions.width
														}).left
								}
								if (!inst.snapElements[i].snapping
										&& (ts || bs || ls || rs || first))
									(inst.options.snap.snap && inst.options.snap.snap
											.call(
													inst.element,
													null,
													$
															.extend(
																	inst
																			.uiHash(),
																	{
																		snapItem :inst.snapElements[i].item
																	})));
								inst.snapElements[i].snapping = (ts || bs || ls
										|| rs || first)
							}
						}
					});
	$.ui.plugin
			.add(
					"draggable",
					"connectToSortable",
					{
						start : function(e, ui) {
							var inst = $(this).data("draggable");
							inst.sortables = [];
							$(ui.options.connectToSortable).each( function() {
								if ($.data(this, 'sortable')) {
									var sortable = $.data(this, 'sortable');
									inst.sortables.push( {
										instance :sortable,
										shouldRevert :sortable.options.revert
									});
									sortable.refreshItems();
									sortable.propagate("activate", e, inst)
								}
							})
						},
						stop : function(e, ui) {
							var inst = $(this).data("draggable");
							$
									.each(
											inst.sortables,
											function() {
												if (this.instance.isOver) {
													this.instance.isOver = 0;
													inst.cancelHelperRemoval = true;
													this.instance.cancelHelperRemoval = false;
													if (this.shouldRevert)
														this.instance.options.revert = true;
													this.instance.mouseStop(e);
													this.instance.element
															.triggerHandler(
																	"sortreceive",
																	[
																			e,
																			$
																					.extend(
																							this.instance
																									.ui(),
																							{
																								sender :inst.element
																							}) ],
																	this.instance.options["receive"]);
													this.instance.options.helper = this.instance.options._helper
												} else {
													this.instance.propagate(
															"deactivate", e,
															inst)
												}
											})
						},
						drag : function(e, ui) {
							var inst = $(this).data("draggable"), self = this;
							var checkPos = function(o) {
								var l = o.left, r = l + o.width, t = o.top, b = t
										+ o.height;
								return (l < (this.positionAbs.left + this.offset.click.left)
										&& (this.positionAbs.left + this.offset.click.left) < r
										&& t < (this.positionAbs.top + this.offset.click.top) && (this.positionAbs.top + this.offset.click.top) < b)
							};
							$
									.each(
											inst.sortables,
											function(i) {
												if (checkPos
														.call(
																inst,
																this.instance.containerCache)) {
													if (!this.instance.isOver) {
														this.instance.isOver = 1;
														this.instance.currentItem = $(
																self)
																.clone()
																.appendTo(
																		this.instance.element)
																.data(
																		"sortable-item",
																		true);
														this.instance.options._helper = this.instance.options.helper;
														this.instance.options.helper = function() {
															return ui.helper[0]
														};
														e.target = this.instance.currentItem[0];
														this.instance
																.mouseCapture(
																		e, true);
														this.instance
																.mouseStart(e,
																		true,
																		true);
														this.instance.offset.click.top = inst.offset.click.top;
														this.instance.offset.click.left = inst.offset.click.left;
														this.instance.offset.parent.left -= inst.offset.parent.left
																- this.instance.offset.parent.left;
														this.instance.offset.parent.top -= inst.offset.parent.top
																- this.instance.offset.parent.top;
														inst
																.propagate(
																		"toSortable",
																		e)
													}
													if (this.instance.currentItem)
														this.instance
																.mouseDrag(e)
												} else {
													if (this.instance.isOver) {
														this.instance.isOver = 0;
														this.instance.cancelHelperRemoval = true;
														this.instance.options.revert = false;
														this.instance
																.mouseStop(e,
																		true);
														this.instance.options.helper = this.instance.options._helper;
														this.instance.currentItem
																.remove();
														if (this.instance.placeholder)
															this.instance.placeholder
																	.remove();
														inst.propagate(
																"fromSortable",
																e)
													}
												}
											})
						}
					});
	$.ui.plugin
			.add(
					"draggable",
					"stack",
					{
						start : function(e, ui) {
							var group = $
									.makeArray($(ui.options.stack.group))
									.sort(
											function(a, b) {
												return (parseInt($(a).css(
														"zIndex"), 10) || ui.options.stack.min)
														- (parseInt($(b).css(
																"zIndex"), 10) || ui.options.stack.min)
											});
							$(group).each( function(i) {
								this.style.zIndex = ui.options.stack.min + i
							});
							this[0].style.zIndex = ui.options.stack.min
									+ group.length
						}
					})
})(jQuery);

