///////////////////////////////////////////////////////////////////////////////////
// 文件名 ：common.js
// 功  能 ：定义了一些公用函数，
//          比如：设置提示信息，设置提交 XML 数据等功能。
//
// 编写者 ：    zxh
//
// 日  期 ：    2004/4/21
//
///////////////////////////////////////////////////////////////////////////////////


//check your machine of msxml
function checkXmlVer()
{
	var strVer;
	var xml = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><cjb></cjb>";
	var xsl = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><x:stylesheet version=\"1.0\" xmlns:x=\"http://www.w3.org/1999/XSL/Transform\" xmlns:m=\"urn:schemas-microsoft-com:xslt\"><x:template match=\"/\"><x:value-of select=\"system-property('m:version')\" /></x:template></x:stylesheet>";
	//var xsl = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><x:stylesheet version=\"1.0\" xmlns:x=\"http://www.w3.org/TR/WD-xsl\"></x:stylesheet>";

	var x = null;
	    
	try{ 
	    x = new ActiveXObject("Msxml2.DOMDocument");
	    x = null; 
	}catch(e){
        strVer = "0.0";
        return strVer;
	}
	 
	try{ 
	    x = new ActiveXObject("Msxml2.DOMDocument.2.6"); 
        x = null;
	}catch(e){
	    strVer = "1.0";
        return strVer;
	} 

	try{ 
	    x = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
        x = null;
	}catch(e){
	    strVer = "2.6";
        return strVer;
	}

	try{ 
	    x = new ActiveXObject("Msxml2.DOMDocument.4.0"); 
        x = null;
	}catch(e){
	    strVer = "3.0";
        return strVer;
	}
	
    strVer = "4.0";
    return strVer;
	
}

//check your machine's Type of IE
function checkIETypeVer()
{

  return navigator.appName;

}

//check your machine's width and height of screen
function checkScreen()
{

  return window.screen.width+"x"+window.screen.height;

}

//判断分辨率是否大于800x600
//如果小于800x600 则 返回 0
//如果等于800x600 则 返回 1
//如果大于800x600 则 返回 2
function Is800x600()
{

  if(window.screen.width==800&&window.screen.height==600)
  {
     return 1;
  }
  else{
      if(window.screen.width<800&&window.screen.height<600){        
         return 0;     
      }
      else{
         return 2; 
      }
  }

}

//判断颜色位数
function checkColorDepth()
{

return window.screen.colorDepth;

}


//check your machine's Version of IE
function checkIEVer()
{
    var ua = window.navigator.userAgent;
    var msiePos = ua.indexOf("MSIE");
    var msieVer = 0;
    var msieVer;
    if (msiePos >= 0) {
        msieVer = ua.substr(msiePos+5,3);
        return msieVer;
    }
    return "";

}




//+------------------------------------
// 设置提示信息
// sMsg : String    提示信息
// iIndex : Integer 为要显示提示的页面索引
//-------------------------------------
function setHint(sMsg, iIndex)
{
    try {
        var index = iIndex ? iIndex : g_xTabPane.selectedIndex
        g_xTabPane.pages[index].setHint(sMsg);
    }
    catch (e) {}
}

//+------------------------------------
// 设置跟随提示
// obj : Object     相关对象
// sMsg : String    提示信息
//-------------------------------------
function setFollowHint(obj, sMsg)
{
    try {
        if (obj)
            g_xHint.setHint(obj, sMsg);
        else
            g_xHint.hidden();
    }
    catch (e) {}
}

//+------------------------------------
// 上一焦点
//-------------------------------------
function PrevFocus()
{
    g_xTabPane.movePrev();
}

//+------------------------------------
// 下一焦点
//-------------------------------------
function NextFocus()
{
    g_xTabPane.moveNext();
}

//+------------------------------------
// 处理字典控件单击选择事件
//-------------------------------------
function ctlDic_Item_Click()
{
    if (g_xDic.currentCode != "") {
        SetContentBase(g_xDic.currentCode, g_xDic.currentText);
    }
    if (g_xTabPane.pages[g_xTabPane.selectedIndex].edits[g_xTabPane.indexFocus].jump!="true")
    {
    g_xTabPane.pages[g_xTabPane.selectedIndex].edits[g_xTabPane.indexFocus].focus();
    NextFocus();
    }
    else
    {
      document.frmInput.cmdunit.focus()
    }
}

//+------------------------------------
// 设置当前录入框的值
//-------------------------------------
function SetContent()
{
    SetContentBase(g_xDic.currentCode, g_xDic.currentText);
}

//+------------------------------------
// 设置当前录入框的基值
//-------------------------------------
function SetContentBase(sCode, sText)
{
    var edits = g_xTabPane.pages[g_xTabPane.selectedIndex].edits;
    var iIndex = g_xTabPane.indexFocus;
    if (iIndex == -1) return;
    if (edits[iIndex].kind.toLowerCase() == "dic" && !edits[iIndex].readOnly) {
        g_bCheckChanged = false;
        edits[iIndex].code = sCode;
        edits[iIndex].value = sText;
        g_bCheckChanged = false;
    }
}


///////////////////////////////////////////////////////////////////////////////////
// 提交处理
///////////////////////////////////////////////////////////////////////////////////

//+------------------------------------
// 设置 DataInfo XML 字符串
//-------------------------------------
function setDataInfoXML(edits)
{
    var len;
    var arr_fieldName = [];
    var arr_nodeValue = [];
    var arr_showValue = [];     // 显示值
    var arr_valueType = [];     // code 中是否包含的是 XML 字符串
    var kind;
    for (var i = 0; i < edits.length; i++) {
        if (edits[i].ignore) {
            continue;
        }
        if (edits[i].fieldname) {
            if (edits[i].fieldname.length < 1) {
                continue;
            }
            len = arr_fieldName.length;
            kind = edits[i].kind.toLowerCase();
            arr_fieldName[len] = edits[i].fieldname.toUpperCase();
            if (kind == "dic" || kind == "query" || kind == "more") {
                if (typeof(edits[i].code) == "string") {
                    arr_nodeValue[len] = edits[i].code.length > 0 ? edits[i].code : "";
                    arr_showValue[len] = (kind == "more") ? "" : (edits[i].value == ">" ? "" : edits[i].value);
                }
                else {
                    arr_nodeValue[len] = "";
                    arr_showValue[len] = "";
                }
            }
            else {
                if (typeof(edits[i].code) == "string") {
                    arr_nodeValue[len] = edits[i].code.length > 0 ? edits[i].code : edits[i].value;
                }
                else {
                    arr_nodeValue[len] = edits[i].value;
                }
                arr_showValue[len] = "";
            }
            arr_valueType[len] = (kind == "more") ? true : false;
        }
    }

    return buildDataInfo(arr_fieldName, arr_nodeValue, arr_showValue, arr_valueType);
}

//+------------------------------------
// 获得提交数据(用于主录入项目)
//-------------------------------------
function getValue()
{
    try {
        var pages, edits, labels;
        var oBtn = g_frmPost.all("cmdSubmit");
        var oHidden = g_frmPost.all("txtXML");
        var arr_Edit = [];

        oHidden.value = "";
        if (oBtn) {
            oBtn.disabled = true;
        }

        pages = g_xTabPane.pages;
        for (var i = 0; i < pages.length; i++) {
            edits = pages[i].edits;
            labels = pages[i].labels;
            for (var j = 0; j < edits.length; j++) {
                if (edits[j].must == "true") {
                    var kind = edits[j].kind.toLowerCase();
                    if (kind == "dic" || kind == "query" || kind == "more") {
                        if (edits[j].code.length < 1) {
                            err("[" + labels[j].innerText + "]是必录项！");
                        }
                    }
                    else if (edits[j].value.length < 1) {
                        err("[" + labels[j].innerText + "]是必录项！");
                    }
                }
                if (edits[j].error == true) {
                    err("[" + labels[j].innerText + "]的值无效！");
                }
                arr_Edit[arr_Edit.length] = edits[j];
            }
        }
        i = j = 0;
        oHidden.value = setDataInfoXML(arr_Edit).xml;
        return true;
    }
    catch (e) {
        printf(e.description);
        if (oBtn) {
            oBtn.disabled = false;
        }
        g_xTabPane.setSelectedIndex(i);
        edits[j].focus();
        return false;
    }
}

//+------------------------------------
// 获得提交数据(用于辅助录入项目)
//-------------------------------------
function getMoreValue()
{
    // 检查录入框是否全为空
    function checkAllIsBlank(edits) {
        for (var i = 0; i < edits.length; i++) {
            if (edits[i].type != "hidden") {
                if (edits[i].value.length > 0) {
                    return false;
                }
            }
        }
        return true;
    };

    try {
        var pages, edits, labels;
        var oBtn = g_frmPost.all("cmdSubmit");
        var oHidden = g_frmPost.all("txtXML");
        var arr_Edit;
        var sXML = "";
        var sNodePath = "DATAINFO/";

        oHidden.value = "";
        if (oBtn) {
            oBtn.disabled = true;
        }

        pages = g_xTabPane.pages;
        for (var i = 0; i < pages.length; i++) {
            edits = pages[i].edits;
            labels = pages[i].labels;

            if (checkAllIsBlank(edits)) {
                continue;
            }

            arr_Edit = [];
            for (var j = 0; j < edits.length; j++) {
                if (edits[j].must == "true") {
                    var kind = edits[j].kind.toLowerCase();
                    if (kind == "dic" || kind == "query" || kind == "more") {
                        if (edits[j].code.length < 1) {
                            err("[" + labels[j].innerText + "]是必录项！");
                        }
                    }
                    else if (edits[j].value.length < 1) {
                        err("[" + labels[j].innerText + "]是必录项！");
                    }
                }
                if (edits[j].error == true) {
                    err("[" + labels[j].innerText + "]的值无效！");
                }
                arr_Edit[arr_Edit.length] = edits[j];
            }
            j = 0;
            var oNode = getNodeDOM(setDataInfoXML(arr_Edit), sNodePath);
            sXML += oNode.firstChild.xml;
        }
        oHidden.value = sXML;
        return true;
    }
    catch (e) {
        printf(e.description);
        if (oBtn) {
            oBtn.disabled = false;
        }
        g_xTabPane.setSelectedIndex(i);
        edits[j].focus();
        return false;
    }
}


///////////////////////////////////////////////////////////////////////////////////
// 设置初始值
///////////////////////////////////////////////////////////////////////////////////

//+------------------------------------
// 通过 XML 字符串获得录入框的编码值和文本值
// sRoot ： String      根节点名
// sXML ： String       XML 字符串
// bByPage ： Boolean   去多值数据是否按页面序号
//  (如果为true,表示按页面序号,例如携带人的初始赋值)
//-------------------------------------
function setValue(sRoot, sXML, bByPage)
{
    try {
        if (sXML.length < 1) {
            return false;
        }

        var pages, edits, labels;
        var kind, nodePath, attValue, nodeValue;
        var objXML = createDOMDocument();
        var index;
        sXML = sXML.replace(/&quot;/g, "'");
        objXML.loadXML(sXML);
        if (objXML.parseError.errorCode != 0) {
            throw 0;
        }

        pages = g_xTabPane.pages;
        for (var i = 0; i < pages.length; i++) {
            edits = pages[i].edits;
            index = bByPage ? i : 0;
            for (var j = 0; j < edits.length; j++) {
                kind = edits[j].kind.toLowerCase();
                if (!edits[j].fieldname)
                    continue;
                nodePath = sRoot + "/" + edits[j].fieldname.toUpperCase();
                nodeValue = getNodeValue(objXML, nodePath, index);
                nodeValue = nodeValue ? nodeValue : "";
                attValue = getAttribValue(objXML, nodePath, "sv", index);
                attValue = attValue ? attValue : "";
                if (nodeValue == "" && attValue == "")
                  {
                    edits[j].value=""
                    edits[j].code=""
                  }  
                if (kind == "dic" || kind == "query") {
                    g_bCheckChanged = false;
                    edits[j].value = attValue;
                    g_bCheckChanged = false;
                    edits[j].code = nodeValue;
                }
                else if (kind != "more"){
                   if(kind=="datetime"){
                       edits[j].value = datetimeToStr(nodeValue);
                   }
                   else{
                       edits[j].value = nodeValue;
                   }
                }
                else {
                  /*
                   * 获得多值节点的节点名
                   * 对于 kind="more" 类型的节点,有一个 fieldname1 的属性标识子节点的路径
                   */
                  var sFieldName = edits[j].fieldname.toUpperCase();
                  var sFieldName1 = edits[j].fieldname1.toUpperCase();
                  var nlMore = objXML.selectNodes(sRoot + "/" + sFieldName + "/" + sFieldName1);
                  var sMore = "";   // 保存多值节点的 XML 字符串
                  if (nlMore.length > 0){
                    edits[j].value = "[已录入]";
                    // 循环获得所有子节点的 XML 字符串
                    for (var k=0; k<nlMore.length; k++){
                      sMore += nlMore.item(k).xml;
                    }
                    sMore = "<DATA>" + sMore + "</DATA>";
                  }
                  edits[j].code = sMore;
                }
            }
        }
        return true;
    }
    catch (e) {
        return false;
    }
}

///////////////////////////////////////////////////////////////////////////////////
// 查询处理
///////////////////////////////////////////////////////////////////////////////////

//+------------------------------------
// 获得简单查询的 XML 字符串
//-------------------------------------
function simpleQuery(edits, iPageSize, iCurrentPage)
{
    var arr_Condition = [];
    var sFieldName, sValue, sShowValue, sOperation, sKind, len;
    var sXML = "";
    for (var i = 0; i < edits.length; i++) {
        if (edits[i].fieldname && edits[i].value.length > 0) {
            len = arr_Condition.length;
            sFieldName = edits[i].fieldname.toUpperCase();
            sKind = edits[i].kind.toLowerCase();
            if (sKind == "dic" || sKind == "query" || sKind == "more") {
                if (typeof(edits[i].code) == "string") {
                    sValue = edits[i].code.length > 0 ? edits[i].code : "";
                }
                else {
                    sValue = "";
                }
                sShowValue = edits[i].value;
            }
            else {
                if (typeof(edits[i].code) == "string") {
                    sValue = edits[i].code.length > 0 ? edits[i].code : edits[i].value;
                }
                else {
                    sValue = edits[i].value;
                }
                sShowValue = ""
            }
            sOperation = edits[i].operation ? edits[i].operation : "=";
            if (sOperation.toLowerCase() == "like") {
                sValue = "%" + sValue + "%";
            }
            arr_Condition[len] = makeCondition(sFieldName, sOperation, sValue, sShowValue);
        }
    }
    if (arr_Condition.length > 0) {
        var xmlConditions= makeConditions("and", arr_Condition);
        sXML = makeQueryCondition("", xmlConditions).xml;
    }
    return sXML;
}

//+------------------------------------
// 获得复杂查询的 XML 字符串
//-------------------------------------
function complexQuery(edits, iPageSize, iCurrentPage)
{
    return "";
}

//+------------------------------------
// 进行查询,取得查询条件
// iIndex ： Integer        页面序号
// bComplex ： Boolean      是否复杂查询
//-------------------------------------
function doQuery(iIndex, bComplex)
{
    try {
        var sXML;
        var n = iIndex ? iIndex : 0;
        var pages = g_xTabPane.pages[n];
        var edits = pages.edits;
        var labels = pages.labels;
        var arr_Edit = [];
        var oBtn = g_frmPost.all("cmdSubmit");
        var oHidden = g_frmPost.all("txtXML");

        var i;
        var bIsAllBlank = true;

        oHidden.value = "";
        if (oBtn) {
            oBtn.disabled = true;
        }

        for (i = 0; i < edits.length; i++) {
            if (edits[i].value.length > 0 && edits[i].type != "hidden") {
                bIsAllBlank = false;
            }
        }

        if (bIsAllBlank) {
            i = 0;
            err("查询条件不能为空");
        }
        

        for (i = 0; i < edits.length; i++) {
            if (edits[i].must == "true" && edits[i].value.length < 1) {
                err("[" + labels[i].innerText + "]是必录项！");
            }
            if (edits[i].error == true) {
                err("[" + labels[i].innerText + "]的值无效！");
            }
            if (edits[i].value.length > 0) {
                arr_Edit[arr_Edit.length] = edits[i];
            }
        }

        i = 0;

        if (bComplex) {
            sXML = complexQuery(arr_Edit);
        }
        else {
            sXML = simpleQuery(arr_Edit);
        }
        oHidden.value = sXML;
        return true;
    }
    catch (e) {
        printf(e.description);
        if (oBtn) {
            oBtn.disabled = false;
        }
        g_xTabPane.setSelectedIndex(n);
        edits[i].focus();
        return false;
    }
}


//+------------------------------------
// 判断是否为空
// strInput：字符串
// 返回：
// true:为空
// false:不为空
//-------------------------------------

function isEmpty(strInput){

    if (isBlank(strInput)){
        return true;
    }
    else{
        if(!strInput){
            return true;
        }
        else{
            if(strInput=="null"){
                return true;
            }
        }
    }
    return false;
}

//+------------------------------------
// 设置控件风格
//-------------------------------------
function setStyle(sType)
{
    try {
	var obj=event.srcElement;
	m_bReadOnly=false;
    if(obj.readonly){m_bReadOnly=true}
        if (m_bReadOnly) return;
        with (obj.runtimeStyle) {
            color = eval("EDIT_COLOR_" + sType);
            //border = eval("EDIT_BORDER_" + sType);
            background = eval("EDIT_BACKGROUND_" + sType);
        }
        obj.tabPage.labels[obj.index].runtimeStyle.color = eval("LABEL_COLOR_" + sType);
    }
    catch (e) {}
}


//+------------------------------------
// 获得当前提示
//-------------------------------------
function getCurrentHint()
{
    var sHint;
   var obj=event.srcElement;

   m_kind=(obj.kind)?obj.kind.toLowerCase():"";
    switch (m_kind) {
        case "dic":
            sHint = obj.hint ? obj.hint : STR_HINT_DIC;
            break;

        case "query":
            sHint = obj.hint ? obj.hint : STR_HINT_QUERY;
            break;

        case "more":
            sHint = obj.hint ? obj.hint : STR_HINT_MORE;
            break;

        case "date":
            sHint = obj.hint ? obj.hint : STR_HINT_DATA;
            break;

        case "time":
            sHint = obj.hint ? obj.hint : STR_HINT_TIME;
            break;

        case "datetime":
            sHint = obj.hint ? obj.hint : STR_HINT_DATATIME;
            break;

        case "idcard":
            sHint = obj.hint ? obj.hint : STR_HINT_IDCARD;
            break;

        case "int":
            sHint = obj.hint ? obj.hint : STR_HINT_INT;
            break;

        case "float":
            sHint = obj.hint ? obj.hint : STR_HINT_FLOAT;
            break;

        case "mask":
            sHint = obj.hint ? obj.hint : (obj.mask ? STR_HINT_MASK : "");
            break;

        default:
            sHint = obj.hint ? obj.hint : "";
    }
    return sHint;
}


//+------------------------------------
// 对身份证的关联处理
//-------------------------------------
function relatHandle(obj)
{
    // 从身份证号码中提取性别和出生日期
    if(!obj){
		var obj=event.srcElement;
	}

    m_kind=(obj.kind)?obj.kind.toLowerCase():"";
      	  
m_sErrorInfo=obj.errorText;
    if (m_kind == "idcard") {
        var oSex, oBirthDate;
        try {
            var oSex = obj.sex.substr(0,1) == '#' ?
                obj.tabPage.edits[obj.sex.substr(1)] : window.document.getElementById(obj.sex);
            var oBirthDate = obj.birthdate.substr(0,1) == '#' ?
                oBirthDate = obj.tabPage.edits[obj.birthdate.substr(1)] : window.document.getElementById(obj.birthdate);
            var oOld = obj.birthdate.substr(0,1) == '#' ?
                oOld = obj.tabPage.edits[obj.old.substr(1)] : window.document.getElementById(obj.old);     
        }
        catch (e) {}

        if (obj.value != "" && !m_bFormatError) {
            if (oSex) {
                var s = getSex(obj.value);
                g_bCheckChanged = false;
                oSex.value = s == "1" ? "男" : (s == "2" ? "女" : "未知的性别");
                oSex.code = s;
                g_bCheckChanged = false;
            }

            if (oBirthDate) {
                var s = getBirthday(obj.value);
                if (s) {
                    oBirthDate.value = s.substr(0,4) + "年" + s.substr(4,2) + "月" + s.substr(6,2) + "日";
                    oBirthDate.code = s;
                }
            }
            if (oOld) {
               var s = getOld(obj.value);
               if (s) {
                    oOld.value=s
               }
            }
        }
    }


    if (obj.idcard) {
        var oIDCard;
        try {
            var oIDCard = obj.idcard.substr(0,1) == '#' ?
                obj.tabPage.edits[obj.idcard.substr(1)] : window.document.getElementById(obj.idcard);
        }
        catch (e) {}

        if (oIDCard) {
            // 身份证合法?
            if (isIDCard(oIDCard.value)) {

                if (m_kind == "dic") {
                    // 判断性别是否与身份证相符合
                    var s = getSex(oIDCard.value);
                    if (parseInt(s) != parseInt(obj.code)) {
                         doError(MASK_SEX_ERROR);
                    }
                    else {
                        obj.errorText = "";
                    }
                }

                if (m_kind == "date") {
                    // 判断出身日期是否与身份证相符合
                    var s = getBirthday(oIDCard.value);
                    if (parseInt(s) != parseInt(obj.code)) {
                         doError(MASK_BIRTHDAY_ERROR);
                    }
                    else {
                        obj.errorText = "";
                    }
                }
            }
        }
    }
}

//+------------------------------------
// 格式化录入框的值
//-------------------------------------
function formatValue(obj)
{
        
    if(!obj){
		var obj=event.srcElement;
	}
	
    m_kind=(obj.kind)?obj.kind.toLowerCase():"";
      	
    m_sErrorInfo=obj.errorText;
    var sTemp = obj.value;
	
    m_bFormatError = false;
    

    if (sTemp.length < 1) {
        return;
    }

    switch (m_kind) {
        case "date":
            sTemp = checkDate(sTemp,obj);
            break;

        case "time":
            sTemp = checkTime(sTemp,obj);
            break;

        case "datetime":
            sTemp = checkDateTime(sTemp,obj);
            break;

        case "idcard":
            sTemp = checkIDCard(sTemp,obj);
            break;

        case "int":
            sTemp = checkInt(sTemp,obj);
            break;

        case "float":
            sTemp = checkFloat(sTemp,obj);
            break;

        case "mask":
            sTemp = checkMask(sTemp,obj);
            break;

        default:
            break;
    }

    if (m_bFormatError) {
    	obj.error=true;
        doError(obj.errorText);
    }
    else {
        g_bCheckChanged = false;
        obj.value = sTemp;
        g_bCheckChanged = false;
        obj.errorText=""
    }  
}


//+------------------------------------
// 格式化文本值
//-------------------------------------
function formatText(obj)
{
	if(!obj){
		var obj=event.srcElement;
	}
	m_kind=(obj.kind)?obj.kind.toLowerCase():"";
	m_sErrorInfo=obj.errorText;
    var sTemp = obj.innerText;

    m_bFormatError = false;


    if (sTemp.length < 1) {
        return;
    }

    m_bFormatError = false;

    switch (m_kind) {
        case "date":
            sTemp = checkDate(sTemp,obj);
            break;

        case "time":
            sTemp = checkTime(sTemp,obj);
            break;

        case "datetime":
            sTemp = checkDateTime(sTemp,obj);
            break;

        default:
            break;
    }

    if (m_bFormatError) {
        doError(obj.errorText);
    }
    else {
        obj.innerText = sTemp;
    }
}


//+------------------------------------
// 检查日期
//-------------------------------------
function checkDate(sValue)
{
    try {
        var sTemp;
        var bFlag = false;

        var sTemp;
        var bFlag = false;
        if (/^\d{4}[-|\/.]\d{1,2}([-|\/.]\d{1,2}){0,1}$/.test(sValue)) {  // yyyy-mm-dd 或 yyyy/mm/dd 或 yyyy.mm.dd
            var ss = sValue.replace(/[\/.]/g, "-");
            ss = ss.split("-");
            ss[2] = (ss.length == 2) ? "01" : ss[2];
            sTemp = ss[0] + patchLen(ss[1]) + patchLen(ss[2]);
            bFlag = true;
        }
        else if (/^\d{4}年\d{2}月\d{2}日$/.test(sValue)) {  // yyyy年mm月dd日
            bFlag = true;
            sTemp = sValue.substr(0,4) + sValue.substr(5,2) + sValue.substr(8,2);
        }
        else if (/^\d{4}$/.test(sValue)) {  // yyyy added by zxh on 2004.05.19 16:06
            sTemp = sValue + "0101";
            bFlag = true;
        }        
        else if (/^\d{6}$/.test(sValue)) {  // yyyymm
            sTemp = sValue + "01";
            bFlag = true;
        }
        else if (/^\d{8}$/.test(sValue)) {  // yyyymmdd
            sTemp = sValue;
            bFlag = true;
        }

        if (!bFlag) {
            throw 0;
        }

        if (isDate(sTemp)) {
            var year = sTemp.substr(0, 4);
            var month = sTemp.substr(4, 2);
            var day = sTemp.substr(6, 2);
            var c = "/";
            return year + "-" + month + "-" + day;
        }
        else {
            throw 0;
        }
    }
    catch (e) {
        m_bFormatError = true;
        return sValue;
    }
}

function checkDate(sValue,obj)
{
    try {
        var sTemp;
        var bFlag = false;

        var sTemp;
        var bFlag = false;
        if(!obj){
			var obj=event.srcElement;
		}
        if (/^\d{4}[-|\/.]\d{1,2}([-|\/.]\d{1,2}){0,1}$/.test(sValue)) {  // yyyy-mm-dd 或 yyyy/mm/dd
            var ss = sValue.replace(/[\/.]/g, "-");
            ss = ss.split("-");
            ss[2] = (ss.length == 2) ? "01" : ss[2];
            sTemp = ss[0] + patchLen(ss[1]) + patchLen(ss[2]);
            bFlag = true;
        }
        else if (/^\d{4}年\d{2}月\d{2}日$/.test(sValue)) {  // yyyy年mm月dd日
            bFlag = true;
            sTemp = sValue.substr(0,4) + sValue.substr(5,2) + sValue.substr(8,2);
        }
        else if (/^\d{4}$/.test(sValue)) {  // yyyy added by zxh on 2004.05.19 16:06
            sTemp = sValue + "0101";
            bFlag = true;
        }                
        else if (/^\d{6}$/.test(sValue)) {  // yyyymm
            sTemp = sValue + "01";
            bFlag = true;
        }
        else if (/^\d{8}$/.test(sValue)) {  // yyyymmdd
            sTemp = sValue;
            bFlag = true;
        }

        if (!bFlag) {
            throw 0;
        }

        if (isDate(sTemp)) {
            var year = sTemp.substr(0, 4);
            var month = sTemp.substr(4, 2);
            var day = sTemp.substr(6, 2);
            var c = "/";
            obj.code = year + month + day;
            return year + "-" + month + "-" + day;
        }
        else {
            throw 0;
        }
    }
    catch (e) {
        m_bFormatError = true;
        if(!obj){
	    var obj=event.srcElement;
	}
        obj.errorText = DATE_FORMAT_ERROR;
        return sValue;
    }
}

function patchLen(str){return str.length!=2?"0"+str:str}

//+------------------------------------
// 检查时间
//-------------------------------------
function checkTime(sValue,obj)
{
    try {
        var sTemp = sValue;
        var bFlag = false;
        
        if(!obj){
			var obj=event.srcElement;
		}

        if (/^\d{1,2}:\d{1,2}(:\d{1,2}){0,1}$/.test(sValue)) {  // hh:mm:ss 或 hh:mm
            var ss = sValue.split(":");
            ss[2] = (ss.length == 2) ? "00" : ss[2];
            sTemp = patchLen(ss[0]) + patchLen(ss[1]) + patchLen(ss[2]);
            bFlag = true;
        }
        else if (/^\d{4}$/.test(sValue)) {  // hhmm
            sTemp = sValue.substr(0,2) + sValue.substr(2,2) + "00";
            bFlag = true;
        }
        else if (/^\d{6}$/.test(sValue)) {  // hhmmss
            sTemp = sValue.substr(0,2) + sValue.substr(2,2) + sValue.substr(4,2);
            bFlag = true;
        }
        else if (/^\d{2}时\d{2}分\d{2}秒$/.test(sValue)) {  // hh时mm分ss秒
            sTemp = sValue.substr(0,2) + sValue.substr(3,2) + sValue.substr(6,2);
            bFlag = true;
        }

        if (!bFlag) {
            throw 0;
        }

        if (isTime(sTemp)) {
            var h = sTemp.substr(0,2);
            var m = sTemp.substr(2,2);
            var s = sTemp.substr(4,2);
            var c = ":";
            obj.code = h + c + m + c + s;
            return h + ":" + m + ":" + s;
        }
        else {
            throw 0;
        }
    }
    catch (e) {
        m_bFormatError = true;
        if(!obj){
			var obj=event.srcElement;
		}
        obj.errorText  = TIME_FORMAT_ERROR;
        return sValue;
    }
}


//+------------------------------------
// 检查日期时间
//-------------------------------------
function checkDateTime(sValue,obj)
{
    try {
        var sTemp = sValue.replace(/[ :/-]/g, "");
        var bFlag = false;
	if(!obj){
	    var obj=event.srcElement;
	}
        if (/^\d{12}$/.test(sTemp))  // YYYYMMDDhhmm
            bFlag = true;
        else if (/^\d{14}$/.test(sTemp))  // YYYYMMDDhhmmss
            bFlag = true;
        else if(/^\d{8}$/.test(sTemp))  // YYYYMMDD
			bFlag = true;
		else if (/^\d{8}\s\d{2}$/.test(sTemp))  // YYYYMMDD hh
            bFlag = true;	
        else if (/^\d{8}\s\d{4}$/.test(sTemp))  // YYYYMMDD hhmm
            bFlag = true;
        else if (/^\d{8}\s\d{6}$/.test(sTemp))  // YYYYMMDD hhmmss
            bFlag = true;
        else if (/^(\d{4}[/|-]\d{2}[/|-]\d{2})\s(\d{2}:\d{2}(:\d{2}){0,1})$/.test(sTemp))  // YYYY-MM-DD hh:mm:ss 或 YYYY-MM-DD hh:mm
            bFlag = true;
        else if (/^(\d{4}[/|-]\d{2}[/|-]\d{2})\s\d{4}$/.test(sTemp))  // YYYY-MM-DD hhmm
            bFlag = true;
        else if (/^(\d{4}[/|-]\d{2}[/|-]\d{2})\s\d{6}$/.test(sTemp))  // YYYY-MM-DD hhmmss
            bFlag = true;
        else if (/^\d{8}\s(\d{2}:\d{2}(:\d{2}){0,1})$/.test(sTemp))  // YYYYMMDD hh:mm:ss 或 YYYYMMDD hh:mm
            bFlag = true;
        else if (/^\d{8}\s(\d{2}时\d{2}分)$/.test(sTemp))  // YYYYMMDD hh时mm分
            bFlag = true;
        else if (/^\d{8}\s(\d{2}时\d{2}分\d{2}秒)$/.test(sTemp))  // YYYYMMDD hh时mm分ss秒
            bFlag = true;
        else if (/^(\d{4}年\d{2}月\d{2}日)\s\d{4}$/.test(sTemp))  // YYYY年MM月DD日 hhmm
            bFlag = true;
        else if (/^(\d{4}年\d{2}月\d{2}日)\s\d{6}$/.test(sTemp))  // YYYY年MM月DD日 hhmmss
            bFlag = true;
        else if (/^(\d{4}年\d{2}月\d{2}日)\s(\d{2}:\d{2}(:\d{2}){0,1})$/.test(sTemp))  // YYYY年MM月DD日 hh:mm:ss 或 YYYY年MM月DD日 hh:mm
            bFlag = true;
        else if (/^(\d{4}年\d{2}月\d{2}日)\s(\d{2}时\d{2}分)$/.test(sTemp))  // YYYY年MM月DD日 hh时mm分
            bFlag = true;
        else if (/^(\d{4}年\d{2}月\d{2}日)\s(\d{2}时\d{2}分\d{2}秒)$/.test(sTemp))  // YYYY年MM月DD日 hh时mm分ss秒
            bFlag = true;
        else if (/^(\d{4}-\d{2}-\d{2})\s(\d{2}时\d{2}分)$/.test(sTemp))     // YYYY-MM-DD hh时mm分
            bFlag = true;
        else if (/^(\d{4}-\d{2}-\d{2})\s(\d{2}时\d{2}分\d{2}秒)$/.test(sTemp))     // YYYY-MM-DD hh时mm分ss秒
            bFlag = true;
        
        if(!bFlag){throw 0;}    
        
        sTemp = sTemp.replace(/[年月日时分秒]/g, "");
        sTemp = sTemp.replace(/[ :/-]/g, "");        
        if(isDateTime1(sTemp)){
            var year = sTemp.substr(0,4);
            var month = sTemp.substr(4,2);
            var day = sTemp.substr(6,2);
            var h = (sTemp.length >= 10) ?sTemp.substr(8,2) : "00";
            var m = (sTemp.length >= 12) ?sTemp.substr(10,2) : "00";
            var s = (sTemp.length == 14) ? sTemp.substr(12,2) : "00";
            var c1 = "-";
            var c2 = ":";
			
	    var obj=event.srcElement;
            obj.code = year + month + day + " " + h + c2 + m + c2 + s;
            return year + c1 + month + c1 + day + " " + h + c2 + m + c2 + s;
        }
        else{
            throw 0;
        }
    }
    catch (e) {
        m_bFormatError = true;
        if(!obj){
			var obj=event.srcElement;
		}
        obj.errorText = DATETIME_FORMAT_ERROR;
        return sValue;
    }
}

//+------------------------------------
// 校验日期＋时间格式是否为YYYYmmDDhhMMss
//-------------------------------------
function isDateTime1(sValue)
{
    var s = sValue.trim();
    if (s.length > 14)
        return false;
    else if (isNaN(s))
        return false;
    else
        return verifyDateTime(s.substr(0,4),s.substr(4,2),s.substr(6,2),
                s.substr(8,2),s.substr(10,2),s.substr(12,2));
}

//+------------------------------------
// 检查身份证
//-------------------------------------
function checkIDCard(sValue,obj)
{
    try {
        if (isIDCard(sValue)) {
            return m_bUpIDCard ? UpID(sValue) : sValue;
        }
        else {
            throw 0;
        }
    }
    catch (e) {
        m_bFormatError = true;
        if(!obj){
	   var obj=event.srcElement;
	}
        obj.errorText  = IDCARD_FORMAT_ERROR;
        return sValue;
    }
}

//+------------------------------------
// 检查整数值
//-------------------------------------
function checkInt(sValue,obj)
{
    try {
		if(!obj){
			var obj=event.srcElement;
		}
        if (isInt(sValue)) {
            if (!checkRange(sValue)) {
               
        obj.errorText  = OVER_RANGE_ERROR + obj.range;
                throw 0;
            }
            return parseInt(sValue, 10);
        }
        else {
            
        obj.errorText  = NUMBER_FORMAT_ERROR;
            throw 0;
        }
    }
    catch (e) {
        m_bFormatError = true;
        return sValue;
    }
}


//+------------------------------------
// 检查浮点值
//-------------------------------------
function checkFloat(sValue,obj)
{
    try {
		if(!obj){
			var obj=event.srcElement;
		}
        if (isFloat(sValue)) {
            if (!checkRange(sValue)) {
               
        obj.errorText  = OVER_RANGE_ERROR + obj.range;
                throw 0;
            }
            return parseFloat(sValue);
        }
        else {
           
        obj.errorText  = NUMBER_FORMAT_ERROR;
            throw 0;
        }
    }
    catch (e) {
        m_bFormatError = true;
        return sValue;
    }
}


//+------------------------------------
// 检查掩码值(# -- 数字; @ -- 字母)
//-------------------------------------
function checkMask(sValue,obj)
{
    try {
		if(!obj){
			var obj=event.srcElement;
		}
        if (obj.mask) {
            if (sValue.length != obj.mask.length)
                throw 0;

            for (var i=0; i<obj.mask.length; i++) {
                switch (obj.mask.charAt(i)) {
                    case "#":
                        if (!isInt(sValue.charAt(i)))
                            throw 0;
                        break;
                    case "@":
                        if (!isLetter(sValue.charAt(i)))
                            throw 0;
                        break;
                    default:
                        if (obj.mask.charAt(i) != sValue.charAt(i))
                            throw 0;
                }
            }
        }
        return sValue;
    }
    catch (e) {
        m_bFormatError = true;
      
        obj.errorText  = MASK_FORMAT_ERROR + "<br>正确的格式：<br><span style='font:8pt'>" +
                obj.mask + "</span>";
        return sValue;
    }
}


//+------------------------------------
// 检查范围
//-------------------------------------
function checkRange(sValue,obj)
{
    try {
		if(!obj){
			var obj=event.srcElement;
		}
        var range = [];
        if (obj.range) {
            eval("range = " + obj.range);
            if (sValue < range[0] || sValue > range[1]) {
                throw 0;
            }
        }
        return true;
    }
    catch (e) {
        return false;
    }
}

//+------------------------------------
// 生成异常
//-------------------------------------
function err(sDesc, iNumber)
{
    var number = iNumber ? iNumber : 0;
    e = new Error(number, sDesc);
    throw e;
}

//+------------------------------------
// 在新窗口查看 xml 字符串
//-------------------------------------
function seeXML(sXML)
{
    var w = window.open(escapeUrl(""));
    w.document.write("<xmp>" + sXML + "</xmp>");
}

//+------------------------------------
// 输出提示
//-------------------------------------
function printf(sMsg)
{
    alert(sMsg);
}

//-----------------------------------------------
// 取随机数
//-----------------------------------------------
function getRandom () {
    if((navigator.appName == "Netscape") && 
      ((navigator.appVersion.indexOf("2.0") >= 0) || 
      (navigator.appVersion.indexOf("Win3") >= 0))) {
        now = new Date();
        // pseudo random
        return (now.getTime() % 1000000) / 1000000;
    } else {
        return Math.random();
    }
}

//-----------------------------------------------
// 替换 > < 为 &gt; &lt;
//-----------------------------------------------
function re(s)
{
    return s.replace(/>/g, "&gt;").replace(/</g, "&lt;");
}

//-----------------------------------------------
// 替换 &gt; &lt; 为 > <
//-----------------------------------------------
function unRe(s)
{
    return s.replace(/&gt;/g, ">").replace(/&lt;/g, "<");
}


///////////////////////////////////////////////////////////////////////////////////
// 浏览器检查
///////////////////////////////////////////////////////////////////////////////////

//if (!hasSupportBehaviors()) {
//    alert("很抱歉你的浏览器不支持 Behaviors 特性\n只有 IE5.5 以上的浏览器才支持！");
//}

//+------------------------------------
// 检查浏览器是否支持 Behaviors （IE5.5 以上才支持）
//-------------------------------------
function hasSupportBehaviors()
{
    if (typeof(hasSupportBehaviors.support) != "undefined")
       //return hasSupportBehaviors.support;
       return true

    var ua = window.navigator.userAgent;
    var msiePos = ua.indexOf("MSIE");
    var msieVer = 0;
    var behaviorsAvailable = false;
    var iHandle = 0;
    if (msiePos >= 0) {
        msieMajorVer = parseInt(ua.charAt(msiePos + 5));
        msieMinorVer = parseInt(ua.charAt(msiePos + 7));
        if (msieMajorVer >= 5) {
            if (((msieMajorVer == 5) && (msieMinorVer >= 5)) ||
                (msieMajorVer > 5))
            {
                hasSupportBehaviors.support = true;
            }
        }
    }
    //return hasSupportBehaviors.support;
    return true;
}

//+------------------------------------
// 检查浏览器是否支持
//-------------------------------------
function hasSupport()
{
    if (typeof(hasSupport.support) != "undefined")
       // return hasSupport.support;
        return true;

    var ie55 = /msie 5\.[56789]/i.test(navigator.userAgent);

    hasSupport.support = (typeof(document.implementation) != "undefined" &&
            document.implementation.hasFeature("html", "1.0") || ie55)

    //return hasSupport.support;
    return true
}




///////////////////////////////////////////////////////////////////////////////////
// 字符串处理
///////////////////////////////////////////////////////////////////////////////////

//+------------------------------------
// trim     去除字符串两端的空格
// trimL    除去字符串左边的空格
// trimR    除去字符串右边的空格
// stripBlanks  剥去字符串中的空格
// lenB     返回指定字符串中的字节个数(备注:中文字符占2个字节)
// contain  是否包含指定字符串
// left     从左边开始截取指定长度的字符串
// right    从右边开始截取指定长度的字符串
// urlEncode 转换字符串中的#与&符号,用于get方法传递参数
//-------------------------------------
String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,"")}
String.prototype.trimL=function(){return this.replace(/(^\s*)/g,"")}
String.prototype.trimR=function(){return this.replace(/(\s*$)/g,"")}
String.prototype.stripBlanks=function(){return this.replace(/\s/g, "")}
String.prototype.lenB=function(){try{return this.match(/[^\x00-\xff]/g).length+this.length}catch(e){return this.length}}
String.prototype.contain=function(str){return (this.indexOf(str)!=-1)?true:false}
String.prototype.left=function(n){var len=this.length;if(len<n) return false; return this.substring(0,n);}
String.prototype.right=function(n){var len=this.length;if(len<n) return false; return this.substring(len-n,len);}
String.prototype.urlEncode=function(){return this.replace(/(#)/g,"%23").replace(/(&)/g,"%26");}


///////////////////////////////////////////////////////////////////////////////////
// 日期检查函数
///////////////////////////////////////////////////////////////////////////////////

//+------------------------------------
// 判断是否是闰年
//-------------------------------------
function isLeapYear(iYear){return ((!(iYear%4)&&(iYear%100))||!(iYear%400))?true:false}

//+------------------------------------
// 处理小于1000的年份，将其加上1900
//-------------------------------------
function y2k(iYear){return (iYear<1000)?iYear+1900:iYear}

//+------------------------------------
// 获得系统当前日期
//-------------------------------------
function getNowDate()
{
    var today = new Date();
    var y = today.getFullYear() + "";
    var m = today.getMonth() + 1 + "";
    m = m.length == 1 ? "0" + m : m;
    var d = today.getDate()+"";
    d = d.length == 1 ? "0" + d : d;
    return y + m + d;
}

function getNowDatetoStr()
{
    var today = new Date();
    var y = today.getFullYear() + "";
    var m = today.getMonth() + 1 + "";
    m = m.length == 1 ? "0" + m : m;
    var d = today.getDate()+"";
    d = d.length == 1 ? "0" + d : d;
    return y +"-"+ m +"-"+ d;
}

//+------------------------------------
// 获得系统当前时间
//-------------------------------------
function getNowTime()
{
    var today = new Date();
    var h = today.getHours() + "";
    h = h.length == 1 ? "0" + h : h;
    var m = today.getMinutes() + "";
    m = m.length == 1 ? "0" + m : m;
    var s = today.getSeconds() + "";
    s = s.length == 1 ? "0" + s : s;
    return h + m + s;
}

//+------------------------------------
// 判断指定日期是否正确
// 当输入参数为verifyDate(dd,mm,ccyy)时，表示要检查年，月，日
// 当输入参数为verifyDate(dd,mm) 表示默认年为当前年
// 当输入参数为verifyDate(dd)    表示默认年，月为当前年月
// 注意：输入月份保证在1-12以内。
//-------------------------------------
function verifyDate(day,month,year)
{
    if (!day) return false;
    var iToday = new Date();
    month = month ? month-1 : iToday.getMonth();
    year = year ? y2k(parseInt(year)) : iToday.getFullYear();
    var iDate = new Date(year,month,day);
    if ((iDate.getFullYear() == year) && (iDate.getMonth() == month) && (iDate.getDate() == day))
        return true;
    else
        return false;
}

//+------------------------------------
// 判断指定时间格式是否正确
// 注意：输入小时保证在0(午夜)-23(晚上11点)
//      输入分钟保证在0-59
//      输入秒数保证在0-59
//-------------------------------------
function verifyTime(hh,mm,ss)
{
    var iDate = new Date(1977,10,27,hh,mm,ss);
    if ((iDate.getHours() == hh) && (iDate.getMinutes() == mm) && (iDate.getSeconds() == ss))
        return true;
    else
        return false;
}

//+------------------------------------
// 判断指定日期时间格式是否正确
// 注意：输入小时保证在0(午夜)-23(晚上11点)
//      输入分钟保证在0-59
//      输入秒数保证在0-59
//-------------------------------------
function verifyDateTime(year,month,day,hh,mm,ss)
{
    if (!verifyDate(day,month,year)) return false;
    var iToday = new Date();
    return verifyTime(hh,mm,ss);
}




///////////////////////////////////////////////////////////////////////////////////
// 身份证处理函数
///////////////////////////////////////////////////////////////////////////////////

//+------------------------------------
// 根据17位身份证算出18位身份证
//-------------------------------------
function CalID_17to18(sId)
{
    var aW = new Array(1,2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7);
    var aA = new Array("1","0","X","9","8","7","6","5","4","3","2");
    var aP = new Array(17);
    var aB = new Array(17);
    var i,iSum = 0;

    for (i=1;i<18;i++)
        aP[i] = sId.substr(17-i, 1);
    for (i=1;i<18;i++) {
        aB[i] = parseInt(aP[i]) * parseInt(aW[i]);
        iSum += aB[i];
    }
    return sId + aA[iSum%11];
}

//+------------------------------------
// 根据15位身份证算出18位身份证
//-------------------------------------
function CalID_15to18(sId)
{
    return CalID_17to18(sId.substr(0,6) + "19" + sId.substr(6));
}

//+------------------------------------
// 把15或17位身份证升级位18位，并进行判断
//-------------------------------------
function UpID(sId)
{
    var s = sId.trim();
    if (s.length == 15) {
        if (isNaN(sId)) return false;
        if (verifyDate(s.substr(10,2),s.substr(8,2),s.substr(6,2)))
            return CalID_15to18(s);
        else
            return false;
    }
    else if (s.length == 17) {
        if (isNaN(s)) return false;
        if (verifyDate(s.substr(12,2),s.substr(10,2),s.substr(6,4)))
            return CalID_17to18(s);
        else
            return false;
    }
    else if (s.length == 18) {
        if (isNaN(s.substr(0,17))) return false;
        if (verifyDate(s.substr(12,2),s.substr(10,2),s.substr(6,4))) {
            if (CalID_17to18(s.substr(0,17)) == s)
                return s;
            else
                return false;
        }
        else
            return false;
    }
    return false;
}

//+------------------------------------
// 从身份证号码中提取出生日期
//-------------------------------------
function getBirthday(sId)
{
    var s = UpID(sId);
    return s ? checkDate(s.substr(6,8)) : "";
}

//+------------------------------------
// 从身份证号码中提取性别，年龄
// (0--未知的性别; 1--男; 2--女)
//-------------------------------------
function getSex(sId)
{
    var s = UpID(sId);
    return s ? (parseInt(s.substr(16,1))%2 ? "男" : "女") : "";
}

function getOld(sId)
{
    var s=UpID(sId);
    var dNow=new Date()
    var iOld=parseInt(dNow.getFullYear())-parseInt(s.substr(6,4))
    return iOld
}


///////////////////////////////////////////////////////////////////////////////////
// 数值校验函数
///////////////////////////////////////////////////////////////////////////////////

//+------------------------------------
// 校验身份证
//-------------------------------------
function isIDCard(sValue)
{
    return UpID(sValue) ? true : false;
}

//+------------------------------------
// 校验日期格式是否为yyyyMMdd
//-------------------------------------
function isDate(sValue)
{
    var s = sValue.trim();
    if (s.length != 8)
        return false;
    else if (isNaN(s))
        return false;
    else
        return verifyDate(s.substr(6),s.substr(4,2),s.substr(0,4));
}


//+------------------------------------
// 校验时间格式是否为hhMMss(24小时制)
//-------------------------------------
function isTime(sValue)
{
    var s = sValue.trim();
    if (s.length != 6)
        return false;
    else if (isNaN(s))
        return false;
    else
        return verifyTime(s.substr(0,2),s.substr(2,2),s.substr(4,2));
}


//+------------------------------------
// 校验日期＋时间格式是否为YYYYmmDDhhMMss
//-------------------------------------
function isDateTime(sValue)
{
    var s = sValue.trim();
    if (s.length != 14)
        return false;
    else if (isNaN(s))
        return false;
    else
        return verifyDateTime(s.substr(0,4),s.substr(4,2),s.substr(6,2),
                s.substr(8,2),s.substr(10,2),s.substr(12,2));
}

//+------------------------------------
//两个时间(YYYYMMDD)的比较
//-------------------------------------
function compareDate(sValue1,sValue2)
{
    var s1 = sValue1.trim();
    var s2 = sValue2.trim();
    s1 = s1.replace(/[-\/: ]/g, "");
    s2 = s2.replace(/[-\/: ]/g, "");
    
    if (s1>=8) s1=s1.substring(0,8);
    if (s2>=8) s2=s2.substring(0,8);
     
    if (isDate(s1)&&isDate(s2)) {
      if (s1==s2)
        return true;
      else if(s1>s2) return "morethan";
      else return "lessthan";
    } else 
      return false; 	
}
//+------------------------------------
//两个时间(YYYYmmddhhmiss)的比较
//-------------------------------------
function compareDateTime(sValue1,sValue2)
{
    var s1 = sValue1.trim();
    var s2 = sValue2.trim();
    s1 = s1.replace(/[-\/: ]/g, "");
    s2 = s2.replace(/[-\/: ]/g, "");
     
    if (isDateTime(s1)&&isdatetime(s2)) {
      if (s1==s2)
        return true;
      else if(s1>s2) return "morethan";
      else return "lessthan";
    } else 
      return false; 	
}

//+------------------------------------
// 是否是整数
//-------------------------------------
function isInt(sValue)
{
    return /^\d*$/.test(sValue);
}

//+------------------------------------
// 是否是浮点数
//-------------------------------------
function isFloat(sValue)
{
    return (/^\d*\.\d+$/.test(sValue) || /^\d*$/.test(sValue));
}

//+------------------------------------
// 是否是数字
//-------------------------------------
function isNumber(sValue)
{
    return isInt(sValue) || isFloat(sValue);
}

//+------------------------------------
// 是否是字母
//-------------------------------------
function isLetter(sValue)
{
    return /^[A-Za-z]*$/.test(sValue);
}

//+------------------------------------
// 是否是字母或数字
//-------------------------------------
function isLetterOrNumber(sValue)
{
    return /^\w*$/.test(sValue);
}

//+------------------------------------
// 是否是空
//-------------------------------------
function isBlank(sValue)
{
    return /^\s*$/.test(sValue);
}




///////////////////////////////////////////////////////////////////////////////////
// DOM&XML 函数
///////////////////////////////////////////////////////////////////////////////////

// IE55 has a serious DOM1 bug... Patch it!
if (/msie 5\.[56789]/i.test(navigator.userAgent)) {
    document._getElementsByTagName = document.getElementsByTagName;
    document.getElementsByTagName = function (sTagName) {
        if (sTagName == "*")
            return document.all;
        else
            return document._getElementsByTagName(sTagName);
    };
}

//+------------------------------------
// 创建 XMLDocument 对象
//-------------------------------------
function createDOMDocument()
{
    try {
        var objXML = new ActiveXObject("Msxml2.DOMDocument");
        objXML.async = false;
        return objXML
    }
    catch (e) {
        return null;
    }
}

//+------------------------------------
// 设置节点的属性
// objXML ：        DOM         DOM 对象
// nodePath ：      String      节点 xPath 路径(由根节点起至该节点)
// attribName ：    String      属性名
// attribValue ：   String      属性值
//-------------------------------------
function setAttribValue(objXML, nodePath, attribName, attribValue)
{
    var node = objXML.selectSingleNode("//" + nodePath);
    if (node) {
        node.setAttribute(attribName, attribValue);
        return true;
    }
    return false;
}

//+------------------------------------
// 获得节点的属性
// objXML ：        DOM         DOM 对象
// nodePath ：      String      节点 xPath 路径(由根节点起至该节点)
// attribName ：    String      属性名
// index ：         Integer     当有多个节点路径相同时，用于索引
//-------------------------------------
function getAttribValue(objXML, nodePath, attribName, index)
{
    try {
        var objNodeList = objXML.selectNodes("//" + nodePath);
        if (objNodeList.length > 0) {
            if (index) {
                return objNodeList.item(index).getAttribute(attribName);
            }
            else {
                return objNodeList.item(0).getAttribute(attribName);
            }
        }
    }
    catch (e) {}
    return null;
}

//+------------------------------------
// 创建根节点
// nodeName ： String       根节点名
//-------------------------------------
function makeRootNode(nodeName)
{
    try {
        var objXML = createDOMDocument();
        objXML.loadXML("<" + nodeName + "/>");
        if (objXML.parseError.errorCode != 0) {
            throw 0;
        }
        return objXML;
    }
    catch (e) {
        return null;
    }
}

//+------------------------------------
// 设置节点值
// objXML ：    DOM         DOM 对象
// nodePath ：  String      节点 xPath 路径(由根节点起至该节点)
// nodeValue ： String      节点值
//-------------------------------------
function setNodeValue(objXML, nodePath, nodeValue)
{
    try {
        var node, path, value;
        var nodes = [];
        var nodeNameList = nodePath.split("/");
        var len = nodeNameList.length - 1;

        if (!objXML.documentElement) {
            throw 0;
        }

        for (var i = 0; i < len; i++) {
            path = nodeNameList[0];
            for (var j=1; j<=i+1; j++)
                path += "/" + nodeNameList[j];
            value = (i != len-1) ? "" : nodeValue;
            node = objXML.selectSingleNode("//" + path);
            if (!node) {
                var pos = path.lastIndexOf("/");
                node = objXML.createElement(path.substr(pos+1));
            }
            if (value != "") node.text = value;
            nodes[i] = node;
        }

        node = nodes[0];
        objXML.documentElement.appendChild(node);
        for (i=1; i<nodes.length; i++) {
            node = node.appendChild(nodes[i]);
        }
        return true;
    }
    catch (e) {
        return false;
    }
}

//+------------------------------------
// 获得节点值
// objXML ：    DOM         DOM 对象
// nodePath ：  String      节点 xPath 路径(由根节点起至该节点)
// index ：     Integer     当有多个节点路径相同时，用于索引
//-------------------------------------
function getNodeValue(objXML, nodePath, index)
{
    try {
        var objNodeList = objXML.selectNodes("//" + nodePath);
        if (objNodeList.length > 0) {
            if (index) {
                return objNodeList.item(index).text;
            }
            else {
                return objNodeList.item(0).text;
            }
        }
    }
    catch (e) {}
    return "";
}

//+------------------------------------
// 设置节点对象
// objXML ：    DOM          DOM 对象
// nodePath ：  String       节点 xPath 路径(由根节点起至该节点)
// sXML ：      String       XML 字符串
//-------------------------------------
function setNodeDOM(objXML, nodePath, sXML)
{
    try {
        if (!objXML.documentElement) {
            throw 0;
        }

        var node = objXML.selectSingleNode("//" + nodePath);
        if (!node) {
            setNodeValue(objXML, nodePath, "");
            node = objXML.selectSingleNode("//" + nodePath);
        }

        var objTXML = createDOMDocument();
        objTXML.loadXML(sXML);
        if (objTXML.parseError.errorCode != 0) {
            throw 0;
        }

        while (objTXML.documentElement.hasChildNodes()) {
            node.appendChild(objTXML.documentElement.firstChild);
        }

        return true;
    }
    catch (e) {
        return false;
    }
}

//+------------------------------------
// 获得节点对象
// objXML ：    DOM         DOM 对象
// nodePath ：  String      节点 xPath 路径(由根节点起至该节点)
// index ：     Integer     当有多个节点路径相同时，用于索引
//-------------------------------------
function getNodeDOM(objXML, nodePath, index)
{
    try {
        var objNodeList = objXML.selectNodes("//" + nodePath);
        if (objNodeList.length > 0) {
            if (index) {
                return objNodeList.item(index);
            }
            else {
                return objNodeList.item(0);
            }
        }
    }
    catch (e) {}
    return null;
}

//+------------------------------------
// 生成 DataInfo XML 数据
// arr_fieldName ： Array       节点名数组
// arr_nodeValue ： Array       节点值数组
// arr_showValue ： Array       节点sv属性值数组
// arr_type ：      Array       节点值的类型
//  (true: XML字符串; false: 文本值)
//-------------------------------------
function buildDataInfo(arr_fieldName, arr_nodeValue, arr_showValue, arr_valueType)
{
    var nodeRoot = "DATAINFO";
    var objXML = makeRootNode(nodeRoot);
    if (!objXML) return;
    var len = arr_fieldName.length;
    for (var i = 0; i < len; i++) {
        var path = nodeRoot + "/" + arr_fieldName[i];
        if (arr_valueType[i]) {
            setNodeDOM(objXML, path, arr_nodeValue[i]);
        }
        else {
            setNodeValue(objXML, path, arr_nodeValue[i]);
            if (arr_showValue[i] != "") {
                setAttribValue(objXML, path, "sv", arr_showValue[i]);
            }
        }
    }
    return objXML;
}

//+------------------------------------
// 生成一个查询子条件
// sFiledName : String      字段名
// sOperation : String      操作类型
// sValue :     String      查询值
// sSV :        String      当查询值为编码时的文本值
//-------------------------------------
function makeCondition(sFiledName, sOperation, sValue, sSV)
{
    try {
        var sXML = "<CONDITION alias='' datatype=''>" +
            "<FIELDNAME sv='" + sSV + "'>" + sFiledName + "</FIELDNAME>" +
            "<OPERATION>" + sOperation + "</OPERATION>" +
            "<VALUE>" + re(sValue) + "</VALUE>" +
            "</CONDITION>";
        var xmlCondition = createDOMDocument();
        xmlCondition.loadXML(sXML);
        if (xmlCondition.parseError.errorCode != 0) {
            throw 0;
        }
        return xmlCondition;
    }
    catch (e) {
        return null;
    }
}

//+------------------------------------
// 增加一个查询条件组
// sType :          String      逻辑关系类型
// xmlConditionA :  XML       查询条件A
// xmlConditionB :  XML       查询条件B
//-------------------------------------
function addConditionItem(sType, xmlConditionA, xmlConditionB)
{
    try  {
        var sXML = "<CONDITIONS>" +
            "<TYPE>" + sType + "</TYPE>" +
            "</CONDITIONS>";
        var xmlConditions = createDOMDocument();
        xmlConditions.loadXML(sXML);
        if (xmlConditions.parseError.errorCode != 0) {
            throw 0;
        }
        if (xmlConditionA) {
             xmlConditions.documentElement.appendChild(xmlConditionA.documentElement.cloneNode(true));
        }
        if (xmlConditionB) {
             xmlConditions.documentElement.appendChild(xmlConditionB.documentElement.cloneNode(true));
        }
        return xmlConditions;
    }
    catch (e) {
        return null;
    }
}

//+------------------------------------
// 由一组查询子条件,构造条件组
// sType :          String    逻辑关系类型
// arr_xmlCondition : XML     查询子条件数组(它们之间的逻辑关系是与)
//-------------------------------------
function makeConditions(sType, arr_xmlCondition)
{
    try {
        var xmlConditions = null;
        if (arr_xmlCondition.length >= 2) {
            xmlConditions = addConditionItem(sType, arr_xmlCondition[0], arr_xmlCondition[1]);
            for (var i=2; i<arr_xmlCondition.length; i++) {
                xmlConditions = addConditionItem(sType, xmlConditions, arr_xmlCondition[i]);
            }
        }
        else {
            xmlConditions = addConditionItem(sType, arr_xmlCondition[0]);
        }
        return xmlConditions;
    }
    catch (e) {
        return null;
    }
}

//+------------------------------------
// 创建查询条件
// sPredicate :     String      谓词
// xmlConditions :  XML         查询条件
//-------------------------------------
function makeQueryCondition(sPredicate, xmlConditions)
{
    try {
        var sXML = "<?xml version='1.0'?>" +
            "<ZAGLDOC tchsoft=\"urn=schemas-tchsoft-com:zagl\" version=\"2.0\">" +
            "<QUERYCONDITION>" +
            "<PREDICATE>" + sPredicate + "</PREDICATE>" +
            "</QUERYCONDITION>" +
            "</ZAGLDOC>";
        var xmlDoc = createDOMDocument();
        xmlDoc.loadXML(sXML);
        if (xmlDoc.parseError.errorCode != 0) {
            throw 0;
        }
        xmlDoc.documentElement.firstChild.appendChild(xmlConditions.documentElement);
        return xmlDoc;
    }
    catch (e) {
        return null;
    }
}

//+------------------------------------
// 生成查询条件 XML
// arr_FieldName ： Array       字段名数组
// arr_Logic ：     Array       逻辑关系数组
// arr_Operation ： Array       操作关系数组
// arr_Value ：     Array       条件值数组
// arr_SV ：        Array       条件值的文本数组
//-------------------------------------
function buildConditions(arr_FieldName, arr_Logic, arr_Operation, arr_Value, arr_SV)
{
    var arr_Condition = [];
    for (var i = 0; i < arr_Value.length; i++) {
        var n = arr_Condition.length;
        arr_Condition[n] = makeCondition(arr_FieldName[i], arr_Operation[i], arr_Value[i], arr_SV[i]);
    }

    var xmlConditions = null;
    if (arr_Condition.length >= 2) {
        xmlConditions = addConditionItem(arr_Logic[0], arr_Condition[0], arr_Condition[1]);

        for (var i = 2; i < arr_Condition.length; i++) {
            xmlConditions = addConditionItem(arr_Logic[i-1],
                xmlConditions, arr_Condition[i]);
        }
    }
    else {
        xmlConditions = addConditionItem(arr_Logic[0], arr_Condition[0]);
    }
    var xmlQuery = makeQueryCondition("", xmlConditions);
    return xmlQuery.xml;
}


function lengthB(s){
	var n=0;
	if (s != null && s != ""){
	  for (var i=0;i<=s.length-1;i++){
	    if (s.charCodeAt(i) > 255)
	       n = n + 2;
	    else
	      n=n+1;
	  }	  
	}
  return(n);
}
function iflength(obj){
	if ( obj.maxLength != null && (lengthB(obj.value) > obj.maxLength)){
		alert("输入字数太多！");
		obj.focus();
    }
}