
if (!Array.prototype.indexOf) {
	Array.prototype.indexOf = function (C, B) {
		if (B == null) {
			B = 0;
		} else {
			if (B < 0) {
				B = Math.max(0, this.length + B);
			}
		}
		for (var A = B; A < this.length; A++) {
			if (this[A] === C) {
				return A;
			}
		}
		return -1;
	};
}
if (!Array.prototype.lastIndexOf) {
	Array.prototype.lastIndexOf = function (C, B) {
		if (B == null) {
			B = this.length - 1;
		} else {
			if (B < 0) {
				B = Math.max(0, this.length + B);
			}
		}
		for (var A = B; A >= 0; A--) {
			if (this[A] === C) {
				return A;
			}
		}
		return -1;
	};
}
if (!Array.prototype.forEach) {
	Array.prototype.forEach = function (C, D) {
		var A = this.length;
		for (var B = 0; B < A; B++) {
			C.call(D, this[B], B, this);
		}
	};
}
if (!Array.prototype.filter) {
	Array.prototype.filter = function (D, E) {
		var A = this.length;
		var C = [];
		for (var B = 0; B < A; B++) {
			if (D.call(E, this[B], B, this)) {
				C.push(this[B]);
			}
		}
		return C;
	};
}
if (!Array.prototype.map) {
	Array.prototype.map = function (D, E) {
		var A = this.length;
		var C = [];
		for (var B = 0; B < A; B++) {
			C.push(D.call(E, this[B], B, this));
		}
		return C;
	};
}
if (!Array.prototype.some) {
	Array.prototype.some = function (C, D) {
		var A = this.length;
		for (var B = 0; B < A; B++) {
			if (C.call(D, this[B], B, this)) {
				return true;
			}
		}
		return false;
	};
}
if (!Array.prototype.every) {
	Array.prototype.every = function (C, D) {
		var A = this.length;
		for (var B = 0; B < A; B++) {
			if (!C.call(D, this[B], B, this)) {
				return false;
			}
		}
		return true;
	};
}
Array.prototype.contains = function (A) {
	return this.indexOf(A) != -1;
};
Array.prototype.copy = function (A) {
	return this.concat();
};
Array.prototype.insertAt = function (B, A) {
	this.splice(A, 0, B);
};
Array.prototype.insertBefore = function (C, B) {
	var A = this.indexOf(B);
	if (A == -1) {
		this.push(C);
	} else {
		this.splice(A, 0, C);
	}
};
Array.prototype.removeAt = function (A) {
	this.splice(A, 1);
};
Array.prototype.remove = function (B) {
	var A = this.indexOf(B);
	if (A != -1) {
		this.splice(A, 1);
	}
};
if (!String.prototype.toQueryParams) {
	String.prototype.toQueryParams = function () {
		var F = {};
		var G = this.split("&");
		var D = /([^=]*)=(.*)/;
		for (var B = 0; B < G.length; B++) {
			var A = D.exec(G[B]);
			if (!A) {
				continue;
			}
			var C = decodeURIComponent(A[1]);
			var E = A[2] ? decodeURIComponent(A[2]) : undefined;
			if (F[C] !== undefined) {
				if (F[C].constructor != Array) {
					F[C] = [F[C]];
				}
				if (E) {
					F[C].push(E);
				}
			} else {
				F[C] = E;
			}
		}
		return F;
	};
}
if (!String.prototype.trim) {
	String.prototype.trim = function () {
		var A = /^\s+|\s+$/g;
		return function () {
			return this.replace(A, "");
		};
	}();
}
if (!String.prototype.replaceAll) {
	String.prototype.replaceAll = function (B, A) {
		return this.replace(new RegExp(B, "gm"), A);
	};
}
Math.randomInt = function (A) {
	return Math.floor(Math.random() * (A + 1));
};
$D = YAHOO.util.Dom;
$E = YAHOO.util.Event;
$ = $D.get;
TB = {};
TB.namespace = function () {
	var A = arguments, E = null, C, B, D;
	for (C = 0; C < A.length; C = C + 1) {
		D = A[C].split(".");
		E = TB;
		for (B = (D[0] == "TB") ? 1 : 0; B < D.length; B = B + 1) {
			E[D[B]] = E[D[B]] || {};
			E = E[D[B]];
		}
	}
	return E;
};
TB.namespace("env");
TB.env = {hostname:"taobao.com", debug:false, lang:"zh-cn"};
TB.namespace("locale");
TB.locale = {Messages:{}, getMessage:function (A) {
	return TB.locale.Messages[A] || A;
}, setMessage:function (A, B) {
	TB.locale.Messages[A] = B;
}};
$M = TB.locale.getMessage;
TB.trace = function (A) {
	if (!TB.env.debug) {
		return;
	}
	if (window.console) {
		window.console.debug(A);
	} else {
		alert(A);
	}
};
TB.init = function () {
	this.namespace("widget", "dom", "bom", "util", "form", "anim");
	if (location.hostname.indexOf("taobao.com") == -1) {
		TB.env.hostname = location.hostname;
		TB.env.debug = true;
	}
	var A = document.getElementsByTagName("script");
	var C = /tbra(?:[\w\.\-]*?)\.js(?:$|\?(.*))/;
	var E;
	for (var B = 0; B < A.length; ++B) {
		if (E = C.exec(A[B].src)) {
			TB.env.path = A[B].src.substring(0, E.index);
			if (E[1]) {
				var D = E[1].toQueryParams();
				for (n in D) {
					if (n == "t" || n == "timestamp") {
						TB.env.timestamp = parseInt(D[n]);
						continue;
					}
					TB.env[n] = D[n];
				}
			}
		}
	}
	document.write("<script type=\"text/javascript\" src=\"" + TB.env.path + "locale/" + TB.env.lang.toLowerCase() + ".js" + (TB.env.timestamp ? "?t=" + TB.env.timestamp + ".js" : "") + "\"></script>");
	document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"" + TB.env.path + "assets/tbra.css" + (TB.env.timestamp ? "?t=" + TB.env.timestamp + ".css" : "") + "\" />");
};
TB.init();
TB.common = {trim:function (A) {
	return A.replace(/(^\s*)|(\s*$)/g, "");
}, escapeHTML:function (B) {
	var C = document.createElement("div");
	var A = document.createTextNode(B);
	C.appendChild(A);
	return C.innerHTML;
}, unescapeHTML:function (A) {
	var B = document.createElement("div");
	B.innerHTML = A.replace(/<\/?[^>]+>/gi, "");
	return B.childNodes[0] ? B.childNodes[0].nodeValue : "";
}, stripTags:function (A) {
	return A.replace(/<\/?[^>]+>/gi, "");
}, toArray:function (B, D) {
	var C = [];
	for (var A = D || 0; A < B.length; A++) {
		C[C.length] = B[A];
	}
	return C;
}, applyIf:function (C, A) {
	if (C && A && typeof A == "object") {
		for (var B in A) {
			if (!YAHOO.lang.hasOwnProperty(C, B)) {
				C[B] = A[B];
			}
		}
	}
	return C;
}, apply:function (C, A) {
	if (C && A && typeof A == "object") {
		for (var B in A) {
			C[B] = A[B];
		}
	}
	return C;
}, formatMessage:function (D, A, B) {
	var C = /\{([\w-]+)?\}/g;
	return function (G, E, F) {
		return G.replace(C, function (H, I) {
			return F ? F(E[I], I) : E[I];
		});
	};
}(), parseUri:(function () {
	var B = ["source", "prePath", "scheme", "username", "password", "host", "port", "path", "dir", "file", "query", "fragment"];
	var A = /^((?:([^:\/?#.]+):)?(?:\/\/)?(?:([^:@]*):?([^:@]*)?@)?([^:\/?#]*)(?::(\d*))?)((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?/;
	return function (F) {
		var E = {};
		var C = A.exec(F);
		for (var D = 0; D < C.length; ++D) {
			E[B[D]] = (C[D] ? C[D] : "");
		}
		return E;
	};
})()};
TB.applyIf = TB.common.applyIf;
TB.apply = TB.common.apply;
(function () {
	var E = navigator.userAgent.toLowerCase();
	var B = E.indexOf("opera") != -1, G = E.indexOf("safari") != -1, A = !B && !G && E.indexOf("gecko") > -1, C = !B && E.indexOf("msie") != -1, F = !B && E.indexOf("msie 6") != -1, D = !B && E.indexOf("msie 7") != -1;
	TB.bom = {isOpera:B, isSafari:G, isGecko:A, isIE:C, isIE6:F, isIE7:D, getCookie:function (H) {
		var I = document.cookie.match("(?:^|;)\\s*" + H + "=([^;]*)");
		return I ? unescape(I[1]) : "";
	}, setCookie:function (J, L, H, K, M) {
		L = escape(L);
		L += (K) ? "; domain=" + K : "";
		L += (M) ? "; path=" + M : "";
		if (H) {
			var I = new Date();
			I.setTime(I.getTime() + (H * 86400000));
			L += "; expires=" + I.toGMTString();
		}
		document.cookie = J + "=" + L;
	}, removeCookie:function (H) {
		this.setCookie(H, "", -1);
	}, pickDocumentDomain:function () {
		var K = arguments[1] || location.hostname;
		var J = K.split("."), H = J.length;
		var I = arguments[0] || (H < 3 ? 0 : 1);
		if (I >= H || H - I < 2) {
			I = H - 2;
		}
		return J.slice(I).join(".");
	}, addBookmark:function (I, H) {
		if (window.sidebar) {
			window.sidebar.addPanel(I, H, "");
		} else {
			if (document.external) {
				window.external.AddFavorite(H, I);
			} else {
			}
		}
	}};
})();
TB.dom = {insertAfter:function (B, A) {
	return $D.insertAfter(B, A);
}, getAncestorByTagName:function (B, A) {
	return $D.getAncestorByTagName(B, A);
}, getAncestorByClassName:function (B, A) {
	return $D.getAncestorByClassName(B, A);
}, getNextSibling:function (A) {
	return $D.getNextSibling(A);
}, getPreviousSibling:function (A) {
	return $D.getPreviousSibling(A);
}, getFieldLabelHtml:function (E, D) {
	var B = $(E), F = (D || B.parentNode).getElementsByTagName("label");
	for (var C = 0; C < F.length; C++) {
		var A = F[C].htmlFor || F[C].getAttribute("for");
		if (A == B.id) {
			return F[C].innerHTML;
		}
	}
	return null;
}, getIframeDocument:function (B) {
	var A = $(B);
	return A.contentWindow ? A.contentWindow.document : A.contentDocument;
}, setFormAction:function (E, C) {
	E = $(E);
	var B = E.elements.action;
	var D;
	if (B) {
		var A = E.removeChild(B);
		D = function () {
			E.appendChild(A);
		};
	}
	E.action = C;
	if (D) {
		D();
	}
	return true;
}, addCSS:function (A, C) {
	C = C || document;
	var B = C.createElement("style");
	B.type = "text/css";
	if (B.styleSheet) {
		B.styleSheet.cssText = A;
	} else {
		B.appendChild(C.createTextNode(A));
	}
	C.getElementsByTagName("head")[0].appendChild(B);
}, getScriptParams:function (C) {
	var F = /\?(.*?)($|\.js)/;
	var B;
	if (YAHOO.lang.isObject(C) && C.tagName && C.tagName.toLowerCase() == "script") {
		if (C.src && (B = C.src.match(F))) {
			console.debug(B);
			return B[1].toQueryParams();
		}
	} else {
		if (YAHOO.lang.isString(C)) {
			C = new RegExp(C, "i");
		}
		var A = document.getElementsByTagName("script");
		var G, E;
		for (var D = 0; D < A.length; ++D) {
			E = A[D].src;
			if (E && C.test(E) && (B = E.match(F))) {
				return B[1].toQueryParams();
			}
		}
	}
}};
TB.anim.Highlight = function (B, A) {
	if (!B) {
		return;
	}
	this.init(B, A);
};
TB.anim.Highlight.defConfig = {startColor:"#ffff99", duration:0.5, keepBackgroundImage:true};
TB.anim.Highlight.prototype.init = function (E, D) {
	var G = YAHOO.util;
	D = TB.applyIf(D || {}, TB.anim.Highlight.defConfig);
	var A = {backgroundColor:{from:D.startColor}};
	var F = new G.ColorAnim(E, A, D.duration);
	var B = F.getAttribute("backgroundColor");
	F.attributes.backgroundColor["to"] = B;
	if (D.keepBackgroundImage) {
		var C = $D.getStyle(E, "background-image");
		F.onComplete.subscribe(function () {
			$D.setStyle(E, "background-image", C);
		});
	}
	this.onComplete = F.onComplete;
	this.animate = function () {
		$D.setStyle(E, "background-image", "none");
		F.animate();
	};
};
TB.widget.InputHint = new function () {
	var B = {hintMessage:"", hintClass:"tb-input-hint", appearOnce:false};
	var D = /^\s*$/;
	var A = function (E, F) {
		if (!F.disabled) {
			F.disappear();
		}
	};
	var C = function (E, F) {
		if (!F.disabled) {
			F.appear();
		}
	};
	this.decorate = function (E, F) {
		E = $(E);
		F = TB.applyIf(F || {}, B);
		var H = F.hintMessage || E.title;
		var G = {};
		G.disabled = false;
		G.disappear = function () {
			if (H == E.value) {
				E.value = "";
				$D.removeClass(E, F.hintClass);
			}
		};
		G.appear = function () {
			if (D.test(E.value) || H == E.value) {
				$D.addClass(E, F.hintClass);
				E.value = H;
			}
		};
		G.purge = function () {
			this.disappear();
			$E.removeListener(E, "focus", A);
			$E.removeListener(E, "drop", A);
			$E.removeListener(E, "blur", C);
		};
		if (!E.title) {
			E.setAttribute("title", H);
		}
		$E.on(E, "focus", A, G);
		$E.on(E, "drop", A, G);
		if (!F.appearOnce) {
			$E.on(E, "blur", C, G);
		}
		G.appear();
		return G;
	};
};
TB.widget.SimplePopup = new function () {
	var F = YAHOO.util;
	var E = {position:"right", autoFit:true, eventType:"mouse", delay:0.1, disableClick:true, width:200, height:200};
	var D = function (H) {
		var I = $E.getTarget(H);
		if (D._target == I) {
			this.popup.style.display == "block" ? this.hide() : this.show();
		} else {
			this.show();
		}
		$E.preventDefault(H);
		D._target = I;
	};
	var G = function (I) {
		clearTimeout(this._popupHideTimeId);
		var H = this;
		this._popupShowTimeId = setTimeout(function () {
			H.show();
		}, this.config.delay * 1000);
		if (this.config.disableClick && !this.trigger.onclick) {
			this.trigger.onclick = function (J) {
				$E.preventDefault($E.getEvent(J));
			};
		}
	};
	var C = function (H) {
		clearTimeout(this._popupShowTimeId);
		if (!$D.isAncestor(this.popup, $E.getRelatedTarget(H))) {
			this.delayHide();
		}
		$E.preventDefault(H);
	};
	var B = function (H) {
		var I = this.currentHandle ? this.currentHandle : this;
		clearTimeout(I._popupHideTimeId);
	};
	var A = function (H) {
		var I = this.currentHandle ? this.currentHandle : this;
		if (!$D.isAncestor(I.popup, $E.getRelatedTarget(H))) {
			I.delayHide();
		}
	};
	this.decorate = function (J, H, K) {
		if (YAHOO.lang.isArray(J) || (YAHOO.lang.isObject(J) && J.length)) {
			K.shareSinglePopup = true;
			var M = {};
			M._handles = [];
			for (var L = 0; L < J.length; L++) {
				var N = this.decorate(J[L], H, K);
				N._beforeShow = function () {
					M.currentHandle = this;
					return true;
				};
				M._handles[L] = N;
			}
			if (K.eventType == "mouse") {
				$E.on(H, "mouseover", B, M, true);
				$E.on(H, "mouseout", A, M, true);
			}
			return M;
		}
		J = $(J);
		H = $(H);
		if (!J || !H) {
			return;
		}
		K = TB.applyIf(K || {}, E);
		var P = {};
		P._popupShowTimeId = null;
		P._popupHideTimeId = null;
		P._beforeShow = function () {
			return true;
		};
		var I = new F.CustomEvent("onShow", P, false, F.CustomEvent.FLAT);
		if (K.onShow) {
			I.subscribe(K.onShow);
		}
		var O = new F.CustomEvent("onHide", P, false, F.CustomEvent.FLAT);
		if (K.onHide) {
			O.subscribe(K.onHide);
		}
		if (K.eventType == "mouse") {
			$E.on(J, "mouseover", G, P, true);
			$E.on(J, "mouseout", C, P, true);
			if (!K.shareSinglePopup) {
				$E.on(H, "mouseover", B, P, true);
				$E.on(H, "mouseout", A, P, true);
			}
		} else {
			if (K.eventType == "click") {
				$E.on(J, "click", D, P, true);
			}
		}
		TB.apply(P, {popup:H, trigger:J, config:K, show:function () {
			if (!this._beforeShow()) {
				return;
			}
			var Y = $D.getXY(this.trigger);
			if (YAHOO.lang.isArray(this.config.offset)) {
				Y[0] += parseInt(this.config.offset[0]);
				Y[1] += parseInt(this.config.offset[1]);
			}
			var V = this.trigger.offsetWidth, R = this.trigger.offsetHeight;
			var Z = K.width, W = K.height;
			var Q = $D.getViewportWidth(), X = $D.getViewportHeight();
			var T = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
			var b = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
			var S = Y[0], a = Y[1];
			if (K.position == "left") {
				S = Y[0] - Z;
			} else {
				if (K.position == "right") {
					S = Y[0] + V;
				} else {
					if (K.position == "bottom") {
						a = a + R;
					} else {
						if (K.position == "top") {
							a = a - W;
							if (a < 0) {
								a = 0;
							}
						}
					}
				}
			}
			if (this.config.autoFit) {
				if (a - b + W > X) {
					a = X - W + b - 2;
					if (a < 0) {
						a = 0;
					}
				}
			}
			this.popup.style.position = "absolute";
			this.popup.style.top = a + "px";
			this.popup.style.left = S + "px";
			if (this.config.effect) {
				if (this.config.effect == "fade") {
					$D.setStyle(this.popup, "opacity", 0);
					this.popup.style.display = "block";
					var U = new F.Anim(this.popup, {opacity:{to:1}}, 0.4);
					U.animate();
				}
			} else {
				this.popup.style.display = "block";
			}
			I.fire();
		}, hide:function () {
			$D.setStyle(this.popup, "display", "none");
			O.fire();
		}, delayHide:function () {
			var Q = this;
			this._popupHideTimeId = setTimeout(function () {
				Q.hide();
			}, this.config.delay * 1000);
		}});
		$D.setStyle(H, "display", "none");
		return P;
	};
};
TB.widget.SimpleRating = new function () {
	var defConfig = {rateUrl:"", rateParams:"", scoreParamName:"score", topScore:5, currentRatingClass:"current-rating"};
	var rateHandler = function (ev, handle) {
		$E.stopEvent(ev);
		var aEl = $E.getTarget(ev);
		var score = parseInt(aEl.innerHTML);
		try {
			aEl.blur();
		}
		catch (e) {
		}
		handle.rate(score);
	};
	var updateCurrentRating = function (currentRatingLi, avg, config) {
		if (currentRatingLi) {
			currentRatingLi.innerHTML = avg;
		}
		$D.setStyle(currentRatingLi, "width", avg * 100 / config.topScore + "%");
	};
	this.decorate = function (ratingContainer, config) {
		ratingContainer = $(ratingContainer);
		config = TB.applyIf(config || {}, defConfig);
		var currentRatingLi = $D.getElementsByClassName(config.currentRatingClass, "li", ratingContainer)[0];
		var onRateEvent = new YAHOO.util.CustomEvent("onRate", null, false, YAHOO.util.CustomEvent.FLAT);
		if (config.onRate) {
			onRateEvent.subscribe(config.onRate);
		}
		var handle = {};
		handle.init = function (avg) {
			updateCurrentRating(currentRatingLi, avg, config);
		};
		handle.update = function (ret) {
			if (ret && ret.Average && currentRatingLi) {
				updateCurrentRating(currentRatingLi, ret.Average, config);
			}
			$E.purgeElement(ratingContainer, true, "click");
			for (var lis = ratingContainer.getElementsByTagName("li"), i = lis.length - 1; i > 0; i--) {
				ratingContainer.removeChild(lis[i]);
			}
			onRateEvent.fire(ret);
		};
		handle.rate = function (score) {
			var indicator = TB.util.Indicator.attach(ratingContainer, {message:$M("pleaseWait")});
			indicator.show();
			ratingContainer.style.display = "none";
			var postData = config.scoreParamName + "=" + score;
			if (config.rateParams) {
				postData += "&" + config.rateParams;
			}
			YAHOO.util.Connect.asyncRequest("POST", config.rateUrl, {success:function (req) {
				indicator.hide();
				ratingContainer.style.display = "";
				var ret = eval("(" + req.responseText + ")");
				if (ret.Error) {
					alert(ret.Error.Message);
					return;
				} else {
					handle.update(ret);
				}
			}, failure:function (req) {
				indicator.hide();
				ratingContainer.style.display = "";
				TB.trace($M("ajaxError"));
			}}, postData);
		};
		handle.onRate = function (callback) {
			if (YAHOO.lang.isFunction(callback)) {
				onRateEvent.subscribe(callback);
			}
		};
		var triggers = ratingContainer.getElementsByTagName("a");
		for (var i = 0; i < triggers.length; i++) {
			$E.on(triggers[i], "click", rateHandler, handle);
		}
		return handle;
	};
};
TB.widget.SimpleScroll = new function () {
	var Y = YAHOO.util;
	var defConfig = {delay:2, speed:20, startDelay:2, direction:"vertical", disableAutoPlay:false, distance:"auto", scrollItemCount:1};
	this.decorate = function (container, config) {
		container = $(container);
		config = TB.applyIf(config || {}, defConfig);
		var step = 2;
		if (config.speed < 20) {
			step = 5;
		}
		if (config.lineHeight) {
			config.distance = config.lineHeight;
		}
		var scrollTimeId = null, startTimeId = null, startDelayTimeId = null;
		var isHorizontal = (config.direction.toLowerCase() == "horizontal") || (config.direction.toLowerCase() == "h");
		var handle = {};
		handle._distance = 0;
		handle.scrollable = true;
		handle.distance = config.distance;
		handle._distance = 0;
		handle.suspend = false;
		handle.paused = false;
		var _onScrollEvent = new Y.CustomEvent("_onScroll", handle, false, Y.CustomEvent.FLAT);
		_onScrollEvent.subscribe(function () {
			var curLi = container.getElementsByTagName("li")[0];
			if (!curLi) {
				this.scrollable = false;
				return;
			}
			this.distance = (config.distance == "auto") ? curLi[isHorizontal ? "offsetWidth" : "offsetHeight"] : config.distance;
			with (container) {
				if (isHorizontal) {
					this.scrollable = (scrollWidth - scrollLeft - offsetWidth) >= this.distance;
				} else {
					this.scrollable = (scrollHeight - scrollTop - offsetHeight) >= this.distance;
				}
			}
		});
		var onScrollEvent = new Y.CustomEvent("onScroll", handle, false, Y.CustomEvent.FLAT);
		if (config.onScroll) {
			onScrollEvent.subscribe(config.onScroll);
		} else {
			onScrollEvent.subscribe(function () {
				for (var i = 0; i < config.scrollItemCount; i++) {
					container.appendChild(container.getElementsByTagName("li")[0]);
				}
				container[isHorizontal ? "scrollLeft" : "scrollTop"] = 0;
			});
		}
		var scroll = function () {
			if (handle.suspend) {
				return;
			}
			handle._distance += step;
			var _d;
			if ((_d = handle._distance % handle.distance) < step) {
				container[isHorizontal ? "scrollLeft" : "scrollTop"] += (step - _d);
				clearInterval(scrollTimeId);
				onScrollEvent.fire();
				_onScrollEvent.fire();
				startTimeId = null;
				if (handle.scrollable && !handle.paused) {
					handle.play();
				}
			} else {
				container[isHorizontal ? "scrollLeft" : "scrollTop"] += step;
			}
		};
		var start = function () {
			if (handle.paused) {
				return;
			}
			handle._distance = 0;
			scrollTimeId = setInterval(scroll, config.speed);
		};
		$E.on(container, "mouseover", function () {
			handle.suspend = true;
		});
		$E.on(container, "mouseout", function () {
			handle.suspend = false;
		});
		TB.apply(handle, {subscribeOnScroll:function (func, override) {
			if (override === true && onScrollEvent.subscribers.length > 0) {
				onScrollEvent.unsubscribeAll();
			}
			onScrollEvent.subscribe(func);
		}, pause:function () {
			this.paused = true;
			clearTimeout(startTimeId);
			startTimeId = null;
		}, play:function () {
			this.paused = false;
			if (startDelayTimeId) {
				clearTimeout(startDelayTimeId);
			}
			if (!startTimeId) {
				startTimeId = setTimeout(start, config.delay * 1000);
			}
		}});
		handle.onScroll = handle.subscribeOnScroll;
		_onScrollEvent.fire();
		if (!config.disableAutoPlay) {
			startDelayTimeId = setTimeout(function () {
				handle.play();
			}, config.startDelay * 1000);
		}
		return handle;
	};
};
(function () {
	var A = YAHOO.util;
	TB.widget.Slide = function (B, C) {
		this.init(B, C);
	};
	TB.widget.Slide.defConfig = {slidesClass:"Slides", triggersClass:"SlideTriggers", currentClass:"Current", eventType:"click", autoPlayTimeout:5, disableAutoPlay:false};
	TB.widget.Slide.prototype = {init:function (B, C) {
		this.container = $(B);
		this.config = TB.applyIf(C || {}, TB.widget.Slide.defConfig);
		try {
			this.slidesUL = $D.getElementsByClassName(this.config.slidesClass, "ul", this.container)[0];
			this.slides = $D.getChildren(this.slidesUL);
			if (this.slides.length == 0) {
				throw new Error();
			}
		}
		catch (D) {
			throw new Error("can't find slides!");
		}
		this.delayTimeId = null;
		this.autoPlayTimeId = null;
		this.curSlide = -1;
		this.sliding = false;
		this.pause = false;
		this.onSlide = new A.CustomEvent("onSlide", this, false, A.CustomEvent.FLAT);
		if (YAHOO.lang.isFunction(this.config.onSlide)) {
			this.onSlide.subscribe(this.config.onSlide, this, true);
		}
		this.initSlides();
		this.initTriggers();
		if (this.slides.length > 0) {
			this.play(1);
		}
		if (!this.config.disableAutoPlay) {
			this.autoPlay();
		}
		if (YAHOO.lang.isFunction(this.config.onInit)) {
			this.config.onInit.call(this);
		}
	}, initTriggers:function () {
		var D = document.createElement("ul");
		this.container.appendChild(D);
		for (var C = 0; C < this.slides.length; C++) {
			var B = document.createElement("li");
			B.innerHTML = C + 1;
			D.appendChild(B);
		}
		D.className = this.config.triggersClass;
		this.triggersUL = D;
		if (this.config.eventType == "mouse") {
			$E.on(this.triggersUL, "mouseover", this.mouseHandler, this, true);
			$E.on(this.triggersUL, "mouseout", function (E) {
				clearTimeout(this.delayTimeId);
				this.pause = false;
			}, this, true);
		} else {
			$E.on(this.triggersUL, "click", this.clickHandler, this, true);
		}
	}, initSlides:function () {
		$E.on(this.slides, "mouseover", function () {
			this.pause = true;
		}, this, true);
		$E.on(this.slides, "mouseout", function () {
			this.pause = false;
		}, this, true);
		$D.setStyle(this.slides, "display", "none");
	}, clickHandler:function (D) {
		var C = $E.getTarget(D);
		var B = parseInt(TB.common.stripTags(C.innerHTML));
		while (C != this.container) {
			if (C.nodeName.toUpperCase() == "LI") {
				if (!this.sliding) {
					this.play(B, true);
				}
				break;
			} else {
				C = C.parentNode;
			}
		}
	}, mouseHandler:function (E) {
		var D = $E.getTarget(E);
		var B = parseInt(TB.common.stripTags(D.innerHTML));
		while (D != this.container) {
			if (D.nodeName.toUpperCase() == "LI") {
				var C = this;
				this.delayTimeId = setTimeout(function () {
					C.play(B, true);
					C.pause = true;
				}, (C.sliding ? 0.5 : 0.1) * 1000);
				break;
			} else {
				D = D.parentNode;
			}
		}
	}, play:function (E, C) {
		E = E - 1;
		if (E == this.curSlide) {
			return;
		}
		var B = this.curSlide >= 0 ? this.curSlide : 0;
		if (C && this.autoPlayTimeId) {
			clearInterval(this.autoPlayTimeId);
		}
		var D = this.triggersUL.getElementsByTagName("li");
		D[B].className = "";
		D[E].className = this.config.currentClass;
		this.slide(E);
		this.curSlide = E;
		if (C && !this.config.disableAutoPlay) {
			this.autoPlay();
		}
	}, slide:function (C) {
		var B = this.curSlide >= 0 ? this.curSlide : 0;
		this.sliding = true;
		$D.setStyle(this.slides[B], "display", "none");
		$D.setStyle(this.slides[C], "display", "block");
		this.sliding = false;
		this.onSlide.fire(C);
	}, autoPlay:function () {
		var B = this;
		var C = function () {
			if (!B.pause && !B.sliding) {
				var D = (B.curSlide + 1) % B.slides.length + 1;
				B.play(D, false);
			}
		};
		this.autoPlayTimeId = setInterval(C, this.config.autoPlayTimeout * 1000);
	}};
	TB.widget.ScrollSlide = function (B, C) {
		this.init(B, C);
	};
	YAHOO.extend(TB.widget.ScrollSlide, TB.widget.Slide, {initSlides:function () {
		TB.widget.ScrollSlide.superclass.initSlides.call(this);
		$D.setStyle(this.slides, "display", "");
	}, slide:function (E) {
		var B = this.curSlide >= 0 ? this.curSlide : 0;
		var C = {scroll:{by:[0, this.slidesUL.offsetHeight * (E - B)]}};
		var D = new A.Scroll(this.slidesUL, C, 0.5, A.Easing.easeOutStrong);
		D.onComplete.subscribe(function () {
			this.sliding = false;
			this.onSlide.fire(E);
		}, this, true);
		D.animate();
		this.sliding = true;
	}});
	TB.widget.FadeSlide = function (B, C) {
		this.init(B, C);
	};
	YAHOO.extend(TB.widget.FadeSlide, TB.widget.Slide, {initSlides:function () {
		TB.widget.FadeSlide.superclass.initSlides.call(this);
		$D.setStyle(this.slides, "position", "absolute");
		$D.setStyle(this.slides, "top", this.config.slideOffsetY || 0);
		$D.setStyle(this.slides, "left", this.config.slideOffsetX || 0);
		$D.setStyle(this.slides, "z-index", 1);
	}, slide:function (D) {
		if (this.curSlide == -1) {
			$D.setStyle(this.slides[D], "display", "block");
		} else {
			var B = this.slides[this.curSlide];
			$D.setStyle(B, "display", "block");
			$D.setStyle(B, "z-index", 10);
			var C = new A.Anim(B, {opacity:{to:0}}, 0.5, A.Easing.easeNone);
			C.onComplete.subscribe(function () {
				$D.setStyle(B, "z-index", 1);
				$D.setStyle(B, "display", "none");
				$D.setStyle(B, "opacity", 1);
				this.sliding = false;
				this.onSlide.fire(D);
			}, this, true);
			$D.setStyle(this.slides[D], "display", "block");
			C.animate();
			this.sliding = true;
		}
	}});
})();
TB.widget.SimpleSlide = new function () {
	this.decorate = function (A, B) {
		if (!A) {
			return;
		}
		B = B || {};
		if (B.effect == "scroll") {
			if (TB.bom.isGecko) {
				if (YAHOO.util.Dom.get(A).getElementsByTagName("iframe").length > 0) {
					new TB.widget.Slide(A, B);
					return;
				}
			}
			new TB.widget.ScrollSlide(A, B);
		} else {
			if (B.effect == "fade") {
				new TB.widget.FadeSlide(A, B);
			} else {
				new TB.widget.Slide(A, B);
			}
		}
	};
};
TB.widget.SimpleTab = new function () {
	var C = YAHOO.util;
	var A = {eventType:"click", currentClass:"Current", tabClass:"", autoSwitchToFirst:true, stopEvent:true, delay:0.1};
	var B = function (F) {
		var D = [];
		if (!F) {
			return D;
		}
		for (var E = 0, G = F.childNodes; E < G.length; E++) {
			if (G[E].nodeType == 1) {
				D[D.length] = G[E];
			}
		}
		return D;
	};
	this.decorate = function (D, G) {
		D = $(D);
		G = TB.applyIf(G || {}, A);
		var K = {};
		var L = B(D);
		var F = L.shift(0);
		var E = F.getElementsByTagName("li");
		var I, N;
		if (G.tabClass) {
			I = $D.getElementsByClassName(G.tabClass, "*", D);
		} else {
			I = TB.common.toArray(F.getElementsByTagName("a"));
		}
		var O = new C.CustomEvent("onSwitch", null, false, C.CustomEvent.FLAT);
		if (G.onSwitch) {
			O.subscribe(G.onSwitch);
		}
		var J = function (Q) {
			if (N) {
				M();
			}
			var P = I.indexOf(this);
			K.switchTab(P);
			if (G.stopEvent) {
				try {
					$E.stopEvent(Q);
				}
				catch (R) {
				}
			}
			return !G.stopEvent;
		};
		var H = function (P) {
			var Q = this;
			N = setTimeout(function () {
				J.call(Q, P);
			}, G.delay * 1000);
			if (G.stopEvent) {
				$E.stopEvent(P);
			}
			return !G.stopEvent;
		};
		var M = function () {
			clearTimeout(N);
		};
		if (G.eventType == "mouse") {
			$E.on(I, "focus", J);
			$E.on(I, "mouseover", G.delay ? H : J);
			$E.on(I, "mouseout", M);
		} else {
			$E.on(I, "click", J);
		}
		TB.apply(K, {switchTab:function (P) {
			$D.setStyle(L, "display", "none");
			$D.removeClass(E, G.currentClass);
			$D.addClass(E[P], G.currentClass);
			$D.setStyle(L[P], "display", "block");
			O.fire(P);
		}, subscribeOnSwitch:function (P) {
			O.subscribe(P);
		}});
		K.onSwitch = K.subscribeOnSwitch;
		$D.setStyle(L, "display", "none");
		if (G.autoSwitchToFirst) {
			K.switchTab(0);
		}
		return K;
	};
};
TB.util.CountdownTimer = new function () {
	var F = YAHOO.util;
	var E = 60;
	var D = E * 60;
	var G = D * 24;
	var C = {formatStyle:"short", formatPattern:"", hideZero:true, timeoutText:"timeoutText", updatable:true};
	var A = function (H) {
		return ((H < 10) ? "0" : "") + H;
	};
	var B = function (H) {
		return function (J, I) {
			switch (I) {
			  case "d":
				return parseInt(H / G);
			  case "dd":
				return A(parseInt(H / G));
			  case "hh":
				return A(parseInt(H % G / D));
			  case "h":
				return parseInt(H % G / D);
			  case "mm":
				return A(parseInt(H % G % D / E));
			  case "m":
				return parseInt(H % G % D / E);
			  case "ss":
				return A(parseInt(H % G % D % E));
			  case "s":
				return parseInt(H % G % D % E);
			}
		};
	};
	this.attach = function (H, I, K) {
		H = $(H);
		I = parseInt(I);
		K = TB.applyIf(K || {}, C);
		var N = {};
		var O = new F.CustomEvent("onStart", null, false, F.CustomEvent.FLAT);
		if (K.onStart) {
			O.subscribe(K.onStart);
		}
		var J = new F.CustomEvent("onEnd", null, false, F.CustomEvent.FLAT);
		if (K.onEnd) {
			J.subscribe(K.onEnd);
		}
		var L = parseInt(new Date().getTime() / 1000);
		var M = L + I;
		var P = function () {
			N.update();
		};
		N.update = function () {
			var T = K.formatPattern, R = {}, S = 1;
			if (K.formatStyle == "long") {
				T = "{d}" + $M("day") + "{hh}" + $M("hour") + "{mm}" + $M("minute") + "{ss}" + $M("second");
			}
			var Q = M - parseInt(new Date().getTime() / 1000);
			if (Q <= 0) {
				H.innerHTML = $M(K.timeoutText);
				J.fire();
				return;
			} else {
				if (Q > G) {
					if (K.formatStyle == "short") {
						T = "{d}" + $M("day") + "{hh}" + $M("hour");
						S = Math.floor(Q % G % D) || D;
					}
				} else {
					if (Q > D) {
						if (K.formatStyle == "short") {
							T = "{hh}" + $M("hour") + "{mm}" + $M("minute");
							S = Math.floor(Q % D % E) || E;
						} else {
							if (K.formatStyle == "long" && K.hideZero) {
								T = "{hh}" + $M("hour") + "{mm}" + $M("minute") + "{ss}" + $M("second");
							}
						}
					} else {
						if (Q > 0) {
							if (K.formatStyle == "short" || (K.formatStyle == "long" && K.hideZero)) {
								T = "{mm}" + $M("minute") + "{ss}" + $M("second");
							}
						}
					}
				}
			}
			H.innerHTML = TB.common.formatMessage(T, R, B(Q));
			if (K.updatable && S > 0) {
				setTimeout(P, S * 1000);
			}
		};
		N.init = function () {
			this.update();
			O.fire();
		};
		N.init();
		return N;
	};
};
TB.util.Indicator = new function () {
	var A = {message:"loading", useShim:false, useIFrame:false, centerIndicator:true};
	var B = function (D, C) {
		shim = document.createElement("div");
		shim.className = "tb-indic-shim";
		$D.setStyle(shim, "display", "none");
		D.parentNode.insertBefore(shim, D);
		if (C) {
			var E = document.createElement("iframe");
			E.setAttribute("frameBorder", 0);
			E.className = "tb-indic-shim-iframe";
			D.parentNode.insertBefore(E, D);
		}
		return shim;
	};
	this.attach = function (F, D) {
		F = $(F);
		D = TB.applyIf(D || {}, A);
		var C = document.createElement("div");
		C.className = "tb-indic";
		$D.setStyle(C, "display", "none");
		$D.setStyle(C, "position", "static");
		C.innerHTML = "<span>" + $M(D.message) + "</span>";
		if (D.useShim) {
			var G = B(F, D.useIFrame);
			G.appendChild(C);
		} else {
			F.parentNode.insertBefore(C, F);
		}
		var E = {};
		E.show = function (I) {
			if (D.useShim) {
				var H = $D.getRegion(F);
				var K = C.parentNode;
				$D.setStyle(K, "display", "block");
				$D.setXY(K, [H[0], H[1]]);
				$D.setStyle(K, "width", (H.right - H.left) + "px");
				$D.setStyle(K, "height", (H.bottom - H.top) + "px");
				if (D.useIFrame) {
					var J = K.nextSibling;
					$D.setStyle(J, "width", (H.right - H.left) + "px");
					$D.setStyle(J, "height", (H.bottom - H.top) + "px");
					$D.setStyle(J, "display", "block");
				}
				$D.setStyle(C, "display", "block");
				$D.setStyle(C, "position", "absolute");
				if (D.centerIndicator) {
					$D.setStyle(C, "top", "50%");
					$D.setStyle(C, "left", "50%");
					C.style.marginTop = -(C.offsetHeight / 2) + "px";
					C.style.marginLeft = -(C.offsetWidth / 2) + "px";
				}
			} else {
				$D.setStyle(C, "display", "");
				if (I) {
					$D.setStyle(C, "position", "absolute");
					$D.setXY(C, I);
				}
			}
		};
		E.hide = function () {
			if (D.useShim) {
				var I = C.parentNode;
				$D.setStyle(C, "display", "none");
				$D.setStyle(I, "display", "none");
				if (D.useIFrame) {
					$D.setStyle(C.parentNode.nextSibling, "display", "none");
				}
				try {
					if (D.useIFrame) {
						I.parentNode.removeChild(I.nextSibling);
					}
					I.parentNode.removeChild(I);
				}
				catch (H) {
				}
			} else {
				$D.setStyle(C, "display", "none");
				try {
					C.parentNode.removeChild(C);
				}
				catch (H) {
				}
			}
		};
		return E;
	};
};
TB.util.Pagination = new function () {
	var PAGE_SEPARATOR = "...";
	var defConfig = {pageUrl:"", prevPageClass:"PrevPage", noPrevClass:"NoPrev", prevPageText:"prevPageText", nextPageClass:"NextPage", nextPageText:"nextPageText", noNextClass:"NoNext", currPageClass:"CurrPage", pageParamName:"page", appendParams:"", pageBarMode:"bound", showIndicator:true, cachePageData:false};
	var cancelHandler = function (ev) {
		$E.stopEvent(ev);
	};
	var pageHandler = function (ev, args) {
		$E.stopEvent(ev);
		var target = $E.getTarget(ev);
		args[1].gotoPage(args[0]);
	};
	var buildBoundPageList = function (pageIndex, pageCount) {
		var l = [];
		var leftStart = 1;
		var leftEnd = 2;
		var mStart = pageIndex - 2;
		var mEnd = pageIndex + 2;
		var rStart = pageCount - 1;
		var rEnd = pageCount;
		if (mStart <= leftEnd) {
			leftStart = 0;
			leftEnd = 0;
			mStart = 1;
		}
		if (mEnd >= rStart) {
			rStart = 0;
			rEnd = 0;
			mEnd = pageCount;
		}
		if (leftEnd > leftStart) {
			for (var i = leftStart; i <= leftEnd; ++i) {
				l[l.length] = "" + i;
			}
			if ((leftEnd + 1) < mStart) {
				l[l.length] = PAGE_SEPARATOR;
			}
		}
		for (var i = mStart; i <= mEnd; ++i) {
			l[l.length] = "" + i;
		}
		if (rEnd > rStart) {
			if ((mEnd + 1) < rStart) {
				l[l.length] = PAGE_SEPARATOR;
			}
			for (var i = rStart; i <= rEnd; ++i) {
				l[l.length] = "" + i;
			}
		}
		return l;
	};
	var buildPageEntry = function (idx, config) {
		var liEl = document.createElement("li");
		if (idx != PAGE_SEPARATOR) {
			$D.addClass(liEl, (idx == "prev") ? config.prevPageClass : (idx == "next") ? config.nextPageClass : "");
			var aEl = document.createElement("a");
			aEl.setAttribute("title", (idx == "prev") ? $M(config.prevPageText) : (idx == "next") ? $M(config.nextPageText) : "" + idx);
			aEl.href = buildPageUrl(idx, config) + "&t=" + new Date().getTime();
			aEl.innerHTML = (idx == "prev") ? $M(config.prevPageText) : (idx == "next") ? $M(config.nextPageText) : idx;
			liEl.appendChild(aEl);
		} else {
			liEl.innerHTML = PAGE_SEPARATOR;
		}
		return liEl;
	};
	var buildPageUrl = function (idx, config) {
		var url = config.pageUrl + (config.pageUrl.lastIndexOf("?") != -1 ? "&" : "?") + config.pageParamName + "=" + idx;
		if (config.appendParams) {
			url += "&" + config.appendParams;
		}
		return url;
	};
	this.attach = function (pageBarContainer, pageDataContainer, config) {
		pageBarContainer = $(pageBarContainer);
		pageDataContainer = $(pageDataContainer);
		config = TB.applyIf(config || {}, defConfig);
		if (config.cachePageData) {
			var pageDataCache = {};
		}
		var ulEl = document.createElement("ul");
		pageBarContainer.appendChild(ulEl);
		var pageLoadEvent = new YAHOO.util.CustomEvent("pageLoad", null, false, YAHOO.util.CustomEvent.FLAT);
		var handle = {};
		handle.rebuildPageBar = function (pageObj) {
			if (!pageObj) {
				return;
			}
			this.pageIndex = parseInt(pageObj.PageIndex);
			this.totalCount = parseInt(pageObj.TotalCount);
			this.pageCount = parseInt(pageObj.PageCount);
			this.pageSize = parseInt(pageObj.PageSize);
			ulEl.innerHTML = "";
			var list = this.repaginate();
			var prevLiEl = buildPageEntry("prev", config);
			if (!this.isPrevPageAvailable()) {
				$D.addClass(prevLiEl, config.noPrevClass);
				$E.on(prevLiEl, "click", cancelHandler);
			} else {
				$E.on(prevLiEl, "click", pageHandler, [this.pageIndex - 1, this]);
			}
			ulEl.appendChild(prevLiEl);
			for (var i = 0; i < list.length; i++) {
				var liEl = buildPageEntry(list[i], config);
				if (list[i] == this.pageIndex) {
					$D.addClass(liEl, config.currPageClass);
					$E.on(liEl, "click", cancelHandler);
				} else {
					$E.on(liEl, "click", pageHandler, [list[i], this]);
				}
				ulEl.appendChild(liEl);
			}
			var nextLiEl = buildPageEntry("next", config);
			if (!this.isNextPageAvailable()) {
				$D.addClass(nextLiEl, config.noNextClass);
				$E.on(nextLiEl, "click", cancelHandler);
			} else {
				$E.on(nextLiEl, "click", pageHandler, [this.pageIndex + 1, this]);
			}
			ulEl.appendChild(nextLiEl);
		};
		handle.repaginate = function () {
			var mode = config.pageBarMode;
			if (mode == "bound") {
				return buildBoundPageList(parseInt(this.pageIndex), parseInt(this.pageCount));
			} else {
				if (mode == "line") {
					var l = [];
					for (var i = 1; i <= this.pageCount; i++) {
						l.push(i);
					}
					return l;
				} else {
					if (mode == "eye") {
						return [];
					}
				}
			}
		};
		handle.gotoPage = function (idx) {
			this.disablePageBar();
			if (config.showIndicator) {
				$D.setStyle(pageDataContainer, "display", "none");
				var indicator = TB.util.Indicator.attach(pageDataContainer, {message:$M("loading")});
				indicator.show();
			}
			var url = buildPageUrl(idx, config);
			if (config.cachePageData) {
				if (pageDataCache[url]) {
					handle.showPage(pageDataCache[url]);
					return;
				}
			}
			YAHOO.util.Connect.asyncRequest("GET", url + "&t=" + new Date().getTime(), {success:function (req) {
				var resultSet = eval("(" + req.responseText + ")");
				handle.showPage(resultSet.Pagination);
				if (config.cachePageData) {
					pageDataCache[url] = resultSet.Pagination;
				}
				if (config.showIndicator) {
					indicator.hide();
					$D.setStyle(pageDataContainer, "display", "block");
				}
			}, failure:function (req) {
				if (config.showIndicator) {
					$D.setStyle(pageDataContainer, "display", "block");
					indicator.hide();
				}
				handle.rebuildPageBar();
				alert($M("ajaxError"));
			}});
		};
		handle.showPage = function (pageObj) {
			this._showPage(pageObj);
			this.rebuildPageBar(pageObj);
			pageLoadEvent.fire(pageObj);
		};
		handle._showPage = function (pageObj) {
			if (pageObj.PageData && YAHOO.lang.isString(pageObj.PageData)) {
				pageDataContainer.innerHTML = pageObj.PageData;
			}
		};
		handle.isNextPageAvailable = function () {
			return this.pageIndex < this.pageCount;
		};
		handle.isPrevPageAvailable = function () {
			return this.pageIndex > 1;
		};
		handle.disablePageBar = function () {
			$D.addClass(pageBarContainer, "Disabled");
			$E.purgeElement(pageBarContainer, true, "click");
			var els = TB.common.toArray(pageBarContainer.getElementsByTagName("a"));
			els.forEach(function (el, i) {
				$E.on(el, "click", cancelHandler);
				el.disabled = 1;
			});
		};
		handle.onPageLoad = function (callback) {
			if (YAHOO.lang.isFunction(callback)) {
				pageLoadEvent.subscribe(callback);
			}
		};
		handle.setAppendParams = function (params) {
			config.appendParams = params;
		};
		return handle;
	};
};
TB.util.QueryData = function () {
	this.data = [];
	this.addField = function (A) {
		for (var B = 0; B < arguments.length; B++) {
			var C = arguments[B];
			if (C) {
				this.add(C.name, encodeURIComponent(C.value));
			}
		}
	};
	this.add = function (A, B) {
		this.data.push({name:A, value:B});
	};
	this.get = function (A) {
		for (var B = 0; B < this.data.length; B++) {
			if (this.data[B].name === A) {
				return this.data[B].value;
			}
		}
		return null;
	};
	this.toQueryString = function () {
		var A = this.data.map(function (C, B) {
			return C.name + "=" + C.value;
		});
		return A.join("&");
	};
};
TB.form.CheckboxGroup = new function () {
	var E = YAHOO.util;
	var B = {checkAllBox:"CheckAll", checkAllBoxClass:"tb:chack-all", checkOnInit:true};
	var D = function (G, F) {
		return G.checked;
	};
	var A = function (G, F) {
		if (G.type && G.type.toLowerCase() == "checkbox") {
			G.checked = true;
		}
	};
	var C = function (G, F) {
		if (G.type && G.type.toLowerCase() == "checkbox") {
			G.checked = false;
		}
	};
	this.attach = function (K, G) {
		G = TB.applyIf(G || {}, B);
		var J = {};
		var H = new E.CustomEvent("onCheck", J, false, E.CustomEvent.FLAT);
		var I = [];
		if (K) {
			if (K.length) {
				I = TB.common.toArray(K);
			} else {
				I[0] = K;
			}
		}
		var L = [];
		if (G.checkAllBoxClass) {
			L = $D.getElementsByClassName(G.checkAllBoxClass, null, I[0].form);
		}
		if ($(G.checkAllBox)) {
			L.push($(G.checkAllBox));
		}
		var F = function () {
			var O = I.filter(D);
			if (I.length == 0) {
				L.forEach(C);
			} else {
				L.forEach((O.length == I.length) ? A : C);
			}
			J._checkedBoxCount = O.length;
		};
		var M = function (O) {
			var P = $E.getTarget(O);
			F();
			H.fire(P);
			return true;
		};
		TB.apply(J, {_checkedBoxCount:0, onCheck:function (O) {
			H.subscribe(O);
		}, isCheckAll:function () {
			return this._checkedBoxCount == I.length;
		}, isCheckNone:function () {
			return this._checkedBoxCount == 0;
		}, isCheckSome:function () {
			return this._checkedBoxCount != 0;
		}, isCheckSingle:function () {
			return this._checkedBoxCount == 1;
		}, isCheckMulti:function () {
			return this._checkedBoxCount > 1;
		}, toggleCheckAll:function () {
			var O = I.every(D);
			I.forEach(O ? C : A);
			if (I.length == 0) {
				L.forEach(C);
			} else {
				L.forEach(O ? C : A);
			}
			J._checkedBoxCount = (O) ? 0 : I.length;
			I.forEach(function (P) {
				H.fire(P);
			});
		}, toggleChecked:function (O) {
			O.checked = !O.checked;
			F();
			H.fire(O);
		}, getCheckedBoxes:function () {
			return I.filter(D);
		}});
		$E.on(I, "click", M);
		if (G.onCheck && YAHOO.lang.isFunction(G.onCheck)) {
			H.subscribe(G.onCheck, J, true);
		}
		if (L.length > 0) {
			$E.on(L, "click", J.toggleCheckAll);
		}
		if (G.checkOnInit) {
			F();
			var N = function () {
				I.forEach(function (O) {
					H.fire(O);
				});
			};
			setTimeout(N, 10);
		}
		return J;
	};
};
TB.form.TagAssistor = new function () {
	var B = {separator:" ", selectedClass:"Selected"};
	var A = function (E, D) {
		return E.indexOf(TB.common.trim(D.innerHTML)) != -1;
	};
	var C = function (D, E) {
		var F = D.value.replace(/\s+/g, " ").trim();
		if (F.length > 0) {
			return F.split(E);
		} else {
			return [];
		}
	};
	this.attach = function (E, F, G) {
		E = $(E);
		F = $(F);
		G = TB.applyIf(G || {}, B);
		var H = TB.common.toArray(F.getElementsByTagName("a"));
		var J = function (L) {
			var K = C(E, G.separator);
			var M = $E.getTarget(L);
			if (A(K, M)) {
				K.remove(TB.common.trim(M.innerHTML));
			} else {
				K.push(TB.common.trim(M.innerHTML));
			}
			D(K);
			E.value = K.join(G.separator);
		};
		var D = function (K) {
			H.forEach(function (M, L) {
				if (A(K, M)) {
					$D.addClass(M, G.selectedClass);
				} else {
					$D.removeClass(M, G.selectedClass);
				}
			});
		};
		var I = {};
		I.init = function () {
			var K = C(E, G.separator);
			H.forEach(function (M, L) {
				if (A(K, M)) {
					$D.addClass(M, G.selectedClass);
				}
				$E.on(M, "click", J);
			});
			$E.on(E, "keyup", function (M) {
				var L = C(E, G.separator);
				D(L);
			});
		};
		I.init();
	};
};
TB.form.Validation = new function () {
	var A = YAHOO;
	var J = this;
	var E = {useTitle:true, immediate:false, focusOnError:true, passedClass:"tb-fv-passed", failedClass:"tb-fv-failed", onFieldValidate:false, beforeValidate:false, onValidate:false, advice:"default", adviceClass:"tb-fv-advice", adviceContainerClass:null, adviceMsgClass:"tb-fv-advicemsg", attachEvent:true};
	var B = function (L, M, O, N) {
		if (A.lang.isFunction(O)) {
			this._test = O;
			this._rules = N;
		} else {
			if (A.lang.isObject(O)) {
				this._rules = O;
			}
		}
		this.warnMsg = M || "Validation failed!";
	};
	A.lang.augmentObject(B.prototype, {_test:function () {
		return true;
	}, _testRules:function (O, L) {
		var N = [];
		for (var M in this._rules) {
			if (J.METHODS[M] && !J.METHODS[M](O, L, this._rules[M])) {
				return false;
			}
		}
		return true;
	}, test:function (M, L) {
		return this._test(M, L) && this._testRules(M, L);
	}});
	J.ADVISORS = {"default":{__advices:{}, getAdvice:function (N) {
		var P = $D.generateId(N, "fv:field");
		var M;
		if (P in this.__advices) {
			M = this.__advices[P];
		} else {
			var O = (N.id || N.name) + "-advice";
			M = $(O);
			if (!M) {
				var L = this.adviceContainerClass ? $D.getAncestorByClassName(N, this.adviceContainerClass) : N.parentNode;
				M = $D.getElementsByClassName(this.adviceClass, "div", L)[0];
				if (M && M.id && M.id != O) {
					M = null;
				}
				if (!M) {
					M = document.createElement("div");
					$D.addClass(M, this.adviceClass);
					if (this.adviceContainerClass) {
						L.appendChild(N);
					} else {
						switch (N.type.toLowerCase()) {
						  case "checkbox":
						  case "radio":
							N.parentNode.appendChild(M, N);
							break;
						  default:
							TB.dom.insertAfter(M, N);
						}
					}
				}
				M.id = O;
			}
			this.__advices[P] = M;
		}
		return M;
	}, doFieldAdvice:function (M, O, P) {
		var L = this.getAdvice(O);
		if (!L) {
			return;
		}
		if (!M) {
			var N = L;
			if (this.adviceMsgClass) {
				N = $D.getElementsByClassName(this.adviceMsgClass, "*", L)[0] || L;
			}
			N.innerHTML = P;
			$D.setStyle(L, "display", "");
		} else {
			$D.setStyle(L, "display", "none");
		}
	}, showAdvices:function (L) {
		return;
	}, resetAdvices:function () {
		for (var L in this.__advices) {
			$D.setStyle(this.__advices[L], "display", "none");
		}
	}}, alert:{__msgs:[], doFieldAdvice:function (L, M, N) {
		if (!L) {
			if (this.immediate) {
				alert(N);
			} else {
				this.__msgs[this.__msgs.length] = N;
			}
		}
	}, showAdvices:function (L) {
		if (!L && !this.immediate) {
			alert(" * " + this.__msgs.join("\n * "));
		}
		this.resetAdvices();
	}, resetAdvices:function () {
		this.__msgs.length = 0;
	}}};
	J.METHODS = {isEmpty:function (M, L) {
		return ((M == null) || (M.length == 0));
	}, notEmpty:function (M, L) {
		return !((M == null) || (M.length == 0));
	}, regexp:function (N, M, L) {
		return L.test(N);
	}, minLength:function (N, M, L) {
		return N.length >= L;
	}, maxLength:function (N, M, L) {
		return N.length <= L;
	}, minValue:function (N, M, L) {
		return N >= parseFloat(L);
	}, maxValue:function (N, M, L) {
		return N <= parseFloat(L);
	}, notOneOf:function (N, M, L) {
		return TB.common.toArray(L).every(function (O) {
			return N != O;
		});
	}, oneOf:function (N, M, L) {
		return TB.common.toArray(L).some(function (O) {
			return N == O;
		});
	}, equal:function (N, M, L) {
		return N == L;
	}, notEqual:function (N, M, L) {
		return N != L;
	}, equalToField:function (N, M, L) {
		return N == $(L).value;
	}, notEqualToField:function (N, M, L) {
		return N != $(L).value;
	}};
	J.VALIDATORS = {};
	var F = function (L) {
		while (L.tagName != "BODY") {
			if ($D.getStyle(L, "display") == "none") {
				return false;
			}
			L = L.parentNode;
		}
		return true;
	};
	var D = function (M) {
		var L = ["INPUT", "SELECT", "TEXTAREA"];
		return $D.getElementsBy(function (N) {
			return $D.hasClass(N, "fv:force") || ((L.indexOf(N.tagName) != -1) && K(N.className) && F(N));
		}, "*", M);
	};
	var K = function (L) {
		return L.indexOf("fv:") != -1;
	};
	var H = function (P, O) {
		var N = D(P);
		var L = $D.batch(N, I, O).every(function (R) {
			return R;
		});
		O.showAdvices(L);
		if (!L && O.focusOnError) {
			var M = $D.getElementsByClassName(O.failedClass, "*", P)[0];
			try {
				M.focus();
				M.select();
			}
			catch (Q) {
			}
		}
		if (O.onValidate) {
			O.onValidate(L, P);
		}
		return L;
	};
	var I = function (N, O) {
		var M = N.className.split(/\s+/).filter(K);
		var L = M.every(function (R) {
			var Q = (O.validators) ? (O.validators[R] || J.VALIDATORS[R]) : J.VALIDATORS[R];
			if (!Q) {
				return true;
			}
			if (N.getAttribute("fv:params")) {
				Q = A.lang.merge(Q, {_rules:N.getAttribute("fv:params").toQueryParams()});
			}
			var P = Q.test(N.value, N);
			var S;
			if (!P) {
				S = O.useTitle ? (N.title || Q.warnMsg) : Q.warnMsg;
				$D.removeClass(N, O.passedClass);
				$D.addClass(N, O.failedClass);
			} else {
				$D.removeClass(N, O.failedClass);
				$D.addClass(N, O.passedClass);
			}
			O.doFieldAdvice(P, N, S);
			return P;
		}, J);
		if (O.onFieldValidate) {
			O.onFieldValidate(L, N);
		}
		return L;
	};
	var G = function (N, M) {
		var L = D(N);
		$D.removeClass(L, M.failedClass);
		$D.removeClass(L, M.passedClass);
		if (M.resetAdvices) {
			M.resetAdvices();
		}
	};
	J.validate = function (M, L) {
		return this.attach(M, A.lang.merge(L || {}, {attachEvent:false, immediate:false})).validate();
	};
	J.add = function (L, M, O, N) {
		this.validators[L] = new B(L, M, O, N);
	};
	J.addAll = function (L) {
		var M = {};
		L.forEach(function (N) {
			M[N[0]] = new B(N[0], N[1], N[2], (N.length > 3 ? N[3] : {}));
		});
		A.lang.augmentObject(J.VALIDATORS, M);
	};
	J.attach = function (P, L) {
		P = $(P);
		var O = A.lang.merge(E, L || {});
		O.form = P;
		O.validators = {};
		if (A.lang.isString(O.advice)) {
			var N = (O.advice in J.ADVISORS) ? O.advice : "default";
			A.lang.augmentObject(O, J.ADVISORS[N]);
		} else {
			A.lang.augmentObject(O, O.advice);
		}
		var R = function (S) {
			if (!O.validate()) {
				$E.stopEvent(S);
			}
		};
		var Q = function (S) {
			O.reset();
		};
		O.add = function (S, T, V, U) {
			this.validators[S] = new B(S, T, V, U);
		};
		O.addAll = function (S) {
			var T = {};
			S.forEach(function (U) {
				T[U[0]] = new B(U[0], U[1], U[2], (U.length > 3 ? U[3] : {}));
			});
			A.lang.augmentObject(this.validators, T);
		};
		O.reset = function () {
			G(P, O);
		};
		O.validate = function () {
			if (A.lang.isFunction(O.beforeValidate) && !O.beforeValidate(P)) {
				return false;
			} else {
				return H(P, O);
			}
		};
		if (O.attachEvent) {
			$E.on(P, "submit", R);
			$E.on(P, "reset", Q);
		}
		if (O.immediate) {
			var M = D(P);
			$E.on(M, "blur", function () {
				I(this, O);
			});
		}
		return O;
	};
	var C = J.METHODS.isEmpty;
	J.addAll([["fv:required", "\u8bf7\u8f93\u5165\u5185\u5bb9\uff01", function (L) {
		return !C(L);
	}], ["fv:number", "\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u6570\u5b57\uff01", function (L) {
		return C(L) || (!isNaN(L) && !/^\s+$/.test(L));
	}], ["fv:digits", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u6574\u6570\uff01", function (L) {
		return C(L) || !/[^\d]/.test(L);
	}], ["fv:alpha", "\u8bf7\u8f93\u5165\u82f1\u6587\u5b57\u6bcd\uff01", function (L) {
		return C(L) || /^[a-zA-Z]+$/.test(L);
	}], ["fv:alphanum", "\u8bf7\u8f93\u5165\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\uff01", function (L) {
		return C(L) || !/\W/.test(L);
	}], ["fv:date", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65f6\u95f4\uff01", function (L) {
		return C(L) || /^\d{4}-(?:[0]?)\d{1,2}-(?:[0]?)\d{1,2}$/.test(L);
	}], ["fv:mobile", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u624b\u673a\u53f7\u7801\uff01", function (L) {
		return C(L) || /^(86)*0*1[3|5]\d{9}$/.test(L);
	}], ["fv:postcode", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u90ae\u653f\u7f16\u7801\uff01", function (L) {
		return C(L) || /^[1-9]{1}(\d+){5}$/.test(L);
	}], ["fv:email", "\u8bf7\u8f93\u5165\u6709\u6548\u7684Email\u5730\u5740\uff01", function (L) {
		return C(L) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(L);
	}], ["fv:url", "\u8bf7\u8f93\u5165\u6709\u6548\u7684URL\uff01", function (L) {
		return C(L) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(L);
	}], ["fv:selection", "\u8bf7\u9009\u62e9\u4e00\u4e2a\u9009\u9879\uff01", function (L, M) {
		return M.options ? M.selectedIndex > 0 : !C(L);
	}], ["fv:oneRequired", "\u8bf7\u9009\u62e9\u5176\u4e2d\u4e00\u4e2a\u9009\u9879\uff01", function (L, N) {
		var M = N.name;
		var O = N.form.elements[M];
		if (O.length) {
			return TB.common.toArray(O).some(function (P) {
				return P.checked;
			});
		} else {
			return O.checked;
		}
	}]]);
};
TB.form.Validation = new function () {
	var A = YAHOO;
	var J = this;
	var E = {useTitle:true, immediate:false, focusOnError:true, passedClass:"tb-fv-passed", failedClass:"tb-fv-failed", onFieldValidate:false, beforeValidate:false, onValidate:false, advice:"default", adviceClass:"tb-fv-advice", adviceContainerClass:null, adviceMsgClass:"tb-fv-advicemsg"};
	var B = function (L, M, O, N) {
		if (A.lang.isFunction(O)) {
			this._test = O;
			this._rules = N;
		} else {
			if (A.lang.isObject(O)) {
				this._rules = O;
			}
		}
		this.warnMsg = M || "Validation failed!";
	};
	A.lang.augmentObject(B.prototype, {_test:function () {
		return true;
	}, _testRules:function (O, L) {
		var N = [];
		for (var M in this._rules) {
			if (J.METHODS[M] && !J.METHODS[M](O, L, this._rules[M])) {
				return false;
			}
		}
		return true;
	}, test:function (M, L) {
		return this._test(M, L) && this._testRules(M, L);
	}});
	J.ADVISORS = {"default":{__advices:{}, getAdvice:function (N) {
		var P = $D.generateId(N, "fv:field");
		var M;
		if (P in this.__advices) {
			M = this.__advices[P];
		} else {
			var O = (N.id || N.name) + "-advice";
			M = $(O);
			if (!M) {
				var L = this.adviceContainerClass ? $D.getAncestorByClassName(N, this.adviceContainerClass) : N.parentNode;
				M = $D.getElementsByClassName(this.adviceClass, "div", L)[0];
				if (!M) {
					M = document.createElement("div");
					$D.addClass(M, this.adviceClass);
					if (this.adviceContainerClass) {
						L.appendChild(N);
					} else {
						switch (N.type.toLowerCase()) {
						  case "checkbox":
						  case "radio":
							N.parentNode.appendChild(M, N);
							break;
						  default:
							TB.dom.insertAfter(M, N);
						}
					}
				}
				M.id = O;
			}
			this.__advices[P] = M;
		}
		return M;
	}, doFieldAdvice:function (M, O, P) {
		var L = this.getAdvice(O);
		if (!L) {
			return;
		}
		if (!M) {
			var N = L;
			if (this.adviceMsgClass) {
				N = $D.getElementsByClassName(this.adviceMsgClass, "*", L)[0] || L;
			}
			N.innerHTML = P;
			$D.setStyle(L, "display", "");
		} else {
			$D.setStyle(L, "display", "none");
		}
	}, showAdvices:function (L) {
		return;
	}, resetAdvices:function () {
		for (var L in this.__advices) {
			$D.setStyle(this.__advices[L], "display", "none");
		}
	}}, alert:{__msgs:[], doFieldAdvice:function (L, M, N) {
		if (!L) {
			if (this.immediate) {
				alert(N);
			} else {
				this.__msgs[this.__msgs.length] = N;
			}
		}
	}, showAdvices:function (L) {
		if (!L && !this.immediate) {
			alert(" * " + this.__msgs.join("\n * "));
		}
		this.resetAdvices();
	}, resetAdvices:function () {
		this.__msgs.length = 0;
	}}};
	J.METHODS = {isEmpty:function (M, L) {
		return ((M == null) || (M.length == 0));
	}, notEmpty:function (M, L) {
		return !((M == null) || (M.length == 0));
	}, regexp:function (N, M, L) {
		return L.test(N);
	}, minLength:function (N, M, L) {
		return N.length >= L;
	}, maxLength:function (N, M, L) {
		return N.length <= L;
	}, minValue:function (N, M, L) {
		return N >= parseFloat(L);
	}, maxValue:function (N, M, L) {
		return N <= parseFloat(L);
	}, notOneOf:function (N, M, L) {
		return TB.common.toArray(L).every(function (O) {
			return N != O;
		});
	}, oneOf:function (N, M, L) {
		return TB.common.toArray(L).some(function (O) {
			return N == O;
		});
	}, equal:function (N, M, L) {
		return N == L;
	}, notEqual:function (N, M, L) {
		return N != L;
	}, equalToField:function (N, M, L) {
		return N == $(L).value;
	}, notEqualToField:function (N, M, L) {
		return N != $(L).value;
	}};
	J.VALIDATORS = {};
	var F = function (L) {
		while (L.tagName != "BODY") {
			if ($D.getStyle(L, "display") == "none") {
				return false;
			}
			L = L.parentNode;
		}
		return true;
	};
	var D = function (M) {
		var L = ["INPUT", "SELECT", "TEXTAREA"];
		return $D.getElementsBy(function (N) {
			return $D.hasClass(N, "fv:force") || ((L.indexOf(N.tagName) != -1) && K(N.className) && F(N));
		}, "*", M);
	};
	var K = function (L) {
		return L.indexOf("fv:") != -1;
	};
	var H = function (P, O) {
		var N = D(P);
		var L = $D.batch(N, I, O).every(function (R) {
			return R;
		});
		O.showAdvices(L);
		if (!L && O.focusOnError) {
			var M = $D.getElementsByClassName(O.failedClass, "*", P)[0];
			try {
				M.focus();
				M.select();
			}
			catch (Q) {
			}
		}
		if (O.onValidate) {
			O.onValidate(L, P);
		}
		return L;
	};
	var I = function (N, O) {
		var M = N.className.split(/\s+/).filter(K);
		var L = M.every(function (R) {
			var Q = O.validators[R] || J.VALIDATORS[R];
			if (!Q) {
				return true;
			}
			if (N.getAttribute("fv:params")) {
				Q = A.lang.merge(Q, {_rules:N.getAttribute("fv:params").toQueryParams()});
			}
			var P = Q.test(N.value, N);
			var S;
			if (!P) {
				S = O.useTitle ? (N.title || Q.warnMsg) : Q.warnMsg;
				$D.removeClass(N, O.passedClass);
				$D.addClass(N, O.failedClass);
			} else {
				$D.removeClass(N, O.failedClass);
				$D.addClass(N, O.passedClass);
			}
			O.doFieldAdvice(P, N, S);
			return P;
		}, J);
		if (O.onFieldValidate) {
			O.onFieldValidate(L, N);
		}
		return L;
	};
	var G = function (N, M) {
		var L = D(N);
		$D.removeClass(L, M.failedClass);
		$D.removeClass(L, M.passedClass);
		if (M.resetAdvices) {
			M.resetAdvices();
		}
	};
	J.add = function (L, M, O, N) {
		this.validators[L] = new B(L, M, O, N);
	};
	J.addAll = function (L) {
		var M = {};
		L.forEach(function (N) {
			M[N[0]] = new B(N[0], N[1], N[2], (N.length > 3 ? N[3] : {}));
		});
		A.lang.augmentObject(J.VALIDATORS, M);
	};
	J.attach = function (P, L) {
		P = $(P);
		var O = A.lang.merge(E, L || {});
		O.form = P;
		O.validators = {};
		if (A.lang.isString(O.advice)) {
			var N = (O.advice in J.ADVISORS) ? O.advice : "default";
			A.lang.augmentObject(O, J.ADVISORS[N]);
		} else {
			A.lang.augmentObject(O, O.advice);
		}
		var R = function (S) {
			if (!O.validate()) {
				$E.stopEvent(S);
			}
		};
		var Q = function (S) {
			O.reset();
		};
		O.add = function (S, T, V, U) {
			this.validators[S] = new B(S, T, V, U);
		};
		O.addAll = function (S) {
			var T = {};
			S.forEach(function (U) {
				T[U[0]] = new B(U[0], U[1], U[2], (U.length > 3 ? U[3] : {}));
			});
			A.lang.augmentObject(this.validators, T);
		};
		O.reset = function () {
			G(P, O);
		};
		O.validate = function () {
			if (A.lang.isFunction(O.beforeValidate) && !O.beforeValidate(P)) {
				return false;
			} else {
				return H(P, O);
			}
		};
		$E.on(P, "submit", R);
		$E.on(P, "reset", Q);
		if (O.immediate) {
			var M = D(P);
			$E.on(M, "blur", function () {
				I(this, O);
			});
		}
		return O;
	};
	var C = J.METHODS.isEmpty;
	J.addAll([["fv:required", "\u8bf7\u8f93\u5165\u5185\u5bb9\uff01", function (L) {
		return !C(L);
	}], ["fv:number", "\u8bf7\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u6570\u5b57\uff01", function (L) {
		return C(L) || (!isNaN(L) && !/^\s+$/.test(L));
	}], ["fv:digits", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u6574\u6570\uff01", function (L) {
		return C(L) || !/[^\d]/.test(L);
	}], ["fv:alpha", "\u8bf7\u8f93\u5165\u82f1\u6587\u5b57\u6bcd\uff01", function (L) {
		return C(L) || /^[a-zA-Z]+$/.test(L);
	}], ["fv:alphanum", "\u8bf7\u8f93\u5165\u82f1\u6587\u5b57\u6bcd\u6216\u6570\u5b57\uff01", function (L) {
		return C(L) || !/\W/.test(L);
	}], ["fv:date", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65f6\u95f4\uff01", function (L) {
		return C(L) || /^\d{4}-(?:[0]?)\d{1,2}-(?:[0]?)\d{1,2}$/.test(L);
	}], ["fv:mobile", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u624b\u673a\u53f7\u7801\uff01", function (L) {
		return C(L) || /^(86)*0*1[3|5]\d{9}$/.test(L);
	}], ["fv:postcode", "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u90ae\u653f\u7f16\u7801\uff01", function (L) {
		return C(L) || /^[1-9]{1}(\d+){5}$/.test(L);
	}], ["fv:email", "\u8bf7\u8f93\u5165\u6709\u6548\u7684Email\u5730\u5740\uff01", function (L) {
		return C(L) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(L);
	}], ["fv:url", "\u8bf7\u8f93\u5165\u6709\u6548\u7684URL\uff01", function (L) {
		return C(L) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(L);
	}], ["fv:selection", "\u8bf7\u9009\u62e9\u4e00\u4e2a\u9009\u9879\uff01", function (L, M) {
		return M.options ? M.selectedIndex > 0 : !C(L);
	}], ["fv:oneRequired", "\u8bf7\u9009\u62e9\u5176\u4e2d\u4e00\u4e2a\u9009\u9879\uff01", function (L, N) {
		var M = N.name;
		var O = N.form.elements[M];
		if (O.length) {
			return TB.common.toArray(O).some(function (P) {
				return P.checked;
			});
		} else {
			return O.checked;
		}
	}]]);
};

