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 {
        /*alert(getTimeUrl(sUrl));
        alert(sData);*/
        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");
        //alert("aaa");
        xmlhttp.send(sData);
        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();
}
