(function () {
	var y = this,
		undefined, _jQuery = y.jQuery,
		_$ = y.$,
		jQuery = y.jQuery = y.$ = function (a, b) {
			return new jQuery.fn.init(a, b)
		},
		quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
		isSimple = /^.[^:#\[\.,]*$/;
	jQuery.fn = jQuery.prototype = {
		init: function (a, b) {
			a = a || document;
			if (a.nodeType) {
				this[0] = a;
				this.length = 1;
				this.context = a;
				return this
			}
			if (typeof a === "string") {
				var c = quickExpr.exec(a);
				if (c && (c[1] || !b)) {
					if (c[1]) a = jQuery.clean([c[1]], b);
					else {
						var d = document.getElementById(c[3]);
						if (d && d.id != c[3]) return jQuery().find(a);
						var e = jQuery(d || []);
						e.context = document;
						e.selector = a;
						return e
					}
				} else return jQuery(b).find(a)
			} else if (jQuery.isFunction(a)) return jQuery(document).ready(a);
			if (a.selector && a.context) {
				this.selector = a.selector;
				this.context = a.context
			}
			return this.setArray(jQuery.isArray(a) ? a : jQuery.makeArray(a))
		},
		selector: "",
		jquery: "1.3.2",
		size: function () {
			return this.length
		},
		get: function (a) {
			return a === undefined ? Array.prototype.slice.call(this) : this[a]
		},
		pushStack: function (a, b, c) {
			var d = jQuery(a);
			d.prevObject = this;
			d.context = this.context;
			if (b === "find") d.selector = this.selector + (this.selector ? " " : "") + c;
			else if (b) d.selector = this.selector + "." + b + "(" + c + ")";
			return d
		},
		setArray: function (a) {
			this.length = 0;
			Array.prototype.push.apply(this, a);
			return this
		},
		each: function (a, b) {
			return jQuery.each(this, a, b)
		},
		index: function (a) {
			return jQuery.inArray(a && a.jquery ? a[0] : a, this)
		},
		attr: function (a, b, c) {
			var d = a;
			if (typeof a === "string") if (b === undefined) return this[0] && jQuery[c || "attr"](this[0], a);
			else {
				d = {};
				d[a] = b
			}
			return this.each(function (i) {
				for (a in d) jQuery.attr(c ? this.style : this, a, jQuery.prop(this, d[a], c, i, a))
			})
		},
		css: function (a, b) {
			if ((a == 'width' || a == 'height') && parseFloat(b) < 0) b = undefined;
			return this.attr(a, b, "curCSS")
		},
		text: function (a) {
			if (typeof a !== "object" && a != null) return this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(a));
			var b = "";
			jQuery.each(a || this, function () {
				jQuery.each(this.childNodes, function () {
					if (this.nodeType != 8) b += this.nodeType != 1 ? this.nodeValue : jQuery.fn.text([this])
				})
			});
			return b
		},
		wrapAll: function (b) {
			if (this[0]) {
				var c = jQuery(b, this[0].ownerDocument).clone();
				if (this[0].parentNode) c.insertBefore(this[0]);
				c.map(function () {
					var a = this;
					while (a.firstChild) a = a.firstChild;
					return a
				}).append(this)
			}
			return this
		},
		wrapInner: function (a) {
			return this.each(function () {
				jQuery(this).contents().wrapAll(a)
			})
		},
		wrap: function (a) {
			return this.each(function () {
				jQuery(this).wrapAll(a)
			})
		},
		append: function () {
			return this.domManip(arguments, true, function (a) {
				if (this.nodeType == 1) this.appendChild(a)
			})
		},
		prepend: function () {
			return this.domManip(arguments, true, function (a) {
				if (this.nodeType == 1) this.insertBefore(a, this.firstChild)
			})
		},
		before: function () {
			return this.domManip(arguments, false, function (a) {
				this.parentNode.insertBefore(a, this)
			})
		},
		after: function () {
			return this.domManip(arguments, false, function (a) {
				this.parentNode.insertBefore(a, this.nextSibling)
			})
		},
		end: function () {
			return this.prevObject || jQuery([])
		},
		push: [].push,
		sort: [].sort,
		splice: [].splice,
		find: function (b) {
			if (this.length === 1) {
				var c = this.pushStack([], "find", b);
				c.length = 0;
				jQuery.find(b, this[0], c);
				return c
			} else {
				return this.pushStack(jQuery.unique(jQuery.map(this, function (a) {
					return jQuery.find(b, a)
				})), "find", b)
			}
		},
		clone: function (d) {
			var e = this.map(function () {
				if (!jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this)) {
					var a = this.outerHTML;
					if (!a) {
						var b = this.ownerDocument.createElement("div");
						b.appendChild(this.cloneNode(true));
						a = b.innerHTML
					}
					return jQuery.clean([a.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]
				} else return this.cloneNode(true)
			});
			if (d === true) {
				var f = this.find("*").andSelf(),
					i = 0;
				e.find("*").andSelf().each(function () {
					if (this.nodeName !== f[i].nodeName) return;
					var a = jQuery.data(f[i], "events");
					for (var b in a) {
						for (var c in a[b]) {
							jQuery.event.add(this, b, a[b][c], a[b][c].data)
						}
					}
					i++
				})
			}
			return e
		},
		filter: function (b) {
			return this.pushStack(jQuery.isFunction(b) && jQuery.grep(this, function (a, i) {
				return b.call(a, i)
			}) || jQuery.multiFilter(b, jQuery.grep(this, function (a) {
				return a.nodeType === 1
			})), "filter", b)
		},
		closest: function (b) {
			var c = jQuery.expr.match.POS.test(b) ? jQuery(b) : null,
				closer = 0;
			return this.map(function () {
				var a = this;
				while (a && a.ownerDocument) {
					if (c ? c.index(a) > -1 : jQuery(a).is(b)) {
						jQuery.data(a, "closest", closer);
						return a
					}
					a = a.parentNode;
					closer++
				}
			})
		},
		not: function (a) {
			if (typeof a === "string") if (isSimple.test(a)) return this.pushStack(jQuery.multiFilter(a, this, true), "not", a);
			else a = jQuery.multiFilter(a, this);
			var b = a.length && a[a.length - 1] !== undefined && !a.nodeType;
			return this.filter(function () {
				return b ? jQuery.inArray(this, a) < 0 : this != a
			})
		},
		add: function (a) {
			return this.pushStack(jQuery.unique(jQuery.merge(this.get(), typeof a === "string" ? jQuery(a) : jQuery.makeArray(a))))
		},
		is: function (a) {
			return !!a && jQuery.multiFilter(a, this).length > 0
		},
		hasClass: function (a) {
			return !!a && this.is("." + a)
		},
		val: function (b) {
			if (b === undefined) {
				var c = this[0];
				if (c) {
					if (jQuery.nodeName(c, 'option')) return (c.attributes.value || {}).specified ? c.value : c.text;
					if (jQuery.nodeName(c, "select")) {
						var d = c.selectedIndex,
							values = [],
							options = c.options,
							one = c.type == "select-one";
						if (d < 0) return null;
						for (var i = one ? d : 0, max = one ? d + 1 : options.length; i < max; i++) {
							var e = options[i];
							if (e.selected) {
								b = jQuery(e).val();
								if (one) return b;
								values.push(b)
							}
						}
						return values
					}
					return (c.value || "").replace(/\r/g, "")
				}
				return undefined
			}
			if (typeof b === "number") b += '';
			return this.each(function () {
				if (this.nodeType != 1) return;
				if (jQuery.isArray(b) && /radio|checkbox/.test(this.type)) this.checked = (jQuery.inArray(this.value, b) >= 0 || jQuery.inArray(this.name, b) >= 0);
				else if (jQuery.nodeName(this, "select")) {
					var a = jQuery.makeArray(b);
					jQuery("option", this).each(function () {
						this.selected = (jQuery.inArray(this.value, a) >= 0 || jQuery.inArray(this.text, a) >= 0)
					});
					if (!a.length) this.selectedIndex = -1
				} else this.value = b
			})
		},
		html: function (a) {
			return a === undefined ? (this[0] ? this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : null) : this.empty().append(a)
		},
		replaceWith: function (a) {
			return this.after(a).remove()
		},
		eq: function (i) {
			return this.slice(i, +i + 1)
		},
		slice: function () {
			return this.pushStack(Array.prototype.slice.apply(this, arguments), "slice", Array.prototype.slice.call(arguments).join(","))
		},
		map: function (b) {
			return this.pushStack(jQuery.map(this, function (a, i) {
				return b.call(a, i, a)
			}))
		},
		andSelf: function () {
			return this.add(this.prevObject)
		},
		domManip: function (c, d, e) {
			if (this[0]) {
				var f = (this[0].ownerDocument || this[0]).createDocumentFragment(),
					scripts = jQuery.clean(c, (this[0].ownerDocument || this[0]), f),
					first = f.firstChild;
				if (first) for (var i = 0, l = this.length; i < l; i++) e.call(root(this[i], first), this.length > 1 || i > 0 ? f.cloneNode(true) : f);
				if (scripts) jQuery.each(scripts, evalScript)
			}
			return this;

			function root(a, b) {
				return d && jQuery.nodeName(a, "table") && jQuery.nodeName(b, "tr") ? (a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody"))) : a
			}
		}
	};
	jQuery.fn.init.prototype = jQuery.fn;

	function evalScript(i, a) {
		if (a.src) jQuery.ajax({
			url: a.src,
			async: false,
			dataType: "script"
		});
		else jQuery.globalEval(a.text || a.textContent || a.innerHTML || "");
		if (a.parentNode) a.parentNode.removeChild(a)
	}

	function now() {
		return +new Date
	}
	jQuery.extend = jQuery.fn.extend = function () {
		var a = arguments[0] || {},
			i = 1,
			length = arguments.length,
			deep = false,
			options;
		if (typeof a === "boolean") {
			deep = a;
			a = arguments[1] || {};
			i = 2
		}
		if (typeof a !== "object" && !jQuery.isFunction(a)) a = {};
		if (length == i) {
			a = this;
			--i
		}
		for (; i < length; i++) if ((options = arguments[i]) != null) for (var b in options) {
			var c = a[b],
				copy = options[b];
			if (a === copy) continue;
			if (deep && copy && typeof copy === "object" && !copy.nodeType) a[b] = jQuery.extend(deep, c || (copy.length != null ? [] : {}), copy);
			else if (copy !== undefined) a[b] = copy
		}
		return a
	};
	var z = /z-?index|font-?weight|opacity|zoom|line-?height/i,
		defaultView = document.defaultView || {},
		toString = Object.prototype.toString;
	jQuery.extend({
		noConflict: function (a) {
			y.$ = _$;
			if (a) y.jQuery = _jQuery;
			return jQuery
		},
		isFunction: function (a) {
			return toString.call(a) === "[object Function]"
		},
		isArray: function (a) {
			return toString.call(a) === "[object Array]"
		},
		isXMLDoc: function (a) {
			return a.nodeType === 9 && a.documentElement.nodeName !== "HTML" || !! a.ownerDocument && jQuery.isXMLDoc(a.ownerDocument)
		},
		globalEval: function (a) {
			if (a && /\S/.test(a)) {
				var b = document.getElementsByTagName("head")[0] || document.documentElement,
					script = document.createElement("script");
				script.type = "text/javascript";
				if (jQuery.support.scriptEval) script.appendChild(document.createTextNode(a));
				else script.text = a;
				b.insertBefore(script, b.firstChild);
				b.removeChild(script)
			}
		},
		nodeName: function (a, b) {
			return a.nodeName && a.nodeName.toUpperCase() == b.toUpperCase()
		},
		each: function (a, b, c) {
			var d, i = 0,
				length = a.length;
			if (c) {
				if (length === undefined) {
					for (d in a) if (b.apply(a[d], c) === false) break
				} else for (; i < length;) if (b.apply(a[i++], c) === false) break
			} else {
				if (length === undefined) {
					for (d in a) if (b.call(a[d], d, a[d]) === false) break
				} else for (var e = a[0]; i < length && b.call(e, i, e) !== false; e = a[++i]) {}
			}
			return a
		},
		prop: function (a, b, c, i, d) {
			if (jQuery.isFunction(b)) b = b.call(a, i);
			return typeof b === "number" && c == "curCSS" && !z.test(d) ? b + "px" : b
		},
		className: {
			add: function (b, c) {
				jQuery.each((c || "").split(/\s+/), function (i, a) {
					if (b.nodeType == 1 && !jQuery.className.has(b.className, a)) b.className += (b.className ? " " : "") + a
				})
			},
			remove: function (b, c) {
				if (b.nodeType == 1) b.className = c !== undefined ? jQuery.grep(b.className.split(/\s+/), function (a) {
					return !jQuery.className.has(c, a)
				}).join(" ") : ""
			},
			has: function (a, b) {
				return a && jQuery.inArray(b, (a.className || a).toString().split(/\s+/)) > -1
			}
		},
		swap: function (a, b, c) {
			var d = {};
			for (var e in b) {
				d[e] = a.style[e];
				a.style[e] = b[e]
			}
			c.call(a);
			for (var e in b) a.style[e] = d[e]
		},
		css: function (a, b, c, d) {
			if (b == "width" || b == "height") {
				var e, props = {
					position: "absolute",
					visibility: "hidden",
					display: "block"
				},
					which = b == "width" ? ["Left", "Right"] : ["Top", "Bottom"];

				function getWH() {
					e = b == "width" ? a.offsetWidth : a.offsetHeight;
					if (d === "border") return;
					jQuery.each(which, function () {
						if (!d) e -= parseFloat(jQuery.curCSS(a, "padding" + this, true)) || 0;
						if (d === "margin") e += parseFloat(jQuery.curCSS(a, "margin" + this, true)) || 0;
						else e -= parseFloat(jQuery.curCSS(a, "border" + this + "Width", true)) || 0
					})
				}
				if (a.offsetWidth !== 0) getWH();
				else jQuery.swap(a, props, getWH);
				return Math.max(0, Math.round(e))
			}
			return jQuery.curCSS(a, b, c)
		},
		curCSS: function (c, d, e) {
			var f, style = c.style;
			if (d == "opacity" && !jQuery.support.opacity) {
				f = jQuery.attr(style, "opacity");
				return f == "" ? "1" : f
			}
			if (d.match(/float/i)) d = E;
			if (!e && style && style[d]) f = style[d];
			else if (defaultView.getComputedStyle) {
				if (d.match(/float/i)) d = "float";
				d = d.replace(/([A-Z])/g, "-$1").toLowerCase();
				var g = defaultView.getComputedStyle(c, null);
				if (g) f = g.getPropertyValue(d);
				if (d == "opacity" && f == "") f = "1"
			} else if (c.currentStyle) {
				var h = d.replace(/\-(\w)/g, function (a, b) {
					return b.toUpperCase()
				});
				f = c.currentStyle[d] || c.currentStyle[h];
				if (!/^\d+(px)?$/i.test(f) && /^\d/.test(f)) {
					var i = style.left,
						rsLeft = c.runtimeStyle.left;
					c.runtimeStyle.left = c.currentStyle.left;
					style.left = f || 0;
					f = style.pixelLeft + "px";
					style.left = i;
					c.runtimeStyle.left = rsLeft
				}
			}
			return f
		},
		clean: function (h, k, l) {
			k = k || document;
			if (typeof k.createElement === "undefined") k = k.ownerDocument || k[0] && k[0].ownerDocument || document;
			if (!l && h.length === 1 && typeof h[0] === "string") {
				var m = /^<(\w+)\s*\/?>$/.exec(h[0]);
				if (m) return [k.createElement(m[1])]
			}
			var n = [],
				scripts = [],
				div = k.createElement("div");
			jQuery.each(h, function (i, d) {
				if (typeof d === "number") d += '';
				if (!d) return;
				if (typeof d === "string") {
					d = d.replace(/(<(\w+)[^>]*?)\/>/g, function (a, b, c) {
						return c.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? a : b + "></" + c + ">"
					});
					var e = d.replace(/^\s+/, "").substring(0, 10).toLowerCase();
					var f = !e.indexOf("<opt") && [1, "<select multiple='multiple'>", "</select>"] || !e.indexOf("<leg") && [1, "<fieldset>", "</fieldset>"] || e.match(/^<(thead|tbody|tfoot|colg|cap)/) && [1, "<table>", "</table>"] || !e.indexOf("<tr") && [2, "<table><tbody>", "</tbody></table>"] || (!e.indexOf("<td") || !e.indexOf("<th")) && [3, "<table><tbody><tr>", "</tr></tbody></table>"] || !e.indexOf("<col") && [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"] || !jQuery.support.htmlSerialize && [1, "div<div>", "</div>"] || [0, "", ""];
					div.innerHTML = f[1] + d + f[2];
					while (f[0]--) div = div.lastChild;
					if (!jQuery.support.tbody) {
						var g = /<tbody/i.test(d),
							tbody = !e.indexOf("<table") && !g ? div.firstChild && div.firstChild.childNodes : f[1] == "<table>" && !g ? 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 (!jQuery.support.leadingWhitespace && /^\s/.test(d)) div.insertBefore(k.createTextNode(d.match(/^\s*/)[0]), div.firstChild);
					d = jQuery.makeArray(div.childNodes)
				}
				if (d.nodeType) n.push(d);
				else n = jQuery.merge(n, d)
			});
			if (l) {
				for (var i = 0; n[i]; i++) {
					if (jQuery.nodeName(n[i], "script") && (!n[i].type || n[i].type.toLowerCase() === "text/javascript")) {
						scripts.push(n[i].parentNode ? n[i].parentNode.removeChild(n[i]) : n[i])
					} else {
						if (n[i].nodeType === 1) n.splice.apply(n, [i + 1, 0].concat(jQuery.makeArray(n[i].getElementsByTagName("script"))));
						l.appendChild(n[i])
					}
				}
				return scripts
			}
			return n
		},
		attr: function (c, d, e) {
			if (!c || c.nodeType == 3 || c.nodeType == 8) return undefined;
			var f = !jQuery.isXMLDoc(c),
				set = e !== undefined;
			d = f && jQuery.props[d] || d;
			if (c.tagName) {
				var g = /href|src|style/.test(d);
				if (d == "selected" && c.parentNode) c.parentNode.selectedIndex;
				if (d in c && f && !g) {
					if (set) {
						if (d == "type" && jQuery.nodeName(c, "input") && c.parentNode) throw "type property can't be changed";
						c[d] = e
					}
					if (jQuery.nodeName(c, "form") && c.getAttributeNode(d)) return c.getAttributeNode(d).nodeValue;
					if (d == "tabIndex") {
						var h = c.getAttributeNode("tabIndex");
						return h && h.specified ? h.value : c.nodeName.match(/(button|input|object|select|textarea)/i) ? 0 : c.nodeName.match(/^(a|area)$/i) && c.href ? 0 : undefined
					}
					return c[d]
				}
				if (!jQuery.support.style && f && d == "style") return jQuery.attr(c.style, "cssText", e);
				if (set) c.setAttribute(d, "" + e);
				var i = !jQuery.support.hrefNormalized && f && g ? c.getAttribute(d, 2) : c.getAttribute(d);
				return i === null ? undefined : i
			}
			if (!jQuery.support.opacity && d == "opacity") {
				if (set) {
					c.zoom = 1;
					c.filter = (c.filter || "").replace(/alpha\([^)]*\)/, "") + (parseInt(e) + '' == "NaN" ? "" : "alpha(opacity=" + e * 100 + ")")
				}
				return c.filter && c.filter.indexOf("opacity=") >= 0 ? (parseFloat(c.filter.match(/opacity=([^)]*)/)[1]) / 100) + '' : ""
			}
			d = d.replace(/-([a-z])/ig, function (a, b) {
				return b.toUpperCase()
			});
			if (set) c[d] = e;
			return c[d]
		},
		trim: function (a) {
			return (a || "").replace(/^\s+|\s+$/g, "")
		},
		makeArray: function (a) {
			var b = [];
			if (a != null) {
				var i = a.length;
				if (i == null || typeof a === "string" || jQuery.isFunction(a) || a.setInterval) b[0] = a;
				else while (i) b[--i] = a[i]
			}
			return b
		},
		inArray: function (a, b) {
			for (var i = 0, length = b.length; i < length; i++) if (b[i] === a) return i;
			return -1
		},
		merge: function (a, b) {
			var i = 0,
				elem, pos = a.length;
			if (!jQuery.support.getAll) {
				while ((elem = b[i++]) != null) if (elem.nodeType != 8) a[pos++] = elem
			} else while ((elem = b[i++]) != null) a[pos++] = elem;
			return a
		},
		unique: function (a) {
			var b = [],
				done = {};
			try {
				for (var i = 0, length = a.length; i < length; i++) {
					var c = jQuery.data(a[i]);
					if (!done[c]) {
						done[c] = true;
						b.push(a[i])
					}
				}
			} catch (e) {
				b = a
			}
			return b
		},
		grep: function (a, b, c) {
			var d = [];
			for (var i = 0, length = a.length; i < length; i++) if (!c != !b(a[i], i)) d.push(a[i]);
			return d
		},
		map: function (a, b) {
			var c = [];
			for (var i = 0, length = a.length; i < length; i++) {
				var d = b(a[i], i);
				if (d != null) c[c.length] = d
			}
			return c.concat.apply([], c)
		}
	});
	var A = navigator.userAgent.toLowerCase();
	jQuery.browser = {
		version: (A.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, '0'])[1],
		safari: /webkit/.test(A),
		opera: /opera/.test(A),
		msie: /msie/.test(A) && !/opera/.test(A),
		mozilla: /mozilla/.test(A) && !/(compatible|webkit)/.test(A)
	};
	jQuery.each({
		parent: function (a) {
			return a.parentNode
		},
		parents: function (a) {
			return jQuery.dir(a, "parentNode")
		},
		next: function (a) {
			return jQuery.nth(a, 2, "nextSibling")
		},
		prev: function (a) {
			return jQuery.nth(a, 2, "previousSibling")
		},
		nextAll: function (a) {
			return jQuery.dir(a, "nextSibling")
		},
		prevAll: function (a) {
			return jQuery.dir(a, "previousSibling")
		},
		siblings: function (a) {
			return jQuery.sibling(a.parentNode.firstChild, a)
		},
		children: function (a) {
			return jQuery.sibling(a.firstChild)
		},
		contents: function (a) {
			return jQuery.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : jQuery.makeArray(a.childNodes)
		}
	}, function (c, d) {
		jQuery.fn[c] = function (a) {
			var b = jQuery.map(this, d);
			if (a && typeof a == "string") b = jQuery.multiFilter(a, b);
			return this.pushStack(jQuery.unique(b), c, a)
		}
	});
	jQuery.each({
		appendTo: "append",
		prependTo: "prepend",
		insertBefore: "before",
		insertAfter: "after",
		replaceAll: "replaceWith"
	}, function (d, e) {
		jQuery.fn[d] = function (a) {
			var b = [],
				insert = jQuery(a);
			for (var i = 0, l = insert.length; i < l; i++) {
				var c = (i > 0 ? this.clone(true) : this).get();
				jQuery.fn[e].apply(jQuery(insert[i]), c);
				b = b.concat(c)
			}
			return this.pushStack(b, d, a)
		}
	});
	jQuery.each({
		removeAttr: function (a) {
			jQuery.attr(this, a, "");
			if (this.nodeType == 1) this.removeAttribute(a)
		},
		addClass: function (a) {
			jQuery.className.add(this, a)
		},
		removeClass: function (a) {
			jQuery.className.remove(this, a)
		},
		toggleClass: function (a, b) {
			if (typeof b !== "boolean") b = !jQuery.className.has(this, a);
			jQuery.className[b ? "add" : "remove"](this, a)
		},
		remove: function (a) {
			if (!a || jQuery.filter(a, [this]).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).children().remove();
			while (this.firstChild) this.removeChild(this.firstChild)
		}
	}, function (a, b) {
		jQuery.fn[a] = function () {
			return this.each(b, arguments)
		}
	});

	function num(a, b) {
		return a[0] && parseInt(jQuery.curCSS(a[0], b, true), 10) || 0
	}
	var B = "jQuery" + now(),
		uuid = 0,
		windowData = {};
	jQuery.extend({
		cache: {},
		data: function (a, b, c) {
			a = a == y ? windowData : a;
			var d = a[B];
			if (!d) d = a[B] = ++uuid;
			if (b && !jQuery.cache[d]) jQuery.cache[d] = {};
			if (c !== undefined) jQuery.cache[d][b] = c;
			return b ? jQuery.cache[d][b] : d
		},
		removeData: function (a, b) {
			a = a == y ? windowData : a;
			var c = a[B];
			if (b) {
				if (jQuery.cache[c]) {
					delete jQuery.cache[c][b];
					b = "";
					for (b in jQuery.cache[c]) break;
					if (!b) jQuery.removeData(a)
				}
			} else {
				try {
					delete a[B]
				} catch (e) {
					if (a.removeAttribute) a.removeAttribute(B)
				}
				delete jQuery.cache[c]
			}
		},
		queue: function (a, b, c) {
			if (a) {
				b = (b || "fx") + "queue";
				var q = jQuery.data(a, b);
				if (!q || jQuery.isArray(c)) q = jQuery.data(a, b, jQuery.makeArray(c));
				else if (c) q.push(c)
			}
			return q
		},
		dequeue: function (a, b) {
			var c = jQuery.queue(a, b),
				fn = c.shift();
			if (!b || b === "fx") fn = c[0];
			if (fn !== undefined) fn.call(a)
		}
	});
	jQuery.fn.extend({
		data: function (a, b) {
			var c = a.split(".");
			c[1] = c[1] ? "." + c[1] : "";
			if (b === undefined) {
				var d = this.triggerHandler("getData" + c[1] + "!", [c[0]]);
				if (d === undefined && this.length) d = jQuery.data(this[0], a);
				return d === undefined && c[1] ? this.data(c[0]) : d
			} else return this.trigger("setData" + c[1] + "!", [c[0], b]).each(function () {
				jQuery.data(this, a, b)
			})
		},
		removeData: function (a) {
			return this.each(function () {
				jQuery.removeData(this, a)
			})
		},
		queue: function (b, c) {
			if (typeof b !== "string") {
				c = b;
				b = "fx"
			}
			if (c === undefined) return jQuery.queue(this[0], b);
			return this.each(function () {
				var a = jQuery.queue(this, b, c);
				if (b == "fx" && a.length == 1) a[0].call(this)
			})
		},
		dequeue: function (a) {
			return this.each(function () {
				jQuery.dequeue(this, a)
			})
		}
	});
	(function () {
		var k = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
			done = 0,
			toString = Object.prototype.toString;
		var o = function (a, b, c, d) {
				c = c || [];
				b = b || document;
				if (b.nodeType !== 1 && b.nodeType !== 9) return [];
				if (!a || typeof a !== "string") {
					return c
				}
				var e = [],
					m, set, checkSet, check, mode, extra, prune = true;
				k.lastIndex = 0;
				while ((m = k.exec(a)) !== null) {
					e.push(m[1]);
					if (m[2]) {
						extra = RegExp.rightContext;
						break
					}
				}
				if (e.length > 1 && q.exec(a)) {
					if (e.length === 2 && p.relative[e[0]]) {
						set = x(e[0] + e[1], b)
					} else {
						set = p.relative[e[0]] ? [b] : o(e.shift(), b);
						while (e.length) {
							a = e.shift();
							if (p.relative[a]) a += e.shift();
							set = x(a, set)
						}
					}
				} else {
					var f = d ? {
						expr: e.pop(),
						set: t(d)
					} : o.find(e.pop(), e.length === 1 && b.parentNode ? b.parentNode : b, w(b));
					set = o.filter(f.expr, f.set);
					if (e.length > 0) {
						checkSet = t(set)
					} else {
						prune = false
					}
					while (e.length) {
						var g = e.pop(),
							pop = g;
						if (!p.relative[g]) {
							g = ""
						} else {
							pop = e.pop()
						}
						if (pop == null) {
							pop = b
						}
						p.relative[g](checkSet, pop, w(b))
					}
				}
				if (!checkSet) {
					checkSet = set
				}
				if (!checkSet) {
					throw "Syntax error, unrecognized expression: " + (g || a);
				}
				if (toString.call(checkSet) === "[object Array]") {
					if (!prune) {
						c.push.apply(c, checkSet)
					} else if (b.nodeType === 1) {
						for (var i = 0; checkSet[i] != null; i++) {
							if (checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && v(b, checkSet[i]))) {
								c.push(set[i])
							}
						}
					} else {
						for (var i = 0; checkSet[i] != null; i++) {
							if (checkSet[i] && checkSet[i].nodeType === 1) {
								c.push(set[i])
							}
						}
					}
				} else {
					t(checkSet, c)
				}
				if (extra) {
					o(extra, b, c, d);
					if (u) {
						hasDuplicate = false;
						c.sort(u);
						if (hasDuplicate) {
							for (var i = 1; i < c.length; i++) {
								if (c[i] === c[i - 1]) {
									c.splice(i--, 1)
								}
							}
						}
					}
				}
				return c
			};
		o.matches = function (a, b) {
			return o(a, null, null, b)
		};
		o.find = function (a, b, c) {
			var d, match;
			if (!a) {
				return []
			}
			for (var i = 0, l = p.order.length; i < l; i++) {
				var e = p.order[i],
					match;
				if ((match = p.match[e].exec(a))) {
					var f = RegExp.leftContext;
					if (f.substr(f.length - 1) !== "\\") {
						match[1] = (match[1] || "").replace(/\\/g, "");
						d = p.find[e](match, b, c);
						if (d != null) {
							a = a.replace(p.match[e], "");
							break
						}
					}
				}
			}
			if (!d) {
				d = b.getElementsByTagName("*")
			}
			return {
				set: d,
				expr: a
			}
		};
		o.filter = function (a, b, c, d) {
			var e = a,
				result = [],
				curLoop = b,
				match, anyFound, isXMLFilter = b && b[0] && w(b[0]);
			while (a && b.length) {
				for (var f in p.filter) {
					if ((match = p.match[f].exec(a)) != null) {
						var g = p.filter[f],
							found, item;
						anyFound = false;
						if (curLoop == result) {
							result = []
						}
						if (p.preFilter[f]) {
							match = p.preFilter[f](match, curLoop, c, result, d, isXMLFilter);
							if (!match) {
								anyFound = found = true
							} else if (match === true) {
								continue
							}
						}
						if (match) {
							for (var i = 0;
							(item = curLoop[i]) != null; i++) {
								if (item) {
									found = g(item, match, i, curLoop);
									var h = d ^ !! found;
									if (c && found != null) {
										if (h) {
											anyFound = true
										} else {
											curLoop[i] = false
										}
									} else if (h) {
										result.push(item);
										anyFound = true
									}
								}
							}
						}
						if (found !== undefined) {
							if (!c) {
								curLoop = result
							}
							a = a.replace(p.match[f], "");
							if (!anyFound) {
								return []
							}
							break
						}
					}
				}
				if (a == e) {
					if (anyFound == null) {
						throw "Syntax error, unrecognized expression: " + a;
					} else {
						break
					}
				}
				e = a
			}
			return curLoop
		};
		var p = o.selectors = {
			order: ["ID", "NAME", "TAG"],
			match: {
				ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
				CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
				NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
				ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
				TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
				CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
				POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
				PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
			},
			attrMap: {
				"class": "className",
				"for": "htmlFor"
			},
			attrHandle: {
				href: function (a) {
					return a.getAttribute("href")
				}
			},
			relative: {
				"+": function (a, b, c) {
					var d = typeof b === "string",
						isTag = d && !/\W/.test(b),
						isPartStrNotTag = d && !isTag;
					if (isTag && !c) {
						b = b.toUpperCase()
					}
					for (var i = 0, l = a.length, elem; i < l; i++) {
						if ((elem = a[i])) {
							while ((elem = elem.previousSibling) && elem.nodeType !== 1) {}
							a[i] = isPartStrNotTag || elem && elem.nodeName === b ? elem || false : elem === b
						}
					}
					if (isPartStrNotTag) {
						o.filter(b, a, true)
					}
				},
				">": function (a, b, c) {
					var d = typeof b === "string";
					if (d && !/\W/.test(b)) {
						b = c ? b : b.toUpperCase();
						for (var i = 0, l = a.length; i < l; i++) {
							var e = a[i];
							if (e) {
								var f = e.parentNode;
								a[i] = f.nodeName === b ? f : false
							}
						}
					} else {
						for (var i = 0, l = a.length; i < l; i++) {
							var e = a[i];
							if (e) {
								a[i] = d ? e.parentNode : e.parentNode === b
							}
						}
						if (d) {
							o.filter(b, a, true)
						}
					}
				},
				"": function (a, b, c) {
					var d = done++,
						checkFn = dirCheck;
					if (!b.match(/\W/)) {
						var e = b = c ? b : b.toUpperCase();
						checkFn = dirNodeCheck
					}
					checkFn("parentNode", b, d, a, e, c)
				},
				"~": function (a, b, c) {
					var d = done++,
						checkFn = dirCheck;
					if (typeof b === "string" && !b.match(/\W/)) {
						var e = b = c ? b : b.toUpperCase();
						checkFn = dirNodeCheck
					}
					checkFn("previousSibling", b, d, a, e, c)
				}
			},
			find: {
				ID: function (a, b, c) {
					if (typeof b.getElementById !== "undefined" && !c) {
						var m = b.getElementById(a[1]);
						return m ? [m] : []
					}
				},
				NAME: function (a, b, c) {
					if (typeof b.getElementsByName !== "undefined") {
						var d = [],
							results = b.getElementsByName(a[1]);
						for (var i = 0, l = results.length; i < l; i++) {
							if (results[i].getAttribute("name") === a[1]) {
								d.push(results[i])
							}
						}
						return d.length === 0 ? null : d
					}
				},
				TAG: function (a, b) {
					return b.getElementsByTagName(a[1])
				}
			},
			preFilter: {
				CLASS: function (a, b, c, d, e, f) {
					a = " " + a[1].replace(/\\/g, "") + " ";
					if (f) {
						return a
					}
					for (var i = 0, elem;
					(elem = b[i]) != null; i++) {
						if (elem) {
							if (e ^ (elem.className && (" " + elem.className + " ").indexOf(a) >= 0)) {
								if (!c) d.push(elem)
							} else if (c) {
								b[i] = false
							}
						}
					}
					return false
				},
				ID: function (a) {
					return a[1].replace(/\\/g, "")
				},
				TAG: function (a, b) {
					for (var i = 0; b[i] === false; i++) {}
					return b[i] && w(b[i]) ? a[1] : a[1].toUpperCase()
				},
				CHILD: function (a) {
					if (a[1] == "nth") {
						var b = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(a[2] == "even" && "2n" || a[2] == "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
						a[2] = (b[1] + (b[2] || 1)) - 0;
						a[3] = b[3] - 0
					}
					a[0] = done++;
					return a
				},
				ATTR: function (a, b, c, d, e, f) {
					var g = a[1].replace(/\\/g, "");
					if (!f && p.attrMap[g]) {
						a[1] = p.attrMap[g]
					}
					if (a[2] === "~=") {
						a[4] = " " + a[4] + " "
					}
					return a
				},
				PSEUDO: function (a, b, c, d, e) {
					if (a[1] === "not") {
						if (a[3].match(k).length > 1 || /^\w/.test(a[3])) {
							a[3] = o(a[3], null, null, b)
						} else {
							var f = o.filter(a[3], b, c, true ^ e);
							if (!c) {
								d.push.apply(d, f)
							}
							return false
						}
					} else if (p.match.POS.test(a[0]) || p.match.CHILD.test(a[0])) {
						return true
					}
					return a
				},
				POS: function (a) {
					a.unshift(true);
					return a
				}
			},
			filters: {
				enabled: function (a) {
					return a.disabled === false && a.type !== "hidden"
				},
				disabled: function (a) {
					return a.disabled === true
				},
				checked: function (a) {
					return a.checked === true
				},
				selected: function (a) {
					a.parentNode.selectedIndex;
					return a.selected === true
				},
				parent: function (a) {
					return !!a.firstChild
				},
				empty: function (a) {
					return !a.firstChild
				},
				has: function (a, i, b) {
					return !!o(b[3], a).length
				},
				header: function (a) {
					return /h\d/i.test(a.nodeName)
				},
				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 || a.nodeName.toUpperCase() === "BUTTON"
				},
				input: function (a) {
					return /input|select|textarea|button/i.test(a.nodeName)
				}
			},
			setFilters: {
				first: function (a, i) {
					return i === 0
				},
				last: function (a, i, b, c) {
					return i === c.length - 1
				},
				even: function (a, i) {
					return i % 2 === 0
				},
				odd: function (a, i) {
					return i % 2 === 1
				},
				lt: function (a, i, b) {
					return i < b[3] - 0
				},
				gt: function (a, i, b) {
					return i > b[3] - 0
				},
				nth: function (a, i, b) {
					return b[3] - 0 == i
				},
				eq: function (a, i, b) {
					return b[3] - 0 == i
				}
			},
			filter: {
				PSEUDO: function (a, b, i, c) {
					var d = b[1],
						filter = p.filters[d];
					if (filter) {
						return filter(a, i, b, c)
					} else if (d === "contains") {
						return (a.textContent || a.innerText || "").indexOf(b[3]) >= 0
					} else if (d === "not") {
						var e = b[3];
						for (var i = 0, l = e.length; i < l; i++) {
							if (e[i] === a) {
								return false
							}
						}
						return true
					}
				},
				CHILD: function (a, b) {
					var c = b[1],
						node = a;
					switch (c) {
					case 'only':
					case 'first':
						while (node = node.previousSibling) {
							if (node.nodeType === 1) return false
						}
						if (c == 'first') return true;
						node = a;
					case 'last':
						while (node = node.nextSibling) {
							if (node.nodeType === 1) return false
						}
						return true;
					case 'nth':
						var d = b[2],
							last = b[3];
						if (d == 1 && last == 0) {
							return true
						}
						var e = b[0],
							parent = a.parentNode;
						if (parent && (parent.sizcache !== e || !a.nodeIndex)) {
							var f = 0;
							for (node = parent.firstChild; node; node = node.nextSibling) {
								if (node.nodeType === 1) {
									node.nodeIndex = ++f
								}
							}
							parent.sizcache = e
						}
						var g = a.nodeIndex - last;
						if (d == 0) {
							return g == 0
						} else {
							return (g % d == 0 && g / d >= 0)
						}
					}
				},
				ID: function (a, b) {
					return a.nodeType === 1 && a.getAttribute("id") === b
				},
				TAG: function (a, b) {
					return (b === "*" && a.nodeType === 1) || a.nodeName === b
				},
				CLASS: function (a, b) {
					return (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1
				},
				ATTR: function (a, b) {
					var c = b[1],
						result = p.attrHandle[c] ? p.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
						value = result + "",
						s = b[2],
						check = b[4];
					return result == null ? s === "!=" : s === "=" ? value === check : s === "*=" ? value.indexOf(check) >= 0 : s === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : s === "!=" ? value != check : s === "^=" ? value.indexOf(check) === 0 : s === "$=" ? value.substr(value.length - check.length) === check : s === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false
				},
				POS: function (a, b, i, c) {
					var d = b[2],
						filter = p.setFilters[d];
					if (filter) {
						return filter(a, i, b, c)
					}
				}
			}
		};
		var q = p.match.POS;
		for (var s in p.match) {
			p.match[s] = RegExp(p.match[s].source + /(?![^\[]*\])(?![^\(]*\))/.source)
		}
		var t = function (a, b) {
				a = Array.prototype.slice.call(a);
				if (b) {
					b.push.apply(b, a);
					return b
				}
				return a
			};
		try {
			Array.prototype.slice.call(document.documentElement.childNodes)
		} catch (e) {
			t = function (a, b) {
				var c = b || [];
				if (toString.call(a) === "[object Array]") {
					Array.prototype.push.apply(c, a)
				} else {
					if (typeof a.length === "number") {
						for (var i = 0, l = a.length; i < l; i++) {
							c.push(a[i])
						}
					} else {
						for (var i = 0; a[i]; i++) {
							c.push(a[i])
						}
					}
				}
				return c
			}
		}
		var u;
		if (document.documentElement.compareDocumentPosition) {
			u = function (a, b) {
				var c = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
				if (c === 0) {
					hasDuplicate = true
				}
				return c
			}
		} else if ("sourceIndex" in document.documentElement) {
			u = function (a, b) {
				var c = a.sourceIndex - b.sourceIndex;
				if (c === 0) {
					hasDuplicate = true
				}
				return c
			}
		} else if (document.createRange) {
			u = function (a, b) {
				var c = a.ownerDocument.createRange(),
					bRange = b.ownerDocument.createRange();
				c.selectNode(a);
				c.collapse(true);
				bRange.selectNode(b);
				bRange.collapse(true);
				var d = c.compareBoundaryPoints(Range.START_TO_END, bRange);
				if (d === 0) {
					hasDuplicate = true
				}
				return d
			}
		}(function () {
			var d = document.createElement("form"),
				id = "script" + (new Date).getTime();
			d.innerHTML = "<input name='" + id + "'/>";
			var e = document.documentElement;
			e.insertBefore(d, e.firstChild);
			if ( !! document.getElementById(id)) {
				p.find.ID = function (a, b, c) {
					if (typeof b.getElementById !== "undefined" && !c) {
						var m = b.getElementById(a[1]);
						return m ? m.id === a[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === a[1] ? [m] : undefined : []
					}
				};
				p.filter.ID = function (a, b) {
					var c = typeof a.getAttributeNode !== "undefined" && a.getAttributeNode("id");
					return a.nodeType === 1 && c && c.nodeValue === b
				}
			}
			e.removeChild(d)
		})();
		(function () {
			var e = document.createElement("div");
			e.appendChild(document.createComment(""));
			if (e.getElementsByTagName("*").length > 0) {
				p.find.TAG = function (a, b) {
					var c = b.getElementsByTagName(a[1]);
					if (a[1] === "*") {
						var d = [];
						for (var i = 0; c[i]; i++) {
							if (c[i].nodeType === 1) {
								d.push(c[i])
							}
						}
						c = d
					}
					return c
				}
			}
			e.innerHTML = "<a href='#'></a>";
			if (e.firstChild && typeof e.firstChild.getAttribute !== "undefined" && e.firstChild.getAttribute("href") !== "#") {
				p.attrHandle.href = function (a) {
					return a.getAttribute("href", 2)
				}
			}
		})();
		if (document.querySelectorAll)(function () {
			var f = o,
				div = document.createElement("div");
			div.innerHTML = "<p class='TEST'></p>";
			if (div.querySelectorAll && div.querySelectorAll(".TEST").length === 0) {
				return
			}
			o = function (a, b, c, d) {
				b = b || document;
				if (!d && b.nodeType === 9 && !w(b)) {
					try {
						return t(b.querySelectorAll(a), c)
					} catch (e) {}
				}
				return f(a, b, c, d)
			};
			o.find = f.find;
			o.filter = f.filter;
			o.selectors = f.selectors;
			o.matches = f.matches
		})();
		if (document.getElementsByClassName && document.documentElement.getElementsByClassName)(function () {
			var d = document.createElement("div");
			d.innerHTML = "<div class='test e'></div><div class='test'></div>";
			if (d.getElementsByClassName("e").length === 0) return;
			d.lastChild.className = "e";
			if (d.getElementsByClassName("e").length === 1) return;
			p.order.splice(1, 0, "CLASS");
			p.find.CLASS = function (a, b, c) {
				if (typeof b.getElementsByClassName !== "undefined" && !c) {
					return b.getElementsByClassName(a[1])
				}
			}
		})();

		function dirNodeCheck(a, b, c, d, e, f) {
			var g = a == "previousSibling" && !f;
			for (var i = 0, l = d.length; i < l; i++) {
				var h = d[i];
				if (h) {
					if (g && h.nodeType === 1) {
						h.sizcache = c;
						h.sizset = i
					}
					h = h[a];
					var j = false;
					while (h) {
						if (h.sizcache === c) {
							j = d[h.sizset];
							break
						}
						if (h.nodeType === 1 && !f) {
							h.sizcache = c;
							h.sizset = i
						}
						if (h.nodeName === b) {
							j = h;
							break
						}
						h = h[a]
					}
					d[i] = j
				}
			}
		}

		function dirCheck(a, b, c, d, e, f) {
			var g = a == "previousSibling" && !f;
			for (var i = 0, l = d.length; i < l; i++) {
				var h = d[i];
				if (h) {
					if (g && h.nodeType === 1) {
						h.sizcache = c;
						h.sizset = i
					}
					h = h[a];
					var j = false;
					while (h) {
						if (h.sizcache === c) {
							j = d[h.sizset];
							break
						}
						if (h.nodeType === 1) {
							if (!f) {
								h.sizcache = c;
								h.sizset = i
							}
							if (typeof b !== "string") {
								if (h === b) {
									j = true;
									break
								}
							} else if (o.filter(b, [h]).length > 0) {
								j = h;
								break
							}
						}
						h = h[a]
					}
					d[i] = j
				}
			}
		}
		var v = document.compareDocumentPosition ?
		function (a, b) {
			return a.compareDocumentPosition(b) & 16
		} : function (a, b) {
			return a !== b && (a.contains ? a.contains(b) : true)
		};
		var w = function (a) {
				return a.nodeType === 9 && a.documentElement.nodeName !== "HTML" || !! a.ownerDocument && w(a.ownerDocument)
			};
		var x = function (a, b) {
				var c = [],
					later = "",
					match, root = b.nodeType ? [b] : b;
				while ((match = p.match.PSEUDO.exec(a))) {
					later += match[0];
					a = a.replace(p.match.PSEUDO, "")
				}
				a = p.relative[a] ? a + "*" : a;
				for (var i = 0, l = root.length; i < l; i++) {
					o(a, root[i], c)
				}
				return o.filter(later, c)
			};
		jQuery.find = o;
		jQuery.filter = o.filter;
		jQuery.expr = o.selectors;
		jQuery.expr[":"] = jQuery.expr.filters;
		o.selectors.filters.hidden = function (a) {
			return a.offsetWidth === 0 || a.offsetHeight === 0
		};
		o.selectors.filters.visible = function (a) {
			return a.offsetWidth > 0 || a.offsetHeight > 0
		};
		o.selectors.filters.animated = function (b) {
			return jQuery.grep(jQuery.timers, function (a) {
				return b === a.elem
			}).length
		};
		jQuery.multiFilter = function (a, b, c) {
			if (c) {
				a = ":not(" + a + ")"
			}
			return o.matches(a, b)
		};
		jQuery.dir = function (a, b) {
			var c = [],
				cur = a[b];
			while (cur && cur != document) {
				if (cur.nodeType == 1) c.push(cur);
				cur = cur[b]
			}
			return c
		};
		jQuery.nth = function (a, b, c, d) {
			b = b || 1;
			var e = 0;
			for (; a; a = a[c]) if (a.nodeType == 1 && ++e == b) break;
			return a
		};
		jQuery.sibling = function (n, a) {
			var r = [];
			for (; n; n = n.nextSibling) {
				if (n.nodeType == 1 && n != a) r.push(n)
			}
			return r
		};
		return;
		y.Sizzle = o
	})();
	jQuery.event = {
		add: function (e, f, g, h) {
			if (e.nodeType == 3 || e.nodeType == 8) return;
			if (e.setInterval && e != y) e = y;
			if (!g.guid) g.guid = this.guid++;
			if (h !== undefined) {
				var i = g;
				g = this.proxy(i);
				g.data = h
			}
			var j = jQuery.data(e, "events") || jQuery.data(e, "events", {}),
				handle = jQuery.data(e, "handle") || jQuery.data(e, "handle", function () {
					return typeof jQuery !== "undefined" && !jQuery.event.triggered ? jQuery.event.handle.apply(arguments.callee.elem, arguments) : undefined
				});
			handle.elem = e;
			jQuery.each(f.split(/\s+/), function (a, b) {
				var c = b.split(".");
				b = c.shift();
				g.type = c.slice().sort().join(".");
				var d = j[b];
				if (jQuery.event.specialAll[b]) jQuery.event.specialAll[b].setup.call(e, h, c);
				if (!d) {
					d = j[b] = {};
					if (!jQuery.event.special[b] || jQuery.event.special[b].setup.call(e, h, c) === false) {
						if (e.addEventListener) e.addEventListener(b, handle, false);
						else if (e.attachEvent) e.attachEvent("on" + b, handle)
					}
				}
				d[g.guid] = g;
				jQuery.event.global[b] = true
			});
			e = null
		},
		guid: 1,
		global: {},
		remove: function (f, g, h) {
			if (f.nodeType == 3 || f.nodeType == 8) return;
			var i = jQuery.data(f, "events"),
				ret, index;
			if (i) {
				if (g === undefined || (typeof g === "string" && g.charAt(0) == ".")) for (var j in i) this.remove(f, j + (g || ""));
				else {
					if (g.type) {
						h = g.handler;
						g = g.type
					}
					jQuery.each(g.split(/\s+/), function (a, b) {
						var c = b.split(".");
						b = c.shift();
						var d = RegExp("(^|\\.)" + c.slice().sort().join(".*\\.") + "(\\.|$)");
						if (i[b]) {
							if (h) delete i[b][h.guid];
							else for (var e in i[b]) if (d.test(i[b][e].type)) delete i[b][e];
							if (jQuery.event.specialAll[b]) jQuery.event.specialAll[b].teardown.call(f, c);
							for (ret in i[b]) break;
							if (!ret) {
								if (!jQuery.event.special[b] || jQuery.event.special[b].teardown.call(f, c) === false) {
									if (f.removeEventListener) f.removeEventListener(b, jQuery.data(f, "handle"), false);
									else if (f.detachEvent) f.detachEvent("on" + b, jQuery.data(f, "handle"))
								}
								ret = null;
								delete i[b]
							}
						}
					})
				}
				for (ret in i) break;
				if (!ret) {
					var k = jQuery.data(f, "handle");
					if (k) k.elem = null;
					jQuery.removeData(f, "events");
					jQuery.removeData(f, "handle")
				}
			}
		},
		trigger: function (a, b, c, d) {
			var f = a.type || a;
			if (!d) {
				a = typeof a === "object" ? a[B] ? a : jQuery.extend(jQuery.Event(f), a) : jQuery.Event(f);
				if (f.indexOf("!") >= 0) {
					a.type = f = f.slice(0, -1);
					a.exclusive = true
				}
				if (!c) {
					a.stopPropagation();
					if (this.global[f]) jQuery.each(jQuery.cache, function () {
						if (this.events && this.events[f]) jQuery.event.trigger(a, b, this.handle.elem)
					})
				}
				if (!c || c.nodeType == 3 || c.nodeType == 8) return undefined;
				a.result = undefined;
				a.target = c;
				b = jQuery.makeArray(b);
				b.unshift(a)
			}
			a.currentTarget = c;
			var g = jQuery.data(c, "handle");
			if (g) g.apply(c, b);
			if ((!c[f] || (jQuery.nodeName(c, 'a') && f == "click")) && c["on" + f] && c["on" + f].apply(c, b) === false) a.result = false;
			if (!d && c[f] && !a.isDefaultPrevented() && !(jQuery.nodeName(c, 'a') && f == "click")) {
				this.triggered = true;
				try {
					c[f]()
				} catch (e) {}
			}
			this.triggered = false;
			if (!a.isPropagationStopped()) {
				var h = c.parentNode || c.ownerDocument;
				if (h) jQuery.event.trigger(a, b, h, true)
			}
		},
		handle: function (a) {
			var b, handlers;
			a = arguments[0] = jQuery.event.fix(a || y.event);
			a.currentTarget = this;
			var c = a.type.split(".");
			a.type = c.shift();
			b = !c.length && !a.exclusive;
			var d = RegExp("(^|\\.)" + c.slice().sort().join(".*\\.") + "(\\.|$)");
			handlers = (jQuery.data(this, "events") || {})[a.type];
			for (var j in handlers) {
				var e = handlers[j];
				if (b || d.test(e.type)) {
					a.handler = e;
					a.data = e.data;
					var f = e.apply(this, arguments);
					if (f !== undefined) {
						a.result = f;
						if (f === false) {
							a.preventDefault();
							a.stopPropagation()
						}
					}
					if (a.isImmediatePropagationStopped()) break
				}
			}
		},
		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 toElement view wheelDelta which".split(" "),
		fix: function (a) {
			if (a[B]) return a;
			var b = a;
			a = jQuery.Event(b);
			for (var i = this.props.length, prop; i;) {
				prop = this.props[--i];
				a[prop] = b[prop]
			}
			if (!a.target) a.target = a.srcElement || document;
			if (a.target.nodeType == 3) a.target = a.target.parentNode;
			if (!a.relatedTarget && a.fromElement) a.relatedTarget = a.fromElement == a.target ? a.toElement : a.fromElement;
			if (a.pageX == null && a.clientX != null) {
				var c = document.documentElement,
					body = document.body;
				a.pageX = a.clientX + (c && c.scrollLeft || body && body.scrollLeft || 0) - (c.clientLeft || 0);
				a.pageY = a.clientY + (c && c.scrollTop || body && body.scrollTop || 0) - (c.clientTop || 0)
			}
			if (!a.which && ((a.charCode || a.charCode === 0) ? a.charCode : a.keyCode)) a.which = a.charCode || a.keyCode;
			if (!a.metaKey && a.ctrlKey) a.metaKey = a.ctrlKey;
			if (!a.which && a.button) a.which = (a.button & 1 ? 1 : (a.button & 2 ? 3 : (a.button & 4 ? 2 : 0)));
			return a
		},
		proxy: function (a, b) {
			b = b ||
			function () {
				return a.apply(this, arguments)
			};
			b.guid = a.guid = a.guid || b.guid || this.guid++;
			return b
		},
		special: {
			ready: {
				setup: bindReady,
				teardown: function () {}
			}
		},
		specialAll: {
			live: {
				setup: function (a, b) {
					jQuery.event.add(this, b[0], liveHandler)
				},
				teardown: function (a) {
					if (a.length) {
						var b = 0,
							name = RegExp("(^|\\.)" + a[0] + "(\\.|$)");
						jQuery.each((jQuery.data(this, "events").live || {}), function () {
							if (name.test(this.type)) b++
						});
						if (b < 1) jQuery.event.remove(this, a[0], liveHandler)
					}
				}
			}
		}
	};
	jQuery.Event = function (a) {
		if (!this.preventDefault) return new jQuery.Event(a);
		if (a && a.type) {
			this.originalEvent = a;
			this.type = a.type
		} else this.type = a;
		this.timeStamp = now();
		this[B] = true
	};

	function returnFalse() {
		return false
	}

	function returnTrue() {
		return true
	}
	jQuery.Event.prototype = {
		preventDefault: function () {
			this.isDefaultPrevented = returnTrue;
			var e = this.originalEvent;
			if (!e) return;
			if (e.preventDefault) e.preventDefault();
			e.returnValue = false
		},
		stopPropagation: function () {
			this.isPropagationStopped = returnTrue;
			var e = this.originalEvent;
			if (!e) return;
			if (e.stopPropagation) e.stopPropagation();
			e.cancelBubble = true
		},
		stopImmediatePropagation: function () {
			this.isImmediatePropagationStopped = returnTrue;
			this.stopPropagation()
		},
		isDefaultPrevented: returnFalse,
		isPropagationStopped: returnFalse,
		isImmediatePropagationStopped: returnFalse
	};
	var C = function (a) {
			var b = a.relatedTarget;
			while (b && b != this) try {
				b = b.parentNode
			} catch (e) {
				b = this
			}
			if (b != this) {
				a.type = a.data;
				jQuery.event.handle.apply(this, arguments)
			}
		};
	jQuery.each({
		mouseover: 'mouseenter',
		mouseout: 'mouseleave'
	}, function (a, b) {
		jQuery.event.special[b] = {
			setup: function () {
				jQuery.event.add(this, a, C, b)
			},
			teardown: function () {
				jQuery.event.remove(this, a, C)
			}
		}
	});
	jQuery.fn.extend({
		bind: function (a, b, c) {
			return a == "unload" ? this.one(a, b, c) : this.each(function () {
				jQuery.event.add(this, a, c || b, c && b)
			})
		},
		one: function (b, c, d) {
			var e = jQuery.event.proxy(d || c, function (a) {
				jQuery(this).unbind(a, e);
				return (d || c).apply(this, arguments)
			});
			return this.each(function () {
				jQuery.event.add(this, b, e, d && c)
			})
		},
		unbind: function (a, b) {
			return this.each(function () {
				jQuery.event.remove(this, a, b)
			})
		},
		trigger: function (a, b) {
			return this.each(function () {
				jQuery.event.trigger(a, b, this)
			})
		},
		triggerHandler: function (a, b) {
			if (this[0]) {
				var c = jQuery.Event(a);
				c.preventDefault();
				c.stopPropagation();
				jQuery.event.trigger(c, b, this[0]);
				return c.result
			}
		},
		toggle: function (b) {
			var c = arguments,
				i = 1;
			while (i < c.length) jQuery.event.proxy(b, c[i++]);
			return this.click(jQuery.event.proxy(b, function (a) {
				this.lastToggle = (this.lastToggle || 0) % i;
				a.preventDefault();
				return c[this.lastToggle++].apply(this, arguments) || false
			}))
		},
		hover: function (a, b) {
			return this.mouseenter(a).mouseleave(b)
		},
		ready: function (a) {
			bindReady();
			if (jQuery.isReady) a.call(document, jQuery);
			else jQuery.readyList.push(a);
			return this
		},
		live: function (a, b) {
			var c = jQuery.event.proxy(b);
			c.guid += this.selector + a;
			jQuery(document).bind(liveConvert(a, this.selector), this.selector, c);
			return this
		},
		die: function (a, b) {
			jQuery(document).unbind(liveConvert(a, this.selector), b ? {
				guid: b.guid + this.selector + a
			} : null);
			return this
		}
	});

	function liveHandler(c) {
		var d = RegExp("(^|\\.)" + c.type + "(\\.|$)"),
			stop = true,
			elems = [];
		jQuery.each(jQuery.data(this, "events").live || [], function (i, a) {
			if (d.test(a.type)) {
				var b = jQuery(c.target).closest(a.data)[0];
				if (b) elems.push({
					elem: b,
					fn: a
				})
			}
		});
		elems.sort(function (a, b) {
			return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest")
		});
		jQuery.each(elems, function () {
			if (this.fn.call(this.elem, c, this.fn.data) === false) return (stop = false)
		});
		return stop
	}

	function liveConvert(a, b) {
		return ["live", a, b.replace(/\./g, "`").replace(/ /g, "|")].join(".")
	}
	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)
					});
					jQuery.readyList = null
				}
				jQuery(document).triggerHandler("ready")
			}
		}
	});
	var D = false;

	function bindReady() {
		if (D) return;
		D = true;
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded", function () {
				document.removeEventListener("DOMContentLoaded", arguments.callee, false);
				jQuery.ready()
			}, false)
		} else if (document.attachEvent) {
			document.attachEvent("onreadystatechange", function () {
				if (document.readyState === "complete") {
					document.detachEvent("onreadystatechange", arguments.callee);
					jQuery.ready()
				}
			});
			if (document.documentElement.doScroll && y == y.top)(function () {
				if (jQuery.isReady) return;
				try {
					document.documentElement.doScroll("left")
				} catch (error) {
					setTimeout(arguments.callee, 0);
					return
				}
				jQuery.ready()
			})()
		}
		jQuery.event.add(y, "load", jQuery.ready)
	}
	jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick," + "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," + "change,select,submit,keydown,keypress,keyup,error").split(","), function (i, b) {
		jQuery.fn[b] = function (a) {
			return a ? this.bind(b, a) : this.trigger(b)
		}
	});
	jQuery(y).bind('unload', function () {
		for (var a in jQuery.cache) if (a != 1 && jQuery.cache[a].handle) jQuery.event.remove(jQuery.cache[a].handle.elem)
	});
	(function () {
		jQuery.support = {};
		var b = document.documentElement,
			script = document.createElement("script"),
			div = document.createElement("div"),
			id = "script" + (new Date).getTime();
		div.style.display = "none";
		div.innerHTML = '   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';
		var c = div.getElementsByTagName("*"),
			a = div.getElementsByTagName("a")[0];
		if (!c || !c.length || !a) {
			return
		}
		jQuery.support = {
			leadingWhitespace: div.firstChild.nodeType == 3,
			tbody: !div.getElementsByTagName("tbody").length,
			objectAll: !! div.getElementsByTagName("object")[0].getElementsByTagName("*").length,
			htmlSerialize: !! div.getElementsByTagName("link").length,
			style: /red/.test(a.getAttribute("style")),
			hrefNormalized: a.getAttribute("href") === "/a",
			opacity: a.style.opacity === "0.5",
			cssFloat: !! a.style.cssFloat,
			scriptEval: false,
			noCloneEvent: true,
			boxModel: null
		};
		script.type = "text/javascript";
		try {
			script.appendChild(document.createTextNode("window." + id + "=1;"))
		} catch (e) {}
		b.insertBefore(script, b.firstChild);
		if (y[id]) {
			jQuery.support.scriptEval = true;
			delete y[id]
		}
		b.removeChild(script);
		if (div.attachEvent && div.fireEvent) {
			div.attachEvent("onclick", function () {
				jQuery.support.noCloneEvent = false;
				div.detachEvent("onclick", arguments.callee)
			});
			div.cloneNode(true).fireEvent("onclick")
		}
		jQuery(function () {
			var a = document.createElement("div");
			a.style.width = a.style.paddingLeft = "1px";
			document.body.appendChild(a);
			jQuery.boxModel = jQuery.support.boxModel = a.offsetWidth === 2;
			document.body.removeChild(a).style.display = 'none'
		})
	})();
	var E = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";
	jQuery.props = {
		"for": "htmlFor",
		"class": "className",
		"float": E,
		cssFloat: E,
		styleFloat: E,
		readonly: "readOnly",
		maxlength: "maxLength",
		cellspacing: "cellSpacing",
		rowspan: "rowSpan",
		tabindex: "tabIndex"
	};
	jQuery.fn.extend({
		_load: jQuery.fn.load,
		load: function (c, d, e) {
			if (typeof c !== "string") return this._load(c);
			var f = c.indexOf(" ");
			if (f >= 0) {
				var g = c.slice(f, c.length);
				c = c.slice(0, f)
			}
			var h = "GET";
			if (d) if (jQuery.isFunction(d)) {
				e = d;
				d = null
			} else if (typeof d === "object") {
				d = jQuery.param(d);
				h = "POST"
			}
			var i = this;
			jQuery.ajax({
				url: c,
				type: h,
				dataType: "html",
				data: d,
				complete: function (a, b) {
					if (b == "success" || b == "notmodified") i.html(g ? jQuery("<div/>").append(a.responseText.replace(/<script(.|\s)*?\/script>/g, "")).find(g) : a.responseText);
					if (e) i.each(e, [a.responseText, b, a])
				}
			});
			return this
		},
		serialize: function () {
			return jQuery.param(this.serializeArray())
		},
		serializeArray: function () {
			return this.map(function () {
				return this.elements ? jQuery.makeArray(this.elements) : this
			}).filter(function () {
				return this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password|search/i.test(this.type))
			}).map(function (i, b) {
				var c = jQuery(this).val();
				return c == null ? null : jQuery.isArray(c) ? jQuery.map(c, function (a, i) {
					return {
						name: b.name,
						value: a
					}
				}) : {
					name: b.name,
					value: c
				}
			}).get()
		}
	});
	jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function (i, o) {
		jQuery.fn[o] = function (f) {
			return this.bind(o, f)
		}
	});
	var F = now();
	jQuery.extend({
		get: function (a, b, c, d) {
			if (jQuery.isFunction(b)) {
				c = b;
				b = null
			}
			return jQuery.ajax({
				type: "GET",
				url: a,
				data: b,
				success: c,
				dataType: d
			})
		},
		getScript: function (a, b) {
			return jQuery.get(a, null, b, "script")
		},
		getJSON: function (a, b, c) {
			return jQuery.get(a, b, c, "json")
		},
		post: function (a, b, c, d) {
			if (jQuery.isFunction(b)) {
				c = b;
				b = {}
			}
			return jQuery.ajax({
				type: "POST",
				url: a,
				data: b,
				success: c,
				dataType: d
			})
		},
		ajaxSetup: function (a) {
			jQuery.extend(jQuery.ajaxSettings, a)
		},
		ajaxSettings: {
			url: location.href,
			global: true,
			type: "GET",
			contentType: "application/x-www-form-urlencoded",
			processData: true,
			async: true,
			xhr: function () {
				return y.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest()
			},
			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 c, 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))) {
				c = "jsonp" + F++;
				if (s.data) s.data = (s.data + "").replace(jsre, "=" + c + "$1");
				s.url = s.url.replace(jsre, "=" + c + "$1");
				s.dataType = "script";
				y[c] = function (a) {
					data = a;
					success();
					complete();
					y[c] = undefined;
					try {
						delete y[c]
					} catch (e) {}
					if (h) h.removeChild(i)
				}
			}
			if (s.dataType == "script" && s.cache == null) s.cache = false;
			if (s.cache === false && type == "GET") {
				var d = now();
				var f = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + d + "$2");
				s.url = f + ((f == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + d : "")
			}
			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 g = /^(\w+:)?\/\/([^\/?#]+)/.exec(s.url);
			if (s.dataType == "script" && type == "GET" && g && (g[1] && g[1] != location.protocol || g[2] != location.host)) {
				var h = document.getElementsByTagName("head")[0];
				var i = document.createElement("script");
				i.src = s.url;
				if (s.scriptCharset) i.charset = s.scriptCharset;
				if (!c) {
					var j = false;
					i.onload = i.onreadystatechange = function () {
						if (!j && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) {
							j = true;
							success();
							complete();
							i.onload = i.onreadystatechange = null;
							h.removeChild(i)
						}
					}
				}
				h.appendChild(i);
				return undefined
			}
			var k = false;
			var l = s.xhr();
			if (s.username) l.open(type, s.url, s.async, s.username, s.password);
			else l.open(type, s.url, s.async);
			try {
				if (s.data) l.setRequestHeader("Content-Type", s.contentType);
				if (s.ifModified) l.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT");
				l.setRequestHeader("X-Requested-With", "XMLHttpRequest");
				l.setRequestHeader("Accept", s.dataType && s.accepts[s.dataType] ? s.accepts[s.dataType] + ", */*" : s.accepts._default)
			} catch (e) {}
			if (s.beforeSend && s.beforeSend(l, s) === false) {
				if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop");
				l.abort();
				return false
			}
			if (s.global) jQuery.event.trigger("ajaxSend", [l, s]);
			var m = function (a) {
					if (l.readyState == 0) {
						if (n) {
							clearInterval(n);
							n = null;
							if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop")
						}
					} else if (!k && l && (l.readyState == 4 || a == "timeout")) {
						k = true;
						if (n) {
							clearInterval(n);
							n = null
						}
						status = a == "timeout" ? "timeout" : !jQuery.httpSuccess(l) ? "error" : s.ifModified && jQuery.httpNotModified(l, s.url) ? "notmodified" : "success";
						if (status == "success") {
							try {
								data = jQuery.httpData(l, s.dataType, s)
							} catch (e) {
								status = "parsererror"
							}
						}
						if (status == "success") {
							var b;
							try {
								b = l.getResponseHeader("Last-Modified")
							} catch (e) {}
							if (s.ifModified && b) jQuery.lastModified[s.url] = b;
							if (!c) success()
						} else jQuery.handleError(s, l, status);
						complete();
						if (a) l.abort();
						if (s.async) l = null
					}
				};
			if (s.async) {
				var n = setInterval(m, 13);
				if (s.timeout > 0) setTimeout(function () {
					if (l && !k) m("timeout")
				}, s.timeout)
			}
			try {
				l.send(s.data)
			} catch (e) {
				jQuery.handleError(s, l, null, e)
			}
			if (!s.async) m();

			function success() {
				if (s.success) s.success(data, status);
				if (s.global) jQuery.event.trigger("ajaxSuccess", [l, s])
			}

			function complete() {
				if (s.complete) s.complete(l, status);
				if (s.global) jQuery.event.trigger("ajaxComplete", [l, s]);
				if (s.global && !--jQuery.active) jQuery.event.trigger("ajaxStop")
			}
			return l
		},
		handleError: function (s, a, b, e) {
			if (s.error) s.error(a, b, e);
			if (s.global) jQuery.event.trigger("ajaxError", [a, s, e])
		},
		active: 0,
		httpSuccess: function (a) {
			try {
				return !a.status && location.protocol == "file:" || (a.status >= 200 && a.status < 300) || a.status == 304 || a.status == 1223
			} catch (e) {}
			return false
		},
		httpNotModified: function (a, b) {
			try {
				var c = a.getResponseHeader("Last-Modified");
				return a.status == 304 || c == jQuery.lastModified[b]
			} catch (e) {}
			return false
		},
		httpData: function (a, b, s) {
			var c = a.getResponseHeader("content-type"),
				xml = b == "xml" || !b && c && c.indexOf("xml") >= 0,
				data = xml ? a.responseXML : a.responseText;
			if (xml && data.documentElement.tagName == "parsererror") throw "parsererror";
			if (s && s.dataFilter) data = s.dataFilter(data, b);
			if (typeof data === "string") {
				if (b == "script") jQuery.globalEval(data);
				if (b == "json") data = y["eval"]("(" + data + ")")
			}
			return data
		},
		param: function (a) {
			var s = [];

			function add(a, b) {
				s[s.length] = encodeURIComponent(a) + '=' + encodeURIComponent(b)
			};
			if (jQuery.isArray(a) || a.jquery) jQuery.each(a, function () {
				add(this.name, this.value)
			});
			else for (var j in a) if (jQuery.isArray(a[j])) jQuery.each(a[j], function () {
				add(j, this)
			});
			else add(j, jQuery.isFunction(a[j]) ? a[j]() : a[j]);
			return s.join("&").replace(/%20/g, "+")
		}
	});
	var G = {},
		timerId, fxAttrs = [
			["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"],
			["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"],
			["opacity"]
		];

	function genFx(a, b) {
		var c = {};
		jQuery.each(fxAttrs.concat.apply([], fxAttrs.slice(0, b)), function () {
			c[this] = a
		});
		return c
	}
	jQuery.fn.extend({
		show: function (a, b) {
			if (a) {
				return this.animate(genFx("show", 3), a, b)
			} else {
				for (var i = 0, l = this.length; i < l; i++) {
					var c = jQuery.data(this[i], "olddisplay");
					this[i].style.display = c || "";
					if (jQuery.css(this[i], "display") === "none") {
						var d = this[i].tagName,
							display;
						if (G[d]) {
							display = G[d]
						} else {
							var e = jQuery("<" + d + " />").appendTo("body");
							display = e.css("display");
							if (display === "none") display = "block";
							e.remove();
							G[d] = display
						}
						jQuery.data(this[i], "olddisplay", display)
					}
				}
				for (var i = 0, l = this.length; i < l; i++) {
					this[i].style.display = jQuery.data(this[i], "olddisplay") || ""
				}
				return this
			}
		},
		hide: function (a, b) {
			if (a) {
				return this.animate(genFx("hide", 3), a, b)
			} else {
				for (var i = 0, l = this.length; i < l; i++) {
					var c = jQuery.data(this[i], "olddisplay");
					if (!c && c !== "none") jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"))
				}
				for (var i = 0, l = this.length; i < l; i++) {
					this[i].style.display = "none"
				}
				return this
			}
		},
		_toggle: jQuery.fn.toggle,
		toggle: function (b, c) {
			var d = typeof b === "boolean";
			return jQuery.isFunction(b) && jQuery.isFunction(c) ? this._toggle.apply(this, arguments) : b == null || d ? this.each(function () {
				var a = d ? b : jQuery(this).is(":hidden");
				jQuery(this)[a ? "show" : "hide"]()
			}) : this.animate(genFx("toggle", 3), b, c)
		},
		fadeTo: function (a, b, c) {
			return this.animate({
				opacity: b
			}, a, c)
		},
		animate: function (g, h, i, j) {
			var k = jQuery.speed(h, i, j);
			return this[k.queue === false ? "each" : "queue"](function () {
				var f = jQuery.extend({}, k),
					p, hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
					self = this;
				for (p in g) {
					if (g[p] == "hide" && hidden || g[p] == "show" && !hidden) return f.complete.call(this);
					if ((p == "height" || p == "width") && this.style) {
						f.display = jQuery.css(this, "display");
						f.overflow = this.style.overflow
					}
				}
				if (f.overflow != null) this.style.overflow = "hidden";
				f.curAnim = jQuery.extend({}, g);
				jQuery.each(g, function (a, b) {
					var e = new jQuery.fx(self, f, a);
					if (/toggle|show|hide/.test(b)) e[b == "toggle" ? hidden ? "show" : "hide" : b](g);
					else {
						var c = b.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
							start = e.cur(true) || 0;
						if (c) {
							var d = parseFloat(c[2]),
								unit = c[3] || "px";
							if (unit != "px") {
								self.style[a] = (d || 1) + unit;
								start = ((d || 1) / e.cur(true)) * start;
								self.style[a] = start + unit
							}
							if (c[1]) d = ((c[1] == "-=" ? -1 : 1) * d) + start;
							e.custom(start, d, unit)
						} else e.custom(start, b, "")
					}
				});
				return true
			})
		},
		stop: function (a, b) {
			var c = jQuery.timers;
			if (a) this.queue([]);
			this.each(function () {
				for (var i = c.length - 1; i >= 0; i--) if (c[i].elem == this) {
					if (b) c[i](true);
					c.splice(i, 1)
				}
			});
			if (!b) this.dequeue();
			return this
		}
	});
	jQuery.each({
		slideDown: genFx("show", 1),
		slideUp: genFx("hide", 1),
		slideToggle: genFx("toggle", 1),
		fadeIn: {
			opacity: "show"
		},
		fadeOut: {
			opacity: "hide"
		}
	}, function (c, d) {
		jQuery.fn[c] = function (a, b) {
			return this.animate(d, a, b)
		}
	});
	jQuery.extend({
		speed: function (a, b, c) {
			var d = typeof a === "object" ? a : {
				complete: c || !c && b || jQuery.isFunction(a) && a,
				duration: a,
				easing: c && b || b && !jQuery.isFunction(b) && b
			};
			d.duration = jQuery.fx.off ? 0 : typeof d.duration === "number" ? d.duration : jQuery.fx.speeds[d.duration] || jQuery.fx.speeds._default;
			d.old = d.complete;
			d.complete = function () {
				if (d.queue !== false) jQuery(this).dequeue();
				if (jQuery.isFunction(d.old)) d.old.call(this)
			};
			return d
		},
		easing: {
			linear: function (p, n, a, b) {
				return a + b * p
			},
			swing: function (p, n, a, b) {
				return ((-Math.cos(p * Math.PI) / 2) + 0.5) * b + a
			}
		},
		timers: [],
		fx: function (a, b, c) {
			this.options = b;
			this.elem = a;
			this.prop = c;
			if (!b.orig) b.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) this.elem.style.display = "block"
		},
		cur: function (a) {
			if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) return this.elem[this.prop];
			var r = parseFloat(jQuery.css(this.elem, this.prop, a));
			return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0
		},
		custom: function (b, c, d) {
			this.startTime = now();
			this.start = b;
			this.end = c;
			this.unit = d || this.unit || "px";
			this.now = this.start;
			this.pos = this.state = 0;
			var e = this;

			function t(a) {
				return e.step(a)
			}
			t.elem = this.elem;
			if (t() && jQuery.timers.push(t) && !timerId) {
				timerId = setInterval(function () {
					var a = jQuery.timers;
					for (var i = 0; i < a.length; i++) if (!a[i]()) a.splice(i--, 1);
					if (!a.length) {
						clearInterval(timerId);
						timerId = undefined
					}
				}, 13)
			}
		},
		show: function () {
			this.options.orig[this.prop] = jQuery.attr(this.elem.style, this.prop);
			this.options.show = true;
			this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
			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 (a) {
			var t = now();
			if (a || t >= this.options.duration + this.startTime) {
				this.now = this.end;
				this.pos = this.state = 1;
				this.update();
				this.options.curAnim[this.prop] = true;
				var b = true;
				for (var i in this.options.curAnim) if (this.options.curAnim[i] !== true) b = false;
				if (b) {
					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) jQuery(this.elem).hide();
					if (this.options.hide || this.options.show) for (var p in this.options.curAnim) jQuery.attr(this.elem.style, p, this.options.orig[p]);
					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,
			_default: 400
		},
		step: {
			opacity: function (a) {
				jQuery.attr(a.elem.style, "opacity", a.now)
			},
			_default: function (a) {
				if (a.elem.style && a.elem.style[a.prop] != null) a.elem.style[a.prop] = a.now + a.unit;
				else a.elem[a.prop] = a.now
			}
		}
	});
	if (document.documentElement["getBoundingClientRect"]) jQuery.fn.offset = function () {
		if (!this[0]) return {
			top: 0,
			left: 0
		};
		if (this[0] === this[0].ownerDocument.body) return jQuery.offset.bodyOffset(this[0]);
		var a = this[0].getBoundingClientRect(),
			doc = this[0].ownerDocument,
			body = doc.body,
			docElem = doc.documentElement,
			clientTop = docElem.clientTop || body.clientTop || 0,
			clientLeft = docElem.clientLeft || body.clientLeft || 0,
			top = a.top + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop || body.scrollTop) - clientTop,
			left = a.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
		return {
			top: top,
			left: left
		}
	};
	else jQuery.fn.offset = function () {
		if (!this[0]) return {
			top: 0,
			left: 0
		};
		if (this[0] === this[0].ownerDocument.body) return jQuery.offset.bodyOffset(this[0]);
		jQuery.offset.initialized || jQuery.offset.initialize();
		var a = this[0],
			offsetParent = a.offsetParent,
			prevOffsetParent = a,
			doc = a.ownerDocument,
			computedStyle, docElem = doc.documentElement,
			body = doc.body,
			defaultView = doc.defaultView,
			prevComputedStyle = defaultView.getComputedStyle(a, null),
			top = a.offsetTop,
			left = a.offsetLeft;
		while ((a = a.parentNode) && a !== body && a !== docElem) {
			computedStyle = defaultView.getComputedStyle(a, null);
			top -= a.scrollTop, left -= a.scrollLeft;
			if (a === offsetParent) {
				top += a.offsetTop, left += a.offsetLeft;
				if (jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(a.tagName))) top += parseInt(computedStyle.borderTopWidth, 10) || 0, left += parseInt(computedStyle.borderLeftWidth, 10) || 0;
				prevOffsetParent = offsetParent, offsetParent = a.offsetParent
			}
			if (jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible") top += parseInt(computedStyle.borderTopWidth, 10) || 0, left += parseInt(computedStyle.borderLeftWidth, 10) || 0;
			prevComputedStyle = computedStyle
		}
		if (prevComputedStyle.position === "relative" || prevComputedStyle.position === "static") top += body.offsetTop, left += body.offsetLeft;
		if (prevComputedStyle.position === "fixed") top += Math.max(docElem.scrollTop, body.scrollTop), left += Math.max(docElem.scrollLeft, body.scrollLeft);
		return {
			top: top,
			left: left
		}
	};
	jQuery.offset = {
		initialize: function () {
			if (this.initialized) return;
			var a = document.body,
				container = document.createElement('div'),
				innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = a.style.marginTop,
				html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';
			rules = {
				position: 'absolute',
				top: 0,
				left: 0,
				margin: 0,
				border: 0,
				width: '1px',
				height: '1px',
				visibility: 'hidden'
			};
			for (prop in rules) container.style[prop] = rules[prop];
			container.innerHTML = html;
			a.insertBefore(container, a.firstChild);
			innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;
			this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
			this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
			innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
			this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
			a.style.marginTop = '1px';
			this.doesNotIncludeMarginInBodyOffset = (a.offsetTop === 0);
			a.style.marginTop = bodyMarginTop;
			a.removeChild(container);
			this.initialized = true
		},
		bodyOffset: function (a) {
			jQuery.offset.initialized || jQuery.offset.initialize();
			var b = a.offsetTop,
				left = a.offsetLeft;
			if (jQuery.offset.doesNotIncludeMarginInBodyOffset) b += parseInt(jQuery.curCSS(a, 'marginTop', true), 10) || 0, left += parseInt(jQuery.curCSS(a, 'marginLeft', true), 10) || 0;
			return {
				top: b,
				left: left
			}
		}
	};
	jQuery.fn.extend({
		position: function () {
			var a = 0,
				top = 0,
				results;
			if (this[0]) {
				var b = this.offsetParent(),
					offset = this.offset(),
					parentOffset = /^body|html$/i.test(b[0].tagName) ? {
						top: 0,
						left: 0
					} : b.offset();
				offset.top -= num(this, 'marginTop');
				offset.left -= num(this, 'marginLeft');
				parentOffset.top += num(b, 'borderTopWidth');
				parentOffset.left += num(b, 'borderLeftWidth');
				results = {
					top: offset.top - parentOffset.top,
					left: offset.left - parentOffset.left
				}
			}
			return results
		},
		offsetParent: function () {
			var a = this[0].offsetParent || document.body;
			while (a && (!/^body|html$/i.test(a.tagName) && jQuery.css(a, 'position') == 'static')) a = a.offsetParent;
			return jQuery(a)
		}
	});
	jQuery.each(['Left', 'Top'], function (i, b) {
		var c = 'scroll' + b;
		jQuery.fn[c] = function (a) {
			if (!this[0]) return null;
			return a !== undefined ? this.each(function () {
				this == y || this == document ? y.scrollTo(!i ? a : jQuery(y).scrollLeft(), i ? a : jQuery(y).scrollTop()) : this[c] = a
			}) : this[0] == y || this[0] == document ? self[i ? 'pageYOffset' : 'pageXOffset'] || jQuery.boxModel && document.documentElement[c] || document.body[c] : this[0][c]
		}
	});
	jQuery.each(["Height", "Width"], function (i, b) {
		var c = i ? "Left" : "Top",
			br = i ? "Right" : "Bottom",
			lower = b.toLowerCase();
		jQuery.fn["inner" + b] = function () {
			return this[0] ? jQuery.css(this[0], lower, false, "padding") : null
		};
		jQuery.fn["outer" + b] = function (a) {
			return this[0] ? jQuery.css(this[0], lower, false, a ? "margin" : "border") : null
		};
		var d = b.toLowerCase();
		jQuery.fn[d] = function (a) {
			return this[0] == y ? document.compatMode == "CSS1Compat" && document.documentElement["client" + b] || document.body["client" + b] : this[0] == document ? Math.max(document.documentElement["client" + b], document.body["scroll" + b], document.documentElement["scroll" + b], document.body["offset" + b], document.documentElement["offset" + b]) : a === undefined ? (this.length ? jQuery.css(this[0], d) : null) : this.css(d, typeof a === "string" ? a : a + "px")
		}
	})
})();
var Common = {};
Common.trim = function (s) {
	return s.replace(/(^\s*)|(\s*$)/g, "")
};
var validator = {
	errinput: 'errinput',
	errmsg: 'errmsg',
	errcls: 'no',
	yescls: 'yes',
	errorTip: 'errorTip',
	errorInput: 'errorInput',
	validTip: 'validTip',
	require: /[^(^\s*)|(\s*$)]/,
	email: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
	domain: /^\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
	phone: /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,
	mobile: /^((\(\d{3}\))|(\d{3}\-))?13[0-9]\d{8}?$|15[0-9]\d{8}?$|18[0-9]\d{8}?$/,
	url: /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
	idcard: "this.isIdCard(value)",
	money: /^\d+(\.\d+)?$/,
	number: /^\d+$/,
	zip: /^\d{6}$/,
	ip: /^[\d\.]{7,15}$/,
	qq: /^[1-9]\d{4,9}$/,
	integer: /^[-\+]?\d+$/,
	double: /^[-\+]?\d+(\.\d+)?$/,
	english: /^[A-Za-z]+$/,
	chinese: /^[\u0391-\uFFE5]+$/,
	enandcn: /^[\w\u0391-\uFFE5][\w\u0391-\uFFE5\-\.]+$/,
	username: /^[\w]+[\-\.\w]{2,}$/i,
	unsafe: /[<>\?\#\$\*\&;\\\/\[\]\{\}=\(\)\.\^%,]/,
	safestring: "this.isSafe(value)",
	filter: "this.doFilter(value)",
	limit: "this.checkLimit(value.length)",
	limitb: "this.checkLimit(this.LenB(value))",
	limitc: "this.checkLimit(value.length)",
	date: "this.isDate(value)",
	repeat: "this.checkRepeat(value)",
	range: "this.checkRange(value)",
	compare: "this.checkCompare(value)",
	custom: "this.Exec(value)",
	group: "this.mustChecked()",
	ajax: "this.doajax(errindex)",
	isIdCard: function (a) {
		var b, Ai;
		var c = "10x98765432";
		var d = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
		var e = ['', '', '', '', '', '', '', '', '', '', '', '±±ѕ©', 'МмЅт', 'єУ±±', 'ЙЅОч', 'ДЪГЙ№Е', '', '', '', '', '', 'БЙДю', 'јЄБЦ', 'єЪБъЅ­', '', '', '', '', '', '', '', 'ЙПєЈ', 'Ѕ­ЛХ', 'ХгЅ­', '°ІОў', 'ёЈЅЁ', 'Ѕ­Оч', 'ЙЅ¶«', '', '', '', 'єУДП', 'єю±±', 'єюДП', '№г¶«', '№гОч', 'єЈДП', '', '', '', 'ЦШЗм', 'ЛДґЁ', '№уЦЭ', 'ФЖДП', 'ОчІШ', '', '', '', '', '', '', 'ЙВОч', 'ёКЛа', 'ЗаєЈ', 'ДюПД', 'РВЅ®', '', '', '', '', '', 'МЁНе', '', '', '', '', '', '', '', '', '', 'ПгёЫ', '°ДГЕ', '', '', '', '', '', '', '', '', '№ъНв'];
		var f = a.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/i);
		if (f == null) return false;
		if (f[1] >= e.length || e[f[1]] == "") return false;
		if (f[2].length == 12) {
			Ai = a.substr(0, 17);
			b = [f[9], f[10], f[11]].join("-")
		} else {
			Ai = a.substr(0, 6) + "19" + a.substr(6);
			b = ["19" + f[4], f[5], f[6]].join("-")
		}
		if (!this.isDate(b, "ymd")) return false;
		var g = 0;
		for (var i = 0; i <= 16; i++) {
			g += Ai.charAt(i) * d[i]
		}
		Ai += c.charAt(g % 11);
		return (a.length == 15 || a.length == 18 && a == Ai)
	},
	isSafe: function (a) {
		return !this.unsafe.test(a)
	},
	isDate: function (a) {
		var b = this['element'].attr('format');
		b = b || "ymd";
		var m, year, month, day;
		switch (b) {
		case "ymd":
			m = a.match(new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$"));
			if (m == null) return false;
			day = m[6];
			month = m[5] * 1;
			year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
			break;
		case "dmy":
			m = a.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));
			if (m == null) return false;
			day = m[1];
			month = m[3] * 1;
			year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
			break;
		default:
			break
		}
		if (!parseInt(month)) return false;
		month = month == 0 ? 12 : month;
		var c = new Date(year, month - 1, day);
		return (typeof (c) == "object" && year == c.getFullYear() && month == (c.getMonth() + 1) && day == c.getDate());

		function GetFullYear(y) {
			return ((y < 30 ? "20" : "19") + y) | 0
		}
	},
	doFilter: function (a) {
		var b = this['element'].attr('accept');
		return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, b.split(/\s*,\s*/).join("|")), "gi").test(a)
	},
	checkLimit: function (a) {
		var b = this['element'].attr('min') || Number.MIN_VALUE;
		var c = this['element'].attr('max') || Number.MAX_VALUE;
		return (b <= a && a <= c)
	},
	LenB: function (a) {
		return a.replace(/[^\x00-\xff]/g, "**").length
	},
	checkRepeat: function (a) {
		var b = this['element'].attr('to');
		return a == jQuery('input[name="' + b + '"]').eq(0).val()
	},
	checkRange: function (a) {
		a = a | 0;
		var b = this['element'].attr('min') || Number.MIN_VALUE;
		var c = this['element'].attr('max') || Number.MAX_VALUE;
		return (b <= a && a <= c)
	},
	checkCompare: function (a) {
		var b = this['element'].attr('compare');
		if (!a) return false;
		return jQuery('#' + b).attr('value') == a
	},
	Exec: function (a) {
		var b = this['element'].attr('regexp');
		return new RegExp(b, "gi").test(a)
	},
	mustChecked: function () {
		var a = this['element'].attr('name');
		var f = this['element'].parents('form');
		var n = f.find('input[name="' + a + '"][checked]').length;
		var b = f.find('input[name="' + a + '"]').length;
		var c = this['element'].attr('min') || 1;
		var d = this['element'].attr('max') || b;
		return (c <= n && n <= d)
	},
	doajax: function (b) {
		var c = this['element'];
		var d = this['errindex'];
		var e = this['element'].attr('url');
		var f = this['element'].attr('vname');
		var g = jQuery('#' + c.attr('msgid'));
		var h = this['element'].val();
		var i = this['element'].attr('msg');
		var j;
		var k;
		if (i.indexOf('|') > -1) {
			j = i.split('|');
			k = j[d]
		} else {
			k = ''
		}
		var l = this['element'].attr('type');
		var m = jQuery.browser.msie ? document.charset : document.characterSet;
		var n = (m.toLowerCase() == 'utf-8') ? 'post' : 'get';
		var o = this['element'].attr('method') || n;
		var p = this['element'].attr('name');
		if (e == "" || e == undefined) {
			alert('Please specify url');
			return false
		} else if (f == "" || f == undefined) {
			alert('Please specify vname');
			return false
		}
		if (e.indexOf('?') > -1) {
			e = e + "&n=" + f + "&v=" + escape(h)
		} else {
			e = e + '?n=' + f + "&v=" + escape(h)
		}
		var s = $.ajax({
			type: o,
			url: e,
			data: {},
			cache: false,
			async: false,
			success: function (a) {
				a = a.replace(/(^\s*)|(\s*$)/g, "");
				a = eval('(' + a + ')');
				if (a.error != 0) {
					k = k == "" ? a.data : k;
					(l != 'checkbox' && l != 'radio' && c.addClass(validator.errorInput));
					if (!k) return false;
					if (g.length > 0) {
						g.removeClass(validator.validTip).addClass(validator.errorTip).html(k)
					} else {
						jQuery("<span class='" + validator.errorTip + "'></span>").html(k).insertAfter(c)
					}
					return false
				} else if (a.error == 0) {
					if (g.length > 0) {
						g.removeClass(validator.errorTip).addClass(validator.validTip).html('')
					} else {
						jQuery("<span class='" + validator.validTip + "'></span>").insertAfter(c)
					}
					return true
				}
			}
		}).responseText;
		return (eval('(' + s.replace(/(^\s*)|(\s*$)/g, "") + ')').error == 0)
	}
};
validator.showErr = function (a, b) {
	var c = a.attr('msg') || '';
	var d = c.split('|');
	var e = d[b] ? d[b] : d[0];
	var f = jQuery('#' + a.attr('msgid'));
	var g = a.attr('type');
	(g != 'checkbox' && g != 'radio' && a.addClass(this['errorinput']));
	if (!e) return false;
	if (f.length > 0) {
		f.removeClass(this['validTip']).addClass(this['errorTip']).html(e)
	} else {
		a.parent('*').find('.' + this['errorTip']).remove();
		jQuery("<span class='" + this['errorTip'] + "'></span>").html(e).insertAfter(a)
	}
	return false
};
validator.removeErr = function (a) {
	a.removeClass(this['errorInput']);
	var b = jQuery('#' + a.attr('msgid'));
	if (b.length == 0) {
		a.parent('*').find('span .' + this['errorTip']).remove();
		a.parent('*').find('span .' + this['validTip']).remove()
	}
};
validator.checkajax = function (a, b, c) {
	var d = jQuery.trim(a.val());
	this['element'] = a;
	this['errindex'] = c;
	validator.removeErr(a);
	return eval(this[b])
};
validator.checkDatatype = function (a, b) {
	var c = jQuery.trim(a.val());
	this['element'] = a;
	validator.removeErr(a);
	switch (b) {
	case "idcard":
	case "date":
	case "repeat":
	case "range":
	case "compare":
	case "custom":
	case "group":
	case "limit":
	case "limitb":
	case "limitc":
	case "safestring":
	case "filter":
		return eval(this[b]);
		break;
	default:
		return this[b].test(c);
		break
	}
};
validator.check = function (d, f) {
	var g = d.attr('datatype');
	var h = d.attr('lastvalue');
	var i = jQuery.trim(d.val());
	if (typeof (g) == "undefined") return true;
	if (d.attr('require') != "true" && i == "") return true;
	var j = true;
	var k = g.split('|');
	if (($.inArray('repeat', k) == -1) && ($.inArray('ajax', k) != -1) && (f == true || (h && h == i))) {
		var e = d.parent('*').find('.' + validator.errorTip);
		var v = d.parent('*').find('.' + validator.validTip);
		if (e.length > 0 || v.length > 0) {
			return (v.length > 0)
		}
	}
	jQuery.each(k, function (a, b) {
		if (typeof (validator[b]) == "undefined") {
			j = false;
			return false
		}
		if (b == 'ajax') return j = validator.checkajax(d, b, a);
		if (validator.checkDatatype(d, b) == false) {
			d.addClass(validator.errorInput);
			validator.showErr(d, a);
			return j = false
		} else {
			validator.showErr(d, a);
			d.removeClass(validator.errorInput);
			var c = jQuery('#' + d.attr('msgid'));
			if (c.length > 0) {
				c.removeClass(validator.errorTip).addClass(validator.validTip).html('')
			} else {
				d.parent('*').find('.' + validator.errorTip + ',.' + validator.validTip).remove();
				jQuery('<span class="' + validator.validTip + '"></span>').insertAfter(d)
			}
		}
	});
	d.attr('lastvalue', i);
	return j
};
jQuery.fn.validateForm = function (a) {
	var b = true;
	var c = new Array();
	var n = 0;
	var d = '';
	var e = a.find(':input[require]');
	e.each(function (i) {
		if (false == validator.check(jQuery(this), true)) {
			var m = jQuery(this).parent('*').find('.' + validator.errorTip).html();
			if (m) {
				d += (d == '') ? m : '\n' + m
			}
			b = false;
			c[n++] = i
		}
	});
	if (b == false) {
		e.eq(c[0]).focus().select();
		return false
	}
	return true
};
jQuery.fn.checkForm = function (a) {
	var a = jQuery(a);
	var b = a.find(':input[require]');
	b.blur(function () {
		return validator.check(jQuery(this))
	});
	a.submit(function () {
		return jQuery.fn.validateForm(a)
	})
};
jQuery.fn.extend({
	everyTime: function (a, b, c, d) {
		return this.each(function () {
			jQuery.timer.add(this, a, b, c, d)
		})
	},
	oneTime: function (a, b, c) {
		return this.each(function () {
			jQuery.timer.add(this, a, b, c, 1)
		})
	},
	stopTime: function (a, b) {
		return this.each(function () {
			jQuery.timer.remove(this, a, b)
		})
	}
});
jQuery.extend({
	timer: {
		global: [],
		guid: 1,
		dataKey: "jQuery.timer",
		regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
		powers: {
			'ms': 1,
			'cs': 10,
			'ds': 100,
			's': 1000,
			'das': 10000,
			'hs': 100000,
			'ks': 1000000
		},
		timeParse: function (a) {
			if (a == undefined || a == null) return null;
			var b = this.regex.exec(jQuery.trim(a.toString()));
			if (b[2]) {
				var c = parseFloat(b[1]);
				var d = this.powers[b[2]] || 1;
				return c * d
			} else {
				return a
			}
		},
		add: function (a, b, c, d, e) {
			var f = 0;
			if (jQuery.isFunction(c)) {
				if (!e) e = d;
				d = c;
				c = b
			}
			b = jQuery.timer.timeParse(b);
			if (typeof b != 'number' || isNaN(b) || b < 0) return;
			if (typeof e != 'number' || isNaN(e) || e < 0) e = 0;
			e = e || 0;
			var g = jQuery.data(a, this.dataKey) || jQuery.data(a, this.dataKey, {});
			if (!g[c]) g[c] = {};
			d.timerID = d.timerID || this.guid++;
			var h = function () {
					if ((++f > e && e !== 0) || d.call(a, f) === false) jQuery.timer.remove(a, c, d)
				};
			h.timerID = d.timerID;
			if (!g[c][d.timerID]) g[c][d.timerID] = window.setInterval(h, b);
			this.global.push(a)
		},
		remove: function (a, b, c) {
			var d = jQuery.data(a, this.dataKey),
				ret;
			if (d) {
				if (!b) {
					for (b in d) this.remove(a, b, c)
				} else if (d[b]) {
					if (c) {
						if (c.timerID) {
							window.clearInterval(d[b][c.timerID]);
							delete d[b][c.timerID]
						}
					} else {
						for (var c in d[b]) {
							window.clearInterval(d[b][c]);
							delete d[b][c]
						}
					}
					for (ret in d[b]) break;
					if (!ret) {
						ret = null;
						delete d[b]
					}
				}
				for (ret in d) break;
				if (!ret) jQuery.removeData(a, this.dataKey)
			}
		}
	}
});
jQuery(window).bind("unload", function () {
	jQuery.each(jQuery.timer.global, function (a, b) {
		jQuery.timer.remove(b)
	})
});
(function ($) {
	$.fn.ajaxSubmit = function (u) {
		if (!this.length) {
			log('ajaxSubmit: skipping submit process - no element selected');
			return this
		}
		if (typeof u == 'function') u = {
			success: u
		};
		var v = this.attr('action') || window.location.href;
		v = (v.match(/^([^#]+)/) || [])[1];
		v = v || '';
		u = $.extend({
			url: v,
			type: this.attr('method') || 'GET'
		}, u || {});
		var w = {};
		this.trigger('form-pre-serialize', [this, u, w]);
		if (w.veto) {
			log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
			return this
		}
		if (u.beforeSerialize && u.beforeSerialize(this, u) === false) {
			log('ajaxSubmit: submit aborted via beforeSerialize callback');
			return this
		}
		var a = this.formToArray(u.semantic);
		if (u.data) {
			u.extraData = u.data;
			for (var n in u.data) {
				if (u.data[n] instanceof Array) {
					for (var k in u.data[n]) a.push({
						name: n,
						value: u.data[n][k]
					})
				} else a.push({
					name: n,
					value: u.data[n]
				})
			}
		}
		if (u.beforeSubmit && u.beforeSubmit(a, this, u) === false) {
			log('ajaxSubmit: submit aborted via beforeSubmit callback');
			return this
		}
		this.trigger('form-submit-validate', [a, this, u, w]);
		if (w.veto) {
			log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
			return this
		}
		var q = $.param(a);
		if (u.type.toUpperCase() == 'GET') {
			u.url += (u.url.indexOf('?') >= 0 ? '&' : '?') + q;
			u.data = null
		} else u.data = q;
		var x = this,
			callbacks = [];
		if (u.resetForm) callbacks.push(function () {
			x.resetForm()
		});
		if (u.clearForm) callbacks.push(function () {
			x.clearForm()
		});
		if (!u.dataType && u.target) {
			var y = u.success ||
			function () {};
			callbacks.push(function (a) {
				$(u.target).html(a).each(y, arguments)
			})
		} else if (u.success) callbacks.push(u.success);
		u.success = function (a, b) {
			for (var i = 0, max = callbacks.length; i < max; i++) callbacks[i].apply(u, [a, b, x])
		};
		var z = $('input:file', this).fieldValue();
		var A = false;
		for (var j = 0; j < z.length; j++) if (z[j]) A = true;
		if (u.iframe || A) {
			if (u.closeKeepAlive) $.get(u.closeKeepAlive, fileUpload);
			else fileUpload()
		} else $.ajax(u);
		this.trigger('form-submit-notify', [this, u]);
		return this;

		function fileUpload() {
			var h = x[0];
			if ($(':input[name=submit]', h).length) {
				alert('Error: Form elements must not be named "submit".');
				return
			}
			var i = $.extend({}, $.ajaxSettings, u);
			var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), i);
			var j = 'jqFormIO' + (new Date().getTime());
			var k = $('<iframe id="' + j + '" name="' + j + '" src="about:blank" />');
			var l = k[0];
			k.css({
				position: 'absolute',
				top: '-1000px',
				left: '-1000px'
			});
			var m = {
				aborted: 0,
				responseText: null,
				responseXML: null,
				status: 0,
				statusText: 'n/a',
				getAllResponseHeaders: function () {},
				getResponseHeader: function () {},
				setRequestHeader: function () {},
				abort: function () {
					this.aborted = 1;
					k.attr('src', 'about:blank')
				}
			};
			var g = i.global;
			if (g && !$.active++) $.event.trigger("ajaxStart");
			if (g) $.event.trigger("ajaxSend", [m, i]);
			if (s.beforeSend && s.beforeSend(m, s) === false) {
				s.global && $.active--;
				return
			}
			if (m.aborted) return;
			var o = 0;
			var p = 0;
			var q = h.clk;
			if (q) {
				var n = q.name;
				if (n && !q.disabled) {
					u.extraData = u.extraData || {};
					u.extraData[n] = q.value;
					if (q.type == "image") {
						u.extraData[name + '.x'] = h.clk_x;
						u.extraData[name + '.y'] = h.clk_y
					}
				}
			}
			setTimeout(function () {
				var t = x.attr('target'),
					a = x.attr('action');
				h.setAttribute('target', j);
				if (h.getAttribute('method') != 'POST') h.setAttribute('method', 'POST');
				if (h.getAttribute('action') != i.url) h.setAttribute('action', i.url);
				if (!u.skipEncodingOverride) {
					x.attr({
						encoding: 'multipart/form-data',
						enctype: 'multipart/form-data'
					})
				}
				if (i.timeout) setTimeout(function () {
					p = true;
					cb()
				}, i.timeout);
				var b = [];
				try {
					if (u.extraData) for (var n in u.extraData) b.push($('<input type="hidden" name="' + n + '" value="' + u.extraData[n] + '" />').appendTo(h)[0]);
					k.appendTo('body');
					l.attachEvent ? l.attachEvent('onload', cb) : l.addEventListener('load', cb, false);
					h.submit()
				} finally {
					h.setAttribute('action', a);
					t ? h.setAttribute('target', t) : x.removeAttr('target');
					$(b).remove()
				}
			}, 10);
			var r = 0;

			function cb() {
				if (o++) return;
				l.detachEvent ? l.detachEvent('onload', cb) : l.removeEventListener('load', cb, false);
				var c = true;
				try {
					if (p) throw 'timeout';
					var d, doc;
					doc = l.contentWindow ? l.contentWindow.document : l.contentDocument ? l.contentDocument : l.document;
					if ((doc.body == null || doc.body.innerHTML == '') && !r) {
						r = 1;
						o--;
						setTimeout(cb, 100);
						return
					}
					m.responseText = doc.body ? doc.body.innerHTML : null;
					m.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
					m.getResponseHeader = function (a) {
						var b = {
							'content-type': i.dataType
						};
						return b[a]
					};
					if (i.dataType == 'json' || i.dataType == 'script') {
						var f = doc.getElementsByTagName('textarea')[0];
						m.responseText = f ? f.value : m.responseText
					} else if (i.dataType == 'xml' && !m.responseXML && m.responseText != null) {
						m.responseXML = toXml(m.responseText)
					}
					d = $.httpData(m, i.dataType)
				} catch (e) {
					c = false;
					$.handleError(i, m, 'error', e)
				}
				if (c) {
					i.success(d, 'success');
					if (g) $.event.trigger("ajaxSuccess", [m, i])
				}
				if (g) $.event.trigger("ajaxComplete", [m, i]);
				if (g && !--$.active) $.event.trigger("ajaxStop");
				if (i.complete) i.complete(m, c ? 'success' : 'error');
				setTimeout(function () {
					k.remove();
					m.responseXML = null
				}, 100)
			};

			function toXml(s, a) {
				if (window.ActiveXObject) {
					a = new ActiveXObject('Microsoft.XMLDOM');
					a.async = 'false';
					a.loadXML(s)
				} else a = (new DOMParser()).parseFromString(s, 'text/xml');
				return (a && a.documentElement && a.documentElement.tagName != 'parsererror') ? a : null
			}
		}
	};
	$.fn.ajaxForm = function (c) {
		return this.ajaxFormUnbind().bind('submit.form-plugin', function () {
			$(this).ajaxSubmit(c);
			return false
		}).each(function () {
			$(":submit,input:image", this).bind('click.form-plugin', function (e) {
				var a = this.form;
				a.clk = this;
				if (this.type == 'image') {
					if (e.offsetX != undefined) {
						a.clk_x = e.offsetX;
						a.clk_y = e.offsetY
					} else if (typeof $.fn.offset == 'function') {
						var b = $(this).offset();
						a.clk_x = e.pageX - b.left;
						a.clk_y = e.pageY - b.top
					} else {
						a.clk_x = e.pageX - this.offsetLeft;
						a.clk_y = e.pageY - this.offsetTop
					}
				}
				setTimeout(function () {
					a.clk = a.clk_x = a.clk_y = null
				}, 10)
			})
		})
	};
	$.fn.ajaxFormUnbind = function () {
		this.unbind('submit.form-plugin');
		return this.each(function () {
			$(":submit,input:image", this).unbind('click.form-plugin')
		})
	};
	$.fn.formToArray = function (b) {
		var a = [];
		if (this.length == 0) return a;
		var c = this[0];
		var d = b ? c.getElementsByTagName('*') : c.elements;
		if (!d) return a;
		for (var i = 0, max = d.length; i < max; i++) {
			var e = d[i];
			var n = e.name;
			if (!n) continue;
			if (b && c.clk && e.type == "image") {
				if (!e.disabled && c.clk == e) a.push({
					name: n + '.x',
					value: c.clk_x
				}, {
					name: n + '.y',
					value: c.clk_y
				});
				continue
			}
			var v = $.fieldValue(e, true);
			if (v && v.constructor == Array) {
				for (var j = 0, jmax = v.length; j < jmax; j++) a.push({
					name: n,
					value: v[j]
				})
			} else if (v !== null && typeof v != 'undefined') a.push({
				name: n,
				value: v
			})
		}
		if (!b && c.clk) {
			var f = c.getElementsByTagName("input");
			for (var i = 0, max = f.length; i < max; i++) {
				var g = f[i];
				var n = g.name;
				if (n && !g.disabled && g.type == "image" && c.clk == g) a.push({
					name: n + '.x',
					value: c.clk_x
				}, {
					name: n + '.y',
					value: c.clk_y
				})
			}
		}
		return a
	};
	$.fn.formSerialize = function (a) {
		return $.param(this.formToArray(a))
	};
	$.fn.fieldSerialize = function (b) {
		var a = [];
		this.each(function () {
			var n = this.name;
			if (!n) return;
			var v = $.fieldValue(this, b);
			if (v && v.constructor == Array) {
				for (var i = 0, max = v.length; i < max; i++) a.push({
					name: n,
					value: v[i]
				})
			} else if (v !== null && typeof v != 'undefined') a.push({
				name: this.name,
				value: v
			})
		});
		return $.param(a)
	};
	$.fn.fieldValue = function (a) {
		for (var b = [], i = 0, max = this.length; i < max; i++) {
			var c = this[i];
			var v = $.fieldValue(c, a);
			if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) continue;
			v.constructor == Array ? $.merge(b, v) : b.push(v)
		}
		return b
	};
	$.fieldValue = function (b, c) {
		var n = b.name,
			t = b.type,
			tag = b.tagName.toLowerCase();
		if (typeof c == 'undefined') c = true;
		if (c && (!n || b.disabled || t == 'reset' || t == 'button' || (t == 'checkbox' || t == 'radio') && !b.checked || (t == 'submit' || t == 'image') && b.form && b.form.clk != b || tag == 'select' && b.selectedIndex == -1)) return null;
		if (tag == 'select') {
			var d = b.selectedIndex;
			if (d < 0) return null;
			var a = [],
				ops = b.options;
			var e = (t == 'select-one');
			var f = (e ? d + 1 : ops.length);
			for (var i = (e ? d : 0); i < f; i++) {
				var g = ops[i];
				if (g.selected) {
					var v = g.value;
					if (!v) v = (g.attributes && g.attributes['value'] && !(g.attributes['value'].specified)) ? g.text : g.value;
					if (e) return v;
					a.push(v)
				}
			}
			return a
		}
		return b.value
	};
	$.fn.clearForm = function () {
		return this.each(function () {
			$('input,select,textarea', this).clearFields()
		})
	};
	$.fn.clearFields = $.fn.clearInputs = function () {
		return this.each(function () {
			var t = this.type,
				tag = this.tagName.toLowerCase();
			if (t == 'text' || t == 'password' || tag == 'textarea') this.value = '';
			else if (t == 'checkbox' || t == 'radio') this.checked = false;
			else if (tag == 'select') this.selectedIndex = -1
		})
	};
	$.fn.resetForm = function () {
		return this.each(function () {
			if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) this.reset()
		})
	};
	$.fn.enable = function (b) {
		if (b == undefined) b = true;
		return this.each(function () {
			this.disabled = !b
		})
	};
	$.fn.selected = function (b) {
		if (b == undefined) b = true;
		return this.each(function () {
			var t = this.type;
			if (t == 'checkbox' || t == 'radio') this.checked = b;
			else if (this.tagName.toLowerCase() == 'option') {
				var a = $(this).parent('select');
				if (b && a[0] && a[0].type == 'select-one') {
					a.find('option').selected(false)
				}
				this.selected = b
			}
		})
	};

	function log() {
		if ($.fn.ajaxSubmit.debug && window.console && window.console.log) window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments, ''))
	}
})(jQuery);
var X = {};
X.hook = function () {
	var a = 'x_init_hook_';
	for (var h in window) {
		if (0 != h.indexOf(a)) continue;
		var b = window[h];
		if (typeof b == 'function') {
			try {
				b()
			} catch (e) {}
		}
	}
};
X.get = function (u) {
	return X.ajax(u, 'GET')
};
X.post = function (u) {
	return X.ajax(u, 'POST')
};
X.ajax = function (u, a) {
	jQuery.ajax({
		url: u,
		dataType: "json",
		success: X.json
	});
	return false
};
X.json = function (r) {
	var a = r['data']['type'];
	var b = r['data']['data'];
	if (a == 'alert') {
		alert(b)
	} else if (a == 'eval') {
		eval(b)
	} else if (a == 'refresh') {
		window.location.reload()
	} else if (a == 'updater') {
		var c = b['id'];
		var d = b['html'];
		jQuery('#' + c).html(d)
	} else if (a == 'dialog') {
		X.boxShow(b, true)
	} else if (a == 'mix') {
		for (var x in b) {
			r['data'] = b[x];
			X.json(r)
		}
	}
};
X.getXY = function () {
	var x, y;
	if (document.body.scrollTop) {
		x = document.body.scrollLeft;
		y = document.body.scrollTop
	} else {
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop
	}
	return {
		x: x,
		y: y
	}
};
X.boxMask = function (a) {
	var b = jQuery('body').height() + 'px';
	var c = jQuery(window).width() + 'px';
	jQuery('#pagemasker').css({
		'position': 'absolute',
		'z-index': '3000',
		'width': c,
		'height': b,
		'filter': 'alpha(opacity=0.5)',
		'opacity': 0.5,
		'top': 0,
		'left': 0,
		'background': '#CCC',
		'display': a
	});
	jQuery('#dialog').css('display', a)
};
X.boxShow = function (a, b) {
	var c = jQuery('#dialog');
	c.html(a);
	if (b) {
		X.boxMask('block')
	}
	var d = c.get(0).scrollWidth;
	var e = jQuery(window).width();
	var f = (e / 2 - d / 2) + 'px';
	var g = jQuery(window).height();
	var h = X.getXY();
	var i = (g * 0.15 + h.y) + 'px';
	c.css('background-color', '#FFF');
	c.css('left', f);
	c.css('top', i);
	c.css('z-index', 9999);
	c.css('display', 'block');
	return false
};
X.boxClose = function () {
	jQuery('#dialog').html('').css('z-index', -9999);
	X.boxMask('none');
	return false
};
X.location = function (a) {
	jQuery('#ifra_show').attr({
		src: a
	})
};
jQuery(document).ready(X.hook);
var WEB_ROOT = WEB_ROOT || '';
var LOGINUID = LOGINUID || 0;
window.x_init_hook_validator = function () {
	jQuery('form.validator').each(function () {
		jQuery.fn.checkForm(this)
	});
	jQuery('a.needlogin').click(X.misc.needlogin)
};
window.x_init_hook_dealimage = function () {
	jQuery('#deal-stuff img').each(function () {
		X.misc.scaleimage(this, 380)
	});
	jQuery('#side-business img').each(function () {
		X.misc.scaleimage(this, 195)
	})
};
window.x_init_hook_click = function () {
	jQuery("div:not(#guides-city-change)").click(function () {
		jQuery('#guides-city-list').css('display', 'none')
	});
	jQuery('#guides-city-change').click(function () {
		return !jQuery('#guides-city-list').toggle()
	});
	jQuery('#sysmsg-guide-close').click(function () {
		jQuery('#sysmsg-guide').remove();
		return !X.get(WEB_ROOT + '/ajax/newbie.php')
	});
	jQuery('#sysmsg-error span.close').click(function () {
		return !jQuery('#sysmsg-error').remove()
	});
	jQuery('#sysmsg-success span.close').click(function () {
		return !jQuery('#sysmsg-success').remove()
	});
	jQuery('#deal-share-im').click(function () {
		return !jQuery('#deal-share-im-c').toggle()
	});
	jQuery('a.ajaxlink').click(function () {
		if (jQuery(this).attr('no') == 'yes') return false;
		var a = jQuery(this).attr('href');
		var b = jQuery(this).attr('ask');
		if (a.indexOf('/delete') > 0 && !confirm('Delete this item?')) {
			return false
		} else if (b && !confirm(b)) {
			return false
		}
		X.get(jQuery(this).attr('href'));
		return false
	});
	jQuery('a.remove').click(function () {
		var u = jQuery(this).attr('href');
		if (confirm('Delete this item?')) {
			X.get(u)
		}
		return false
	});
	jQuery('.remove-record').click(function () {
		return confirm('Delete this item?')
	});
	jQuery('a.delay').click(function () {
		var u = jQuery(this).attr('href');
		if (confirm('Postpond it for 1 day?')) {
			return !X.get(u) && false
		}
		return false
	});
	jQuery('#cardcode-link').click(function () {
		jQuery('.cardcode .act').toggle()
	});
	jQuery('#cardcode-verify-id').click(X.misc.cardcode);
	jQuery('#consult-add-form input[name="commit"]').click(function () {
		jQuery('#consult-add-form').ajaxSubmit({
			'success': function () {
				X.team.consultation_again()
			}
		});
		return false
	});
	jQuery('#consult-add-more').click(X.team.consultation_again);
	jQuery('#express-zone-div input').click(function () {
		var v = jQuery(this).attr('value');
		if (v == 'express') {
			jQuery('#express-zone-express').css('display', 'block');
			jQuery('#express-zone-pickup').css('display', 'none');
			jQuery('#express-zone-coupon').css('display', 'none')
		} else if (v == 'pickup') {
			jQuery('#express-zone-pickup').css('display', 'block');
			jQuery('#express-zone-express').css('display', 'none');
			jQuery('#express-zone-coupon').css('display', 'none')
		} else if (v == 'coupon') {
			jQuery('#express-zone-coupon').css('display', 'block');
			jQuery('#express-zone-pickup').css('display', 'none');
			jQuery('#express-zone-express').css('display', 'none')
		}
	});
	jQuery('#mail-zone-div input').click(function () {
		var v = jQuery(this).attr('value');
		if (v == 'smtp') {
			jQuery('#mail-zone-smtp').css('display', 'block')
		} else {
			jQuery('#mail-zone-smtp').css('display', 'none')
		}
	});
	jQuery('#share-copy-text').click(function () {
		jQuery(this).select()
	});
	jQuery('#share-copy-button').click(function () {
		X.misc.copyToCB('share-copy-text')
	});
	jQuery('#verify-coupon-id').click(function () {
		X.get(WEB_ROOT + '/ajax/coupon.php?action=dialog')
	});
	jQuery('#deal-subscribe-form').submit(function () {
		var v = jQuery('#deal-subscribe-form-email').attr('value');
		return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(v)
	});
	jQuery('input[xtip$="."]').each(X.misc.inputblur);
	jQuery('input[xtip$="."]').focus(X.misc.inputclick);
	jQuery('input[xtip$="."]').blur(X.misc.inputblur)
};
window.x_init_hook_imagerotate = function () {
	var b = 0;
	var c = jQuery('#img_list a').size();
	if (c < 2) return;
	var d = function () {
			var a = b + 1;
			if (b == c - 1) a = 0;
			e(a);
			b++;
			if (b > c - 1) {
				b = 0;
				a = b + 1
			}
		};
	jQuery('#team_images').everyTime(3000, 'imagerotate', d);
	jQuery('#team_images li,#img_list a').hover(function () {
		jQuery('#team_images').stopTime('imagerotate')
	}, function () {
		jQuery('#team_images').everyTime(3000, 'imagerotate', d)
	});
	jQuery('#img_list a').click(function () {
		var a = jQuery('#img_list a').index(this);
		if (b != a) {
			e(a);
			b = a
		};
		return false
	});
	var e = function (a) {
			jQuery('#team_images li').eq(b).css({
				'opacity': '0.5'
			}).animate({
				'left': '-440px',
				'opacity': '1'
			}, 'slow', function () {
				jQuery(this).css({
					'left': '440px'
				})
			}).end().eq(a).animate({
				'left': '0px',
				'opacity': '1'
			}, 'slow', function () {
				jQuery('#img_list a').siblings('a').removeClass('active').end().eq(a).addClass('active')
			})
		}
};
window.x_init_hook_clock = function () {
	var a = parseInt(jQuery('div.deal-timeleft').attr('diff'));
	var b = (new Date()).getTime();
	var e = function () {
			var c = (new Date()).getTime();
			var d = a + b - c;
			if (d > 0) {
				var f = parseInt(d / 3600000);
				d = d % 3600000;
				var g = parseInt(d / 60000);
				var d = parseInt(Math.round(d % 60000) / 1000);
				if (e > 0) {
					var h = '<li><strong>' + e + '</strong></li><li class="hours"><strong>' + f + '</strong>часов</li><li class="minures"><strong>' + g + '</strong>минути</li><li class="seconds"><strong>'+ d + '</strong>секунди</li>'
				} else {
					var h = '<li class="hours"><strong>' + f + '</strong>часа</li><li class="minures"><strong>' + g + '</strong>минути</li><li class="seconds"><strong>'+ d + '</strong>секунди</li>'
				}
				jQuery('ul#counter').html(h)
			} else {
				jQuery("ul#counter").stopTime('counter');
				jQuery('ul#counter').html('end')
			}
		};
	jQuery("ul#counter").everyTime(996, 'counter', e)
};
window.x_init_hook_team = function () {
	jQuery('#deal-buy-quantity-input').bind("keyup", function () {
		var n = parseInt(jQuery(this).attr('value'), 10);
		var a = parseInt(jQuery('#deal-per-number').attr('value'), 10);
		if (n > a && a > 0) {
			n = a
		}
		n = isNaN(n) ? '' : n;
		jQuery(this).attr('value', n);
		var p = parseInt(jQuery('#deal-buy-price').html(), 10);
		p = isNaN(p) ? 0 : p;
		n = isNaN(n) ? 0 : n;
		var t = n * p;
		jQuery('#deal-buy-total').html(t);
		X.team.dealbuy_totalprice()
	})
};
window.x_init_hook_order = function () {
	jQuery('form[id="order-pay-form"]').bind('submit', function () {
		X.get(WEB_ROOT + '/ajax/order.php?action=dialog&id=' + jQuery(this).attr('sid'))
	})
};
X.misc = {};
X.misc.copyToCB = function (a) {
	var o = jQuery('#' + a);
	o.select();
	var b = o.val();
	if (window.clipboardData) {
		if ((window.clipboardData.setData("Text", b))) {
			var c = o.attr('tip');
			if (c) alert(c);
			return true
		}
	} else if (window.netscape) {
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
		var d = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
		if (!d) return;
		var e = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		if (!e) return;
		e.addDataFlavor('text/unicode');
		var f = new Object();
		var g = new Object();
		var f = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
		var h = b;
		f.data = h;
		e.setTransferData("text/unicode", f, h.length * 2);
		var i = Components.interfaces.nsIClipboard;
		if (!d) return false;
		d.setData(e, null, i.kGlobalClipboard);
		var c = o.attr('tip');
		if (c) alert(c);
		return true
	}
	return false
};
X.misc.scaleimage = function (o, a) {
	var w = jQuery(o).width();
	if (w > a) jQuery(o).css('width', a + 'px')
};
X.misc.inputblur = function () {
	var v = jQuery(this).attr('value');
	var t = jQuery(this).attr('xtip');
	if (v == t || !v) {
		jQuery(this).attr('value', t);
		jQuery(this).css('color', '#999')
	}
};
X.misc.inputclick = function () {
	var v = jQuery(this).attr('value');
	var t = jQuery(this).attr('xtip');
	if (v == t) {
		jQuery(this).attr('value', '')
	}
	jQuery(this).css('color', '#333')
};
X.misc.noticenext = function (a, b) {
	jQuery('#dialog_subscribe_count_id').html(b);
	return X.get(WEB_ROOT + '/ajax/manage.php?action=noticesubscribe&id=' + a + '&nid=' + b)
};
X.misc.noticesms = function (a, b) {
	jQuery('#dialog_sms_count_id').html(b);
	return X.get(WEB_ROOT + '/ajax/manage.php?action=noticesms&id=' + a + '&nid=' + b)
};
X.misc.needlogin = function () {
	return LOGINUID > 0 ? true : X.get(WEB_ROOT + '/ajax/system.php?action=needlogin')
};
X.misc.cardcode = function () {
	var a = jQuery('#cardcode-order-id').attr('value');
	var b = jQuery('#cardcode-card-id').attr('value');
	if (a && b) return !X.get(WEB_ROOT + '/ajax/order.php?action=cardcode&id=' + a + '&cid=' + b)
};
X.misc.smscount = function () {
	var l = jQuery('#sms-content-id').val().length;
	var s = Math.ceil(l / 70);
	jQuery('#span-sms-length-id').html(l);
	jQuery('#span-sms-split-id').html(s)
};
X.team = {};
X.team.consultation_again = function () {
	jQuery('#consult-content').val('');
	jQuery('#consult-add-form').toggle();
	jQuery('#consult-add-succ').toggle()
};
X.team.dealbuy_totalprice = function () {
	var n = parseFloat(jQuery('#deal-buy-total').html(), 10);
	n = isNaN(n) ? 0 : n;
	var p = parseFloat(jQuery('#deal-express-total').html(), 10);
	p = isNaN(p) ? 0 : p;
	var t = n + p;
	jQuery('#deal-buy-total-t').html(t)
};
X.coupon = {};
X.coupon.dialogquery = function () {
	var a = jQuery('#coupon-dialog-input-id').attr('value');
	if (a) return !X.get(WEB_ROOT + '/ajax/coupon.php?action=query&id=' + encodeURIComponent(a))
};
X.coupon.dialogconsume = function () {
	var a = jQuery('#coupon-dialog-input-id').attr('value');
	var b = jQuery('#coupon-dialog-input-secret').attr('value');
	if (a && b) {
		var c = jQuery('#coupon-dialog-consume').attr('ask');
		return confirm(c) && !X.get(WEB_ROOT + '/ajax/coupon.php?action=consume&id=' + encodeURIComponent(a) + '&secret=' + encodeURIComponent(b))
	}
};
X.coupon.dialoginputkeyup = function (o) {
	jQuery(o).attr('value', jQuery(o).attr('value').toUpperCase())
};
X.manage = {};
X.manage.loadcompiled = function (a) {
	window.location.href = WEB_ROOT + '/manage/system/compiled.php?id=' + a
};
X.manage.loadpage = function (a) {
	window.location.href = WEB_ROOT + '/manage/system/page.php?id=' + a
};
X.manage.usermoney = function () {
	var a = parseInt(jQuery('#user-dialog-input-id').attr('value'));
	var b = jQuery('#user-dialog-input-id').attr('uid');
	var c = jQuery('#user-dialog-input-id').attr('ask');
	if (b && a && (!c || confirm(c))) return !X.get(WEB_ROOT + '/ajax/manage.php?action=usermoney&id=' + b + '&money=' + encodeURIComponent(a))
};
X.manage.orderexpress = function () {
	var a = parseInt(jQuery('#order-dialog-select-id').val());
	var b = jQuery('#order-dialog-input-id').attr('value');
	var c = jQuery('#dialog-order-id').attr('oid');
	if (c) return !X.get(WEB_ROOT + '/ajax/manage.php?action=orderexpress&id=' + c + '&eid=' + a + '&nid=' + encodeURIComponent(b))
};
X.manage.orderrefund = function () {
	var a = jQuery('#order-dialog-refund-id').val();
	var b = jQuery('#dialog-order-id').attr('oid');
	if (b && a) return !X.get(WEB_ROOT + '/ajax/manage.php?action=orderrefund&id=' + b + '&rid=' + a)
};
X.manage.teamcoupon = function (a) {
	return !X.get(WEB_ROOT + '/ajax/manage.php?action=teamcoupon&id=' + a)
};
if (typeof deconcept == "undefined") {
	var deconcept = new Object()
}
if (typeof deconcept.util == "undefined") {
	deconcept.util = new Object()
}
if (typeof deconcept.SWFObjectUtil == "undefined") {
	deconcept.SWFObjectUtil = new Object()
}
deconcept.SWFObject = function (a, b, w, h, d, c, e, f, g, i, j) {
	if (!document.createElement || !document.getElementById) {
		return
	}
	this.DETECT_KEY = j ? j : "detectflash";
	this.skipDetect = true;
	this.params = new Object();
	this.variables = new Object();
	this.attributes = new Array();
	if (a) {
		this.setAttribute("swf", a)
	}
	if (b) {
		this.setAttribute("id", b)
	}
	if (w) {
		this.setAttribute("width", w)
	}
	if (h) {
		this.setAttribute("height", h)
	}
	if (d) {
		this.setAttribute("version", new deconcept.PlayerVersion(d.toString().split(".")))
	}
	this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(this.getAttribute("version"), e);
	if (c) {
		this.addParam("bgcolor", c)
	} else {
		this.addParam("wmode", "transparent")
	}
	var q = f ? f : "high";
	this.addParam("quality", q);
	this.setAttribute("useExpressInstall", e);
	this.setAttribute("doExpressInstall", false);
	var k = (g) ? g : window.location;
	this.setAttribute("xiRedirectUrl", k);
	this.setAttribute("redirectUrl", "");
	if (i) {
		this.setAttribute("redirectUrl", i)
	}
};
deconcept.SWFObject.prototype = {
	setAttribute: function (a, b) {
		this.attributes[a] = b
	},
	getAttribute: function (a) {
		return this.attributes[a]
	},
	addParam: function (a, b) {
		this.params[a] = b
	},
	getParams: function () {
		return this.params
	},
	addVariable: function (a, b) {
		this.variables[a] = b
	},
	getVariable: function (a) {
		return this.variables[a]
	},
	getVariables: function () {
		return this.variables
	},
	getVariablePairs: function () {
		var a = new Array();
		var b;
		var c = this.getVariables();
		for (b in c) {
			a.push(b + "=" + c[b])
		}
		return a
	},
	getSWFHTML: function () {
		var a = "";
		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
			if (this.getAttribute("doExpressInstall")) {
				this.addVariable("MMplayerType", "PlugIn")
			}
			a = "<embed type=\"application/x-shockwave-flash\" src=\"" + this.getAttribute("swf") + "\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\"";
			a += " id=\"" + this.getAttribute("id") + "\" name=\"" + this.getAttribute("id") + "\" ";
			var b = this.getParams();
			for (var c in b) {
				a += [c] + "=\"" + b[c] + "\" "
			}
			var d = this.getVariablePairs().join("&");
			if (d.length > 0) {
				a += "flashvars=\"" + d + "\""
			}
			a += " pluginspage=\"http://www.macromedia.com/go/getflashplayer\"/>"
		} else {
			if (this.getAttribute("doExpressInstall")) {
				this.addVariable("MMplayerType", "ActiveX")
			}
			a = "<object id=\"" + this.getAttribute("id") + "\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\" codebase=\"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0\">";
			a += "<param name=\"movie\" value=\"" + this.getAttribute("swf") + "\" />";
			var e = this.getParams();
			for (var c in e) {
				a += "<param name=\"" + c + "\" value=\"" + e[c] + "\" />"
			}
			var f = this.getVariablePairs().join("&");
			if (f.length > 0) {
				a += "<param name=\"flashvars\" value=\"" + f + "\" />"
			}
			a += "</object>"
		}
		return a
	},
	write: function (a) {
		if (this.getAttribute("useExpressInstall")) {
			var b = new deconcept.PlayerVersion([6, 0, 65]);
			if (this.installedVer.versionIsValid(b) && !this.installedVer.versionIsValid(this.getAttribute("version"))) {
				this.setAttribute("doExpressInstall", true);
				this.addVariable("MMredirectURL", escape(this.getAttribute("xiRedirectUrl")));
				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
				this.addVariable("MMdoctitle", document.title)
			}
		}
		if (this.skipDetect || this.getAttribute("doExpressInstall") || this.installedVer.versionIsValid(this.getAttribute("version"))) {
			var n = (typeof a == "string") ? document.getElementById(a) : a;
			n.innerHTML = this.getSWFHTML();
			return true
		} else {
			if (this.getAttribute("redirectUrl") != "") {
				document.location.replace(this.getAttribute("redirectUrl"))
			}
		}
		return false
	}
};
deconcept.SWFObjectUtil.getPlayerVersion = function (a, b) {
	var c = new deconcept.PlayerVersion([0, 0, 0]);
	if (navigator.plugins && navigator.mimeTypes.length) {
		var x = navigator.plugins["Shockwave Flash"];
		if (x && x.description) {
			c = new deconcept.PlayerVersion(x.description.replace(/([a-z]|[A-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."))
		}
	} else {
		try {
			var d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			for (var i = 15; i > 6; i--) {
				try {
					d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
					c = new deconcept.PlayerVersion([i, 0, 0]);
					break
				} catch (e) {}
			}
		} catch (e) {}
		if (a && c.major > a.major) {
			return c
		}
		if (!a || ((a.minor != 0 || a.rev != 0) && c.major == a.major) || c.major != 6 || b) {
			try {
				c = new deconcept.PlayerVersion(d.GetVariable("$version").split(" ")[1].split(","))
			} catch (e) {}
		}
	}
	return c
};
deconcept.PlayerVersion = function (a) {
	this.major = parseInt(a[0]) != null ? parseInt(a[0]) : 0;
	this.minor = parseInt(a[1]) || 0;
	this.rev = parseInt(a[2]) || 0
};
deconcept.PlayerVersion.prototype.versionIsValid = function (a) {
	if (this.major < a.major) {
		return false
	}
	if (this.major > a.major) {
		return true
	}
	if (this.minor < a.minor) {
		return false
	}
	if (this.minor > a.minor) {
		return true
	}
	if (this.rev < a.rev) {
		return false
	}
	return true
};
deconcept.util = {
	getRequestParameter: function (a) {
		var q = document.location.search || document.location.hash;
		if (q) {
			var b = q.indexOf(a + "=");
			var c = (q.indexOf("&", b) > -1) ? q.indexOf("&", b) : q.length;
			if (q.length > 1 && b > -1) {
				return q.substring(q.indexOf("=", b) + 1, c)
			}
		}
		return ""
	}
};
if (Array.prototype.push == null) {
	Array.prototype.push = function (a) {
		this[this.length] = a;
		return this.length
	}
}
var getQueryParamValue = deconcept.util.getRequestParameter;
var FlashObject = deconcept.SWFObject;
var SWFObject = deconcept.SWFObject;
var hexcase = 0;
var b64pad = "";

function hex_md5(s) {
	return rstr2hex(rstr_md5(str2rstr_utf8(s)))
}

function b64_md5(s) {
	return rstr2b64(rstr_md5(str2rstr_utf8(s)))
}

function any_md5(s, e) {
	return rstr2any(rstr_md5(str2rstr_utf8(s)), e)
}

function hex_hmac_md5(k, d) {
	return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)))
}

function b64_hmac_md5(k, d) {
	return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)))
}

function any_hmac_md5(k, d, e) {
	return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e)
}

function md5_vm_test() {
	return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72"
}

function rstr_md5(s) {
	return binl2rstr(binl_md5(rstr2binl(s), s.length * 8))
}

function rstr_hmac_md5(a, b) {
	var c = rstr2binl(a);
	if (c.length > 16) c = binl_md5(c, a.length * 8);
	var d = Array(16),
		opad = Array(16);
	for (var i = 0; i < 16; i++) {
		d[i] = c[i] ^ 0x36363636;
		opad[i] = c[i] ^ 0x5C5C5C5C
	}
	var e = binl_md5(d.concat(rstr2binl(b)), 512 + b.length * 8);
	return binl2rstr(binl_md5(opad.concat(e), 512 + 128))
}

function rstr2hex(a) {
	try {
		hexcase
	} catch (e) {
		hexcase = 0
	}
	var b = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
	var c = "";
	var x;
	for (var i = 0; i < a.length; i++) {
		x = a.charCodeAt(i);
		c += b.charAt((x >>> 4) & 0x0F) + b.charAt(x & 0x0F)
	}
	return c
}

function rstr2b64(a) {
	try {
		b64pad
	} catch (e) {
		b64pad = ''
	}
	var b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	var c = "";
	var d = a.length;
	for (var i = 0; i < d; i += 3) {
		var f = (a.charCodeAt(i) << 16) | (i + 1 < d ? a.charCodeAt(i + 1) << 8 : 0) | (i + 2 < d ? a.charCodeAt(i + 2) : 0);
		for (var j = 0; j < 4; j++) {
			if (i * 8 + j * 6 > a.length * 8) c += b64pad;
			else c += b.charAt((f >>> 6 * (3 - j)) & 0x3F)
		}
	}
	return c
}

function rstr2any(a, b) {
	var c = b.length;
	var i, j, q, x, quotient;
	var d = Array(Math.ceil(a.length / 2));
	for (i = 0; i < d.length; i++) {
		d[i] = (a.charCodeAt(i * 2) << 8) | a.charCodeAt(i * 2 + 1)
	}
	var e = Math.ceil(a.length * 8 / (Math.log(b.length) / Math.log(2)));
	var f = Array(e);
	for (j = 0; j < e; j++) {
		quotient = Array();
		x = 0;
		for (i = 0; i < d.length; i++) {
			x = (x << 16) + d[i];
			q = Math.floor(x / c);
			x -= q * c;
			if (quotient.length > 0 || q > 0) quotient[quotient.length] = q
		}
		f[j] = x;
		d = quotient
	}
	var g = "";
	for (i = f.length - 1; i >= 0; i--) g += b.charAt(f[i]);
	return g
}

function str2rstr_utf8(a) {
	var b = "";
	var i = -1;
	var x, y;
	while (++i < a.length) {
		x = a.charCodeAt(i);
		y = i + 1 < a.length ? a.charCodeAt(i + 1) : 0;
		if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
			x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
			i++
		}
		if (x <= 0x7F) b += String.fromCharCode(x);
		else if (x <= 0x7FF) b += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F), 0x80 | (x & 0x3F));
		else if (x <= 0xFFFF) b += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), 0x80 | ((x >>> 6) & 0x3F), 0x80 | (x & 0x3F));
		else if (x <= 0x1FFFFF) b += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), 0x80 | ((x >>> 12) & 0x3F), 0x80 | ((x >>> 6) & 0x3F), 0x80 | (x & 0x3F))
	}
	return b
}

function str2rstr_utf16le(a) {
	var b = "";
	for (var i = 0; i < a.length; i++) b += String.fromCharCode(a.charCodeAt(i) & 0xFF, (a.charCodeAt(i) >>> 8) & 0xFF);
	return b
}

function str2rstr_utf16be(a) {
	var b = "";
	for (var i = 0; i < a.length; i++) b += String.fromCharCode((a.charCodeAt(i) >>> 8) & 0xFF, a.charCodeAt(i) & 0xFF);
	return b
}

function rstr2binl(a) {
	var b = Array(a.length >> 2);
	for (var i = 0; i < b.length; i++) b[i] = 0;
	for (var i = 0; i < a.length * 8; i += 8) b[i >> 5] |= (a.charCodeAt(i / 8) & 0xFF) << (i % 32);
	return b
}

function binl2rstr(a) {
	var b = "";
	for (var i = 0; i < a.length * 32; i += 8) b += String.fromCharCode((a[i >> 5] >>> (i % 32)) & 0xFF);
	return b
}

function binl_md5(x, e) {
	x[e >> 5] |= 0x80 << ((e) % 32);
	x[(((e + 64) >>> 9) << 4) + 14] = e;
	var a = 1732584193;
	var b = -271733879;
	var c = -1732584194;
	var d = 271733878;
	for (var i = 0; i < x.length; i += 16) {
		var f = a;
		var g = b;
		var h = c;
		var j = d;
		a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
		d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
		c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
		b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
		a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
		d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
		c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
		b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
		a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
		d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
		c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
		b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
		a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
		d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
		c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
		b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
		a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
		d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
		c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
		b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
		a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
		d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
		c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
		b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
		a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
		d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
		c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
		b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
		a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
		d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
		c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
		b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
		a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
		d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
		c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
		b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
		a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
		d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
		c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
		b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
		a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
		d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
		c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
		b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
		a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
		d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
		c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
		b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
		a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
		d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
		c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
		b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
		a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
		d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
		c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
		b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
		a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
		d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
		c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
		b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
		a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
		d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
		c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
		b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
		a = safe_add(a, f);
		b = safe_add(b, g);
		c = safe_add(c, h);
		d = safe_add(d, j)
	}
	return Array(a, b, c, d)
}

function md5_cmn(q, a, b, x, s, t) {
	return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}

function md5_ff(a, b, c, d, x, s, t) {
	return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
}

function md5_gg(a, b, c, d, x, s, t) {
	return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
}

function md5_hh(a, b, c, d, x, s, t) {
	return md5_cmn(b ^ c ^ d, a, b, x, s, t)
}

function md5_ii(a, b, c, d, x, s, t) {
	return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
}

function safe_add(x, y) {
	var a = (x & 0xFFFF) + (y & 0xFFFF);
	var b = (x >> 16) + (y >> 16) + (a >> 16);
	return (b << 16) | (a & 0xFFFF)
}

function bit_rol(a, b) {
	return (a << b) | (a >>> (32 - b))
}
