var msgSystemError = "系统错误，请稍后再试!";
var msgNotSuppoerError = "对不起，您的浏览器不支持此种访问模式！";
var msgRange = "输入数据超出允许范围";
var msgOverMax = "您希望使用的尊宝币余额不足或超过本订单总金额，请重新输入";
var msgNumber = "输入数据不是有效的数值";

function getEventTarget(evt) {
	var targ
	// for IE
	if (!evt)
		evt = window.event
	if (evt.target) {
		// OTHER
		targ = evt.target
	} else if (evt.srcElement) {
		// IE
		targ = evt.srcElement
	}
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode
	return targ;
}

function selectEventTarget(evt) {
	var targ = getEventTarget(evt);
	targ.select();
}

/**
 * @desc get the xml http component
 * 
 * @return XmlHttp XmlHttp component
 */
function getXmlHttp() {
	var xmlhttp = false;
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && window.createRequest()) {
		try {
			xmlhttp = window.createRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	return xmlhttp;

}
/**
 * get text value from a xml element, for deferent browser
 */
function getElementValue(oElement) {

	if (typeof oElement.text != "undefined") {
		// IE
		return oElement.text;
	} else if (typeof oElement.textContent != "undefined") {
		// OTHER
		return oElement.textContent;
	} else {
		return null;
	}
}

function fireEvent(oElement, sMSEvent, sEvent) {
	if (typeof oElement.fireEvent != "undefined") {
		oElement.fireEvent(sMSEvent);
	} else {
		var evt = document.createEvent('HTMLEvents');
		evt.initEvent(sEvent, true, true);
		oElement.dispatchEvent(evt);

	}
}

/**
 * @desc get url which has timestamp
 * 
 * @param String
 *            sUrl the url without timestamp
 * @return String the url with timestamp
 */
function getTimeUrl(sUrl) {
	var iTime = (new Date()).getTime();

	if (sUrl.indexOf("jmflag=") >= 0) {
		sUrl = sUrl.replace(/jmflag=\d{13}/, "jmflag=" + iTime.toString());
		return sUrl;
	}

	sUrl += (/\?/.test(sUrl)) ? "&" : "?";
	return (sUrl + "jmflag=" + iTime.toString());
}

/**
 * @desc the Http xml get methods ,异步alert
 * 
 * @param String
 *            sUrl the url
 * @return XMLDocument download result,save as the XMLDocument object
 */
function httpGet(sUrl) {
	var xmlhttp = getXmlHttp();
	if (!xmlhttp) {
		alert(msgNotSuppoerError);
	}
	try {
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4) {
				var sXmlResult = xmlhttp.responseXML.documentElement;

				var result = getElementValue(sXmlResult.getElementsByTagName("result")[0]);

				if (result != null) {
					if (result == "redirect") {
						// alert(sXmlResult.getElementsByTagName("message")[0].text);
						var url = getElementValue(sXmlResult.getElementsByTagName("url")[0]);
						if (url != null) {
							changeLocation(url);
						}
					} else {
						alert(getElementValue(sXmlResult.getElementsByTagName("message")[0]));
					}
				}
			}
		}
		xmlhttp.open("GET", getTimeUrl(sUrl), true);
		xmlhttp.setRequestHeader("RequestSender", "Erry");
		xmlhttp.setRequestHeader("pragma", "no-cache");
		xmlhttp.setRequestHeader("Cache-Control", "no-cache, must-revalidate");
		xmlhttp.setRequestHeader("expires", "0");
		xmlhttp.send(null);
	} catch (e) {
		alert(msgSystemError);
	}
}

function httpGet1(sUrl, skuId) {
	var xmlhttp = getXmlHttp();
	if (!xmlhttp) {
		alert(msgNotSuppoerError);
	}
	try {
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4) {
				var sXmlResult = xmlhttp.responseXML.documentElement;

				var result = getElementValue(sXmlResult.getElementsByTagName("result")[0]);

				if (result != null) {
					if (result == "redirect") {
						// alert(sXmlResult.getElementsByTagName("message")[0].text);
						var url = "/philips/webshop/projectSkuDetail.htm?skuId=" + skuId;
						if (url != null) {
							changeLocation(url);
						}
					} else {
						alert(getElementValue(sXmlResult.getElementsByTagName("message")[0]));
					}
				}
			}
		}
		xmlhttp.open("GET", getTimeUrl(sUrl), true);
		xmlhttp.setRequestHeader("RequestSender", "Erry");
		xmlhttp.setRequestHeader("pragma", "no-cache");
		xmlhttp.setRequestHeader("Cache-Control", "no-cache, must-revalidate");
		xmlhttp.setRequestHeader("expires", "0");
		xmlhttp.send(null);
	} catch (e) {
		alert(msgSystemError);
	}
}

/**
 * @desc the Http xml post methods ,同步返回结果
 * 
 * @param String
 *            sUrl the url
 * @return XMLDocument download result,save as the XMLDocument object
 */
function httpPost(sUrl, sData) {
	var xmlhttp = getXmlHttp();
	if (!xmlhttp) {
		return "error^" + msgNotSuppoerError;
	}
	try {
		xmlhttp.open("POST", getTimeUrl(sUrl), false);
		xmlhttp.setRequestHeader("RequestSender", "Erry");
		xmlhttp.setRequestHeader("pragma", "no-cache");
		xmlhttp.setRequestHeader("Cache-Control", "no-cache, must-revalidate");
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("expires", "0");
		xmlhttp.send(sData);
		//alert(xmlhttp.responseXML);
		var oXml = xmlhttp.responseXML.documentElement;
		return getElementValue(oXml.getElementsByTagName("message")[0]);
	} catch (e) {
		return "error^" + msgSystemError;
	}
}

/**
 * @desc check the number
 * @param Object
 *            oDataSrc the data source
 * 
 * @return String the check Result，if success,the message is success，otherwise the reason of error
 * 
 */
function checkInteger(sValue, iMin, iMax) {
	var sPrefix = "";
	var sTemp = sValue.charAt(0);
	if (sTemp == "+" || sTemp == "-") {
		sPrefix = sTemp;
		sValue = sValue.replace(/^[\+-]/, "");
	}

	sValue = sValue.replace(/^(0(?=\d))+/, "");

	var regNum = new RegExp("^\\d+$");

	if (!regNum.test(sValue))
		return msgNumber;

	sValue = sValue.replace(/^\./, "0.");
	sValue = sValue.replace(/\.$/, ".0");
	sValue = sPrefix + sValue;

	if (iMax != null) {
		if (parseInt(sValue) > parseInt(iMax))
			return msgRange;
	}
	if (iMin != null) {
		if (parseFloat(sValue) < parseInt(iMin))
			return msgRange;
	}
	if (sValue == 0 && iMax == null) {
		return msgRange;
	}
	return null;
}

/**
 * @desc check the number
 * @param Object
 *            oDataSrc the data source
 * 
 * @return String the check Result，if success,the message is null，otherwise the reason of error
 * 
 */
function checkNumber(sValue, fMin, fMax, sDecimal) {
	var sPrefix = "";
	var sTemp = sValue.charAt(0);
	if (sTemp == "+" || sTemp == "-") {
		sPrefix = sTemp;
		sValue = sValue.replace(/^[\+-]/, "");
	}

	sValue = sValue.replace(/^(0(?=\d))+/, "");

	var regNum;
	if (sDecimal == "0")
		regNum = new RegExp("^\\d+$");
	else
		regNum = new RegExp("^\\d+\\.?\\d{0," + sDecimal + "}$");

	if (!regNum.test(sValue))
		return msgNumber;

	sValue = sValue.replace(/^\./, "0.");
	sValue = sValue.replace(/\.$/, ".0");
	sValue = sPrefix + sValue;

	if (fMax != null) {
		if (parseFloat(sValue) > parseFloat(fMax))
			return msgOverMax;
	}

	if (fMin != null) {
		if (parseFloat(sValue) < parseFloat(fMin))
			return msgRange;
	}
	return null;
}

function changeLocation(sUrl) {
	// alert(encodeURI(sUrl));
	window.location = sUrl;
}

function goToPage(evt) {
	var targ = getEventTarget(evt);

	var url = targ.getAttribute("gotourl")

	var page = document.getElementById(targ.getAttribute("gotovalue")).value;
	var result = checkInteger(page);
	if (result != null) {
		alert(result);
		return;
	}
	url += (/\?/.test(url)) ? "&" : "?";
	url += "currentPage=" + page;
	changeLocation(url);

}

/**
 * @desc get the filled status of a tag name
 * @param String
 *            tagName is tag's name
 * @return int if all the tag is filled return 0, if no such tag or the number of tag is zero,return -1 if some of the tag's area is not filled return the first index of the not filled tags
 */
function isFilled(tagName) {
	var bResult = 0;
	var oTags = document.getElementsByName(tagName);

	if (oTags == null || oTags.length == 0) {
		bResult = -1
	} else {
		for (var iIndex = 0; iIndex < oTags.length; iIndex++) {
			var sValue = oTags[iIndex].value;
			if (sValue == null || sValue == "") {
				bResult = iIndex + 1;
				break;
			}
		}
	}
	return bResult;
}

function selectAll(tagName) {
	var oChks = document.getElementsByName(tagName);
	if (oChks != null && oChks.length > 0) {
		for (var iIndex = 0; iIndex < oChks.length; iIndex++) {
			oChks[iIndex].checked = true;
		}
	}
}

function unSelectAll(tagName) {
	var oChks = document.getElementsByName(tagName);
	if (oChks != null && oChks.length > 0) {
		for (var iIndex = 0; iIndex < oChks.length; iIndex++) {
			oChks[iIndex].checked = false;
		}
	}
}

function clickButton(buttonId) {
	var oBtn = document.getElementById(buttonId);
	oBtn.click();
}

function focusElement(elementId) {
	var oTag = document.getElementById(elementId);
	oTag.focus();
}

