;
(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 = 0;
			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 : 'click',
		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);
