/*jQuery 1.2.6*/
( 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();
					});
					if (set)
						elem[name] = value;
					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),
		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);
		};
	});
})();
/* jQuery validation 1.5 */
( function($) {
	$
			.extend(
					$.fn,
					{
						validate : function(options) {
							if (!this.length) {
								options
										&& options.debug
										&& window.console
										&& console
												.warn("nothing selected, can't validate, returning nothing");
								return;
							}
							var validator = $.data(this[0], 'validator');
							if (validator) {
								return validator;
							}
							validator = new $.validator(options, this[0]);
							$.data(this[0], 'validator', validator);
							if (validator.settings.onsubmit) {
								this.find("input, button").filter(".cancel")
										.click( function() {
											validator.cancelSubmit = true;
										});
								this
										.submit( function(event) {
											if (validator.settings.debug)
												event.preventDefault();
											function handle() {
												if (validator.settings.submitHandler) {
													validator.settings.submitHandler
															.call(
																	validator,
																	validator.currentForm);
													return false;
												}
												return true;
											}
											if (validator.cancelSubmit) {
												validator.cancelSubmit = false;
												return handle();
											}
											if (validator.form()) {
												if (validator.pendingRequest) {
													validator.formSubmitted = true;
													return false;
												}
												return handle();
											} else {
												validator.focusInvalid();
												return false;
											}
										});
							}
							return validator;
						},
						valid : function() {
							if ($(this[0]).is('form')) {
								return this.validate().form();
							} else {
								var valid = false;
								var validator = $(this[0].form).validate();
								this.each( function() {
									valid |= validator.element(this);
								});
								return valid;
							}
						},
						removeAttrs : function(attributes) {
							var result = {}, $element = this;
							$.each(attributes.split(/\s/), function() {
								result[this] = $element.attr(this);
								$element.removeAttr(this);
							});
							return result;
						},
						rules : function(command, argument) {
							var element = this[0];
							if (command) {
								var settings = $
										.data(element.form, 'validator').settings;
								var staticRules = settings.rules;
								var existingRules = $.validator
										.staticRules(element);
								switch (command) {
								case "add":
									$.extend(existingRules, $.validator
											.normalizeRule(argument));
									staticRules[element.name] = existingRules;
									if (argument.messages)
										settings.messages[element.name] = $
												.extend(
														settings.messages[element.name],
														argument.messages);
									break;
								case "remove":
									if (!argument) {
										delete staticRules[element.name];
										return existingRules;
									}
									var filtered = {};
									$
											.each(
													argument.split(/\s/),
													function(index, method) {
														filtered[method] = existingRules[method];
														delete existingRules[method];
													});
									return filtered;
								}
							}
							var data = $.validator.normalizeRules($.extend( {},
									$.validator.metadataRules(element),
									$.validator.classRules(element),
									$.validator.attributeRules(element),
									$.validator.staticRules(element)), element);
							if (data.required) {
								var param = data.required;
								delete data.required;
								data = $.extend( {
									required : param
								}, data);
							}
							return data;
						},
						push : function(t) {
							return this.setArray(this.add(t).get());
						}
					});
	$.extend($.expr[":"], {
		blank : function(a) {
			return !$.trim(a.value);
		},
		filled : function(a) {
			return !!$.trim(a.value);
		},
		unchecked : function(a) {
			return !a.checked;
		}
	});
	$.format = function(source, params) {
		if (arguments.length == 1)
			return function() {
				var args = $.makeArray(arguments);
				args.unshift(source);
				return $.format.apply(this, args);
			};
		if (arguments.length > 2 && params.constructor != Array) {
			params = $.makeArray(arguments).slice(1);
		}
		if (params.constructor != Array) {
			params = [ params ];
		}
		$.each(params, function(i, n) {
			source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
		});
		return source;
	};
	$.validator = function(options, form) {
		this.settings = $.extend( {}, $.validator.defaults, options);
		this.currentForm = form;
		this.init();
	};
	$
			.extend(
					$.validator,
					{
						defaults : {
							messages : {},
							groups : {},
							rules : {},
							errorClass : "error",
							errorElement : "label",
							focusInvalid : true,
							errorContainer : $( []),
							errorLabelContainer : $( []),
							onsubmit : true,
							ignore : [],
							ignoreTitle : false,
							onfocusin : function(element) {
								this.lastActive = element;
								if (this.settings.focusCleanup
										&& !this.blockFocusCleanup) {
									this.settings.unhighlight
											&& this.settings.unhighlight.call(
													this, element,
													this.settings.errorClass);
									this.errorsFor(element).hide();
								}
							},
							onfocusout : function(element) {
								if (!this.checkable(element)
										&& (element.name in this.submitted || !this
												.optional(element))) {
									this.element(element);
								}
							},
							onkeyup : function(element) {
								if (element.name in this.submitted
										|| element == this.lastElement) {
									this.element(element);
								}
							},
							onclick : function(element) {
								if (element.name in this.submitted)
									this.element(element);
							},
							highlight : function(element, errorClass) {
								$(element).addClass(errorClass);
							},
							unhighlight : function(element, errorClass) {
								$(element).removeClass(errorClass);
							}
						},
						setDefaults : function(settings) {
							$.extend($.validator.defaults, settings);
						},
						messages : {
							required : "This field is required.",
							remote : "Please fix this field.",
							email : "Please enter a valid email address.",
							url : "Please enter a valid URL.",
							date : "Please enter a valid date.",
							dateISO : "Please enter a valid date (ISO).",
							dateDE : "Bitte geben Sie ein g眉ltiges Datum ein.",
							number : "Please enter a valid number.",
							numberDE : "Bitte geben Sie eine Nummer ein.",
							digits : "Please enter only digits",
							creditcard : "Please enter a valid credit card number.",
							equalTo : "Please enter the same value again.",
							accept : "Please enter a value with a valid extension.",
							maxlength : $
									.format("Please enter no more than {0} characters."),
							minlength : $
									.format("Please enter at least {0} characters."),
							rangelength : $
									.format("Please enter a value between {0} and {1} characters long."),
							range : $
									.format("Please enter a value between {0} and {1}."),
							max : $
									.format("Please enter a value less than or equal to {0}."),
							min : $
									.format("Please enter a value greater than or equal to {0}.")
						},
						autoCreateRanges : false,
						prototype : {
							init : function() {
								this.labelContainer = $(this.settings.errorLabelContainer);
								this.errorContext = this.labelContainer.length
										&& this.labelContainer
										|| $(this.currentForm);
								this.containers = $(
										this.settings.errorContainer).add(
										this.settings.errorLabelContainer);
								this.submitted = {};
								this.valueCache = {};
								this.pendingRequest = 0;
								this.pending = {};
								this.invalid = {};
								this.reset();
								var groups = (this.groups = {});
								$.each(this.settings.groups, function(key,
										value) {
									$.each(value.split(/\s/), function(index,
											name) {
										groups[name] = key;
									});
								});
								var rules = this.settings.rules;
								$.each(rules, function(key, value) {
									rules[key] = $.validator
											.normalizeRule(value);
								});
								function delegate(event) {
									var validator = $.data(this[0].form,
											"validator");
									validator.settings["on" + event.type]
											&& validator.settings["on"
													+ event.type].call(
													validator, this[0]);
								}
								$(this.currentForm)
										.delegate(
												"focusin focusout keyup",
												":text, :password, :file, select, textarea",
												delegate).delegate("click",
												":radio, :checkbox", delegate);
								if (this.settings.invalidHandler)
									$(this.currentForm).bind(
											"invalid-form.validate",
											this.settings.invalidHandler);
							},
							form : function() {
								this.checkForm();
								$.extend(this.submitted, this.errorMap);
								this.invalid = $.extend( {}, this.errorMap);
								if (!this.valid())
									$(this.currentForm).triggerHandler(
											"invalid-form", [ this ]);
								this.showErrors();
								return this.valid();
							},
							checkForm : function() {
								this.prepareForm();
								for ( var i = 0, elements = (this.currentElements = this
										.elements()); elements[i]; i++) {
									this.check(elements[i]);
								}
								return this.valid();
							},
							element : function(element) {
								element = this.clean(element);
								this.lastElement = element;
								this.prepareElement(element);
								this.currentElements = $(element);
								var result = this.check(element);
								if (result) {
									delete this.invalid[element.name];
								} else {
									this.invalid[element.name] = true;
								}
								if (!this.numberOfInvalids()) {
									this.toHide.push(this.containers);
								}
								this.showErrors();
								return result;
							},
							showErrors : function(errors) {
								if (errors) {
									$.extend(this.errorMap, errors);
									this.errorList = [];
									for ( var name in errors) {
										this.errorList.push( {
											message : errors[name],
											element : this.findByName(name)[0]
										});
									}
									this.successList = $
											.grep(
													this.successList,
													function(element) {
														return !(element.name in errors);
													});
								}
								this.settings.showErrors ? this.settings.showErrors
										.call(this, this.errorMap,
												this.errorList)
										: this.defaultShowErrors();
							},
							resetForm : function() {
								if ($.fn.resetForm)
									$(this.currentForm).resetForm();
								this.submitted = {};
								this.prepareForm();
								this.hideErrors();
								this.elements().removeClass(
										this.settings.errorClass);
							},
							numberOfInvalids : function() {
								return this.objectLength(this.invalid);
							},
							objectLength : function(obj) {
								var count = 0;
								for ( var i in obj)
									count++;
								return count;
							},
							hideErrors : function() {
								this.addWrapper(this.toHide).hide();
							},
							valid : function() {
								return this.size() == 0;
							},
							size : function() {
								return this.errorList.length;
							},
							focusInvalid : function() {
								if (this.settings.focusInvalid) {
									try {
										$(
												this.findLastActive()
														|| this.errorList.length
														&& this.errorList[0].element
														|| []).filter(
												":visible").focus();
									} catch (e) {
									}
								}
							},
							findLastActive : function() {
								var lastActive = this.lastActive;
								return lastActive
										&& $
												.grep(
														this.errorList,
														function(n) {
															return n.element.name == lastActive.name;
														}).length == 1
										&& lastActive;
							},
							elements : function() {
								var validator = this, rulesCache = {};
								return $( [])
										.add(this.currentForm.elements)
										.filter(":input")
										.not(
												":submit, :reset, :image, [disabled]")
										.not(this.settings.ignore)
										.filter(
												function() {
													!this.name
															&& validator.settings.debug
															&& window.console
															&& console
																	.error(
																			"%o has no name assigned",
																			this);
													if (this.name in rulesCache
															|| !validator
																	.objectLength($(
																			this)
																			.rules()))
														return false;
													rulesCache[this.name] = true;
													return true;
												});
							},
							clean : function(selector) {
								return $(selector)[0];
							},
							errors : function() {
								return $(this.settings.errorElement + "."
										+ this.settings.errorClass,
										this.errorContext);
							},
							reset : function() {
								this.successList = [];
								this.errorList = [];
								this.errorMap = {};
								this.toShow = $( []);
								this.toHide = $( []);
								this.formSubmitted = false;
								this.currentElements = $( []);
							},
							prepareForm : function() {
								this.reset();
								this.toHide = this.errors().push(
										this.containers);
							},
							prepareElement : function(element) {
								this.reset();
								this.toHide = this.errorsFor(element);
							},
							check : function(element) {
								element = this.clean(element);
								if (this.checkable(element)) {
									element = this.findByName(element.name)[0];
								}
								var rules = $(element).rules();
								var dependencyMismatch = false;
								for (method in rules) {
									var rule = {
										method : method,
										parameters : rules[method]
									};
									try {
										var result = $.validator.methods[method]
												.call(this, element.value,
														element,
														rule.parameters);
										if (result == "dependency-mismatch") {
											dependencyMismatch = true;
											continue;
										}
										dependencyMismatch = false;
										if (result == "pending") {
											this.toHide = this.toHide.not(this
													.errorsFor(element));
											return;
										}
										if (!result) {
											this.formatAndAdd(element, rule);
											return false;
										}
									} catch (e) {
										this.settings.debug
												&& window.console
												&& console
														.log("exception occured when checking element "
																+ element.id
																+ ", check the '"
																+ rule.method
																+ "' method");
										throw e;
									}
								}
								if (dependencyMismatch)
									return;
								if (this.objectLength(rules))
									this.successList.push(element);
								return true;
							},
							customMetaMessage : function(element, method) {
								if (!$.metadata)
									return;
								var meta = this.settings.meta ? $(element)
										.metadata()[this.settings.meta] : $(
										element).metadata();
								return meta && meta.messages
										&& meta.messages[method];
							},
							customMessage : function(name, method) {
								var m = this.settings.messages[name];
								return m
										&& (m.constructor == String ? m
												: m[method]);
							},
							findDefined : function() {
								for ( var i = 0; i < arguments.length; i++) {
									if (arguments[i] !== undefined)
										return arguments[i];
								}
								return undefined;
							},
							defaultMessage : function(element, method) {
								return this.findDefined(this.customMessage(
										element.name, method), this
										.customMetaMessage(element, method),
										!this.settings.ignoreTitle
												&& element.title || undefined,
										$.validator.messages[method],
										"<strong>Warning: No message defined for "
												+ element.name + "</strong>");
							},
							formatAndAdd : function(element, rule) {
								var message = this.defaultMessage(element,
										rule.method);
								if (typeof message == "function")
									message = message.call(this,
											rule.parameters, element);
								this.errorList.push( {
									message : message,
									element : element
								});
								this.errorMap[element.name] = message;
								this.submitted[element.name] = message;
							},
							addWrapper : function(toToggle) {
								if (this.settings.wrapper)
									toToggle.push(toToggle
											.parents(this.settings.wrapper));
								return toToggle;
							},
							defaultShowErrors : function() {
								for ( var i = 0; this.errorList[i]; i++) {
									var error = this.errorList[i];
									this.settings.highlight
											&& this.settings.highlight.call(
													this, error.element,
													this.settings.errorClass);
									this
											.showLabel(error.element,
													error.message);
								}
								if (this.errorList.length) {
									this.toShow.push(this.containers);
								}
								if (this.settings.success) {
									for ( var i = 0; this.successList[i]; i++) {
										this.showLabel(this.successList[i]);
									}
								}
								if (this.settings.unhighlight) {
									for ( var i = 0, elements = this
											.validElements(); elements[i]; i++) {
										this.settings.unhighlight.call(this,
												elements[i],
												this.settings.errorClass);
									}
								}
								this.toHide = this.toHide.not(this.toShow);
								this.hideErrors();
								this.addWrapper(this.toShow).show();
							},
							validElements : function() {
								return this.currentElements.not(this
										.invalidElements());
							},
							invalidElements : function() {
								return $(this.errorList).map( function() {
									return this.element;
								});
							},
							showLabel : function(element, message) {
								var label = this.errorsFor(element);
								if (label.length) {
									label.removeClass().addClass(
											this.settings.errorClass);
									label.attr("generated")
											&& label.html(message);
								} else {
									label = $(
											"<" + this.settings.errorElement
													+ "/>").attr( {
										"for" : this.idOrName(element),
										generated : true
									}).addClass(this.settings.errorClass).html(
											message || "");
									if (this.settings.wrapper) {
										label = label.hide().show().wrap(
												"<" + this.settings.wrapper
														+ ">").parent();
									}
									if (!this.labelContainer.append(label).length)
										this.settings.errorPlacement ? this.settings
												.errorPlacement(label,
														$(element))
												: label.insertAfter(element);
								}
								if (!message && this.settings.success) {
									label.text("");
									typeof this.settings.success == "string" ? label
											.addClass(this.settings.success)
											: this.settings.success(label);
								}
								this.toShow.push(label);
							},
							errorsFor : function(element) {
								return this.errors().filter(
										"[@for='" + this.idOrName(element)
												+ "']");
							},
							idOrName : function(element) {
								return this.groups[element.name]
										|| (this.checkable(element) ? element.name
												: element.id || element.name);
							},
							checkable : function(element) {
								return /radio|checkbox/i.test(element.type);
							},
							findByName : function(name) {
								var form = this.currentForm;
								return $(document.getElementsByName(name)).map(
										function(index, element) {
											return element.form == form
													&& element.name == name
													&& element || null;
										});
							},
							getLength : function(value, element) {
								switch (element.nodeName.toLowerCase()) {
								case 'select':
									return $("option:selected", element).length;
								case 'input':
									if (this.checkable(element))
										return this.findByName(element.name)
												.filter(':checked').length;
								}
								return value.length;
							},
							depend : function(param, element) {
								return this.dependTypes[typeof param] ? this.dependTypes[typeof param]
										(param, element)
										: true;
							},
							dependTypes : {
								"boolean" : function(param, element) {
									return param;
								},
								"string" : function(param, element) {
									return !!$(param, element.form).length;
								},
								"function" : function(param, element) {
									return param(element);
								}
							},
							optional : function(element) {
								return !$.validator.methods.required.call(this,
										$.trim(element.value), element)
										&& "dependency-mismatch";
							},
							startRequest : function(element) {
								if (!this.pending[element.name]) {
									this.pendingRequest++;
									this.pending[element.name] = true;
								}
							},
							stopRequest : function(element, valid) {
								this.pendingRequest--;
								if (this.pendingRequest < 0)
									this.pendingRequest = 0;
								delete this.pending[element.name];
								if (valid && this.pendingRequest == 0
										&& this.formSubmitted && this.form()) {
									$(this.currentForm).submit();
								} else if (!valid && this.pendingRequest == 0
										&& this.formSubmitted) {
									$(this.currentForm).triggerHandler(
											"invalid-form", [ this ]);
								}
							},
							previousValue : function(element) {
								return $.data(element, "previousValue")
										|| $.data(element, "previousValue",
												previous = {
													old : null,
													valid : true,
													message : this
															.defaultMessage(
																	element,
																	"remote")
												});
							}
						},
						classRuleSettings : {
							required : {
								required : true
							},
							email : {
								email : true
							},
							url : {
								url : true
							},
							date : {
								date : true
							},
							dateISO : {
								dateISO : true
							},
							dateDE : {
								dateDE : true
							},
							number : {
								number : true
							},
							numberDE : {
								numberDE : true
							},
							digits : {
								digits : true
							},
							creditcard : {
								creditcard : true
							}
						},
						addClassRules : function(className, rules) {
							className.constructor == String ? this.classRuleSettings[className] = rules
									: $.extend(this.classRuleSettings,
											className);
						},
						classRules : function(element) {
							var rules = {};
							var classes = $(element).attr('class');
							classes
									&& $
											.each(
													classes.split(' '),
													function() {
														if (this in $.validator.classRuleSettings) {
															$
																	.extend(
																			rules,
																			$.validator.classRuleSettings[this]);
														}
													});
							return rules;
						},
						attributeRules : function(element) {
							var rules = {};
							var $element = $(element);
							for (method in $.validator.methods) {
								var value = $element.attr(method);
								if (value) {
									rules[method] = value;
								}
							}
							if (rules.maxlength
									&& /-1|2147483647|524288/
											.test(rules.maxlength)) {
								delete rules.maxlength;
							}
							return rules;
						},
						metadataRules : function(element) {
							if (!$.metadata)
								return {};
							var meta = $.data(element.form, 'validator').settings.meta;
							return meta ? $(element).metadata()[meta] : $(
									element).metadata();
						},
						staticRules : function(element) {
							var rules = {};
							var validator = $.data(element.form, 'validator');
							if (validator.settings.rules) {
								rules = $.validator
										.normalizeRule(validator.settings.rules[element.name])
										|| {};
							}
							return rules;
						},
						normalizeRules : function(rules, element) {
							$
									.each(
											rules,
											function(prop, val) {
												if (val === false) {
													delete rules[prop];
													return;
												}
												if (val.param || val.depends) {
													var keepRule = true;
													switch (typeof val.depends) {
													case "string":
														keepRule = !!$(
																val.depends,
																element.form).length;
														break;
													case "function":
														keepRule = val.depends
																.call(element,
																		element);
														break;
													}
													if (keepRule) {
														rules[prop] = val.param !== undefined ? val.param
																: true;
													} else {
														delete rules[prop];
													}
												}
											});
							$
									.each(
											rules,
											function(rule, parameter) {
												rules[rule] = $
														.isFunction(parameter) ? parameter(element)
														: parameter;
											});
							$.each( [ 'minlength', 'maxlength', 'min', 'max' ],
									function() {
										if (rules[this]) {
											rules[this] = Number(rules[this]);
										}
									});
							$.each( [ 'rangelength', 'range' ], function() {
								if (rules[this]) {
									rules[this] = [ Number(rules[this][0]),
											Number(rules[this][1]) ];
								}
							});
							if ($.validator.autoCreateRanges) {
								if (rules.min && rules.max) {
									rules.range = [ rules.min, rules.max ];
									delete rules.min;
									delete rules.max;
								}
								if (rules.minlength && rules.maxlength) {
									rules.rangelength = [ rules.minlength,
											rules.maxlength ];
									delete rules.minlength;
									delete rules.maxlength;
								}
							}
							if (rules.messages) {
								delete rules.messages
							}
							return rules;
						},
						normalizeRule : function(data) {
							if (typeof data == "string") {
								var transformed = {};
								$.each(data.split(/\s/), function() {
									transformed[this] = true;
								});
								data = transformed;
							}
							return data;
						},
						addMethod : function(name, method, message) {
							$.validator.methods[name] = method;
							$.validator.messages[name] = message;
							if (method.length < 3) {
								$.validator.addClassRules(name, $.validator
										.normalizeRule(name));
							}
						},
						methods : {
							required : function(value, element, param) {
								if (!this.depend(param, element))
									return "dependency-mismatch";
								switch (element.nodeName.toLowerCase()) {
								case 'select':
									var options = $("option:selected", element);
									return options.length > 0
											&& (element.type == "select-multiple" || ($.browser.msie
													&& !(options[0].attributes['value'].specified) ? options[0].text
													: options[0].value).length > 0);
								case 'input':
									if (this.checkable(element))
										return this.getLength(value, element) > 0;
								default:
									return $.trim(value).length > 0;
								}
							},
							remote : function(value, element, param) {
								if (this.optional(element))
									return "dependency-mismatch";
								var previous = this.previousValue(element);
								if (!this.settings.messages[element.name])
									this.settings.messages[element.name] = {};
								this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous
										.message(value)
										: previous.message;
								param = typeof param == "string" && {
									url : param
								} || param;
								if (previous.old !== value) {
									previous.old = value;
									var validator = this;
									this.startRequest(element);
									var data = {};
									data[element.name] = value;
									$
											.ajax($
													.extend(
															true,
															{
																url : param,
																mode : "abort",
																port : "validate"
																		+ element.name,
																dataType : "json",
																data : data,
																success : function(
																		response) {
																	if (response) {
																		var submitted = validator.formSubmitted;
																		validator
																				.prepareElement(element);
																		validator.formSubmitted = submitted;
																		validator.successList
																				.push(element);
																		validator
																				.showErrors();
																	} else {
																		var errors = {};
																		errors[element.name] = response
																				|| validator
																						.defaultMessage(
																								element,
																								"remote");
																		validator
																				.showErrors(errors);
																	}
																	previous.valid = response;
																	validator
																			.stopRequest(
																					element,
																					response);
																}
															}, param));
									return "pending";
								} else if (this.pending[element.name]) {
									return "pending";
								}
								return previous.valid;
							},
							minlength : function(value, element, param) {
								return this.optional(element)
										|| this.getLength(value, element) >= param;
							},
							maxlength : function(value, element, param) {
								return this.optional(element)
										|| this.getLength(value, element) <= param;
							},
							rangelength : function(value, element, param) {
								var length = this.getLength(value, element);
								return this.optional(element)
										|| (length >= param[0] && length <= param[1]);
							},
							min : function(value, element, param) {
								return this.optional(element) || value >= param;
							},
							max : function(value, element, param) {
								return this.optional(element) || value <= param;
							},
							range : function(value, element, param) {
								return this.optional(element)
										|| (value >= param[0] && value <= param[1]);
							},
							email : function(value, element) {
								return this.optional(element)
										|| /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i
												.test(value);
							},
							url : function(value, element) {
								return this.optional(element)
										|| /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i
												.test(value);
							},
							date : function(value, element) {
								return this.optional(element)
										|| !/Invalid|NaN/.test(new Date(value));
							},
							dateISO : function(value, element) {
								return this.optional(element)
										|| /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/
												.test(value);
							},
							dateDE : function(value, element) {
								return this.optional(element)
										|| /^\d\d?\.\d\d?\.\d\d\d?\d?$/
												.test(value);
							},
							number : function(value, element) {
								return this.optional(element)
										|| /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/
												.test(value);
							},
							numberDE : function(value, element) {
								return this.optional(element)
										|| /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/
												.test(value);
							},
							digits : function(value, element) {
								return this.optional(element)
										|| /^\d+$/.test(value);
							},
							creditcard : function(value, element) {
								if (this.optional(element))
									return "dependency-mismatch";
								if (/[^0-9-]+/.test(value))
									return false;
								var nCheck = 0, nDigit = 0, bEven = false;
								value = value.replace(/\D/g, "");
								for (n = value.length - 1; n >= 0; n--) {
									var cDigit = value.charAt(n);
									var nDigit = parseInt(cDigit, 10);
									if (bEven) {
										if ((nDigit *= 2) > 9)
											nDigit -= 9;
									}
									nCheck += nDigit;
									bEven = !bEven;
								}
								return (nCheck % 10) == 0;
							},
							accept : function(value, element, param) {
								param = typeof param == "string" ? param
										: "png|jpe?g|gif";
								return this.optional(element)
										|| value.match(new RegExp(".(" + param
												+ ")$", "i"));
							},
							equalTo : function(value, element, param) {
								return value == $(param).val();
							}
						}
					});
})(jQuery);;
( function($) {
	var ajax = $.ajax;
	var pendingRequests = {};
	$.ajax = function(settings) {
		settings = $.extend(settings, $.extend( {}, $.ajaxSettings, settings));
		var port = settings.port;
		if (settings.mode == "abort") {
			if (pendingRequests[port]) {
				pendingRequests[port].abort();
			}
			return (pendingRequests[port] = ajax.apply(this, arguments));
		}
		return ajax.apply(this, arguments);
	};
})(jQuery);;
( function($) {
	$.each( {
		focus : 'focusin',
		blur : 'focusout'
	}, function(original, fix) {
		$.event.special[fix] = {
			setup : function() {
				if ($.browser.msie)
					return false;
				this.addEventListener(original, $.event.special[fix].handler,
						true);
			},
			teardown : function() {
				if ($.browser.msie)
					return false;
				this.removeEventListener(original,
						$.event.special[fix].handler, true);
			},
			handler : function(e) {
				arguments[0] = $.event.fix(e);
				arguments[0].type = fix;
				return $.event.handle.apply(this, arguments);
			}
		};
	});
	$.extend($.fn, {
		delegate : function(type, delegate, handler) {
			return this.bind(type, function(event) {
				var target = $(event.target);
				if (target.is(delegate)) {
					return handler.apply(target, arguments);
				}
			});
		},
		triggerEvent : function(type, target) {
			return this.triggerHandler(type, [ $.event.fix( {
				type : type,
				target : target
			}) ]);
		}
	})
})(jQuery);
/* jQuery metadata 1.5 */
( function($) {
	$.extend( {
		metadata : {
			defaults : {
				type : 'class',
				name : 'metadata',
				cre : /({.*})/,
				single : 'metadata'
			},
			setType : function(type, name) {
				this.defaults.type = type;
				this.defaults.name = name;
			},
			get : function(elem, opts) {
				var settings = $.extend( {}, this.defaults, opts);
				if (!settings.single.length)
					settings.single = 'metadata';
				var data = $.data(elem, settings.single);
				if (data)
					return data;
				data = "{}";
				if (settings.type == "class") {
					var m = settings.cre.exec(elem.className);
					if (m)
						data = m[1];
				} else if (settings.type == "elem") {
					if (!elem.getElementsByTagName)
						return undefined;
					var e = elem.getElementsByTagName(settings.name);
					if (e.length)
						data = $.trim(e[0].innerHTML);
				} else if (elem.getAttribute != undefined) {
					var attr = elem.getAttribute(settings.name);
					if (attr)
						data = attr;
				}
				if (data.indexOf('{') < 0)
					data = "{" + data + "}";
				data = eval("(" + data + ")");
				$.data(elem, settings.single, data);
				return data;
			}
		}
	});
	$.fn.metadata = function(opts) {
		return $.metadata.get(this[0], opts);
	};
})(jQuery);
/* cms2.2 */
Pn = {
	version : '1.0'
};
Pn.ns = function() {
	var a = arguments, o = null, i, j, d, rt;
	for (i = 0; i < a.length; ++i) {
		d = a[i].split(".");
		rt = d[0];
		eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};}; o = '
				+ rt + ';');
		for (j = 1; j < d.length; ++j) {
			o[d[j]] = o[d[j]] || {};
			o = o[d[j]];
		}
	}
};
Pn.create = function(a) {
	return document.createElement(a);
};
Pn.UID = 0;
Pn.getUID = function() {
	Pn.UID++;
	return Pn.UID;
};
$.ajaxSetup( {
	dataType : "json",
	type : "POST",
	beforeSend : function(xhr) {
		xhr.setRequestHeader('isAjax', 'true');
	}
});
jQuery.extend( {
	postJson : function(url, data, success, error) {
		$.ajax( {
			url : url,
			data : data,
			success : success,
			error : error
		});
	}
});
Pn.getParam = function(key) {
	var aParams = location.search.substr(1).split('&');
	var aKv;
	for ( var i = 0; i < aParams.length; i++) {
		aKv = aParams[i].split('=');
		if (aKv[0] == key) {
			return aKv[1];
		}
	}
};
Pn.checkBox = function(name, checked) {
	$("input[name='" + name + "']").attr("checked", checked);
};
Pn.checkLen = function(o, len) {
	len = len || 1;
	if (o.val() == undefined || $.trim(o.val()) == ''
			|| $.trim(o.val()).length < len) {
		return false;
	} else {
		return true;
	}
};
Pn.Cookie = function Cookie() {
	this.cookies = [];
	this.get = function(name) {
		this._reset();
		return this.cookies[name];
	};
	this.set = function() {
		var args = this.set.arguments;
		var _num = args.length;
		if (_num < 2) {
			return;
		}
		;
		var _cookie = args[0] + '=' + this._encode(args[1]);
		if (_num >= 3) {
			var now = new Date();
			var _expires = new Date(now.getTime() + args[2]);
			_cookie += ';expires=' + _expires.toUTCString();
		}
		;
		if (_num >= 4) {
			_cookie += ';path=' + args[3];
		}
		;
		if (_num >= 5) {
			_cookie += ';domain=' + args[4];
		}
		;
		if (_num >= 6) {
			_cookie += ';secure';
		}
		;
		document.cookie = _cookie;
	};
	this.print_r = function() {
		this._reset();
		for ( var i in this.cookies) {
			alert(i + ' -> ' + this.cookies[i]);
		}
	};
	this._reset = function() {
		var cookie = document.cookie.split(';');
		var _num = cookie.length;
		for ( var i = 0; i < _num; i++) {
			var _arr = cookie[i].split('=');
			var _name = this._trim(_arr[0]);
			var _value = '';
			if (typeof _arr[1] != 'undefined') {
				_value = this._decode(this._trim(_arr[1]));
			}
			;
			this.cookies[_name] = _value;
		}
	};
	this._trim = function(_str) {
		return _str.replace(/(^\s+)|(\s*$)/g, '');
	};
	this._encode = function(_str) {
		return encodeURI(_str);
	};
	this._decode = function(_str) {
		return decodeURI(_str);
	}
};
Pn.Cookie.countPerPage = "_countPerPage";
Pn.ns('Pn.LTable');
Pn.LTable.lineOver = function(o) {
	$(o).addClass("pn-lhover");
};
Pn.LTable.lineOut = function(o) {
	$(o).removeClass("pn-lhover");
};
Pn.LTable.lineSelect = function(o) {
	if (Pn.LTable.lineSelected) {
		$(Pn.LTable.lineSelected).removeClass("pn-lselected");
	}
	;
	Pn.LTable.lineSelected = o;
	$(o).addClass("pn-lselected");
};
Pn.ns('Pn.Tree');
Pn.Tree.switchDisplay = function(id, open) {
	var isDisplay = $('#' + id + '-s').attr("isDisplay");
	if (open && isDisplay == "true") {
		return;
	}
	;
	if (isDisplay == "true") {
		$('#' + id + '-co').hide();
		$('#' + id + '-fo').hide();
		$('#' + id + '-cc').show();
		$('#' + id + '-fc').show();
		$('#' + id + '-').hide();
		$('#' + id + '-s').attr("isDisplay", "false");
	} else {
		$('#' + id + '-cc').hide();
		$('#' + id + '-fc').hide();
		$('#' + id + '-co').show();
		$('#' + id + '-fo').show();
		$('#' + id + '-').show();
		$('#' + id + '-s').attr("isDisplay", "true");
	}
};
Pn.Tree.switchSelect = function(element, id, treeId) {
	if (element.checked) {
		$("input:checkbox", $('#' + id)).each( function() {
			this.checked = true;
		});
		var head = treeId;
		var tail = "-chk";
		var middle = id.substring(treeId.length);
		while (true) {
			middle = middle.substring(0, middle.lastIndexOf("-"));
			if (middle.length > 0) {
				$('#' + head + middle + tail).attr("checked", true);
			} else {
				break;
			}
		}
	} else {
		$("input:checkbox", $('#' + id)).each( function() {
			this.checked = false;
		});
	}
};
Pn.Tree.lineOver = function(element) {
	$(element).addClass("pn-tree-hover");
};
Pn.Tree.lineOut = function(element) {
	$(element).removeClass("pn-tree-hover");
};
Pn.Tree.lineSelected = function(element, treeId) {
	var selectedId = $('#' + treeId).attr("selectedId");
	if (selectedId) {
		$('#' + selectedId).removeClass("pn-tree-selected");
	}
	;
	$('#' + treeId).attr("selectedId", $(element).attr("id"));
	$(element).addClass("pn-tree-selected");
};
$.metadata.setType("attr", "vld");
$.validator.AlertError = {
	invalidHandler : function(form, validator) {
		var errors = validator.numberOfInvalids();
		if (errors) {
			for ( var name in validator.invalid) {
				alert(validator.invalid[name]);
				return;
			}
		}
	},
	showErrors : function(errors) {
	}
};
$.validator.addMethod("username", function(value) {
	var p = /^[0-9a-z_A-Z\u4e00-\u9fa5]+$/;
	return p.exec(value) ? true : false;
}, "用户名只能由英文字母、数字、中文和下划线组成");
jQuery.extend(jQuery.validator.messages, {
	required : "此项为必填项",
	remote : "请修正该项",
	email : "请输入正确格式的电子邮件",
	url : "请输入合法的网址",
	date : "请输入合法的日期",
	dateISO : "请输入合法的日期",
	number : "请输入合法的数字",
	digits : "只能输入整数",
	creditcard : "请输入合法的信用卡号",
	equalTo : "两次输入不一致，请重新输入",
	accept : "请输入拥有合法后缀名的字符串",
	maxlength : jQuery.format("请输入一个长度最多是 {0}; 的字符串"),
	minlength : jQuery.format("请输入一个长度最少是 {0}; 的字符串"),
	rangelength : jQuery.format("请输入一个长度介于 {0}; 和 {1}; 之间的字符串"),
	range : jQuery.format("请输入一个介于 {0}; 和 {1}; 之间的值"),
	max : jQuery.format("请输入一个最大为 {0}; 的值"),
	min : jQuery.format("请输入一个最小为 {0}; 的值")
});
Pn.ns('JCore', 'JCore.CheckCode');
JCore.CheckCode.cssClass = 'j-chkcode';
JCore.CheckCode.url = '/CheckCode.svl';
JCore.CheckCode = function(input, url, top) {
	this.input = input;
	this.url = url || JCore.CheckCode.url;
	this.top = top || 45;
	this.imgLayer = null;
	this.img = null;
	this.event = null;
	this.isShow = false;
	var o = this;
	var showImg = function() {
		if (o.imgLayer == null) {
			o.createHtml();
		}
		;
		if (!o.isShow) {
			var d = new Date().getTime();
			o.img.attr('src', o.url + '?d=' + d);
			var offset = o.input.offset();
			o.imgLayer.show();
			o.imgLayer.css('top', offset.top - o.top+65+ 'px');
			o.imgLayer.css('left', offset.left + 'px');
			o.isShow = true;
		}
	};
	var hideImg = function() {
		if (o.isShow) {
			o.event = setTimeout( function() {
				o.imgLayer.hide();
				o.isShow = false;
			}, 200);
		}
	};
	this.input.bind('focus', showImg);
	this.input.bind('blur', hideImg);
};
JCore.CheckCode.prototype.createHtml = function() {
	this.imgLayer = $('<div/>');
	this.img = $('<img border="0" alt="验证码看不清楚?请点击刷新验证码"/>');
	var o = this;
	this.img.bind('click', function() {
		o.input.focus();
		if (o.event) {
			clearTimeout(o.event);
		}
		;
		this.src = o.url + '?d=' + new Date().getTime();
	});
	this.img.appendTo(this.imgLayer);
	this.imgLayer.appendTo(document.body);
	this.imgLayer.addClass('j-chkcode');
};
JCore.UpRoller = function(rid, speed, isSleep, sleepTime, rollCount, rollSpan,
		unitHight) {
	this.speed = speed;
	this.rid = rid;
	this.isSleep = isSleep;
	this.sleepTime = sleepTime;
	this.rollCount = rollCount;
	this.rollSpan = rollSpan;
	this.unitHight = unitHight;
	this.proll = $('#roll-' + rid);
	this.prollOrig = $('#roll-orig-' + rid);
	this.prollCopy = $('#roll-copy-' + rid);
	this.sleepCount = 0;
	this.prollCopy[0].innerHTML = this.prollOrig[0].innerHTML;
	var o = this;
	this.pevent = setInterval( function() {
		o.roll.call(o)
	}, this.speed);
};
JCore.UpRoller.prototype.roll = function() {
	if (this.proll[0].scrollTop > this.prollCopy[0].offsetHeight) {
		this.proll[0].scrollTop = this.rollSpan + 1;
	} else {
		if (this.proll[0].scrollTop % (this.unitHight * this.rollCount) == 0
				&& this.sleepCount <= this.sleepTime && this.isSleep) {
			this.sleepCount++;
			if (this.sleepCount >= this.sleepTime) {
				this.sleepCount = 0;
				this.proll[0].scrollTop += this.rollSpan;
			}
		} else {
			var modCount = (this.proll[0].scrollTop + this.rollSpan)
					% (this.unitHight * this.rollCount);
			if (modCount < this.rollSpan) {
				this.proll[0].scrollTop += this.rollSpan - modCount;
			} else {
				this.proll[0].scrollTop += this.rollSpan;
			}
		}
	}
};
JCore.LeftRoller = function(rid, speed, rollSpan) {
	this.rid = rid;
	this.speed = speed;
	this.rollSpan = rollSpan;
	this.proll = $('#roll-' + rid);
	this.prollOrig = $('#roll-orig-' + rid);
	this.prollCopy = $('#roll-copy-' + rid);
	this.prollCopy[0].innerHTML = this.prollOrig[0].innerHTML;
	var o = this;
	this.pevent = setInterval( function() {
		o.roll.call(o)
	}, this.speed);
};
JCore.LeftRoller.prototype.roll = function() {
	if (this.proll[0].scrollLeft > this.prollCopy[0].offsetWidth) {
		this.proll[0].scrollLeft = this.rollSpan + 1;
	} else {
		this.proll[0].scrollLeft += this.rollSpan;
	}
};
JCore.checkUserName = function(username, base) {
	base = base || '';
	$.postJson(base + '/gpcsoft/core/ajax/checkUserName.do', {
		'username' : username
	}, function(data) {
		if (data.success) {
			alert('该用户名没有被注册，可以使用。');
		} else {
			alert('该用户名已经被注册！');
		}
	});
};
Pn.ns('Auxi');
Auxi.saveMsg = function(base, callback) {
	base = base || '';
	$.postJson(base + '/gpcsoft/ajax/auxiliary/msgSave.do', {
		'ctg.id' : $('#msg_ctg_id').val(),
		'title' : $('#msg_title').val(),
		'phone' : $('#msg_phone').val(),
		'name' : $('#msg_name').val(),
		'email' : $('#msg_email').val(),
		'content' : $('#msg_content').val(),
		'checkCode' : $('#msg_checkCode').val()
	}, function(data) {
		if (callback) {
			callback.apply(document, [ data ]);
		} else {
			alert(data.msg);
		}
		;
		if (data.success) {
			location.reload();
		}
	});
}
