;
(function($) {
	$.ui = {
		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) {
					return;
				}
				for ( var i = 0; i < set.length; i++) {
					if (instance.options[set[i][0]]) {
						set[i][1].apply(instance.element, args);
					}
				}
			}
		},
		cssCache : {},
		css : function(name) {
			if ($.ui.cssCache[name]) {
				return $.ui.cssCache[name];
			}
			var tmp = $('<div class="ui-gen">').addClass(name).css( {
				position : 'absolute',
				top : '-5000px',
				left : '-5000px',
				display : 'block'
			}).appendTo('body');
			$.ui.cssCache[name] = !!((!(/auto|default/).test(tmp.css('cursor'))
					|| (/^[1-9]/).test(tmp.css('height'))
					|| (/^[1-9]/).test(tmp.css('width'))
					|| !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/)
					.test(tmp.css('backgroundColor'))));
			try {
				$('body').get(0).removeChild(tmp.get(0));
			} catch (e) {
			}
			return $.ui.cssCache[name];
		},
		disableSelection : function(el) {
			$(el).attr('unselectable', 'on').css('MozUserSelect', 'none');
		},
		enableSelection : function(el) {
			$(el).attr('unselectable', 'off').css('MozUserSelect', '');
		},
		hasScroll : function(e, a) {
			var scroll = /top/.test(a || "top") ? 'scrollTop' : 'scrollLeft', has = false;
			if (e[scroll] > 0)
				return true;
			e[scroll] = 1;
			has = e[scroll] > 0 ? true : false;
			e[scroll] = 0;
			return has;
		}
	};
	var _remove = $.fn.remove;
	$.fn.remove = function() {
		$("*", this).add(this).triggerHandler("remove");
		return _remove.apply(this, arguments);
	};
	function getter(namespace, plugin, method) {
		var methods = $[namespace][plugin].getter || [];
		methods = (typeof methods == "string" ? methods.split(/,?\s+/)
				: methods);
		return ($.inArray(method, methods) != -1);
	}
	$.widget = function(name, prototype) {
		var namespace = name.split(".")[0];
		name = name.split(".")[1];
		$.fn[name] = function(options) {
			var isMethodCall = (typeof options == 'string'), args = Array.prototype.slice
					.call(arguments, 1);
			if (isMethodCall && getter(namespace, name, options)) {
				var instance = $.data(this[0], name);
				return (instance ? instance[options].apply(instance, args)
						: undefined);
			}
			return this
					.each(function() {
						var instance = $.data(this, name);
						if (isMethodCall && instance
								&& $.isFunction(instance[options])) {
							instance[options].apply(instance, args);
						} else if (!isMethodCall) {
							$.data(this, name, new $[namespace][name](this,
									options));
						}
					});
		};
		$[namespace][name] = function(element, options) {
			var self = this;
			this.widgetName = name;
			this.widgetBaseClass = namespace + '-' + name;
			this.options = $.extend( {}, $.widget.defaults,
					$[namespace][name].defaults, options);
			this.element = $(element).bind('setData.' + name,
					function(e, key, value) {
						return self.setData(key, value);
					}).bind('getData.' + name, function(e, key) {
				return self.getData(key);
			}).bind('remove', function() {
				return self.destroy();
			});
			this.init();
		};
		$[namespace][name].prototype = $.extend( {}, $.widget.prototype,
				prototype);
	};
	$.widget.prototype = {
		init : function() {
		},
		destroy : function() {
			this.element.removeData(this.widgetName);
		},
		getData : function(key) {
			return this.options[key];
		},
		setData : function(key, value) {
			this.options[key] = value;
			if (key == 'disabled') {
				this.element[value ? 'addClass' : 'removeClass']
						(this.widgetBaseClass + '-disabled');
			}
		},
		enable : function() {
			this.setData('disabled', false);
		},
		disable : function() {
			this.setData('disabled', true);
		}
	};
	$.widget.defaults = {
		disabled : false
	};
	$.ui.mouse = {
		mouseInit : function() {
			var self = this;
			this.element.bind('mousedown.' + this.widgetName, function(e) {
				return self.mouseDown(e);
			});
			if ($.browser.msie) {
				this._mouseUnselectable = this.element.attr('unselectable');
				this.element.attr('unselectable', 'on');
			}
			this.started = false;
		},
		mouseDestroy : function() {
			this.element.unbind('.' + this.widgetName);
			($.browser.msie && this.element.attr('unselectable',
					this._mouseUnselectable));
		},
		mouseDown : function(e) {
			(this._mouseStarted && this.mouseUp(e));
			this._mouseDownEvent = e;
			var self = this, btnIsLeft = (e.which == 1), elIsCancel = (typeof this.options.cancel == "string" ? $(
					e.target).parents().add(e.target).filter(
					this.options.cancel).length
					: false);
			if (!btnIsLeft || elIsCancel || !this.mouseCapture(e)) {
				return true;
			}
			this._mouseDelayMet = !this.options.delay;
			if (!this._mouseDelayMet) {
				this._mouseDelayTimer = setTimeout(function() {
					self._mouseDelayMet = true;
				}, this.options.delay);
			}
			if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) {
				this._mouseStarted = (this.mouseStart(e) !== false);
				if (!this._mouseStarted) {
					e.preventDefault();
					return true;
				}
			}
			this._mouseMoveDelegate = function(e) {
				return self.mouseMove(e);
			};
			this._mouseUpDelegate = function(e) {
				return self.mouseUp(e);
			};
			$(document).bind('mousemove.' + this.widgetName,
					this._mouseMoveDelegate).bind('mouseup.' + this.widgetName,
					this._mouseUpDelegate);
			return false;
		},
		mouseMove : function(e) {
			if ($.browser.msie && !e.button) {
				return this.mouseUp(e);
			}
			if (this._mouseStarted) {
				this.mouseDrag(e);
				return false;
			}
			if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) {
				this._mouseStarted = (this.mouseStart(this._mouseDownEvent, e) !== false);
				(this._mouseStarted ? this.mouseDrag(e) : this.mouseUp(e));
			}
			return !this._mouseStarted;
		},
		mouseUp : function(e) {
			$(document).unbind('mousemove.' + this.widgetName,
					this._mouseMoveDelegate).unbind(
					'mouseup.' + this.widgetName, this._mouseUpDelegate);
			if (this._mouseStarted) {
				this._mouseStarted = false;
				this.mouseStop(e);
			}
			return false;
		},
		mouseDistanceMet : function(e) {
			return (Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX),
					Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance);
		},
		mouseDelayMet : function(e) {
			return this._mouseDelayMet;
		},
		mouseStart : function(e) {
		},
		mouseDrag : function(e) {
		},
		mouseStop : function(e) {
		},
		mouseCapture : function(e) {
			return true;
		}
	};
	$.ui.mouse.defaults = {
		cancel : null,
		distance : 1,
		delay : 0
	};
})(jQuery);
(function($) {
	$
			.widget(
					"ui.draggable",
					$
							.extend(
									{},
									$.ui.mouse,
									{
										init : function() {
											var o = this.options;
											if (o.helper == 'original'
													&& !(/(relative|absolute|fixed)/)
															.test(this.element
																	.css('position')))
												this.element.css('position',
														'relative');
											this.element
													.addClass('ui-draggable');
											(o.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.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.offsetParent[0].scrollTop,
												left : p.left
														- (parseInt(this.helper
																.css("left"),
																10) || 0)
														+ this.offsetParent[0].scrollLeft
											}
													: {
														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.offsetParent[0].scrollTop)
														* 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.offsetParent[0].scrollLeft)
														* 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.offsetParent[0].scrollTop) - (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.offsetParent[0].scrollLeft) - (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.revert,
																		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');
											this.mouseDestroy();
										}
									}));
	$.extend($.ui.draggable, {
		defaults : {
			appendTo : "parent",
			axis : false,
			cancel : ":input",
			delay : 0,
			distance : 1,
			helper : "original"
		}
	});
	$.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;
							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 = i.overflowY[0].scrollTop
											+ o.scrollSpeed;
								if (e.pageY - i.overflowYOffset.top < o.scrollSensitivity)
									i.overflowY[0].scrollTop = i.overflowY[0].scrollTop
											- o.scrollSpeed;
							} else {
								if (e.pageY - $(document).scrollTop() < o.scrollSensitivity)
									$(document).scrollTop(
											$(document).scrollTop()
													- o.scrollSpeed);
								if ($(window).height()
										- (e.pageY - $(document).scrollTop()) < o.scrollSensitivity)
									$(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 = i.overflowX[0].scrollLeft
											+ o.scrollSpeed;
								if (e.pageX - i.overflowXOffset.left < o.scrollSensitivity)
									i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft
											- o.scrollSpeed;
							} else {
								if (e.pageX - $(document).scrollLeft() < o.scrollSensitivity)
									$(document).scrollLeft(
											$(document).scrollLeft()
													- o.scrollSpeed);
								if ($(window).width()
										- (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
									$(document).scrollLeft(
											$(document).scrollLeft()
													+ o.scrollSpeed);
							}
						}
					});
	$.ui.plugin
			.add(
					"draggable",
					"snap",
					{
						start : function(e, ui) {
							var inst = $(this).data("draggable");
							inst.snapElements = [];
							$(
									ui.options.snap === true ? '.ui-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)))
									continue;
								if (ui.options.snapMode != 'inner') {
									var ts = Math.abs(t - y2) <= 20;
									var bs = Math.abs(b - y1) <= 20;
									var ls = Math.abs(l - x2) <= 20;
									var rs = Math.abs(r - x1) <= 20;
									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;
								}
								if (ui.options.snapMode != 'outer') {
									var ts = Math.abs(t - y1) <= 20;
									var bs = Math.abs(b - y2) <= 20;
									var ls = Math.abs(l - x1) <= 20;
									var rs = Math.abs(r - x2) <= 20;
									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;
								}
							}
							;
						}
					});
	$.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);
(function($) {
	$
			.widget(
					"ui.droppable",
					{
						init : function() {
							this.element.addClass("ui-droppable");
							this.isover = 1;
							this.isout = 1;
							var o = this.options, accept = o.accept;
							o = $
									.extend(
											o,
											{
												accept : o.accept
														&& o.accept.constructor == Function ? o.accept
														: function(d) {
															return $(d).is(
																	accept);
														}
											});
							this.proportions = {
								width : this.element[0].offsetWidth,
								height : this.element[0].offsetHeight
							};
							$.ui.ddmanager.droppables.push(this);
						},
						plugins : {},
						ui : function(c) {
							return {
								draggable : (c.currentItem || c.element),
								helper : c.helper,
								position : c.position,
								absolutePosition : c.positionAbs,
								options : this.options,
								element : this.element
							};
						},
						destroy : function() {
							var drop = $.ui.ddmanager.droppables;
							for ( var i = 0; i < drop.length; i++)
								if (drop[i] == this)
									drop.splice(i, 1);
							this.element.removeClass(
									"ui-droppable ui-droppable-disabled")
									.removeData("droppable").unbind(
											".droppable");
						},
						over : function(e) {
							var draggable = $.ui.ddmanager.current;
							if (!draggable
									|| (draggable.currentItem || draggable.element)[0] == this.element[0])
								return;
							if (this.options.accept
									.call(
											this.element,
											(draggable.currentItem || draggable.element))) {
								$.ui.plugin.call(this, 'over', [ e,
										this.ui(draggable) ]);
								this.element
										.triggerHandler("dropover", [ e,
												this.ui(draggable) ],
												this.options.over);
							}
						},
						out : function(e) {
							var draggable = $.ui.ddmanager.current;
							if (!draggable
									|| (draggable.currentItem || draggable.element)[0] == this.element[0])
								return;
							if (this.options.accept
									.call(
											this.element,
											(draggable.currentItem || draggable.element))) {
								$.ui.plugin.call(this, 'out', [ e,
										this.ui(draggable) ]);
								this.element.triggerHandler("dropout", [ e,
										this.ui(draggable) ], this.options.out);
							}
						},
						drop : function(e, custom) {
							var draggable = custom || $.ui.ddmanager.current;
							if (!draggable
									|| (draggable.currentItem || draggable.element)[0] == this.element[0])
								return false;
							var childrenIntersection = false;
							this.element
									.find(".ui-droppable")
									.not(".ui-draggable-dragging")
									.each(
											function() {
												var inst = $.data(this,
														'droppable');
												if (inst.options.greedy
														&& $.ui
																.intersect(
																		draggable,
																		$
																				.extend(
																						inst,
																						{
																							offset : inst.element
																									.offset()
																						}),
																		inst.options.tolerance)) {
													childrenIntersection = true;
													return false;
												}
											});
							if (childrenIntersection)
								return false;
							if (this.options.accept
									.call(
											this.element,
											(draggable.currentItem || draggable.element))) {
								$.ui.plugin.call(this, 'drop', [ e,
										this.ui(draggable) ]);
								this.element
										.triggerHandler("drop", [ e,
												this.ui(draggable) ],
												this.options.drop);
								return true;
							}
							return false;
						},
						activate : function(e) {
							var draggable = $.ui.ddmanager.current;
							$.ui.plugin.call(this, 'activate', [ e,
									this.ui(draggable) ]);
							if (draggable)
								this.element.triggerHandler("dropactivate", [
										e, this.ui(draggable) ],
										this.options.activate);
						},
						deactivate : function(e) {
							var draggable = $.ui.ddmanager.current;
							$.ui.plugin.call(this, 'deactivate', [ e,
									this.ui(draggable) ]);
							if (draggable)
								this.element.triggerHandler("dropdeactivate", [
										e, this.ui(draggable) ],
										this.options.deactivate);
						}
					});
	$.extend($.ui.droppable, {
		defaults : {
			disabled : false,
			tolerance : 'intersect'
		}
	});
	$.ui.intersect = function(draggable, droppable, toleranceMode) {
		if (!droppable.offset)
			return false;
		var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1
				+ draggable.helperProportions.width, y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1
				+ draggable.helperProportions.height;
		var l = droppable.offset.left, r = l + droppable.proportions.width, t = droppable.offset.top, b = t
				+ droppable.proportions.height;
		switch (toleranceMode) {
		case 'fit':
			return (l < x1 && x2 < r && t < y1 && y2 < b);
			break;
		case 'intersect':
			return (l < x1 + (draggable.helperProportions.width / 2)
					&& x2 - (draggable.helperProportions.width / 2) < r
					&& t < y1 + (draggable.helperProportions.height / 2) && y2
					- (draggable.helperProportions.height / 2) < b);
			break;
		case 'pointer':
			return (l < ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left)
					&& ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left) < r
					&& t < ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) && ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) < b);
			break;
		case 'touch':
			return ((y1 >= t && y1 <= b) || (y2 >= t && y2 <= b) || (y1 < t && y2 > b))
					&& ((x1 >= l && x1 <= r) || (x2 >= l && x2 <= r) || (x1 < l && x2 > r));
			break;
		default:
			return false;
			break;
		}
	};
	$.ui.ddmanager = {
		current : null,
		droppables : [],
		prepareOffsets : function(t, e) {
			var m = $.ui.ddmanager.droppables;
			var type = e ? e.type : null;
			for ( var i = 0; i < m.length; i++) {
				if (m[i].options.disabled
						|| (t && !m[i].options.accept.call(m[i].element,
								(t.currentItem || t.element))))
					continue;
				m[i].visible = m[i].element.css("display") != "none";
				if (!m[i].visible)
					continue;
				m[i].offset = m[i].element.offset();
				m[i].proportions = {
					width : m[i].element[0].offsetWidth,
					height : m[i].element[0].offsetHeight
				};
				if (type == "dragstart" || type == "sortactivate")
					m[i].activate.call(m[i], e);
			}
		},
		drop : function(draggable, e) {
			var dropped = false;
			$.each($.ui.ddmanager.droppables, function() {
				if (!this.options)
					return;
				if (!this.options.disabled
						&& this.visible
						&& $.ui.intersect(draggable, this,
								this.options.tolerance))
					dropped = this.drop.call(this, e);
				if (!this.options.disabled
						&& this.visible
						&& this.options.accept.call(this.element,
								(draggable.currentItem || draggable.element))) {
					this.isout = 1;
					this.isover = 0;
					this.deactivate.call(this, e);
				}
			});
			return dropped;
		},
		drag : function(draggable, e) {
			if (draggable.options.refreshPositions)
				$.ui.ddmanager.prepareOffsets(draggable, e);
			$.each($.ui.ddmanager.droppables, function() {
				if (this.options.disabled || this.greedyChild || !this.visible)
					return;
				var intersects = $.ui.intersect(draggable, this,
						this.options.tolerance);
				var c = !intersects && this.isover == 1 ? 'isout' : (intersects
						&& this.isover == 0 ? 'isover' : null);
				if (!c)
					return;
				var parentInstance;
				if (this.options.greedy) {
					var parent = this.element.parents('.ui-droppable:eq(0)');
					if (parent.length) {
						parentInstance = $.data(parent[0], 'droppable');
						parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
					}
				}
				if (parentInstance && c == 'isover') {
					parentInstance['isover'] = 0;
					parentInstance['isout'] = 1;
					parentInstance.out.call(parentInstance, e);
				}
				this[c] = 1;
				this[c == 'isout' ? 'isover' : 'isout'] = 0;
				this[c == "isover" ? "over" : "out"].call(this, e);
				if (parentInstance && c == 'isout') {
					parentInstance['isout'] = 0;
					parentInstance['isover'] = 1;
					parentInstance.over.call(parentInstance, e);
				}
			});
		}
	};
	$.ui.plugin.add("droppable", "activeClass", {
		activate : function(e, ui) {
			$(this).addClass(ui.options.activeClass);
		},
		deactivate : function(e, ui) {
			$(this).removeClass(ui.options.activeClass);
		},
		drop : function(e, ui) {
			$(this).removeClass(ui.options.activeClass);
		}
	});
	$.ui.plugin.add("droppable", "hoverClass", {
		over : function(e, ui) {
			$(this).addClass(ui.options.hoverClass);
		},
		out : function(e, ui) {
			$(this).removeClass(ui.options.hoverClass);
		},
		drop : function(e, ui) {
			$(this).removeClass(ui.options.hoverClass);
		}
	});
})(jQuery);
(function($) {
	$
			.widget(
					"ui.resizable",
					$
							.extend(
									{},
									$.ui.mouse,
									{
										init : function() {
											var self = this, o = this.options;
											var elpos = this.element
													.css('position');
											this.originalElement = this.element;
											this.element
													.addClass("ui-resizable")
													.css(
															{
																position : /static/
																		.test(elpos) ? 'relative'
																		: elpos
															});
											$
													.extend(
															o,
															{
																_aspectRatio : !!(o.aspectRatio),
																helper : o.helper
																		|| o.ghost
																		|| o.animate ? o.helper || 'proxy'
																		: null,
																knobHandles : o.knobHandles === true ? 'ui-resizable-knob-handle'
																		: o.knobHandles
															});
											var aBorder = '1px solid #DEDEDE';
											o.defaultTheme = {
												'ui-resizable' : {
													display : 'block'
												},
												'ui-resizable-handle' : {
													position : 'absolute',
													background : '#F2F2F2',
													fontSize : '0.1px'
												},
												'ui-resizable-n' : {
													cursor : 'n-resize',
													height : '4px',
													left : '0px',
													right : '0px',
													borderTop : aBorder
												},
												'ui-resizable-s' : {
													cursor : 's-resize',
													height : '4px',
													left : '0px',
													right : '0px',
													borderBottom : aBorder
												},
												'ui-resizable-e' : {
													cursor : 'e-resize',
													width : '4px',
													top : '0px',
													bottom : '0px',
													borderRight : aBorder
												},
												'ui-resizable-w' : {
													cursor : 'w-resize',
													width : '4px',
													top : '0px',
													bottom : '0px',
													borderLeft : aBorder
												},
												'ui-resizable-se' : {
													cursor : 'se-resize',
													width : '4px',
													height : '4px',
													borderRight : aBorder,
													borderBottom : aBorder
												},
												'ui-resizable-sw' : {
													cursor : 'sw-resize',
													width : '4px',
													height : '4px',
													borderBottom : aBorder,
													borderLeft : aBorder
												},
												'ui-resizable-ne' : {
													cursor : 'ne-resize',
													width : '4px',
													height : '4px',
													borderRight : aBorder,
													borderTop : aBorder
												},
												'ui-resizable-nw' : {
													cursor : 'nw-resize',
													width : '4px',
													height : '4px',
													borderLeft : aBorder,
													borderTop : aBorder
												}
											};
											o.knobTheme = {
												'ui-resizable-handle' : {
													background : '#F2F2F2',
													border : '1px solid #808080',
													height : '8px',
													width : '8px'
												},
												'ui-resizable-n' : {
													cursor : 'n-resize',
													top : '0px',
													left : '45%'
												},
												'ui-resizable-s' : {
													cursor : 's-resize',
													bottom : '0px',
													left : '45%'
												},
												'ui-resizable-e' : {
													cursor : 'e-resize',
													right : '0px',
													top : '45%'
												},
												'ui-resizable-w' : {
													cursor : 'w-resize',
													left : '0px',
													top : '45%'
												},
												'ui-resizable-se' : {
													cursor : 'se-resize',
													right : '0px',
													bottom : '0px'
												},
												'ui-resizable-sw' : {
													cursor : 'sw-resize',
													left : '0px',
													bottom : '0px'
												},
												'ui-resizable-nw' : {
													cursor : 'nw-resize',
													left : '0px',
													top : '0px'
												},
												'ui-resizable-ne' : {
													cursor : 'ne-resize',
													right : '0px',
													top : '0px'
												}
											};
											o._nodeName = this.element[0].nodeName;
											if (o._nodeName
													.match(/canvas|textarea|input|select|button|img/i)) {
												var el = this.element;
												if (/relative/.test(el
														.css('position'))
														&& $.browser.opera)
													el.css( {
														position : 'relative',
														top : 'auto',
														left : 'auto'
													});
												el
														.wrap($(
																'<div class="ui-wrapper" style="overflow: hidden;"></div>')
																.css(
																		{
																			position : el
																					.css('position'),
																			width : el
																					.outerWidth(),
																			height : el
																					.outerHeight(),
																			top : el
																					.css('top'),
																			left : el
																					.css('left')
																		}));
												var oel = this.element;
												this.element = this.element
														.parent();
												this.element.data('resizable',
														this);
												this.element
														.css( {
															marginLeft : oel
																	.css("marginLeft"),
															marginTop : oel
																	.css("marginTop"),
															marginRight : oel
																	.css("marginRight"),
															marginBottom : oel
																	.css("marginBottom")
														});
												oel.css( {
													marginLeft : 0,
													marginTop : 0,
													marginRight : 0,
													marginBottom : 0
												});
												if ($.browser.safari
														&& o.preventDefault)
													oel.css('resize', 'none');
												o.proportionallyResize = oel
														.css( {
															position : 'static',
															zoom : 1,
															display : 'block'
														});
												this.element.css( {
													margin : oel.css('margin')
												});
												this._proportionallyResize();
											}
											if (!o.handles)
												o.handles = !$(
														'.ui-resizable-handle',
														this.element).length ? "e,s,se"
														: {
															n : '.ui-resizable-n',
															e : '.ui-resizable-e',
															s : '.ui-resizable-s',
															w : '.ui-resizable-w',
															se : '.ui-resizable-se',
															sw : '.ui-resizable-sw',
															ne : '.ui-resizable-ne',
															nw : '.ui-resizable-nw'
														};
											if (o.handles.constructor == String) {
												o.zIndex = o.zIndex || 1000;
												if (o.handles == 'all')
													o.handles = 'n,e,s,w,se,sw,ne,nw';
												var n = o.handles.split(",");
												o.handles = {};
												var insertionsDefault = {
													handle : 'position: absolute; display: none; overflow:hidden;',
													n : 'top: 0pt; width:100%;',
													e : 'right: 0pt; height:100%;',
													s : 'bottom: 0pt; width:100%;',
													w : 'left: 0pt; height:100%;',
													se : 'bottom: 0pt; right: 0px;',
													sw : 'bottom: 0pt; left: 0px;',
													ne : 'top: 0pt; right: 0px;',
													nw : 'top: 0pt; left: 0px;'
												};
												for ( var i = 0; i < n.length; i++) {
													var handle = $.trim(n[i]), dt = o.defaultTheme, hname = 'ui-resizable-' + handle, loadDefault = !$.ui
															.css(hname)
															&& !o.knobHandles, userKnobClass = $.ui
															.css('ui-resizable-knob-handle'), allDefTheme = $
															.extend(
																	dt[hname],
																	dt['ui-resizable-handle']), allKnobTheme = $
															.extend(
																	o.knobTheme[hname],
																	!userKnobClass ? o.knobTheme['ui-resizable-handle']
																			: {});
													var applyZIndex = /sw|se|ne|nw/
															.test(handle) ? {
														zIndex : ++o.zIndex
													} : {};
													var defCss = (loadDefault ? insertionsDefault[handle]
															: ''), axis = $(
															[
																	'<div class="ui-resizable-handle ',
																	hname,
																	'" style="',
																	defCss,
																	insertionsDefault.handle,
																	'"></div>' ]
																	.join(''))
															.css(applyZIndex);
													o.handles[handle] = '.ui-resizable-' + handle;
													this.element
															.append(axis
																	.css(
																			loadDefault ? allDefTheme
																					: {})
																	.css(
																			o.knobHandles ? allKnobTheme
																					: {})
																	.addClass(
																			o.knobHandles ? 'ui-resizable-knob-handle'
																					: '')
																	.addClass(
																			o.knobHandles));
												}
												if (o.knobHandles)
													this.element
															.addClass(
																	'ui-resizable-knob')
															.css(
																	!$.ui
																			.css('ui-resizable-knob') ? {}
																			: {});
											}
											this._renderAxis = function(target) {
												target = target || this.element;
												for ( var i in o.handles) {
													if (o.handles[i].constructor == String)
														o.handles[i] = $(
																o.handles[i],
																this.element)
																.show();
													if (o.transparent)
														o.handles[i].css( {
															opacity : 0
														});
													if (this.element
															.is('.ui-wrapper')
															&& o._nodeName
																	.match(/textarea|input|select|button/i)) {
														var axis = $(
																o.handles[i],
																this.element), padWrapper = 0;
														padWrapper = /sw|ne|nw|se|n|s/
																.test(i) ? axis
																.outerHeight()
																: axis
																		.outerWidth();
														var padPos = [
																'padding',
																/ne|nw|n/
																		.test(i) ? 'Top'
																		: /se|sw|s/
																				.test(i) ? 'Bottom'
																				: /^e$/
																						.test(i) ? 'Right'
																						: 'Left' ]
																.join("");
														if (!o.transparent)
															target.css(padPos,
																	padWrapper);
														this
																._proportionallyResize();
													}
													if (!$(o.handles[i]).length)
														continue;
												}
											};
											this._renderAxis(this.element);
											o._handles = $(
													'.ui-resizable-handle',
													self.element);
											if (o.disableSelection)
												o._handles.each(function(i, e) {
													$.ui.disableSelection(e);
												});
											o._handles
													.mouseover(function() {
														if (!o.resizing) {
															if (this.className)
																var axis = this.className
																		.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
															self.axis = o.axis = axis
																	&& axis[1] ? axis[1]
																	: 'se';
														}
													});
											if (o.autoHide) {
												o._handles.hide();
												$(self.element)
														.addClass(
																"ui-resizable-autohide")
														.hover(
																function() {
																	$(this)
																			.removeClass(
																					"ui-resizable-autohide");
																	o._handles
																			.show();
																},
																function() {
																	if (!o.resizing) {
																		$(this)
																				.addClass(
																						"ui-resizable-autohide");
																		o._handles
																				.hide();
																	}
																});
											}
											this.mouseInit();
										},
										plugins : {},
										ui : function() {
											return {
												originalElement : this.originalElement,
												element : this.element,
												helper : this.helper,
												position : this.position,
												size : this.size,
												options : this.options,
												originalSize : this.originalSize,
												originalPosition : this.originalPosition
											};
										},
										propagate : function(n, e) {
											$.ui.plugin.call(this, n, [ e,
													this.ui() ]);
											if (n != "resize")
												this.element.triggerHandler( [
														"resize", n ].join(""),
														[ e, this.ui() ],
														this.options[n]);
										},
										destroy : function() {
											var el = this.element, wrapped = el
													.children(".ui-resizable")
													.get(0);
											this.mouseDestroy();
											var _destroy = function(exp) {
												$(exp)
														.removeClass(
																"ui-resizable ui-resizable-disabled")
														.removeData("resizable")
														.unbind(".resizable")
														.find(
																'.ui-resizable-handle')
														.remove();
											};
											_destroy(el);
											if (el.is('.ui-wrapper') && wrapped) {
												el
														.parent()
														.append(
																$(wrapped)
																		.css(
																				{
																					position : el
																							.css('position'),
																					width : el
																							.outerWidth(),
																					height : el
																							.outerHeight(),
																					top : el
																							.css('top'),
																					left : el
																							.css('left')
																				}))
														.end().remove();
												_destroy(wrapped);
											}
										},
										mouseStart : function(e) {
											if (this.options.disabled)
												return false;
											var handle = false;
											for ( var i in this.options.handles) {
												if ($(this.options.handles[i])[0] == e.target)
													handle = true;
											}
											if (!handle)
												return false;
											var o = this.options, iniPos = this.element
													.position(), el = this.element, num = function(
													v) {
												return parseInt(v, 10) || 0;
											}, ie6 = $.browser.msie
													&& $.browser.version < 7;
											o.resizing = true;
											o.documentScroll = {
												top : $(document).scrollTop(),
												left : $(document).scrollLeft()
											};
											if (el.is('.ui-draggable')
													|| (/absolute/).test(el
															.css('position'))) {
												var sOffset = $.browser.msie
														&& !o.containment
														&& (/absolute/)
																.test(el
																		.css('position'))
														&& !(/relative/)
																.test(el
																		.parent()
																		.css(
																				'position'));
												var dscrollt = sOffset ? o.documentScroll.top
														: 0, dscrolll = sOffset ? o.documentScroll.left
														: 0;
												el
														.css( {
															position : 'absolute',
															top : (iniPos.top + dscrollt),
															left : (iniPos.left + dscrolll)
														});
											}
											if ($.browser.opera
													&& /relative/.test(el
															.css('position')))
												el.css( {
													position : 'relative',
													top : 'auto',
													left : 'auto'
												});
											this._renderProxy();
											var curleft = num(this.helper
													.css('left')), curtop = num(this.helper
													.css('top'));
											if (o.containment) {
												curleft += $(o.containment)
														.scrollLeft() || 0;
												curtop += $(o.containment)
														.scrollTop() || 0;
											}
											this.offset = this.helper.offset();
											this.position = {
												left : curleft,
												top : curtop
											};
											this.size = o.helper || ie6 ? {
												width : el.outerWidth(),
												height : el.outerHeight()
											} : {
												width : el.width(),
												height : el.height()
											};
											this.originalSize = o.helper || ie6 ? {
												width : el.outerWidth(),
												height : el.outerHeight()
											}
													: {
														width : el.width(),
														height : el.height()
													};
											this.originalPosition = {
												left : curleft,
												top : curtop
											};
											this.sizeDiff = {
												width : el.outerWidth()
														- el.width(),
												height : el.outerHeight()
														- el.height()
											};
											this.originalMousePosition = {
												left : e.pageX,
												top : e.pageY
											};
											o.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio
													: ((this.originalSize.height / this.originalSize.width) || 1);
											if (o.preserveCursor)
												$('body').css('cursor',
														this.axis + '-resize');
											this.propagate("start", e);
											return true;
										},
										mouseDrag : function(e) {
											var el = this.helper, o = this.options, props = {}, self = this, smp = this.originalMousePosition, a = this.axis;
											var dx = (e.pageX - smp.left) || 0, dy = (e.pageY - smp.top) || 0;
											var trigger = this._change[a];
											if (!trigger)
												return false;
											var data = trigger.apply(this, [ e,
													dx, dy ]), ie6 = $.browser.msie
													&& $.browser.version < 7, csdif = this.sizeDiff;
											if (o._aspectRatio || e.shiftKey)
												data = this._updateRatio(data,
														e);
											data = this._respectSize(data, e);
											this.propagate("resize", e);
											el.css( {
												top : this.position.top + "px",
												left : this.position.left
														+ "px",
												width : this.size.width + "px",
												height : this.size.height
														+ "px"
											});
											if (!o.helper
													&& o.proportionallyResize)
												this._proportionallyResize();
											this._updateCache(data);
											this.element.triggerHandler(
													"resize", [ e, this.ui() ],
													this.options["resize"]);
											return false;
										},
										mouseStop : function(e) {
											this.options.resizing = false;
											var o = this.options, num = function(
													v) {
												return parseInt(v, 10) || 0;
											}, self = this;
											if (o.helper) {
												var pr = o.proportionallyResize, ista = pr
														&& (/textarea/i)
																.test(pr.get(0).nodeName), soffseth = ista
														&& $.ui
																.hasScroll(
																		pr
																				.get(0),
																		'left') ? 0
														: self.sizeDiff.height, soffsetw = ista ? 0
														: self.sizeDiff.width;
												var s = {
													width : (self.size.width - soffsetw),
													height : (self.size.height - soffseth)
												}, left = (parseInt(
														self.element
																.css('left'),
														10) + (self.position.left - self.originalPosition.left))
														|| null, top = (parseInt(
														self.element.css('top'),
														10) + (self.position.top - self.originalPosition.top))
														|| null;
												if (!o.animate)
													this.element.css($.extend(
															s, {
																top : top,
																left : left
															}));
												if (o.helper && !o.animate)
													this
															._proportionallyResize();
											}
											if (o.preserveCursor)
												$('body').css('cursor', 'auto');
											this.propagate("stop", e);
											if (o.helper)
												this.helper.remove();
											return false;
										},
										_updateCache : function(data) {
											var o = this.options;
											this.offset = this.helper.offset();
											if (data.left)
												this.position.left = data.left;
											if (data.top)
												this.position.top = data.top;
											if (data.height)
												this.size.height = data.height;
											if (data.width)
												this.size.width = data.width;
										},
										_updateRatio : function(data, e) {
											var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
											if (data.height)
												data.width = (csize.height / o.aspectRatio);
											else if (data.width)
												data.height = (csize.width * o.aspectRatio);
											if (a == 'sw') {
												data.left = cpos.left
														+ (csize.width - data.width);
												data.top = null;
											}
											if (a == 'nw') {
												data.top = cpos.top
														+ (csize.height - data.height);
												data.left = cpos.left
														+ (csize.width - data.width);
											}
											return data;
										},
										_respectSize : function(data, e) {
											var el = this.helper, o = this.options, pRatio = o._aspectRatio
													|| e.shiftKey, a = this.axis, ismaxw = data.width
													&& o.maxWidth
													&& o.maxWidth < data.width, ismaxh = data.height
													&& o.maxHeight
													&& o.maxHeight < data.height, isminw = data.width
													&& o.minWidth
													&& o.minWidth > data.width, isminh = data.height
													&& o.minHeight
													&& o.minHeight > data.height;
											if (isminw)
												data.width = o.minWidth;
											if (isminh)
												data.height = o.minHeight;
											if (ismaxw)
												data.width = o.maxWidth;
											if (ismaxh)
												data.height = o.maxHeight;
											var dw = this.originalPosition.left
													+ this.originalSize.width, dh = this.position.top
													+ this.size.height;
											var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/
													.test(a);
											if (isminw && cw)
												data.left = dw - o.minWidth;
											if (ismaxw && cw)
												data.left = dw - o.maxWidth;
											if (isminh && ch)
												data.top = dh - o.minHeight;
											if (ismaxh && ch)
												data.top = dh - o.maxHeight;
											var isNotwh = !data.width
													&& !data.height;
											if (isNotwh && !data.left
													&& data.top)
												data.top = null;
											else if (isNotwh && !data.top
													&& data.left)
												data.left = null;
											return data;
										},
										_proportionallyResize : function() {
											var o = this.options;
											if (!o.proportionallyResize)
												return;
											var prel = o.proportionallyResize, el = this.helper
													|| this.element;
											if (!o.borderDif) {
												var b = [
														prel
																.css('borderTopWidth'),
														prel
																.css('borderRightWidth'),
														prel
																.css('borderBottomWidth'),
														prel
																.css('borderLeftWidth') ], p = [
														prel.css('paddingTop'),
														prel
																.css('paddingRight'),
														prel
																.css('paddingBottom'),
														prel.css('paddingLeft') ];
												o.borderDif = $
														.map(
																b,
																function(v, i) {
																	var border = parseInt(
																			v,
																			10) || 0, padding = parseInt(
																			p[i],
																			10) || 0;
																	return border
																			+ padding;
																});
											}
											prel
													.css( {
														height : (el.height()
																- o.borderDif[0] - o.borderDif[2])
																+ "px",
														width : (el.width()
																- o.borderDif[1] - o.borderDif[3])
																+ "px"
													});
										},
										_renderProxy : function() {
											var el = this.element, o = this.options;
											this.elementOffset = el.offset();
											if (o.helper) {
												this.helper = this.helper
														|| $('<div style="overflow:hidden;"></div>');
												var ie6 = $.browser.msie
														&& $.browser.version < 7, ie6offset = (ie6 ? 1
														: 0), pxyoffset = (ie6 ? 2
														: -1);
												this.helper
														.addClass(o.helper)
														.css(
																{
																	width : el
																			.outerWidth()
																			+ pxyoffset,
																	height : el
																			.outerHeight()
																			+ pxyoffset,
																	position : 'absolute',
																	left : this.elementOffset.left
																			- ie6offset
																			+ 'px',
																	top : this.elementOffset.top
																			- ie6offset
																			+ 'px',
																	zIndex : ++o.zIndex
																});
												this.helper.appendTo("body");
												if (o.disableSelection)
													$.ui
															.disableSelection(this.helper
																	.get(0));
											} else {
												this.helper = el;
											}
										},
										_change : {
											e : function(e, dx, dy) {
												return {
													width : this.originalSize.width
															+ dx
												};
											},
											w : function(e, dx, dy) {
												var o = this.options, cs = this.originalSize, sp = this.originalPosition;
												return {
													left : sp.left + dx,
													width : cs.width - dx
												};
											},
											n : function(e, dx, dy) {
												var o = this.options, cs = this.originalSize, sp = this.originalPosition;
												return {
													top : sp.top + dy,
													height : cs.height - dy
												};
											},
											s : function(e, dx, dy) {
												return {
													height : this.originalSize.height
															+ dy
												};
											},
											se : function(e, dx, dy) {
												return $
														.extend(
																this._change.s
																		.apply(
																				this,
																				arguments),
																this._change.e
																		.apply(
																				this,
																				[
																						e,
																						dx,
																						dy ]));
											},
											sw : function(e, dx, dy) {
												return $
														.extend(
																this._change.s
																		.apply(
																				this,
																				arguments),
																this._change.w
																		.apply(
																				this,
																				[
																						e,
																						dx,
																						dy ]));
											},
											ne : function(e, dx, dy) {
												return $
														.extend(
																this._change.n
																		.apply(
																				this,
																				arguments),
																this._change.e
																		.apply(
																				this,
																				[
																						e,
																						dx,
																						dy ]));
											},
											nw : function(e, dx, dy) {
												return $
														.extend(
																this._change.n
																		.apply(
																				this,
																				arguments),
																this._change.w
																		.apply(
																				this,
																				[
																						e,
																						dx,
																						dy ]));
											}
										}
									}));
	$.extend($.ui.resizable, {
		defaults : {
			cancel : ":input",
			distance : 1,
			delay : 0,
			preventDefault : true,
			transparent : false,
			minWidth : 10,
			minHeight : 10,
			aspectRatio : false,
			disableSelection : true,
			preserveCursor : true,
			autoHide : false,
			knobHandles : false
		}
	});
	$.ui.plugin
			.add(
					"resizable",
					"containment",
					{
						start : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), el = self.element;
							var oc = o.containment, ce = (oc instanceof $) ? oc
									.get(0) : (/parent/.test(oc)) ? el.parent()
									.get(0) : oc;
							if (!ce)
								return;
							self.containerElement = $(ce);
							if (/document/.test(oc) || oc == document) {
								self.containerOffset = {
									left : 0,
									top : 0
								};
								self.containerPosition = {
									left : 0,
									top : 0
								};
								self.parentData = {
									element : $(document),
									left : 0,
									top : 0,
									width : $(document).width(),
									height : $(document).height()
											|| document.body.parentNode.scrollHeight
								};
							} else {
								self.containerOffset = $(ce).offset();
								self.containerPosition = $(ce).position();
								self.containerSize = {
									height : $(ce).innerHeight(),
									width : $(ce).innerWidth()
								};
								var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, width = ($.ui
										.hasScroll(ce, "left") ? ce.scrollWidth
										: cw), height = ($.ui.hasScroll(ce) ? ce.scrollHeight
										: ch);
								self.parentData = {
									element : ce,
									left : co.left,
									top : co.top,
									width : width,
									height : height
								};
							}
						},
						resize : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, pRatio = o._aspectRatio
									|| e.shiftKey, cop = {
								top : 0,
								left : 0
							}, ce = self.containerElement;
							if (ce[0] != document
									&& /static/.test(ce.css('position')))
								cop = self.containerPosition;
							if (cp.left < (o.helper ? co.left : cop.left)) {
								self.size.width = self.size.width
										+ (o.helper ? (self.position.left - co.left)
												: (self.position.left - cop.left));
								if (pRatio)
									self.size.height = self.size.width
											* o.aspectRatio;
								self.position.left = o.helper ? co.left
										: cop.left;
							}
							if (cp.top < (o.helper ? co.top : 0)) {
								self.size.height = self.size.height
										+ (o.helper ? (self.position.top - co.top)
												: self.position.top);
								if (pRatio)
									self.size.width = self.size.height
											/ o.aspectRatio;
								self.position.top = o.helper ? co.top : 0;
							}
							var woset = (o.helper ? self.offset.left - co.left
									: (self.position.left - cop.left))
									+ self.sizeDiff.width, hoset = (o.helper ? self.offset.top
									- co.top
									: self.position.top)
									+ self.sizeDiff.height;
							if (woset + self.size.width >= self.parentData.width) {
								self.size.width = self.parentData.width - woset;
								if (pRatio)
									self.size.height = self.size.width
											* o.aspectRatio;
							}
							if (hoset + self.size.height >= self.parentData.height) {
								self.size.height = self.parentData.height
										- hoset;
								if (pRatio)
									self.size.width = self.size.height
											/ o.aspectRatio;
							}
						},
						stop : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), cp = self.position, co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement;
							var helper = $(self.helper), ho = helper.offset(), w = helper
									.innerWidth(), h = helper.innerHeight();
							if (o.helper && !o.animate
									&& /relative/.test(ce.css('position')))
								$(this).css( {
									left : (ho.left - co.left),
									top : (ho.top - co.top),
									width : w,
									height : h
								});
							if (o.helper && !o.animate
									&& /static/.test(ce.css('position')))
								$(this).css( {
									left : cop.left + (ho.left - co.left),
									top : cop.top + (ho.top - co.top),
									width : w,
									height : h
								});
						}
					});
	$.ui.plugin
			.add(
					"resizable",
					"grid",
					{
						resize : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio
									|| e.shiftKey;
							o.grid = typeof o.grid == "number" ? [ o.grid,
									o.grid ] : o.grid;
							var ox = Math.round((cs.width - os.width)
									/ (o.grid[0] || 1))
									* (o.grid[0] || 1), oy = Math
									.round((cs.height - os.height)
											/ (o.grid[1] || 1))
									* (o.grid[1] || 1);
							if (/^(se|s|e)$/.test(a)) {
								self.size.width = os.width + ox;
								self.size.height = os.height + oy;
							} else if (/^(ne)$/.test(a)) {
								self.size.width = os.width + ox;
								self.size.height = os.height + oy;
								self.position.top = op.top - oy;
							} else if (/^(sw)$/.test(a)) {
								self.size.width = os.width + ox;
								self.size.height = os.height + oy;
								self.position.left = op.left - ox;
							} else {
								self.size.width = os.width + ox;
								self.size.height = os.height + oy;
								self.position.top = op.top - oy;
								self.position.left = op.left - ox;
							}
						}
					});
	$.ui.plugin
			.add(
					"resizable",
					"animate",
					{
						stop : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable");
							var pr = o.proportionallyResize, ista = pr
									&& (/textarea/i).test(pr.get(0).nodeName), soffseth = ista
									&& $.ui.hasScroll(pr.get(0), 'left') ? 0
									: self.sizeDiff.height, soffsetw = ista ? 0
									: self.sizeDiff.width;
							var style = {
								width : (self.size.width - soffsetw),
								height : (self.size.height - soffseth)
							}, left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left))
									|| null, top = (parseInt(self.element
									.css('top'), 10) + (self.position.top - self.originalPosition.top))
									|| null;
							self.element.animate($.extend(style,
									top && left ? {
										top : top,
										left : left
									} : {}), {
								duration : o.animateDuration || "slow",
								easing : o.animateEasing || "swing",
								step : function() {
									var data = {
										width : parseInt(self.element
												.css('width'), 10),
										height : parseInt(self.element
												.css('height'), 10),
										top : parseInt(self.element.css('top'),
												10),
										left : parseInt(self.element
												.css('left'), 10)
									};
									if (pr)
										pr.css( {
											width : data.width,
											height : data.height
										});
									self._updateCache(data);
									self.propagate("animate", e);
								}
							});
						}
					});
	$.ui.plugin
			.add(
					"resizable",
					"ghost",
					{
						start : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), pr = o.proportionallyResize, cs = self.size;
							if (!pr)
								self.ghost = self.element.clone();
							else
								self.ghost = pr.clone();
							self.ghost.css( {
								opacity : .25,
								display : 'block',
								position : 'relative',
								height : cs.height,
								width : cs.width,
								margin : 0,
								left : 0,
								top : 0
							}).addClass('ui-resizable-ghost').addClass(
									typeof o.ghost == 'string' ? o.ghost : '');
							self.ghost.appendTo(self.helper);
						},
						resize : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), pr = o.proportionallyResize;
							if (self.ghost)
								self.ghost.css( {
									position : 'relative',
									height : self.size.height,
									width : self.size.width
								});
						},
						stop : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), pr = o.proportionallyResize;
							if (self.ghost && self.helper)
								self.helper.get(0).removeChild(
										self.ghost.get(0));
						}
					});
	$.ui.plugin
			.add(
					"resizable",
					"alsoResize",
					{
						start : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), _store = function(exp) {
								$(exp)
										.each(
												function() {
													$(this)
															.data(
																	"resizable-alsoresize",
																	{
																		width : parseInt(
																				$(
																						this)
																						.width(),
																				10),
																		height : parseInt(
																				$(
																						this)
																						.height(),
																				10),
																		left : parseInt(
																				$(
																						this)
																						.css(
																								'left'),
																				10),
																		top : parseInt(
																				$(
																						this)
																						.css(
																								'top'),
																				10)
																	});
												});
							};
							if (typeof (o.alsoResize) == 'object') {
								if (o.alsoResize.length) {
									o.alsoResize = o.alsoResize[0];
									_store(o.alsoResize);
								} else {
									$.each(o.alsoResize, function(exp, c) {
										_store(exp);
									});
								}
							} else {
								_store(o.alsoResize);
							}
						},
						resize : function(e, ui) {
							var o = ui.options, self = $(this)
									.data("resizable"), os = self.originalSize, op = self.originalPosition;
							var delta = {
								height : (self.size.height - os.height) || 0,
								width : (self.size.width - os.width) || 0,
								top : (self.position.top - op.top) || 0,
								left : (self.position.left - op.left) || 0
							}, _alsoResize = function(exp, c) {
								$(exp)
										.each(
												function() {
													var start = $(this)
															.data(
																	"resizable-alsoresize"), style = {}, css = c
															&& c.length ? c : [
															'width', 'height',
															'top', 'left' ];
													$
															.each(
																	css
																			|| [
																					'width',
																					'height',
																					'top',
																					'left' ],
																	function(i,
																			prop) {
																		var sum = (start[prop] || 0)
																				+ (delta[prop] || 0);
																		if (sum
																				&& sum >= 0)
																			style[prop] = sum
																					|| null;
																	});
													$(this).css(style);
												});
							};
							if (typeof (o.alsoResize) == 'object') {
								$.each(o.alsoResize, function(exp, c) {
									_alsoResize(exp, c);
								});
							} else {
								_alsoResize(o.alsoResize);
							}
						},
						stop : function(e, ui) {
							$(this).removeData("resizable-alsoresize-start");
						}
					});
})(jQuery);
(function($) {
	$
			.widget(
					"ui.selectable",
					$
							.extend(
									{},
									$.ui.mouse,
									{
										init : function() {
											var self = this;
											this.element
													.addClass("ui-selectable");
											this.dragged = false;
											var selectees;
											this.refresh = function() {
												selectees = $(
														self.options.filter,
														self.element[0]);
												selectees
														.each(function() {
															var $this = $(this);
															var pos = $this
																	.offset();
															$
																	.data(
																			this,
																			"selectable-item",
																			{
																				element : this,
																				$element : $this,
																				left : pos.left,
																				top : pos.top,
																				right : pos.left
																						+ $this
																								.width(),
																				bottom : pos.top
																						+ $this
																								.height(),
																				startselected : false,
																				selected : $this
																						.hasClass('ui-selected'),
																				selecting : $this
																						.hasClass('ui-selecting'),
																				unselecting : $this
																						.hasClass('ui-unselecting')
																			});
														});
											};
											this.refresh();
											this.selectees = selectees
													.addClass("ui-selectee");
											this.mouseInit();
											this.helper = $(
													document
															.createElement('div'))
													.css(
															{
																border : '1px dotted black'
															});
										},
										toggle : function() {
											if (this.options.disabled) {
												this.enable();
											} else {
												this.disable();
											}
										},
										destroy : function() {
											this.element
													.removeClass(
															"ui-selectable ui-selectable-disabled")
													.removeData("selectable")
													.unbind(".selectable");
											this.mouseDestroy();
										},
										mouseStart : function(e) {
											var self = this;
											this.opos = [ e.pageX, e.pageY ];
											if (this.options.disabled)
												return;
											var options = this.options;
											this.selectees = $(options.filter,
													this.element[0]);
											this.element
													.triggerHandler(
															"selectablestart",
															[
																	e,
																	{
																		"selectable" : this.element[0],
																		"options" : options
																	} ],
															options.start);
											$('body').append(this.helper);
											this.helper.css( {
												"z-index" : 100,
												"position" : "absolute",
												"left" : e.clientX,
												"top" : e.clientY,
												"width" : 0,
												"height" : 0
											});
											if (options.autoRefresh) {
												this.refresh();
											}
											this.selectees
													.filter('.ui-selected')
													.each(
															function() {
																var selectee = $
																		.data(
																				this,
																				"selectable-item");
																selectee.startselected = true;
																if (!e.ctrlKey) {
																	selectee.$element
																			.removeClass('ui-selected');
																	selectee.selected = false;
																	selectee.$element
																			.addClass('ui-unselecting');
																	selectee.unselecting = true;
																	self.element
																			.triggerHandler(
																					"selectableunselecting",
																					[
																							e,
																							{
																								selectable : self.element[0],
																								unselecting : selectee.element,
																								options : options
																							} ],
																					options.unselecting);
																}
															});
											var isSelectee = false;
											$(e.target)
													.parents()
													.andSelf()
													.each(
															function() {
																if ($
																		.data(
																				this,
																				"selectable-item"))
																	isSelectee = true;
															});
											return this.options.keyboard ? !isSelectee
													: true;
										},
										mouseDrag : function(e) {
											var self = this;
											this.dragged = true;
											if (this.options.disabled)
												return;
											var options = this.options;
											var x1 = this.opos[0], y1 = this.opos[1], x2 = e.pageX, y2 = e.pageY;
											if (x1 > x2) {
												var tmp = x2;
												x2 = x1;
												x1 = tmp;
											}
											if (y1 > y2) {
												var tmp = y2;
												y2 = y1;
												y1 = tmp;
											}
											this.helper.css( {
												left : x1,
												top : y1,
												width : x2 - x1,
												height : y2 - y1
											});
											this.selectees
													.each(function() {
														var selectee = $
																.data(this,
																		"selectable-item");
														if (!selectee
																|| selectee.element == self.element[0])
															return;
														var hit = false;
														if (options.tolerance == 'touch') {
															hit = (!(selectee.left > x2
																	|| selectee.right < x1
																	|| selectee.top > y2 || selectee.bottom < y1));
														} else if (options.tolerance == 'fit') {
															hit = (selectee.left > x1
																	&& selectee.right < x2
																	&& selectee.top > y1 && selectee.bottom < y2);
														}
														if (hit) {
															if (selectee.selected) {
																selectee.$element
																		.removeClass('ui-selected');
																selectee.selected = false;
															}
															if (selectee.unselecting) {
																selectee.$element
																		.removeClass('ui-unselecting');
																selectee.unselecting = false;
															}
															if (!selectee.selecting) {
																selectee.$element
																		.addClass('ui-selecting');
																selectee.selecting = true;
																self.element
																		.triggerHandler(
																				"selectableselecting",
																				[
																						e,
																						{
																							selectable : self.element[0],
																							selecting : selectee.element,
																							options : options
																						} ],
																				options.selecting);
															}
														} else {
															if (selectee.selecting) {
																if (e.ctrlKey
																		&& selectee.startselected) {
																	selectee.$element
																			.removeClass('ui-selecting');
																	selectee.selecting = false;
																	selectee.$element
																			.addClass('ui-selected');
																	selectee.selected = true;
																} else {
																	selectee.$element
																			.removeClass('ui-selecting');
																	selectee.selecting = false;
																	if (selectee.startselected) {
																		selectee.$element
																				.addClass('ui-unselecting');
																		selectee.unselecting = true;
																	}
																	self.element
																			.triggerHandler(
																					"selectableunselecting",
																					[
																							e,
																							{
																								selectable : self.element[0],
																								unselecting : selectee.element,
																								options : options
																							} ],
																					options.unselecting);
																}
															}
															if (selectee.selected) {
																if (!e.ctrlKey
																		&& !selectee.startselected) {
																	selectee.$element
																			.removeClass('ui-selected');
																	selectee.selected = false;
																	selectee.$element
																			.addClass('ui-unselecting');
																	selectee.unselecting = true;
																	self.element
																			.triggerHandler(
																					"selectableunselecting",
																					[
																							e,
																							{
																								selectable : self.element[0],
																								unselecting : selectee.element,
																								options : options
																							} ],
																					options.unselecting);
																}
															}
														}
													});
											return false;
										},
										mouseStop : function(e) {
											var self = this;
											this.dragged = false;
											var options = this.options;
											$('.ui-unselecting',
													this.element[0])
													.each(
															function() {
																var selectee = $
																		.data(
																				this,
																				"selectable-item");
																selectee.$element
																		.removeClass('ui-unselecting');
																selectee.unselecting = false;
																selectee.startselected = false;
																self.element
																		.triggerHandler(
																				"selectableunselected",
																				[
																						e,
																						{
																							selectable : self.element[0],
																							unselected : selectee.element,
																							options : options
																						} ],
																				options.unselected);
															});
											$('.ui-selecting', this.element[0])
													.each(
															function() {
																var selectee = $
																		.data(
																				this,
																				"selectable-item");
																selectee.$element
																		.removeClass(
																				'ui-selecting')
																		.addClass(
																				'ui-selected');
																selectee.selecting = false;
																selectee.selected = true;
																selectee.startselected = true;
																self.element
																		.triggerHandler(
																				"selectableselected",
																				[
																						e,
																						{
																							selectable : self.element[0],
																							selected : selectee.element,
																							options : options
																						} ],
																				options.selected);
															});
											this.element
													.triggerHandler(
															"selectablestop",
															[
																	e,
																	{
																		selectable : self.element[0],
																		options : this.options
																	} ],
															this.options.stop);
											this.helper.remove();
											return false;
										}
									}));
	$.extend($.ui.selectable, {
		defaults : {
			distance : 1,
			delay : 0,
			cancel : ":input",
			appendTo : 'body',
			autoRefresh : true,
			filter : '*',
			tolerance : 'touch'
		}
	});
})(jQuery);
(function($) {
	function contains(a, b) {
		var safari2 = $.browser.safari && $.browser.version < 522;
		if (a.contains && !safari2) {
			return a.contains(b);
		}
		if (a.compareDocumentPosition)
			return !!(a.compareDocumentPosition(b) & 16);
		while (b = b.parentNode)
			if (b == a)
				return true;
		return false;
	}
	;
	$
			.widget(
					"ui.sortable",
					$
							.extend(
									{},
									$.ui.mouse,
									{
										init : function() {
											var o = this.options;
											this.containerCache = {};
											this.element
													.addClass("ui-sortable");
											this.refresh();
											this.floating = this.items.length ? (/left|right/)
													.test(this.items[0].item
															.css('float'))
													: false;
											if (!(/(relative|absolute|fixed)/)
													.test(this.element
															.css('position')))
												this.element.css('position',
														'relative');
											this.offset = this.element.offset();
											this.mouseInit();
										},
										plugins : {},
										ui : function(inst) {
											return {
												helper : (inst || this)["helper"],
												placeholder : (inst || this)["placeholder"]
														|| $( []),
												position : (inst || this)["position"],
												absolutePosition : (inst || this)["positionAbs"],
												options : this.options,
												element : this.element,
												item : (inst || this)["currentItem"],
												sender : inst ? inst.element
														: null
											};
										},
										propagate : function(n, e, inst,
												noPropagation) {
											$.ui.plugin.call(this, n, [ e,
													this.ui(inst) ]);
											if (!noPropagation)
												this.element.triggerHandler(
														n == "sort" ? n
																: "sort" + n,
														[ e, this.ui(inst) ],
														this.options[n]);
										},
										serialize : function(o) {
											var items = ($
													.isFunction(this.options.items) ? this.options.items
													.call(this.element)
													: $(this.options.items,
															this.element))
													.not('.ui-sortable-helper');
											var str = [];
											o = o || {};
											items
													.each(function() {
														var res = ($(this)
																.attr(
																		o.attribute || 'id') || '')
																.match(o.expression || (/(.+)[-=_](.+)/));
														if (res)
															str
																	.push((o.key || res[1])
																			+ '[]='
																			+ (o.key
																					&& o.expression ? res[1]
																					: res[2]));
													});
											return str.join('&');
										},
										toArray : function(attr) {
											var items = ($
													.isFunction(this.options.items) ? this.options.items
													.call(this.element)
													: $(this.options.items,
															this.element))
													.not('.ui-sortable-helper');
											var ret = [];
											items.each(function() {
												ret.push($(this).attr(
														attr || 'id'));
											});
											return ret;
										},
										intersectsWith : function(item) {
											var x1 = this.positionAbs.left, x2 = x1
													+ this.helperProportions.width, y1 = this.positionAbs.top, y2 = y1
													+ this.helperProportions.height;
											var l = item.left, r = l
													+ item.width, t = item.top, b = t
													+ item.height;
											if (this.options.tolerance == "pointer"
													|| this.options.forcePointerForContainers
													|| (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width'
															: 'height'] > item[this.floating ? 'width'
															: 'height'])) {
												return (y1
														+ this.offset.click.top > t
														&& y1
																+ this.offset.click.top < b
														&& x1
																+ this.offset.click.left > l && x1
														+ this.offset.click.left < r);
											} else {
												return (l < x1
														+ (this.helperProportions.width / 2)
														&& x2
																- (this.helperProportions.width / 2) < r
														&& t < y1
																+ (this.helperProportions.height / 2) && y2
														- (this.helperProportions.height / 2) < b);
											}
										},
										intersectsWithEdge : function(item) {
											var x1 = this.positionAbs.left, x2 = x1
													+ this.helperProportions.width, y1 = this.positionAbs.top, y2 = y1
													+ this.helperProportions.height;
											var l = item.left, r = l
													+ item.width, t = item.top, b = t
													+ item.height;
											if (this.options.tolerance == "pointer"
													|| (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width'
															: 'height'] > item[this.floating ? 'width'
															: 'height'])) {
												if (!(y1
														+ this.offset.click.top > t
														&& y1
																+ this.offset.click.top < b
														&& x1
																+ this.offset.click.left > l && x1
														+ this.offset.click.left < r))
													return false;
												if (this.floating) {
													if (x1
															+ this.offset.click.left > l
															&& x1
																	+ this.offset.click.left < l
																	+ item.width
																	/ 2)
														return 2;
													if (x1
															+ this.offset.click.left > l
															+ item.width / 2
															&& x1
																	+ this.offset.click.left < r)
														return 1;
												} else {
													if (y1
															+ this.offset.click.top > t
															&& y1
																	+ this.offset.click.top < t
																	+ item.height
																	/ 2)
														return 2;
													if (y1
															+ this.offset.click.top > t
															+ item.height / 2
															&& y1
																	+ this.offset.click.top < b)
														return 1;
												}
											} else {
												if (!(l < x1
														+ (this.helperProportions.width / 2)
														&& x2
																- (this.helperProportions.width / 2) < r
														&& t < y1
																+ (this.helperProportions.height / 2) && y2
														- (this.helperProportions.height / 2) < b))
													return false;
												if (this.floating) {
													if (x2 > l && x1 < l)
														return 2;
													if (x1 < r && x2 > r)
														return 1;
												} else {
													if (y2 > t && y1 < t)
														return 1;
													if (y1 < b && y2 > b)
														return 2;
												}
											}
											return false;
										},
										refresh : function() {
											this.refreshItems();
											this.refreshPositions();
										},
										refreshItems : function() {
											this.items = [];
											this.containers = [ this ];
											var items = this.items;
											var self = this;
											var queries = [ [
													$
															.isFunction(this.options.items) ? this.options.items
															.call(
																	this.element,
																	null,
																	{
																		options : this.options,
																		item : this.currentItem
																	})
															: $(
																	this.options.items,
																	this.element),
													this ] ];
											if (this.options.connectWith) {
												for ( var i = this.options.connectWith.length - 1; i >= 0; i--) {
													var cur = $(this.options.connectWith[i]);
													for ( var j = cur.length - 1; j >= 0; j--) {
														var inst = $.data(
																cur[j],
																'sortable');
														if (inst
																&& !inst.options.disabled) {
															queries
																	.push( [
																			$
																					.isFunction(inst.options.items) ? inst.options.items
																					.call(inst.element)
																					: $(
																							inst.options.items,
																							inst.element),
																			inst ]);
															this.containers
																	.push(inst);
														}
													}
													;
												}
												;
											}
											for ( var i = queries.length - 1; i >= 0; i--) {
												queries[i][0]
														.each(function() {
															$
																	.data(
																			this,
																			'sortable-item',
																			queries[i][1]);
															items
																	.push( {
																		item : $(this),
																		instance : queries[i][1],
																		width : 0,
																		height : 0,
																		left : 0,
																		top : 0
																	});
														});
											}
											;
										},
										refreshPositions : function(fast) {
											if (this.offsetParent) {
												var po = this.offsetParent
														.offset();
												this.offset.parent = {
													top : po.top
															+ this.offsetParentBorders.top,
													left : po.left
															+ this.offsetParentBorders.left
												};
											}
											for ( var i = this.items.length - 1; i >= 0; i--) {
												if (this.items[i].instance != this.currentContainer
														&& this.currentContainer
														&& this.items[i].item[0] != this.currentItem[0])
													continue;
												var t = this.options.toleranceElement ? $(
														this.options.toleranceElement,
														this.items[i].item)
														: this.items[i].item;
												if (!fast) {
													this.items[i].width = t[0].offsetWidth;
													this.items[i].height = t[0].offsetHeight;
												}
												var p = t.offset();
												this.items[i].left = p.left;
												this.items[i].top = p.top;
											}
											;
											if (this.options.custom
													&& this.options.custom.refreshContainers) {
												this.options.custom.refreshContainers
														.call(this);
											} else {
												for ( var i = this.containers.length - 1; i >= 0; i--) {
													var p = this.containers[i].element
															.offset();
													this.containers[i].containerCache.left = p.left;
													this.containers[i].containerCache.top = p.top;
													this.containers[i].containerCache.width = this.containers[i].element
															.outerWidth();
													this.containers[i].containerCache.height = this.containers[i].element
															.outerHeight();
												}
												;
											}
										},
										destroy : function() {
											this.element
													.removeClass(
															"ui-sortable ui-sortable-disabled")
													.removeData("sortable")
													.unbind(".sortable");
											this.mouseDestroy();
											for ( var i = this.items.length - 1; i >= 0; i--)
												this.items[i].item
														.removeData("sortable-item");
										},
										createPlaceholder : function(that) {
											var self = that || this, o = self.options;
											if (o.placeholder.constructor == String) {
												var className = o.placeholder;
												o.placeholder = {
													element : function() {
														return $('<div></div>')
																.addClass(
																		className)[0];
													},
													update : function(i, p) {
														p
																.css(i.offset())
																.css(
																		{
																			width : i
																					.outerWidth(),
																			height : i
																					.outerHeight()
																		});
													}
												};
											}
											self.placeholder = $(
													o.placeholder.element.call(
															self.element,
															self.currentItem))
													.appendTo('body').css( {
														position : 'absolute'
													});
											o.placeholder.update.call(
													self.element,
													self.currentItem,
													self.placeholder);
										},
										contactContainers : function(e) {
											for ( var i = this.containers.length - 1; i >= 0; i--) {
												if (this
														.intersectsWith(this.containers[i].containerCache)) {
													if (!this.containers[i].containerCache.over) {
														if (this.currentContainer != this.containers[i]) {
															var dist = 10000;
															var itemWithLeastDistance = null;
															var base = this.positionAbs[this.containers[i].floating ? 'left'
																	: 'top'];
															for ( var j = this.items.length - 1; j >= 0; j--) {
																if (!contains(
																		this.containers[i].element[0],
																		this.items[j].item[0]))
																	continue;
																var cur = this.items[j][this.containers[i].floating ? 'left'
																		: 'top'];
																if (Math
																		.abs(cur
																				- base) < dist) {
																	dist = Math
																			.abs(cur
																					- base);
																	itemWithLeastDistance = this.items[j];
																}
															}
															if (!itemWithLeastDistance
																	&& !this.options.dropOnEmpty)
																continue;
															if (this.placeholder)
																this.placeholder
																		.remove();
															if (this.containers[i].options.placeholder) {
																this.containers[i]
																		.createPlaceholder(this);
															} else {
																this.placeholder = null;
																;
															}
															this.currentContainer = this.containers[i];
															itemWithLeastDistance ? this
																	.rearrange(
																			e,
																			itemWithLeastDistance,
																			null,
																			true)
																	: this
																			.rearrange(
																					e,
																					null,
																					this.containers[i].element,
																					true);
															this
																	.propagate(
																			"change",
																			e);
															this.containers[i]
																	.propagate(
																			"change",
																			e,
																			this);
														}
														this.containers[i]
																.propagate(
																		"over",
																		e, this);
														this.containers[i].containerCache.over = 1;
													}
												} else {
													if (this.containers[i].containerCache.over) {
														this.containers[i]
																.propagate(
																		"out",
																		e, this);
														this.containers[i].containerCache.over = 0;
													}
												}
											}
											;
										},
										mouseCapture : function(e,
												overrideHandle) {
											if (this.options.disabled
													|| this.options.type == 'static')
												return false;
											this.refreshItems();
											var currentItem = null, self = this, nodes = $(
													e.target)
													.parents()
													.each(
															function() {
																if ($
																		.data(
																				this,
																				'sortable-item') == self) {
																	currentItem = $(this);
																	return false;
																}
															});
											if ($.data(e.target,
													'sortable-item') == self)
												currentItem = $(e.target);
											if (!currentItem)
												return false;
											if (this.options.handle
													&& !overrideHandle) {
												var validHandle = false;
												$(this.options.handle,
														currentItem)
														.find("*")
														.andSelf()
														.each(
																function() {
																	if (this == e.target)
																		validHandle = true;
																});
												if (!validHandle)
													return false;
											}
											this.currentItem = currentItem;
											return true;
										},
										mouseStart : function(e,
												overrideHandle, noActivation) {
											var o = this.options;
											this.currentContainer = this;
											this.refreshPositions();
											this.helper = typeof o.helper == 'function' ? $(o.helper
													.apply(
															this.element[0],
															[
																	e,
																	this.currentItem ]))
													: this.currentItem.clone();
											if (!this.helper.parents('body').length)
												$(o.appendTo != 'parent' ? o.appendTo
														: this.currentItem[0].parentNode)[0]
														.appendChild(this.helper[0]);
											this.helper.css( {
												position : 'absolute',
												clear : 'both'
											}).addClass('ui-sortable-helper');
											this.margins = {
												left : (parseInt(
														this.currentItem
																.css("marginLeft"),
														10) || 0),
												top : (parseInt(
														this.currentItem
																.css("marginTop"),
														10) || 0)
											};
											this.offset = this.currentItem
													.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.offsetParent = this.helper
													.offsetParent();
											var po = this.offsetParent.offset();
											this.offsetParentBorders = {
												top : (parseInt(
														this.offsetParent
																.css("borderTopWidth"),
														10) || 0),
												left : (parseInt(
														this.offsetParent
																.css("borderLeftWidth"),
														10) || 0)
											};
											this.offset.parent = {
												top : po.top
														+ this.offsetParentBorders.top,
												left : po.left
														+ this.offsetParentBorders.left
											};
											this.originalPosition = this
													.generatePosition(e);
											this.domPosition = {
												prev : this.currentItem.prev()[0],
												parent : this.currentItem
														.parent()[0]
											};
											this.helperProportions = {
												width : this.helper
														.outerWidth(),
												height : this.helper
														.outerHeight()
											};
											if (o.placeholder)
												this.createPlaceholder();
											this.propagate("start", 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;
												if (o.cursorAt.right != undefined)
													this.offset.click.left = this.helperProportions.width
															- o.cursorAt.right;
												if (o.cursorAt.top != undefined)
													this.offset.click.top = o.cursorAt.top;
												if (o.cursorAt.bottom != undefined)
													this.offset.click.top = this.helperProportions.height
															- o.cursorAt.bottom;
											}
											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.parent.left,
															0 - this.offset.parent.top,
															$(
																	o.containment == 'document' ? document
																			: window)
																	.width()
																	- 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.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.parent.left,
															co.top
																	+ (parseInt(
																			$(
																					ce)
																					.css(
																							"borderTopWidth"),
																			10) || 0)
																	- this.offset.parent.top,
															co.left
																	+ Math
																			.max(
																					ce.scrollWidth,
																					ce.offsetWidth)
																	- (parseInt(
																			$(
																					ce)
																					.css(
																							"borderLeftWidth"),
																			10) || 0)
																	- this.offset.parent.left
																	- this.helperProportions.width
																	- this.margins.left
																	- (parseInt(
																			this.currentItem
																					.css("marginRight"),
																			10) || 0),
															co.top
																	+ Math
																			.max(
																					ce.scrollHeight,
																					ce.offsetHeight)
																	- (parseInt(
																			$(
																					ce)
																					.css(
																							"borderTopWidth"),
																			10) || 0)
																	- this.offset.parent.top
																	- this.helperProportions.height
																	- this.margins.top
																	- (parseInt(
																			this.currentItem
																					.css("marginBottom"),
																			10) || 0) ];
												}
											}
											if (this.options.placeholder != 'clone')
												this.currentItem.css(
														'visibility', 'hidden');
											if (!noActivation) {
												for ( var i = this.containers.length - 1; i >= 0; i--) {
													this.containers[i]
															.propagate(
																	"activate",
																	e, this);
												}
											}
											if ($.ui.ddmanager)
												$.ui.ddmanager.current = this;
											if ($.ui.ddmanager
													&& !o.dropBehaviour)
												$.ui.ddmanager.prepareOffsets(
														this, e);
											this.dragging = true;
											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.parent.top
														* mod
														- (this.offsetParent[0] == document.body ? 0
																: this.offsetParent[0].scrollTop)
														* mod + this.margins.top
														* mod),
												left : (pos.left
														+ this.offset.parent.left
														* mod
														- (this.offsetParent[0] == document.body ? 0
																: this.offsetParent[0].scrollLeft)
														* mod + this.margins.left
														* mod)
											};
										},
										generatePosition : function(e) {
											var o = this.options;
											var position = {
												top : (e.pageY
														- this.offset.click.top
														- this.offset.parent.top + (this.offsetParent[0] == document.body ? 0
														: this.offsetParent[0].scrollTop)),
												left : (e.pageX
														- this.offset.click.left
														- this.offset.parent.left + (this.offsetParent[0] == document.body ? 0
														: this.offsetParent[0].scrollLeft))
											};
											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");
											$.ui.plugin.call(this, "sort", [ e,
													this.ui() ]);
											this.positionAbs = this
													.convertPositionTo("absolute");
											this.helper[0].style.left = this.position.left + 'px';
											this.helper[0].style.top = this.position.top + 'px';
											for ( var i = this.items.length - 1; i >= 0; i--) {
												var intersection = this
														.intersectsWithEdge(this.items[i]);
												if (!intersection)
													continue;
												if (this.items[i].item[0] != this.currentItem[0]
														&& this.currentItem[intersection == 1 ? "next"
																: "prev"]()[0] != this.items[i].item[0]
														&& !contains(
																this.currentItem[0],
																this.items[i].item[0])
														&& (this.options.type == 'semi-dynamic' ? !contains(
																this.element[0],
																this.items[i].item[0])
																: true)) {
													this.direction = intersection == 1 ? "down"
															: "up";
													this.rearrange(e,
															this.items[i]);
													this.propagate("change", e);
													break;
												}
											}
											this.contactContainers(e);
											if ($.ui.ddmanager)
												$.ui.ddmanager.drag(this, e);
											this.element.triggerHandler("sort",
													[ e, this.ui() ],
													this.options["sort"]);
											return false;
										},
										rearrange : function(e, i, a,
												hardRefresh) {
											a ? a[0]
													.appendChild(this.currentItem[0])
													: i.item[0].parentNode
															.insertBefore(
																	this.currentItem[0],
																	(this.direction == 'down' ? i.item[0]
																			: i.item[0].nextSibling));
											this.counter = this.counter ? ++this.counter
													: 1;
											var self = this, counter = this.counter;
											window
													.setTimeout(
															function() {
																if (counter == self.counter)
																	self
																			.refreshPositions(!hardRefresh);
															}, 0);
											if (this.options.placeholder)
												this.options.placeholder.update
														.call(
																this.element,
																this.currentItem,
																this.placeholder);
										},
										mouseStop : function(e, noPropagation) {
											if ($.ui.ddmanager
													&& !this.options.dropBehaviour)
												$.ui.ddmanager.drop(this, e);
											if (this.options.revert) {
												var self = this;
												var cur = self.currentItem
														.offset();
												if (self.placeholder)
													self.placeholder
															.animate(
																	{
																		opacity : 'hide'
																	},
																	(parseInt(
																			this.options.revert,
																			10) || 500) - 50);
												$(this.helper)
														.animate(
																{
																	left : cur.left
																			- this.offset.parent.left
																			- self.margins.left
																			+ (this.offsetParent[0] == document.body ? 0
																					: this.offsetParent[0].scrollLeft),
																	top : cur.top
																			- this.offset.parent.top
																			- self.margins.top
																			+ (this.offsetParent[0] == document.body ? 0
																					: this.offsetParent[0].scrollTop)
																},
																parseInt(
																		this.options.revert,
																		10) || 500,
																function() {
																	self
																			.clear(e);
																});
											} else {
												this.clear(e, noPropagation);
											}
											return false;
										},
										clear : function(e, noPropagation) {
											if (this.domPosition.prev != this.currentItem
													.prev()
													.not(".ui-sortable-helper")[0]
													|| this.domPosition.parent != this.currentItem
															.parent()[0])
												this.propagate("update", e,
														null, noPropagation);
											if (!contains(this.element[0],
													this.currentItem[0])) {
												this.propagate("remove", e,
														null, noPropagation);
												for ( var i = this.containers.length - 1; i >= 0; i--) {
													if (contains(
															this.containers[i].element[0],
															this.currentItem[0])) {
														this.containers[i]
																.propagate(
																		"update",
																		e,
																		this,
																		noPropagation);
														this.containers[i]
																.propagate(
																		"receive",
																		e,
																		this,
																		noPropagation);
													}
												}
												;
											}
											;
											for ( var i = this.containers.length - 1; i >= 0; i--) {
												this.containers[i].propagate(
														"deactivate", e, this,
														noPropagation);
												if (this.containers[i].containerCache.over) {
													this.containers[i]
															.propagate("out",
																	e, this);
													this.containers[i].containerCache.over = 0;
												}
											}
											this.dragging = false;
											if (this.cancelHelperRemoval) {
												this.propagate("stop", e, null,
														noPropagation);
												return false;
											}
											$(this.currentItem).css(
													'visibility', '');
											if (this.placeholder)
												this.placeholder.remove();
											this.helper.remove();
											this.helper = null;
											this.propagate("stop", e, null,
													noPropagation);
											return true;
										}
									}));
	$.extend($.ui.sortable, {
		getter : "serialize toArray",
		defaults : {
			helper : "clone",
			tolerance : "guess",
			distance : 1,
			delay : 0,
			scroll : true,
			scrollSensitivity : 20,
			scrollSpeed : 20,
			cancel : ":input",
			items : '> *',
			zIndex : 1000,
			dropOnEmpty : true,
			appendTo : "parent"
		}
	});
	$.ui.plugin.add("sortable", "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("sortable", "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("sortable", "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(
					"sortable",
					"scroll",
					{
						start : function(e, ui) {
							var o = ui.options;
							var i = $(this).data("sortable");
							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);
							}(i.currentItem);
							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);
							}(i.currentItem);
							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();
						},
						sort : function(e, ui) {
							var o = ui.options;
							var i = $(this).data("sortable");
							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 = i.overflowY[0].scrollTop
											+ o.scrollSpeed;
								if (e.pageY - i.overflowYOffset.top < o.scrollSensitivity)
									i.overflowY[0].scrollTop = i.overflowY[0].scrollTop
											- o.scrollSpeed;
							} else {
								if (e.pageY - $(document).scrollTop() < o.scrollSensitivity)
									$(document).scrollTop(
											$(document).scrollTop()
													- o.scrollSpeed);
								if ($(window).height()
										- (e.pageY - $(document).scrollTop()) < o.scrollSensitivity)
									$(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 = i.overflowX[0].scrollLeft
											+ o.scrollSpeed;
								if (e.pageX - i.overflowXOffset.left < o.scrollSensitivity)
									i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft
											- o.scrollSpeed;
							} else {
								if (e.pageX - $(document).scrollLeft() < o.scrollSensitivity)
									$(document).scrollLeft(
											$(document).scrollLeft()
													- o.scrollSpeed);
								if ($(window).width()
										- (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
									$(document).scrollLeft(
											$(document).scrollLeft()
													+ o.scrollSpeed);
							}
						}
					});
	$.ui.plugin.add("sortable", "axis", {
		sort : function(e, ui) {
			var i = $(this).data("sortable");
			if (ui.options.axis == "y")
				i.position.left = i.originalPosition.left;
			if (ui.options.axis == "x")
				i.position.top = i.originalPosition.top;
		}
	});
})(jQuery);
(function($) {
	$
			.widget(
					"ui.accordion",
					{
						init : function() {
							var options = this.options;
							if (options.navigation) {
								var current = this.element.find("a").filter(
										options.navigationFilter);
								if (current.length) {
									if (current.filter(options.header).length) {
										options.active = current;
									} else {
										options.active = current.parent()
												.parent().prev();
										current.addClass("current");
									}
								}
							}
							options.headers = this.element.find(options.header);
							options.active = findActive(options.headers,
									options.active);
							if ($.browser.msie) {
								this.element.find('a').css('zoom', '1');
							}
							if (!this.element.hasClass("ui-accordion")) {
								this.element.addClass("ui-accordion");
								$("<span class='ui-accordion-left'/>")
										.insertBefore(options.headers);
								$("<span class='ui-accordion-right'/>")
										.appendTo(options.headers);
								options.headers.addClass("ui-accordion-header")
										.attr("tabindex", "0");
							}
							var maxHeight;
							if (options.fillSpace) {
								maxHeight = this.element.parent().height();
								options.headers.each(function() {
									maxHeight -= $(this).outerHeight();
								});
								var maxPadding = 0;
								options.headers
										.next()
										.each(
												function() {
													maxPadding = Math
															.max(
																	maxPadding,
																	$(this)
																			.innerHeight()
																			- $(
																					this)
																					.height());
												}).height(
												maxHeight - maxPadding);
							} else if (options.autoHeight) {
								maxHeight = 0;
								options.headers.next().each(
										function() {
											maxHeight = Math.max(maxHeight, $(
													this).outerHeight());
										}).height(maxHeight);
							}
							options.headers.not(options.active || "").next()
									.hide();
							options.active.parent().andSelf().addClass(
									options.selectedClass);
							if (options.event) {
								this.element.bind((options.event)
										+ ".accordion", clickHandler);
							}
						},
						activate : function(index) {
							clickHandler.call(this.element[0],
									{
										target : findActive(
												this.options.headers, index)[0]
									});
						},
						destroy : function() {
							this.options.headers.next().css("display", "");
							if (this.options.fillSpace
									|| this.options.autoHeight) {
								this.options.headers.next().css("height", "");
							}
							$.removeData(this.element[0], "accordion");
							this.element.removeClass("ui-accordion").unbind(
									".accordion");
						}
					});
	function scopeCallback(callback, scope) {
		return function() {
			return callback.apply(scope, arguments);
		};
	}
	;
	function completed(cancel) {
		if (!$.data(this, "accordion")) {
			return;
		}
		var instance = $.data(this, "accordion");
		var options = instance.options;
		options.running = cancel ? 0 : --options.running;
		if (options.running) {
			return;
		}
		if (options.clearStyle) {
			options.toShow.add(options.toHide).css( {
				height : "",
				overflow : ""
			});
		}
		$(this).triggerHandler("accordionchange", [ $.event.fix( {
			type : 'accordionchange',
			target : instance.element[0]
		}), options.data ], options.change);
	}
	function toggle(toShow, toHide, data, clickedActive, down) {
		var options = $.data(this, "accordion").options;
		options.toShow = toShow;
		options.toHide = toHide;
		options.data = data;
		var complete = scopeCallback(completed, this);
		options.running = toHide.size() === 0 ? toShow.size() : toHide.size();
		if (options.animated) {
			if (!options.alwaysOpen && clickedActive) {
				$.ui.accordion.animations[options.animated]( {
					toShow : jQuery( []),
					toHide : toHide,
					complete : complete,
					down : down,
					autoHeight : options.autoHeight
				});
			} else {
				$.ui.accordion.animations[options.animated]( {
					toShow : toShow,
					toHide : toHide,
					complete : complete,
					down : down,
					autoHeight : options.autoHeight
				});
			}
		} else {
			if (!options.alwaysOpen && clickedActive) {
				toShow.toggle();
			} else {
				toHide.hide();
				toShow.show();
			}
			complete(true);
		}
	}
	function clickHandler(event) {
		var options = $.data(this, "accordion").options;
		if (options.disabled) {
			return false;
		}
		if (!event.target && !options.alwaysOpen) {
			options.active.parent().andSelf()
					.toggleClass(options.selectedClass);
			var toHide = options.active.next(), data = {
				options : options,
				newHeader : jQuery( []),
				oldHeader : options.active,
				newContent : jQuery( []),
				oldContent : toHide
			}, toShow = (options.active = $( []));
			toggle.call(this, toShow, toHide, data);
			return false;
		}
		var clicked = $(event.target);
		clicked = $(clicked.parents(options.header)[0] || clicked);
		var clickedActive = clicked[0] == options.active[0];
		if (options.running || (options.alwaysOpen && clickedActive)) {
			return false;
		}
		if (!clicked.is(options.header)) {
			return;
		}
		options.active.parent().andSelf().toggleClass(options.selectedClass);
		if (!clickedActive) {
			clicked.parent().andSelf().addClass(options.selectedClass);
		}
		var toShow = clicked.next(), toHide = options.active.next(), data = {
			options : options,
			newHeader : clicked,
			oldHeader : options.active,
			newContent : toShow,
			oldContent : toHide
		}, down = options.headers.index(options.active[0]) > options.headers
				.index(clicked[0]);
		options.active = clickedActive ? $( []) : clicked;
		toggle.call(this, toShow, toHide, data, clickedActive, down);
		return false;
	}
	;
	function findActive(headers, selector) {
		return selector != undefined ? typeof selector == "number" ? headers
				.filter(":eq(" + selector + ")") : headers.not(headers
				.not(selector)) : selector === false ? $( []) : headers
				.filter(":eq(0)");
	}
	$
			.extend(
					$.ui.accordion,
					{
						defaults : {
							selectedClass : "selected",
							alwaysOpen : true,
							animated : 'slide',
							event : "click",
							header : "a",
							autoHeight : true,
							running : 0,
							navigationFilter : function() {
								return this.href.toLowerCase() == location.href
										.toLowerCase();
							}
						},
						animations : {
							slide : function(options, additions) {
								options = $.extend( {
									easing : "swing",
									duration : 300
								}, options, additions);
								if (!options.toHide.size()) {
									options.toShow.animate( {
										height : "show"
									}, options);
									return;
								}
								var hideHeight = options.toHide.height(), showHeight = options.toShow
										.height(), difference = showHeight
										/ hideHeight;
								options.toShow.css( {
									height : 0,
									overflow : 'hidden'
								}).show();
								options.toHide
										.filter(":hidden")
										.each(options.complete)
										.end()
										.filter(":visible")
										.animate(
												{
													height : "hide"
												},
												{
													step : function(now) {
														var current = (hideHeight - now)
																* difference;
														if ($.browser.msie
																|| $.browser.opera) {
															current = Math
																	.ceil(current);
														}
														options.toShow
																.height(current);
													},
													duration : options.duration,
													easing : options.easing,
													complete : function() {
														if (!options.autoHeight) {
															options.toShow.css(
																	"height",
																	"auto");
														}
														options.complete();
													}
												});
							},
							bounceslide : function(options) {
								this.slide(options, {
									easing : options.down ? "bounceout"
											: "swing",
									duration : options.down ? 1000 : 200
								});
							},
							easeslide : function(options) {
								this.slide(options, {
									easing : "easeinout",
									duration : 700
								});
							}
						}
					});
	$.fn.activate = function(index) {
		return this.accordion("activate", index);
	};
})(jQuery);
(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() {
							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
									|| uiDialogContent.attr('title') || '', uiDialogTitlebar = (this.uiDialogTitlebar = $('<div class="ui-dialog-titlebar"/>'))
									.append(
											'<span class="ui-dialog-title">' + title + '</span>')
									.append(
											'<a href="#" class="ui-dialog-titlebar-close"><span>X</span></a>')
									.prependTo(uiDialogContainer), uiDialog = (this.uiDialog = uiDialogContainer
									.parent())
									.appendTo(document.body)
									.hide()
									.addClass('ui-dialog')
									.addClass(options.dialogClass)
									.addClass(uiDialogContent.attr('className'))
									.removeClass('ui-dialog-content')
									.css( {
										position : 'absolute',
										width : options.width,
										height : options.height,
										overflow : 'hidden',
										zIndex : options.zIndex
									})
									.attr('tabIndex', -1)
									.css('outline', 0)
									.keydown(
											function(ev) {
												if (options.closeOnEscape) {
													var ESC = 27;
													(ev.keyCode
															&& ev.keyCode == ESC && self
															.close());
												}
											}).mousedown(function() {
										self.moveToTop();
									}), 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();
										return false;
									});
							this.uiDialogTitlebar.find("*").add(
									this.uiDialogTitlebar).each(function() {
								$.ui.disableSelection(this);
							});
							if ($.fn.draggable) {
								uiDialog.draggable( {
									cancel : '.ui-dialog-content',
									helper : options.dragHelper,
									handle : '.ui-dialog-titlebar',
									start : function(e, ui) {
										self.moveToTop();
										(options.dragStart && options.dragStart
												.apply(self.element[0],
														arguments));
									},
									drag : function(e, ui) {
										(options.drag && options.drag.apply(
												self.element[0], arguments));
									},
									stop : function(e, ui) {
										(options.dragStop && options.dragStop
												.apply(self.element[0],
														arguments));
										$.ui.dialog.overlay.resize();
									}
								});
								(options.draggable || uiDialog
										.draggable('disable'));
							}
							if ($.fn.resizable) {
								uiDialog
										.resizable( {
											cancel : '.ui-dialog-content',
											helper : options.resizeHelper,
											maxWidth : options.maxWidth,
											maxHeight : options.maxHeight,
											minWidth : options.minWidth,
											minHeight : options.minHeight,
											start : function() {
												(options.resizeStart && options.resizeStart
														.apply(self.element[0],
																arguments));
											},
											resize : function(e, ui) {
												(options.autoResize && self.size
														.apply(self));
												(options.resize && options.resize
														.apply(self.element[0],
																arguments));
											},
											handles : resizeHandles,
											stop : function(e, ui) {
												(options.autoResize && self.size
														.apply(self));
												(options.resizeStop && options.resizeStop
														.apply(self.element[0],
																arguments));
												$.ui.dialog.overlay.resize();
											}
										});
								(options.resizable || uiDialog
										.resizable('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.uiDialog.data(
									setDataSwitch[key], value));
							switch (key) {
							case "buttons":
								this.createButtons(value);
								break;
							case "draggable":
								this.uiDialog.draggable(value ? 'enable'
										: 'disable');
								break;
							case "height":
								this.uiDialog.height(value);
								break;
							case "position":
								this.position(value);
								break;
							case "resizable":
								(typeof value == 'string' && this.uiDialog
										.data('handles.resizable', value));
								this.uiDialog.resizable(value ? 'enable'
										: 'disable');
								break;
							case "title":
								$(".ui-dialog-title", this.uiDialogTitlebar)
										.text(value);
								break;
							case "width":
								this.uiDialog.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.uiDialog.width();
									break;
								default:
								case 'center':
									pLeft += (wnd.width() - this.uiDialog
											.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.uiDialog.height();
									break;
								default:
								case 'middle':
									pTop += (wnd.height() - this.uiDialog
											.height()) / 2;
								}
							}
							pTop = Math.max(pTop, minTop);
							this.uiDialog.css( {
								top : pTop,
								left : pLeft
							});
						},
						size : function() {
							var container = this.uiDialogContainer, titlebar = this.uiDialogTitlebar, content = this.element, tbMargin = parseInt(
									content.css('margin-top'), 10)
									+ parseInt(content.css('margin-bottom'), 10), lrMargin = parseInt(
									content.css('margin-left'), 10)
									+ parseInt(content.css('margin-right'), 10);
							content.height(container.height()
									- titlebar.outerHeight() - tbMargin);
							content.width(container.width() - lrMargin);
						},
						open : function() {
							if (this.isOpen) {
								return;
							}
							this.overlay = this.options.modal ? new $.ui.dialog.overlay(
									this)
									: null;
							(this.uiDialog.next().length > 0)
									&& this.uiDialog.appendTo('body');
							this.position(this.options.position);
							this.uiDialog.show(this.options.show);
							this.options.autoResize && this.size();
							this.moveToTop(true);
							var openEV = null;
							var openUI = {
								options : this.options
							};
							this.uiDialogTitlebarClose.focus();
							this.element.triggerHandler("dialogopen", [ openEV,
									openUI ], this.options.open);
							this.isOpen = true;
						},
						moveToTop : function(force) {
							if ((this.options.modal && !force)
									|| (!this.options.stack && !this.options.modal)) {
								return this.element.triggerHandler(
										"dialogfocus", [ null, {
											options : this.options
										} ], this.options.focus);
							}
							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.uiDialog.css('z-index', ++maxZ);
							this.element.triggerHandler("dialogfocus", [ null,
									{
										options : this.options
									} ], this.options.focus);
						},
						close : function() {
							(this.overlay && this.overlay.destroy());
							this.uiDialog.hide(this.options.hide);
							var closeEV = null;
							var closeUI = {
								options : this.options
							};
							this.element.triggerHandler("dialogclose", [
									closeEV, closeUI ], this.options.close);
							$.ui.dialog.overlay.resize();
							this.isOpen = false;
						},
						destroy : function() {
							(this.overlay && this.overlay.destroy());
							this.uiDialog.hide();
							this.element.unbind('.dialog').removeData('dialog')
									.removeClass('ui-dialog-content').hide()
									.appendTo('body');
							this.uiDialog.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);
								});
							}
						}
					});
	$.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
		},
		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 {
								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 {
								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);
(function($) {
	$.fn.unwrap = $.fn.unwrap || function(expr) {
		return this.each(function() {
			$(this).parents(expr).eq(0).after(this).remove();
		});
	};
	$
			.widget(
					"ui.slider",
					{
						plugins : {},
						ui : function(e) {
							return {
								options : this.options,
								handle : this.currentHandle,
								value : this.options.axis != "both"
										|| !this.options.axis ? Math
										.round(this
												.value(
														null,
														this.options.axis == "vertical" ? "y"
																: "x"))
										: {
											x : Math.round(this
													.value(null, "x")),
											y : Math.round(this
													.value(null, "y"))
										},
								range : this.getRange()
							};
						},
						propagate : function(n, e) {
							$.ui.plugin.call(this, n, [ e, this.ui() ]);
							this.element.triggerHandler(n == "slide" ? n
									: "slide" + n, [ e, this.ui() ],
									this.options[n]);
						},
						destroy : function() {
							this.element.removeClass(
									"ui-slider ui-slider-disabled").removeData(
									"slider").unbind(".slider");
							if (this.handle && this.handle.length) {
								this.handle.unwrap("a");
								this.handle.each(function() {
									$(this).data("mouse").mouseDestroy();
								});
							}
							this.generated && this.generated.remove();
						},
						setData : function(key, value) {
							$.widget.prototype.setData.apply(this, arguments);
							if (/min|max|steps/.test(key)) {
								this.initBoundaries();
							}
							if (key == "range") {
								value ? this.handle.length == 2
										&& this.createRange() : this
										.removeRange();
							}
						},
						init : function() {
							var self = this;
							this.element.addClass("ui-slider");
							this.initBoundaries();
							this.handle = $(this.options.handle, this.element);
							if (!this.handle.length) {
								self.handle = self.generated = $(
										self.options.handles || [ 0 ]).map(
										function() {
											var handle = $("<div/>").addClass(
													"ui-slider-handle")
													.appendTo(self.element);
											if (this.id)
												handle.attr("id", this.id);
											return handle[0];
										});
							}
							var handleclass = function(el) {
								this.element = $(el);
								this.element.data("mouse", this);
								this.options = self.options;
								this.element.bind("mousedown", function() {
									if (self.currentHandle)
										this.blur(self.currentHandle);
									self.focus(this, 1);
								});
								this.mouseInit();
							};
							$.extend(handleclass.prototype, $.ui.mouse, {
								mouseStart : function(e) {
									return self.start.call(self, e,
											this.element[0]);
								},
								mouseStop : function(e) {
									return self.stop.call(self, e,
											this.element[0]);
								},
								mouseDrag : function(e) {
									return self.drag.call(self, e,
											this.element[0]);
								},
								mouseCapture : function() {
									return true;
								},
								trigger : function(e) {
									this.mouseDown(e);
								}
							});
							$(this.handle)
									.each(function() {
										new handleclass(this);
									})
									.wrap(
											'<a href="javascript:void(0)" style="outline:none;border:none;"></a>')
									.parent().bind('focus', function(e) {
										self.focus(this.firstChild);
									}).bind('blur', function(e) {
										self.blur(this.firstChild);
									}).bind(
											'keydown',
											function(e) {
												if (!self.options.noKeyboard)
													self.keydown(e.keyCode,
															this.firstChild);
											});
							this.element.bind('mousedown.slider', function(e) {
								self.click.apply(self, [ e ]);
								self.currentHandle.data("mouse").trigger(e);
								self.firstValue = self.firstValue + 1;
							});
							$.each(this.options.handles || [], function(index,
									handle) {
								self.moveTo(handle.start, index, true);
							});
							if (!isNaN(this.options.startValue))
								this.moveTo(this.options.startValue, 0, true);
							this.previousHandle = $(this.handle[0]);
							if (this.handle.length == 2 && this.options.range)
								this.createRange();
						},
						initBoundaries : function() {
							var element = this.element[0], o = this.options;
							this.actualSize = {
								width : this.element.outerWidth(),
								height : this.element.outerHeight()
							};
							$
									.extend(
											o,
											{
												axis : o.axis
														|| (element.offsetWidth < element.offsetHeight ? 'vertical'
																: 'horizontal'),
												max : !isNaN(parseInt(o.max, 10)) ? {
													x : parseInt(o.max, 10),
													y : parseInt(o.max, 10)
												}
														: ( {
															x : o.max
																	&& o.max.x
																	|| 100,
															y : o.max
																	&& o.max.y
																	|| 100
														}),
												min : !isNaN(parseInt(o.min, 10)) ? {
													x : parseInt(o.min, 10),
													y : parseInt(o.min, 10)
												}
														: ( {
															x : o.min
																	&& o.min.x
																	|| 0,
															y : o.min
																	&& o.min.y
																	|| 0
														})
											});
							o.realMax = {
								x : o.max.x - o.min.x,
								y : o.max.y - o.min.y
							};
							o.stepping = {
								x : o.stepping
										&& o.stepping.x
										|| parseInt(o.stepping, 10)
										|| (o.steps ? o.realMax.x
												/ (o.steps.x
														|| parseInt(o.steps, 10) || o.realMax.x)
												: 0),
								y : o.stepping
										&& o.stepping.y
										|| parseInt(o.stepping, 10)
										|| (o.steps ? o.realMax.y
												/ (o.steps.y
														|| parseInt(o.steps, 10) || o.realMax.y)
												: 0)
							};
						},
						keydown : function(keyCode, handle) {
							if (/(37|38|39|40)/.test(keyCode)) {
								this
										.moveTo(
												{
													x : /(37|39)/.test(keyCode) ? (keyCode == 37 ? '-'
															: '+')
															+ '='
															+ this.oneStep("x")
															: 0,
													y : /(38|40)/.test(keyCode) ? (keyCode == 38 ? '-'
															: '+')
															+ '='
															+ this.oneStep("y")
															: 0
												}, handle);
							}
						},
						focus : function(handle, hard) {
							this.currentHandle = $(handle).addClass(
									'ui-slider-handle-active');
							if (hard)
								this.currentHandle.parent()[0].focus();
						},
						blur : function(handle) {
							$(handle).removeClass('ui-slider-handle-active');
							if (this.currentHandle
									&& this.currentHandle[0] == handle) {
								this.previousHandle = this.currentHandle;
								this.currentHandle = null;
							}
							;
						},
						click : function(e) {
							var pointer = [ e.pageX, e.pageY ];
							var clickedHandle = false;
							this.handle.each(function() {
								if (this == e.target)
									clickedHandle = true;
							});
							if (clickedHandle
									|| this.options.disabled
									|| !(this.currentHandle || this.previousHandle))
								return;
							if (!this.currentHandle && this.previousHandle)
								this.focus(this.previousHandle, true);
							this.offset = this.element.offset();
							this
									.moveTo(
											{
												y : this
														.convertValue(
																e.pageY
																		- this.offset.top
																		- this.currentHandle[0].offsetHeight
																		/ 2,
																"y"),
												x : this
														.convertValue(
																e.pageX
																		- this.offset.left
																		- this.currentHandle[0].offsetWidth
																		/ 2,
																"x")
											}, null, !this.options.distance);
						},
						createRange : function() {
							if (this.rangeElement)
								return;
							this.rangeElement = $('<div></div>').addClass(
									'ui-slider-range').css( {
								position : 'absolute'
							}).appendTo(this.element);
							this.updateRange();
						},
						removeRange : function() {
							this.rangeElement.remove();
							this.rangeElement = null;
						},
						updateRange : function() {
							var prop = this.options.axis == "vertical" ? "top"
									: "left";
							var size = this.options.axis == "vertical" ? "height"
									: "width";
							this.rangeElement
									.css(
											prop,
											(parseInt($(this.handle[0]).css(
													prop), 10) || 0)
													+ this
															.handleSize(
																	0,
																	this.options.axis == "vertical" ? "y"
																			: "x")
													/ 2);
							this.rangeElement
									.css(size, (parseInt($(this.handle[1]).css(
											prop), 10) || 0)
											- (parseInt($(this.handle[0]).css(
													prop), 10) || 0));
						},
						getRange : function() {
							return this.rangeElement ? this
									.convertValue(
											parseInt(
													this.rangeElement
															.css(this.options.axis == "vertical" ? "height"
																	: "width"),
													10),
											this.options.axis == "vertical" ? "y"
													: "x")
									: null;
						},
						handleIndex : function() {
							return this.handle.index(this.currentHandle[0]);
						},
						value : function(handle, axis) {
							if (this.handle.length == 1)
								this.currentHandle = this.handle;
							if (!axis)
								axis = this.options.axis == "vertical" ? "y"
										: "x";
							var curHandle = $(handle != undefined
									&& handle !== null ? this.handle[handle]
									|| handle : this.currentHandle);
							if (curHandle.data("mouse").sliderValue) {
								return parseInt(
										curHandle.data("mouse").sliderValue[axis],
										10);
							} else {
								return parseInt(
										((parseInt(curHandle
												.css(axis == "x" ? "left"
														: "top"), 10) / (this.actualSize[axis == "x" ? "width"
												: "height"] - this.handleSize(
												handle, axis))) * this.options.realMax[axis])
												+ this.options.min[axis], 10);
							}
						},
						convertValue : function(value, axis) {
							return this.options.min[axis]
									+ (value / (this.actualSize[axis == "x" ? "width"
											: "height"] - this.handleSize(null,
											axis)))
									* this.options.realMax[axis];
						},
						translateValue : function(value, axis) {
							return ((value - this.options.min[axis]) / this.options.realMax[axis])
									* (this.actualSize[axis == "x" ? "width"
											: "height"] - this.handleSize(null,
											axis));
						},
						translateRange : function(value, axis) {
							if (this.rangeElement) {
								if (this.currentHandle[0] == this.handle[0]
										&& value >= this.translateValue(this
												.value(1), axis))
									value = this.translateValue(this.value(1,
											axis)
											- this.oneStep(axis), axis);
								if (this.currentHandle[0] == this.handle[1]
										&& value <= this.translateValue(this
												.value(0), axis))
									value = this.translateValue(this.value(0,
											axis)
											+ this.oneStep(axis), axis);
							}
							if (this.options.handles) {
								var handle = this.options.handles[this
										.handleIndex()];
								if (value < this.translateValue(handle.min,
										axis)) {
									value = this.translateValue(handle.min,
											axis);
								} else if (value > this.translateValue(
										handle.max, axis)) {
									value = this.translateValue(handle.max,
											axis);
								}
							}
							return value;
						},
						translateLimits : function(value, axis) {
							if (value >= this.actualSize[axis == "x" ? "width"
									: "height"]
									- this.handleSize(null, axis))
								value = this.actualSize[axis == "x" ? "width"
										: "height"]
										- this.handleSize(null, axis);
							if (value <= 0)
								value = 0;
							return value;
						},
						handleSize : function(handle, axis) {
							return $(handle != undefined && handle !== null ? this.handle[handle]
									: this.currentHandle)[0]["offset"
									+ (axis == "x" ? "Width" : "Height")];
						},
						oneStep : function(axis) {
							return this.options.stepping[axis] || 1;
						},
						start : function(e, handle) {
							var o = this.options;
							if (o.disabled)
								return false;
							this.actualSize = {
								width : this.element.outerWidth(),
								height : this.element.outerHeight()
							};
							if (!this.currentHandle)
								this.focus(this.previousHandle, true);
							this.offset = this.element.offset();
							this.handleOffset = this.currentHandle.offset();
							this.clickOffset = {
								top : e.pageY - this.handleOffset.top,
								left : e.pageX - this.handleOffset.left
							};
							this.firstValue = this.value();
							this.propagate('start', e);
							this.drag(e, handle);
							return true;
						},
						stop : function(e) {
							this.propagate('stop', e);
							if (this.firstValue != this.value())
								this.propagate('change', e);
							this.focus(this.currentHandle, true);
							return false;
						},
						drag : function(e, handle) {
							var o = this.options;
							var position = {
								top : e.pageY - this.offset.top
										- this.clickOffset.top,
								left : e.pageX - this.offset.left
										- this.clickOffset.left
							};
							if (!this.currentHandle)
								this.focus(this.previousHandle, true);
							position.left = this.translateLimits(position.left,
									"x");
							position.top = this.translateLimits(position.top,
									"y");
							if (o.stepping.x) {
								var value = this.convertValue(position.left,
										"x");
								value = Math.round(value / o.stepping.x)
										* o.stepping.x;
								position.left = this.translateValue(value, "x");
							}
							if (o.stepping.y) {
								var value = this
										.convertValue(position.top, "y");
								value = Math.round(value / o.stepping.y)
										* o.stepping.y;
								position.top = this.translateValue(value, "y");
							}
							position.left = this.translateRange(position.left,
									"x");
							position.top = this.translateRange(position.top,
									"y");
							if (o.axis != "vertical")
								this.currentHandle.css( {
									left : position.left
								});
							if (o.axis != "horizontal")
								this.currentHandle.css( {
									top : position.top
								});
							this.currentHandle.data("mouse").sliderValue = {
								x : Math.round(this.convertValue(position.left,
										"x")) || 0,
								y : Math.round(this.convertValue(position.top,
										"y")) || 0
							};
							if (this.rangeElement)
								this.updateRange();
							this.propagate('slide', e);
							return false;
						},
						moveTo : function(value, handle, noPropagation) {
							var o = this.options;
							this.actualSize = {
								width : this.element.outerWidth(),
								height : this.element.outerHeight()
							};
							if (handle == undefined && !this.currentHandle
									&& this.handle.length != 1)
								return false;
							if (handle == undefined && !this.currentHandle)
								handle = 0;
							if (handle != undefined)
								this.currentHandle = this.previousHandle = $(this.handle[handle]
										|| handle);
							if (value.x !== undefined && value.y !== undefined) {
								var x = value.x, y = value.y;
							} else {
								var x = value, y = value;
							}
							if (x !== undefined && x.constructor != Number) {
								var me = /^\-\=/.test(x), pe = /^\+\=/.test(x);
								if (me || pe) {
									x = this.value(null, "x")
											+ parseInt(x.replace(me ? '='
													: '+=', ''), 10);
								} else {
									x = isNaN(parseInt(x, 10)) ? undefined
											: parseInt(x, 10);
								}
							}
							if (y !== undefined && y.constructor != Number) {
								var me = /^\-\=/.test(y), pe = /^\+\=/.test(y);
								if (me || pe) {
									y = this.value(null, "y")
											+ parseInt(y.replace(me ? '='
													: '+=', ''), 10);
								} else {
									y = isNaN(parseInt(y, 10)) ? undefined
											: parseInt(y, 10);
								}
							}
							if (o.axis != "vertical" && x !== undefined) {
								if (o.stepping.x)
									x = Math.round(x / o.stepping.x)
											* o.stepping.x;
								x = this.translateValue(x, "x");
								x = this.translateLimits(x, "x");
								x = this.translateRange(x, "x");
								o.animate ? this.currentHandle
										.stop()
										.animate(
												{
													left : x
												},
												(Math
														.abs(parseInt(this.currentHandle
																.css("left"))
																- x))
														* (!isNaN(parseInt(o.animate)) ? o.animate
																: 5))
										: this.currentHandle.css( {
											left : x
										});
							}
							if (o.axis != "horizontal" && y !== undefined) {
								if (o.stepping.y)
									y = Math.round(y / o.stepping.y)
											* o.stepping.y;
								y = this.translateValue(y, "y");
								y = this.translateLimits(y, "y");
								y = this.translateRange(y, "y");
								o.animate ? this.currentHandle
										.stop()
										.animate(
												{
													top : y
												},
												(Math
														.abs(parseInt(this.currentHandle
																.css("top"))
																- y))
														* (!isNaN(parseInt(o.animate)) ? o.animate
																: 5))
										: this.currentHandle.css( {
											top : y
										});
							}
							if (this.rangeElement)
								this.updateRange();
							this.currentHandle.data("mouse").sliderValue = {
								x : Math.round(this.convertValue(x, "x")) || 0,
								y : Math.round(this.convertValue(y, "y")) || 0
							};
							if (!noPropagation) {
								this.propagate('start', null);
								this.propagate('stop', null);
								this.propagate('change', null);
								this.propagate("slide", null);
							}
						}
					});
	$.ui.slider.getter = "value";
	$.ui.slider.defaults = {
		handle : ".ui-slider-handle",
		distance : 1,
		animate : false
	};
})(jQuery);
(function($) {
	$
			.widget(
					"ui.tabs",
					{
						init : function() {
							this.options.event += '.tabs';
							this.tabify(true);
						},
						setData : function(key, value) {
							if ((/^selected/).test(key))
								this.select(value);
							else {
								this.options[key] = value;
								this.tabify();
							}
						},
						length : function() {
							return this.$tabs.length;
						},
						tabId : function(a) {
							return a.title
									&& a.title.replace(/\s/g, '_').replace(
											/[^A-Za-z0-9\-_:\.]/g, '')
									|| this.options.idPrefix + $.data(a);
						},
						ui : function(tab, panel) {
							return {
								options : this.options,
								tab : tab,
								panel : panel,
								index : this.$tabs.index(tab)
							};
						},
						tabify : function(init) {
							this.$lis = $('li:has(a[href])', this.element);
							this.$tabs = this.$lis.map(function() {
								return $('a', this)[0];
							});
							this.$panels = $( []);
							var self = this, o = this.options;
							this.$tabs
									.each(function(i, a) {
										if (a.hash && a.hash.replace('#', ''))
											self.$panels = self.$panels
													.add(a.hash);
										else if ($(a).attr('href') != '#') {
											$.data(a, 'href.tabs', a.href);
											$.data(a, 'load.tabs', a.href);
											var id = self.tabId(a);
											a.href = '#' + id;
											var $panel = $('#' + id);
											if (!$panel.length) {
												$panel = $(o.panelTemplate)
														.attr('id', id)
														.addClass(o.panelClass)
														.insertAfter(
																self.$panels[i - 1]
																		|| self.element);
												$panel.data('destroy.tabs',
														true);
											}
											self.$panels = self.$panels
													.add($panel);
										} else
											o.disabled.push(i + 1);
									});
							if (init) {
								this.element.addClass(o.navClass);
								this.$panels.each(function() {
									var $this = $(this);
									$this.addClass(o.panelClass);
								});
								if (o.selected === undefined) {
									if (location.hash) {
										this.$tabs
												.each(function(i, a) {
													if (a.hash == location.hash) {
														o.selected = i;
														if ($.browser.msie
																|| $.browser.opera) {
															var $toShow = $(location.hash), toShowId = $toShow
																	.attr('id');
															$toShow.attr('id',
																	'');
															setTimeout(
																	function() {
																		$toShow
																				.attr(
																						'id',
																						toShowId);
																	}, 500);
														}
														scrollTo(0, 0);
														return false;
													}
												});
									} else if (o.cookie) {
										var index = parseInt($
												.cookie('ui-tabs' + $
														.data(self.element)),
												10);
										if (index && self.$tabs[index])
											o.selected = index;
									} else if (self.$lis
											.filter('.' + o.selectedClass).length)
										o.selected = self.$lis
												.index(self.$lis
														.filter('.' + o.selectedClass)[0]);
								}
								o.selected = o.selected === null
										|| o.selected !== undefined ? o.selected
										: 0;
								o.disabled = $.unique(
										o.disabled.concat($.map(this.$lis
												.filter('.' + o.disabledClass),
												function(n, i) {
													return self.$lis.index(n);
												}))).sort();
								if ($.inArray(o.selected, o.disabled) != -1)
									o.disabled.splice($.inArray(o.selected,
											o.disabled), 1);
								this.$panels.addClass(o.hideClass);
								this.$lis.removeClass(o.selectedClass);
								if (o.selected !== null) {
									this.$panels.eq(o.selected).show()
											.removeClass(o.hideClass);
									this.$lis.eq(o.selected).addClass(
											o.selectedClass);
									var onShow = function() {
										$(self.element)
												.triggerHandler(
														'tabsshow',
														[
																self
																		.fakeEvent('tabsshow'),
																self
																		.ui(
																				self.$tabs[o.selected],
																				self.$panels[o.selected]) ],
														o.show);
									};
									if ($.data(this.$tabs[o.selected],
											'load.tabs'))
										this.load(o.selected, onShow);
									else
										onShow();
								}
								$(window)
										.bind(
												'unload',
												function() {
													self.$tabs.unbind('.tabs');
													self.$lis = self.$tabs = self.$panels = null;
												});
							}
							for ( var i = 0, li; li = this.$lis[i]; i++)
								$(li)[$.inArray(i, o.disabled) != -1
										&& !$(li).hasClass(o.selectedClass) ? 'addClass'
										: 'removeClass'](o.disabledClass);
							if (o.cache === false)
								this.$tabs.removeData('cache.tabs');
							var hideFx, showFx, baseFx = {
								'min-width' : 0,
								duration : 1
							}, baseDuration = 'normal';
							if (o.fx && o.fx.constructor == Array)
								hideFx = o.fx[0] || baseFx, showFx = o.fx[1]
										|| baseFx;
							else
								hideFx = showFx = o.fx || baseFx;
							var resetCSS = {
								display : '',
								overflow : '',
								height : ''
							};
							if (!$.browser.msie)
								resetCSS.opacity = '';
							function hideTab(clicked, $hide, $show) {
								$hide.animate(hideFx, hideFx.duration
										|| baseDuration, function() {
									$hide.addClass(o.hideClass).css(resetCSS);
									if ($.browser.msie && hideFx.opacity)
										$hide[0].style.filter = '';
									if ($show)
										showTab(clicked, $show, $hide);
								});
							}
							function showTab(clicked, $show, $hide) {
								if (showFx === baseFx)
									$show.css('display', 'block');
								$show
										.animate(
												showFx,
												showFx.duration || baseDuration,
												function() {
													$show.removeClass(
															o.hideClass).css(
															resetCSS);
													if ($.browser.msie
															&& showFx.opacity)
														$show[0].style.filter = '';
													$(self.element)
															.triggerHandler(
																	'tabsshow',
																	[
																			self
																					.fakeEvent('tabsshow'),
																			self
																					.ui(
																							clicked,
																							$show[0]) ],
																	o.show);
												});
							}
							function switchTab(clicked, $li, $hide, $show) {
								$li.addClass(o.selectedClass).siblings()
										.removeClass(o.selectedClass);
								hideTab(clicked, $hide, $show);
							}
							this.$tabs
									.unbind('.tabs')
									.bind(
											o.event,
											function() {
												var $li = $(this).parents(
														'li:eq(0)'), $hide = self.$panels
														.filter(':visible'), $show = $(this.hash);
												if (($li
														.hasClass(o.selectedClass) && !o.unselect)
														|| $li
																.hasClass(o.disabledClass)
														|| $(this).hasClass(
																o.loadingClass)
														|| $(self.element)
																.triggerHandler(
																		'tabsselect',
																		[
																				self
																						.fakeEvent('tabsselect'),
																				self
																						.ui(
																								this,
																								$show[0]) ],
																		o.select) === false) {
													this.blur();
													return false;
												}
												self.options.selected = self.$tabs
														.index(this);
												if (o.unselect) {
													if ($li
															.hasClass(o.selectedClass)) {
														self.options.selected = null;
														$li
																.removeClass(o.selectedClass);
														self.$panels.stop();
														hideTab(this, $hide);
														this.blur();
														return false;
													} else if (!$hide.length) {
														self.$panels.stop();
														var a = this;
														self
																.load(
																		self.$tabs
																				.index(this),
																		function() {
																			$li
																					.addClass(
																							o.selectedClass)
																					.addClass(
																							o.unselectClass);
																			showTab(
																					a,
																					$show);
																		});
														this.blur();
														return false;
													}
												}
												if (o.cookie)
													$
															.cookie(
																	'ui-tabs' + $
																			.data(self.element),
																	self.options.selected,
																	o.cookie);
												self.$panels.stop();
												if ($show.length) {
													var a = this;
													self
															.load(
																	self.$tabs
																			.index(this),
																	$hide.length ? function() {
																		switchTab(
																				a,
																				$li,
																				$hide,
																				$show);
																	}
																			: function() {
																				$li
																						.addClass(o.selectedClass);
																				showTab(
																						a,
																						$show);
																			});
												} else
													throw 'jQuery UI Tabs: Mismatching fragment identifier.';
												if ($.browser.msie)
													this.blur();
												return false;
											});
							if (!(/^click/).test(o.event))
								this.$tabs.bind('click.tabs', function() {
									return false;
								});
						},
						add : function(url, label, index) {
							if (index == undefined)
								index = this.$tabs.length;
							var o = this.options;
							var $li = $(o.tabTemplate
									.replace(/#\{href\}/g, url).replace(
											/#\{label\}/g, label));
							$li.data('destroy.tabs', true);
							var id = url.indexOf('#') == 0 ? url.replace('#',
									'') : this
									.tabId($('a:first-child', $li)[0]);
							var $panel = $('#' + id);
							if (!$panel.length) {
								$panel = $(o.panelTemplate).attr('id', id)
										.addClass(o.hideClass).data(
												'destroy.tabs', true);
							}
							$panel.addClass(o.panelClass);
							if (index >= this.$lis.length) {
								$li.appendTo(this.element);
								$panel.appendTo(this.element[0].parentNode);
							} else {
								$li.insertBefore(this.$lis[index]);
								$panel.insertBefore(this.$panels[index]);
							}
							o.disabled = $.map(o.disabled, function(n, i) {
								return n >= index ? ++n : n
							});
							this.tabify();
							if (this.$tabs.length == 1) {
								$li.addClass(o.selectedClass);
								$panel.removeClass(o.hideClass);
								var href = $.data(this.$tabs[0], 'load.tabs');
								if (href)
									this.load(index, href);
							}
							this.element.triggerHandler('tabsadd', [
									this.fakeEvent('tabsadd'),
									this.ui(this.$tabs[index],
											this.$panels[index]) ], o.add);
						},
						remove : function(index) {
							var o = this.options, $li = this.$lis.eq(index)
									.remove(), $panel = this.$panels.eq(index)
									.remove();
							if ($li.hasClass(o.selectedClass)
									&& this.$tabs.length > 1)
								this.select(index
										+ (index + 1 < this.$tabs.length ? 1
												: -1));
							o.disabled = $.map($.grep(o.disabled,
									function(n, i) {
										return n != index;
									}), function(n, i) {
								return n >= index ? --n : n
							});
							this.tabify();
							this.element.triggerHandler('tabsremove', [
									this.fakeEvent('tabsremove'),
									this.ui($li.find('a')[0], $panel[0]) ],
									o.remove);
						},
						enable : function(index) {
							var o = this.options;
							if ($.inArray(index, o.disabled) == -1)
								return;
							var $li = this.$lis.eq(index).removeClass(
									o.disabledClass);
							if ($.browser.safari) {
								$li.css('display', 'inline-block');
								setTimeout(function() {
									$li.css('display', 'block');
								}, 0);
							}
							o.disabled = $.grep(o.disabled, function(n, i) {
								return n != index;
							});
							this.element.triggerHandler('tabsenable', [
									this.fakeEvent('tabsenable'),
									this.ui(this.$tabs[index],
											this.$panels[index]) ], o.enable);
						},
						disable : function(index) {
							var self = this, o = this.options;
							if (index != o.selected) {
								this.$lis.eq(index).addClass(o.disabledClass);
								o.disabled.push(index);
								o.disabled.sort();
								this.element.triggerHandler('tabsdisable', [
										this.fakeEvent('tabsdisable'),
										this.ui(this.$tabs[index],
												this.$panels[index]) ],
										o.disable);
							}
						},
						select : function(index) {
							if (typeof index == 'string')
								index = this.$tabs.index(this.$tabs
										.filter('[href$=' + index + ']')[0]);
							this.$tabs.eq(index).trigger(this.options.event);
						},
						load : function(index, callback) {
							var self = this, o = this.options, $a = this.$tabs
									.eq(index), a = $a[0], bypassCache = callback == undefined
									|| callback === false, url = $a
									.data('load.tabs');
							callback = callback || function() {
							};
							if (!url || !bypassCache && $.data(a, 'cache.tabs')) {
								callback();
								return;
							}
							var inner = function(parent) {
								var $parent = $(parent), $inner = $parent
										.find('*:last');
								return $inner.length && $inner.is(':not(img)')
										&& $inner || $parent;
							};
							var cleanup = function() {
								self.$tabs
										.filter('.' + o.loadingClass)
										.removeClass(o.loadingClass)
										.each(
												function() {
													if (o.spinner)
														inner(this)
																.parent()
																.html(
																		inner(
																				this)
																				.data(
																						'label.tabs'));
												});
								self.xhr = null;
							};
							if (o.spinner) {
								var label = inner(a).html();
								inner(a).wrapInner('<em></em>').find('em')
										.data('label.tabs', label).html(
												o.spinner);
							}
							var ajaxOptions = $
									.extend(
											{},
											o.ajaxOptions,
											{
												url : url,
												success : function(r, s) {
													$(a.hash).html(r);
													cleanup();
													if (o.cache)
														$.data(a, 'cache.tabs',
																true);
													$(self.element)
															.triggerHandler(
																	'tabsload',
																	[
																			self
																					.fakeEvent('tabsload'),
																			self
																					.ui(
																							self.$tabs[index],
																							self.$panels[index]) ],
																	o.load);
													o.ajaxOptions.success
															&& o.ajaxOptions
																	.success(r,
																			s);
													callback();
												}
											});
							if (this.xhr) {
								this.xhr.abort();
								cleanup();
							}
							$a.addClass(o.loadingClass);
							setTimeout(function() {
								self.xhr = $.ajax(ajaxOptions);
							}, 0);
						},
						url : function(index, url) {
							this.$tabs.eq(index).removeData('cache.tabs').data(
									'load.tabs', url);
						},
						destroy : function() {
							var o = this.options;
							this.element.unbind('.tabs')
									.removeClass(o.navClass).removeData('tabs');
							this.$tabs.each(function() {
								var href = $.data(this, 'href.tabs');
								if (href)
									this.href = href;
								var $this = $(this).unbind('.tabs');
								$.each( [ 'href', 'load', 'cache' ], function(
										i, prefix) {
									$this.removeData(prefix + '.tabs');
								});
							});
							this.$lis.add(this.$panels).each(
									function() {
										if ($.data(this, 'destroy.tabs'))
											$(this).remove();
										else
											$(this).removeClass(
													[ o.selectedClass,
															o.unselectClass,
															o.disabledClass,
															o.panelClass,
															o.hideClass ]
															.join(' '));
									});
						},
						fakeEvent : function(type) {
							return $.event.fix( {
								type : type,
								target : this.element[0]
							});
						}
					});
	$.ui.tabs.defaults = {
		unselect : false,
		event : 'hover',
		disabled : [],
		cookie : null,
		spinner : 'Loading&#8230;',
		cache : false,
		idPrefix : 'ui-tabs-',
		ajaxOptions : {},
		fx : null,
		tabTemplate : '<li><a href="#{href}"><span>#{label}</span></a></li>',
		panelTemplate : '<div></div>',
		navClass : 'ui-tabs-nav',
		selectedClass : 'ui-tabs-selected',
		unselectClass : 'ui-tabs-unselect',
		disabledClass : 'ui-tabs-disabled',
		panelClass : 'ui-tabs-panel',
		hideClass : 'ui-tabs-hide',
		loadingClass : 'ui-tabs-loading'
	};
	$.ui.tabs.getter = "length";
	$.extend($.ui.tabs.prototype, {
		rotation : null,
		rotate : function(ms, continuing) {
			continuing = continuing || false;
			var self = this, t = this.options.selected;
			function start() {
				self.rotation = setInterval(function() {
					t = ++t < self.$tabs.length ? t : 0;
					self.select(t);
				}, ms);
			}
			function stop(e) {
				if (!e || e.clientX) {
					clearInterval(self.rotation);
				}
			}
			if (ms) {
				start();
				if (!continuing)
					this.$tabs.bind(this.options.event, stop);
				else
					this.$tabs.bind(this.options.event, function() {
						stop();
						t = self.options.selected;
						start();
					});
			} else {
				stop();
				this.$tabs.unbind(this.options.event, stop);
			}
		}
	});
})(jQuery);
(function($) {
	var PROP_NAME = 'datepicker';
	function Datepicker() {
		this.debug = false;
		this._curInst = null;
		this._disabledInputs = [];
		this._datepickerShowing = false;
		this._inDialog = false;
		this._mainDivId = 'ui-datepicker-div';
		this._appendClass = 'ui-datepicker-append';
		this._triggerClass = 'ui-datepicker-trigger';
		this._dialogClass = 'ui-datepicker-dialog';
		this._promptClass = 'ui-datepicker-prompt';
		this._unselectableClass = 'ui-datepicker-unselectable';
		this._currentClass = 'ui-datepicker-current-day';
		this.regional = [];
		this.regional[''] = {
			clearText : 'Clear',
			clearStatus : 'Erase the current date',
			closeText : 'Close',
			closeStatus : 'Close without change',
			prevText : '&#x3c;Prev',
			prevStatus : 'Show the previous month',
			nextText : 'Next&#x3e;',
			nextStatus : 'Show the next month',
			currentText : 'Today',
			currentStatus : 'Show the current month',
			monthNames : [ 'January', 'February', 'March', 'April', 'May',
					'June', 'July', 'August', 'September', 'October',
					'November', 'December' ],
			monthNamesShort : [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
					'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
			monthStatus : 'Show a different month',
			yearStatus : 'Show a different year',
			weekHeader : 'Wk',
			weekStatus : 'Week of the year',
			dayNames : [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday',
					'Thursday', 'Friday', 'Saturday' ],
			dayNamesShort : [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
			dayNamesMin : [ 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa' ],
			dayStatus : 'Set DD as first week day',
			dateStatus : 'Select DD, M d',
			dateFormat : 'mm/dd/yy',
			firstDay : 0,
			initStatus : 'Select a date',
			isRTL : false
		};
		this._defaults = {
			showOn : 'focus',
			showAnim : 'show',
			showOptions : {},
			defaultDate : null,
			appendText : '',
			buttonText : '...',
			buttonImage : '',
			buttonImageOnly : false,
			closeAtTop : true,
			mandatory : false,
			hideIfNoPrevNext : false,
			navigationAsDateFormat : false,
			gotoCurrent : false,
			changeMonth : true,
			changeYear : true,
			yearRange : '-10:+10',
			changeFirstDay : true,
			highlightWeek : false,
			showOtherMonths : false,
			showWeeks : false,
			calculateWeek : this.iso8601Week,
			shortYearCutoff : '+10',
			showStatus : false,
			statusForDate : this.dateStatus,
			minDate : null,
			maxDate : null,
			duration : 'normal',
			beforeShowDay : null,
			beforeShow : null,
			onSelect : null,
			onChangeMonthYear : null,
			onClose : null,
			numberOfMonths : 1,
			stepMonths : 1,
			rangeSelect : false,
			rangeSeparator : ' - ',
			altField : '',
			altFormat : ''
		};
		$.extend(this._defaults, this.regional['']);
		this.dpDiv = $('<div id="' + this._mainDivId + '" style="display: none;"></div>');
	}
	$
			.extend(
					Datepicker.prototype,
					{
						markerClassName : 'hasDatepicker',
						log : function() {
							if (this.debug)
								console.log.apply('', arguments);
						},
						setDefaults : function(settings) {
							extendRemove(this._defaults, settings || {});
							return this;
						},
						_attachDatepicker : function(target, settings) {
							var inlineSettings = null;
							for (attrName in this._defaults) {
								var attrValue = target
										.getAttribute('date:' + attrName);
								if (attrValue) {
									inlineSettings = inlineSettings || {};
									try {
										inlineSettings[attrName] = eval(attrValue);
									} catch (err) {
										inlineSettings[attrName] = attrValue;
									}
								}
							}
							var nodeName = target.nodeName.toLowerCase();
							var inline = (nodeName == 'div' || nodeName == 'span');
							if (!target.id)
								target.id = 'dp' + new Date().getTime();
							var inst = this._newInst($(target), inline);
							inst.settings = $.extend( {}, settings || {},
									inlineSettings || {});
							if (nodeName == 'input') {
								this._connectDatepicker(target, inst);
							} else if (inline) {
								this._inlineDatepicker(target, inst);
							}
						},
						_newInst : function(target, inline) {
							return {
								id : target[0].id,
								input : target,
								selectedDay : 0,
								selectedMonth : 0,
								selectedYear : 0,
								drawMonth : 0,
								drawYear : 0,
								inline : inline,
								dpDiv : (!inline ? this.dpDiv
										: $('<div class="ui-datepicker-inline"></div>'))
							};
						},
						_connectDatepicker : function(target, inst) {
							var input = $(target);
							if (input.hasClass(this.markerClassName))
								return;
							var appendText = this._get(inst, 'appendText');
							var isRTL = this._get(inst, 'isRTL');
							if (appendText)
								input[isRTL ? 'before' : 'after']
										('<span class="' + this._appendClass
												+ '">' + appendText + '</span>');
							var showOn = this._get(inst, 'showOn');
							if (showOn == 'focus' || showOn == 'both')
								input.focus(this._showDatepicker);
							if (showOn == 'button' || showOn == 'both') {
								var buttonText = this._get(inst, 'buttonText');
								var buttonImage = this
										._get(inst, 'buttonImage');
								var trigger = $(this._get(inst,
										'buttonImageOnly') ? $('<img/>')
										.addClass(this._triggerClass).attr( {
											src : buttonImage,
											alt : buttonText,
											title : buttonText
										}) : $(
										'<button type="button"></button>')
										.addClass(this._triggerClass).html(
												buttonImage == '' ? buttonText
														: $('<img/>').attr( {
															src : buttonImage,
															alt : buttonText,
															title : buttonText
														})));
								input[isRTL ? 'before' : 'after'](trigger);
								trigger
										.click(function() {
											if ($.datepicker._datepickerShowing
													&& $.datepicker._lastInput == target)
												$.datepicker._hideDatepicker();
											else
												$.datepicker
														._showDatepicker(target);
											return false;
										});
							}
							input.addClass(this.markerClassName).keydown(
									this._doKeyDown).keypress(this._doKeyPress)
									.bind("setData.datepicker",
											function(event, key, value) {
												inst.settings[key] = value;
											}).bind("getData.datepicker",
											function(event, key) {
												return this._get(inst, key);
											});
							$.data(target, PROP_NAME, inst);
						},
						_inlineDatepicker : function(target, inst) {
							var input = $(target);
							if (input.hasClass(this.markerClassName))
								return;
							input.addClass(this.markerClassName).append(
									inst.dpDiv).bind("setData.datepicker",
									function(event, key, value) {
										inst.settings[key] = value;
									}).bind("getData.datepicker",
									function(event, key) {
										return this._get(inst, key);
									});
							$.data(target, PROP_NAME, inst);
							this._setDate(inst, this._getDefaultDate(inst));
							this._updateDatepicker(inst);
						},
						_dialogDatepicker : function(input, dateText, onSelect,
								settings, pos) {
							var inst = this._dialogInst;
							if (!inst) {
								var id = 'dp' + new Date().getTime();
								this._dialogInput = $('<input type="text" id="' + id + '" size="1" style="position: absolute; top: -100px;"/>');
								this._dialogInput.keydown(this._doKeyDown);
								$('body').append(this._dialogInput);
								inst = this._dialogInst = this._newInst(
										this._dialogInput, false);
								inst.settings = {};
								$.data(this._dialogInput[0], PROP_NAME, inst);
							}
							extendRemove(inst.settings, settings || {});
							this._dialogInput.val(dateText);
							this._pos = (pos ? (pos.length ? pos : [ pos.pageX,
									pos.pageY ]) : null);
							if (!this._pos) {
								var browserWidth = window.innerWidth
										|| document.documentElement.clientWidth
										|| document.body.clientWidth;
								var browserHeight = window.innerHeight
										|| document.documentElement.clientHeight
										|| document.body.clientHeight;
								var scrollX = document.documentElement.scrollLeft
										|| document.body.scrollLeft;
								var scrollY = document.documentElement.scrollTop
										|| document.body.scrollTop;
								this._pos = [
										(browserWidth / 2) - 100 + scrollX,
										(browserHeight / 2) - 150 + scrollY ];
							}
							this._dialogInput.css('left', this._pos[0] + 'px')
									.css('top', this._pos[1] + 'px');
							inst.settings.onSelect = onSelect;
							this._inDialog = true;
							this.dpDiv.addClass(this._dialogClass);
							this._showDatepicker(this._dialogInput[0]);
							if ($.blockUI)
								$.blockUI(this.dpDiv);
							$.data(this._dialogInput[0], PROP_NAME, inst);
							return this;
						},
						_destroyDatepicker : function(target) {
							var nodeName = target.nodeName.toLowerCase();
							var $target = $(target);
							$.removeData(target, PROP_NAME);
							if (nodeName == 'input') {
								$target.siblings('.' + this._appendClass)
										.remove().end().siblings(
												'.' + this._triggerClass)
										.remove().end().removeClass(
												this.markerClassName).unbind(
												'focus', this._showDatepicker)
										.unbind('keydown', this._doKeyDown)
										.unbind('keypress', this._doKeyPress);
							} else if (nodeName == 'div' || nodeName == 'span')
								$target.removeClass(this.markerClassName)
										.empty();
						},
						_enableDatepicker : function(target) {
							target.disabled = false;
							$(target).siblings('button.' + this._triggerClass)
									.each(function() {
										this.disabled = false;
									}).end().siblings(
											'img.' + this._triggerClass).css( {
										opacity : '1.0',
										cursor : ''
									});
							this._disabledInputs = $
									.map(this._disabledInputs,
											function(value) {
												return (value == target ? null
														: value);
											});
						},
						_disableDatepicker : function(target) {
							target.disabled = true;
							$(target).siblings('button.' + this._triggerClass)
									.each(function() {
										this.disabled = true;
									}).end().siblings(
											'img.' + this._triggerClass).css( {
										opacity : '0.5',
										cursor : 'default'
									});
							this._disabledInputs = $
									.map(this._disabledInputs,
											function(value) {
												return (value == target ? null
														: value);
											});
							this._disabledInputs[this._disabledInputs.length] = target;
						},
						_isDisabledDatepicker : function(target) {
							if (!target)
								return false;
							for ( var i = 0; i < this._disabledInputs.length; i++) {
								if (this._disabledInputs[i] == target)
									return true;
							}
							return false;
						},
						_changeDatepicker : function(target, name, value) {
							var settings = name || {};
							if (typeof name == 'string') {
								settings = {};
								settings[name] = value;
							}
							if (inst = $.data(target, PROP_NAME)) {
								extendRemove(inst.settings, settings);
								this._updateDatepicker(inst);
							}
						},
						_setDateDatepicker : function(target, date, endDate) {
							var inst = $.data(target, PROP_NAME);
							if (inst) {
								this._setDate(inst, date, endDate);
								this._updateDatepicker(inst);
							}
						},
						_getDateDatepicker : function(target) {
							var inst = $.data(target, PROP_NAME);
							if (inst)
								this._setDateFromField(inst);
							return (inst ? this._getDate(inst) : null);
						},
						_doKeyDown : function(e) {
							var inst = $.data(e.target, PROP_NAME);
							var handled = true;
							if ($.datepicker._datepickerShowing)
								switch (e.keyCode) {
								case 9:
									$.datepicker._hideDatepicker(null, '');
									break;
								case 13:
									$.datepicker
											._selectDay(
													e.target,
													inst.selectedMonth,
													inst.selectedYear,
													$(
															'td.ui-datepicker-days-cell-over',
															inst.dpDiv)[0]);
									return false;
									break;
								case 27:
									$.datepicker
											._hideDatepicker(null, $.datepicker
													._get(inst, 'duration'));
									break;
								case 33:
									$.datepicker._adjustDate(e.target,
											(e.ctrlKey ? -1 : -$.datepicker
													._get(inst, 'stepMonths')),
											(e.ctrlKey ? 'Y' : 'M'));
									break;
								case 34:
									$.datepicker._adjustDate(e.target,
											(e.ctrlKey ? +1 : +$.datepicker
													._get(inst, 'stepMonths')),
											(e.ctrlKey ? 'Y' : 'M'));
									break;
								case 35:
									if (e.ctrlKey)
										$.datepicker._clearDate(e.target);
									break;
								case 36:
									if (e.ctrlKey)
										$.datepicker._gotoToday(e.target);
									break;
								case 37:
									if (e.ctrlKey)
										$.datepicker._adjustDate(e.target, -1,
												'D');
									break;
								case 38:
									if (e.ctrlKey)
										$.datepicker._adjustDate(e.target, -7,
												'D');
									break;
								case 39:
									if (e.ctrlKey)
										$.datepicker._adjustDate(e.target, +1,
												'D');
									break;
								case 40:
									if (e.ctrlKey)
										$.datepicker._adjustDate(e.target, +7,
												'D');
									break;
								default:
									handled = false;
								}
							else if (e.keyCode == 36 && e.ctrlKey)
								$.datepicker._showDatepicker(this);
							else
								handled = false;
							if (handled) {
								e.preventDefault();
								e.stopPropagation();
							}
						},
						_doKeyPress : function(e) {
							var inst = $.data(e.target, PROP_NAME);
							var chars = $.datepicker
									._possibleChars($.datepicker._get(inst,
											'dateFormat'));
							var chr = String
									.fromCharCode(e.charCode == undefined ? e.keyCode
											: e.charCode);
							return e.ctrlKey
									|| (chr < ' ' || !chars || chars
											.indexOf(chr) > -1);
						},
						_showDatepicker : function(input) {
							input = input.target || input;
							if (input.nodeName.toLowerCase() != 'input')
								input = $('input', input.parentNode)[0];
							if ($.datepicker._isDisabledDatepicker(input)
									|| $.datepicker._lastInput == input)
								return;
							var inst = $.data(input, PROP_NAME);
							var beforeShow = $.datepicker._get(inst,
									'beforeShow');
							extendRemove(inst.settings,
									(beforeShow ? beforeShow.apply(input, [
											input, inst ]) : {}));
							$.datepicker._hideDatepicker(null, '');
							$.datepicker._lastInput = input;
							$.datepicker._setDateFromField(inst);
							if ($.datepicker._inDialog)
								input.value = '';
							if (!$.datepicker._pos) {
								$.datepicker._pos = $.datepicker
										._findPos(input);
								$.datepicker._pos[1] += input.offsetHeight;
							}
							var isFixed = false;
							$(input).parents().each(function() {
								isFixed |= $(this).css('position') == 'fixed';
								return !isFixed;
							});
							if (isFixed && $.browser.opera) {
								$.datepicker._pos[0] -= document.documentElement.scrollLeft;
								$.datepicker._pos[1] -= document.documentElement.scrollTop;
							}
							var offset = {
								left : $.datepicker._pos[0],
								top : $.datepicker._pos[1]
							};
							$.datepicker._pos = null;
							inst.rangeStart = null;
							inst.dpDiv.css( {
								position : 'absolute',
								display : 'block',
								top : '-1000px'
							});
							$.datepicker._updateDatepicker(inst);
							inst.dpDiv
									.width($.datepicker
											._getNumberOfMonths(inst)[1]
											* $('.ui-datepicker', inst.dpDiv[0])[0].offsetWidth);
							offset = $.datepicker._checkOffset(inst, offset,
									isFixed);
							inst.dpDiv
									.css( {
										position : ($.datepicker._inDialog
												&& $.blockUI ? 'static'
												: (isFixed ? 'fixed'
														: 'absolute')),
										display : 'none',
										left : offset.left + 'px',
										top : offset.top + 'px'
									});
							if (!inst.inline) {
								var showAnim = $.datepicker._get(inst,
										'showAnim') || 'show';
								var duration = $.datepicker._get(inst,
										'duration');
								var postProcess = function() {
									$.datepicker._datepickerShowing = true;
									if ($.browser.msie
											&& parseInt($.browser.version) < 7)
										$('iframe.ui-datepicker-cover').css( {
											width : inst.dpDiv.width() + 4,
											height : inst.dpDiv.height() + 4
										});
								};
								if ($.effects && $.effects[showAnim])
									inst.dpDiv.show(showAnim, $.datepicker
											._get(inst, 'showOptions'),
											duration, postProcess);
								else
									inst.dpDiv[showAnim](duration, postProcess);
								if (duration == '')
									postProcess();
								if (inst.input[0].type != 'hidden')
									inst.input[0].focus();
								$.datepicker._curInst = inst;
							}
						},
						_updateDatepicker : function(inst) {
							var dims = {
								width : inst.dpDiv.width() + 4,
								height : inst.dpDiv.height() + 4
							};
							inst.dpDiv.empty().append(
									this._generateDatepicker(inst)).find(
									'iframe.ui-datepicker-cover').css( {
								width : dims.width,
								height : dims.height
							});
							var numMonths = this._getNumberOfMonths(inst);
							inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add'
									: 'remove') + 'Class']
									('ui-datepicker-multi');
							inst.dpDiv[(this._get(inst, 'isRTL') ? 'add'
									: 'remove') + 'Class']('ui-datepicker-rtl');
							if (inst.input && inst.input[0].type != 'hidden')
								$(inst.input[0]).focus();
						},
						_checkOffset : function(inst, offset, isFixed) {
							var pos = inst.input ? this._findPos(inst.input[0])
									: null;
							var browserWidth = window.innerWidth
									|| document.documentElement.clientWidth;
							var browserHeight = window.innerHeight
									|| document.documentElement.clientHeight;
							var scrollX = document.documentElement.scrollLeft
									|| document.body.scrollLeft;
							var scrollY = document.documentElement.scrollTop
									|| document.body.scrollTop;
							if (this._get(inst, 'isRTL')
									|| (offset.left + inst.dpDiv.width() - scrollX) > browserWidth)
								offset.left = Math
										.max(
												(isFixed ? 0 : scrollX),
												pos[0]
														+ (inst.input ? inst.input
																.width()
																: 0)
														- (isFixed ? scrollX
																: 0)
														- inst.dpDiv.width()
														- (isFixed
																&& $.browser.opera ? document.documentElement.scrollLeft
																: 0));
							else
								offset.left -= (isFixed ? scrollX : 0);
							if ((offset.top + inst.dpDiv.height() - scrollY) > browserHeight)
								offset.top = Math
										.max(
												(isFixed ? 0 : scrollY),
												pos[1]
														- (isFixed ? scrollY
																: 0)
														- (this._inDialog ? 0
																: inst.dpDiv
																		.height())
														- (isFixed
																&& $.browser.opera ? document.documentElement.scrollTop
																: 0));
							else
								offset.top -= (isFixed ? scrollY : 0);
							return offset;
						},
						_findPos : function(obj) {
							while (obj
									&& (obj.type == 'hidden' || obj.nodeType != 1)) {
								obj = obj.nextSibling;
							}
							var position = $(obj).offset();
							return [ position.left, position.top ];
						},
						_hideDatepicker : function(input, duration) {
							var inst = this._curInst;
							if (!inst)
								return;
							var rangeSelect = this._get(inst, 'rangeSelect');
							if (rangeSelect && this._stayOpen)
								this._selectDate('#' + inst.id, this
										._formatDate(inst, inst.currentDay,
												inst.currentMonth,
												inst.currentYear));
							this._stayOpen = false;
							if (this._datepickerShowing) {
								duration = (duration != null ? duration : this
										._get(inst, 'duration'));
								var showAnim = this._get(inst, 'showAnim');
								var postProcess = function() {
									$.datepicker._tidyDialog(inst);
								};
								if (duration != '' && $.effects
										&& $.effects[showAnim])
									inst.dpDiv.hide(showAnim, $.datepicker
											._get(inst, 'showOptions'),
											duration, postProcess);
								else
									inst.dpDiv[(duration == '' ? 'hide'
											: (showAnim == 'slideDown' ? 'slideUp'
													: (showAnim == 'fadeIn' ? 'fadeOut'
															: 'hide')))](
											duration, postProcess);
								if (duration == '')
									this._tidyDialog(inst);
								var onClose = this._get(inst, 'onClose');
								if (onClose)
									onClose.apply((inst.input ? inst.input[0]
											: null), [ this._getDate(inst),
											inst ]);
								this._datepickerShowing = false;
								this._lastInput = null;
								inst.settings.prompt = null;
								if (this._inDialog) {
									this._dialogInput.css( {
										position : 'absolute',
										left : '0',
										top : '-100px'
									});
									if ($.blockUI) {
										$.unblockUI();
										$('body').append(this.dpDiv);
									}
								}
								this._inDialog = false;
							}
							this._curInst = null;
						},
						_tidyDialog : function(inst) {
							inst.dpDiv.removeClass(this._dialogClass).unbind(
									'.ui-datepicker');
							$('.' + this._promptClass, inst.dpDiv).remove();
						},
						_checkExternalClick : function(event) {
							if (!$.datepicker._curInst)
								return;
							var $target = $(event.target);
							if (($target.parents('#' + $.datepicker._mainDivId).length == 0)
									&& !$target
											.hasClass($.datepicker.markerClassName)
									&& !$target
											.hasClass($.datepicker._triggerClass)
									&& $.datepicker._datepickerShowing
									&& !($.datepicker._inDialog && $.blockUI))
								$.datepicker._hideDatepicker(null, '');
						},
						_adjustDate : function(id, offset, period) {
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							this._adjustInstDate(inst, offset, period);
							this._updateDatepicker(inst);
						},
						_gotoToday : function(id) {
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							if (this._get(inst, 'gotoCurrent')
									&& inst.currentDay) {
								inst.selectedDay = inst.currentDay;
								inst.drawMonth = inst.selectedMonth = inst.currentMonth;
								inst.drawYear = inst.selectedYear = inst.currentYear;
							} else {
								var date = new Date();
								inst.selectedDay = date.getDate();
								inst.drawMonth = inst.selectedMonth = date
										.getMonth();
								inst.drawYear = inst.selectedYear = date
										.getFullYear();
							}
							this._adjustDate(target);
							this._notifyChange(inst);
						},
						_selectMonthYear : function(id, select, period) {
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							inst._selectingMonthYear = false;
							inst[period == 'M' ? 'drawMonth' : 'drawYear'] = select.options[select.selectedIndex].value - 0;
							this._adjustDate(target);
							this._notifyChange(inst);
						},
						_clickMonthYear : function(id) {
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							if (inst.input && inst._selectingMonthYear
									&& !$.browser.msie)
								inst.input[0].focus();
							inst._selectingMonthYear = !inst._selectingMonthYear;
						},
						_changeFirstDay : function(id, day) {
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							inst.settings.firstDay = day;
							this._updateDatepicker(inst);
						},
						_selectDay : function(id, month, year, td) {
							if ($(td).hasClass(this._unselectableClass))
								return;
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							var rangeSelect = this._get(inst, 'rangeSelect');
							if (rangeSelect) {
								this._stayOpen = !this._stayOpen;
								if (this._stayOpen) {
									$('.ui-datepicker td').removeClass(
											this._currentClass);
									$(td).addClass(this._currentClass);
								}
							}
							inst.selectedDay = inst.currentDay = $('a', td)
									.html();
							inst.selectedMonth = inst.currentMonth = month;
							inst.selectedYear = inst.currentYear = year;
							if (this._stayOpen) {
								inst.endDay = inst.endMonth = inst.endYear = null;
							} else if (rangeSelect) {
								inst.endDay = inst.currentDay;
								inst.endMonth = inst.currentMonth;
								inst.endYear = inst.currentYear;
							}
							this._selectDate(id, this._formatDate(inst,
									inst.currentDay, inst.currentMonth,
									inst.currentYear));
							if (this._stayOpen) {
								inst.rangeStart = this
										._daylightSavingAdjust(new Date(
												inst.currentYear,
												inst.currentMonth,
												inst.currentDay));
								this._updateDatepicker(inst);
							} else if (rangeSelect) {
								inst.selectedDay = inst.currentDay = inst.rangeStart
										.getDate();
								inst.selectedMonth = inst.currentMonth = inst.rangeStart
										.getMonth();
								inst.selectedYear = inst.currentYear = inst.rangeStart
										.getFullYear();
								inst.rangeStart = null;
								if (inst.inline)
									this._updateDatepicker(inst);
							}
						},
						_clearDate : function(id) {
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							if (this._get(inst, 'mandatory'))
								return;
							this._stayOpen = false;
							inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null;
							this._selectDate(target, '');
						},
						_selectDate : function(id, dateStr) {
							var target = $(id);
							var inst = $.data(target[0], PROP_NAME);
							dateStr = (dateStr != null ? dateStr : this
									._formatDate(inst));
							if (this._get(inst, 'rangeSelect') && dateStr)
								dateStr = (inst.rangeStart ? this._formatDate(
										inst, inst.rangeStart) : dateStr)
										+ this._get(inst, 'rangeSeparator')
										+ dateStr;
							if (inst.input)
								inst.input.val(dateStr);
							this._updateAlternate(inst);
							var onSelect = this._get(inst, 'onSelect');
							if (onSelect)
								onSelect.apply((inst.input ? inst.input[0]
										: null), [ dateStr, inst ]);
							else if (inst.input)
								inst.input.trigger('change');
							if (inst.inline)
								this._updateDatepicker(inst);
							else if (!this._stayOpen) {
								this._hideDatepicker(null, this._get(inst,
										'duration'));
								this._lastInput = inst.input[0];
								if (typeof (inst.input[0]) != 'object')
									inst.input[0].focus();
								this._lastInput = null;
							}
						},
						_updateAlternate : function(inst) {
							var altField = this._get(inst, 'altField');
							if (altField) {
								var altFormat = this._get(inst, 'altFormat');
								var date = this._getDate(inst);
								dateStr = (isArray(date) ? (!date[0]
										&& !date[1] ? '' : this.formatDate(
										altFormat, date[0], this
												._getFormatConfig(inst))
										+ this._get(inst, 'rangeSeparator')
										+ this.formatDate(altFormat, date[1]
												|| date[0], this
												._getFormatConfig(inst)))
										: this.formatDate(altFormat, date, this
												._getFormatConfig(inst)));
								$(altField).each(function() {
									$(this).val(dateStr);
								});
							}
						},
						noWeekends : function(date) {
							var day = date.getDay();
							return [ (day > 0 && day < 6), '' ];
						},
						iso8601Week : function(date) {
							var checkDate = new Date(date.getFullYear(), date
									.getMonth(), date.getDate());
							var firstMon = new Date(checkDate.getFullYear(),
									1 - 1, 4);
							var firstDay = firstMon.getDay() || 7;
							firstMon.setDate(firstMon.getDate() + 1 - firstDay);
							if (firstDay < 4 && checkDate < firstMon) {
								checkDate.setDate(checkDate.getDate() - 3);
								return $.datepicker.iso8601Week(checkDate);
							} else if (checkDate > new Date(checkDate
									.getFullYear(), 12 - 1, 28)) {
								firstDay = new Date(
										checkDate.getFullYear() + 1, 1 - 1, 4)
										.getDay() || 7;
								if (firstDay > 4
										&& (checkDate.getDay() || 7) < firstDay - 3) {
									checkDate.setDate(checkDate.getDate() + 3);
									return $.datepicker.iso8601Week(checkDate);
								}
							}
							return Math
									.floor(((checkDate - firstMon) / 86400000) / 7) + 1;
						},
						dateStatus : function(date, inst) {
							return $.datepicker.formatDate($.datepicker._get(
									inst, 'dateStatus'), date, $.datepicker
									._getFormatConfig(inst));
						},
						parseDate : function(format, value, settings) {
							if (format == null || value == null)
								throw 'Invalid arguments';
							value = (typeof value == 'object' ? value
									.toString() : value + '');
							if (value == '')
								return null;
							var shortYearCutoff = (settings ? settings.shortYearCutoff
									: null)
									|| this._defaults.shortYearCutoff;
							var dayNamesShort = (settings ? settings.dayNamesShort
									: null)
									|| this._defaults.dayNamesShort;
							var dayNames = (settings ? settings.dayNames : null)
									|| this._defaults.dayNames;
							var monthNamesShort = (settings ? settings.monthNamesShort
									: null)
									|| this._defaults.monthNamesShort;
							var monthNames = (settings ? settings.monthNames
									: null)
									|| this._defaults.monthNames;
							var year = -1;
							var month = -1;
							var day = -1;
							var literal = false;
							var lookAhead = function(match) {
								var matches = (iFormat + 1 < format.length && format
										.charAt(iFormat + 1) == match);
								if (matches)
									iFormat++;
								return matches;
							};
							var getNumber = function(match) {
								lookAhead(match);
								var origSize = (match == '@' ? 14
										: (match == 'y' ? 4 : 2));
								var size = origSize;
								var num = 0;
								while (size > 0 && iValue < value.length
										&& value.charAt(iValue) >= '0'
										&& value.charAt(iValue) <= '9') {
									num = num * 10
											+ (value.charAt(iValue++) - 0);
									size--;
								}
								if (size == origSize)
									throw 'Missing number at position ' + iValue;
								return num;
							};
							var getName = function(match, shortNames, longNames) {
								var names = (lookAhead(match) ? longNames
										: shortNames);
								var size = 0;
								for ( var j = 0; j < names.length; j++)
									size = Math.max(size, names[j].length);
								var name = '';
								var iInit = iValue;
								while (size > 0 && iValue < value.length) {
									name += value.charAt(iValue++);
									for ( var i = 0; i < names.length; i++)
										if (name == names[i])
											return i + 1;
									size--;
								}
								throw 'Unknown name at position ' + iInit;
							};
							var checkLiteral = function() {
								if (value.charAt(iValue) != format
										.charAt(iFormat))
									throw 'Unexpected literal at position ' + iValue;
								iValue++;
							};
							var iValue = 0;
							for ( var iFormat = 0; iFormat < format.length; iFormat++) {
								if (literal)
									if (format.charAt(iFormat) == "'"
											&& !lookAhead("'"))
										literal = false;
									else
										checkLiteral();
								else
									switch (format.charAt(iFormat)) {
									case 'd':
										day = getNumber('d');
										break;
									case 'D':
										getName('D', dayNamesShort, dayNames);
										break;
									case 'm':
										month = getNumber('m');
										break;
									case 'M':
										month = getName('M', monthNamesShort,
												monthNames);
										break;
									case 'y':
										year = getNumber('y');
										break;
									case '@':
										var date = new Date(getNumber('@'));
										year = date.getFullYear();
										month = date.getMonth() + 1;
										day = date.getDate();
										break;
									case "'":
										if (lookAhead("'"))
											checkLiteral();
										else
											literal = true;
										break;
									default:
										checkLiteral();
									}
							}
							if (year < 100)
								year += new Date().getFullYear()
										- new Date().getFullYear() % 100
										+ (year <= shortYearCutoff ? 0 : -100);
							var date = this._daylightSavingAdjust(new Date(
									year, month - 1, day));
							if (date.getFullYear() != year
									|| date.getMonth() + 1 != month
									|| date.getDate() != day)
								throw 'Invalid date';
							return date;
						},
						ATOM : 'yy-mm-dd',
						COOKIE : 'D, dd M yy',
						ISO_8601 : 'yy-mm-dd',
						RFC_822 : 'D, d M y',
						RFC_850 : 'DD, dd-M-y',
						RFC_1036 : 'D, d M y',
						RFC_1123 : 'D, d M yy',
						RFC_2822 : 'D, d M yy',
						RSS : 'D, d M y',
						TIMESTAMP : '@',
						W3C : 'yy-mm-dd',
						formatDate : function(format, date, settings) {
							if (!date)
								return '';
							var dayNamesShort = (settings ? settings.dayNamesShort
									: null)
									|| this._defaults.dayNamesShort;
							var dayNames = (settings ? settings.dayNames : null)
									|| this._defaults.dayNames;
							var monthNamesShort = (settings ? settings.monthNamesShort
									: null)
									|| this._defaults.monthNamesShort;
							var monthNames = (settings ? settings.monthNames
									: null)
									|| this._defaults.monthNames;
							var lookAhead = function(match) {
								var matches = (iFormat + 1 < format.length && format
										.charAt(iFormat + 1) == match);
								if (matches)
									iFormat++;
								return matches;
							};
							var formatNumber = function(match, value) {
								return (lookAhead(match) && value < 10 ? '0'
										: '')
										+ value;
							};
							var formatName = function(match, value, shortNames,
									longNames) {
								return (lookAhead(match) ? longNames[value]
										: shortNames[value]);
							};
							var output = '';
							var literal = false;
							if (date)
								for ( var iFormat = 0; iFormat < format.length; iFormat++) {
									if (literal)
										if (format.charAt(iFormat) == "'"
												&& !lookAhead("'"))
											literal = false;
										else
											output += format.charAt(iFormat);
									else
										switch (format.charAt(iFormat)) {
										case 'd':
											output += formatNumber('d', date
													.getDate());
											break;
										case 'D':
											output += formatName('D', date
													.getDay(), dayNamesShort,
													dayNames);
											break;
										case 'm':
											output += formatNumber('m', date
													.getMonth() + 1);
											break;
										case 'M':
											output += formatName('M', date
													.getMonth(),
													monthNamesShort, monthNames);
											break;
										case 'y':
											output += (lookAhead('y') ? date
													.getFullYear() : (date
													.getYear() % 100 < 10 ? '0'
													: '')
													+ date.getYear() % 100);
											break;
										case '@':
											output += date.getTime();
											break;
										case "'":
											if (lookAhead("'"))
												output += "'";
											else
												literal = true;
											break;
										default:
											output += format.charAt(iFormat);
										}
								}
							return output;
						},
						_possibleChars : function(format) {
							var chars = '';
							var literal = false;
							for ( var iFormat = 0; iFormat < format.length; iFormat++)
								if (literal)
									if (format.charAt(iFormat) == "'"
											&& !lookAhead("'"))
										literal = false;
									else
										chars += format.charAt(iFormat);
								else
									switch (format.charAt(iFormat)) {
									case 'd':
									case 'm':
									case 'y':
									case '@':
										chars += '0123456789';
										break;
									case 'D':
									case 'M':
										return null;
									case "'":
										if (lookAhead("'"))
											chars += "'";
										else
											literal = true;
										break;
									default:
										chars += format.charAt(iFormat);
									}
							return chars;
						},
						_get : function(inst, name) {
							return inst.settings[name] !== undefined ? inst.settings[name]
									: this._defaults[name];
						},
						_setDateFromField : function(inst) {
							var dateFormat = this._get(inst, 'dateFormat');
							var dates = inst.input ? inst.input.val().split(
									this._get(inst, 'rangeSeparator')) : null;
							inst.endDay = inst.endMonth = inst.endYear = null;
							var date = defaultDate = this._getDefaultDate(inst);
							if (dates.length > 0) {
								var settings = this._getFormatConfig(inst);
								if (dates.length > 1) {
									date = this.parseDate(dateFormat, dates[1],
											settings)
											|| defaultDate;
									inst.endDay = date.getDate();
									inst.endMonth = date.getMonth();
									inst.endYear = date.getFullYear();
								}
								try {
									date = this.parseDate(dateFormat, dates[0],
											settings)
											|| defaultDate;
								} catch (e) {
									this.log(e);
									date = defaultDate;
								}
							}
							inst.selectedDay = date.getDate();
							inst.drawMonth = inst.selectedMonth = date
									.getMonth();
							inst.drawYear = inst.selectedYear = date
									.getFullYear();
							inst.currentDay = (dates[0] ? date.getDate() : 0);
							inst.currentMonth = (dates[0] ? date.getMonth() : 0);
							inst.currentYear = (dates[0] ? date.getFullYear()
									: 0);
							this._adjustInstDate(inst);
						},
						_getDefaultDate : function(inst) {
							var date = this._determineDate(this._get(inst,
									'defaultDate'), new Date());
							var minDate = this
									._getMinMaxDate(inst, 'min', true);
							var maxDate = this._getMinMaxDate(inst, 'max');
							date = (minDate && date < minDate ? minDate : date);
							date = (maxDate && date > maxDate ? maxDate : date);
							return date;
						},
						_determineDate : function(date, defaultDate) {
							var offsetNumeric = function(offset) {
								var date = new Date();
								date.setDate(date.getDate() + offset);
								return date;
							};
							var offsetString = function(offset, getDaysInMonth) {
								var date = new Date();
								var year = date.getFullYear();
								var month = date.getMonth();
								var day = date.getDate();
								var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
								var matches = pattern.exec(offset);
								while (matches) {
									switch (matches[2] || 'd') {
									case 'd':
									case 'D':
										day += (matches[1] - 0);
										break;
									case 'w':
									case 'W':
										day += (matches[1] * 7);
										break;
									case 'm':
									case 'M':
										month += (matches[1] - 0);
										day = Math.min(day, getDaysInMonth(
												year, month));
										break;
									case 'y':
									case 'Y':
										year += (matches[1] - 0);
										day = Math.min(day, getDaysInMonth(
												year, month));
										break;
									}
									matches = pattern.exec(offset);
								}
								return new Date(year, month, day);
							};
							date = (date == null ? defaultDate
									: (typeof date == 'string' ? offsetString(
											date, this._getDaysInMonth)
											: (typeof date == 'number' ? (isNaN(date) ? defaultDate
													: offsetNumeric(date))
													: date)));
							date = (date && date.toString() == 'Invalid Date' ? defaultDate
									: date);
							if (date) {
								date.setHours(0);
								date.setMinutes(0);
								date.setSeconds(0);
								date.setMilliseconds(0);
							}
							return this._daylightSavingAdjust(date);
						},
						_daylightSavingAdjust : function(date) {
							if (!date)
								return null;
							date.setHours(date.getHours() > 12 ? date
									.getHours() + 2 : 0);
							return date;
						},
						_setDate : function(inst, date, endDate) {
							var clear = !(date);
							date = this._determineDate(date, new Date());
							inst.selectedDay = inst.currentDay = date.getDate();
							inst.drawMonth = inst.selectedMonth = inst.currentMonth = date
									.getMonth();
							inst.drawYear = inst.selectedYear = inst.currentYear = date
									.getFullYear();
							if (this._get(inst, 'rangeSelect')) {
								if (endDate) {
									endDate = this
											._determineDate(endDate, null);
									inst.endDay = endDate.getDate();
									inst.endMonth = endDate.getMonth();
									inst.endYear = endDate.getFullYear();
								} else {
									inst.endDay = inst.currentDay;
									inst.endMonth = inst.currentMonth;
									inst.endYear = inst.currentYear;
								}
							}
							this._adjustInstDate(inst);
							if (inst.input)
								inst.input.val(clear ? '' : this
										._formatDate(inst)
										+ (!this._get(inst, 'rangeSelect') ? ''
												: this._get(inst,
														'rangeSeparator')
														+ this._formatDate(
																inst,
																inst.endDay,
																inst.endMonth,
																inst.endYear)));
						},
						_getDate : function(inst) {
							var startDate = (!inst.currentYear
									|| (inst.input && inst.input.val() == '') ? null
									: this
											._daylightSavingAdjust(new Date(
													inst.currentYear,
													inst.currentMonth,
													inst.currentDay)));
							if (this._get(inst, 'rangeSelect')) {
								return [
										inst.rangeStart || startDate,
										(!inst.endYear ? inst.rangeStart
												|| startDate
												: this
														._daylightSavingAdjust(new Date(
																inst.endYear,
																inst.endMonth,
																inst.endDay))) ];
							} else
								return startDate;
						},
						_generateDatepicker : function(inst) {
							var today = new Date();
							today = this._daylightSavingAdjust(new Date(today
									.getFullYear(), today.getMonth(), today
									.getDate()));
							var showStatus = this._get(inst, 'showStatus');
							var isRTL = this._get(inst, 'isRTL');
							var clear = (this._get(inst, 'mandatory') ? ''
									: '<div class="ui-datepicker-clear"><a onclick="jQuery.datepicker._clearDate(\'#'
											+ inst.id
											+ '\');"'
											+ (showStatus ? this
													._addStatus(
															inst,
															this
																	._get(inst,
																			'clearStatus') || '&#xa0;')
													: '')
											+ '>'
											+ this._get(inst, 'clearText')
											+ '</a></div>');
							var controls = '<div class="ui-datepicker-control">'
									+ (isRTL ? '' : clear)
									+ '<div class="ui-datepicker-close"><a onclick="jQuery.datepicker._hideDatepicker();"'
									+ (showStatus ? this
											._addStatus(inst, this._get(inst,
													'closeStatus') || '&#xa0;')
											: '')
									+ '>'
									+ this._get(inst, 'closeText')
									+ '</a></div>'
									+ (isRTL ? clear : '')
									+ '</div>';
							var prompt = this._get(inst, 'prompt');
							var closeAtTop = this._get(inst, 'closeAtTop');
							var hideIfNoPrevNext = this._get(inst,
									'hideIfNoPrevNext');
							var navigationAsDateFormat = this._get(inst,
									'navigationAsDateFormat');
							var numMonths = this._getNumberOfMonths(inst);
							var stepMonths = this._get(inst, 'stepMonths');
							var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
							var currentDate = this
									._daylightSavingAdjust((!inst.currentDay ? new Date(
											9999, 9, 9)
											: new Date(inst.currentYear,
													inst.currentMonth,
													inst.currentDay)));
							var minDate = this
									._getMinMaxDate(inst, 'min', true);
							var maxDate = this._getMinMaxDate(inst, 'max');
							var drawMonth = inst.drawMonth;
							var drawYear = inst.drawYear;
							if (maxDate) {
								var maxDraw = this
										._daylightSavingAdjust(new Date(maxDate
												.getFullYear(), maxDate
												.getMonth()
												- numMonths[1] + 1, maxDate
												.getDate()));
								maxDraw = (minDate && maxDraw < minDate ? minDate
										: maxDraw);
								while (this._daylightSavingAdjust(new Date(
										drawYear, drawMonth, 1)) > maxDraw) {
									drawMonth--;
									if (drawMonth < 0) {
										drawMonth = 11;
										drawYear--;
									}
								}
							}
							var prevText = this._get(inst, 'prevText');
							prevText = (!navigationAsDateFormat ? prevText
									: this.formatDate(prevText, this
											._daylightSavingAdjust(new Date(
													drawYear, drawMonth
															- stepMonths, 1)),
											this._getFormatConfig(inst)));
							var prev = '<div class="ui-datepicker-prev">' + (this
									._canAdjustMonth(inst, -1, drawYear,
											drawMonth) ? '<a onclick="jQuery.datepicker._adjustDate(\'#'
									+ inst.id
									+ '\', -'
									+ stepMonths
									+ ', \'M\');"'
									+ (showStatus ? this
											._addStatus(inst, this._get(inst,
													'prevStatus') || '&#xa0;')
											: '') + '>' + prevText + '</a>'
									: (hideIfNoPrevNext ? ''
											: '<label>' + prevText + '</label>')) + '</div>';
							var nextText = this._get(inst, 'nextText');
							nextText = (!navigationAsDateFormat ? nextText
									: this.formatDate(nextText, this
											._daylightSavingAdjust(new Date(
													drawYear, drawMonth
															+ stepMonths, 1)),
											this._getFormatConfig(inst)));
							var next = '<div class="ui-datepicker-next">' + (this
									._canAdjustMonth(inst, +1, drawYear,
											drawMonth) ? '<a onclick="jQuery.datepicker._adjustDate(\'#'
									+ inst.id
									+ '\', +'
									+ stepMonths
									+ ', \'M\');"'
									+ (showStatus ? this
											._addStatus(inst, this._get(inst,
													'nextStatus') || '&#xa0;')
											: '') + '>' + nextText + '</a>'
									: (hideIfNoPrevNext ? ''
											: '<label>' + nextText + '</label>')) + '</div>';
							var currentText = this._get(inst, 'currentText');
							currentText = (!navigationAsDateFormat ? currentText
									: this.formatDate(currentText, today, this
											._getFormatConfig(inst)));
							var html = (prompt ? '<div class="'
									+ this._promptClass + '">' + prompt
									+ '</div>' : '')
									+ (closeAtTop && !inst.inline ? controls
											: '')
									+ '<div class="ui-datepicker-links">'
									+ (isRTL ? next : prev)
									+ (this._isInRange(inst, (this._get(inst,
											'gotoCurrent')
											&& inst.currentDay ? currentDate
											: today)) ? '<div class="ui-datepicker-current">'
											+ '<a onclick="jQuery.datepicker._gotoToday(\'#'
											+ inst.id
											+ '\');"'
											+ (showStatus ? this
													._addStatus(
															inst,
															this
																	._get(inst,
																			'currentStatus') || '&#xa0;')
													: '')
											+ '>'
											+ currentText
											+ '</a></div>'
											: '')
									+ (isRTL ? prev : next)
									+ '</div>';
							var firstDay = this._get(inst, 'firstDay');
							var changeFirstDay = this._get(inst,
									'changeFirstDay');
							var dayNames = this._get(inst, 'dayNames');
							var dayNamesShort = this
									._get(inst, 'dayNamesShort');
							var dayNamesMin = this._get(inst, 'dayNamesMin');
							var monthNames = this._get(inst, 'monthNames');
							var beforeShowDay = this
									._get(inst, 'beforeShowDay');
							var highlightWeek = this
									._get(inst, 'highlightWeek');
							var showOtherMonths = this._get(inst,
									'showOtherMonths');
							var showWeeks = this._get(inst, 'showWeeks');
							var calculateWeek = this
									._get(inst, 'calculateWeek')
									|| this.iso8601Week;
							var status = (showStatus ? this._get(inst,
									'dayStatus') || '&#xa0;' : '');
							var dateStatus = this._get(inst, 'statusForDate')
									|| this.dateStatus;
							var endDate = inst.endDay ? this
									._daylightSavingAdjust(new Date(
											inst.endYear, inst.endMonth,
											inst.endDay)) : currentDate;
							for ( var row = 0; row < numMonths[0]; row++)
								for ( var col = 0; col < numMonths[1]; col++) {
									var selectedDate = this
											._daylightSavingAdjust(new Date(
													drawYear, drawMonth,
													inst.selectedDay));
									html += '<div class="ui-datepicker-one-month'
											+ (col == 0 ? ' ui-datepicker-new-row'
													: '')
											+ '">'
											+ this._generateMonthYearHeader(
													inst, drawMonth, drawYear,
													minDate, maxDate,
													selectedDate, row > 0
															|| col > 0,
													showStatus, monthNames)
											+ '<table class="ui-datepicker" cellpadding="0" cellspacing="0"><thead>'
											+ '<tr class="ui-datepicker-title-row">'
											+ (showWeeks ? '<td>' + this._get(
													inst, 'weekHeader') + '</td>'
													: '');
									for ( var dow = 0; dow < 7; dow++) {
										var day = (dow + firstDay) % 7;
										var dayStatus = (status.indexOf('DD') > -1 ? status
												.replace(/DD/, dayNames[day])
												: status.replace(/D/,
														dayNamesShort[day]));
										html += '<td'
												+ ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end-cell"'
														: '')
												+ '>'
												+ (!changeFirstDay ? '<span'
														: '<a onclick="jQuery.datepicker._changeFirstDay(\'#'
																+ inst.id
																+ '\', '
																+ day
																+ ');"')
												+ (showStatus ? this
														._addStatus(inst,
																dayStatus) : '')
												+ ' title="'
												+ dayNames[day]
												+ '">'
												+ dayNamesMin[day]
												+ (changeFirstDay ? '</a>'
														: '</span>') + '</td>';
									}
									html += '</tr></thead><tbody>';
									var daysInMonth = this._getDaysInMonth(
											drawYear, drawMonth);
									if (drawYear == inst.selectedYear
											&& drawMonth == inst.selectedMonth)
										inst.selectedDay = Math.min(
												inst.selectedDay, daysInMonth);
									var leadDays = (this._getFirstDayOfMonth(
											drawYear, drawMonth)
											- firstDay + 7) % 7;
									var numRows = (isMultiMonth ? 6 : Math
											.ceil((leadDays + daysInMonth) / 7));
									var printDate = this
											._daylightSavingAdjust(new Date(
													drawYear, drawMonth,
													1 - leadDays));
									for ( var dRow = 0; dRow < numRows; dRow++) {
										html += '<tr class="ui-datepicker-days-row">' + (showWeeks ? '<td class="ui-datepicker-week-col">' + calculateWeek(printDate) + '</td>'
												: '');
										for ( var dow = 0; dow < 7; dow++) {
											var daySettings = (beforeShowDay ? beforeShowDay
													.apply(
															(inst.input ? inst.input[0]
																	: null),
															[ printDate ])
													: [ true, '' ]);
											var otherMonth = (printDate
													.getMonth() != drawMonth);
											var unselectable = otherMonth
													|| !daySettings[0]
													|| (minDate && printDate < minDate)
													|| (maxDate && printDate > maxDate);
											html += '<td class="ui-datepicker-days-cell'
													+ ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end-cell'
															: '')
													+ (otherMonth ? ' ui-datepicker-otherMonth'
															: '')
													+ (printDate.getTime() == selectedDate
															.getTime()
															&& drawMonth == inst.selectedMonth ? ' ui-datepicker-days-cell-over'
															: '')
													+ (unselectable ? ' ' + this._unselectableClass
															: '')
													+ (otherMonth
															&& !showOtherMonths ? ''
															: ' '
																	+ daySettings[1]
																	+ (printDate
																			.getTime() >= currentDate
																			.getTime()
																			&& printDate
																					.getTime() <= endDate
																					.getTime() ? ' ' + this._currentClass
																			: '')
																	+ (printDate
																			.getTime() == today
																			.getTime() ? ' ui-datepicker-today'
																			: ''))
													+ '"'
													+ ((!otherMonth || showOtherMonths)
															&& daySettings[2] ? ' title="' + daySettings[2] + '"'
															: '')
													+ (unselectable ? (highlightWeek ? ' onmouseover="jQuery(this).parent().addClass(\'ui-datepicker-week-over\');"' + ' onmouseout="jQuery(this).parent().removeClass(\'ui-datepicker-week-over\');"'
															: '')
															: ' onmouseover="jQuery(this).addClass(\'ui-datepicker-days-cell-over\')'
																	+ (highlightWeek ? '.parent().addClass(\'ui-datepicker-week-over\')'
																			: '')
																	+ ';'
																	+ (!showStatus
																			|| (otherMonth && !showOtherMonths) ? ''
																			: 'jQuery(\'#ui-datepicker-status-'
																					+ inst.id
																					+ '\').html(\''
																					+ (dateStatus
																							.apply(
																									(inst.input ? inst.input[0]
																											: null),
																									[
																											printDate,
																											inst ]) || '&#xa0;')
																					+ '\');')
																	+ '"'
																	+ ' onmouseout="jQuery(this).removeClass(\'ui-datepicker-days-cell-over\')'
																	+ (highlightWeek ? '.parent().removeClass(\'ui-datepicker-week-over\')'
																			: '')
																	+ ';'
																	+ (!showStatus
																			|| (otherMonth && !showOtherMonths) ? ''
																			: 'jQuery(\'#ui-datepicker-status-' + inst.id + '\').html(\'&#xa0;\');')
																	+ '" onclick="jQuery.datepicker._selectDay(\'#'
																	+ inst.id
																	+ '\','
																	+ drawMonth
																	+ ','
																	+ drawYear
																	+ ', this);"')
													+ '>'
													+ (otherMonth ? (showOtherMonths ? printDate
															.getDate()
															: '&#xa0;')
															: (unselectable ? printDate
																	.getDate()
																	: '<a>' + printDate
																			.getDate() + '</a>'))
													+ '</td>';
											printDate.setDate(printDate
													.getDate() + 1);
											printDate = this
													._daylightSavingAdjust(printDate);
										}
										html += '</tr>';
									}
									drawMonth++;
									if (drawMonth > 11) {
										drawMonth = 0;
										drawYear++;
									}
									html += '</tbody></table></div>';
								}
							html += (showStatus ? '<div style="clear: both;"></div><div id="ui-datepicker-status-'
									+ inst.id
									+ '" class="ui-datepicker-status">'
									+ (this._get(inst, 'initStatus') || '&#xa0;')
									+ '</div>'
									: '')
									+ (!closeAtTop && !inst.inline ? controls
											: '')
									+ '<div style="clear: both;"></div>'
									+ ($.browser.msie
											&& parseInt($.browser.version) < 7
											&& !inst.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover"></iframe>'
											: '');
							return html;
						},
						_generateMonthYearHeader : function(inst, drawMonth,
								drawYear, minDate, maxDate, selectedDate,
								secondary, showStatus, monthNames) {
							minDate = (inst.rangeStart && minDate
									&& selectedDate < minDate ? selectedDate
									: minDate);
							var html = '<div class="ui-datepicker-header">';
							if (secondary || !this._get(inst, 'changeMonth'))
								html += monthNames[drawMonth] + '&#xa0;';
							else {
								var inMinYear = (minDate && minDate
										.getFullYear() == drawYear);
								var inMaxYear = (maxDate && maxDate
										.getFullYear() == drawYear);
								html += '<select class="ui-datepicker-new-month" '
										+ 'onchange="jQuery.datepicker._selectMonthYear(\'#'
										+ inst.id
										+ '\', this, \'M\');" '
										+ 'onclick="jQuery.datepicker._clickMonthYear(\'#'
										+ inst.id
										+ '\');"'
										+ (showStatus ? this
												._addStatus(
														inst,
														this._get(inst,
																'monthStatus') || '&#xa0;')
												: '') + '>';
								for ( var month = 0; month < 12; month++) {
									if ((!inMinYear || month >= minDate
											.getMonth())
											&& (!inMaxYear || month <= maxDate
													.getMonth()))
										html += '<option value="'
												+ month
												+ '"'
												+ (month == drawMonth ? ' selected="selected"'
														: '') + '>'
												+ monthNames[month]
												+ '</option>';
								}
								html += '</select>';
							}
							if (secondary || !this._get(inst, 'changeYear'))
								html += drawYear;
							else {
								var years = this._get(inst, 'yearRange').split(
										':');
								var year = 0;
								var endYear = 0;
								if (years.length != 2) {
									year = drawYear - 10;
									endYear = drawYear + 10;
								} else if (years[0].charAt(0) == '+'
										|| years[0].charAt(0) == '-') {
									year = endYear = new Date().getFullYear();
									year += parseInt(years[0], 10);
									endYear += parseInt(years[1], 10);
								} else {
									year = parseInt(years[0], 10);
									endYear = parseInt(years[1], 10);
								}
								year = (minDate ? Math.max(year, minDate
										.getFullYear()) : year);
								endYear = (maxDate ? Math.min(endYear, maxDate
										.getFullYear()) : endYear);
								html += '<select class="ui-datepicker-new-year" '
										+ 'onchange="jQuery.datepicker._selectMonthYear(\'#'
										+ inst.id
										+ '\', this, \'Y\');" '
										+ 'onclick="jQuery.datepicker._clickMonthYear(\'#'
										+ inst.id
										+ '\');"'
										+ (showStatus ? this
												._addStatus(
														inst,
														this._get(inst,
																'yearStatus') || '&#xa0;')
												: '') + '>';
								for (; year <= endYear; year++) {
									html += '<option value="'
											+ year
											+ '"'
											+ (year == drawYear ? ' selected="selected"'
													: '') + '>' + year
											+ '</option>';
								}
								html += '</select>';
							}
							html += '</div>';
							return html;
						},
						_addStatus : function(inst, text) {
							return ' onmouseover="jQuery(\'#ui-datepicker-status-'
									+ inst.id
									+ '\').html(\''
									+ text
									+ '\');" '
									+ 'onmouseout="jQuery(\'#ui-datepicker-status-'
									+ inst.id + '\').html(\'&#xa0;\');"';
						},
						_adjustInstDate : function(inst, offset, period) {
							var year = inst.drawYear
									+ (period == 'Y' ? offset : 0);
							var month = inst.drawMonth
									+ (period == 'M' ? offset : 0);
							var day = Math.min(inst.selectedDay, this
									._getDaysInMonth(year, month))
									+ (period == 'D' ? offset : 0);
							var date = this._daylightSavingAdjust(new Date(
									year, month, day));
							var minDate = this
									._getMinMaxDate(inst, 'min', true);
							var maxDate = this._getMinMaxDate(inst, 'max');
							date = (minDate && date < minDate ? minDate : date);
							date = (maxDate && date > maxDate ? maxDate : date);
							inst.selectedDay = date.getDate();
							inst.drawMonth = inst.selectedMonth = date
									.getMonth();
							inst.drawYear = inst.selectedYear = date
									.getFullYear();
							if (period == 'M' || period == 'Y')
								this._notifyChange(inst);
						},
						_notifyChange : function(inst) {
							var onChange = this._get(inst, 'onChangeMonthYear');
							if (onChange)
								onChange.apply((inst.input ? inst.input[0]
										: null), [
										new Date(inst.selectedYear,
												inst.selectedMonth, 1), inst ]);
						},
						_getNumberOfMonths : function(inst) {
							var numMonths = this._get(inst, 'numberOfMonths');
							return (numMonths == null ? [ 1, 1 ]
									: (typeof numMonths == 'number' ? [ 1,
											numMonths ] : numMonths));
						},
						_getMinMaxDate : function(inst, minMax, checkRange) {
							var date = this._determineDate(this._get(inst,
									minMax + 'Date'), null);
							return (!checkRange || !inst.rangeStart ? date
									: (!date || inst.rangeStart > date ? inst.rangeStart
											: date));
						},
						_getDaysInMonth : function(year, month) {
							return 32 - new Date(year, month, 32).getDate();
						},
						_getFirstDayOfMonth : function(year, month) {
							return new Date(year, month, 1).getDay();
						},
						_canAdjustMonth : function(inst, offset, curYear,
								curMonth) {
							var numMonths = this._getNumberOfMonths(inst);
							var date = this._daylightSavingAdjust(new Date(
									curYear, curMonth
											+ (offset < 0 ? offset
													: numMonths[1]), 1));
							if (offset < 0)
								date.setDate(this._getDaysInMonth(date
										.getFullYear(), date.getMonth()));
							return this._isInRange(inst, date);
						},
						_isInRange : function(inst, date) {
							var newMinDate = (!inst.rangeStart ? null : this
									._daylightSavingAdjust(new Date(
											inst.selectedYear,
											inst.selectedMonth,
											inst.selectedDay)));
							newMinDate = (newMinDate
									&& inst.rangeStart < newMinDate ? inst.rangeStart
									: newMinDate);
							var minDate = newMinDate
									|| this._getMinMaxDate(inst, 'min');
							var maxDate = this._getMinMaxDate(inst, 'max');
							return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));
						},
						_getFormatConfig : function(inst) {
							var shortYearCutoff = this._get(inst,
									'shortYearCutoff');
							shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff
									: new Date().getFullYear() % 100
											+ parseInt(shortYearCutoff, 10));
							return {
								shortYearCutoff : shortYearCutoff,
								dayNamesShort : this
										._get(inst, 'dayNamesShort'),
								dayNames : this._get(inst, 'dayNames'),
								monthNamesShort : this._get(inst,
										'monthNamesShort'),
								monthNames : this._get(inst, 'monthNames')
							};
						},
						_formatDate : function(inst, day, month, year) {
							if (!day) {
								inst.currentDay = inst.selectedDay;
								inst.currentMonth = inst.selectedMonth;
								inst.currentYear = inst.selectedYear;
							}
							var date = (day ? (typeof day == 'object' ? day
									: this._daylightSavingAdjust(new Date(year,
											month, day)))
									: this
											._daylightSavingAdjust(new Date(
													inst.currentYear,
													inst.currentMonth,
													inst.currentDay)));
							return this.formatDate(this
									._get(inst, 'dateFormat'), date, this
									._getFormatConfig(inst));
						}
					});
	function extendRemove(target, props) {
		$.extend(target, props);
		for ( var name in props)
			if (props[name] == null || props[name] == undefined)
				target[name] = props[name];
		return target;
	}
	;
	function isArray(a) {
		return (a && (($.browser.safari && typeof a == 'object' && a.length) || (a.constructor && a.constructor
				.toString().match(/\Array\(\)/))));
	}
	;
	$.fn.datepicker = function(options) {
		var otherArgs = Array.prototype.slice.call(arguments, 1);
		if (typeof options == 'string'
				&& (options == 'isDisabled' || options == 'getDate'))
			return $.datepicker['_' + options + 'Datepicker'].apply(
					$.datepicker, [ this[0] ].concat(otherArgs));
		return this
				.each(function() {
					typeof options == 'string' ? $.datepicker['_' + options + 'Datepicker']
							.apply($.datepicker, [ this ].concat(otherArgs))
							: $.datepicker._attachDatepicker(this, options);
				});
	};
	$.datepicker = new Datepicker();
	$(document).ready(
			function() {
				$(document.body).append($.datepicker.dpDiv).mousedown(
						$.datepicker._checkExternalClick);
			});
})(jQuery);;
(function($) {
	$.effects = $.effects || {};
	$
			.extend(
					$.effects,
					{
						save : function(el, set) {
							for ( var i = 0; i < set.length; i++) {
								if (set[i] !== null)
									$.data(el[0], "ec.storage." + set[i],
											el[0].style[set[i]]);
							}
						},
						restore : function(el, set) {
							for ( var i = 0; i < set.length; i++) {
								if (set[i] !== null)
									el.css(set[i], $.data(el[0], "ec.storage."
											+ set[i]));
							}
						},
						setMode : function(el, mode) {
							if (mode == 'toggle')
								mode = el.is(':hidden') ? 'show' : 'hide';
							return mode;
						},
						getBaseline : function(origin, original) {
							var y, x;
							switch (origin[0]) {
							case 'top':
								y = 0;
								break;
							case 'middle':
								y = 0.5;
								break;
							case 'bottom':
								y = 1;
								break;
							default:
								y = origin[0] / original.height;
							}
							;
							switch (origin[1]) {
							case 'left':
								x = 0;
								break;
							case 'center':
								x = 0.5;
								break;
							case 'right':
								x = 1;
								break;
							default:
								x = origin[1] / original.width;
							}
							;
							return {
								x : x,
								y : y
							};
						},
						createWrapper : function(el) {
							if (el.parent().attr('id') == 'fxWrapper')
								return el;
							var props = {
								width : el.outerWidth( {
									margin : true
								}),
								height : el.outerHeight( {
									margin : true
								}),
								'float' : el.css('float')
							};
							el
									.wrap('<div id="fxWrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');
							var wrapper = el.parent();
							if (el.css('position') == 'static') {
								wrapper.css( {
									position : 'relative'
								});
								el.css( {
									position : 'relative'
								});
							} else {
								var top = el.css('top');
								if (isNaN(parseInt(top)))
									top = 'auto';
								var left = el.css('left');
								if (isNaN(parseInt(left)))
									left = 'auto';
								wrapper.css( {
									position : el.css('position'),
									top : top,
									left : left,
									zIndex : el.css('z-index')
								}).show();
								el.css( {
									position : 'relative',
									top : 0,
									left : 0
								});
							}
							wrapper.css(props);
							return wrapper;
						},
						removeWrapper : function(el) {
							if (el.parent().attr('id') == 'fxWrapper')
								return el.parent().replaceWith(el);
							return el;
						},
						setTransition : function(el, list, factor, val) {
							val = val || {};
							$.each(list, function(i, x) {
								unit = el.cssUnit(x);
								if (unit[0] > 0)
									val[x] = unit[0] * factor + unit[1];
							});
							return val;
						},
						animateClass : function(value, duration, easing,
								callback) {
							var cb = (typeof easing == "function" ? easing
									: (callback ? callback : null));
							var ea = (typeof easing == "object" ? easing : null);
							return this
									.each(function() {
										var offset = {};
										var that = $(this);
										var oldStyleAttr = that.attr("style") || '';
										if (typeof oldStyleAttr == 'object')
											oldStyleAttr = oldStyleAttr["cssText"];
										if (value.toggle) {
											that.hasClass(value.toggle) ? value.remove = value.toggle
													: value.add = value.toggle;
										}
										var oldStyle = $
												.extend(
														{},
														(document.defaultView ? document.defaultView
																.getComputedStyle(
																		this,
																		null)
																: this.currentStyle));
										if (value.add)
											that.addClass(value.add);
										if (value.remove)
											that.removeClass(value.remove);
										var newStyle = $
												.extend(
														{},
														(document.defaultView ? document.defaultView
																.getComputedStyle(
																		this,
																		null)
																: this.currentStyle));
										if (value.add)
											that.removeClass(value.add);
										if (value.remove)
											that.addClass(value.remove);
										for ( var n in newStyle) {
											if (typeof newStyle[n] != "function"
													&& newStyle[n]
													&& n.indexOf("Moz") == -1
													&& n.indexOf("length") == -1
													&& newStyle[n] != oldStyle[n]
													&& (n.match(/color/i) || (!n
															.match(/color/i) && !isNaN(parseInt(
															newStyle[n], 10))))
													&& (oldStyle.position != "static" || (oldStyle.position == "static" && !n
															.match(/left|top|bottom|right/))))
												offset[n] = newStyle[n];
										}
										that
												.animate(
														offset,
														duration,
														ea,
														function() {
															if (typeof $(this)
																	.attr(
																			"style") == 'object') {
																$(this)
																		.attr(
																				"style")["cssText"] = "";
																$(this)
																		.attr(
																				"style")["cssText"] = oldStyleAttr;
															} else
																$(this)
																		.attr(
																				"style",
																				oldStyleAttr);
															if (value.add)
																$(this)
																		.addClass(
																				value.add);
															if (value.remove)
																$(this)
																		.removeClass(
																				value.remove);
															if (cb)
																cb
																		.apply(
																				this,
																				arguments);
														});
									});
						}
					});
	$.fn
			.extend( {
				_show : $.fn.show,
				_hide : $.fn.hide,
				__toggle : $.fn.toggle,
				_addClass : $.fn.addClass,
				_removeClass : $.fn.removeClass,
				_toggleClass : $.fn.toggleClass,
				effect : function(fx, o, speed, callback) {
					return $.effects[fx] ? $.effects[fx].call(this, {
						method : fx,
						options : o || {},
						duration : speed,
						callback : callback
					}) : null;
				},
				show : function() {
					if (!arguments[0]
							|| (arguments[0].constructor == Number || /(slow|normal|fast)/
									.test(arguments[0])))
						return this._show.apply(this, arguments);
					else {
						var o = arguments[1] || {};
						o['mode'] = 'show';
						return this.effect.apply(this, [ arguments[0], o,
								arguments[2] || o.duration,
								arguments[3] || o.callback ]);
					}
				},
				hide : function() {
					if (!arguments[0]
							|| (arguments[0].constructor == Number || /(slow|normal|fast)/
									.test(arguments[0])))
						return this._hide.apply(this, arguments);
					else {
						var o = arguments[1] || {};
						o['mode'] = 'hide';
						return this.effect.apply(this, [ arguments[0], o,
								arguments[2] || o.duration,
								arguments[3] || o.callback ]);
					}
				},
				toggle : function() {
					if (!arguments[0]
							|| (arguments[0].constructor == Number || /(slow|normal|fast)/
									.test(arguments[0]))
							|| (arguments[0].constructor == Function))
						return this.__toggle.apply(this, arguments);
					else {
						var o = arguments[1] || {};
						o['mode'] = 'toggle';
						return this.effect.apply(this, [ arguments[0], o,
								arguments[2] || o.duration,
								arguments[3] || o.callback ]);
					}
				},
				addClass : function(classNames, speed, easing, callback) {
					return speed ? $.effects.animateClass.apply(this, [ {
						add : classNames
					}, speed, easing, callback ]) : this._addClass(classNames);
				},
				removeClass : function(classNames, speed, easing, callback) {
					return speed ? $.effects.animateClass.apply(this, [ {
						remove : classNames
					}, speed, easing, callback ]) : this
							._removeClass(classNames);
				},
				toggleClass : function(classNames, speed, easing, callback) {
					return speed ? $.effects.animateClass.apply(this, [ {
						toggle : classNames
					}, speed, easing, callback ]) : this
							._toggleClass(classNames);
				},
				morph : function(remove, add, speed, easing, callback) {
					return $.effects.animateClass.apply(this, [ {
						add : add,
						remove : remove
					}, speed, easing, callback ]);
				},
				switchClass : function() {
					return this.morph.apply(this, arguments);
				},
				cssUnit : function(key) {
					var style = this.css(key), val = [];
					$.each( [ 'em', 'px', '%', 'pt' ], function(i, unit) {
						if (style.indexOf(unit) > 0)
							val = [ parseFloat(style), unit ];
					});
					return val;
				}
			});
	jQuery
			.each(
					[ 'backgroundColor', 'borderBottomColor',
							'borderLeftColor', 'borderRightColor',
							'borderTopColor', 'color', 'outlineColor' ],
					function(i, attr) {
						jQuery.fx.step[attr] = function(fx) {
							if (fx.state == 0) {
								fx.start = getColor(fx.elem, attr);
								fx.end = getRGB(fx.end);
							}
							fx.elem.style[attr] = "rgb("
									+ [
											Math
													.max(
															Math
																	.min(
																			parseInt((fx.pos * (fx.end[0] - fx.start[0]))
																					+ fx.start[0]),
																			255),
															0),
											Math
													.max(
															Math
																	.min(
																			parseInt((fx.pos * (fx.end[1] - fx.start[1]))
																					+ fx.start[1]),
																			255),
															0),
											Math
													.max(
															Math
																	.min(
																			parseInt((fx.pos * (fx.end[2] - fx.start[2]))
																					+ fx.start[2]),
																			255),
															0) ].join(",")
									+ ")";
						}
					});
	function getRGB(color) {
		var result;
		if (color && color.constructor == Array && color.length == 3)
			return color;
		if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/
				.exec(color))
			return [ parseInt(result[1]), parseInt(result[2]),
					parseInt(result[3]) ];
		if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/
				.exec(color))
			return [ parseFloat(result[1]) * 2.55,
					parseFloat(result[2]) * 2.55, parseFloat(result[3]) * 2.55 ];
		if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/
				.exec(color))
			return [ parseInt(result[1], 16), parseInt(result[2], 16),
					parseInt(result[3], 16) ];
		if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
			return [ parseInt(result[1] + result[1], 16),
					parseInt(result[2] + result[2], 16),
					parseInt(result[3] + result[3], 16) ];
		if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
			return colors['transparent']
		return colors[jQuery.trim(color).toLowerCase()];
	}
	function getColor(elem, attr) {
		var color;
		do {
			color = jQuery.curCSS(elem, attr);
			if (color != '' && color != 'transparent'
					|| jQuery.nodeName(elem, "body"))
				break;
			attr = "backgroundColor";
		} while (elem = elem.parentNode);
		return getRGB(color);
	}
	;
	var colors = {
		aqua : [ 0, 255, 255 ],
		azure : [ 240, 255, 255 ],
		beige : [ 245, 245, 220 ],
		black : [ 0, 0, 0 ],
		blue : [ 0, 0, 255 ],
		brown : [ 165, 42, 42 ],
		cyan : [ 0, 255, 255 ],
		darkblue : [ 0, 0, 139 ],
		darkcyan : [ 0, 139, 139 ],
		darkgrey : [ 169, 169, 169 ],
		darkgreen : [ 0, 100, 0 ],
		darkkhaki : [ 189, 183, 107 ],
		darkmagenta : [ 139, 0, 139 ],
		darkolivegreen : [ 85, 107, 47 ],
		darkorange : [ 255, 140, 0 ],
		darkorchid : [ 153, 50, 204 ],
		darkred : [ 139, 0, 0 ],
		darksalmon : [ 233, 150, 122 ],
		darkviolet : [ 148, 0, 211 ],
		fuchsia : [ 255, 0, 255 ],
		gold : [ 255, 215, 0 ],
		green : [ 0, 128, 0 ],
		indigo : [ 75, 0, 130 ],
		khaki : [ 240, 230, 140 ],
		lightblue : [ 173, 216, 230 ],
		lightcyan : [ 224, 255, 255 ],
		lightgreen : [ 144, 238, 144 ],
		lightgrey : [ 211, 211, 211 ],
		lightpink : [ 255, 182, 193 ],
		lightyellow : [ 255, 255, 224 ],
		lime : [ 0, 255, 0 ],
		magenta : [ 255, 0, 255 ],
		maroon : [ 128, 0, 0 ],
		navy : [ 0, 0, 128 ],
		olive : [ 128, 128, 0 ],
		orange : [ 255, 165, 0 ],
		pink : [ 255, 192, 203 ],
		purple : [ 128, 0, 128 ],
		violet : [ 128, 0, 128 ],
		red : [ 255, 0, 0 ],
		silver : [ 192, 192, 192 ],
		white : [ 255, 255, 255 ],
		yellow : [ 255, 255, 0 ],
		transparent : [ 255, 255, 255 ]
	};
	jQuery.easing['jswing'] = jQuery.easing['swing'];
	jQuery.extend(jQuery.easing, {
		def : 'easeOutQuad',
		swing : function(x, t, b, c, d) {
			return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
		},
		easeInQuad : function(x, t, b, c, d) {
			return c * (t /= d) * t + b;
		},
		easeOutQuad : function(x, t, b, c, d) {
			return -c * (t /= d) * (t - 2) + b;
		},
		easeInOutQuad : function(x, t, b, c, d) {
			if ((t /= d / 2) < 1)
				return c / 2 * t * t + b;
			return -c / 2 * ((--t) * (t - 2) - 1) + b;
		},
		easeInCubic : function(x, t, b, c, d) {
			return c * (t /= d) * t * t + b;
		},
		easeOutCubic : function(x, t, b, c, d) {
			return c * ((t = t / d - 1) * t * t + 1) + b;
		},
		easeInOutCubic : function(x, t, b, c, d) {
			if ((t /= d / 2) < 1)
				return c / 2 * t * t * t + b;
			return c / 2 * ((t -= 2) * t * t + 2) + b;
		},
		easeInQuart : function(x, t, b, c, d) {
			return c * (t /= d) * t * t * t + b;
		},
		easeOutQuart : function(x, t, b, c, d) {
			return -c * ((t = t / d - 1) * t * t * t - 1) + b;
		},
		easeInOutQuart : function(x, t, b, c, d) {
			if ((t /= d / 2) < 1)
				return c / 2 * t * t * t * t + b;
			return -c / 2 * ((t -= 2) * t * t * t - 2) + b;
		},
		easeInQuint : function(x, t, b, c, d) {
			return c * (t /= d) * t * t * t * t + b;
		},
		easeOutQuint : function(x, t, b, c, d) {
			return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
		},
		easeInOutQuint : function(x, t, b, c, d) {
			if ((t /= d / 2) < 1)
				return c / 2 * t * t * t * t * t + b;
			return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
		},
		easeInSine : function(x, t, b, c, d) {
			return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;
		},
		easeOutSine : function(x, t, b, c, d) {
			return c * Math.sin(t / d * (Math.PI / 2)) + b;
		},
		easeInOutSine : function(x, t, b, c, d) {
			return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
		},
		easeInExpo : function(x, t, b, c, d) {
			return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;
		},
		easeOutExpo : function(x, t, b, c, d) {
			return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
		},
		easeInOutExpo : function(x, t, b, c, d) {
			if (t == 0)
				return b;
			if (t == d)
				return b + c;
			if ((t /= d / 2) < 1)
				return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
			return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
		},
		easeInCirc : function(x, t, b, c, d) {
			return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
		},
		easeOutCirc : function(x, t, b, c, d) {
			return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
		},
		easeInOutCirc : function(x, t, b, c, d) {
			if ((t /= d / 2) < 1)
				return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
			return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
		},
		easeInElastic : function(x, t, b, c, d) {
			var s = 1.70158;
			var p = 0;
			var a = c;
			if (t == 0)
				return b;
			if ((t /= d) == 1)
				return b + c;
			if (!p)
				p = d * .3;
			if (a < Math.abs(c)) {
				a = c;
				var s = p / 4;
			} else
				var s = p / (2 * Math.PI) * Math.asin(c / a);
			return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s)
					* (2 * Math.PI) / p))
					+ b;
		},
		easeOutElastic : function(x, t, b, c, d) {
			var s = 1.70158;
			var p = 0;
			var a = c;
			if (t == 0)
				return b;
			if ((t /= d) == 1)
				return b + c;
			if (!p)
				p = d * .3;
			if (a < Math.abs(c)) {
				a = c;
				var s = p / 4;
			} else
				var s = p / (2 * Math.PI) * Math.asin(c / a);
			return a * Math.pow(2, -10 * t)
					* Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
		},
		easeInOutElastic : function(x, t, b, c, d) {
			var s = 1.70158;
			var p = 0;
			var a = c;
			if (t == 0)
				return b;
			if ((t /= d / 2) == 2)
				return b + c;
			if (!p)
				p = d * (.3 * 1.5);
			if (a < Math.abs(c)) {
				a = c;
				var s = p / 4;
			} else
				var s = p / (2 * Math.PI) * Math.asin(c / a);
			if (t < 1)
				return -.5
						* (a * Math.pow(2, 10 * (t -= 1)) * Math
								.sin((t * d - s) * (2 * Math.PI) / p)) + b;
			return a * Math.pow(2, -10 * (t -= 1))
					* Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
		},
		easeInBack : function(x, t, b, c, d, s) {
			if (s == undefined)
				s = 1.70158;
			return c * (t /= d) * t * ((s + 1) * t - s) + b;
		},
		easeOutBack : function(x, t, b, c, d, s) {
			if (s == undefined)
				s = 1.70158;
			return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
		},
		easeInOutBack : function(x, t, b, c, d, s) {
			if (s == undefined)
				s = 1.70158;
			if ((t /= d / 2) < 1)
				return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
			return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2)
					+ b;
		},
		easeInBounce : function(x, t, b, c, d) {
			return c - jQuery.easing.easeOutBounce(x, d - t, 0, c, d) + b;
		},
		easeOutBounce : function(x, t, b, c, d) {
			if ((t /= d) < (1 / 2.75)) {
				return c * (7.5625 * t * t) + b;
			} else if (t < (2 / 2.75)) {
				return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
			} else if (t < (2.5 / 2.75)) {
				return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
			} else {
				return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
			}
		},
		easeInOutBounce : function(x, t, b, c, d) {
			if (t < d / 2)
				return jQuery.easing.easeInBounce(x, t * 2, 0, c, d) * .5 + b;
			return jQuery.easing.easeOutBounce(x, t * 2 - d, 0, c, d) * .5 + c
					* .5 + b;
		}
	});
})(jQuery);
(function($) {
	$.effects.blind = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left' ];
			var mode = $.effects.setMode(el, o.options.mode || 'hide');
			var direction = o.options.direction || 'vertical';
			$.effects.save(el, props);
			el.show();
			var wrapper = $.effects.createWrapper(el).css( {
				overflow : 'hidden'
			});
			var ref = (direction == 'vertical') ? 'height' : 'width';
			var distance = (direction == 'vertical') ? wrapper.height()
					: wrapper.width();
			if (mode == 'show')
				wrapper.css(ref, 0);
			var animation = {};
			animation[ref] = mode == 'show' ? distance : 0;
			wrapper.animate(animation, o.duration, o.options.easing,
					function() {
						if (mode == 'hide')
							el.hide();
						$.effects.restore(el, props);
						$.effects.removeWrapper(el);
						if (o.callback)
							o.callback.apply(el[0], arguments);
						el.dequeue();
					});
		});
	};
})(jQuery);
(function($) {
	$.effects.bounce = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left' ];
			var mode = $.effects.setMode(el, o.options.mode || 'effect');
			var direction = o.options.direction || 'up';
			var distance = o.options.distance || 20;
			var times = o.options.times || 5;
			var speed = o.duration || 250;
			if (/show|hide/.test(mode))
				props.push('opacity');
			$.effects.save(el, props);
			el.show();
			$.effects.createWrapper(el);
			var ref = (direction == 'up' || direction == 'down') ? 'top'
					: 'left';
			var motion = (direction == 'up' || direction == 'left') ? 'pos'
					: 'neg';
			var distance = o.options.distance
					|| (ref == 'top' ? el.outerHeight( {
						margin : true
					}) / 3 : el.outerWidth( {
						margin : true
					}) / 3);
			if (mode == 'show')
				el.css('opacity', 0).css(ref,
						motion == 'pos' ? -distance : distance);
			if (mode == 'hide')
				distance = distance / (times * 2);
			if (mode != 'hide')
				times--;
			if (mode == 'show') {
				var animation = {
					opacity : 1
				};
				animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
				el.animate(animation, speed / 2, o.options.easing);
				distance = distance / 2;
				times--;
			}
			;
			for ( var i = 0; i < times; i++) {
				var animation1 = {}, animation2 = {};
				animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
				animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
				el.animate(animation1, speed / 2, o.options.easing).animate(
						animation2, speed / 2, o.options.easing);
				distance = (mode == 'hide') ? distance * 2 : distance / 2;
			}
			;
			if (mode == 'hide') {
				var animation = {
					opacity : 0
				};
				animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
				el.animate(animation, speed / 2, o.options.easing, function() {
					el.hide();
					$.effects.restore(el, props);
					$.effects.removeWrapper(el);
					if (o.callback)
						o.callback.apply(this, arguments);
				});
			} else {
				var animation1 = {}, animation2 = {};
				animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
				animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
				el.animate(animation1, speed / 2, o.options.easing).animate(
						animation2, speed / 2, o.options.easing, function() {
							$.effects.restore(el, props);
							$.effects.removeWrapper(el);
							if (o.callback)
								o.callback.apply(this, arguments);
						});
			}
			;
			el.queue('fx', function() {
				el.dequeue();
			});
			el.dequeue();
		});
	};
})(jQuery);
(function($) {
	$.effects.clip = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left', 'height',
					'width' ];
			var mode = $.effects.setMode(el, o.options.mode || 'hide');
			var direction = o.options.direction || 'vertical';
			$.effects.save(el, props);
			el.show();
			var wrapper = $.effects.createWrapper(el).css( {
				overflow : 'hidden'
			});
			var animate = el[0].tagName == 'IMG' ? wrapper : el;
			var ref = {
				size : (direction == 'vertical') ? 'height' : 'width',
				position : (direction == 'vertical') ? 'top' : 'left'
			};
			var distance = (direction == 'vertical') ? animate.height()
					: animate.width();
			if (mode == 'show') {
				animate.css(ref.size, 0);
				animate.css(ref.position, distance / 2);
			}
			var animation = {};
			animation[ref.size] = mode == 'show' ? distance : 0;
			animation[ref.position] = mode == 'show' ? 0 : distance / 2;
			animate.animate(animation, {
				queue : false,
				duration : o.duration,
				easing : o.options.easing,
				complete : function() {
					if (mode == 'hide')
						el.hide();
					$.effects.restore(el, props);
					$.effects.removeWrapper(el);
					if (o.callback)
						o.callback.apply(el[0], arguments);
					el.dequeue();
				}
			});
		});
	};
})(jQuery);
(function($) {
	$.effects.drop = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left', 'opacity' ];
			var mode = $.effects.setMode(el, o.options.mode || 'hide');
			var direction = o.options.direction || 'left';
			$.effects.save(el, props);
			el.show();
			$.effects.createWrapper(el);
			var ref = (direction == 'up' || direction == 'down') ? 'top'
					: 'left';
			var motion = (direction == 'up' || direction == 'left') ? 'pos'
					: 'neg';
			var distance = o.options.distance
					|| (ref == 'top' ? el.outerHeight( {
						margin : true
					}) / 2 : el.outerWidth( {
						margin : true
					}) / 2);
			if (mode == 'show')
				el.css('opacity', 0).css(ref,
						motion == 'pos' ? -distance : distance);
			var animation = {
				opacity : mode == 'show' ? 1 : 0
			};
			animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=')
					: (motion == 'pos' ? '-=' : '+='))
					+ distance;
			el.animate(animation, {
				queue : false,
				duration : o.duration,
				easing : o.options.easing,
				complete : function() {
					if (mode == 'hide')
						el.hide();
					$.effects.restore(el, props);
					$.effects.removeWrapper(el);
					if (o.callback)
						o.callback.apply(this, arguments);
					el.dequeue();
				}
			});
		});
	};
})(jQuery);
(function($) {
	$.effects.explode = function(o) {
		return this.queue(function() {
			var rows = o.options.pieces ? Math.round(Math
					.sqrt(o.options.pieces)) : 3;
			var cells = o.options.pieces ? Math.round(Math
					.sqrt(o.options.pieces)) : 3;
			o.options.mode = o.options.mode == 'toggle' ? ($(this).is(
					':visible') ? 'hide' : 'show') : o.options.mode;
			var el = $(this).show().css('visibility', 'hidden');
			var offset = el.offset();
			offset.top -= parseInt(el.css("marginTop")) || 0;
			offset.left -= parseInt(el.css("marginLeft")) || 0;
			var width = el.outerWidth(true);
			var height = el.outerHeight(true);
			for ( var i = 0; i < rows; i++) {
				for ( var j = 0; j < cells; j++) {
					el.clone().appendTo('body').wrap('<div></div>').css( {
						position : 'absolute',
						visibility : 'visible',
						left : -j * (width / cells),
						top : -i * (height / rows)
					}).parent().addClass('effects-explode').css(
							{
								position : 'absolute',
								overflow : 'hidden',
								width : width / cells,
								height : height / rows,
								left : offset.left
										+ j
										* (width / cells)
										+ (o.options.mode == 'show' ? (j - Math
												.floor(cells / 2))
												* (width / cells) : 0),
								top : offset.top
										+ i
										* (height / rows)
										+ (o.options.mode == 'show' ? (i - Math
												.floor(rows / 2))
												* (height / rows) : 0),
								opacity : o.options.mode == 'show' ? 0 : 1
							}).animate(
							{
								left : offset.left
										+ j
										* (width / cells)
										+ (o.options.mode == 'show' ? 0
												: (j - Math.floor(cells / 2))
														* (width / cells)),
								top : offset.top
										+ i
										* (height / rows)
										+ (o.options.mode == 'show' ? 0
												: (i - Math.floor(rows / 2))
														* (height / rows)),
								opacity : o.options.mode == 'show' ? 1 : 0
							}, o.duration || 500);
				}
			}
			setTimeout(function() {
				o.options.mode == 'show' ? el.css( {
					visibility : 'visible'
				}) : el.css( {
					visibility : 'visible'
				}).hide();
				if (o.callback)
					o.callback.apply(el[0]);
				el.dequeue();
				$('.effects-explode').remove();
			}, o.duration || 500);
		});
	};
})(jQuery);
(function($) {
	$.effects.fold = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left' ];
			var mode = $.effects.setMode(el, o.options.mode || 'hide');
			var size = o.options.size || 15;
			var horizFirst = !(!o.options.horizFirst);
			$.effects.save(el, props);
			el.show();
			var wrapper = $.effects.createWrapper(el).css( {
				overflow : 'hidden'
			});
			var widthFirst = ((mode == 'show') != horizFirst);
			var ref = widthFirst ? [ 'width', 'height' ]
					: [ 'height', 'width' ];
			var distance = widthFirst ? [ wrapper.width(), wrapper.height() ]
					: [ wrapper.height(), wrapper.width() ];
			var percent = /([0-9]+)%/.exec(size);
			if (percent)
				size = parseInt(percent[1]) / 100
						* distance[mode == 'hide' ? 0 : 1];
			if (mode == 'show')
				wrapper.css(horizFirst ? {
					height : 0,
					width : size
				} : {
					height : size,
					width : 0
				});
			var animation1 = {}, animation2 = {};
			animation1[ref[0]] = mode == 'show' ? distance[0] : size;
			animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
			wrapper.animate(animation1, o.duration / 2, o.options.easing)
					.animate(animation2, o.duration / 2, o.options.easing,
							function() {
								if (mode == 'hide')
									el.hide();
								$.effects.restore(el, props);
								$.effects.removeWrapper(el);
								if (o.callback)
									o.callback.apply(el[0], arguments);
								el.dequeue();
							});
		});
	};
})(jQuery);;
(function($) {
	$.effects.highlight = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'backgroundImage', 'backgroundColor',
					'opacity' ];
			var mode = $.effects.setMode(el, o.options.mode || 'show');
			var color = o.options.color || "#ffff99";
			var oldColor = el.css("backgroundColor");
			$.effects.save(el, props);
			el.show();
			el.css( {
				backgroundImage : 'none',
				backgroundColor : color
			});
			var animation = {
				backgroundColor : oldColor
			};
			if (mode == "hide")
				animation['opacity'] = 0;
			el.animate(animation, {
				queue : false,
				duration : o.duration,
				easing : o.options.easing,
				complete : function() {
					if (mode == "hide")
						el.hide();
					$.effects.restore(el, props);
					if (mode == "show" && jQuery.browser.msie)
						this.style.removeAttribute('filter');
					if (o.callback)
						o.callback.apply(this, arguments);
					el.dequeue();
				}
			});
		});
	};
})(jQuery);
(function($) {
	$.effects.pulsate = function(o) {
		return this.queue(function() {
			var el = $(this);
			var mode = $.effects.setMode(el, o.options.mode || 'show');
			var times = o.options.times || 5;
			if (mode == 'hide')
				times--;
			if (el.is(':hidden')) {
				el.css('opacity', 0);
				el.show();
				el.animate( {
					opacity : 1
				}, o.duration / 2, o.options.easing);
				times = times - 2;
			}
			for ( var i = 0; i < times; i++) {
				el.animate( {
					opacity : 0
				}, o.duration / 2, o.options.easing).animate( {
					opacity : 1
				}, o.duration / 2, o.options.easing);
			}
			;
			if (mode == 'hide') {
				el.animate( {
					opacity : 0
				}, o.duration / 2, o.options.easing, function() {
					el.hide();
					if (o.callback)
						o.callback.apply(this, arguments);
				});
			} else {
				el.animate( {
					opacity : 0
				}, o.duration / 2, o.options.easing).animate( {
					opacity : 1
				}, o.duration / 2, o.options.easing, function() {
					if (o.callback)
						o.callback.apply(this, arguments);
				});
			}
			;
			el.queue('fx', function() {
				el.dequeue();
			});
			el.dequeue();
		});
	};
})(jQuery);
(function($) {
	$.effects.puff = function(o) {
		return this.queue(function() {
			var el = $(this);
			var options = $.extend(true, {}, o.options);
			var mode = $.effects.setMode(el, o.options.mode || 'hide');
			var percent = parseInt(o.options.percent) || 150;
			options.fade = true;
			var original = {
				height : el.height(),
				width : el.width()
			};
			var factor = percent / 100;
			el.from = (mode == 'hide') ? original : {
				height : original.height * factor,
				width : original.width * factor
			};
			options.from = el.from;
			options.percent = (mode == 'hide') ? percent : 100;
			options.mode = mode;
			el.effect('scale', options, o.duration, o.callback);
			el.dequeue();
		});
	};
	$.effects.scale = function(o) {
		return this.queue(function() {
			var el = $(this);
			var options = $.extend(true, {}, o.options);
			var mode = $.effects.setMode(el, o.options.mode || 'effect');
			var percent = parseInt(o.options.percent)
					|| (parseInt(o.options.percent) == 0 ? 0
							: (mode == 'hide' ? 0 : 100));
			var direction = o.options.direction || 'both';
			var origin = o.options.origin;
			if (mode != 'effect') {
				options.origin = origin || [ 'middle', 'center' ];
				options.restore = true;
			}
			var original = {
				height : el.height(),
				width : el.width()
			};
			el.from = o.options.from || (mode == 'show' ? {
				height : 0,
				width : 0
			} : original);
			var factor = {
				y : direction != 'horizontal' ? (percent / 100) : 1,
				x : direction != 'vertical' ? (percent / 100) : 1
			};
			el.to = {
				height : original.height * factor.y,
				width : original.width * factor.x
			};
			if (o.options.fade) {
				if (mode == 'show') {
					el.from.opacity = 0;
					el.to.opacity = 1;
				}
				;
				if (mode == 'hide') {
					el.from.opacity = 1;
					el.to.opacity = 0;
				}
				;
			}
			;
			options.from = el.from;
			options.to = el.to;
			options.mode = mode;
			el.effect('size', options, o.duration, o.callback);
			el.dequeue();
		});
	};
	$.effects.size = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left', 'width',
					'height', 'overflow', 'opacity' ];
			var props1 = [ 'position', 'top', 'left', 'overflow', 'opacity' ];
			var props2 = [ 'width', 'height', 'overflow' ];
			var cProps = [ 'fontSize' ];
			var vProps = [ 'borderTopWidth', 'borderBottomWidth', 'paddingTop',
					'paddingBottom' ];
			var hProps = [ 'borderLeftWidth', 'borderRightWidth',
					'paddingLeft', 'paddingRight' ];
			var mode = $.effects.setMode(el, o.options.mode || 'effect');
			var restore = o.options.restore || false;
			var scale = o.options.scale || 'both';
			var origin = o.options.origin;
			var original = {
				height : el.height(),
				width : el.width()
			};
			el.from = o.options.from || original;
			el.to = o.options.to || original;
			if (origin) {
				var baseline = $.effects.getBaseline(origin, original);
				el.from.top = (original.height - el.from.height) * baseline.y;
				el.from.left = (original.width - el.from.width) * baseline.x;
				el.to.top = (original.height - el.to.height) * baseline.y;
				el.to.left = (original.width - el.to.width) * baseline.x;
			}
			;
			var factor = {
				from : {
					y : el.from.height / original.height,
					x : el.from.width / original.width
				},
				to : {
					y : el.to.height / original.height,
					x : el.to.width / original.width
				}
			};
			if (scale == 'box' || scale == 'both') {
				if (factor.from.y != factor.to.y) {
					props = props.concat(vProps);
					el.from = $.effects.setTransition(el, vProps,
							factor.from.y, el.from);
					el.to = $.effects.setTransition(el, vProps, factor.to.y,
							el.to);
				}
				;
				if (factor.from.x != factor.to.x) {
					props = props.concat(hProps);
					el.from = $.effects.setTransition(el, hProps,
							factor.from.x, el.from);
					el.to = $.effects.setTransition(el, hProps, factor.to.x,
							el.to);
				}
				;
			}
			;
			if (scale == 'content' || scale == 'both') {
				if (factor.from.y != factor.to.y) {
					props = props.concat(cProps);
					el.from = $.effects.setTransition(el, cProps,
							factor.from.y, el.from);
					el.to = $.effects.setTransition(el, cProps, factor.to.y,
							el.to);
				}
				;
			}
			;
			$.effects.save(el, restore ? props : props1);
			el.show();
			$.effects.createWrapper(el);
			el.css('overflow', 'hidden').css(el.from);
			if (scale == 'content' || scale == 'both') {
				vProps = vProps.concat( [ 'marginTop', 'marginBottom' ])
						.concat(cProps);
				hProps = hProps.concat( [ 'marginLeft', 'marginRight' ]);
				props2 = props.concat(vProps).concat(hProps);
				el.find("*[width]").each(
						function() {
							child = $(this);
							if (restore)
								$.effects.save(child, props2);
							var c_original = {
								height : child.height(),
								width : child.width()
							};
							child.from = {
								height : c_original.height * factor.from.y,
								width : c_original.width * factor.from.x
							};
							child.to = {
								height : c_original.height * factor.to.y,
								width : c_original.width * factor.to.x
							};
							if (factor.from.y != factor.to.y) {
								child.from = $.effects.setTransition(child,
										vProps, factor.from.y, child.from);
								child.to = $.effects.setTransition(child,
										vProps, factor.to.y, child.to);
							}
							;
							if (factor.from.x != factor.to.x) {
								child.from = $.effects.setTransition(child,
										hProps, factor.from.x, child.from);
								child.to = $.effects.setTransition(child,
										hProps, factor.to.x, child.to);
							}
							;
							child.css(child.from);
							child.animate(child.to, o.duration,
									o.options.easing, function() {
										if (restore)
											$.effects.restore(child, props2);
									});
						});
			}
			;
			el.animate(el.to, {
				queue : false,
				duration : o.duration,
				easing : o.options.easing,
				complete : function() {
					if (mode == 'hide')
						el.hide();
					$.effects.restore(el, restore ? props : props1);
					$.effects.removeWrapper(el);
					if (o.callback)
						o.callback.apply(this, arguments);
					el.dequeue();
				}
			});
		});
	};
})(jQuery);
(function($) {
	$.effects.shake = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left' ];
			var mode = $.effects.setMode(el, o.options.mode || 'effect');
			var direction = o.options.direction || 'left';
			var distance = o.options.distance || 20;
			var times = o.options.times || 3;
			var speed = o.duration || o.options.duration || 140;
			$.effects.save(el, props);
			el.show();
			$.effects.createWrapper(el);
			var ref = (direction == 'up' || direction == 'down') ? 'top'
					: 'left';
			var motion = (direction == 'up' || direction == 'left') ? 'pos'
					: 'neg';
			var animation = {}, animation1 = {}, animation2 = {};
			animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
			animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2;
			animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2;
			el.animate(animation, speed, o.options.easing);
			for ( var i = 1; i < times; i++) {
				el.animate(animation1, speed, o.options.easing).animate(
						animation2, speed, o.options.easing);
			}
			;
			el.animate(animation1, speed, o.options.easing).animate(animation,
					speed / 2, o.options.easing, function() {
						$.effects.restore(el, props);
						$.effects.removeWrapper(el);
						if (o.callback)
							o.callback.apply(this, arguments);
					});
			el.queue('fx', function() {
				el.dequeue();
			});
			el.dequeue();
		});
	};
})(jQuery);
(function($) {
	$.effects.slide = function(o) {
		return this.queue(function() {
			var el = $(this), props = [ 'position', 'top', 'left' ];
			var mode = $.effects.setMode(el, o.options.mode || 'show');
			var direction = o.options.direction || 'left';
			$.effects.save(el, props);
			el.show();
			$.effects.createWrapper(el).css( {
				overflow : 'hidden'
			});
			var ref = (direction == 'up' || direction == 'down') ? 'top'
					: 'left';
			var motion = (direction == 'up' || direction == 'left') ? 'pos'
					: 'neg';
			var distance = o.options.distance
					|| (ref == 'top' ? el.outerHeight( {
						margin : true
					}) : el.outerWidth( {
						margin : true
					}));
			if (mode == 'show')
				el.css(ref, motion == 'pos' ? -distance : distance);
			var animation = {};
			animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=')
					: (motion == 'pos' ? '-=' : '+='))
					+ distance;
			el.animate(animation, {
				queue : false,
				duration : o.duration,
				easing : o.options.easing,
				complete : function() {
					if (mode == 'hide')
						el.hide();
					$.effects.restore(el, props);
					$.effects.removeWrapper(el);
					if (o.callback)
						o.callback.apply(this, arguments);
					el.dequeue();
				}
			});
		});
	};
})(jQuery);
(function($) {
	$.effects.transfer = function(o) {
		return this.queue(function() {
			var el = $(this);
			var mode = $.effects.setMode(el, o.options.mode || 'effect');
			var target = $(o.options.to);
			var position = el.offset();
			var transfer = $('<div class="ui-effects-transfer"></div>')
					.appendTo(document.body);
			if (o.options.className)
				transfer.addClass(o.options.className);
			transfer.addClass(o.options.className);
			transfer.css( {
				top : position.top,
				left : position.left,
				height : el.outerHeight()
						- parseInt(transfer.css('borderTopWidth'))
						- parseInt(transfer.css('borderBottomWidth')),
				width : el.outerWidth()
						- parseInt(transfer.css('borderLeftWidth'))
						- parseInt(transfer.css('borderRightWidth')),
				position : 'absolute'
			});
			position = target.offset();
			animation = {
				top : position.top,
				left : position.left,
				height : target.outerHeight()
						- parseInt(transfer.css('borderTopWidth'))
						- parseInt(transfer.css('borderBottomWidth')),
				width : target.outerWidth()
						- parseInt(transfer.css('borderLeftWidth'))
						- parseInt(transfer.css('borderRightWidth'))
			};
			transfer.animate(animation, o.duration, o.options.easing,
					function() {
						transfer.remove();
						if (o.callback)
							o.callback.apply(el[0], arguments);
						el.dequeue();
					});
		});
	};
	
})(jQuery);
