var codeexp = /[0-9A-Z]{6}/;
var screenWidth;
var screenHeight;
var dataStatusOk = true;
var entered = false;
//var timeout = window.setTimeout;
//window.setTimeout = function(func, delay) {
//	if (typeof func == 'function') {
//		var argu = Array.prototype.slice.call(arguments,2);
//		var f = (function() {func.apply(null, argu);});
//		return timeout(f, delay);
//	}
//	return timeout(func, delay);
//}
function enableTableUnderline(tableId, hoverColor, normalColor) {
	var el = $(tableId).getElementsByTagName('tr');
	var nodes = $A(el);
	nodes.each(function(node) {
		node.onmouseover = function () {
			var i;
			for (i = 0; i < this.cells.length; i++) {
				this.cells[i].style.borderBottomColor = hoverColor;
			}
		}
		node.onmouseout = function() {
			var i;
			for (i = 0; i < this.cells.length; i++) {
				this.cells[i].style.borderBottomColor = normalColor;
			}
		}
	});
}
function changeCol(col, openDate, addtionalParam) {
	col = encodeURIComponent(col).replace(/^\s*(\S*)\s*$/g, "$1");
	if (col.length > 0) {
		//		tb_show(null, "#TB_inline?height=100&width=250&inlineId=hint&modal=true", null);
		var url = "/index.htm?col=" + col + "&openDate=" + openDate;
		if (addtionalParam && addtionalParam.length > 0) {
			url += addtionalParam;
		}
		window.location = url;
	}
}
var resizeTimeout = undefined;
var resizeInProgress = false;

function resizeComplete()
{
	clearTimeout(resizeTimeout);
	resizeInProgress = false;
}

function resetHandler() {
	if (jQuery.browser.isIE && !resizeInProgress) {
		if (resizeTimeout != undefined) {
			clearTimeout(resizeTimeout);
		}
		resizeTimeout = setTimeout("resetSize();", 500);
	} else if (!jQuery.browser.isIE) {
		resetSize();
	}
}
function resetSize() {
	var myWidth = 0, myHeight = 0;
	if (typeof( window.innerWidth ) == 'number') {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if (document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight )) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if (document.body && ( document.body.clientWidth || document.body.clientHeight )) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	var listDiv = document.getElementById("stock-list");
	listDiv.style.width = myWidth - 30;
	listDiv.style.height = myHeight - 120;
}
function resetAppletSize() {
	var myWidth = 0, myHeight = 0;
	if (typeof( window.innerWidth ) == 'number') {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if (document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight )) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if (document.body && ( document.body.clientWidth || document.body.clientHeight )) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	var listDiv = document.getElementById("stockapplet");
	listDiv.style.width = "100%";
	listDiv.style.height = myHeight - 120;
}
function detail(stockCode, newWindow, addtionalParam) {
	var url = "/detail.htm?stockCode=" + stockCode;
	if (addtionalParam && addtionalParam.length > 0) {
		url += addtionalParam;
	}
	if (newWindow) {
		window.open(url, '', 'height=' + screenHeight + ',width=' + screenWidth +
		                     ',top=0,left=0,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no');
	} else {
		window.location = url;
	}
}
function showdetail(newWindow, addtionalParam) {
	if (entered) {
		return false;
	}
	entered = true;
	var submitButton = document.getElementById("viewDetail");
	submitButton.disabled = true;
	var stockCode = document.getElementById("stockCode");
	var stockCodeValue = encodeURIComponent(stockCode.value);
	detail(stockCodeValue, newWindow, addtionalParam);
//	jQuery.getJSON("/ajax/find-stock.htm?stockCode=" + encodeURIComponent(stockCodeValue), null, verifyStockExist);
	submitButton.disabled = false;
	entered = false;
	return false;
}
function verifyStockExist(stocks) {
	if (stocks != null && stocks.length == 1) {
		var stock = stocks[0];
		var returnedStockCode = stock.stockCode;
		if (returnedStockCode) {
			detail(returnedStockCode, true);
			return;
		}
	}
	var stockCode = document.getElementById("stockCode");
	stockCode.focus();
	stockCode.select();
//	tb_show(null, "#TB_inline?height=100&width=250&inlineId=error&modal=true", null);
	setTimeout("tb_remove()", 1000);
}
function stockChange() {
	if (entered) {
		return false;
	}
	entered = true;
	var submitButton = document.getElementById("viewDetail");
	submitButton.disabled = true;
	var applet = document.getElementById('stockapplet');
	applet.style.width = "0";
	applet.style.height = "0";
//	tb_show(null, "#TB_inline?height=100&width=250&inlineId=hint&modal=true", null);
	var stockCode = document.getElementById("stockCode");
	var stockCodeValue = stockCode.value.replace(/\s+/, "");
	var notFound = document.getElementById('notFound');
	var errorMessage;
	var title = document.title;
	var startPos = title.indexOf("- ");
	stockCode.value = stockCodeValue;
//	jQuery.getJSON("/ajax/find-stock.htm?stockCode=" + encodeURIComponent(stockCodeValue), null, stockChangeComplete);
	var newStockCodeAndName;
	try {
		newStockCodeAndName = applet.setStock(stockCodeValue);
		if (newStockCodeAndName) {
			var codeAndName = newStockCodeAndName.split(",");
			document.title = title.substring(0, startPos + 2) + codeAndName[0] + "[" + codeAndName[1] + "]";
			notFound.style.display = "none";
			applet.style.width = "100%";
			applet.style.height = calculateAppletHeight();
			dataStatusOk = true;
	//				tb_remove();
		} else {
			document.title = title.substring(0, startPos + 2) + stockCodeValue;
			errorMessage = notFound.innerHTML;
			startPos = errorMessage.indexOf(": ");
			notFound.innerHTML = errorMessage.substring(0, startPos + 2) + stockCodeValue;
			notFound.style.display = "block";
			stockCode.focus();
			stockCode.select();
			dataStatusOk = false;
		}
	} catch (e) {
	}
	submitButton.disabled = false;
	entered = false;
	return false;
}
function stockChange_() {
	if (entered) {
		return false;
	}
	entered = true;
	var submitButton = document.getElementById("viewDetail");
	submitButton.disabled = true;
	var applet = document.getElementById('stockapplet');
	applet.style.width = "0";
	applet.style.height = "0";
//	tb_show(null, "#TB_inline?height=100&width=250&inlineId=hint&modal=true", null);
	var stockCode = document.getElementById("stockCode");
	var stockCodeValue = stockCode.value.replace(/\s+/, "");
	var notFound = document.getElementById('notFound');
	var errorMessage;
	var title = document.title;
	var startPos = title.indexOf("- ");
	stockCode.value = stockCodeValue;
//	jQuery.getJSON("/ajax/find-stock.htm?stockCode=" + encodeURIComponent(stockCodeValue), null, stockChangeComplete);
	var newStockCodeAndName;
	try {
		applet.setStock(stockCodeValue,"stockChange__");
	} catch (e) {
	}
	return false;
}
function stockChange__(newStockCodeAndName) {
	var submitButton = document.getElementById("viewDetail");
	var applet = document.getElementById('stockapplet');
	var stockCode = document.getElementById("stockCode");
	var stockCodeValue = stockCode.value.replace(/\s+/, "");
	var notFound = document.getElementById('notFound');
	var errorMessage;
	var title = document.title;
	var startPos = title.indexOf("- ");
	if (newStockCodeAndName) {
		var codeAndName = newStockCodeAndName.split(",");
		document.title = title.substring(0, startPos + 2) + codeAndName[0] + "[" + codeAndName[1] + "]";
		notFound.style.display = "none";
		applet.style.width = "100%";
		applet.style.height = calculateAppletHeight();
		dataStatusOk = true;
	} else {
		document.title = title.substring(0, startPos + 2) + stockCodeValue;
		errorMessage = notFound.innerHTML;
		startPos = errorMessage.indexOf(": ");
		notFound.innerHTML = errorMessage.substring(0, startPos + 2) + stockCodeValue;
		notFound.style.display = "block";
		stockCode.focus();
		stockCode.select();
		dataStatusOk = false;
	}
	submitButton.disabled = false;
	entered = false;
}
function closeHint() {
	var stockCode = document.getElementById("stockCode");
	var applet = document.getElementById('stockapplet');
	stockCode.focus();
	stockCode.select();
	if (dataStatusOk) {
		applet.style.width = "100%";
		applet.style.height = calculateAppletHeight();
	}
	entered = false;
	tb_remove();
}
function stockChangeComplete(stock) {
	var errorMessage;
	var stockCode = document.getElementById("stockCode");
	var stockCodeValue = stockCode.getValue();
	var submitButton = document.getElementById("viewDetail");
	var title = document.title;
	var startPos = title.indexOf("- ");
	var notFound = document.getElementById('notFound');
	if (stock != null && stock.count == 1) {
		var applet = document.getElementById('stockapplet');
		var returnedStockCode = stock.stockCode;
		if (returnedStockCode) {
			var newStockCodeAndName = applet.setStock(stock.stockCode);
			if (newStockCodeAndName) {
				var codeAndName = newStockCodeAndName.split(",");
				document.title = title.substring(0, startPos + 2) + codeAndName[0] + "[" + codeAndName[1] + "]";
				notFound.style.display = "none";
				applet.style.width = "100%";
				applet.style.height = calculateAppletHeight();
				stockCode.focus();
				stockCode.select();
				dataStatusOk = true;
				submitButton.disabled = false;
				entered = false;
//				tb_remove();
				return;
			}
		}
	}
	document.title = title.substring(0, startPos + 2) + stockCodeValue;
	errorMessage = notFound.innerHTML;
	startPos = errorMessage.indexOf(": ");
	notFound.innerHTML = errorMessage.substring(0, startPos + 2) + stockCodeValue;
	notFound.style.display = "block";
	stockCode.focus();
	stockCode.select();
	dataStatusOk = false;
	submitButton.disabled = false;
	entered = false;
//	tb_remove();
}
function stockCodeKeyDetail(event) {
	var keynum;
	if (window.event) { //IE
		keynum = event.keyCode;
	}
	else if (event.which) { // Netscape/Firefox/Opera
		keynum = event.which;
	}
	if (13 == keynum) {
		stockChange();
	}
}
function detect() {
	var javaInstalled = PluginDetect.isMinVersion('Java', '0') >= 0;
	if (jQuery.browser.safari) {
		if (!javaInstalled) {
			document.getElementById("installJava").style.display = "block";
			return false;
		} else {
			return true;
		}
	}
	var versionOk = PluginDetect.isMinVersion('Java', '1,6,0') == 1;
	if (!versionOk) {
		document.getElementById("installJava").style.display = "block";
		return false;
	}
//	if (PluginDetect.isMinVersion('Java', '1,6,0,05') == 1 && PluginDetect.isMinVersion('Java', '1,6,0,06') == -1) {
	//		document.getElementById("incorrectVersion").style.display = "block";
	//		return true;
	//	}
	return true;
}
function calculateAppletHeight() {
	var clientHeight, height;
	if (jQuery.browser.msie) {
		clientHeight = document.body.clientHeight;
		height = clientHeight - 85;
		if (height < 550) height = 550;
	} else {
		clientHeight = window.innerHeight;
		height = clientHeight - 85;
		if (height < 550) height = 550;
	}
	return height;
}
function showStockPlotApplet(stockCode, stockName) {
	var height = calculateAppletHeight();
	if (jQuery.browser.msie) {
		document.write('<object id="stockapplet" name="stockapplet" ' +
		               'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" ' +
		               'width="100%" ' +
		               'height="' + height + '" ' +
			//		               'height="1000" ' +
		               'codebase="http://java.sun.com/update/1.6.0/jinstall-6u10-windows-i586.cab#Version=6,0,0,13">' +
		               '<param name="code" value="com.yaqu.adonis.business.stock.ui.StockPlotApplet">' +
		               '<param name="archive" value="all.jar">' +
		               '<param name="MAYSCRIPT" value=true>' +
		               '<param name="draggable" value="false">' +
		               '<param name="classloader_cache" value="true">' +
		               '<param name="separate_jvm" value="false">' +
		               '<param name="java_arguments" value="-Xmx128m -Dsun.java2d.noddraw=true">' +
		               '<param name="boxborder" value="false">' +
		               '<param name="centerimage" value="true">' +
		               '<param name="scriptable" value="true">' +
		               '<param name="StockCode" value="' + encodeURIComponent(stockCode) + '">' +
		               '<param name="StockName" value="' + encodeURIComponent(stockName) + '">' +
		               '</object>');
	} else {
		document.write('<embed id="stockapplet" name="stockapplet" ' +
		               'width="100%"' +
		               'height="' + height + '" ' +
			//		               'height="1000" ' +
		               'type="application/x-java-applet;version=1.6" ' +
		               'code="com.yaqu.adonis.business.stock.ui.StockPlotApplet" ' +
		               'archive="all.jar" ' +
		               'MAYSCRIPT=true ' +
		               'scriptable=true ' +
		               'draggable="false" ' +
		               'classloader_cache="true" ' +
		               'separate_jvm="false" ' +
		               'java_arguments="-Xmx128m -Dsun.java2d.noddraw=true" ' +
		               'boxborder="false" ' +
		               'centerimage="true" ' +
		               'StockCode="' + encodeURIComponent(stockCode) + '" ' +
		               'StockName="' + encodeURIComponent(stockName) + '" ' +
		               'pluginspage="http://java.sun.com/update/1.6.0/jre-6u10-windows-i586.xpi"/>');
	}
}
function sortValue(pageURI, sortName, order, col, promotion) {
	var date = document.getElementById("openDate").value;
	window.location = pageURI + "?sortName=" + sortName + "&order=" + order +
	                  "&col=" + encodeURIComponent(col) + "&openDate=" + date + promotion;
}
function sortCode(pageURI, sortName, order, col, promotion) {
	var date = document.getElementById("openDate").value;
	window.location = pageURI + "?sortName=" + sortName + "&order=" + order +
	                  "&col=" + encodeURIComponent(col) + "&openDate=" + date + promotion;
}
function sortCollectionValue(pageURI, sortName, order, type, promotion) {
	var date = document.getElementById("openDate").value;
	window.location = pageURI + "?sortName=" + sortName + "&order=" + order +
	                  "&type=" + encodeURIComponent(type) + "&openDate=" + date + promotion;
}
function appletStockChanged(stockCode, stockName) {
	var title = document.title;
	var startPos = title.indexOf("- ");
	document.title = title.substring(0, startPos + 2) + stockCode + "[" + stockName + "]";
	document.getElementById("stockCode").value = stockCode;
}
function noData(newCode, newName) {
	var stockCode = document.getElementById("stockCode");
	var stockCodeValue = stockCode.getValue();
	if (newCode) {
		stockCodeValue = newCode;
		stockCode.value = newCode;
	}
	var title = document.title;
	var startPos = title.indexOf("- ");
	var applet = document.getElementById('stockapplet');
	var notFound = document.getElementById('notFound');
	var errorMessage;
	applet.style.width = "0";
	applet.style.height = "0";
	if (newName) {
		document.title = title.substring(0, startPos + 2) + stockCodeValue + "[" + newName + "]";
	} else {
		document.title = title.substring(0, startPos + 2) + stockCodeValue;
	}
	errorMessage = notFound.innerHTML;
	startPos = errorMessage.indexOf(": ");
	notFound.innerHTML = errorMessage.substring(0, startPos + 2) + stockCodeValue;
	notFound.style.display = "block";
	stockCode.focus();
	stockCode.select();
	dataStatusOk = false;
	//没有数据或出错时，还把 submitButton enable，以让他继续输入股票代码
	var submitButton = document.getElementById("viewDetail");
	submitButton.disabled = false;
	entered = false;
}
function communicateError(newCode, newName) {
	noData(newCode, newName);
}
function someError(newCode, newName) {
	noData(newCode, newName);
}