/*
 * jQuery 1.2.6 - New Wave Javascript
 *
 * Copyright (c) 2008 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
 * $Rev: 5685 $
 */
( function() {
	var _jQuery = window.jQuery, _$ = window.$;
	var jQuery = window.jQuery = window.$ = function(selector, context) {
		return new jQuery.fn.init(selector, context);
	};
	var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/, isSimple = /^.[^:#\[\.]*$/,
	undefined;
	jQuery.fn = jQuery.prototype = {
		init : function(selector, context) {
			selector = selector || document;
			if (selector.nodeType) {
				this[0] = selector;
				this.length = 1;
				return this;
			}
			if (typeof selector == "string") {
				var match = quickExpr.exec(selector);
				if (match && (match[1] || !context)) {
					if (match[1])
						selector = jQuery.clean( [ match[1] ], context);
					else {
						var elem = document.getElementById(match[3]);
						if (elem) {
							if (elem.id != match[3])
								return jQuery().find(selector);
							return jQuery(elem);
						}
						selector = [];
					}
				} else
					return jQuery(context).find(selector);
			} else if (jQuery.isFunction(selector))
				return jQuery(document)[jQuery.fn.ready ? "ready" : "load"]
						(selector);
			return this.setArray(jQuery.makeArray(selector));
		},
		jquery :"1.2.6",
		size : function() {
			return this.length;
		},
		length :0,
		get : function(num) {
			return num == undefined ? jQuery.makeArray(this) : this[num];
		},
		pushStack : function(elems) {
			var ret = jQuery(elems);
			ret.prevObject = this;
			return ret;
		},
		setArray : function(elems) {
			this.length = 0;
			Array.prototype.push.apply(this, elems);
			return this;
		},
		each : function(callback, args) {
			return jQuery.each(this, callback, args);
		},
		index : function(elem) {
			var ret = -1;
			return jQuery.inArray(elem && elem.jquery ? elem[0] : elem, this);
		},
		attr : function(name, value, type) {
			var options = name;
			if (name.constructor == String)
				if (value === undefined)
					return this[0] && jQuery[type || "attr"](this[0], name);
				else {
					options = {};
					options[name] = value;
				}
			return this.each( function(i) {
				for (name in options)
					jQuery.attr(type ? this.style : this, name, jQuery.prop(
							this, options[name], type, i, name));
			});
		},
		css : function(key, value) {
			if ((key == 'width' || key == 'height') && parseFloat(value) < 0)
				value = undefined;
			return this.attr(key, value, "curCSS");
		},
		text : function(text) {
			if (typeof text != "object" && text != null)
				return this.empty().append(
						(this[0] && this[0].ownerDocument || document)
								.createTextNode(text));
			var ret = "";
			jQuery.each(text || this, function() {
				jQuery.each(this.childNodes, function() {
					if (this.nodeType != 8)
						ret += this.nodeType != 1 ? this.nodeValue : jQuery.fn
								.text( [ this ]);
				});
			});
			return ret;
		},
		wrapAll : function(html) {
			if (this[0])
				jQuery(html, this[0].ownerDocument).clone().insertBefore(
						this[0]).map( function() {
					var elem = this;
					while (elem.firstChild)
						elem = elem.firstChild;
					return elem;
				}).append(this);
			return this;
		},
		wrapInner : function(html) {
			return this.each( function() {
				jQuery(this).contents().wrapAll(html);
			});
		},
		wrap : function(html) {
			return this.each( function() {
				jQuery(this).wrapAll(html);
			});
		},
		append : function() {
			return this.domManip(arguments, true, false, function(elem) {
				if (this.nodeType == 1)
					this.appendChild(elem);
			});
		},
		prepend : function() {
			return this.domManip(arguments, true, true, function(elem) {
				if (this.nodeType == 1)
					this.insertBefore(elem, this.firstChild);
			});
		},
		before : function() {
			return this.domManip(arguments, false, false, function(elem) {
				this.parentNode.insertBefore(elem, this);
			});
		},
		after : function() {
			return this.domManip(arguments, false, true, function(elem) {
				this.parentNode.insertBefore(elem, this.nextSibling);
			});
		},
		end : function() {
			return this.prevObject || jQuery( []);
		},
		find : function(selector) {
			var elems = jQuery.map(this, function(elem) {
				return jQuery.find(selector, elem);
			});
			return this.pushStack(/[^+>] [^+>]/.test(selector)
					|| selector.indexOf("..") > -1 ? jQuery.unique(elems)
					: elems);
		},
		clone : function(events) {
			var ret = this.map( function() {
				if (jQuery.browser.msie && !jQuery.isXMLDoc(this)) {
					var clone = this.cloneNode(true), container = document
							.createElement("div");
					container.appendChild(clone);
					return jQuery.clean( [ container.innerHTML ])[0];
				} else
					return this.cloneNode(true);
			});
			var clone = ret.find("*").andSelf().each( function() {
				if (this[expando] != undefined)
					this[expando] = null;
			});
			if (events === true)
				this.find("*").andSelf().each(
						function(i) {
							if (this.nodeType == 3)
								return;
							var events = jQuery.data(this, "events");
							for ( var type in events)
								for ( var handler in events[type])
									jQuery.event.add(clone[i], type,
											events[type][handler],
											events[type][handler].data);
						});
			return ret;
		},
		filter : function(selector) {
			return this.pushStack(jQuery.isFunction(selector)
					&& jQuery.grep(this, function(elem, i) {
						return selector.call(elem, i);
					}) || jQuery.multiFilter(selector, this));
		},
		not : function(selector) {
			if (selector.constructor == String)
				if (isSimple.test(selector))
					return this.pushStack(jQuery.multiFilter(selector, this,
							true));
				else
					selector = jQuery.multiFilter(selector, this);
			var isArrayLike = selector.length
					&& selector[selector.length - 1] !== undefined
					&& !selector.nodeType;
			return this.filter( function() {
				return isArrayLike ? jQuery.inArray(this, selector) < 0
						: this != selector;
			});
		},
		add : function(selector) {
			return this.pushStack(jQuery.unique(jQuery.merge(this.get(),
					typeof selector == 'string' ? jQuery(selector) : jQuery
							.makeArray(selector))));
		},
		is : function(selector) {
			return !!selector && jQuery.multiFilter(selector, this).length > 0;
		},
		hasClass : function(selector) {
			return this.is("." + selector);
		},
		val : function(value) {
			if (value == undefined) {
				if (this.length) {
					var elem = this[0];
					if (jQuery.nodeName(elem, "select")) {
						var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type == "select-one";
						if (index < 0)
							return null;
						for ( var i = one ? index : 0, max = one ? index + 1
								: options.length; i < max; i++) {
							var option = options[i];
							if (option.selected) {
								value = jQuery.browser.msie
										&& !option.attributes.value.specified ? option.text
										: option.value;
								if (one)
									return value;
								values.push(value);
							}
						}
						return values;
					} else
						return (this[0].value || "").replace(/\r/g, "");
				}
				return undefined;
			}
			if (value.constructor == Number)
				value += '';
			return this
					.each( function() {
						if (this.nodeType != 1)
							return;
						if (value.constructor == Array
								&& /radio|checkbox/.test(this.type))
							this.checked = (jQuery.inArray(this.value, value) >= 0 || jQuery
									.inArray(this.name, value) >= 0);
						else if (jQuery.nodeName(this, "select")) {
							var values = jQuery.makeArray(value);
							jQuery("option", this)
									.each(
											function() {
												this.selected = (jQuery
														.inArray(this.value,
																values) >= 0 || jQuery
														.inArray(this.text,
																values) >= 0);
											});
							if (!values.length)
								this.selectedIndex = -1;
						} else
							this.value = value;
					});
		},
		html : function(value) {
			return value == undefined ? (this[0] ? this[0].innerHTML : null)
					: this.empty().append(value);
		},
		replaceWith : function(value) {
			return this.after(value).remove();
		},
		eq : function(i) {
			return this.slice(i, i + 1);
		},
		slice : function() {
			return this.pushStack(Array.prototype.slice.apply(this, arguments));
		},
		map : function(callback) {
			return this.pushStack(jQuery.map(this, function(elem, i) {
				return callback.call(elem, i, elem);
			}));
		},
		andSelf : function() {
			return this.add(this.prevObject);
		},
		data : function(key, value) {
			var parts = key.split(".");
			parts[1] = parts[1] ? "." + parts[1] : "";
			if (value === undefined) {
				var data = this.triggerHandler("getData" + parts[1] + "!",
						[ parts[0] ]);
				if (data === undefined && this.length)
					data = jQuery.data(this[0], key);
				return data === undefined && parts[1] ? this.data(parts[0])
						: data;
			} else
				return this.trigger("setData" + parts[1] + "!",
						[ parts[0], value ]).each( function() {
					jQuery.data(this, key, value);
				});
		},
		removeData : function(key) {
			return this.each( function() {
				jQuery.removeData(this, key);
			});
		},
		domManip : function(args, table, reverse, callback) {
			var clone = this.length > 1, elems;
			return this.each( function() {
				if (!elems) {
					elems = jQuery.clean(args, this.ownerDocument);
					if (reverse)
						elems.reverse();
				}
				var obj = this;
				if (table && jQuery.nodeName(this, "table")
						&& jQuery.nodeName(elems[0], "tr"))
					obj = this.getElementsByTagName("tbody")[0]
							|| this.appendChild(this.ownerDocument
									.createElement("tbody"));
				var scripts = jQuery( []);
				jQuery.each(elems, function() {
					var elem = clone ? jQuery(this).clone(true)[0] : this;
					if (jQuery.nodeName(elem, "script"))
						scripts = scripts.add(elem);
					else {
						if (elem.nodeType == 1)
							scripts = scripts.add(jQuery("script", elem)
									.remove());
						callback.call(obj, elem);
					}
				});
				scripts.each(evalScript);
			});
		}
	};
	jQuery.fn.init.prototype = jQuery.fn;
	function evalScript(i, elem) {
		if (elem.src)
			jQuery.ajax( {
				url :elem.src,
				async :false,
				dataType :"script"
			});
		else
			jQuery.globalEval(elem.text || elem.textContent || elem.innerHTML
					|| "");
		if (elem.parentNode)
			elem.parentNode.removeChild(elem);
	}
	function now() {
		return +new Date;
	}
	jQuery.extend = jQuery.fn.extend = function() {
		var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
		if (target.constructor == Boolean) {
			deep = target;
			target = arguments[1] || {};
			i = 2;
		}
		if (typeof target != "object" && typeof target != "function")
			target = {};
		if (length == i) {
			target = this;
			--i;
		}
		for (; i < length; i++)
			if ((options = arguments[i]) != null)
				for ( var name in options) {
					var src = target[name], copy = options[name];
					if (target === copy)
						continue;
					if (deep && copy && typeof copy == "object"
							&& !copy.nodeType)
						target[name] = jQuery.extend(deep, src
								|| (copy.length != null ? [] : {}), copy);
					else if (copy !== undefined)
						target[name] = copy;
				}
		return target;
	};
	var expando = "jQuery" + now(), uuid = 0, windowData = {}, exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, defaultView = document.defaultView
			|| {};
	jQuery
			.extend( {
				noConflict : function(deep) {
					window.$ = _$;
					if (deep)
						window.jQuery = _jQuery;
					return jQuery;
				},
				isFunction : function(fn) {
					return !!fn && typeof fn != "string" && !fn.nodeName
							&& fn.constructor != Array
							&& /^[\s[]?function/.test(fn + "");
				},
				isXMLDoc : function(elem) {
					return elem.documentElement && !elem.body || elem.tagName
							&& elem.ownerDocument && !elem.ownerDocument.body;
				},
				globalEval : function(data) {
					data = jQuery.trim(data);
					if (data) {
						var head = document.getElementsByTagName("head")[0]
								|| document.documentElement, script = document
								.createElement("script");
						script.type = "text/javascript";
						if (jQuery.browser.msie)
							script.text = data;
						else
							script.appendChild(document.createTextNode(data));
						head.insertBefore(script, head.firstChild);
						head.removeChild(script);
					}
				},
				nodeName : function(elem, name) {
					return elem.nodeName
							&& elem.nodeName.toUpperCase() == name
									.toUpperCase();
				},
				cache : {},
				data : function(elem, name, data) {
					elem = elem == window ? windowData : elem;
					var id = elem[expando];
					if (!id)
						id = elem[expando] = ++uuid;
					if (name && !jQuery.cache[id])
						jQuery.cache[id] = {};
					if (data !== undefined)
						jQuery.cache[id][name] = data;
					return name ? jQuery.cache[id][name] : id;
				},
				removeData : function(elem, name) {
					elem = elem == window ? windowData : elem;
					var id = elem[expando];
					if (name) {
						if (jQuery.cache[id]) {
							delete jQuery.cache[id][name];
							name = "";
							for (name in jQuery.cache[id])
								break;
							if (!name)
								jQuery.removeData(elem);
						}
					} else {
						try {
							delete elem[expando];
						} catch (e) {
							if (elem.removeAttribute)
								elem.removeAttribute(expando);
						}
						delete jQuery.cache[id];
					}
				},
				each : function(object, callback, args) {
					var name, i = 0, length = object.length;
					if (args) {
						if (length == undefined) {
							for (name in object)
								if (callback.apply(object[name], args) === false)
									break;
						} else
							for (; i < length;)
								if (callback.apply(object[i++], args) === false)
									break;
					} else {
						if (length == undefined) {
							for (name in object)
								if (callback.call(object[name], name,
										object[name]) === false)
									break;
						} else
							for ( var value = object[0]; i < length
									&& callback.call(value, i, value) !== false; value = object[++i]) {
							}
					}
					return object;
				},
				prop : function(elem, value, type, i, name) {
					if (jQuery.isFunction(value))
						value = value.call(elem, i);
					return value && value.constructor == Number
							&& type == "curCSS" && !exclude.test(name) ? value
							+ "px" : value;
				},
				className : {
					add : function(elem, classNames) {
						jQuery.each((classNames || "").split(/\s+/), function(
								i, className) {
							if (elem.nodeType == 1
									&& !jQuery.className.has(elem.className,
											className))
								elem.className += (elem.className ? " " : "")
										+ className;
						});
					},
					remove : function(elem, classNames) {
						if (elem.nodeType == 1)
							elem.className = classNames != undefined ? jQuery
									.grep(
											elem.className.split(/\s+/),
											function(className) {
												return !jQuery.className.has(
														classNames, className);
											}).join(" ") : "";
					},
					has : function(elem, className) {
						return jQuery.inArray(className,
								(elem.className || elem).toString()
										.split(/\s+/)) > -1;
					}
				},
				swap : function(elem, options, callback) {
					var old = {};
					for ( var name in options) {
						old[name] = elem.style[name];
						elem.style[name] = options[name];
					}
					callback.call(elem);
					for ( var name in options)
						elem.style[name] = old[name];
				},
				css : function(elem, name, force) {
					if (name == "width" || name == "height") {
						var val, props = {
							position :"absolute",
							visibility :"hidden",
							display :"block"
						}, which = name == "width" ? [ "Left", "Right" ] : [
								"Top", "Bottom" ];
						function getWH() {
							val = name == "width" ? elem.offsetWidth
									: elem.offsetHeight;
							var padding = 0, border = 0;
							jQuery.each(which, function() {
								padding += parseFloat(jQuery.curCSS(elem,
										"padding" + this, true)) || 0;
								border += parseFloat(jQuery.curCSS(elem,
										"border" + this + "Width", true)) || 0;
							});
							val -= Math.round(padding + border);
						}
						if (jQuery(elem).is(":visible"))
							getWH();
						else
							jQuery.swap(elem, props, getWH);
						return Math.max(0, val);
					}
					return jQuery.curCSS(elem, name, force);
				},
				curCSS : function(elem, name, force) {
					var ret, style = elem.style;
					function color(elem) {
						if (!jQuery.browser.safari)
							return false;
						var ret = defaultView.getComputedStyle(elem, null);
						return !ret || ret.getPropertyValue("color") == "";
					}
					if (name == "opacity" && jQuery.browser.msie) {
						ret = jQuery.attr(style, "opacity");
						return ret == "" ? "1" : ret;
					}
					if (jQuery.browser.opera && name == "display") {
						var save = style.outline;
						style.outline = "0 solid black";
						style.outline = save;
					}
					if (name.match(/float/i))
						name = styleFloat;
					if (!force && style && style[name])
						ret = style[name];
					else if (defaultView.getComputedStyle) {
						if (name.match(/float/i))
							name = "float";
						name = name.replace(/([A-Z])/g, "-$1").toLowerCase();
						var computedStyle = defaultView.getComputedStyle(elem,
								null);
						if (computedStyle && !color(elem))
							ret = computedStyle.getPropertyValue(name);
						else {
							var swap = [], stack = [], a = elem, i = 0;
							for (; a && color(a); a = a.parentNode)
								stack.unshift(a);
							for (; i < stack.length; i++)
								if (color(stack[i])) {
									swap[i] = stack[i].style.display;
									stack[i].style.display = "block";
								}
							ret = name == "display"
									&& swap[stack.length - 1] != null ? "none"
									: (computedStyle && computedStyle
											.getPropertyValue(name))
											|| "";
							for (i = 0; i < swap.length; i++)
								if (swap[i] != null)
									stack[i].style.display = swap[i];
						}
						if (name == "opacity" && ret == "")
							ret = "1";
					} else if (elem.currentStyle) {
						var camelCase = name.replace(/\-(\w)/g, function(all,
								letter) {
							return letter.toUpperCase();
						});
						ret = elem.currentStyle[name]
								|| elem.currentStyle[camelCase];
						if (!/^\d+(px)?$/i.test(ret) && /^\d/.test(ret)) {
							var left = style.left, rsLeft = elem.runtimeStyle.left;
							elem.runtimeStyle.left = elem.currentStyle.left;
							style.left = ret || 0;
							ret = style.pixelLeft + "px";
							style.left = left;
							elem.runtimeStyle.left = rsLeft;
						}
					}
					return ret;
				},
				clean : function(elems, context) {
					var ret = [];
					context = context || document;
					if (typeof context.createElement == 'undefined')
						context = context.ownerDocument || context[0]
								&& context[0].ownerDocument || document;
					jQuery
							.each(
									elems,
									function(i, elem) {
										if (!elem)
											return;
										if (elem.constructor == Number)
											elem += '';
										if (typeof elem == "string") {
											elem = elem
													.replace(
															/(<(\w+)[^>]*?)\/>/g,
															function(all,
																	front, tag) {
																return tag
																		.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? all
																		: front
																				+ "></"
																				+ tag
																				+ ">";
															});
											var tags = jQuery.trim(elem)
													.toLowerCase(), div = context
													.createElement("div");
											var wrap = !tags.indexOf("<opt")
													&& [
															1,
															"<select multiple='multiple'>",
															"</select>" ]
													|| !tags.indexOf("<leg")
													&& [ 1, "<fieldset>",
															"</fieldset>" ]
													|| tags
															.match(/^<(thead|tbody|tfoot|colg|cap)/)
													&& [ 1, "<table>",
															"</table>" ]
													|| !tags.indexOf("<tr")
													&& [ 2, "<table><tbody>",
															"</tbody></table>" ]
													|| (!tags.indexOf("<td") || !tags
															.indexOf("<th"))
													&& [
															3,
															"<table><tbody><tr>",
															"</tr></tbody></table>" ]
													|| !tags.indexOf("<col")
													&& [
															2,
															"<table><tbody></tbody><colgroup>",
															"</colgroup></table>" ]
													|| jQuery.browser.msie
													&& [ 1, "div<div>",
															"</div>" ]
													|| [ 0, "", "" ];
											div.innerHTML = wrap[1] + elem
													+ wrap[2];
											while (wrap[0]--)
												div = div.lastChild;
											if (jQuery.browser.msie) {
												var tbody = !tags
														.indexOf("<table")
														&& tags
																.indexOf("<tbody") < 0 ? div.firstChild
														&& div.firstChild.childNodes
														: wrap[1] == "<table>"
																&& tags
																		.indexOf("<tbody") < 0 ? div.childNodes
																: [];
												for ( var j = tbody.length - 1; j >= 0; --j)
													if (jQuery.nodeName(
															tbody[j], "tbody")
															&& !tbody[j].childNodes.length)
														tbody[j].parentNode
																.removeChild(tbody[j]);
												if (/^\s/.test(elem))
													div
															.insertBefore(
																	context
																			.createTextNode(elem
																					.match(/^\s*/)[0]),
																	div.firstChild);
											}
											elem = jQuery
													.makeArray(div.childNodes);
										}
										if (elem.length === 0
												&& (!jQuery.nodeName(elem,
														"form") && !jQuery
														.nodeName(elem,
																"select")))
											return;
										if (elem[0] == undefined
												|| jQuery
														.nodeName(elem, "form")
												|| elem.options)
											ret.push(elem);
										else
											ret = jQuery.merge(ret, elem);
									});
					return ret;
				},
				attr : function(elem, name, value) {
					if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
						return undefined;
					var notxml = !jQuery.isXMLDoc(elem), set = value !== undefined, msie = jQuery.browser.msie;
					name = notxml && jQuery.props[name] || name;
					if (elem.tagName) {
						var special = /href|src|style/.test(name);
						if (name == "selected" && jQuery.browser.safari)
							elem.parentNode.selectedIndex;
						if (name in elem && notxml && !special) {
							if (set) {
								if (name == "type"
										&& jQuery.nodeName(elem, "input")
										&& elem.parentNode)
									throw "type property can't be changed";
								elem[name] = value;
							}
							if (jQuery.nodeName(elem, "form")
									&& elem.getAttributeNode(name))
								return elem.getAttributeNode(name).nodeValue;
							return elem[name];
						}
						if (msie && notxml && name == "style")
							return jQuery.attr(elem.style, "cssText", value);
						if (set)
							elem.setAttribute(name, "" + value);
						var attr = msie && notxml && special ? elem
								.getAttribute(name, 2) : elem
								.getAttribute(name);
						return attr === null ? undefined : attr;
					}
					if (msie && name == "opacity") {
						if (set) {
							elem.zoom = 1;
							elem.filter = (elem.filter || "").replace(
									/alpha\([^)]*\)/, "")
									+ (parseInt(value) + '' == "NaN" ? ""
											: "alpha(opacity=" + value * 100
													+ ")");
						}
						return elem.filter
								&& elem.filter.indexOf("opacity=") >= 0 ? (parseFloat(elem.filter
								.match(/opacity=([^)]*)/)[1]) / 100) + ''
								: "";
					}
					name = name.replace(/-([a-z])/ig, function(all, letter) {
						return letter.toUpperCase();
					});
					/* MODIFIED 7/31/08 BY NATE
					* WAS THIS, but IE7 was throwing an error
					if ( value != undefined )
					elem[ name ] = value;
					*/
					if ( value != 'NaNpx' && value != undefined)
						elem[ name ] = value; //NATE - Sometimes the value would come up as NaNpx in IE and causes an error
					return elem[name];
				},
				trim : function(text) {
					return (text || "").replace(/^\s+|\s+$/g, "");
				},
				makeArray : function(array) {
					var ret = [];
					if (array != null) {
						var i = array.length;
						if (i == null || array.split || array.setInterval
								|| array.call)
							ret[0] = array;
						else
							while (i)
								ret[--i] = array[i];
					}
					return ret;
				},
				inArray : function(elem, array) {
					for ( var i = 0, length = array.length; i < length; i++)
						if (array[i] === elem)
							return i;
					return -1;
				},
				merge : function(first, second) {
					var i = 0, elem, pos = first.length;
					if (jQuery.browser.msie) {
						while (elem = second[i++])
							if (elem.nodeType != 8)
								first[pos++] = elem;
					} else
						while (elem = second[i++])
							first[pos++] = elem;
					return first;
				},
				unique : function(array) {
					var ret = [], done = {};
					try {
						for ( var i = 0, length = array.length; i < length; i++) {
							var id = jQuery.data(array[i]);
							if (!done[id]) {
								done[id] = true;
								ret.push(array[i]);
							}
						}
					} catch (e) {
						ret = array;
					}
					return ret;
				},
				grep : function(elems, callback, inv) {
					var ret = [];
					for ( var i = 0, length = elems.length; i < length; i++)
						if (!inv != !callback(elems[i], i))
							ret.push(elems[i]);
					return ret;
				},
				map : function(elems, callback) {
					var ret = [];
					for ( var i = 0, length = elems.length; i < length; i++) {
						var value = callback(elems[i], i);
						if (value != null)
							ret[ret.length] = value;
					}
					return ret.concat.apply( [], ret);
				}
			});
	var userAgent = navigator.userAgent.toLowerCase();
	jQuery.browser = {
		version :(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
		safari :/webkit/.test(userAgent),
		opera :/opera/.test(userAgent),
		msie :/msie/.test(userAgent) && !/opera/.test(userAgent),
		msie6 :/msie/.test(userAgent) && !/opera/.test(userAgent) && /6.0/.test(navigator.userAgent),
		ff2 :/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) && /1.8/.test(navigator.userAgent),
		ff3 :/mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) && /1.9/.test(navigator.userAgent),
		mozilla :/mozilla/.test(userAgent)
				&& !/(compatible|webkit)/.test(userAgent)
	};
	var styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat";
	jQuery.extend( {
		boxModel :!jQuery.browser.msie || document.compatMode == "CSS1Compat",
		props : {
			"for" :"htmlFor",
			"class" :"className",
			"float" :styleFloat,
			cssFloat :styleFloat,
			styleFloat :styleFloat,
			readonly :"readOnly",
			maxlength :"maxLength",
			cellspacing :"cellSpacing"
		}
	});
	jQuery.each( {
		parent : function(elem) {
			return elem.parentNode;
		},
		parents : function(elem) {
			return jQuery.dir(elem, "parentNode");
		},
		next : function(elem) {
			return jQuery.nth(elem, 2, "nextSibling");
		},
		prev : function(elem) {
			return jQuery.nth(elem, 2, "previousSibling");
		},
		nextAll : function(elem) {
			return jQuery.dir(elem, "nextSibling");
		},
		prevAll : function(elem) {
			return jQuery.dir(elem, "previousSibling");
		},
		siblings : function(elem) {
			return jQuery.sibling(elem.parentNode.firstChild, elem);
		},
		children : function(elem) {
			return jQuery.sibling(elem.firstChild);
		},
		contents : function(elem) {
			return jQuery.nodeName(elem, "iframe") ? elem.contentDocument
					|| elem.contentWindow.document : jQuery
					.makeArray(elem.childNodes);
		}
	}, function(name, fn) {
		jQuery.fn[name] = function(selector) {
			var ret = jQuery.map(this, fn);
			if (selector && typeof selector == "string")
				ret = jQuery.multiFilter(selector, ret);
			return this.pushStack(jQuery.unique(ret));
		};
	});
	jQuery.each( {
		appendTo :"append",
		prependTo :"prepend",
		insertBefore :"before",
		insertAfter :"after",
		replaceAll :"replaceWith"
	}, function(name, original) {
		jQuery.fn[name] = function() {
			var args = arguments;
			return this.each( function() {
				for ( var i = 0, length = args.length; i < length; i++)
					jQuery(args[i])[original](this);
			});
		};
	});
	jQuery.each( {
		removeAttr : function(name) {
			jQuery.attr(this, name, "");
			if (this.nodeType == 1)
				this.removeAttribute(name);
		},
		addClass : function(classNames) {
			jQuery.className.add(this, classNames);
		},
		removeClass : function(classNames) {
			jQuery.className.remove(this, classNames);
		},
		toggleClass : function(classNames) {
			jQuery.className[jQuery.className.has(this, classNames) ? "remove"
					: "add"](this, classNames);
		},
		remove : function(selector) {
			if (!selector || jQuery.filter(selector, [ this ]).r.length) {
				jQuery("*", this).add(this).each( function() {
					jQuery.event.remove(this);
					jQuery.removeData(this);
				});
				if (this.parentNode)
					this.parentNode.removeChild(this);
			}
		},
		empty : function() {
			jQuery(">*", this).remove();
			while (this.firstChild)
				this.removeChild(this.firstChild);
		}
	}, function(name, fn) {
		jQuery.fn[name] = function() {
			return this.each(fn, arguments);
		};
	});
	jQuery.each( [ "Height", "Width" ], function(i, name) {
		var type = name.toLowerCase();
		jQuery.fn[type] = function(size) {
			return this[0] == window ? jQuery.browser.opera
					&& document.body["client" + name] || jQuery.browser.safari
					&& window["inner" + name]
					|| document.compatMode == "CSS1Compat"
					&& document.documentElement["client" + name]
					|| document.body["client" + name]
					: this[0] == document ? Math.max(Math.max(
							document.body["scroll" + name],
							document.documentElement["scroll" + name]), Math
							.max(document.body["offset" + name],
									document.documentElement["offset" + name]))
							: size == undefined ? (this.length ? jQuery.css(
									this[0], type) : null) : this.css(type,
									size.constructor == String ? size : size
											+ "px");
		};
	});
	function num(elem, prop) {
		return elem[0] && parseInt(jQuery.curCSS(elem[0], prop, true), 10) || 0;
	}
	var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ? "(?:[\\w*_-]|\\\\.)"
			: "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)", quickChild = new RegExp(
			"^>\\s*(" + chars + "+)"), quickID = new RegExp("^(" + chars
			+ "+)(#)(" + chars + "+)"), quickClass = new RegExp("^([#.]?)("
			+ chars + "*)");
	jQuery
			.extend( {
				expr : {
					"" : function(a, i, m) {
						return m[2] == "*" || jQuery.nodeName(a, m[2]);
					},
					"#" : function(a, i, m) {
						return a.getAttribute("id") == m[2];
					},
					":" : {
						lt : function(a, i, m) {
							return i < m[3] - 0;
						},
						gt : function(a, i, m) {
							return i > m[3] - 0;
						},
						nth : function(a, i, m) {
							return m[3] - 0 == i;
						},
						eq : function(a, i, m) {
							return m[3] - 0 == i;
						},
						first : function(a, i) {
							return i == 0;
						},
						last : function(a, i, m, r) {
							return i == r.length - 1;
						},
						even : function(a, i) {
							return i % 2 == 0;
						},
						odd : function(a, i) {
							return i % 2;
						},
						"first-child" : function(a) {
							return a.parentNode.getElementsByTagName("*")[0] == a;
						},
						"last-child" : function(a) {
							return jQuery.nth(a.parentNode.lastChild, 1,
									"previousSibling") == a;
						},
						"only-child" : function(a) {
							return !jQuery.nth(a.parentNode.lastChild, 2,
									"previousSibling");
						},
						parent : function(a) {
							return a.firstChild;
						},
						empty : function(a) {
							return !a.firstChild;
						},
						contains : function(a, i, m) {
							return (a.textContent || a.innerText
									|| jQuery(a).text() || "").indexOf(m[3]) >= 0;
						},
						visible : function(a) {
							return "hidden" != a.type
									&& jQuery.css(a, "display") != "none"
									&& jQuery.css(a, "visibility") != "hidden";
						},
						hidden : function(a) {
							return "hidden" == a.type
									|| jQuery.css(a, "display") == "none"
									|| jQuery.css(a, "visibility") == "hidden";
						},
						enabled : function(a) {
							return !a.disabled;
						},
						disabled : function(a) {
							return a.disabled;
						},
						checked : function(a) {
							return a.checked;
						},
						selected : function(a) {
							return a.selected || jQuery.attr(a, "selected");
						},
						text : function(a) {
							return "text" == a.type;
						},
						radio : function(a) {
							return "radio" == a.type;
						},
						checkbox : function(a) {
							return "checkbox" == a.type;
						},
						file : function(a) {
							return "file" == a.type;
						},
						password : function(a) {
							return "password" == a.type;
						},
						submit : function(a) {
							return "submit" == a.type;
						},
						image : function(a) {
							return "image" == a.type;
						},
						reset : function(a) {
							return "reset" == a.type;
						},
						button : function(a) {
							return "button" == a.type
									|| jQuery.nodeName(a, "button");
						},
						input : function(a) {
							return /input|select|textarea|button/i
									.test(a.nodeName);
						},
						has : function(a, i, m) {
							return jQuery.find(m[3], a).length;
						},
						header : function(a) {
							return /h\d/i.test(a.nodeName);
						},
						animated : function(a) {
							return jQuery.grep(jQuery.timers, function(fn) {
								return a == fn.elem;
							}).length;
						}
					}
				},
				parse : [ /^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
						/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
						new RegExp("^([:.#]*)(" + chars + "+)") ],
				multiFilter : function(expr, elems, not) {
					var old, cur = [];
					while (expr && expr != old) {
						old = expr;
						var f = jQuery.filter(expr, elems, not);
						expr = f.t.replace(/^\s*,\s*/, "");
						cur = not ? elems = f.r : jQuery.merge(cur, f.r);
					}
					return cur;
				},
				find : function(t, context) {
					if (typeof t != "string")
						return [ t ];
					if (context && context.nodeType != 1
							&& context.nodeType != 9)
						return [];
					context = context || document;
					var ret = [ context ], done = [], last, nodeName;
					while (t && last != t) {
						var r = [];
						last = t;
						t = jQuery.trim(t);
						var foundToken = false, re = quickChild, m = re.exec(t);
						if (m) {
							nodeName = m[1].toUpperCase();
							for ( var i = 0; ret[i]; i++)
								for ( var c = ret[i].firstChild; c; c = c.nextSibling)
									if (c.nodeType == 1
											&& (nodeName == "*" || c.nodeName
													.toUpperCase() == nodeName))
										r.push(c);
							ret = r;
							t = t.replace(re, "");
							if (t.indexOf(" ") == 0)
								continue;
							foundToken = true;
						} else {
							re = /^([>+~])\s*(\w*)/i;
							if ((m = re.exec(t)) != null) {
								r = [];
								var merge = {};
								nodeName = m[2].toUpperCase();
								m = m[1];
								for ( var j = 0, rl = ret.length; j < rl; j++) {
									var n = m == "~" || m == "+" ? ret[j].nextSibling
											: ret[j].firstChild;
									for (; n; n = n.nextSibling)
										if (n.nodeType == 1) {
											var id = jQuery.data(n);
											if (m == "~" && merge[id])
												break;
											if (!nodeName
													|| n.nodeName.toUpperCase() == nodeName) {
												if (m == "~")
													merge[id] = true;
												r.push(n);
											}
											if (m == "+")
												break;
										}
								}
								ret = r;
								t = jQuery.trim(t.replace(re, ""));
								foundToken = true;
							}
						}
						if (t && !foundToken) {
							if (!t.indexOf(",")) {
								if (context == ret[0])
									ret.shift();
								done = jQuery.merge(done, ret);
								r = ret = [ context ];
								t = " " + t.substr(1, t.length);
							} else {
								var re2 = quickID;
								var m = re2.exec(t);
								if (m) {
									m = [ 0, m[2], m[3], m[1] ];
								} else {
									re2 = quickClass;
									m = re2.exec(t);
								}
								m[2] = m[2].replace(/\\/g, "");
								var elem = ret[ret.length - 1];
								if (m[1] == "#" && elem && elem.getElementById
										&& !jQuery.isXMLDoc(elem)) {
									var oid = elem.getElementById(m[2]);
									if ((jQuery.browser.msie || jQuery.browser.opera)
											&& oid
											&& typeof oid.id == "string"
											&& oid.id != m[2])
										oid = jQuery('[@id="' + m[2] + '"]',
												elem)[0];
									ret = r = oid
											&& (!m[3] || jQuery.nodeName(oid,
													m[3])) ? [ oid ] : [];
								} else {
									for ( var i = 0; ret[i]; i++) {
										var tag = m[1] == "#" && m[3] ? m[3]
												: m[1] != "" || m[0] == "" ? "*"
														: m[2];
										if (tag == "*"
												&& ret[i].nodeName
														.toLowerCase() == "object")
											tag = "param";
										r = jQuery.merge(r, ret[i]
												.getElementsByTagName(tag));
									}
									if (m[1] == ".")
										r = jQuery.classFilter(r, m[2]);
									if (m[1] == "#") {
										var tmp = [];
										for ( var i = 0; r[i]; i++)
											if (r[i].getAttribute("id") == m[2]) {
												tmp = [ r[i] ];
												break;
											}
										r = tmp;
									}
									ret = r;
								}
								t = t.replace(re2, "");
							}
						}
						if (t) {
							var val = jQuery.filter(t, r);
							ret = r = val.r;
							t = jQuery.trim(val.t);
						}
					}
					if (t)
						ret = [];
					if (ret && context == ret[0])
						ret.shift();
					done = jQuery.merge(done, ret);
					return done;
				},
				classFilter : function(r, m, not) {
					m = " " + m + " ";
					var tmp = [];
					for ( var i = 0; r[i]; i++) {
						var pass = (" " + r[i].className + " ").indexOf(m) >= 0;
						if (!not && pass || not && !pass)
							tmp.push(r[i]);
					}
					return tmp;
				},
				filter : function(t, r, not) {
					var last;
					while (t && t != last) {
						last = t;
						var p = jQuery.parse, m;
						for ( var i = 0; p[i]; i++) {
							m = p[i].exec(t);
							if (m) {
								t = t.substring(m[0].length);
								m[2] = m[2].replace(/\\/g, "");
								break;
							}
						}
						if (!m)
							break;
						if (m[1] == ":" && m[2] == "not")
							r = isSimple.test(m[3]) ? jQuery.filter(m[3], r,
									true).r : jQuery(r).not(m[3]);
						else if (m[1] == ".")
							r = jQuery.classFilter(r, m[2], not);
						else if (m[1] == "[") {
							var tmp = [], type = m[3];
							for ( var i = 0, rl = r.length; i < rl; i++) {
								var a = r[i], z = a[jQuery.props[m[2]] || m[2]];
								if (z == null || /href|src|selected/.test(m[2]))
									z = jQuery.attr(a, m[2]) || '';
								if ((type == ""
										&& !!z
										|| type == "="
										&& z == m[5]
										|| type == "!="
										&& z != m[5]
										|| type == "^="
										&& z
										&& !z.indexOf(m[5])
										|| type == "$="
										&& z.substr(z.length - m[5].length) == m[5] || (type == "*=" || type == "~=")
										&& z.indexOf(m[5]) >= 0)
										^ not)
									tmp.push(a);
							}
							r = tmp;
						} else if (m[1] == ":" && m[2] == "nth-child") {
							var merge = {}, tmp = [], test = /(-?)(\d*)n((?:\+|-)?\d*)/
									.exec(m[3] == "even" && "2n"
											|| m[3] == "odd" && "2n+1"
											|| !/\D/.test(m[3]) && "0n+" + m[3]
											|| m[3]), first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
							for ( var i = 0, rl = r.length; i < rl; i++) {
								var node = r[i], parentNode = node.parentNode, id = jQuery
										.data(parentNode);
								if (!merge[id]) {
									var c = 1;
									for ( var n = parentNode.firstChild; n; n = n.nextSibling)
										if (n.nodeType == 1)
											n.nodeIndex = c++;
									merge[id] = true;
								}
								var add = false;
								if (first == 0) {
									if (node.nodeIndex == last)
										add = true;
								} else if ((node.nodeIndex - last) % first == 0
										&& (node.nodeIndex - last) / first >= 0)
									add = true;
								if (add ^ not)
									tmp.push(node);
							}
							r = tmp;
						} else {
							var fn = jQuery.expr[m[1]];
							if (typeof fn == "object")
								fn = fn[m[2]];
							if (typeof fn == "string")
								fn = eval("false||function(a,i){return " + fn
										+ ";}");
							r = jQuery.grep(r, function(elem, i) {
								return fn(elem, i, m, r);
							}, not);
						}
					}
					return {
						r :r,
						t :t
					};
				},
				dir : function(elem, dir) {
					var matched = [], cur = elem[dir];
					while (cur && cur != document) {
						if (cur.nodeType == 1)
							matched.push(cur);
						cur = cur[dir];
					}
					return matched;
				},
				nth : function(cur, result, dir, elem) {
					result = result || 1;
					var num = 0;
					for (; cur; cur = cur[dir])
						if (cur.nodeType == 1 && ++num == result)
							break;
					return cur;
				},
				sibling : function(n, elem) {
					var r = [];
					for (; n; n = n.nextSibling) {
						if (n.nodeType == 1 && n != elem)
							r.push(n);
					}
					return r;
				}
			});
	jQuery.event = {
		add : function(elem, types, handler, data) {
			if (elem.nodeType == 3 || elem.nodeType == 8)
				return;
			if (jQuery.browser.msie && elem.setInterval)
				elem = window;
			if (!handler.guid)
				handler.guid = this.guid++;
			if (data != undefined) {
				var fn = handler;
				handler = this.proxy(fn, function() {
					return fn.apply(this, arguments);
				});
				handler.data = data;
			}
			var events = jQuery.data(elem, "events")
					|| jQuery.data(elem, "events", {}), handle = jQuery.data(
					elem, "handle")
					|| jQuery.data(elem, "handle", function() {
						if (typeof jQuery != "undefined"
								&& !jQuery.event.triggered)
							return jQuery.event.handle.apply(
									arguments.callee.elem, arguments);
					});
			handle.elem = elem;
			jQuery.each(types.split(/\s+/),
					function(index, type) {
						var parts = type.split(".");
						type = parts[0];
						handler.type = parts[1];
						var handlers = events[type];
						if (!handlers) {
							handlers = events[type] = {};
							if (!jQuery.event.special[type]
									|| jQuery.event.special[type].setup
											.call(elem) === false) {
								if (elem.addEventListener)
									elem.addEventListener(type, handle, false);
								else if (elem.attachEvent)
									elem.attachEvent("on" + type, handle);
							}
						}
						handlers[handler.guid] = handler;
						jQuery.event.global[type] = true;
					});
			elem = null;
		},
		guid :1,
		global : {},
		remove : function(elem, types, handler) {
			if (elem.nodeType == 3 || elem.nodeType == 8)
				return;
			var events = jQuery.data(elem, "events"), ret, index;
			if (events) {
				if (types == undefined
						|| (typeof types == "string" && types.charAt(0) == "."))
					for ( var type in events)
						this.remove(elem, type + (types || ""));
				else {
					if (types.type) {
						handler = types.handler;
						types = types.type;
					}
					jQuery
							.each(
									types.split(/\s+/),
									function(index, type) {
										var parts = type.split(".");
										type = parts[0];
										if (events[type]) {
											if (handler)
												delete events[type][handler.guid];
											else
												for (handler in events[type])
													if (!parts[1]
															|| events[type][handler].type == parts[1])
														delete events[type][handler];
											for (ret in events[type])
												break;
											if (!ret) {
												if (!jQuery.event.special[type]
														|| jQuery.event.special[type].teardown
																.call(elem) === false) {
													if (elem.removeEventListener)
														elem
																.removeEventListener(
																		type,
																		jQuery
																				.data(
																						elem,
																						"handle"),
																		false);
													else if (elem.detachEvent)
														elem
																.detachEvent(
																		"on"
																				+ type,
																		jQuery
																				.data(
																						elem,
																						"handle"));
												}
												ret = null;
												delete events[type];
											}
										}
									});
				}
				for (ret in events)
					break;
				if (!ret) {
					var handle = jQuery.data(elem, "handle");
					if (handle)
						handle.elem = null;
					jQuery.removeData(elem, "events");
					jQuery.removeData(elem, "handle");
				}
			}
		},
		trigger : function(type, data, elem, donative, extra) {
			data = jQuery.makeArray(data);
			if (type.indexOf("!") >= 0) {
				type = type.slice(0, -1);
				var exclusive = true;
			}
			if (!elem) {
				if (this.global[type])
					jQuery("*").add( [ window, document ]).trigger(type, data);
			} else {
				if (elem.nodeType == 3 || elem.nodeType == 8)
					return undefined;
				var val, ret, fn = jQuery.isFunction(elem[type] || null), event = !data[0]
						|| !data[0].preventDefault;
				if (event) {
					data.unshift( {
						type :type,
						target :elem,
						preventDefault : function() {
						},
						stopPropagation : function() {
						},
						timeStamp :now()
					});
					data[0][expando] = true;
				}
				data[0].type = type;
				if (exclusive)
					data[0].exclusive = true;
				var handle = jQuery.data(elem, "handle");
				if (handle)
					val = handle.apply(elem, data);
				if ((!fn || (jQuery.nodeName(elem, 'a') && type == "click"))
						&& elem["on" + type]
						&& elem["on" + type].apply(elem, data) === false)
					val = false;
				if (event)
					data.shift();
				if (extra && jQuery.isFunction(extra)) {
					ret = extra.apply(elem, val == null ? data : data
							.concat(val));
					if (ret !== undefined)
						val = ret;
				}
				if (fn && donative !== false && val !== false
						&& !(jQuery.nodeName(elem, 'a') && type == "click")) {
					this.triggered = true;
					try {
						elem[type]();
					} catch (e) {
					}
				}
				this.triggered = false;
			}
			return val;
		},
		handle : function(event) {
			var val, ret, namespace, all, handlers;
			event = arguments[0] = jQuery.event.fix(event || window.event);
			namespace = event.type.split(".");
			event.type = namespace[0];
			namespace = namespace[1];
			all = !namespace && !event.exclusive;
			handlers = (jQuery.data(this, "events") || {})[event.type];
			for ( var j in handlers) {
				var handler = handlers[j];
				if (all || handler.type == namespace) {
					event.handler = handler;
					event.data = handler.data;
					ret = handler.apply(this, arguments);
					if (val !== false)
						val = ret;
					if (ret === false) {
						event.preventDefault();
						event.stopPropagation();
					}
				}
			}
			return val;
		},
		fix : function(event) {
			if (event[expando] == true)
				return event;
			var originalEvent = event;
			event = {
				originalEvent :originalEvent
			};
			var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which"
					.split(" ");
			for ( var i = props.length; i; i--)
				event[props[i]] = originalEvent[props[i]];
			event[expando] = true;
			event.preventDefault = function() {
				if (originalEvent.preventDefault)
					originalEvent.preventDefault();
				originalEvent.returnValue = false;
			};
			event.stopPropagation = function() {
				if (originalEvent.stopPropagation)
					originalEvent.stopPropagation();
				originalEvent.cancelBubble = true;
			};
			event.timeStamp = event.timeStamp || now();
			if (!event.target)
				event.target = event.srcElement || document;
			if (event.target.nodeType == 3)
				event.target = event.target.parentNode;
			if (!event.relatedTarget && event.fromElement)
				event.relatedTarget = event.fromElement == event.target ? event.toElement
						: event.fromElement;
			if (event.pageX == null && event.clientX != null) {
				var doc = document.documentElement, body = document.body;
				event.pageX = event.clientX
						+ (doc && doc.scrollLeft || body && body.scrollLeft || 0)
						- (doc.clientLeft || 0);
				event.pageY = event.clientY
						+ (doc && doc.scrollTop || body && body.scrollTop || 0)
						- (doc.clientTop || 0);
			}
			if (!event.which
					&& ((event.charCode || event.charCode === 0) ? event.charCode
							: event.keyCode))
				event.which = event.charCode || event.keyCode;
			if (!event.metaKey && event.ctrlKey)
				event.metaKey = event.ctrlKey;
			if (!event.which && event.button)
				event.which = (event.button & 1 ? 1 : (event.button & 2 ? 3
						: (event.button & 4 ? 2 : 0)));
			return event;
		},
		proxy : function(fn, proxy) {
			proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
			return proxy;
		},
		special : {
			ready : {
				setup : function() {
					bindReady();
					return;
				},
				teardown : function() {
					return;
				}
			},
			mouseenter : {
				setup : function() {
					if (jQuery.browser.msie)
						return false;
					jQuery(this).bind("mouseover",
							jQuery.event.special.mouseenter.handler);
					return true;
				},
				teardown : function() {
					if (jQuery.browser.msie)
						return false;
					jQuery(this).unbind("mouseover",
							jQuery.event.special.mouseenter.handler);
					return true;
				},
				handler : function(event) {
					if (withinElement(event, this))
						return true;
					event.type = "mouseenter";
					return jQuery.event.handle.apply(this, arguments);
				}
			},
			mouseleave : {
				setup : function() {
					if (jQuery.browser.msie)
						return false;
					jQuery(this).bind("mouseout",
							jQuery.event.special.mouseleave.handler);
					return true;
				},
				teardown : function() {
					if (jQuery.browser.msie)
						return false;
					jQuery(this).unbind("mouseout",
							jQuery.event.special.mouseleave.handler);
					return true;
				},
				handler : function(event) {
					if (withinElement(event, this))
						return true;
					event.type = "mouseleave";
					return jQuery.event.handle.apply(this, arguments);
				}
			}
		}
	};
	jQuery.fn.extend( {
		bind : function(type, data, fn) {
			return type == "unload" ? this.one(type, data, fn) : this
					.each( function() {
						jQuery.event.add(this, type, fn || data, fn && data);
					});
		},
		one : function(type, data, fn) {
			var one = jQuery.event.proxy(fn || data, function(event) {
				jQuery(this).unbind(event, one);
				return (fn || data).apply(this, arguments);
			});
			return this.each( function() {
				jQuery.event.add(this, type, one, fn && data);
			});
		},
		unbind : function(type, fn) {
			return this.each( function() {
				jQuery.event.remove(this, type, fn);
			});
		},
		trigger : function(type, data, fn) {
			return this.each( function() {
				jQuery.event.trigger(type, data, this, true, fn);
			});
		},
		triggerHandler : function(type, data, fn) {
			return this[0]
					&& jQuery.event.trigger(type, data, this[0], false, fn);
		},
		toggle : function(fn) {
			var args = arguments, i = 1;
			while (i < args.length)
				jQuery.event.proxy(fn, args[i++]);
			return this.click(jQuery.event.proxy(fn, function(event) {
				this.lastToggle = (this.lastToggle || 0) % i;
				event.preventDefault();
				return args[this.lastToggle++].apply(this, arguments) || false;
			}));
		},
		hover : function(fnOver, fnOut) {
			return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
		},
		ready : function(fn) {
			bindReady();
			if (jQuery.isReady)
				fn.call(document, jQuery);
			else
				jQuery.readyList.push( function() {
					return fn.call(this, jQuery);
				});
			return this;
		}
	});
	jQuery.extend( {
		isReady :false,
		readyList : [],
		ready : function() {
			if (!jQuery.isReady) {
				jQuery.isReady = true;
				if (jQuery.readyList) {
					jQuery.each(jQuery.readyList, function() {
						this.call(document);
					});
					jQuery.readyList = null;
				}
				jQuery(document).triggerHandler("ready");
			}
		}
	});
	var readyBound = false;
	function bindReady() {
		if (readyBound)
			return;
		readyBound = true;
		if (document.addEventListener && !jQuery.browser.opera)
			document.addEventListener("DOMContentLoaded", jQuery.ready, false);
		if (jQuery.browser.msie && window == top)
			( function() {
				if (jQuery.isReady)
					return;
				try {
					document.documentElement.doScroll("left");
				} catch (error) {
					setTimeout(arguments.callee, 0);
					return;
				}
				jQuery.ready();
			})();
		if (jQuery.browser.opera)
			document.addEventListener("DOMContentLoaded", function() {
				if (jQuery.isReady)
					return;
				for ( var i = 0; i < document.styleSheets.length; i++)
					if (document.styleSheets[i].disabled) {
						setTimeout(arguments.callee, 0);
						return;
					}
				jQuery.ready();
			}, false);
		if (jQuery.browser.safari) {
			var numStyles;
			( function() {
				if (jQuery.isReady)
					return;
				if (document.readyState != "loaded"
						&& document.readyState != "complete") {
					setTimeout(arguments.callee, 0);
					return;
				}
				if (numStyles === undefined)
					numStyles = jQuery("style, link[rel=stylesheet]").length;
				if (document.styleSheets.length != numStyles) {
					setTimeout(arguments.callee, 0);
					return;
				}
				jQuery.ready();
			})();
		}
		jQuery.event.add(window, "load", jQuery.ready);
	}
	jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"
			+ "mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"
			+ "submit,keydown,keypress,keyup,error").split(","), function(i,
			name) {
		jQuery.fn[name] = function(fn) {
			return fn ? this.bind(name, fn) : this.trigger(name);
		};
	});
	var withinElement = function(event, elem) {
		var parent = event.relatedTarget;
		while (parent && parent != elem)
			try {
				parent = parent.parentNode;
			} catch (error) {
				parent = elem;
			}
		return parent == elem;
	};
	jQuery(window).bind("unload", function() {
		jQuery("*").add(document).unbind();
	});
	jQuery.fn
			.extend( {
				_load :jQuery.fn.load,
				load : function(url, params, callback) {
					if (typeof url != 'string')
						return this._load(url);
					var off = url.indexOf(" ");
					if (off >= 0) {
						var selector = url.slice(off, url.length);
						url = url.slice(0, off);
					}
					callback = callback || function() {
					};
					var type = "GET";
					if (params)
						if (jQuery.isFunction(params)) {
							callback = params;
							params = null;
						} else {
							params = jQuery.param(params);
							type = "POST";
						}
					var self = this;
					jQuery
							.ajax( {
								url :url,
								type :type,
								dataType :"html",
								data :params,
								complete : function(res, status) {
									if (status == "success"
											|| status == "notmodified")
										self
												.html(selector ? jQuery(
														"<div/>")
														.append(
																res.responseText
																		.replace(
																				/<script(.|\s)*?\/script>/g,
																				""))
														.find(selector)
														: res.responseText);
									self.each(callback, [ res.responseText,
											status, res ]);
								}
							});
					return this;
				},
				serialize : function() {
					return jQuery.param(this.serializeArray());
				},
				serializeArray : function() {
					return this
							.map(
									function() {
										return jQuery.nodeName(this, "form") ? jQuery
												.makeArray(this.elements)
												: this;
									})
							.filter(
									function() {
										return this.name
												&& !this.disabled
												&& (this.checked
														|| /select|textarea/i
																.test(this.nodeName) || /text|hidden|password/i
														.test(this.type));
									})
							.map(
									function(i, elem) {
										var val = jQuery(this).val();
										return val == null ? null
												: val.constructor == Array ? jQuery
														.map(
																val,
																function(val, i) {
																	return {
																		name :elem.name,
																		value :val
																	};
																})
														: {
															name :elem.name,
															value :val
														};
									}).get();
				}
			});
	jQuery.each(
			"ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend"
					.split(","), function(i, o) {
				jQuery.fn[o] = function(f) {
					return this.bind(o, f);
				};
			});
	var jsc = now();
	jQuery
			.extend( {
				get : function(url, data, callback, type) {
					if (jQuery.isFunction(data)) {
						callback = data;
						data = null;
					}
					return jQuery.ajax( {
						type :"GET",
						url :url,
						data :data,
						success :callback,
						dataType :type
					});
				},
				getScript : function(url, callback) {
					return jQuery.get(url, null, callback, "script");
				},
				getJSON : function(url, data, callback) {
					return jQuery.get(url, data, callback, "json");
				},
				post : function(url, data, callback, type) {
					if (jQuery.isFunction(data)) {
						callback = data;
						data = {};
					}
					return jQuery.ajax( {
						type :"POST",
						url :url,
						data :data,
						success :callback,
						dataType :type
					});
				},
				ajaxSetup : function(settings) {
					jQuery.extend(jQuery.ajaxSettings, settings);
				},
				ajaxSettings : {
					url :location.href,
					global :true,
					type :"GET",
					timeout :0,
					contentType :"application/x-www-form-urlencoded",
					processData :true,
					async :true,
					data :null,
					username :null,
					password :null,
					accepts : {
						xml :"application/xml, text/xml",
						html :"text/html",
						script :"text/javascript, application/javascript",
						json :"application/json, text/javascript",
						text :"text/plain",
						_default :"*/*"
					}
				},
				lastModified : {},
				ajax : function(s) {
					s = jQuery.extend(true, s, jQuery.extend(true, {},
							jQuery.ajaxSettings, s));
					var jsonp, jsre = /=\?(&|$)/g, status, data, type = s.type
							.toUpperCase();
					if (s.data && s.processData && typeof s.data != "string")
						s.data = jQuery.param(s.data);
					if (s.dataType == "jsonp") {
						if (type == "GET") {
							if (!s.url.match(jsre))
								s.url += (s.url.match(/\?/) ? "&" : "?")
										+ (s.jsonp || "callback") + "=?";
						} else if (!s.data || !s.data.match(jsre))
							s.data = (s.data ? s.data + "&" : "")
									+ (s.jsonp || "callback") + "=?";
						s.dataType = "json";
					}
					if (s.dataType == "json"
							&& (s.data && s.data.match(jsre) || s.url
									.match(jsre))) {
						jsonp = "jsonp" + jsc++;
						if (s.data)
							s.data = (s.data + "").replace(jsre, "=" + jsonp
									+ "$1");
						s.url = s.url.replace(jsre, "=" + jsonp + "$1");
						s.dataType = "script";
						window[jsonp] = function(tmp) {
							data = tmp;
							success();
							complete();
							window[jsonp] = undefined;
							try {
								delete window[jsonp];
							} catch (e) {
							}
							if (head)
								head.removeChild(script);
						};
					}
					if (s.dataType == "script" && s.cache == null)
						s.cache = false;
					if (s.cache === false && type == "GET") {
						var ts = now();
						var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts
								+ "$2");
						s.url = ret
								+ ((ret == s.url) ? (s.url.match(/\?/) ? "&"
										: "?")
										+ "_=" + ts : "");
					}
					if (s.data && type == "GET") {
						s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
						s.data = null;
					}
					if (s.global && !jQuery.active++)
						jQuery.event.trigger("ajaxStart");
					var remote = /^(?:\w+:)?\/\/([^\/?#]+)/;
					if (s.dataType == "script" && type == "GET"
							&& remote.test(s.url)
							&& remote.exec(s.url)[1] != location.host) {
						var head = document.getElementsByTagName("head")[0];
						var script = document.createElement("script");
						script.src = s.url;
						if (s.scriptCharset)
							script.charset = s.scriptCharset;
						if (!jsonp) {
							var done = false;
							script.onload = script.onreadystatechange = function() {
								if (!done
										&& (!this.readyState
												|| this.readyState == "loaded" || this.readyState == "complete")) {
									done = true;
									success();
									complete();
									head.removeChild(script);
								}
							};
						}
						head.appendChild(script);
						return undefined;
					}
					var requestDone = false;
					var xhr = window.ActiveXObject ? new ActiveXObject(
							"Microsoft.XMLHTTP") : new XMLHttpRequest();
					if (s.username)
						xhr.open(type, s.url, s.async, s.username, s.password);
					else
						xhr.open(type, s.url, s.async);
					try {
						if (s.data)
							xhr.setRequestHeader("Content-Type", s.contentType);
						if (s.ifModified)
							xhr.setRequestHeader("If-Modified-Since",
									jQuery.lastModified[s.url]
											|| "Thu, 01 Jan 1970 00:00:00 GMT");
						xhr.setRequestHeader("X-Requested-With",
								"XMLHttpRequest");
						xhr
								.setRequestHeader(
										"Accept",
										s.dataType && s.accepts[s.dataType] ? s.accepts[s.dataType]
												+ ", */*"
												: s.accepts._default);
					} catch (e) {
					}
					if (s.beforeSend && s.beforeSend(xhr, s) === false) {
						s.global && jQuery.active--;
						xhr.abort();
						return false;
					}
					if (s.global)
						jQuery.event.trigger("ajaxSend", [ xhr, s ]);
					var onreadystatechange = function(isTimeout) {
						if (!requestDone
								&& xhr
								&& (xhr.readyState == 4 || isTimeout == "timeout")) {
							requestDone = true;
							if (ival) {
								clearInterval(ival);
								ival = null;
							}
							status = isTimeout == "timeout" && "timeout"
									|| !jQuery.httpSuccess(xhr) && "error"
									|| s.ifModified
									&& jQuery.httpNotModified(xhr, s.url)
									&& "notmodified" || "success";
							if (status == "success") {
								try {
									data = jQuery.httpData(xhr, s.dataType,
											s.dataFilter);
								} catch (e) {
									status = "parsererror";
								}
							}
							if (status == "success") {
								var modRes;
								try {
									modRes = xhr
											.getResponseHeader("Last-Modified");
								} catch (e) {
								}
								if (s.ifModified && modRes)
									jQuery.lastModified[s.url] = modRes;
								if (!jsonp)
									success();
							} else
								jQuery.handleError(s, xhr, status);
							complete();
							if (s.async)
								xhr = null;
						}
					};
					if (s.async) {
						var ival = setInterval(onreadystatechange, 13);
						if (s.timeout > 0)
							setTimeout( function() {
								if (xhr) {
									xhr.abort();
									if (!requestDone)
										onreadystatechange("timeout");
								}
							}, s.timeout);
					}
					try {
						xhr.send(s.data);
					} catch (e) {
						jQuery.handleError(s, xhr, null, e);
					}
					if (!s.async)
						onreadystatechange();
					function success() {
						if (s.success)
							s.success(data, status);
						if (s.global)
							jQuery.event.trigger("ajaxSuccess", [ xhr, s ]);
					}
					function complete() {
						if (s.complete)
							s.complete(xhr, status);
						if (s.global)
							jQuery.event.trigger("ajaxComplete", [ xhr, s ]);
						if (s.global && !--jQuery.active)
							jQuery.event.trigger("ajaxStop");
					}
					return xhr;
				},
				handleError : function(s, xhr, status, e) {
					if (s.error)
						s.error(xhr, status, e);
					if (s.global)
						jQuery.event.trigger("ajaxError", [ xhr, s, e ]);
				},
				active :0,
				httpSuccess : function(xhr) {
					try {
						return !xhr.status && location.protocol == "file:"
								|| (xhr.status >= 200 && xhr.status < 300)
								|| xhr.status == 304 || xhr.status == 1223
								|| jQuery.browser.safari
								&& xhr.status == undefined;
					} catch (e) {
					}
					return false;
				},
				httpNotModified : function(xhr, url) {
					try {
						var xhrRes = xhr.getResponseHeader("Last-Modified");
						return xhr.status == 304
								|| xhrRes == jQuery.lastModified[url]
								|| jQuery.browser.safari
								&& xhr.status == undefined;
					} catch (e) {
					}
					return false;
				},
				httpData : function(xhr, type, filter) {
					var ct = xhr.getResponseHeader("content-type"), xml = type == "xml"
							|| !type && ct && ct.indexOf("xml") >= 0, data = xml ? xhr.responseXML
							: xhr.responseText;
					if (xml && data.documentElement.tagName == "parsererror")
						throw "parsererror";
					if (filter)
						data = filter(data, type);
					if (type == "script")
						jQuery.globalEval(data);
					if (type == "json")
						data = eval("(" + data + ")");
					return data;
				},
				param : function(a) {
					var s = [];
					if (a.constructor == Array || a.jquery)
						jQuery.each(a, function() {
							s.push(encodeURIComponent(this.name) + "="
									+ encodeURIComponent(this.value));
						});
					else
						for ( var j in a)
							if (a[j] && a[j].constructor == Array)
								jQuery.each(a[j], function() {
									s.push(encodeURIComponent(j) + "="
											+ encodeURIComponent(this));
								});
							else
								s.push(encodeURIComponent(j)
										+ "="
										+ encodeURIComponent(jQuery
												.isFunction(a[j]) ? a[j]()
												: a[j]));
					return s.join("&").replace(/%20/g, "+");
				}
			});
	jQuery.fn
			.extend( {
				show : function(speed, callback) {
					return speed ? this.animate( {
						height :"show",
						width :"show",
						opacity :"show"
					}, speed, callback) : this.filter(":hidden").each(
							function() {
								this.style.display = this.oldblock || "";
								if (jQuery.css(this, "display") == "none") {
									var elem = jQuery(
											"<" + this.tagName + " />")
											.appendTo("body");
									this.style.display = elem.css("display");
									if (this.style.display == "none")
										this.style.display = "block";
									elem.remove();
								}
							}).end();
				},
				hide : function(speed, callback) {
					return speed ? this.animate( {
						height :"hide",
						width :"hide",
						opacity :"hide"
					}, speed, callback) : this.filter(":visible").each(
							function() {
								this.oldblock = this.oldblock
										|| jQuery.css(this, "display");
								this.style.display = "none";
							}).end();
				},
				_toggle :jQuery.fn.toggle,
				toggle : function(fn, fn2) {
					return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ? this._toggle
							.apply(this, arguments)
							: fn ? this.animate( {
								height :"toggle",
								width :"toggle",
								opacity :"toggle"
							}, fn, fn2)
									: this
											.each( function() {
												jQuery(this)[jQuery(this).is(
														":hidden") ? "show"
														: "hide"]();
											});
				},
				slideDown : function(speed, callback) {
					return this.animate( {
						height :"show"
					}, speed, callback);
				},
				slideUp : function(speed, callback) {
					return this.animate( {
						height :"hide"
					}, speed, callback);
				},
				slideToggle : function(speed, callback) {
					return this.animate( {
						height :"toggle"
					}, speed, callback);
				},
				fadeIn : function(speed, callback) {
					return this.animate( {
						opacity :"show"
					}, speed, callback);
				},
				fadeOut : function(speed, callback) {
					return this.animate( {
						opacity :"hide"
					}, speed, callback);
				},
				fadeTo : function(speed, to, callback) {
					return this.animate( {
						opacity :to
					}, speed, callback);
				},
				animate : function(prop, speed, easing, callback) {
					var optall = jQuery.speed(speed, easing, callback);
					return this[optall.queue === false ? "each" : "queue"]
							( function() {
								if (this.nodeType != 1)
									return false;
								var opt = jQuery.extend( {}, optall), p, hidden = jQuery(
										this).is(":hidden"), self = this;
								for (p in prop) {
									if (prop[p] == "hide" && hidden
											|| prop[p] == "show" && !hidden)
										return opt.complete.call(this);
									if (p == "height" || p == "width") {
										opt.display = jQuery.css(this,
												"display");
										opt.overflow = this.style.overflow;
									}
								}
								if (opt.overflow != null)
									this.style.overflow = "hidden";
								opt.curAnim = jQuery.extend( {}, prop);
								jQuery
										.each(
												prop,
												function(name, val) {
													var e = new jQuery.fx(self,
															opt, name);
													if (/toggle|show|hide/
															.test(val))
														e[val == "toggle" ? hidden ? "show"
																: "hide"
																: val](prop);
													else {
														var parts = val
																.toString()
																.match(
																		/^([+-]=)?([\d+-.]+)(.*)$/), start = e
																.cur(true) || 0;
														if (parts) {
															var end = parseFloat(parts[2]), unit = parts[3]
																	|| "px";
															if (unit != "px") {
																self.style[name] = (end || 1)
																		+ unit;
																start = ((end || 1) / e
																		.cur(true))
																		* start;
																self.style[name] = start
																		+ unit;
															}
															if (parts[1])
																end = ((parts[1] == "-=" ? -1
																		: 1) * end)
																		+ start;
															e.custom(start,
																	end, unit);
														} else
															e.custom(start,
																	val, "");
													}
												});
								return true;
							});
				},
				queue : function(type, fn) {
					if (jQuery.isFunction(type)
							|| (type && type.constructor == Array)) {
						fn = type;
						type = "fx";
					}
					if (!type || (typeof type == "string" && !fn))
						return queue(this[0], type);
					return this.each( function() {
						if (fn.constructor == Array)
							queue(this, type, fn);
						else {
							queue(this, type).push(fn);
							if (queue(this, type).length == 1)
								fn.call(this);
						}
					});
				},
				stop : function(clearQueue, gotoEnd) {
					var timers = jQuery.timers;
					if (clearQueue)
						this.queue( []);
					this.each( function() {
						for ( var i = timers.length - 1; i >= 0; i--)
							if (timers[i].elem == this) {
								if (gotoEnd)
									timers[i](true);
								timers.splice(i, 1);
							}
					});
					if (!gotoEnd)
						this.dequeue();
					return this;
				}
			});
	var queue = function(elem, type, array) {
		if (elem) {
			type = type || "fx";
			var q = jQuery.data(elem, type + "queue");
			if (!q || array)
				q = jQuery.data(elem, type + "queue", jQuery.makeArray(array));
		}
		return q;
	};
	jQuery.fn.dequeue = function(type) {
		type = type || "fx";
		return this.each( function() {
			var q = queue(this, type);
			q.shift();
			if (q.length)
				q[0].call(this);
		});
	};
	jQuery
			.extend( {
				speed : function(speed, easing, fn) {
					var opt = speed && speed.constructor == Object ? speed : {
						complete :fn || !fn && easing
								|| jQuery.isFunction(speed) && speed,
						duration :speed,
						easing :fn && easing || easing
								&& easing.constructor != Function && easing
					};
					opt.duration = (opt.duration
							&& opt.duration.constructor == Number ? opt.duration
							: jQuery.fx.speeds[opt.duration])
							|| jQuery.fx.speeds.def;
					opt.old = opt.complete;
					opt.complete = function() {
						if (opt.queue !== false)
							jQuery(this).dequeue();
						if (jQuery.isFunction(opt.old))
							opt.old.call(this);
					};
					return opt;
				},
				easing : {
					linear : function(p, n, firstNum, diff) {
						return firstNum + diff * p;
					},
					swing : function(p, n, firstNum, diff) {
						return ((-Math.cos(p * Math.PI) / 2) + 0.5) * diff
								+ firstNum;
					}
				},
				timers : [],
				timerId :null,
				fx : function(elem, options, prop) {
					this.options = options;
					this.elem = elem;
					this.prop = prop;
					if (!options.orig)
						options.orig = {};
				}
			});
	jQuery.fx.prototype = {
		update : function() {
			if (this.options.step)
				this.options.step.call(this.elem, this.now, this);
			(jQuery.fx.step[this.prop] || jQuery.fx.step._default)(this);
			if (this.prop == "height" || this.prop == "width")
				this.elem.style.display = "block";
		},
		cur : function(force) {
			if (this.elem[this.prop] != null
					&& this.elem.style[this.prop] == null)
				return this.elem[this.prop];
			var r = parseFloat(jQuery.css(this.elem, this.prop, force));
			return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem,
					this.prop)) || 0;
		},
		custom : function(from, to, unit) {
			this.startTime = now();
			this.start = from;
			this.end = to;
			this.unit = unit || this.unit || "px";
			this.now = this.start;
			this.pos = this.state = 0;
			this.update();
			var self = this;
			function t(gotoEnd) {
				return self.step(gotoEnd);
			}
			t.elem = this.elem;
			jQuery.timers.push(t);
			if (jQuery.timerId == null) {
				jQuery.timerId = setInterval( function() {
					var timers = jQuery.timers;
					for ( var i = 0; i < timers.length; i++)
						if (!timers[i]())
							timers.splice(i--, 1);
					if (!timers.length) {
						clearInterval(jQuery.timerId);
						jQuery.timerId = null;
					}
				}, 13);
			}
		},
		show : function() {
			this.options.orig[this.prop] = jQuery.attr(this.elem.style,
					this.prop);
			this.options.show = true;
			this.custom(0, this.cur());
			if (this.prop == "width" || this.prop == "height")
				this.elem.style[this.prop] = "1px";
			jQuery(this.elem).show();
		},
		hide : function() {
			this.options.orig[this.prop] = jQuery.attr(this.elem.style,
					this.prop);
			this.options.hide = true;
			this.custom(this.cur(), 0);
		},
		step : function(gotoEnd) {
			var t = now();
			if (gotoEnd || t > this.options.duration + this.startTime) {
				this.now = this.end;
				this.pos = this.state = 1;
				this.update();
				this.options.curAnim[this.prop] = true;
				var done = true;
				for ( var i in this.options.curAnim)
					if (this.options.curAnim[i] !== true)
						done = false;
				if (done) {
					if (this.options.display != null) {
						this.elem.style.overflow = this.options.overflow;
						this.elem.style.display = this.options.display;
						if (jQuery.css(this.elem, "display") == "none")
							this.elem.style.display = "block";
					}
					if (this.options.hide)
						this.elem.style.display = "none";
					if (this.options.hide || this.options.show)
						for ( var p in this.options.curAnim)
							jQuery.attr(this.elem.style, p,
									this.options.orig[p]);
				}
				if (done)
					this.options.complete.call(this.elem);
				return false;
			} else {
				var n = t - this.startTime;
				this.state = n / this.options.duration;
				this.pos = jQuery.easing[this.options.easing
						|| (jQuery.easing.swing ? "swing" : "linear")](
						this.state, n, 0, 1, this.options.duration);
				this.now = this.start + ((this.end - this.start) * this.pos);
				this.update();
			}
			return true;
		}
	};
	jQuery.extend(jQuery.fx, {
		speeds : {
			slow :600,
			fast :200,
			def :400
		},
		step : {
			scrollLeft : function(fx) {
				fx.elem.scrollLeft = fx.now;
			},
			scrollTop : function(fx) {
				fx.elem.scrollTop = fx.now;
			},
			opacity : function(fx) {
				jQuery.attr(fx.elem.style, "opacity", fx.now);
			},
			_default : function(fx) {
				fx.elem.style[fx.prop] = fx.now + fx.unit;
			}
		}
	});
	jQuery.fn.offset = function() {
		var left = 0, top = 0, elem = this[0], results;
		if (elem)
			with (jQuery.browser) {
				var parent = elem.parentNode, offsetChild = elem, offsetParent = elem.offsetParent, doc = elem.ownerDocument, safari2 = safari
						&& parseInt(version) < 522
						&& !/adobeair/i.test(userAgent), css = jQuery.curCSS, fixed = css(
						elem, "position") == "fixed";
				if (elem.getBoundingClientRect) {
					var box = elem.getBoundingClientRect();
					add(box.left
							+ Math.max(doc.documentElement.scrollLeft,
									doc.body.scrollLeft), box.top
							+ Math.max(doc.documentElement.scrollTop,
									doc.body.scrollTop));
					add(-doc.documentElement.clientLeft,
							-doc.documentElement.clientTop);
				} else {
					add(elem.offsetLeft, elem.offsetTop);
					while (offsetParent) {
						add(offsetParent.offsetLeft, offsetParent.offsetTop);
						if (mozilla
								&& !/^t(able|d|h)$/i.test(offsetParent.tagName)
								|| safari && !safari2)
							border(offsetParent);
						if (!fixed && css(offsetParent, "position") == "fixed")
							fixed = true;
						offsetChild = /^body$/i.test(offsetParent.tagName) ? offsetChild
								: offsetParent;
						offsetParent = offsetParent.offsetParent;
					}
					while (parent && parent.tagName
							&& !/^body|html$/i.test(parent.tagName)) {
						if (!/^inline|table.*$/i.test(css(parent, "display")))
							add(-parent.scrollLeft, -parent.scrollTop);
						if (mozilla && css(parent, "overflow") != "visible")
							border(parent);
						parent = parent.parentNode;
					}
					if ((safari2 && (fixed || css(offsetChild, "position") == "absolute"))
							|| (mozilla && css(offsetChild, "position") != "absolute"))
						add(-doc.body.offsetLeft, -doc.body.offsetTop);
					if (fixed)
						add(Math.max(doc.documentElement.scrollLeft,
								doc.body.scrollLeft), Math.max(
								doc.documentElement.scrollTop,
								doc.body.scrollTop));
				}
				results = {
					top :top,
					left :left
				};
			}
		function border(elem) {
			add(jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(
					elem, "borderTopWidth", true));
		}
		function add(l, t) {
			left += parseInt(l, 10) || 0;
			top += parseInt(t, 10) || 0;
		}
		return results;
	};
	jQuery.fn
			.extend( {
				position : function() {
					var left = 0, top = 0, results;
					if (this[0]) {
						var offsetParent = this.offsetParent(), offset = this
								.offset(), parentOffset = /^body|html$/i
								.test(offsetParent[0].tagName) ? {
							top :0,
							left :0
						} : offsetParent.offset();
						offset.top -= num(this, 'marginTop');
						offset.left -= num(this, 'marginLeft');
						parentOffset.top += num(offsetParent, 'borderTopWidth');
						parentOffset.left += num(offsetParent,
								'borderLeftWidth');
						results = {
							top :offset.top - parentOffset.top,
							left :offset.left - parentOffset.left
						};
					}
					return results;
				},
				offsetParent : function() {
					var offsetParent = this[0].offsetParent;
					while (offsetParent
							&& (!/^body|html$/i.test(offsetParent.tagName) && jQuery
									.css(offsetParent, 'position') == 'static'))
						offsetParent = offsetParent.offsetParent;
					return jQuery(offsetParent);
				}
			});
	jQuery
			.each(
					[ 'Left', 'Top' ],
					function(i, name) {
						var method = 'scroll' + name;
						jQuery.fn[method] = function(val) {
							if (!this[0])
								return;
							return val != undefined ? this.each( function() {
								this == window || this == document ? window
										.scrollTo(!i ? val : jQuery(window)
												.scrollLeft(), i ? val
												: jQuery(window).scrollTop())
										: this[method] = val;
							})
									: this[0] == window || this[0] == document ? self[i ? 'pageYOffset'
											: 'pageXOffset']
											|| jQuery.boxModel
											&& document.documentElement[method]
											|| document.body[method]
											: this[0][method];
						};
					});
	jQuery.each( [ "Height", "Width" ], function(i, name) {
		var tl = i ? "Left" : "Top", br = i ? "Right" : "Bottom";
		jQuery.fn["inner" + name] = function() {
			return this[name.toLowerCase()]() + num(this, "padding" + tl)
					+ num(this, "padding" + br);
		};
		jQuery.fn["outer" + name] = function(margin) {
			return this["inner" + name]()
					+ num(this, "border" + tl + "Width")
					+ num(this, "border" + br + "Width")
					+ (margin ? num(this, "margin" + tl)
							+ num(this, "margin" + br) : 0);
		};
	});
})();