/**
 * @desc Junco的数据验证方法，请不要随意修改。
 *
 * @author Jinny
 * @version 1.3
 * @date 2002-10-1
 */

var msgRange = "Data out of scope!"//"输入数据超出允许范围";
var msgDate = "Invalid Date!"//"输入数据不是有效的日期";
var msgNumber = "Invalid number"//"输入数据不是有效的数值";
var msgData = "Forbidden data!"//"输入数据不是允许的数据";
var msgSuccess = "success";

/**
 * @desc 验证数据是否在列表中的方法
 * @param Object oDataSrc 数据源
 *
 * @return String 验证的结果，成功为success，失败为错误原因
 */
function checkData(oDataSrc) {
    var sValue = oDataSrc.value;
    var sXmlSrcId = oDataSrc.getAttribute("src");
    if (sXmlSrcId == null) return;
    var oXmlSrc = window.document.getElementById(sXmlSrcId);
    if (oXmlSrc == null) return;
    var arrItems = oXmlSrc.XMLDocument.documentElement.childNodes;
    for (var m = 0; m < arrItems.length; m++) {
        if (sValue == arrItems[m].getAttribute("value")) return msgSuccess;
    }
    return msgData;
}

/**
 * @desc 验证日期是否合法的方法
 * @param Object oDataSrc 数据源
 *
 * @return String 验证的结果，成功为success，失败为错误原因
 */
function checkDate(oDataSrc) {
    var sValue = oDataSrc.value;
    sValue = sValue.replace(/\s/g, "");
    //  var regDate=new RegExp("^\\d{4}\\D{1}\\d{1,2}\\D{1}\\d{1,2}$");
    var regDate = new RegExp("^\\D{1}\\d{1,2}\\D{1}\\d{1,2}\\d{4}$");
    if (!regDate.test(sValue)) return msgDate;

    sValue = sValue.replace(/\D/g, dateSpliter);

    var arrDate = getRealDate(sValue);
    oDataSrc.value = arrDate.join(dateSpliter);

    //    var iTempYear = parseInt(arrDate[0]);
    //    var iTempMonth = parseInt(arrDate[1].replace(/^0/, "")) - 1;
    //    var iTempDay = parseInt(arrDate[2].replace(/^0/, ""));
    var iTempYear = parseInt(arrDate[2]);
    var iTempMonth = parseInt(arrDate[1].replace(/^0/, "")) - 1;
    var iTempDay = parseInt(arrDate[0].replace(/^0/, ""));
    //    var oRealDate = new Date(iTempYear, iTempMonth, iTempDay);
    var oRealDate = new Date(iTempDay, iTempMonth, iTempYear);
    if (oRealDate.getMonth() != iTempMonth || oRealDate.getDate() != iTempDay) return msgDate;

    var sMaxDate = oDataSrc.getAttribute("todate");
    if (sMaxDate != null) {
        var arrMaxDate = getRealDate(sMaxDate);
        if (getDateInt(arrDate) > getDateInt(arrMaxDate)) return msgRange;
    }
    var sMinDate = oDataSrc.getAttribute("fromdate");
    if (sMinDate != null) {
        var arrMinDate = getRealDate(sMinDate);
        if (getDateInt(arrDate) < getDateInt(arrMinDate)) return msgRange;
    }
    return msgSuccess;
}

/**
 * @desc 验证数字是否合法的方法
 * @param Object oDataSrc 数据源
 *
 * @return String 验证的结果，成功为success，失败为错误原因
 *
 * @deprecated 不再使用
 * @deprecated 不再使用 js/default.js:js_nice
 *
 * @see js/default.js:js_nice
 * @see js/default.js
 */
function checkNumber(oDataSrc) {
    var sValue = oDataSrc.value;
    var sPrefix = "";
    var sTemp = sValue.charAt(0);
    if (sTemp == "+" || sTemp == "-") {
        sPrefix = sTemp;
        sValue = sValue.replace(/^[\+-]/, "");
    }

    sValue = sValue.replace(/^0+\./, "^.");
    sValue = sValue.replace(/^0+/, "");
    sValue = sValue.replace(/^\^\./, "0.");

    var sDecimal = oDataSrc.getAttribute("decimal");
    if (sDecimal == null) sDecimal = "0";

    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;

    var sMax = oDataSrc.getAttribute("max");
    if (sMax != null) {
        if (parseFloat(sValue) > parseFloat(sMax)) return msgRange;
    }
    var sMin = oDataSrc.getAttribute("min");
    if (sMin != null) {
        if (parseFloat(sValue) < parseFloat(sMin)) return msgRange;
    }
    oDataSrc.value = sValue;
    return msgSuccess;
}

function getRealDate(sRange) {
    var arrRange;
    if (sRange == "today") {
        var oDate = new Date();
        //        arrRange = new Array((oDate.getFullYear()).toString(), oDate.getMonth() + 1, oDate.getDate());
        arrRange = new Array((oDate.getDate(),oDate.getMonth() + 1,oDate.getFullYear()).toString());
    }
    else arrRange = sRange.split(dateSpliter);
    arrRange[1] = getDbNum(arrRange[1]);
    arrRange[2] = getDbNum(arrRange[2]);
    return arrRange;
}


function getDateInt(arrRange) {
    return (parseInt(arrRange.join("")));
}

function getDbNum(iNum) {
    var sNum = iNum.toString();
    if (sNum.length == 1) return ("0" + sNum); else return sNum;
}
