﻿/* - common.js - */

function onClick(A) {
	ev = A || window.event;
	if (ev.pageX || ev.pageY) {
		return {
			x: ev.pageX + "px",
			y: ev.pageY + "px"
		}
	}
	return {
		x: (ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft),
		y: (ev.clientY + document.documentElement.scrollTop - document.documentElement.clientTop)
	}
}
function showLock() {
	var B = $("lock");
	var A = window.screen.width;
	var C = window.screen.height;
	B.style.left = 0 + "px";
	B.style.top = 0 + "px";
	B.style.width = A + "px";
	B.style.height = C + "px";
	B.show("block")
}
function hideLock() {
	$("lock").hide()
}
function showWaiting(A) {
	$("ajax_loading").innerHTML = '<img src="../images/ajax-loader.gif" />';
	ajaxLoading(true);
	setTimeout("closeWaiting", 5000)
}
function closeWaiting() {
	ajaxLoading(false)
}
function showAddrError(A) {
	$("addrError").innerHTML = A;
	$("addrError").show("block");
	setTimeout("hideAddrError()", 5000)
}
function hideAddrError() {
	$("addrError").innerHTML = "";
	$("addrError").hide()
}
function centerDiv(G) {
	var C = ABBrowser.getScrollLeft();
	var B = ABBrowser.getScrollTop();
	var A = ABBrowser.getViewWidth();
	var D = ABBrowser.getViewHeight();
	var F = C + parseInt(A / 2, 10);
	var E = B + parseInt(D / 2, 10);
	G.style.left = F + "px";
	G.style.top = E + "px"
}
function ajaxLoading(B, C, A) {
	var D = $("ajax_loading");
	if (B == true) {
		centerDiv(D);
		if (C) {
			D.style.left = (parseInt(D.style.left) + C) + "px"
		}
		if (A) {
			D.style.top = (parseInt(D.style.top) + A) + "px"
		}
		D.show("block")
	} else {
		D.hide()
	}
}
if (!comAddr) {
	var comAddr = "全市"
}
if (!comWhat) {
	var comWhat = ""
}
String.prototype.replaceSs = function() {
	return this.replace(/\s+/, "")
};
function onMouseOver(A) {
	A.style.cursor = "text";
	if (comAddr != A.value.strip()) {
		A.select()
	}
	clearAddr(A)
}
function onMouseOut(A) {}
function clearAddr(A) {
	if (A.value == comAddr) {
		A.value = "";
		A.style.color = "#000"
	}
	A.focus()
}
function clearInputName(A) {
	A.value = "";
	A.style.color = "#000";
	A.focus()
}
function resetAddr(A) {
	if (!A.value) {
		A.value = comAddr;
		A.style.color = "#999"
	}
}
function clearWhat(A) {
	if (A.value == comWhat) {
		A.value = "";
		A.style.color = "#000"
	}
}
function resetWhat(A) {
	if (!A.value) {
		A.value = comWhat;
		A.style.color = "#999"
	}
}
function getWhat(B) {
	if (!B) {
		var A = $("what").value
	} else {
		var A = B.value
	}
	A = A.strip();
	if (A == comWhat) {
		return ""
	}
	return A
}
function setWhat(C) {
	var B = $("what");
	var A = $("what_b");
	if (!C || C == comWhat) {
		if (B) {
			B.value = comWhat;
			B.style.color = "#999"
		}
		if (A) {
			A.value = comWhat;
			A.style.color = "#999"
		}
	} else {
		if (B) {
			B.value = C;
			B.style.color = "#000"
		}
		if (A) {
			A.value = C;
			A.style.color = "#000"
		}
	}
}
function getAddr(A) {
	if (!A) {
		var B = $("addr").value
	} else {
		var B = A.value
	}
	B = B.strip();
	if (B.replaceSs() == comAddr.replaceSs() || B.replaceSs() == comAddr) {
		return ""
	}
	return B
}
function setAddr(C) {
	var B = $("addr");
	var A = $("addr_b");
	if (!C || C == comAddr) {
		if (B) {
			B.value = comAddr
		}
		if (A) {
			A.value = comAddr
		}
	} else {
		if (B) {
			B.value = C;
			B.style.color = "#000"
		}
		if (A) {
			A.value = C;
			A.style.color = "#000"
		}
	}
}
function hideEmptyRecentAddr() {
	for (var A = 5; A > 0; A--) {
		var B = $("addr" + A);
		if (B && B.innerHTML) {
			B.show("block")
		} else {
			B.hide()
		}
	}
}
function defaultOnload() {
	var A;
	try {
		$("what").focus()
	} catch(A) {}
}
function channelChange(L) {
	var I = new Array();
	if (L == "mapview") {
		var C = location.href;
		var F = C.indexOf("#s=");
		if (F > 0) {
			var G = location.href.split("#s=");
			var B = G[0] + "&type=mapview";
			var K = decodeURIComponent(G[1]).split("\n");
			var J = 0;
			for (var F = 0; F < K.length; F++) {
				var O = K[F].split("\r")[0];
				var H = K[F].split("\r")[1];
				if (O == "type") {
					H = "mapview";
					J = 1
				} else {
					if (O == "city") {
						H = getCookie("city") ? getCookie("city") : "北京"
					} else {
						if (O == "a") {
							H = getCookie("addr") ? getCookie("addr") : ""
						}
					}
				}
				I.push(O + "\r" + H)
			}
			if (!J) {
				I.push("type\rmapview")
			}
			B += "#s=" + encodeURIComponent(I.join("\n"))
		} else {
			var N = /(?!&|\?)(.*?)=(.*?)(?=&|$)/ig;
			var A = location.href.match(N);
			var B = "?area=bizsearch&cmd=bigmap&type=mapview#s=";
			for (F = 0; F < A.length; F++) {
				var E = A[F].split("=");
				if (E[0] == "cmd") {
					I.push(E[0] + "\rbiz")
				} else {
					if (E[0].indexOf("?") > 0) {} else {
						I.push(E[0] + "\r" + decodeURIComponent(E[1]))
					}
				}
			}
			if (!I["type"]) {
				I.push("type\rmapview")
			}
			B += encodeURIComponent(I.join("\n"))
		}
	} else {
		var M = location.href.replace(/&type=mapview/g, "");
		var D = M.split("#s=");
		var B = "/?area=bizsearch&";
		var K = decodeURIComponent(D[1]).split("\n");
		var J = 0;
		for (var F = 0; F < K.length; F++) {
			var O = K[F].split("\r")[0];
			var H = K[F].split("\r")[1];
			if (O == "type") {
				H = "";
				J = 1;
				continue
			} else {
				if (O == "city") {
					H = getCookie("city") ? getCookie("city") : "北京"
				} else {
					if (O == "cmd") {
						H = "bigmap"
					}
				}
			}
			I.push(O + "=" + encodeURIComponent(H))
		}
		if (!J) {
			I.push("type=textview")
		}
		B += I.join("&")
	}
	location.href = B
}
function boldLiFont(A, D) {
	if ((typeof document.getElementById(A)) != "object") {
		throw ("bad attach id")
	}
	var C = document.getElementById(A).getElementsByTagName("LI");
	for (var B = 0; B < C.length; B++) {
		if (C[B] == D) {
			D.style.fontWeight = "bold"
		} else {
			C[B].style.fontWeight = "normal"
		}
	}
} (function() {
	if (document.addEventListener) {
		document.addEventListener("click",
		function() {
			sORh("msg_l", "none");
			sORh("msg", "none");
			sORh("msg_city", "none")
		},
		false)
	} else {
		if (document.attachEvent) {
			document.attachEvent("onmouseup",
			function() {
				sORh("msg_l", "none");
				sORh("msg", "none");
				sORh("msg_city", "none")
			})
		}
	}
})();
function selectKeyword(A) {
	setWhat(A);
	setout("frt")
}
function cityChangedBySearch() {
	sORh("change_city", "none")
}
function mouseOverAddr(A) {
	mouseOverDiv(A, pulldownId)
}
function mouseOverWhat(A) {
	mouseOverDiv(A, pulldownId)
}
function mouseOverDiv(D, B) {
	if (!B) {
		B = pulldownId
	}
	var A = document.getElementById(B).getElementsByTagName("a");
	for (var C = 0; C < totalResultNum - 1; C++) {
		if (A[C] == D) {
			curPosition = C;
			A[C].className = "drop_item"
		} else {
			A[C].className = ""
		}
	}
}
function mouseOutDiv(A) {
	A.className = ""
}
function userLatestSearch() {
	var F = getCookie("city");
	var J = getCookie("addr");
	var A = getCookie("what");
	if (((J && (J.split("loc:"))[1])) || !A) {
		return
	}
	var I = getCookie("uls");
	var D = I.split("|||");
	var C = D.length;
	var G = F + ":::" + J + ":::" + A;
	var B = G + "|||";
	var E = 1;
	for (var H = 0; H < 3; H++) {
		if (G != D[H] && D[H]) {
			if (E == 3) {
				break
			}
			if (H == C - 1) {
				B += D[H]
			} else {
				B += D[H] + "|||"
			}
			E++
		}
	}
	if (I != B) {
		setCookie("uls", B)
	}
}
function setRecentEvents() {
	var D = getCookie("city");
	var I = getCookie("addr");
	userLatestSearch();
	if (!I || (I.split("loc:"))[1]) {
		return
	}
	var H = getCookie("recentCR");
	var C = H.split("|||");
	var B = C.length;
	var E = D + ":::" + I;
	var A = E + "|||";
	var F = 1;
	for (var G = 0; G < 3; G++) {
		if (E != C[G] && C[G]) {
			if (F == 3) {
				break
			}
			if (G == B - 1) {
				A += C[G]
			} else {
				A += C[G] + "|||"
			}
			F++
		}
	}
	if (H != A) {
		setCookie("recentCR", A)
	}
}
function hotSearch(B) {
	var A = B.innerHTML;
	setWhat(A);
	setout("frttag")
}
function num2Char(A) {
	switch (A) {
	case 0:
		return "m1";
	case 1:
		return "m2";
	case 2:
		return "m3";
	case 3:
		return "m4";
	case 4:
		return "m5";
	case 5:
		return "m6";
	case 6:
		return "m7";
	case 7:
		return "m8";
	case 8:
		return "m9";
	case 9:
		return "m10";
	default:
		return "N"
	}
}
function gotoTextView(E, F, D, A, C) {
	if (!A) {
		A = ""
	}
	if (!D) {
		D = ""
	}
	if (!C) {
		C = "_self"
	}
	setCookie("what", D);
	var B = "/?area=bizsearch&cmd=bigmap&city=" + $E(E) + "&a=" + $E(F) + "&q=" + $E(D) + A;
	window.open(B, C)
}
function selectBiz() {
	var A = $("city").innerHTML;
	var B = getAddr();
	window.open("/?area=common&cmd=services&city=" + encodeURIComponent(A) + "&a=" + encodeURIComponent(B), "_blank")
}
function changeCityAddr(A, B) {
	setCookie("city", A);
	setCookie("addr", B);
	gotoTextView(A, B)
}
function changeCity(C, A) {
	var D = C.innerHTML.stripTags();
	$("city").innerHTML = D;
	if ($("city3")) {
		$("city3").innerHTML = D
	}
	setAddr("");
	setCookie("city", D);
	setCookie("addr", "");
	var B = "/";
	switch (A) {
	case "act":
		B = activityChangeCityUrl(D);
		break;
	case "mov":
		B = movieChangeCityUrl(D);
		break;
	case "traffic":
		B = trafficChangeCityUrl(D);
		break;
	case "discount":
		B = discountChangeCityUrl(D);
		break;
	case "bizsearch":
		B = searcjChangeCityUrl(D);
		break;
	case "exp":
		B = expChangeCityUrl(D);
		break;
	case "train":
		B = "/?area=train";
	default:
		break
	}
	window.open(B, "_self")
}
var ABBrowser = {
	navi: navigator.userAgent.toLowerCase(),
	isIE: function() {
		var A = this;
		return (A.navi.indexOf("msie") != -1) && (A.navi.indexOf("opera") == -1) && (A.navi.indexOf("omniweb") == -1)
	},
	getBody: function() {
		return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement: document.body
	},
	getScrollTop: function() {
		return this.isIE() ? this.getBody().scrollTop: window.pageYOffset
	},
	getScrollLeft: function() {
		return this.isIE() ? this.getBody().scrollLeft: window.pageXOffset
	},
	getAvailableHeight: function() {
		return this.getBody().offsetHeight > this.getBody().scrollHeight ? this.getBody().offsetHeight: this.getBody().scrollHeight
	},
	getAvailableWidth: function() {
		return this.getBody().offsetWidth > this.getBody().scrollWidth ? this.getBody().offsetWidth: this.getBody().scrollWidth
	},
	getViewWidth: function() {
		return self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth)
	},
	getViewHeight: function() {
		return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight)
	},
	getPointerPositionInDocument: function(C) {
		var B = C;
		var A = B.pageX || (B.clientX + ABBrowser.getBody().scrollLeft);
		var D = B.pageY || (B.clientY + ABBrowser.getBody().scrollTop);
		return {
			"x": A,
			"y": D
		}
	},
	getElementPosition: function(C) {
		if (typeof C.offsetParent != "undefined") {
			for (var B = 0,
			A = 0; C; C = C.offsetParent) {
				B += C.offsetLeft;
				A += C.offsetTop
			}
			return {
				"x": B,
				"y": A
			}
		} else {
			return {
				"x": B,
				"y": A
			}
		}
	}
};
var ABMessage = {
	_obj: null,
	_top: 0,
	_left: 0,
	_height: 470,
	_width: 600,
	_scrollTop: 0,
	_scrollLeft: 0,
	_availableHeight: 0,
	_availableWidth: 0,
	_realHeight: 0,
	_realWidth: 0,
	setAvailableTopLeft: function() {
		ABMessage._scrollTop = ABBrowser.getScrollTop();
		ABMessage._scrollLeft = ABBrowser.getScrollLeft();
		ABMessage._availableHeight = ABBrowser.getViewHeight();
		ABMessage._availableWidth = ABBrowser.getViewWidth();
		if (ABMessage._realHeight && ABMessage._realHeight < ABMessage._availableHeight) {
			ABMessage._availableHeight = ABMessage._realHeight

		}
		if (ABMessage._realWidth && ABMessage._realWidth < ABMessage._availableWidth) {
			ABMessage._availableWidth = ABMessage._realWidth
		}
		ABMessage._top = ABMessage._scrollTop + (ABMessage._availableHeight - ABMessage._height) / 2;
		ABMessage._left = ABMessage._scrollLeft + (ABMessage._availableWidth - ABMessage._width) / 2;
		if (ABMessage._top < ABMessage._scrollTop) {
			ABMessage._top = ABMessage._scrollTop
		}
	},
	getMessageView: function(D, B, A, C) {
		new Ajax.Request(B, {
			method: "get",
			onSuccess: function(G) {
				if (G.getResponseHeader("ValidatePage")) {
					return window.open("/?area=common&cmd=validate&validate=1&url=" + $E(location.href), "_self")
				} else {
					if (G.getResponseHeader("needlogin")) {
						var E = (ABMessage._backUrl) ? (ABMessage._backUrl) : ($E(location.href));
						var F = G.getResponseHeader("loginmsg") ? G.getResponseHeader("loginmsg") : $E("您需要登录后，才能免费发送到手机");
						return window.open("/?area=user&cmd=showlogin&backurl=" + E + "&msg=" + F, "_self")
					}
				}
				ABMessage.setAvailableTopLeft();
				ABMessage._obj.style.top = ABMessage._top + "px";
				ABMessage._obj.style.left = ABMessage._left + "px";
				ABMessage._obj.style.position = "absolute";
				ABMessage._obj.innerHTML = G.responseText;
				ABMessage._obj.style.display = "block";
				if ($("needfocus")) {
					$("needfocus").focus()
				}
			}
		});
		ABMessage._obj = $(D);
		if (C) {
			ABMessage._realHeight = C
		}
		if (A) {
			ABMessage._realWidth = A
		}
	},
	sendMessage: function(A, C, B) {
		new Ajax.Request(A, {
			method: "post",
			parameters: C,
			onSuccess: function(D) {
				$(B).innerHTML = D.responseText
			}
		})
	},
	closeView: function() {
		var A = ABMessage._obj;
		ABMessage.__destructMSG(A)
	},
	__destructMSG: function(A) {
		$(A).innerHTML = "";
		$(A).style.display = "none";
		$(A).style.top = 0;
		$(A).style.left = 0
	}
};
function emailView(C, A) {
	var B = "/?area=msg&cmd=email&id=" + C + "&t=" + new Date().getTime();
	if (A) {
		ABMessage.getMessageView("msg1", B, A)
	} else {
		ABMessage.getMessageView("msg1", B)
	}
}
function emailDiscountView(C, D, A) {
	var B = "/?area=msg&cmd=discountEmail&id=" + C + "&tid=" + D + "&t=" + new Date().getTime();
	if (A) {
		ABMessage.getMessageView("msg1", B, A)
	} else {
		ABMessage.getMessageView("msg1", B)
	}
}
function sendEmail() {
	with(document.email) {
		var email = mail_to.value.strip();
		var vbid = bid.value;
		var vtid = tid.value;
		var vbname = bname.value;
		sORh("s", "none");
		sORh("p", "none");
		if (!email) {
			sORh("s", "block");
			mail_to.focus();
			return false
		}
		var to = "";
		if (email.indexOf(",") != -1) {
			email = email.replace(/\,/g, ";")
		}
		arr = email.split(";");
		for (i = 0; i < arr.length; i++) {
			if (arr[i] == "") {
				continue
			}
			var re = new RegExp(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/g);
			if (!re.test(arr[i])) {
				sORh("p", "block");
				mail_to.focus();
				return false
			} else {
				to += arr[i] + ";"
			}
		}
	}
	var url = "/?mc=" + $E(vbid);
	var params = "area=msg&cmd=emsg&to=" + to + "&id=" + $E(vbid) + "&tid=" + $E(vtid) + "&bname=" + $E(vbname);
	ABMessage.sendMessage(url, params, "msg1")
}
function emailErrorView(C, D, A) {
	var B = "/?area=msg&cmd=email&id=" + C + "" + D;
	if (A) {
		ABMessage.getMessageView("msg1", B, A)
	} else {
		ABMessage.getMessageView("msg1", B)
	}
}
var contactsList;
var contactsDropList;
function mobileView(C, A, D) {
	D = D ? D: "mobile";
	var B = "/?area=msg&cmd=" + D + "&id=" + C + "&t=" + new Date().getTime();
	if (A) {
		ABMessage.getMessageView("msg1", B, A)
	} else {
		ABMessage.getMessageView("msg1", B)
	}
	var B = "/?area=user&cmd=contacts_list&input=ALL&tag=1";
	new Ajax.Request(B, {
		method: "get",
		onSuccess: function(F) {
			var E = F.responseText;
			if (E) {
				contactsList = E.split(",")
			} else {
				contactsList = ""
			}
		}
	});
	var B = "/?area=user&cmd=contacts_list&input=ALL&tag=2";
	new Ajax.Request(B, {
		method: "get",
		onSuccess: function(E) {
			contactsDropList = E.responseText
		}
	})
}
function mobileDiscountView(D, B, A) {
	var C = "/?area=bizpay&cmd=download&tid=" + D + "&pid=" + B + "&t=" + new Date().getTime();
	new Ajax.Request(C, {
		method: "get",
		onSuccess: function(H) {
			if (H.getResponseHeader("needlogin")) {
				var E = $E(location.href);
				var F = H.getResponseHeader("loginmsg");
				return window.open("/?area=user&cmd=showlogin&backurl=" + E + "&msg=" + F, "_self")
			}
			var G = H.getResponseHeader("retCode");
			if (G == 402) {
				alert("优惠券已发放完")
			}
			if (G == 403) {
				alert("用户今天下载已2张")
			}
			if (G == 404) {
				alert("用户对本优惠券下载已10张")
			}
			if (G == 200) {
				mobileView(D, A, "discount")
			}
			return false
		}
	})
}
var DragAndDrop = {
	dragObj: null,
	moveObj: null,
	deltaX: 0,
	deltaY: 0,
	startdrag: function(C, A) {
		DragAndDrop.dragObj = $(C);
		DragAndDrop.deltaX = parseInt(DragAndDrop.dragObj.style.left) - A.clientX - document.documentElement.scrollLeft;
		DragAndDrop.deltaY = parseInt(DragAndDrop.dragObj.style.top) - A.clientY - document.documentElement.scrollTop;
		attachEventListener(document.body, "mousemove", DragAndDrop.drag, false);
		attachEventListener(document.body, "mouseup", DragAndDrop.drop, false);
		var B = A.srcElement ? A.srcElement: A.target;
		DragAndDrop.moveObj = B;
		DragAndDrop.moveObj.style.cursor = "move";
		sORh(contactDropDownId, "none");
		if (pulldownAjax && pulldownAjax.abort) {
			pulldownAjax.abort()
		}
	},
	drag: function(A) {
		if (DragAndDrop.dragObj) {
			DragAndDrop.dragObj.style.left = (A.clientX + DragAndDrop.deltaX + document.documentElement.scrollLeft) + "px";
			DragAndDrop.dragObj.style.top = (A.clientY + DragAndDrop.deltaY + document.documentElement.scrollTop) + "px"
		}
	},
	drop: function(A) {
		DragAndDrop.moveObj.style.cursor = "pointer";
		DragAndDrop.dragObj = null
	}
};
var curMobileTraffic = 0;
function mobileTrafficView(G, I) {
	var H = (Tag.curType == 1) ? Tag.objInputBus: ((Tag.curType == 4) ? Tag.objInputDrive: null);
	if (BpointStartXY && I != "bus") {
		var D = BpointStartXY[0];
		var K = BpointStartXY[1];
		var B = BpointEndXY[0];
		var J = BpointEndXY[1];
		var C = StartName;
		var E = EndName;
		var F = $("g_city_name").innerHTML
	} else {
		var D = H["x1"].value;
		var B = H["x2"].value;
		var K = H["y1"].value;
		var J = H["y2"].value;
		var C = $("bus_name1").value;
		var E = $("bus_name2").value;
		var F = $("g_city_name").innerHTML
	}
	var A = "/?area=msg&cmd=mobile_traffic";
	A += "&x1=" + D + "&x2=" + B + "&y1=" + K + "&y2=" + J + "&city=" + $E(F) + "&origin=" + $E(C) + "&end=" + $E(E) + "&index=" + (G - 1);
	if (BusManage.curOrderType) {
		A += "&rc=" + BusManage.curOrderType
	}
	if (BusManage.curOrderType == 0) {
		A += "&method=2"
	}
	ABMessage.getMessageView("msg1", A);
	if (G > 0) {
		curMobileTraffic = G
	}
	var A = "/?area=user&cmd=contacts_list&input=ALL&tag=1";
	new Ajax.Request(A, {
		method: "get",
		onSuccess: function(M) {
			var L = M.responseText;
			if (L) {
				contactsList = L.split(",")
			} else {
				contactsList = ""
			}
		}
	});
	var A = "/?area=user&cmd=contacts_list&input=ALL&tag=2";
	new Ajax.Request(A, {
		method: "get",
		onSuccess: function(L) {
			contactsDropList = L.responseText
		}
	})
}
function mobileErrorView(C, A) {
	var B = "/?area=msg&cmd=mobile&id=" + C + "&t=" + new Date().getTime();
	if (A) {
		B += "&ep=" + $E(A)
	}
	ABMessage.getMessageView("msg1", B)
}
function cn2en(D) {
	var C = D.length;
	var B = "";
	for (var A = 0; A < C; A++) {
		if (D.charCodeAt(A) > 65280 && D.charCodeAt(A) < 65375) {
			B += String.fromCharCode(D.charCodeAt(A) - 65248)
		} else {
			B += String.fromCharCode(D.charCodeAt(A))
		}
	}
	return B
}
function ContactsDropClose() {
	if ($(contactDropDownId) && $(contactDropDownId).style.display == "block") {
		sORh(contactDropDownId, "none")
	}
}
function checkPhoneRepeat() {
	with(document.mobile) {
		var phones = "";
		for (var i = 0; i < 5; i++) {
			var sbj2 = "p_name" + i;
			var sbj1 = "s_name" + i;
			var sbj4 = "s" + i;
			var sbj3 = "p" + i;
			var tmp = phone[i].value.strip();
			if (tmp.length != 11) {
				continue
			}
			if (phones.search(tmp) != -1) {
				sORh(sbj1, "none");
				$(sbj2).innerHTML = "";
				sORh(sbj2, "none");
				sORh(sbj3, "none");
				sORh(sbj4, "block")
			} else {
				if ($(sbj4).style.display == "block") {
					var index = contactsList.indexOf(tmp);
					if (index != -1) {
						sORh(sbj1, "none");
						sORh(sbj3, "none");
						sORh(sbj4, "none");
						$(sbj2).innerHTML = contactsList[contactsList.indexOf(tmp) + 1];
						sORh(sbj2, "block")
					} else {
						sORh(sbj1, "block");
						sORh(sbj3, "none");
						sORh(sbj4, "none");
						$(sbj2).innerHTML = "";
						sORh(sbj2, "none")
					}
				}
			}
			phones += tmp + ","
		}
	}
}
function checkContactsPhone(F, J, H) {
	var G = $("phone_" + J).value.strip();
	var C = "p_name" + J;
	var D = "s_name" + J;
	var A = "s" + J;
	var B = "p" + J;
	var I = "";
	if (H == 0) {
		I = /^\d{0,11}$/
	} else {
		I = /^(\d{11}){0,}$/
	}
	if (!I.exec(G)) {
		sORh(D, "none");
		$(C).innerHTML = "";
		sORh(C, "none");
		sORh(B, "block");
		sORh(A, "none");
		return
	} else {
		sORh(D, "none");
		$(C).innerHTML = "";
		sORh(C, "none");
		sORh(B, "none");
		sORh(A, "none")
	}
	if (G.length == 11) {
		var E = contactsList.indexOf(G);
		if (E == -1) {
			sORh(B, "none");
			sORh(A, "none");
			$(C).innerHTML = "";
			sORh(C, "none");
			sORh(D, "block")
		} else {
			if ($(A).style.display == "none") {
				sORh(D, "none");
				sORh(B, "none");
				sORh(A, "none");
				$(C).innerHTML = contactsList[E + 1];
				sORh(C, "block")
			}
		}
		checkPhoneRepeat()
	}
}
function checkEnCode(C, A) {
	var B = C.value.strip();
	if (!B) {
		return
	}
	if (isNaN(B) && B) {
		sORh(A, "block")
	} else {
		new Ajax.Request("/", {
			method: "post",
			parameters: "area=msg&cmd=code&code=" + $E(B),
			onSuccess: function(D) {
				if (D.responseText == 1) {
					sORh(A, "none")
				} else {
					sORh(A, "block")
				}
			}
		})
	}
}
function copy(C) {
	try {
		var A = $(C);
		A.focus();
		A.select();
		var D = A.createTextRange();
		D.execCommand("Copy")
	} catch(B) {
		alert("您使用的浏览器不支持自动复制url功能，清选中url，以ctrl+c进行复制.")
	}
}
function copy2Subject(D) {
	var B = D.value.strip();
	var E = document.email.subject.value;
	var A = 0;
	for (var C = 0; C < B.length; C++) {
		if (B[C] == E[C]) {
			A = 1
		} else {
			A = 0
		}
	}
	if (A == 0) {
		document.email.subject.value = B + E
	}
}
function sendMobileMsg() {
	with(document.mobile) {
		var nos = "";
		var names = "";
		var checked = "";
		for (var i = 0; i < 5; i++) {
			var tmp = phone[i].value.strip();
			var tmp_name = name[i].value.strip();
			if (tmp_name == "姓名") {
				var tmp_name = ""
			}
			if ($("s" + i).style.display == "block" || $("p" + i).style.display == "block") {
				return
			}
			if ($("ckb_" + i).checked == true) {
				checked += i + ","
			}
			nos += cn2en(tmp) + ",";
			names += tmp_name + ",";
			if (tmp.length == 0) {
				continue
			} else {
				if (tmp.length != 11) {
					sORh("p" + i, "block");
					$("p_name" + i).innerHTML = "";
					sORh("p_name" + i, "none");
					sORh("s_name" + i, "none");
					sORh("s" + i, "none");
					return
				}
			}
		}
		if (!nos) {
			return
		}
		var c = code.value.strip();
		if (isNaN(c) || c.length < 5) {
			sORh("cco", "block");
			return
		}
		var ids = bid.value;
		var n = bname.value
	}
	var url = "/?mc=" + $E(ids);
	var params = "area=msg&cmd=mmsg&no=" + $E(c) + "&phone=" + $E(nos) + "&name=" + $E(n) + "&id=" + $E(ids) + "&names=" + $E(names) + "&checked=" + $E(checked);
	ABMessage.sendMessage(url, params, "msg1")
}
function sendMobileMsgDiscount(tid, pid) {
	with(document.mobile) {
		var nos = "";
		var names = "";
		var checked = "";
		for (var i = 0; i < 5; i++) {
			var tmp = phone[i].value.strip();
			var tmp_name = name[i].value.strip();
			if (tmp_name == "姓名") {
				var tmp_name = ""
			}
			if ($("s" + i).style.display == "block" || $("p" + i).style.display == "block") {
				return
			}
			if ($("ckb_" + i).checked == true) {
				checked += i + ","
			}
			nos += cn2en(tmp) + ",";
			names += tmp_name + ",";
			if (tmp.length == 0) {
				continue
			} else {
				if (tmp.length != 11) {
					sORh("p" + i, "block");
					$("p_name" + i).innerHTML = "";
					sORh("p_name" + i, "none");
					sORh("s_name" + i, "none");
					sORh("s" + i, "none");
					return
				}
			}
		}
		if (!nos) {
			return
		}
		var c = code.value.strip();
		if (isNaN(c) || c.length < 5) {
			sORh("cco", "block");
			return
		}
		var ids = bid.value;
		var n = bname.value
	}
	var url = "/?mc=" + $E(ids);
	var params = "area=msg&cmd=mmsg&no=" + $E(c) + "&phone=" + $E(nos) + "&name=" + $E(n) + "&id=" + $E(ids) + "&names=" + $E(names) + "&checked=" + $E(checked) + "&tid=" + tid + "&pid=" + pid;
	ABMessage.sendMessage(url, params, "msg1")
}
function sendMobileTrafficMsg(uid) {
	with(document.mobile) {
		var nos = "";
		var names = "";
		var checked = "";
		for (var i = 0; i < 5; i++) {
			var tmp = phone[i].value.strip();
			var tmp_name = name[i].value.strip();
			if (tmp_name == "姓名") {
				var tmp_name = ""
			}
			if ($("s" + i).style.display == "block" || $("p" + i).style.display == "block") {
				return
			}
			if ($("ckb_" + i).checked == true) {
				checked += i + ","
			}
			nos += cn2en(tmp) + ",";
			names += tmp_name + ",";
			if (tmp.length == 0) {
				continue
			} else {
				if (tmp.length != 11) {
					sORh("p" + i, "block");
					$("p_name" + i).innerHTML = "";
					sORh("p_name" + i, "none");
					sORh("s_name" + i, "none");
					sORh("s" + i, "none");
					return
				}
			}
		}
		if (!nos) {
			return
		}
		var c = code.value.strip();
		if (isNaN(c) || c.length < 5) {
			sORh("cco", "block");
			return
		}
		var ids = bid.value
	}
	var x1 = document.mobile.x1.value;
	var x2 = document.mobile.x2.value;
	var y1 = document.mobile.y1.value;
	var y2 = document.mobile.y2.value;
	var city = document.mobile.city.value;
	var origin = document.mobile.origin.value;
	var end = document.mobile.end.value;
	var index = document.mobile.index.value;
	var url = "/?area=msg&cmd=mmsg_traffic&no=" + $E(c) + "&phone=" + $E(nos) + "&names=" + $E(names) + "&checked=" + $E(checked);
	url += "&x1=" + x1 + "&x2=" + x2 + "&y1=" + y1 + "&y2=" + y2 + "&city=" + $E(city) + "&origin=" + $E(origin) + "&end=" + $E(end) + "&index=" + (index);
	if (BusManage.getJuHe()) {
		url += "&method=2"
	} else {
		if (BusManage.curOrderType) {
			url += "&rc=" + BusManage.curOrderType
		}
		if (BusManage.mark) {
			url += "&method=1"
		}
	}
	ABMessage.getMessageView("msg1", url)
}
function closeMsgViewAuto() {
	sORh("msg1", "none")
}
function printPage() {
	window.print()
}
function sethp() {
	new Ajax.Request("/", {
		method: "get",
		parameters: "area=common&cmd=sethomepage"
	})
}
function attachEventListener(F, D, E, C) {
	if (!F) {
		return
	}
	if (typeof F.addEventListener != "undefined") {
		F.addEventListener(D, E, C)
	} else {
		if (typeof F.attachEvent != "undefined") {
			var A = D + E;
			F["e" + A] = E;
			F[A] = function(G) {
				if (typeof G == "window.event") {
					G = window.event
				}
				F["e" + A](G)
			};
			F.attachEvent("on" + D, F[A])
		} else {
			D = "on" + D;
			if (typeof F[D] == "function") {
				var B = F[D];
				F[D] = function(G) {
					B();
					return E
				}
			} else {
				F[D] = E
			}
		}
	}
}
function detachEventListener(E, C, D, B) {
	if (typeof E.removeEventListener != "undefined") {
		E.removeEventListener(C, D, B)
	} else {
		if (typeof E.detachEvent != "undefined") {
			var A = C + D;
			E.detachEvent("on" + C, E[A]);
			E["e" + A] = null;
			E[A] = null
		} else {
			E["on" + C] = null
		}
	}
}
function cancelEvent(A) {
	var A = A ? A: window.event;
	if (A.stopPropagation) {
		A.stopPropagation()
	}
	if (A.preventDefault) {
		A.preventDefault()
	}
	A.cancelBubble = true;
	A.cancel = true;
	A.returnValue = false;
	return false
}
function userSuggest(C) {
	var B = location.href;
	var A = C.href + "&url=" + $E(B);
	window.open(A, "__target")
}


attachEventListener(window, "load",
function() {
	if (ABBrowser.isIE()) {
		document.execCommand("BackgroundImageCache", false, true)
	}
},
false);
function isCityDomain() {
	var A = ["beijing", "shanghai", "tianjin", "chongqing", "hefei", "fuzhou", "guangzhou", "nanning", "guiyang", "lanzhou", "haikou", "shijiazhuang", "zhengzhou", "wuhan", "changsha", "haerbin", "changchun", "nanjing", "nanchang", "shenyang", "huhehaote", "taiyuan", "xian", "jinan", "chengdu", "wulumuqi", "kunming", "hangzhou", "shenzhen", "xiamen", "ningbo", "qingdao", "dalian", "suzhou"];
	for (var B = 0; B < A.length; B++) {
		if (location.hostname.indexOf(A[B]) == 0) {
			return true
		}
	}
	return false
}
var curPosition = -1;
var totalResultNum = 0;
var curInput = null;
var pulldownId = "address_drop";
var pulldownAjax = null;
function responseInput(C, B) {
	if (!$(pulldownId)) {
		return
	}
	var A = $(pulldownId).getElementsByTagName("a");
	if (!A.length || $(pulldownId).style.display == "none") {
		return
	}
	totalResultNum = A.length;
	response(C, B ? B: this, pulldownId)
}
function response(E, B, D) {
	var A = document.getElementById(D).getElementsByTagName("a");
	var C = document.getElementById(D).getElementsByTagName("input");
	if (E.keyCode == 38) {
		curPosition -= 1;
		if (curPosition <= -1) {
			curPosition = totalResultNum - 2;
			A[0].className = ""
		} else {
			A[curPosition + 1].className = ""
		}
		if (A[curPosition].innerHTML == "注册或登陆" || A[curPosition].innerHTML == "设置居住地" || A[curPosition].innerHTML == "设置工作地") {} else {
			B.value = C[curPosition] ? C[curPosition].name: A[curPosition].innerHTML.replace(/<(.+)>.*<\/\1>/, "")
		}
		A[curPosition].className = "drop_item"
	} else {
		if (E.keyCode == 40) {
			curPosition += 1;
			if (curPosition >= totalResultNum - 1) {
				A[curPosition - 1].className = "";
				curPosition = 0
			} else {
				if (curPosition > 0) {
					A[curPosition - 1].className = ""
				}
			}
			if (A[curPosition].innerHTML == "注册或登陆" || A[curPosition].innerHTML == "设置居住地" || A[curPosition].innerHTML == "设置工作地") {} else {
				B.value = C[curPosition] ? C[curPosition].name: A[curPosition].innerHTML.replace(/<(.+)>.*<\/\1>/, "")
			}
			A[curPosition].className = "drop_item"
		}
	}
}
function suggestRoadAddrInCity(B, C) {
	var A = C ? C: getCookie("city");
	suggestAddr(B, A, 6)
}
function suggestAddrInCity(B, C) {
	var A = C ? C: getCookie("city");
	suggestAddr(B, A, 2)
}
function suggestAddr(G, D, F, I) {
	if (I) {
		var H = G
	} else {
		var H = G.srcElement ? G.srcElement: G.target
	}
	curInput = H;
	var B = D;
	var C = parseInt(F, 10) ? parseInt(F, 10) : 2;
	if (!B && !F) {
		B = $("pulldownCity") ? $("pulldownCity").value: "";
		C = 3
	}
	if (!B && !I) {
		return
	}
	var E = getAddr(H);
	if (!B && !I) {
		return
	}
	if (!E && !I) {
		$(pulldownId).hide();
		return
	}
	if (!I && E) {
		var A = "/addr?mode=" + $E(C) + "&s=addr&n=10&rc=1&city=" + $E(B) + "&key=" + $E(E)
	} else {
		var A = "/SugUserAddr.php"
	}
	suggestInput(G, A, H)
}
function suggestKeyword(D, E) {
	var C = D.srcElement ? D.srcElement: D.target;
	curInput = C;
	if ((!E && $("pulldownCity") && $("pulldownCity").value)) {
		E = $("pulldownCity").value
	} else {
		if (typeof(E) == "object") {
			E = E.value ? E.value: E.innerHTML
		} else {
			if (!E) {
				return
			}
		}
	}
	var B = getWhat(C);
	if (!E) {
		return
	}
	if (!B) {
		$(pulldownId).hide();
		return
	}
	var A = "/key?mode=7&s=key&n=10&rc=1&city=" + $E(E) + "&key=" + $E(B);
	suggestInput(D, A, C)
}
function suggestCity(D) {
	var C = D.srcElement ? D.srcElement: D.target;
	curInput = C;
	var B = curInput.value;
	if (B == "") {
		$(pulldownId).hide();
		return
	}
	var A = "/?area=place&cmd=selectcity&query=" + $E(B);
	suggestInput(D, A, C)
}
function blurContactsInput(A) {
	if (A.value == "") {
		A.value = "姓名";
		A.style.color = "#BBBBBB"
	}
}
function focusContactsInput(D, B) {
	if (D.value == "姓名") {
		D.value = "";
		D.style.color = ""
	}
	try {
		if (ABBrowser.isIE()) {
			var A = document.selection.createRange();
			if (!A.text) {
				A.moveStart("character", 0);
				A.select()
			}
		}
	} catch(C) {}
}
suggestAllContacts.noRealSuggest = false;
function suggestAllContacts(C, B) {
	if (suggestAllContacts.noRealSuggest) {
		suggestAllContacts.noRealSuggest = false;
		return
	}
	var A = C.srcElement ? C.srcElement: C.target;
	curInput = A;
	setContactsDrop();
	suggestContactsInput(C, A)
}
function mouseOverContacts(A) {
	mouseOverContactsDiv(A, contactDropDownId)
}
function mouseOverContactsDiv(D, B) {
	if (!B) {
		B = contactDropDownId
	}
	var A = document.getElementById(B).getElementsByTagName("a");
	for (var C = 0; C < totalContactNum - 1; C++) {
		if (A[C] == D) {
			curContactPos = C;
			A[C].className = "drop_item"
		} else {
			A[C].className = ""
		}
	}
}
var curContactPos = -1;
var totalContactNum = 0;
var curInput = null;
var contactDropDownId = "contacts_drop";
attachEventListener(window, "load",
function() {
	if (!$(contactDropDownId)) {
		var A = document.createElement("div");
		A.id = contactDropDownId;
		document.body.appendChild(A)
	}
	attachEventListener(document, "click",
	function() {
		sORh(contactDropDownId, "none")
	},
	false);
	attachEventListener(document, "keydown",
	function(B) {
		var C = B || window.event;
		if (C && C.keyCode == 9) {
			sORh(contactDropDownId, "none")
		}
	},
	false)
},
false);
function setContactsDrop() {
	if (!$(contactDropDownId)) {
		return
	}
	var C = curInput;
	var B = C.offsetTop,
	A = C.offsetLeft;
	while (C = C.offsetParent) {
		B += C.offsetTop;
		A += C.offsetLeft
	}
	$(contactDropDownId).style.left = (A) + "px";
	$(contactDropDownId).style.top = (B) + "px";
	$(contactDropDownId).style.zIndex = "100001";
	$("msg1").style.zIndex = "100000"
}
function selectContactsItem(A) {
	curInput.value = A;
	suggestAllContacts.noRealSuggest = true;
	curInput.focus();
	curInput.blur();
	sORh(contactDropDownId, "none")
}
function suggestContactsInput(M, N) {
	if (!$(contactDropDownId) || !(contactsDropList)) {
		return
	}
	if (M.keyCode == 38 || M.keyCode == 40) {
		if ($(contactDropDownId).innerHTML && $(contactDropDownId).style.display == "none") {
			$(contactDropDownId).innerHTML = ""
		}
		return
	} else {
		if (M.keyCode == 13) {
			$(contactDropDownId).hide();
			return
		} else {
			if (M.keyCode == 9 || M.keyCode == 37 || M.keyCode == 39) {
				return
			}
		}
	}
	if (contactsDropList) {
		var I = contactsDropList;
		if (I) {
			$(contactDropDownId).innerHTML = "<iframe id='adir' frameborder='0' height='0'></iframe><div id='ssssss'>" + I + "</div>"
		} else {
			$(contactDropDownId).innerHTML = ""
		}
		var J = $(contactDropDownId).getElementsByTagName("INPUT");
		if ($("ssssss")) {
			if (ABBrowser.isIE() && J.length >= 20) {
				$("ssssss").style.height = "200px"
			}
		}
		if (I) {
			var F = $(contactDropDownId).style;
			if ($(contactDropDownId).visible() == false) {
				F.left = "-1000px"
			}
			$(contactDropDownId).show("block");
			var O = N;
			var P = N.offsetTop,
			K = N.clientHeight,
			G = N.offsetLeft,
			D = N.type;
			var C = false;
			while (N = N.offsetParent) {
				P += N.offsetTop;
				G += N.offsetLeft
			}
			var H = O.offsetWidth;
			var B = $("ssssss").offsetHeight;
			var A = ABBrowser.getViewWidth(),
			L = ABBrowser.getScrollLeft(),
			E = ABBrowser.getScrollTop();
			if (ABBrowser.getViewHeight() + E - P - K >= B) {
				F.top = ((D == "image") ? P + K: P + K + 6) + "px"
			} else {
				F.top = ((P - E < B) ? ((D == "image") ? P + K: P + K + 6) : P - B - 2) + "px"
			}
			if (A + L - G >= H) {
				F.left = G + "px"
			} else {
				F.left = ((A >= H) ? A - H + L: L) + "px"
			}
		} else {
			sORh(contactDropDownId, "none")
		}
		curContactPos = -1;
		totalContactNum = 0
	}
}
var channel = "";
function suggestInput(C, A, B) {
	if (!$(pulldownId)) {
		return
	}
	if (C.keyCode == 38 || C.keyCode == 40) {
		if ($(pulldownId).innerHTML && $(pulldownId).style.display == "none") {
			$(pulldownId).innerHTML = ""
		}
		return
	} else {
		if (C.keyCode == 13) {
			$(pulldownId).hide();
			return
		} else {
			if (C.keyCode == 9 || C.keyCode == 37 || C.keyCode == 39) {
				return
			}
		}
	}
	if (pulldownAjax && pulldownAjax.abort) {
		pulldownAjax.abort()
	}
	pulldownAjax = new Ajax.Request(A, {
		method: "get",
		onSuccess: function(a) {
			var V = a.responseText;
			if (isUserAddr) {
				if (!sugUserAddr) {
					sugUserAddr = V
				} else {
					V = sugUserAddr
				}
			}
			if (V) {
				$(pulldownId).innerHTML = "<iframe id='adir' frameborder='0' height='0'></iframe><div id='ssss'>" + V + "</div>"
			} else {
				$(pulldownId).innerHTML = ""
			}
			var P = $(pulldownId).getElementsByTagName("INPUT");
			if ($("ssss")) {
				var K = $("ssss").clientHeight;
				K = K ? K: 18 * (P.length);
				$("adir").style.height = K + "px"
			}
			if (V) {
				var U = $(pulldownId).style;
				if ($(pulldownId).visible() == false) {
					U.left = "-1000px"
				}
				$(pulldownId).show("block");
				var N = B;
				var Q = B.offsetTop,
				Z = B.clientHeight,
				W = B.offsetLeft,
				T = B.type;
				var X = false;
				while (B = B.offsetParent) {
					Q += B.offsetTop;
					W += B.offsetLeft;
					if (ABBrowser.isIE()) {
						var J = B.style.paddingLeft;
						J = J ? parseInt(J, 10) : 0;
						var G = B.style.paddingTop;
						G = G ? parseInt(G, 10) : 0;
						var S = B.style.borderLeft;
						S = S ? parseInt(S, 10) : 0;
						var L = B.style.borderTop;
						L = L ? parseInt(L, 10) : 0;
						var H = B.style.marginLeft;
						H = H ? parseInt(H, 10) : 0;
						var E = B.style.marginTop;
						E = E ? parseInt(E, 10) : 0;
						var I = J + S + H;
						var F = G + L + E;
						if ("msg_addr_down" == B.id) {
							X = true
						}
						Q -= F;
						if (!X) {
							W -= I
						}
					}
				}
				var D = N.offsetWidth;
				var M = $("ssss").offsetHeight;
				var O = ABBrowser.getViewWidth(),
				Y = ABBrowser.getScrollLeft(),
				R = ABBrowser.getScrollTop();
				if (ABBrowser.getViewHeight() + R - Q - Z >= M) {
					if (channel == "traffic") {
						if (ABBrowser.isIE()) {
							U.top = ((T == "image") ? Q + Z: Q + Z + 6 - 40) + "px"
						} else {
							U.top = ((T == "image") ? Q + Z: Q + Z + 6) + "px"
						}
					} else {
						U.top = ((T == "image") ? Q + Z: Q + Z + 6) + "px"
					}
				} else {
					if (channel == "traffic") {
						if (ABBrowser.isIE()) {
							U.top = ((Q - R < M) ? ((T == "image") ? Q + Z: Q + Z + 6) : Q - M - 2 - 40) + "px"
						} else {
							U.top = ((Q - R < M) ? ((T == "image") ? Q + Z: Q + Z + 6) : Q - M - 2) + "px"
						}
					} else {
						U.top = ((Q - R < M) ? ((T == "image") ? Q + Z: Q + Z + 6) : Q - M - 2) + "px"
					}
				}
				if (O + Y - W >= D) {
					U.left = W + "px"
				} else {
					U.left = ((O >= D) ? O - D + Y: Y) + "px"
				}
			} else {
				sORh(pulldownId, "none")
			}
			curPosition = -1;
			totalResultNum = 0
		}
	})
}
function jumpToDefaultPage() {
	var B = getCookie("city");
	var A = "/?city=" + $E(B);
	window.open(A, "_self")
}
function locate(D, E, C, B, A) {
	curInput.value = E;
	if (1 == D) {
		setCookie("city", E);
		delCookie("addr");
		suggestChangeCityTip(E);
		setTimeout("jumpToDefaultPage()", 1);
		return
	}
	sORh(pulldownId, "none")
}
function selectItem(A) {
	curInput.value = A;
	sORh(pulldownId, "none")
}
var isUserAddr = false;
var sugUserAddr = "";
attachEventListener(window, "load",
function() {
	if (!$(pulldownId)) {
		var A = document.createElement("div");
		A.id = pulldownId;
		document.body.appendChild(A)
	}
	attachEventListener(document, "click",
	function() {
		if (isUserAddr) {
			setTimeout("isUserAddr=false;", 1000);
			return
		}
		sORh(pulldownId, "none");
		if (pulldownAjax && pulldownAjax.abort) {
			pulldownAjax.abort()
		}
	},
	false);
	attachEventListener(document, "mouseup",
	function() {
		if (isUserAddr) {
			setTimeout("isUserAddr=false;", 1000);
			return
		}
		sORh(pulldownId, "none");
		if (pulldownAjax && pulldownAjax.abort) {
			pulldownAjax.abort()
		}
	},
	false);
	attachEventListener(document, "keydown",
	function(B) {
		if (isUserAddr) {
			setTimeout("isUserAddr=false;", 1000);
			return
		}
		var C = B || window.event;
		if (C && C.keyCode == 9) {
			sORh(pulldownId, "none");
			if (pulldownAjax && pulldownAjax.abort) {
				pulldownAjax.abort()
			}
		}
	},
	false)
},
false);
attachEventListener(window, "load",
function() {
	var B = document.getElementsByTagName("span");
	for (var A = 0; A < B.length; A++) {
		var C = "";
		if (B[A].currentStyle) {
			C = B[A].currentStyle.display
		} else {
			if (window.getComputedStyle) {
				C = window.getComputedStyle(B[A], null).display
			}
		}
		if (C == "none" && /^m_\d+$/.test(B[A].className) == true) {
			B[A].innerHTML = ""
		}
	}
},
false);
function sendAjaxGetForLog(A) {
	sendHtmlReqForlog(A);
	return true
}
function sendHtmlReqForlog(I, E, D, A) {
	var F = Math.random() * 9 + 1;
	var C = new Date();
	var G = C.getTime() + F;
	var H = new Image();
	var B = getCookie("PHPSESSID");
	if (E == null) {
		H.src = "/files/StatUrl.html?randcode=" + G + "&sid=" + B + "&frm=" + I
	} else {
		var J = E.getAttribute("href");
		if (J != null) {
			if (D && A) {
				H.src = "/files/StatUrl.html?randcode=" + G + "&sid=" + B + "&turl=" + encodeURIComponent(J) + "&ln=" + D + "&pn=" + A + "&frm=" + I
			} else {
				H.src = "/files/StatUrl.html?randcode=" + G + "&sid=" + B + "&turl=" + encodeURIComponent(J) + "&frm=" + I
			}
		} else {
			H.src = "/files/StatUrl.html?randcode=" + G + "&sid=" + B + "&frm=" + I
		}
	}
	return true
}
var DomReady = {
	add: function(A) {
		DomReady.bind();
		if (DomReady.isReady) {
			A()
		} else {
			DomReady.funList.push(A)
		}
	},
	isReady: false,
	funList: [],
	run: function() {
		if (!DomReady.isReady) {
			DomReady.isReady = true;
			if (DomReady.funList) {
				for (var B = 0; B < DomReady.funList.length; ++B) {
					try {
						DomReady.funList[B]()
					} catch(A) {
						continue
					}
				}
				DomReady.funList = null
			}
		}
	},
	isBind: false,
	bind: function() {
		if (DomReady.isBind) {
			return
		}
		DomReady.isBind = true;
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded",
			function() {
				document.removeEventListener("DOMContentLoaded", arguments.callee, false);
				DomReady.run()
			},
			false)
		} else {
			if (document.attachEvent) {
				document.attachEvent("onreadystatechange",
				function() {
					if (document.readyState === "complete") {
						document.detachEvent("onreadystatechange", arguments.callee);
						DomReady.run()
					}
				});
				if (document.documentElement.doScroll && window == window.top) { (function() {
						if (DomReady.isReady) {
							return
						}
						try {
							document.documentElement.doScroll("left")
						} catch(A) {
							setTimeout(arguments.callee, 0);
							return
						}
						DomReady.run()
					})()
				}
			}
		}
		if (window.addEventListener) {
			window.addEventListener("load", DomReady.run, false)
		} else {
			if (window.attachEvent) {
				window.attachEvent("onload", DomReady.run)
			} else {
				window.onload = DomReady.run
			}
		}
	}
};
var BounceRate = {
	init: function(B, A) {
		this.randcode = (new Date()).getTime() + (Math.random() * 9 + 1);
		this.cookie = getCookie("PHPSESSID");
		this.pKey = $E(B);
		this.pValue = $E(A);
		this.frm = B + "_rate";
		setTimeout("BounceRate.run(0)", 0);
		setTimeout("BounceRate.run(5)", 5000);
		setTimeout("BounceRate.run(10)", 10000);
		setTimeout("BounceRate.run(30)", 30000)
	},
	run: function(B) {
		var A = new Image();
		A.src = "/files/StatUrl.html?randcode=" + BounceRate.randcode + "&sid=" + BounceRate.cookie + "&" + BounceRate.pKey + "=" + BounceRate.pValue + "&time=" + B + "&frm=" + BounceRate.frm
	}
};
var HeadSearch = {
	init: function() {
		this.addrNote = document.getElementById("addr_note");
		this.addrInput = document.getElementById("addr");
		if (!this.addrInput) {
			return
		}
		attachEventListener(this.addrInput, "focus", this.addrNoteShow, false);
		attachEventListener(this.addrInput, "blur", this.addrNoteHide, false);
		attachEventListener(this.addrInput, "keydown", this.addrNoteHide, false);
		attachEventListener(document, "click", this.cancelAddrNote, false);
		attachEventListener(document, "mousemove", this.cancelAddrNote, false)
	},
	cancelAddrNote: function() {
		if (document.attachEvent && window.event.type == "mousemove") {
			HeadSearch.mouseCount = HeadSearch.mouseCount || 0; ++HeadSearch.mouseCount;
			if (HeadSearch.mouseCount > 8) {
				HeadSearch.addrNote.style.display = "none"
			} else {
				return
			}
		} else {
			HeadSearch.addrNote.style.display = "none"
		}
		detachEventListener(document, "click", HeadSearch.cancelAddrNote, false);
		detachEventListener(document, "mousemove", HeadSearch.cancelAddrNote, false)
	},
	addrNoteShow: function() {
		var A = HeadSearch.addrInput.value;
		if (!A || A == "全市") {
			HeadSearch.addrNote.style.display = "block"
		}
	},
	addrNoteHide: function() {
		HeadSearch.addrNote.style.display = "none"
	}
};
DomReady.add(function() {
	HeadSearch.init()
})
/* - prototype.js - */
var Prototype = {
	Version: "1.5.1",
	Browser: {
		IE: !!(window.attachEvent && !window.opera),
		Opera: !!window.opera,
		WebKit: navigator.userAgent.indexOf("AppleWebKit/") > -1,
		Gecko: navigator.userAgent.indexOf("Gecko") > -1 && navigator.userAgent.indexOf("KHTML") == -1
	},
	BrowserFeatures: {
		XPath: !!document.evaluate,
		ElementExtensions: !!window.HTMLElement,
		SpecificElementExtensions: (document.createElement("div").__proto__ !== document.createElement("form").__proto__)
	},
	ScriptFragment: "<script[^>]*>([\u0001-\uFFFF]*?)<\/script>",
	JSONFilter: /^\/\*-secure-\s*(.*)\s*\*\/\s*$/,
	emptyFunction: function() {},
	K: function(A) {
		return A
	}
};
var Class = {
	create: function() {
		return function() {
			this.initialize.apply(this, arguments)
		}
	}
};
var Abstract = new Object();
Object.extend = function(A, C) {
	for (var B in C) {
		A[B] = C[B]
	}
	return A
};
Object.extend(Object, {
	inspect: function(A) {
		try {
			if (A === undefined) {
				return "undefined"
			}
			if (A === null) {
				return "null"
			}
			return A.inspect ? A.inspect() : A.toString()
		} catch(B) {
			if (B instanceof RangeError) {
				return "..."
			}
			throw B
		}
	},
	toJSON: function(A) {
		var C = typeof A;
		switch (C) {
		case "undefined":
		case "function":
		case "unknown":
			return;
		case "boolean":
			return A.toString()
		}
		if (A === null) {
			return "null"
		}
		if (A.toJSON) {
			return A.toJSON()
		}
		if (A.ownerDocument === document) {
			return
		}
		var B = [];
		for (var E in A) {
			var D = Object.toJSON(A[E]);
			if (D !== undefined) {
				B.push(E.toJSON() + ": " + D)
			}
		}
		return "{" + B.join(", ") + "}"
	},
	keys: function(A) {
		var B = [];
		for (var C in A) {
			B.push(C)
		}
		return B
	},
	values: function(B) {
		var A = [];
		for (var C in B) {
			A.push(B[C])
		}
		return A
	},
	clone: function(A) {
		return Object.extend({},
		A)
	}
});
Function.prototype.bind = function() {
	var A = this,
	C = $A(arguments),
	B = C.shift();
	return function() {
		if (typeof $A == "function") {
			return A.apply(B, C.concat($A(arguments)))
		}
	}
};
Function.prototype.bindAsEventListener = function(C) {
	var A = this,
	B = $A(arguments),
	C = B.shift();
	return function(D) {
		return A.apply(C, [D || window.event].concat(B))
	}
};
Object.extend(Number.prototype, {
	toColorPart: function() {
		return this.toPaddedString(2, 16)
	},
	succ: function() {
		return this + 1
	},
	times: function(A) {
		$R(0, this, true).each(A);
		return this
	},
	toPaddedString: function(C, B) {
		var A = this.toString(B || 10);
		return "0".times(C - A.length) + A
	},
	toJSON: function() {
		return isFinite(this) ? this.toString() : "null"
	}
});
Date.prototype.toJSON = function() {
	return '"' + this.getFullYear() + "-" + (this.getMonth() + 1).toPaddedString(2) + "-" + this.getDate().toPaddedString(2) + "T" + this.getHours().toPaddedString(2) + ":" + this.getMinutes().toPaddedString(2) + ":" + this.getSeconds().toPaddedString(2) + '"'
};
var Try = {
	these: function() {
		var C;
		for (var B = 0,
		D = arguments.length; B < D; B++) {
			var A = arguments[B];
			try {
				C = A();
				break
			} catch(E) {}
		}
		return C
	}
};
var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
	initialize: function(B, A) {
		this.callback = B;
		this.frequency = A;
		this.currentlyExecuting = false;
		this.registerCallback()
	},
	registerCallback: function() {
		this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000)
	},
	stop: function() {
		if (!this.timer) {
			return
		}
		clearInterval(this.timer);
		this.timer = null
	},
	onTimerEvent: function() {
		if (!this.currentlyExecuting) {
			try {
				this.currentlyExecuting = true;
				this.callback(this)
			} finally {
				this.currentlyExecuting = false
			}
		}
	}
};
Object.extend(String, {
	interpret: function(A) {
		return A == null ? "": String(A)
	},
	specialChar: {
		"\b": "\\b",
		"\t": "\\t",
		"\n": "\\n",
		"\f": "\\f",
		"\r": "\\r",
		"\\": "\\\\"
	}
});
Object.extend(String.prototype, {
	gsub: function(E, C) {
		var A = "",
		D = this,
		B;
		C = arguments.callee.prepareReplacement(C);
		while (D.length > 0) {
			if (B = D.match(E)) {
				A += D.slice(0, B.index);
				A += String.interpret(C(B));
				D = D.slice(B.index + B[0].length)
			} else {
				A += D,
				D = ""
			}
		}
		return A
	},
	sub: function(C, A, B) {
		A = this.gsub.prepareReplacement(A);
		B = B === undefined ? 1 : B;
		return this.gsub(C,
		function(D) {
			if (--B < 0) {
				return D[0]
			}
			return A(D)
		})
	},
	scan: function(B, A) {
		this.gsub(B, A);
		return this
	},
	truncate: function(B, A) {
		B = B || 30;
		A = A === undefined ? "...": A;
		return this.length > B ? this.slice(0, B - A.length) + A: this
	},
	strip: function() {
		return this.replace(/^\s+/, "").replace(/\s+$/, "")
	},
	stripTags: function() {
		return this.replace(/<\/?[^>]+>/gi, "")
	},
	stripScripts: function() {
		return this.replace(new RegExp(Prototype.ScriptFragment, "img"), "")
	},
	extractScripts: function() {
		var B = new RegExp(Prototype.ScriptFragment, "img");
		var A = new RegExp(Prototype.ScriptFragment, "im");
		return (this.match(B) || []).map(function(C) {
			return (C.match(A) || ["", ""])[1]
		})
	},
	evalScripts: function() {
		return this.extractScripts().map(function(script) {
			return eval(script)
		})
	},
	escapeHTML: function() {
		var A = arguments.callee;
		A.text.data = this;
		return A.div.innerHTML
	},
	unescapeHTML: function() {
		var A = document.createElement("div");
		A.innerHTML = this.stripTags();
		return A.childNodes[0] ? (A.childNodes.length > 1 ? $A(A.childNodes).inject("",
		function(B, C) {
			return B + C.nodeValue
		}) : A.childNodes[0].nodeValue) : ""
	},
	toQueryParams: function(B) {
		var A = this.strip().match(/([^?#]*)(#.*)?$/);
		if (!A) {
			return {}
		}
		return A[1].split(B || "&").inject({},
		function(E, F) {
			if ((F = F.split("="))[0]) {
				var C = decodeURIComponent(F.shift());
				var D = F.length > 1 ? F.join("=") : F[0];
				if (D != undefined) {
					D = decodeURIComponent(D)
				}
				if (C in E) {
					if (E[C].constructor != Array) {
						E[C] = [E[C]]
					}
					E[C].push(D)
				} else {
					E[C] = D
				}
			}
			return E
		})
	},
	toArray: function() {
		return this.split("")
	},
	succ: function() {
		return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1)
	},
	times: function(C) {
		var A = "";
		for (var B = 0; B < C; B++) {
			A += this
		}
		return A
	},
	camelize: function() {
		var D = this.split("-"),
		A = D.length;
		if (A == 1) {
			return D[0]
		}
		var C = this.charAt(0) == "-" ? D[0].charAt(0).toUpperCase() + D[0].substring(1) : D[0];
		for (var B = 1; B < A; B++) {
			C += D[B].charAt(0).toUpperCase() + D[B].substring(1)
		}
		return C
	},
	capitalize: function() {
		return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase()
	},
	underscore: function() {
		return this.gsub(/::/, "/").gsub(/([A-Z]+)([A-Z][a-z])/, "#{1}_#{2}").gsub(/([a-z\d])([A-Z])/, "#{1}_#{2}").gsub(/-/, "_").toLowerCase()
	},
	dasherize: function() {
		return this.gsub(/_/, "-")
	},
	inspect: function(B) {
		var A = this.gsub(/[\x00-\x1f\\]/,
		function(C) {
			var D = String.specialChar[C[0]];
			return D ? D: "\\u00" + C[0].charCodeAt().toPaddedString(2, 16)
		});
		if (B) {
			return '"' + A.replace(/"/g, '\\"') + '"'
		}
		return "'" + A.replace(/'/g, "\\'") + "'"
	},
	toJSON: function() {
		return this.inspect(true)
	},
	unfilterJSON: function(A) {
		return this.sub(A || Prototype.JSONFilter, "#{1}")
	},
	evalJSON: function(sanitize) {
		var json = this.unfilterJSON();
		try {
			if (!sanitize || (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(json))) {
				return eval("(" + json + ")")
			}
		} catch(e) {}
		throw new SyntaxError("Badly formed JSON string: " + this.inspect())
	},
	include: function(A) {
		return this.indexOf(A) > -1
	},
	startsWith: function(A) {
		return this.indexOf(A) === 0
	},
	endsWith: function(A) {
		var B = this.length - A.length;
		return B >= 0 && this.lastIndexOf(A) === B
	},
	empty: function() {
		return this == ""
	},
	blank: function() {
		return /^\s*$/.test(this)
	}
});
if (Prototype.Browser.WebKit || Prototype.Browser.IE) {
	Object.extend(String.prototype, {
		escapeHTML: function() {
			return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
		},
		unescapeHTML: function() {
			return this.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">")
		}
	})
}
String.prototype.gsub.prepareReplacement = function(B) {
	if (typeof B == "function") {
		return B
	}
	var A = new Template(B);
	return function(C) {
		return A.evaluate(C)
	}
};
String.prototype.parseQuery = String.prototype.toQueryParams;
Object.extend(String.prototype.escapeHTML, {
	div: document.createElement("div"),
	text: document.createTextNode("")
});
with(String.prototype.escapeHTML) {
	div.appendChild(text)
}
var Template = Class.create();
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
Template.prototype = {
	initialize: function(A, B) {
		this.template = A.toString();
		this.pattern = B || Template.Pattern
	},
	evaluate: function(A) {
		return this.template.gsub(this.pattern,
		function(B) {
			var C = B[1];
			if (C == "\\") {
				return B[2]
			}
			return C + String.interpret(A[B[3]])
		})
	}
};
var $break = {},
$continue = new Error('"throw $continue" is deprecated, use "return" instead');
var Enumerable = {
	each: function(B) {
		var A = 0;
		try {
			this._each(function(D) {
				B(D, A++)
			})
		} catch(C) {
			if (C != $break) {
				throw C
			}
		}
		return this
	},
	eachSlice: function(C, B) {
		var A = -C,
		D = [],
		E = this.toArray();
		while ((A += C) < E.length) {
			D.push(E.slice(A, A + C))
		}
		return D.map(B)
	},
	all: function(B) {
		var A = true;
		this.each(function(D, C) {
			A = A && !!(B || Prototype.K)(D, C);
			if (!A) {
				throw $break
			}
		});
		return A
	},
	any: function(B) {
		var A = false;
		this.each(function(D, C) {
			if (A = !!(B || Prototype.K)(D, C)) {
				throw $break
			}
		});
		return A
	},
	collect: function(B) {
		var A = [];
		this.each(function(D, C) {
			A.push((B || Prototype.K)(D, C))
		});
		return A
	},
	detect: function(B) {
		var A;
		this.each(function(D, C) {
			if (B(D, C)) {
				A = D;
				throw $break
			}
		});
		return A
	},
	findAll: function(B) {
		var A = [];
		this.each(function(D, C) {
			if (B(D, C)) {
				A.push(D)
			}
		});
		return A
	},
	grep: function(C, B) {
		var A = [];
		this.each(function(F, E) {
			var D = F.toString();
			if (D.match(C)) {
				A.push((B || Prototype.K)(F, E))
			}
		});
		return A
	},
	include: function(A) {
		var B = false;
		this.each(function(C) {
			if (C == A) {
				B = true;
				throw $break
			}
		});
		return B
	},
	inGroupsOf: function(B, A) {
		A = A === undefined ? null: A;
		return this.eachSlice(B,
		function(C) {
			while (C.length < B) {
				C.push(A)
			}
			return C
		})
	},
	inject: function(A, B) {
		this.each(function(D, C) {
			A = B(A, D, C)
		});
		return A
	},
	invoke: function(B) {
		var A = $A(arguments).slice(1);
		return this.map(function(C) {
			return C[B].apply(C, A)
		})
	},
	max: function(B) {
		var A;
		this.each(function(D, C) {
			D = (B || Prototype.K)(D, C);
			if (A == undefined || D >= A) {
				A = D
			}
		});
		return A
	},
	min: function(B) {
		var A;
		this.each(function(D, C) {
			D = (B || Prototype.K)(D, C);
			if (A == undefined || D < A) {
				A = D
			}
		});
		return A
	},
	partition: function(C) {
		var B = [],
		A = [];
		this.each(function(E, D) { ((C || Prototype.K)(E, D) ? B: A).push(E)
		});
		return [B, A]
	},
	pluck: function(B) {
		var A = [];
		this.each(function(D, C) {
			A.push(D[B])
		});
		return A
	},
	reject: function(B) {
		var A = [];
		this.each(function(D, C) {
			if (!B(D, C)) {
				A.push(D)
			}
		});
		return A
	},
	sortBy: function(A) {
		return this.map(function(C, B) {
			return {
				value: C,
				criteria: A(C, B)
			}
		}).sort(function(E, D) {
			var C = E.criteria,
			B = D.criteria;
			return C < B ? -1 : C > B ? 1 : 0
		}).pluck("value")
	},
	toArray: function() {
		return this.map()
	},
	zip: function() {
		var B = Prototype.K,
		A = $A(arguments);
		if (typeof A.last() == "function") {
			B = A.pop()
		}
		var C = [this].concat(A).map($A);
		return this.map(function(E, D) {
			return B(C.pluck(D))
		})
	},
	size: function() {
		return this.toArray().length
	},
	inspect: function() {
		return "#<Enumerable:" + this.toArray().inspect() + ">"
	}
};
Object.extend(Enumerable, {
	map: Enumerable.collect,
	find: Enumerable.detect,
	select: Enumerable.findAll,
	member: Enumerable.include,
	entries: Enumerable.toArray
});
var $A = Array.from = function(D) {
	if (!D) {
		return []
	}
	if (D.toArray) {
		return D.toArray()
	} else {
		var B = [];
		for (var A = 0,
		C = D.length; A < C; A++) {
			B.push(D[A])
		}
		return B
	}
};
if (Prototype.Browser.WebKit) {
	$A = Array.from = function(D) {
		if (!D) {
			return []
		}
		if (! (typeof D == "function" && D == "[object NodeList]") && D.toArray) {
			return D.toArray()
		} else {
			var B = [];
			for (var A = 0,
			C = D.length; A < C; A++) {
				B.push(D[A])
			}
			return B
		}
	}
}
Object.extend(Array.prototype, Enumerable);
if (!Array.prototype._reverse) {
	Array.prototype._reverse = Array.prototype.reverse
}
Object.extend(Array.prototype, {
	_each: function(B) {
		for (var A = 0,
		C = this.length; A < C; A++) {
			B(this[A])
		}
	},
	clear: function() {
		this.length = 0;
		return this
	},
	first: function() {
		return this[0]
	},
	last: function() {
		return this[this.length - 1]
	},
	compact: function() {
		return this.select(function(A) {
			return A != null
		})
	},
	flatten: function() {
		return this.inject([],
		function(B, A) {
			return B.concat(A && A.constructor == Array ? A.flatten() : [A])
		})
	},
	without: function() {
		var A = $A(arguments);
		return this.select(function(B) {
			return ! A.include(B)
		})
	},
	indexOf: function(A) {
		for (var B = 0,
		C = this.length; B < C; B++) {
			if (this[B] == A) {
				return B
			}
		}
		return - 1
	},
	reverse: function(A) {
		return (A !== false ? this: this.toArray())._reverse()
	},
	reduce: function() {
		return this.length > 1 ? this: this[0]
	},
	uniq: function(A) {
		return this.inject([],
		function(D, C, B) {
			if (0 == B || (A ? D.last() != C: !D.include(C))) {
				D.push(C)
			}
			return D
		})
	},
	clone: function() {
		return [].concat(this)
	},
	size: function() {
		return this.length
	},
	inspect: function() {
		return "[" + this.map(Object.inspect).join(", ") + "]"
	},
	toJSON: function() {
		var A = [];
		this.each(function(B) {
			var C = Object.toJSON(B);
			if (C !== undefined) {
				A.push(C)
			}
		});
		return "[" + A.join(", ") + "]"
	}
});
Array.prototype.toArray = Array.prototype.clone;
function $w(A) {
	A = A.strip();
	return A ? A.split(/\s+/) : []
}
if (Prototype.Browser.Opera) {
	Array.prototype.concat = function() {
		var E = [];
		for (var B = 0,
		C = this.length; B < C; B++) {
			E.push(this[B])
		}
		for (var B = 0,
		C = arguments.length; B < C; B++) {
			if (arguments[B].constructor == Array) {
				for (var A = 0,
				D = arguments[B].length; A < D; A++) {
					E.push(arguments[B][A])
				}
			} else {
				E.push(arguments[B])
			}
		}
		return E
	}
}
var Hash = function(A) {
	if (A instanceof Hash) {
		this.merge(A)
	} else {
		Object.extend(this, A || {})
	}
};
Object.extend(Hash, {
	toQueryString: function(B) {
		var A = [];
		A.add = arguments.callee.addPair;
		this.prototype._each.call(B,
		function(D) {
			if (!D.key) {
				return
			}
			var C = D.value;
			if (C && typeof C == "object") {
				if (C.constructor == Array) {
					C.each(function(E) {
						A.add(D.key, E)
					})
				}
				return
			}
			A.add(D.key, C)
		});
		return A.join("&")
	},
	toJSON: function(A) {
		var B = [];
		this.prototype._each.call(A,
		function(D) {
			var C = Object.toJSON(D.value);
			if (C !== undefined) {
				B.push(D.key.toJSON() + ": " + C)
			}
		});
		return "{" + B.join(", ") + "}"
	}
});
Hash.toQueryString.addPair = function(A, C, B) {
	A = encodeURIComponent(A);
	if (C === undefined) {
		this.push(A)
	} else {
		this.push(A + "=" + (C == null ? "": encodeURIComponent(C)))
	}
};
Object.extend(Hash.prototype, Enumerable);
Object.extend(Hash.prototype, {
	_each: function(B) {
		for (var A in this) {
			var C = this[A];
			if (C && C == Hash.prototype[A]) {
				continue
			}
			var D = [A, C];
			D.key = A;
			D.value = C;
			B(D)
		}
	},
	keys: function() {
		return this.pluck("key")
	},
	values: function() {
		return this.pluck("value")
	},
	merge: function(A) {
		return $H(A).inject(this,
		function(B, C) {
			B[C.key] = C.value;
			return B
		})
	},
	remove: function() {
		var A;
		for (var B = 0,
		C = arguments.length; B < C; B++) {
			var D = this[arguments[B]];
			if (D !== undefined) {
				if (A === undefined) {
					A = D
				} else {
					if (A.constructor != Array) {
						A = [A]
					}
					A.push(D)
				}
			}
			delete this[arguments[B]]
		}
		return A
	},
	toQueryString: function() {
		return Hash.toQueryString(this)
	},
	inspect: function() {
		return "#<Hash:{" + this.map(function(A) {
			return A.map(Object.inspect).join(": ")
		}).join(", ") + "}>"
	},
	toJSON: function() {
		return Hash.toJSON(this)
	}
});
function $H(A) {
	if (A instanceof Hash) {
		return A
	}
	return new Hash(A)
}
if (function() {
	var A = 0,
	C = function(D) {
		this.key = D
	};
	C.prototype.key = "foo";
	for (var B in new C("bar")) {
		A++
	}
	return A > 1
} ()) {
	Hash.prototype._each = function(C) {
		var A = [];
		for (var B in this) {
			var D = this[B];
			if ((D && D == Hash.prototype[B]) || A.include(B)) {
				continue
			}
			A.push(B);
			var E = [B, D];
			E.key = B;
			E.value = D;
			C(E)
		}
	}
}
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
	initialize: function(C, A, B) {
		this.start = C;
		this.end = A;
		this.exclusive = B
	},
	_each: function(A) {
		var B = this.start;
		while (this.include(B)) {
			A(B);
			B = B.succ()
		}
	},
	include: function(A) {
		if (A < this.start) {
			return false
		}
		if (this.exclusive) {
			return A < this.end
		}
		return A <= this.end
	}
});
var $R = function(C, A, B) {
	return new ObjectRange(C, A, B)
};
var Ajax = {
	getTransport: function() {
		return Try.these(function() {
			return new XMLHttpRequest()
		},
		function() {
			return new ActiveXObject("Msxml2.XMLHTTP")
		},
		function() {
			return new ActiveXObject("Microsoft.XMLHTTP")
		}) || false
	},
	activeRequestCount: 0
};
Ajax.Responders = {
	responders: [],
	_each: function(A) {
		this.responders._each(A)
	},
	register: function(A) {
		if (!this.include(A)) {
			this.responders.push(A)
		}
	},
	unregister: function(A) {
		this.responders = this.responders.without(A)
	},
	dispatch: function(D, B, C, A) {
		this.each(function(E) {
			if (typeof E[D] == "function") {
				try {
					E[D].apply(E, [B, C, A])
				} catch(F) {}
			}
		})
	}
};
Object.extend(Ajax.Responders, Enumerable);
Ajax.Responders.register({
	onCreate: function() {
		Ajax.activeRequestCount++
	},
	onComplete: function() {
		Ajax.activeRequestCount--
	}
});
Ajax.Base = function() {};
Ajax.Base.prototype = {
	setOptions: function(A) {
		this.options = {
			method: "post",
			asynchronous: true,
			contentType: "application/x-www-form-urlencoded",
			encoding: "UTF-8",
			parameters: ""
		};
		Object.extend(this.options, A || {});
		this.options.method = this.options.method.toLowerCase();
		if (typeof this.options.parameters == "string") {
			this.options.parameters = this.options.parameters.toQueryParams()
		}
	}
};
Ajax.Request = Class.create();
Ajax.Request.Events = ["Uninitialized", "Loading", "Loaded", "Interactive", "Complete"];
Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
	_complete: false,
	initialize: function(B, A) {
		this.transport = Ajax.getTransport();
		this.setOptions(A);
		this.request(B)
	},
	request: function(A) {
		this.url = A;
		if (this.url.indexOf("http") != 0 && location.href != document.baseURI) {
			this.url = location.protocol + "//" + location.host + this.url
		}
		this.method = this.options.method;
		var C = Object.clone(this.options.parameters);
		if (! ["get", "post"].include(this.method)) {
			C["_method"] = this.method;
			this.method = "post"
		}
		this.parameters = C;
		if (C = Hash.toQueryString(C)) {
			if (this.method == "get") {
				this.url += (this.url.include("?") ? "&": "?") + C
			} else {
				if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
					C += "&_="
				}
			}
		}
		try {
			if (this.options.onCreate) {
				this.options.onCreate(this.transport)
			}
			Ajax.Responders.dispatch("onCreate", this, this.transport);
			this.transport.open(this.method.toUpperCase(), this.url, this.options.asynchronous);
			if (this.options.asynchronous) {
				setTimeout(function() {
					this.respondToReadyState(1)
				}.bind(this), 10)
			}
			this.transport.onreadystatechange = this.onStateChange.bind(this);
			this.setRequestHeaders();
			this.body = this.method == "post" ? (this.options.postBody || C) : null;
			this.transport.send(this.body);
			if (!this.options.asynchronous && this.transport.overrideMimeType) {
				this.onStateChange()
			}
		} catch(B) {
			this.dispatchException(B)
		}
	},
	abort: function() {
		this.transport.abort()
	},
	onStateChange: function() {
		var A = this.transport.readyState;
		if (A > 1 && !((A == 4) && this._complete)) {
			this.respondToReadyState(this.transport.readyState)
		}
	},
	setRequestHeaders: function() {
		var E = {
			"X-Requested-With": "XMLHttpRequest",
			"X-Prototype-Version": Prototype.Version,
			"Accept": "text/javascript, text/html, application/xml, text/xml, */*"
		};
		if (this.method == "post") {
			E["Content-type"] = this.options.contentType + (this.options.encoding ? "; charset=" + this.options.encoding: "");
			if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0, 2005])[1] < 2005) {
				E["Connection"] = "close"
			}
		}
		if (typeof this.options.requestHeaders == "object") {
			var C = this.options.requestHeaders;
			if (typeof C.push == "function") {
				for (var B = 0,
				D = C.length; B < D; B += 2) {
					E[C[B]] = C[B + 1]
				}
			} else {
				$H(C).each(function(F) {
					E[F.key] = F.value
				})
			}
		}
		for (var A in E) {
			this.transport.setRequestHeader(A, E[A])
		}
	},
	success: function() {
		return ! this.transport.status || (this.transport.status >= 200 && this.transport.status < 300)
	},
	respondToReadyState: function(A) {
		var C = Ajax.Request.Events[A];
		var F = this.transport,
		B = this.evalJSON();
		if (C == "Complete") {
			try {
				this._complete = true; (this.options["on" + this.transport.status] || this.options["on" + (this.success() ? "Success": "Failure")] || Prototype.emptyFunction)(F, B)
			} catch(D) {
				this.dispatchException(D)
			}
			var E = this.getHeader("Content-type");
			if (E && E.strip().match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) {
				this.evalResponse()
			}
		}
		try { (this.options["on" + C] || Prototype.emptyFunction)(F, B);
			Ajax.Responders.dispatch("on" + C, this, F, B)
		} catch(D) {
			this.dispatchException(D)
		}
		if (C == "Complete") {
			this.transport.onreadystatechange = Prototype.emptyFunction
		}
	},
	getHeader: function(A) {
		try {
			return this.transport.getResponseHeader(A)
		} catch(B) {
			return null
		}
	},
	evalJSON: function() {
		try {
			var A = this.getHeader("X-JSON");
			return A ? A.evalJSON() : null
		} catch(B) {
			return null
		}
	},
	evalResponse: function() {
		try {
			return eval((this.transport.responseText || "").unfilterJSON())
		} catch(e) {
			this.dispatchException(e)
		}
	},
	dispatchException: function(A) { (this.options.onException || Prototype.emptyFunction)(this, A);
		Ajax.Responders.dispatch("onException", this, A)
	}
});
Ajax.Updater = Class.create();
Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
	initialize: function(A, C, B) {
		this.container = {
			success: (A.success || A),
			failure: (A.failure || (A.success ? null: A))
		};
		this.transport = Ajax.getTransport();
		this.setOptions(B);
		var D = this.options.onComplete || Prototype.emptyFunction;
		this.options.onComplete = (function(F, E) {
			this.updateContent();
			D(F, E)
		}).bind(this);
		this.request(C)
	},
	updateContent: function() {
		var B = this.container[this.success() ? "success": "failure"];
		var A = this.transport.responseText;
		if (!this.options.evalScripts) {
			A = A.stripScripts()
		}
		if (B = $(B)) {
			if (this.options.insertion) {
				new this.options.insertion(B, A)
			} else {
				B.update(A)
			}
		}
		if (this.success()) {
			if (this.onComplete) {
				setTimeout(this.onComplete.bind(this), 10)
			}
		}
	}
});
Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
	initialize: function(A, C, B) {
		this.setOptions(B);
		this.onComplete = this.options.onComplete;
		this.frequency = (this.options.frequency || 2);
		this.decay = (this.options.decay || 1);
		this.updater = {};
		this.container = A;
		this.url = C;
		this.start()
	},
	start: function() {
		this.options.onComplete = this.updateComplete.bind(this);
		this.onTimerEvent()
	},
	stop: function() {
		this.updater.options.onComplete = undefined;
		clearTimeout(this.timer); (this.onComplete || Prototype.emptyFunction).apply(this, arguments)
	},
	updateComplete: function(A) {
		if (this.options.decay) {
			this.decay = (A.responseText == this.lastText ? this.decay * this.options.decay: 1);
			this.lastText = A.responseText
		}
		this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000)
	},
	onTimerEvent: function() {
		this.updater = new Ajax.Updater(this.container, this.url, this.options)
	}
});
function $(B) {
	if (arguments.length > 1) {
		for (var A = 0,
		D = [], C = arguments.length; A < C; A++) {
			D.push($(arguments[A]))
		}
		return D
	}
	if (typeof B == "string") {
		B = document.getElementById(B)
	}
	return Element.extend(B)
}
if (Prototype.BrowserFeatures.XPath) {
	document._getElementsByXPath = function(F, A) {
		var C = [];
		var E = document.evaluate(F, $(A) || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
		for (var B = 0,
		D = E.snapshotLength; B < D; B++) {
			C.push(E.snapshotItem(B))
		}
		return C
	};
	document.getElementsByClassName = function(B, A) {
		var C = ".//*[contains(concat(' ', @class, ' '), ' " + B + " ')]";
		return document._getElementsByXPath(C, A)
	}
} else {
	document.getElementsByClassName = function(D, A) {
		var C = ($(A) || document.body).getElementsByTagName("*");
		var F = [],
		G;
		for (var B = 0,
		E = C.length; B < E; B++) {
			G = C[B];
			if (Element.hasClassName(G, D)) {
				F.push(Element.extend(G))
			}
		}
		return F
	}
}
if (!window.Element) {
	var Element = {}
}
Element.extend = function(E) {
	var G = Prototype.BrowserFeatures;
	if (!E || !E.tagName || E.nodeType == 3 || E._extended || G.SpecificElementExtensions || E == window) {
		return E
	}
	var B = {},
	D = E.tagName,
	A = Element.extend.cache,
	C = Element.Methods.ByTag;
	if (!G.ElementExtensions) {
		Object.extend(B, Element.Methods),
		Object.extend(B, Element.Methods.Simulated)
	}
	if (C[D]) {
		Object.extend(B, C[D])
	}
	for (var I in B) {
		var H = B[I];
		if (typeof H == "function" && !(I in E)) {
			E[I] = A.findOrStore(H)
		}
	}
	E._extended = Prototype.emptyFunction;
	return E
};
Element.extend.cache = {
	findOrStore: function(A) {
		return this[A] = this[A] ||
		function() {
			return A.apply(null, [this].concat($A(arguments)))
		}
	}
};
Element.Methods = {
	visible: function(A) {
		return $(A).style.display != "none"
	},
	toggle: function(A) {
		A = $(A);
		Element[Element.visible(A) ? "hide": "show"](A);
		return A
	},
	hide: function(A) {
		$(A).style.display = "none";
		return A
	},
	show: function(A, B) {
		if (B == null) {
			$(A).style.display = ""
		} else {
			$(A).style.display = B
		}
		return A
	},
	remove: function(A) {
		A = $(A);
		A.parentNode.removeChild(A);
		return A
	},
	update: function(B, A) {
		A = typeof A == "undefined" ? "": A.toString();
		$(B).innerHTML = A.stripScripts();
		setTimeout(function() {
			A.evalScripts()
		},
		10);
		return B
	},
	replace: function(C, B) {
		C = $(C);
		B = typeof B == "undefined" ? "": B.toString();
		if (C.outerHTML) {
			C.outerHTML = B.stripScripts()
		} else {
			var A = C.ownerDocument.createRange();
			A.selectNodeContents(C);
			C.parentNode.replaceChild(A.createContextualFragment(B.stripScripts()), C)
		}
		setTimeout(function() {
			B.evalScripts()
		},
		10);
		return C
	},
	inspect: function(B) {
		B = $(B);
		var A = "<" + B.tagName.toLowerCase();
		$H({
			"id": "id",
			"className": "class"
		}).each(function(F) {
			var E = F.first(),
			C = F.last();
			var D = (B[E] || "").toString();
			if (D) {
				A += " " + C + "=" + D.inspect(true)
			}
		});
		return A + ">"
	},
	recursivelyCollect: function(A, C) {
		A = $(A);
		var B = [];
		while (A = A[C]) {
			if (A.nodeType == 1) {
				B.push(Element.extend(A))
			}
		}
		return B
	},
	ancestors: function(A) {
		return $(A).recursivelyCollect("parentNode")
	},
	descendants: function(A) {
		return $A($(A).getElementsByTagName("*")).each(Element.extend)
	},
	firstDescendant: function(A) {
		A = $(A).firstChild;
		while (A && A.nodeType != 1) {
			A = A.nextSibling
		}
		return $(A)
	},
	immediateDescendants: function(A) {
		if (! (A = $(A).firstChild)) {
			return []
		}
		while (A && A.nodeType != 1) {
			A = A.nextSibling
		}
		if (A) {
			return [A].concat($(A).nextSiblings())
		}
		return []
	},
	previousSiblings: function(A) {
		return $(A).recursivelyCollect("previousSibling")
	},
	nextSiblings: function(A) {
		return $(A).recursivelyCollect("nextSibling")
	},
	siblings: function(A) {
		A = $(A);
		return A.previousSiblings().reverse().concat(A.nextSiblings())
	},
	match: function(B, A) {
		if (typeof A == "string") {
			A = new Selector(A)
		}
		return A.match($(B))
	},
	up: function(B, D, A) {
		B = $(B);
		if (arguments.length == 1) {
			return $(B.parentNode)
		}
		var C = B.ancestors();
		return D ? Selector.findElement(C, D, A) : C[A || 0]
	},
	down: function(B, C, A) {
		B = $(B);
		if (arguments.length == 1) {
			return B.firstDescendant()
		}
		var D = B.descendants();
		return C ? Selector.findElement(D, C, A) : D[A || 0]
	},
	previous: function(B, D, A) {
		B = $(B);
		if (arguments.length == 1) {
			return $(Selector.handlers.previousElementSibling(B))
		}
		var C = B.previousSiblings();
		return D ? Selector.findElement(C, D, A) : C[A || 0]
	},
	next: function(C, D, B) {
		C = $(C);
		if (arguments.length == 1) {
			return $(Selector.handlers.nextElementSibling(C))
		}
		var A = C.nextSiblings();
		return D ? Selector.findElement(A, D, B) : A[B || 0]
	},
	getElementsBySelector: function() {
		var A = $A(arguments),
		B = $(A.shift());
		return Selector.findChildElements(B, A)
	},
	getElementsByClassName: function(A, B) {
		return document.getElementsByClassName(B, A)
	},
	readAttribute: function(C, A) {
		C = $(C);
		if (Prototype.Browser.IE) {
			if (!C.attributes) {
				return null
			}
			var B = Element._attributeTranslations;
			if (B.values[A]) {
				return B.values[A](C, A)
			}
			if (B.names[A]) {
				A = B.names[A]
			}
			var D = C.attributes[A];
			return D ? D.nodeValue: null
		}
		return C.getAttribute(A)
	},
	getHeight: function(A) {
		return $(A).getDimensions().height
	},
	getWidth: function(A) {
		return $(A).getDimensions().width
	},
	classNames: function(A) {
		return new Element.ClassNames(A)
	},
	hasClassName: function(A, B) {
		if (! (A = $(A))) {
			return
		}
		var C = A.className;
		if (C.length == 0) {
			return false
		}
		if (C == B || C.match(new RegExp("(^|\\s)" + B + "(\\s|$)"))) {
			return true
		}
		return false
	},
	addClassName: function(A, B) {
		if (! (A = $(A))) {
			return
		}
		Element.classNames(A).add(B);
		return A
	},
	removeClassName: function(A, B) {
		if (! (A = $(A))) {
			return
		}
		Element.classNames(A).remove(B);
		return A
	},
	toggleClassName: function(A, B) {
		if (! (A = $(A))) {
			return
		}
		Element.classNames(A)[A.hasClassName(B) ? "remove": "add"](B);
		return A
	},
	observe: function() {
		Event.observe.apply(Event, arguments);
		return $A(arguments).first()
	},
	stopObserving: function() {
		Event.stopObserving.apply(Event, arguments);
		return $A(arguments).first()
	},
	cleanWhitespace: function(B) {
		B = $(B);
		var C = B.firstChild;
		while (C) {
			var A = C.nextSibling;
			if (C.nodeType == 3 && !/\S/.test(C.nodeValue)) {
				B.removeChild(C)
			}
			C = A
		}
		return B
	},
	empty: function(A) {
		return $(A).innerHTML.blank()
	},
	descendantOf: function(B, A) {
		B = $(B),
		A = $(A);
		while (B = B.parentNode) {
			if (B == A) {
				return true
			}
		}
		return false
	},
	scrollTo: function(A) {
		A = $(A);
		var B = Position.cumulativeOffset(A);
		window.scrollTo(B[0], B[1]);
		return A
	},
	getStyle: function(B, C) {
		B = $(B);
		C = C == "float" ? "cssFloat": C.camelize();
		var D = B.style[C];
		if (!D) {
			var A = document.defaultView.getComputedStyle(B, null);
			D = A ? A[C] : null
		}
		if (C == "opacity") {
			return D ? parseFloat(D) : 1
		}
		return D == "auto" ? null: D
	},
	getOpacity: function(A) {
		return $(A).getStyle("opacity")
	},
	setStyle: function(A, C, B) {
		A = $(A);
		var E = A.style;
		for (var D in C) {
			if (D == "opacity") {
				A.setOpacity(C[D])
			} else {
				E[(D == "float" || D == "cssFloat") ? (E.styleFloat === undefined ? "cssFloat": "styleFloat") : (B ? D: D.camelize())] = C[D]
			}
		}
		return A
	},
	setOpacity: function(A, B) {
		A = $(A);
		A.style.opacity = (B == 1 || B === "") ? "": (B < 0.00001) ? 0 : B;
		return A
	},
	getDimensions: function(C) {
		C = $(C);
		var G = $(C).getStyle("display");
		if (G != "none" && G != null) {
			return {
				width: C.offsetWidth,
				height: C.offsetHeight
			}
		}
		var B = C.style;
		var F = B.visibility;
		var D = B.position;
		var A = B.display;
		B.visibility = "hidden";
		B.position = "absolute";
		B.display = "block";
		var H = C.clientWidth;
		var E = C.clientHeight;
		B.display = A;
		B.position = D;
		B.visibility = F;
		return {
			width: H,
			height: E
		}
	},
	makePositioned: function(A) {
		A = $(A);
		var B = Element.getStyle(A, "position");
		if (B == "static" || !B) {
			A._madePositioned = true;
			A.style.position = "relative";
			if (window.opera) {
				A.style.top = 0;
				A.style.left = 0
			}
		}
		return A
	},
	undoPositioned: function(A) {
		A = $(A);
		if (A._madePositioned) {
			A._madePositioned = undefined;
			A.style.position = A.style.top = A.style.left = A.style.bottom = A.style.right = ""
		}
		return A
	},
	makeClipping: function(A) {
		A = $(A);
		if (A._overflow) {
			return A
		}
		A._overflow = A.style.overflow || "auto";
		if ((Element.getStyle(A, "overflow") || "visible") != "hidden") {
			A.style.overflow = "hidden"
		}
		return A
	},
	undoClipping: function(A) {
		A = $(A);
		if (!A._overflow) {
			return A
		}
		A.style.overflow = A._overflow == "auto" ? "": A._overflow;
		A._overflow = null;
		return A
	}
};
Object.extend(Element.Methods, {
	childOf: Element.Methods.descendantOf,
	childElements: Element.Methods.immediateDescendants
});
if (Prototype.Browser.Opera) {
	Element.Methods._getStyle = Element.Methods.getStyle;
	Element.Methods.getStyle = function(A, B) {
		switch (B) {
		case "left":
		case "top":
		case "right":
		case "bottom":
			if (Element._getStyle(A, "position") == "static") {
				return null
			}
		default:
			return Element._getStyle(A, B)
		}
	}
} else {
	if (Prototype.Browser.IE) {
		Element.Methods.getStyle = function(A, B) {
			A = $(A);
			B = (B == "float" || B == "cssFloat") ? "styleFloat": B.camelize();
			var C = A.style[B];
			if (!C && A.currentStyle) {
				C = A.currentStyle[B]
			}
			if (B == "opacity") {
				if (C = (A.getStyle("filter") || "").match(/alpha\(opacity=(.*)\)/)) {
					if (C[1]) {
						return parseFloat(C[1]) / 100
					}
				}
				return 1
			}
			if (C == "auto") {
				if ((B == "width" || B == "height") && (A.getStyle("display") != "none")) {
					return A["offset" + B.capitalize()] + "px"
				}
				return null
			}
			return C
		};
		Element.Methods.setOpacity = function(A, D) {
			A = $(A);
			var C = A.getStyle("filter"),
			B = A.style;
			if (D == 1 || D === "") {
				B.filter = C.replace(/alpha\([^\)]*\)/gi, "");
				return A
			} else {
				if (D < 0.00001) {
					D = 0
				}
			}
			B.filter = C.replace(/alpha\([^\)]*\)/gi, "") + "alpha(opacity=" + (D * 100) + ")";
			return A
		};
		Element.Methods.update = function(C, B) {
			C = $(C);
			B = typeof B == "undefined" ? "": B.toString();
			var A = C.tagName.toUpperCase();
			if (["THEAD", "TBODY", "TR", "TD"].include(A)) {
				var D = document.createElement("div");
				switch (A) {
				case "THEAD":
				case "TBODY":
					D.innerHTML = "<table><tbody>" + B.stripScripts() + "</tbody></table>";
					depth = 2;
					break;
				case "TR":
					D.innerHTML = "<table><tbody><tr>" + B.stripScripts() + "</tr></tbody></table>";
					depth = 3;
					break;
				case "TD":
					D.innerHTML = "<table><tbody><tr><td>" + B.stripScripts() + "</td></tr></tbody></table>";
					depth = 4
				}
				$A(C.childNodes).each(function(E) {
					C.removeChild(E)
				});
				depth.times(function() {
					D = D.firstChild
				});
				$A(D.childNodes).each(function(E) {
					C.appendChild(E)
				})
			} else {
				C.innerHTML = B.stripScripts()
			}
			setTimeout(function() {
				B.evalScripts()
			},
			10);
			return C
		}
	} else {
		if (Prototype.Browser.Gecko) {
			Element.Methods.setOpacity = function(A, B) {
				A = $(A);
				A.style.opacity = (B == 1) ? 0.999999 : (B === "") ? "": (B < 0.00001) ? 0 : B;
				return A
			}
		}
	}
}
Element._attributeTranslations = {
	names: {
		colspan: "colSpan",
		rowspan: "rowSpan",
		valign: "vAlign",
		datetime: "dateTime",
		accesskey: "accessKey",
		tabindex: "tabIndex",
		enctype: "encType",
		maxlength: "maxLength",
		readonly: "readOnly",
		longdesc: "longDesc"
	},
	values: {
		_getAttr: function(A, B) {
			return A.getAttribute(B, 2)
		},
		_flag: function(A, B) {
			return $(A).hasAttribute(B) ? B: null
		},
		style: function(A) {
			return A.style.cssText.toLowerCase()
		},
		title: function(A) {
			var B = A.getAttributeNode("title");
			return B.specified ? B.nodeValue: null
		}
	}
}; (function() {
	Object.extend(this, {
		href: this._getAttr,
		src: this._getAttr,
		type: this._getAttr,
		disabled: this._flag,
		checked: this._flag,
		readonly: this._flag,
		multiple: this._flag
	})
}).call(Element._attributeTranslations.values);
Element.Methods.Simulated = {
	hasAttribute: function(B, D) {
		var A = Element._attributeTranslations,
		C;
		D = A.names[D] || D;
		C = $(B).getAttributeNode(D);
		return C && C.specified
	}
};
Element.Methods.ByTag = {};
Object.extend(Element, Element.Methods);
if (!Prototype.BrowserFeatures.ElementExtensions && document.createElement("div").__proto__) {
	window.HTMLElement = {};
	window.HTMLElement.prototype = document.createElement("div").__proto__;
	Prototype.BrowserFeatures.ElementExtensions = true
}
Element.hasAttribute = function(A, B) {
	if (A.hasAttribute) {
		return A.hasAttribute(B)
	}
	return Element.Methods.Simulated.hasAttribute(A, B)
};
Element.addMethods = function(C) {
	var I = Prototype.BrowserFeatures,
	D = Element.Methods.ByTag;
	if (!C) {
		Object.extend(Form, Form.Methods);
		Object.extend(Form.Element, Form.Element.Methods);
		Object.extend(Element.Methods.ByTag, {
			"FORM": Object.clone(Form.Methods),
			"INPUT": Object.clone(Form.Element.Methods),
			"SELECT": Object.clone(Form.Element.Methods),
			"TEXTAREA": Object.clone(Form.Element.Methods)
		})
	}
	if (arguments.length == 2) {
		var B = C;
		C = arguments[1]
	}
	if (!B) {
		Object.extend(Element.Methods, C || {})
	} else {
		if (B.constructor == Array) {
			B.each(H)
		} else {
			H(B)
		}
	}
	function H(F) {
		F = F.toUpperCase();
		if (!Element.Methods.ByTag[F]) {
			Element.Methods.ByTag[F] = {}
		}
		Object.extend(Element.Methods.ByTag[F], C)
	}
	function A(M, K, F) {
		F = F || false;
		var L = Element.extend.cache;
		for (var O in M) {
			var N = M[O];
			if (!F || !(O in K)) {
				K[O] = L.findOrStore(N)
			}
		}
	}
	function E(L) {
		var F;
		var K = {
			"OPTGROUP": "OptGroup",
			"TEXTAREA": "TextArea",
			"P": "Paragraph",
			"FIELDSET": "FieldSet",
			"UL": "UList",
			"OL": "OList",
			"DL": "DList",
			"DIR": "Directory",
			"H1": "Heading",
			"H2": "Heading",
			"H3": "Heading",
			"H4": "Heading",
			"H5": "Heading",
			"H6": "Heading",
			"Q": "Quote",
			"INS": "Mod",
			"DEL": "Mod",
			"A": "Anchor",
			"IMG": "Image",
			"CAPTION": "TableCaption",
			"COL": "TableCol",
			"COLGROUP": "TableCol",
			"THEAD": "TableSection",
			"TFOOT": "TableSection",
			"TBODY": "TableSection",
			"TR": "TableRow",
			"TH": "TableCell",
			"TD": "TableCell",
			"FRAMESET": "FrameSet",
			"IFRAME": "IFrame"
		};
		if (K[L]) {
			F = "HTML" + K[L] + "Element"
		}
		if (window[F]) {
			return window[F]
		}
		F = "HTML" + L + "Element";
		if (window[F]) {
			return window[F]
		}
		F = "HTML" + L.capitalize() + "Element";
		if (window[F]) {
			return window[F]
		}
		window[F] = {};
		window[F].prototype = document.createElement(L).__proto__;
		return window[F]
	}
	if (I.ElementExtensions) {
		A(Element.Methods, HTMLElement.prototype);
		A(Element.Methods.Simulated, HTMLElement.prototype, true)
	}
	if (I.SpecificElementExtensions) {
		for (var J in Element.Methods.ByTag) {
			var G = E(J);
			if (typeof G == "undefined") {
				continue
			}
			A(D[J], G.prototype)
		}
	}
	Object.extend(Element, Element.Methods);
	delete Element.ByTag
};
var Toggle = {
	display: Element.toggle
};
Abstract.Insertion = function(A) {
	this.adjacency = A
};
Abstract.Insertion.prototype = {
	initialize: function(B, C) {
		this.element = $(B);
		this.content = C.stripScripts();
		if (this.adjacency && this.element.insertAdjacentHTML) {
			try {
				this.element.insertAdjacentHTML(this.adjacency, this.content)
			} catch(D) {
				var A = this.element.tagName.toUpperCase();
				if (["TBODY", "TR"].include(A)) {
					this.insertContent(this.contentFromAnonymousTable())
				} else {
					throw D
				}
			}
		} else {
			this.range = this.element.ownerDocument.createRange();
			if (this.initializeRange) {
				this.initializeRange()
			}
			this.insertContent([this.range.createContextualFragment(this.content)])
		}
		setTimeout(function() {
			C.evalScripts()
		},
		10)
	},
	contentFromAnonymousTable: function() {
		var A = document.createElement("div");
		A.innerHTML = "<table><tbody>" + this.content + "</tbody></table>";
		return $A(A.childNodes[0].childNodes[0].childNodes)
	}
};
var Insertion = new Object();
Insertion.Before = Class.create();
Insertion.Before.prototype = Object.extend(new Abstract.Insertion("beforeBegin"), {
	initializeRange: function() {
		this.range.setStartBefore(this.element)
	},
	insertContent: function(A) {
		A.each((function(B) {
			this.element.parentNode.insertBefore(B, this.element)
		}).bind(this))
	}
});
Insertion.Top = Class.create();
Insertion.Top.prototype = Object.extend(new Abstract.Insertion("afterBegin"), {
	initializeRange: function() {
		this.range.selectNodeContents(this.element);
		this.range.collapse(true)
	},
	insertContent: function(A) {
		A.reverse(false).each((function(B) {
			this.element.insertBefore(B, this.element.firstChild)
		}).bind(this))
	}
});
Insertion.Bottom = Class.create();
Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion("beforeEnd"), {
	initializeRange: function() {
		this.range.selectNodeContents(this.element);
		this.range.collapse(this.element)
	},
	insertContent: function(A) {
		A.each((function(B) {
			this.element.appendChild(B)
		}).bind(this))
	}
});
Insertion.After = Class.create();
Insertion.After.prototype = Object.extend(new Abstract.Insertion("afterEnd"), {
	initializeRange: function() {
		this.range.setStartAfter(this.element)
	},
	insertContent: function(A) {
		A.each((function(B) {
			this.element.parentNode.insertBefore(B, this.element.nextSibling)
		}).bind(this))
	}
});
Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
	initialize: function(A) {
		this.element = $(A)
	},
	_each: function(A) {
		this.element.className.split(/\s+/).select(function(B) {
			return B.length > 0
		})._each(A)
	},
	set: function(A) {
		this.element.className = A
	},
	add: function(A) {
		if (this.include(A)) {
			return
		}
		this.set($A(this).concat(A).join(" "))
	},
	remove: function(A) {
		if (!this.include(A)) {
			return
		}
		this.set($A(this).without(A).join(" "))
	},
	toString: function() {
		return $A(this).join(" ")
	}
};
Object.extend(Element.ClassNames.prototype, Enumerable);
var Selector = Class.create();
Selector.prototype = {
	initialize: function(A) {
		this.expression = A.strip();
		this.compileMatcher()
	},
	compileMatcher: function() {
		if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression)) {
			return this.compileXPathMatcher()
		}
		var e = this.expression,
		ps = Selector.patterns,
		h = Selector.handlers,
		c = Selector.criteria,
		le, p, m;
		if (Selector._cache[e]) {
			this.matcher = Selector._cache[e];
			return
		}
		this.matcher = ["this.matcher = function(root) {", "var r = root, h = Selector.handlers, c = false, n;"];
		while (e && le != e && (/\S/).test(e)) {
			le = e;
			for (var i in ps) {
				p = ps[i];
				if (m = e.match(p)) {
					this.matcher.push(typeof c[i] == "function" ? c[i](m) : new Template(c[i]).evaluate(m));
					e = e.replace(m[0], "");
					break
				}
			}
		}
		this.matcher.push("return h.unique(n);\n}");
		eval(this.matcher.join("\n"));
		Selector._cache[this.expression] = this.matcher
	},
	compileXPathMatcher: function() {
		var E = this.expression,
		F = Selector.patterns,
		B = Selector.xpath,
		D, A;
		if (Selector._cache[E]) {
			this.xpath = Selector._cache[E];
			return
		}
		this.matcher = [".//*"];
		while (E && D != E && (/\S/).test(E)) {
			D = E;
			for (var C in F) {
				if (A = E.match(F[C])) {
					this.matcher.push(typeof B[C] == "function" ? B[C](A) : new Template(B[C]).evaluate(A));
					E = E.replace(A[0], "");
					break
				}
			}
		}
		this.xpath = this.matcher.join("");
		Selector._cache[this.expression] = this.xpath
	},
	findElements: function(A) {
		A = A || document;
		if (this.xpath) {
			return document._getElementsByXPath(this.xpath, A)
		}
		return this.matcher(A)
	},
	match: function(A) {
		return this.findElements(document).include(A)
	},
	toString: function() {
		return this.expression
	},
	inspect: function() {
		return "#<Selector:" + this.expression.inspect() + ">"
	}
};
Object.extend(Selector, {
	_cache: {},
	xpath: {
		descendant: "//*",
		child: "/*",
		adjacent: "/following-sibling::*[1]",
		laterSibling: "/following-sibling::*",
		tagName: function(A) {
			if (A[1] == "*") {
				return ""
			}
			return "[local-name()='" + A[1].toLowerCase() + "' or local-name()='" + A[1].toUpperCase() + "']"
		},
		className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
		id: "[@id='#{1}']",
		attrPresence: "[@#{1}]",
		attr: function(A) {
			A[3] = A[5] || A[6];
			return new Template(Selector.xpath.operators[A[2]]).evaluate(A)
		},
		pseudo: function(A) {
			var B = Selector.xpath.pseudos[A[1]];
			if (!B) {
				return ""
			}
			if (typeof B === "function") {
				return B(A)
			}
			return new Template(Selector.xpath.pseudos[A[1]]).evaluate(A)
		},
		operators: {
			"=": "[@#{1}='#{3}']",
			"!=": "[@#{1}!='#{3}']",
			"^=": "[starts-with(@#{1}, '#{3}')]",
			"$=": "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
			"*=": "[contains(@#{1}, '#{3}')]",
			"~=": "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
			"|=": "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
		},
		pseudos: {
			"first-child": "[not(preceding-sibling::*)]",
			"last-child": "[not(following-sibling::*)]",
			"only-child": "[not(preceding-sibling::* or following-sibling::*)]",
			"empty": "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
			"checked": "[@checked]",
			"disabled": "[@disabled]",
			"enabled": "[not(@disabled)]",
			"not": function(B) {
				var H = B[6],
				G = Selector.patterns,
				A = Selector.xpath,
				E,
				B,
				C;
				var F = [];
				while (H && E != H && (/\S/).test(H)) {
					E = H;
					for (var D in G) {
						if (B = H.match(G[D])) {
							C = typeof A[D] == "function" ? A[D](B) : new Template(A[D]).evaluate(B);
							F.push("(" + C.substring(1, C.length - 1) + ")");
							H = H.replace(B[0], "");
							break
						}
					}
				}
				return "[not(" + F.join(" and ") + ")]"
			},
			"nth-child": function(A) {
				return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", A)
			},
			"nth-last-child": function(A) {
				return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", A)
			},
			"nth-of-type": function(A) {
				return Selector.xpath.pseudos.nth("position() ", A)
			},
			"nth-last-of-type": function(A) {
				return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", A)
			},
			"first-of-type": function(A) {
				A[6] = "1";
				return Selector.xpath.pseudos["nth-of-type"](A)
			},
			"last-of-type": function(A) {
				A[6] = "1";
				return Selector.xpath.pseudos["nth-last-of-type"](A)
			},
			"only-of-type": function(A) {
				var B = Selector.xpath.pseudos;
				return B["first-of-type"](A) + B["last-of-type"](A)
			},
			nth: function(E, C) {
				var F, G = C[6],
				B;
				if (G == "even") {
					G = "2n+0"
				}
				if (G == "odd") {
					G = "2n+1"
				}
				if (F = G.match(/^(\d+)$/)) {
					return "[" + E + "= " + F[1] + "]"
				}
				if (F = G.match(/^(-?\d*)?n(([+-])(\d+))?/)) {
					if (F[1] == "-") {
						F[1] = -1
					}
					var D = F[1] ? Number(F[1]) : 1;
					var A = F[2] ? Number(F[2]) : 0;
					B = "[((#{fragment} - #{b}) mod #{a} = 0) and ((#{fragment} - #{b}) div #{a} >= 0)]";
					return new Template(B).evaluate({
						fragment: E,
						a: D,
						b: A
					})
				}
			}
		}
	},
	criteria: {
		tagName: 'n = h.tagName(n, r, "#{1}", c);   c = false;',
		className: 'n = h.className(n, r, "#{1}", c); c = false;',
		id: 'n = h.id(n, r, "#{1}", c);        c = false;',
		attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
		attr: function(A) {
			A[3] = (A[5] || A[6]);
			return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(A)
		},
		pseudo: function(A) {
			if (A[6]) {
				A[6] = A[6].replace(/"/g, '\\"')
			}
			return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(A)
		},
		descendant: 'c = "descendant";',
		child: 'c = "child";',
		adjacent: 'c = "adjacent";',
		laterSibling: 'c = "laterSibling";'
	},
	patterns: {
		laterSibling: /^\s*~\s*/,
		child: /^\s*>\s*/,
		adjacent: /^\s*\+\s*/,
		descendant: /^\s/,
		tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
		id: /^#([\w\-\*]+)(\b|$)/,
		className: /^\.([\w\-\*]+)(\b|$)/,
		pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
		attrPresence: /^\[([\w]+)\]/,
		attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\]]*?)\4|([^'"][^\]]*?)))?\]/
	},
	handlers: {
		concat: function(B, A) {
			for (var C = 0,
			D; D = A[C]; C++) {
				B.push(D)
			}
			return B
		},
		mark: function(A) {
			for (var B = 0,
			C; C = A[B]; B++) {
				C._counted = true
			}
			return A
		},
		unmark: function(A) {
			for (var B = 0,
			C; C = A[B]; B++) {
				C._counted = undefined
			}
			return A
		},
		index: function(A, D, F) {
			A._counted = true;
			if (D) {
				for (var B = A.childNodes,
				E = B.length - 1,
				C = 1; E >= 0; E--) {
					node = B[E];
					if (node.nodeType == 1 && (!F || node._counted)) {
						node.nodeIndex = C++
					}
				}
			} else {
				for (var E = 0,
				C = 1,
				B = A.childNodes; node = B[E]; E++) {
					if (node.nodeType == 1 && (!F || node._counted)) {
						node.nodeIndex = C++
					}
				}
			}
		},
		unique: function(B) {
			if (B.length == 0) {
				return B
			}
			var D = [],
			E;
			for (var C = 0,
			A = B.length; C < A; C++) {
				if (! (E = B[C])._counted) {
					E._counted = true;
					D.push(Element.extend(E))
				}
			}
			return Selector.handlers.unmark(D)
		},
		descendant: function(A) {
			var D = Selector.handlers;
			for (var C = 0,
			B = [], E; E = A[C]; C++) {
				D.concat(B, E.getElementsByTagName("*"))
			}
			return B
		},
		child: function(A) {
			var F = Selector.handlers;
			for (var E = 0,
			D = [], G; G = A[E]; E++) {
				for (var B = 0,
				C = [], H; H = G.childNodes[B]; B++) {
					if (H.nodeType == 1 && H.tagName != "!") {
						D.push(H)
					}
				}
			}
			return D
		},
		adjacent: function(A) {
			for (var C = 0,
			B = [], E; E = A[C]; C++) {
				var D = this.nextElementSibling(E);
				if (D) {
					B.push(D)
				}
			}
			return B
		},
		laterSibling: function(A) {
			var D = Selector.handlers;
			for (var C = 0,
			B = [], E; E = A[C]; C++) {
				D.concat(B, Element.nextSiblings(E))
			}
			return B
		},
		nextElementSibling: function(A) {
			while (A = A.nextSibling) {
				if (A.nodeType == 1) {
					return A
				}
			}
			return null
		},
		previousElementSibling: function(A) {
			while (A = A.previousSibling) {
				if (A.nodeType == 1) {
					return A
				}
			}
			return null
		},
		tagName: function(B, A, E, H) {
			E = E.toUpperCase();
			var D = [],
			F = Selector.handlers;
			if (B) {
				if (H) {
					if (H == "descendant") {
						for (var C = 0,
						G; G = B[C]; C++) {
							F.concat(D, G.getElementsByTagName(E))
						}
						return D
					} else {
						B = this[H](B)
					}
					if (E == "*") {
						return B
					}
				}
				for (var C = 0,
				G; G = B[C]; C++) {
					if (G.tagName.toUpperCase() == E) {
						D.push(G)
					}
				}
				return D
			} else {
				return A.getElementsByTagName(E)
			}
		},
		id: function(B, A, H, F) {
			var G = $(H),
			D = Selector.handlers;
			if (!B && A == document) {
				return G ? [G] : []
			}
			if (B) {
				if (F) {
					if (F == "child") {
						for (var C = 0,
						E; E = B[C]; C++) {
							if (G.parentNode == E) {
								return [G]
							}
						}
					} else {
						if (F == "descendant") {
							for (var C = 0,
							E; E = B[C]; C++) {
								if (Element.descendantOf(G, E)) {
									return [G]
								}
							}
						} else {
							if (F == "adjacent") {
								for (var C = 0,
								E; E = B[C]; C++) {
									if (Selector.handlers.previousElementSibling(G) == E) {
										return [G]
									}
								}
							} else {
								B = D[F](B)
							}
						}
					}
				}
				for (var C = 0,
				E; E = B[C]; C++) {
					if (E == G) {
						return [G]
					}
				}
				return []
			}
			return (G && Element.descendantOf(G, A)) ? [G] : []
		},
		className: function(B, A, C, D) {
			if (B && D) {
				B = this[D](B)
			}
			return Selector.handlers.byClassName(B, A, C)
		},
		byClassName: function(C, B, F) {
			if (!C) {
				C = Selector.handlers.descendant([B])
			}
			var H = " " + F + " ";
			for (var E = 0,
			D = [], G, A; G = C[E]; E++) {
				A = G.className;
				if (A.length == 0) {
					continue
				}
				if (A == F || (" " + A + " ").include(H)) {
					D.push(G)
				}
			}
			return D
		},
		attrPresence: function(C, B, A) {
			var E = [];
			for (var D = 0,
			F; F = C[D]; D++) {
				if (Element.hasAttribute(F, A)) {
					E.push(F)
				}
			}
			return E
		},
		attr: function(A, H, G, I, B) {
			if (!A) {
				A = H.getElementsByTagName("*")
			}
			var J = Selector.operators[B],
			D = [];
			for (var E = 0,
			C; C = A[E]; E++) {
				var F = Element.readAttribute(C, G);
				if (F === null) {
					continue
				}
				if (J(F, I)) {
					D.push(C)
				}
			}
			return D
		},
		pseudo: function(B, C, E, A, D) {
			if (B && D) {
				B = this[D](B)
			}
			if (!B) {
				B = A.getElementsByTagName("*")
			}
			return Selector.pseudos[C](B, E, A)
		}
	},
	pseudos: {
		"first-child": function(B, F, A) {
			for (var D = 0,
			C = [], E; E = B[D]; D++) {
				if (Selector.handlers.previousElementSibling(E)) {
					continue
				}
				C.push(E)
			}
			return C
		},
		"last-child": function(B, F, A) {
			for (var D = 0,
			C = [], E; E = B[D]; D++) {
				if (Selector.handlers.nextElementSibling(E)) {
					continue
				}
				C.push(E)
			}
			return C
		},
		"only-child": function(B, G, A) {
			var E = Selector.handlers;
			for (var D = 0,
			C = [], F; F = B[D]; D++) {
				if (!E.previousElementSibling(F) && !E.nextElementSibling(F)) {
					C.push(F)
				}
			}
			return C
		},
		"nth-child": function(B, C, A) {
			return Selector.pseudos.nth(B, C, A)
		},
		"nth-last-child": function(B, C, A) {
			return Selector.pseudos.nth(B, C, A, true)
		},
		"nth-of-type": function(B, C, A) {
			return Selector.pseudos.nth(B, C, A, false, true)
		},
		"nth-last-of-type": function(B, C, A) {
			return Selector.pseudos.nth(B, C, A, true, true)
		},
		"first-of-type": function(B, C, A) {
			return Selector.pseudos.nth(B, "1", A, false, true)
		},
		"last-of-type": function(B, C, A) {
			return Selector.pseudos.nth(B, "1", A, true, true)
		},
		"only-of-type": function(B, D, A) {
			var C = Selector.pseudos;
			return C["last-of-type"](C["first-of-type"](B, D, A), D, A)
		},
		getIndices: function(B, A, C) {
			if (B == 0) {
				return A > 0 ? [A] : []
			}
			return $R(1, C).inject([],
			function(D, E) {
				if (0 == (E - A) % B && (E - A) / B >= 0) {
					D.push(E)
				}
				return D
			})
		},
		nth: function(A, L, N, K, C) {
			if (A.length == 0) {
				return []
			}
			if (L == "even") {
				L = "2n+0"
			}
			if (L == "odd") {
				L = "2n+1"
			}
			var J = Selector.handlers,
			I = [],
			B = [],
			E;
			J.mark(A);
			for (var H = 0,
			D; D = A[H]; H++) {
				if (!D.parentNode._counted) {
					J.index(D.parentNode, K, C);
					B.push(D.parentNode)
				}
			}
			if (L.match(/^\d+$/)) {
				L = Number(L);
				for (var H = 0,
				D; D = A[H]; H++) {
					if (D.nodeIndex == L) {
						I.push(D)
					}
				}
			} else {
				if (E = L.match(/^(-?\d*)?n(([+-])(\d+))?/)) {
					if (E[1] == "-") {
						E[1] = -1
					}
					var O = E[1] ? Number(E[1]) : 1;
					var M = E[2] ? Number(E[2]) : 0;
					var P = Selector.pseudos.getIndices(O, M, A.length);
					for (var H = 0,
					D, F = P.length; D = A[H]; H++) {
						for (var G = 0; G < F; G++) {
							if (D.nodeIndex == P[G]) {
								I.push(D)
							}
						}
					}
				}
			}
			J.unmark(A);
			J.unmark(B);
			return I
		},
		"empty": function(B, F, A) {
			for (var D = 0,
			C = [], E; E = B[D]; D++) {
				if (E.tagName == "!" || (E.firstChild && !E.innerHTML.match(/^\s*$/))) {
					continue
				}
				C.push(E)
			}
			return C
		},
		"not": function(A, D, I) {
			var G = Selector.handlers,
			J, C;
			var H = new Selector(D).findElements(I);
			G.mark(H);
			for (var F = 0,
			E = [], B; B = A[F]; F++) {
				if (!B._counted) {
					E.push(B)
				}
			}
			G.unmark(H);
			return E
		},
		"enabled": function(B, F, A) {
			for (var D = 0,
			C = [], E; E = B[D]; D++) {
				if (!E.disabled) {
					C.push(E)
				}
			}
			return C
		},
		"disabled": function(B, F, A) {
			for (var D = 0,
			C = [], E; E = B[D]; D++) {
				if (E.disabled) {
					C.push(E)
				}
			}
			return C
		},
		"checked": function(B, F, A) {
			for (var D = 0,
			C = [], E; E = B[D]; D++) {
				if (E.checked) {
					C.push(E)
				}
			}
			return C
		}
	},
	operators: {
		"=": function(B, A) {
			return B == A
		},
		"!=": function(B, A) {
			return B != A
		},
		"^=": function(B, A) {
			return B.startsWith(A)
		},
		"$=": function(B, A) {
			return B.endsWith(A)
		},
		"*=": function(B, A) {
			return B.include(A)
		},
		"~=": function(B, A) {
			return (" " + B + " ").include(" " + A + " ")
		},
		"|=": function(B, A) {
			return ("-" + B.toUpperCase() + "-").include("-" + A.toUpperCase() + "-")
		}
	},
	matchElements: function(F, G) {
		var E = new Selector(G).findElements(),
		D = Selector.handlers;
		D.mark(E);
		for (var C = 0,
		B = [], A; A = F[C]; C++) {
			if (A._counted) {
				B.push(A)
			}
		}
		D.unmark(E);
		return B
	},
	findElement: function(B, C, A) {
		if (typeof C == "number") {
			A = C;
			C = false
		}
		return Selector.matchElements(B, C || "*")[A || 0]
	},
	findChildElements: function(E, G) {
		var H = G.join(","),
		G = [];
		H.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,
		function(I) {
			G.push(I[1].strip())
		});
		var D = [],
		F = Selector.handlers;
		for (var C = 0,
		B = G.length,
		A; C < B; C++) {
			A = new Selector(G[C].strip());
			F.concat(D, A.findElements(E))
		}
		return (B > 1) ? F.unique(D) : D
	}
});
function $$() {
	return Selector.findChildElements(document, $A(arguments))
}
var Form = {
	reset: function(A) {
		$(A).reset();
		return A
	},
	serializeElements: function(C, A) {
		var B = C.inject({},
		function(D, F) {
			if (!F.disabled && F.name) {
				var E = F.name,
				G = $(F).getValue();
				if (G != null) {
					if (E in D) {
						if (D[E].constructor != Array) {
							D[E] = [D[E]]
						}
						D[E].push(G)
					} else {
						D[E] = G
					}
				}
			}
			return D
		});
		return A ? B: Hash.toQueryString(B)
	}
};
Form.Methods = {
	serialize: function(B, A) {
		return Form.serializeElements(Form.getElements(B), A)
	},
	getElements: function(A) {
		return $A($(A).getElementsByTagName("*")).inject([],
		function(B, C) {
			if (Form.Element.Serializers[C.tagName.toLowerCase()]) {
				B.push(Element.extend(C))
			}
			return B
		})
	},
	getInputs: function(G, C, D) {
		G = $(G);
		var A = G.getElementsByTagName("input");
		if (!C && !D) {
			return $A(A).map(Element.extend)
		}
		for (var E = 0,
		H = [], F = A.length; E < F; E++) {
			var B = A[E];
			if ((C && B.type != C) || (D && B.name != D)) {
				continue
			}
			H.push(Element.extend(B))
		}
		return H
	},
	disable: function(A) {
		A = $(A);
		Form.getElements(A).invoke("disable");
		return A
	},
	enable: function(A) {
		A = $(A);
		Form.getElements(A).invoke("enable");
		return A
	},
	findFirstElement: function(A) {
		return $(A).getElements().find(function(B) {
			return B.type != "hidden" && !B.disabled && ["input", "select", "textarea"].include(B.tagName.toLowerCase())
		})
	},
	focusFirstElement: function(A) {
		A = $(A);
		A.findFirstElement().activate();
		return A
	},
	request: function(B, A) {
		B = $(B),

		A = Object.clone(A || {});
		var C = A.parameters;
		A.parameters = B.serialize(true);
		if (C) {
			if (typeof C == "string") {
				C = C.toQueryParams()
			}
			Object.extend(A.parameters, C)
		}
		if (B.hasAttribute("method") && !A.method) {
			A.method = B.method
		}
		return new Ajax.Request(B.readAttribute("action"), A)
	}
};
Form.Element = {
	focus: function(A) {
		$(A).focus();
		return A
	},
	select: function(A) {
		$(A).select();
		return A
	}
};
Form.Element.Methods = {
	serialize: function(A) {
		A = $(A);
		if (!A.disabled && A.name) {
			var B = A.getValue();
			if (B != undefined) {
				var C = {};
				C[A.name] = B;
				return Hash.toQueryString(C)
			}
		}
		return ""
	},
	getValue: function(A) {
		A = $(A);
		var B = A.tagName.toLowerCase();
		return Form.Element.Serializers[B](A)
	},
	clear: function(A) {
		$(A).value = "";
		return A
	},
	present: function(A) {
		return $(A).value != ""
	},
	activate: function(A) {
		A = $(A);
		try {
			A.focus();
			if (A.select && (A.tagName.toLowerCase() != "input" || !["button", "reset", "submit"].include(A.type))) {
				A.select()
			}
		} catch(B) {}
		return A
	},
	disable: function(A) {
		A = $(A);
		A.blur();
		A.disabled = true;
		return A
	},
	enable: function(A) {
		A = $(A);
		A.disabled = false;
		return A
	}
};
var Field = Form.Element;
var $F = Form.Element.Methods.getValue;
Form.Element.Serializers = {
	input: function(A) {
		switch (A.type.toLowerCase()) {
		case "checkbox":
		case "radio":
			return Form.Element.Serializers.inputSelector(A);
		default:
			return Form.Element.Serializers.textarea(A)
		}
	},
	inputSelector: function(A) {
		return A.checked ? A.value: null
	},
	textarea: function(A) {
		return A.value
	},
	select: function(A) {
		return this[A.type == "select-one" ? "selectOne": "selectMany"](A)
	},
	selectOne: function(B) {
		var A = B.selectedIndex;
		return A >= 0 ? this.optionValue(B.options[A]) : null
	},
	selectMany: function(D) {
		var A, E = D.length;
		if (!E) {
			return null
		}
		for (var C = 0,
		A = []; C < E; C++) {
			var B = D.options[C];
			if (B.selected) {
				A.push(this.optionValue(B))
			}
		}
		return A
	},
	optionValue: function(A) {
		return Element.extend(A).hasAttribute("value") ? A.value: A.text
	}
};
Abstract.TimedObserver = function() {};
Abstract.TimedObserver.prototype = {
	initialize: function(A, B, C) {
		this.frequency = B;
		this.element = $(A);
		this.callback = C;
		this.lastValue = this.getValue();
		this.registerCallback()
	},
	registerCallback: function() {
		setInterval(this.onTimerEvent.bind(this), this.frequency * 1000)
	},
	onTimerEvent: function() {
		var A = this.getValue();
		var B = ("string" == typeof this.lastValue && "string" == typeof A ? this.lastValue != A: String(this.lastValue) != String(A));
		if (B) {
			this.callback(this.element, A);
			this.lastValue = A
		}
	}
};
Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
	getValue: function() {
		return Form.Element.getValue(this.element)
	}
});
Form.Observer = Class.create();
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
	getValue: function() {
		return Form.serialize(this.element)
	}
});
Abstract.EventObserver = function() {};
Abstract.EventObserver.prototype = {
	initialize: function(A, B) {
		this.element = $(A);
		this.callback = B;
		this.lastValue = this.getValue();
		if (this.element.tagName.toLowerCase() == "form") {
			this.registerFormCallbacks()
		} else {
			this.registerCallback(this.element)
		}
	},
	onElementEvent: function() {
		var A = this.getValue();
		if (this.lastValue != A) {
			this.callback(this.element, A);
			this.lastValue = A
		}
	},
	registerFormCallbacks: function() {
		Form.getElements(this.element).each(this.registerCallback.bind(this))
	},
	registerCallback: function(A) {
		if (A.type) {
			switch (A.type.toLowerCase()) {
			case "checkbox":
			case "radio":
				Event.observe(A, "click", this.onElementEvent.bind(this));
				break;
			default:
				Event.observe(A, "change", this.onElementEvent.bind(this));
				break
			}
		}
	}
};
Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
	getValue: function() {
		return Form.Element.getValue(this.element)
	}
});
Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
	getValue: function() {
		return Form.serialize(this.element)
	}
});
if (!window.Event) {
	var Event = new Object()
}
Object.extend(Event, {
	KEY_BACKSPACE: 8,
	KEY_TAB: 9,
	KEY_RETURN: 13,
	KEY_ESC: 27,
	KEY_LEFT: 37,
	KEY_UP: 38,
	KEY_RIGHT: 39,
	KEY_DOWN: 40,
	KEY_DELETE: 46,
	KEY_HOME: 36,
	KEY_END: 35,
	KEY_PAGEUP: 33,
	KEY_PAGEDOWN: 34,
	element: function(A) {
		return $(A.target || A.srcElement)
	},
	isLeftClick: function(A) {
		return (((A.which) && (A.which == 1)) || ((A.button) && (A.button == 1)))
	},
	pointerX: function(A) {
		return A.pageX || (A.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft))
	},
	pointerY: function(A) {
		return A.pageY || (A.clientY + (document.documentElement.scrollTop || document.body.scrollTop))
	},
	stop: function(A) {
		if (A.preventDefault) {
			A.preventDefault();
			A.stopPropagation()
		} else {
			A.returnValue = false;
			A.cancelBubble = true
		}
	},
	findElement: function(C, B) {
		var A = Event.element(C);
		while (A.parentNode && (!A.tagName || (A.tagName.toUpperCase() != B.toUpperCase()))) {
			A = A.parentNode
		}
		return A
	},
	observers: false,
	_observeAndCache: function(D, C, B, A) {
		if (!this.observers) {
			this.observers = []
		}
		if (D.addEventListener) {
			this.observers.push([D, C, B, A]);
			D.addEventListener(C, B, A)
		} else {
			if (D.attachEvent) {
				this.observers.push([D, C, B, A]);
				D.attachEvent("on" + C, B)
			}

		}
	},
	unloadCache: function() {
		if (!Event.observers) {
			return
		}
		for (var A = 0,
		B = Event.observers.length; A < B; A++) {
			Event.stopObserving.apply(this, Event.observers[A]);
			Event.observers[A][0] = null
		}
		Event.observers = false
	},
	observe: function(D, C, B, A) {
		D = $(D);
		A = A || false;
		if (C == "keypress" && (Prototype.Browser.WebKit || D.attachEvent)) {
			C = "keydown"
		}
		Event._observeAndCache(D, C, B, A)
	},
	stopObserving: function(D, C, B, A) {
		D = $(D);
		A = A || false;
		if (C == "keypress" && (Prototype.Browser.WebKit || D.attachEvent)) {
			C = "keydown"
		}
		if (D.removeEventListener) {
			D.removeEventListener(C, B, A)
		} else {
			if (D.detachEvent) {
				try {
					D.detachEvent("on" + C, B)
				} catch(E) {}
			}
		}
	}
});
if (Prototype.Browser.IE) {
	Event.observe(window, "unload", Event.unloadCache, false)
}
var Position = {
	includeScrollOffsets: false,
	prepare: function() {
		this.deltaX = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
		this.deltaY = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
	},
	realOffset: function(B) {
		var A = 0,
		C = 0;
		do {
			A += B.scrollTop || 0;
			C += B.scrollLeft || 0;
			B = B.parentNode
		} while ( B );
		return [C, A]
	},
	cumulativeOffset: function(B) {
		var A = 0,
		C = 0;
		do {
			A += B.offsetTop || 0;
			C += B.offsetLeft || 0;
			B = B.offsetParent
		} while ( B );
		return [C, A]
	},
	positionedOffset: function(B) {
		var A = 0,
		D = 0;
		do {
			A += B.offsetTop || 0;
			D += B.offsetLeft || 0;
			B = B.offsetParent;
			if (B) {
				if (B.tagName == "BODY") {
					break
				}
				var C = Element.getStyle(B, "position");
				if (C == "relative" || C == "absolute") {
					break
				}
			}
		} while ( B );
		return [D, A]
	},
	offsetParent: function(A) {
		if (A.offsetParent) {
			return A.offsetParent
		}
		if (A == document.body) {
			return A
		}
		while ((A = A.parentNode) && A != document.body) {
			if (Element.getStyle(A, "position") != "static") {
				return A
			}
		}
		return document.body
	},
	within: function(B, A, C) {
		if (this.includeScrollOffsets) {
			return this.withinIncludingScrolloffsets(B, A, C)
		}
		this.xcomp = A;
		this.ycomp = C;
		this.offset = this.cumulativeOffset(B);
		return (C >= this.offset[1] && C < this.offset[1] + B.offsetHeight && A >= this.offset[0] && A < this.offset[0] + B.offsetWidth)
	},
	withinIncludingScrolloffsets: function(B, A, D) {
		var C = this.realOffset(B);
		this.xcomp = A + C[0] - this.deltaX;
		this.ycomp = D + C[1] - this.deltaY;
		this.offset = this.cumulativeOffset(B);
		return (this.ycomp >= this.offset[1] && this.ycomp < this.offset[1] + B.offsetHeight && this.xcomp >= this.offset[0] && this.xcomp < this.offset[0] + B.offsetWidth)
	},
	overlap: function(B, A) {
		if (!B) {
			return 0
		}
		if (B == "vertical") {
			return ((this.offset[1] + A.offsetHeight) - this.ycomp) / A.offsetHeight
		}
		if (B == "horizontal") {
			return ((this.offset[0] + A.offsetWidth) - this.xcomp) / A.offsetWidth
		}
	},
	page: function(D) {
		var A = 0,
		C = 0;
		var B = D;
		do {
			A += B.offsetTop || 0;
			C += B.offsetLeft || 0;
			if (B.offsetParent == document.body) {
				if (Element.getStyle(B, "position") == "absolute") {
					break
				}
			}
		} while ( B = B . offsetParent );
		B = D;
		do {
			if (!window.opera || B.tagName == "BODY") {
				A -= B.scrollTop || 0;
				C -= B.scrollLeft || 0
			}
		} while ( B = B . parentNode );
		return [C, A]
	},
	clone: function(C, E) {
		var A = Object.extend({
			setLeft: true,
			setTop: true,
			setWidth: true,
			setHeight: true,
			offsetTop: 0,
			offsetLeft: 0
		},
		arguments[2] || {});
		C = $(C);
		var D = Position.page(C);
		E = $(E);
		var F = [0, 0];
		var B = null;
		if (Element.getStyle(E, "position") == "absolute") {
			B = Position.offsetParent(E);
			F = Position.page(B)
		}
		if (B == document.body) {
			F[0] -= document.body.offsetLeft;
			F[1] -= document.body.offsetTop
		}
		if (A.setLeft) {
			E.style.left = (D[0] - F[0] + A.offsetLeft) + "px"
		}
		if (A.setTop) {
			E.style.top = (D[1] - F[1] + A.offsetTop) + "px"
		}
		if (A.setWidth) {
			E.style.width = C.offsetWidth + "px"
		}
		if (A.setHeight) {
			E.style.height = C.offsetHeight + "px"
		}
	},
	absolutize: function(B) {
		B = $(B);
		if (B.style.position == "absolute") {
			return
		}
		Position.prepare();
		var D = Position.positionedOffset(B);
		var F = D[1];
		var E = D[0];
		var C = B.clientWidth;
		var A = B.clientHeight;
		B._originalLeft = E - parseFloat(B.style.left || 0);
		B._originalTop = F - parseFloat(B.style.top || 0);
		B._originalWidth = B.style.width;
		B._originalHeight = B.style.height;
		B.style.position = "absolute";
		B.style.top = F + "px";
		B.style.left = E + "px";
		B.style.width = C + "px";
		B.style.height = A + "px"
	},
	relativize: function(A) {
		A = $(A);
		if (A.style.position == "relative") {
			return
		}
		Position.prepare();
		A.style.position = "relative";
		var C = parseFloat(A.style.top || 0) - (A._originalTop || 0);
		var B = parseFloat(A.style.left || 0) - (A._originalLeft || 0);
		A.style.top = C + "px";
		A.style.left = B + "px";
		A.style.height = A._originalHeight;
		A.style.width = A._originalWidth
	}
};
if (Prototype.Browser.WebKit) {
	Position.cumulativeOffset = function(B) {
		var A = 0,
		C = 0;
		do {
			A += B.offsetTop || 0;
			C += B.offsetLeft || 0;
			if (B.offsetParent == document.body) {
				if (Element.getStyle(B, "position") == "absolute") {
					break
				}
			}
			B = B.offsetParent
		} while ( B );
		return [C, A]
	}
}
Element.addMethods();
function $E(A) {
	if (A == null || A == undefined) {
		return A
	}
	return encodeURIComponent(A)
}
function $N(A) {
	return A == null ? "": A
}

/* - train.js - */
function middleObj(E, A, B) {
    var D = ABBrowser.getScrollTop() + (ABBrowser.getViewHeight() - A) / 2;
    var C = ABBrowser.getScrollLeft() + (ABBrowser.getViewWidth() - B) * 0.9 / 2;
    if (D < ABBrowser.getScrollTop()) {
        D = ABBrowser.getScrollTop()
    }
    E.style.top = D + "px";
    E.style.left = C + "px";
    E.style.position = "absolute";
    E.style.display = "block"
}
var Lock = {
    state: false,
    lock: function(A) {
        this.state = true;
        if (!A) {
            middleObj($("ajax_loading"), 65, 100);
            $("ajax_loading").style.display = "block"
        }
    },
    unlock: function() {
        this.state = false;
        $("ajax_loading").style.display = "none"
    }
};
function showstat() {
    var B = $F("stat").strip();
    if (B == "") {
        alert("站点不能为空");
        return false
    }
    var A = "/train/i.php?area=train&cmd=stat&name=" + $E(B);
    Lock.lock();
    new Ajax.Request(A, {
        method: "get",
        onSuccess: function(C) {
            Lock.unlock();
            $("resultTable").innerHTML = C.responseText
        }
    })
}
function showline() {
    var A = $F("line").strip();
    if (A == "") {
        alert("车次不能为空");
        return false
    }
    var B = "/train/i1.php?area=train&cmd=line&type=2&value=" + A;
    Lock.lock();
    new Ajax.Request(B, {
        method: "get",
        onSuccess: function(C) {
            Lock.unlock();
            $("resultTable").innerHTML = C.responseText
        }
    })
}
function showresult() {
    var C = $F("start").strip();
    var A = $F("end").strip();
    if (C == "") {
        alert("出发地不能为空");
        return false
    }
    if (A == "") {
        alert("目的地不能为空");
        return false
    }
    var B = "/train/i2.php?area=train&cmd=result&start=" + $E(C) + "&end=" + $E(A);
    Lock.lock();
    new Ajax.Request(B, {
        method: "get",
        onSuccess: function(D) {
            Lock.unlock();
            $("resultTable").innerHTML = D.responseText
        }
    })
}
function showlinedetail(F, D, C, E, B) {
    if (B) {
        if ($("line_" + F + "_" + B).className == "line_on") {
            $("linedetail_" + F + "_" + B).style.display = "none";
            $("line_" + F + "_" + B).className = "line_off";
            return false
        }
        if ($("linedetail_" + F + "_" + B).innerHTML != "") {
            $("linedetail_" + F + "_" + B).style.display = "block";
            $("line_" + F + "_" + B).className = "line_on";
            return false
        }
    } else {
        if ($("line_" + F).className == "line_on") {
            $("linedetail_" + F).style.display = "none";
            $("line_" + F).className = "line_off";
            return false
        }
        if ($("linedetail_" + F).innerHTML != "") {
            $("linedetail_" + F).style.display = "block";
            $("line_" + F).className = "line_on";
            return false
        }
    }
    var A = "/train/i3.php?area=train&cmd=line&type=" + D + "&value=" + F + "&ss=" + $E(C) + "&es=" + $E(E);
    Lock.lock();
    new Ajax.Request(A, {
        method: "get",
        onSuccess: function(G) {
            Lock.unlock();
            if (B) {
                $("linedetail_" + F + "_" + B).innerHTML = G.responseText;
                $("linedetail_" + F + "_" + B).style.display = "block";
                $("line_" + F + "_" + B).className = "line_on"
            } else {
                $("linedetail_" + F).innerHTML = G.responseText;
                $("linedetail_" + F).style.display = "block";
                $("line_" + F).className = "line_on"
            }
        }
    })
}
function switchTab(C, B, A) {
    $("tab" + C).style.display = "block";
    $("tab" + B).style.display = "none";
    $("tab" + A).style.display = "none";
    $("link" + C).className = "cur";
    $("link" + B).className = "";
    $("link" + A).className = ""
}
function TrainSearch(B) {
    var A = window.event ? B.keyCode: B.which;
    if (A == 13) {
        if ($("tab1").style.display == "block" || $("tab1").style.display == "") {
            $("btn1").click()
        } else {
            if ($("tab2").style.display == "block" || $("tab2").style.display == "") {
                $("btn2").click()
            } else {
                if ($("tab3").style.display == "block" || $("tab3").style.display == "") {
                    $("btn3").click()
                }
            }
        }
    }
}