//*** Extend the string object's capacity

//trim spaces before or after the string
String.prototype.trim = function()
{
    // 用正则表达式将前后空格
    // 用空字符串替代。
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

//get the length of the string in which it's length double when the char is chinese
String.prototype.byteLength = function(){
    var iOriginalLen = this.length;
    var iActualLen = iOriginalLen;
    for (var iChar=0;iChar<iOriginalLen;iChar++){
        if (this.charCodeAt(iChar)<0 || this.charCodeAt(iChar)>255) iActualLen++;
    }
    return iActualLen++;
}
























//basic function to include other javascript files
function include(fileName)
{
    document.write('<script type="text/javascript" src="' + fileName + '"></script>');
}


var languageName;
function setLanguage(langName)
{
    languageName = langName.toLowerCase();
    var fullpath = "language/lang_" + languageName + "/prompt_info.js";
    include(fullpath);
}

function checkLanguage()
{
    if (!languageName)
        return false;
    return true;
}

function showText(str)
{
    document.write(str);
}

function testLang()
{
    if (!checkLanguage())
    {
        alert("ERROR: Language must be set first!");
        return false;
    }
    alert(_T0000);
}














// Login Page
function ViewLoginPage(sUrl, sWinName){
    if(!sUrl) sUrl = "/none.htm";
    if(!sWinName) sWinName = "LoginForm";
    //var sWinName = "";
    var iW = 350;
    var iH = 180;
    
    var ViewLoginPageWin = OpenWin(sUrl, sWinName, iW, iH, true);
    if(ViewLoginPageWin && ViewLoginPageWin.focus) ViewLoginPageWin.focus();
    return true;
}






// Open New Browser Window
function OpenWin(sUrl, sWinName, iW, iH, bNoScroll, bFullWin){
    if(!sUrl && sUrl!="") return false;
    if(!bFullWin) bFullWin = false;
    if(!sWinName) sWinName = "";
    if(!iW){ iW = 450;}else{  iW = parseInt(iW)}
    if(!iH){ iH = 500;}else{  iH = parseInt(iH)}
        
    var iLPos = parseInt((window.screen.width-iW)/2);
    var iTPos = parseInt((window.screen.height-iH)/2);
    var sScroll = "yes";
    if(bNoScroll==true) sScroll = "no";
    if(!bFullWin){
        return window.open(sUrl, sWinName, "scrollbars="+sScroll+",width="+iW+",height="+iH+",resizable=no,top="+iTPos+",left="+iLPos);
    }else{/*
        var oFullWin = window.open("", sWinName, "fullscreen=1,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width="+iW+",height="+iH);
        oFullWin.resizeTo( Math.ceil(iW), Math.ceil(iH) );
        oFullWin.moveTo  ( Math.ceil( iLPos ) , Math.ceil( iTPos ) );
        //if(oWin) return oWin;
        if(oFullWin){
            oFullWin.document.open("text/html", "replace");
            oFullWin.document.write("<html>");
        //    oFullWin.document.write("<style type='text/css'>\n body                  { border: 1px solid #000000; overflow: hidden; margin: 0pt;}");
        //    oFullWin.document.write("#stillloadingDiv     { position: absolute; left: 0px; top: 0px; width: 100%px; height: 19px; z-index: 1; background-color: #C0C0C0; layer-background-color: #C0C0C0; clip:rect(0,100%,19,0);}");
        //    oFullWin.document.write("</style>\n");
            oFullWin.document.write("<body onload=\"top.document.location.replace('" + escape(sUrl) + "')\" TOPMARGIN=0 LEFTMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0 scroll='no'>");
        //    oFullWin.document.write("<div id=stillloadingDiv><table width=100% height=22 cellspacing=0 cellpadding=0><tr><td align=left valign=middle width=100%><FONT size=1 face=verdana color=#000000>&nbsp;&nbsp;loading ...</font></td></tr></table></div>");
            oFullWin.document.write("</body></html>");
            oFullWin.document.close();
            return oFullWin;
        }*/
        return window.open(sUrl, sWinName, "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width="+iW+",height="+iH+",top="+iTPos+",left="+iLPos);
    }
}








//Goto a URL with parameters sent by post method(with form)
function SendWithForm(sFormName, sURL, sTargetName){
    if (!checkLanguage())
        return false;

    if(!sFormName) sFormName = "SendingDataFm";
    if(!sURL) sURL = "";
    if(!sTargetName) sTargetName = "_self";
    
    var aPara = SendWithForm.arguments;
    if((aPara.length-3)%2==0){
        var sHTMLCode = "<form name=\""+sFormName+"\" method=\"post\" action=\""+sURL+"\" target=\""+sTargetName+"\">";
        for(var iEle=3; iEle<aPara.length; iEle+=2){
            sHTMLCode += "<input type=\"hidden\" name=\""+aPara[iEle]+"\" value=\""+aPara[iEle+1] +"\">";
        
        }
        sHTMLCode += "</form>";
        
        if(!document || !document.body){
            document.write("<html><head><title></title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=big5\"></head><body></body></html>");
        }
        
        document.body.insertAdjacentHTML("beforeEnd", sHTMLCode);
        var oForm;
        if(oForm=MM_findObj(sFormName)){
            oForm.submit();
        }
        
        oForm.outerHTML = "";
        return true;
    }else{
        alert(_TF001);
        return false;
    }
}












function publicCheckForm(hForm){
    if (!checkLanguage())
        return false;

    var vReturnObj = new Object();
    vReturnObj.elements = new Array();
    
    /* -- instruction --
    *
    * ** textFormat: text format of the inputed value, such as "email" or "tel", for validating the format of the inputed value
    *
    * ** required: If the element must be inputed or selected, the required property must be set with "true", "yes" or "1";
    *    value of text type of elements must not be empty; value of selection type of elements must not be "-1"
    *
    */
    
    var oSubmitOK;
    for(var iNum=0; iNum<hForm.elements.length; iNum++){
        var bChecked = false;
        var bRequired = false;
        var oRE;
        var oEle = hForm.elements[iNum];
        var sEleType = oEle.type.toLowerCase();
        var sValue = oEle.value.trim();
        //text, password, button, submit, reset, select-one, file, radio, checkbox
        
        if (!oEle.textFormat)
            oEle.textFormat = "";
        if (oEle.textformat)
        {
            oEle.textFormat = oEle.textformat.toLowerCase();
            oEle.textformat = undefined;
        }
        if (oEle.TEXTFORMAT)
        {
            oEle.textFormat = oEle.TEXTFORMAT.toLowerCase();
            oEle.TEXTFORMAT = undefined;
        }
        
        if(oEle.maxLength && oEle.value.trim().byteLength()>oEle.maxLength){
            bChecked = true;
            alert(_TF010);
            oEle.focus();
            return(false);
        }
        
        if(oEle.required){
            oEle.required = oEle.required.toLowerCase();
            if(oEle.required=="true" || oEle.required=="yes" || oEle.required=="1")
                bRequired = true;
        }
        if(bRequired){
            bChecked = true;
            if(sEleType=="select-one"){
                var iIndex = oEle.selectedIndex;
                sValue = oEle.options[iIndex].value.trim();
                if(sValue=="-1"){
                    alert(_TF011);
                    oEle.focus();
                    return(false);
                }
            }else if(sValue==""){
                alert(_TF012);
                oEle.focus();
                return(false);
            }
        }
        
        if(oEle.value.trim()!="" && oEle.textFormat.substr(0,6)=="number"){
            bChecked = true;
            if( isNaN(oEle.value) ){
                alert(_TF013);
                oEle.focus();
                return(false);
            }else{
                var sLimit = oEle.textFormat.substr(6).trim();
                if(sLimit!=""){
                    oRE = /^\s*\{(\d+)\,(\d+)\}\s*$/gi;
                    if( oRE.exec(sLimit) ){
                        var iLowValue = parseInt(RegExp.$1, 10);
                        var iHignValue = parseInt(RegExp.$2, 10);
                        var iInputNum = parseInt(oEle.value, 10);
                        if(iInputNum<iLowValue || iInputNum>iHignValue){
                            alert(_TF014);
                            oEle.focus();
                            return(false);
                        }
                    }else{
                        alert(_TF015);
                        oEle.focus();
                        return(false);
                    }
                }
            }
        }
        
        if(oEle.value.trim()!="" && oEle.textFormat=="email"){
            bChecked = true;
            oRE = /^\w[\w.-]+@\w+(\.\w{2,})+$/gi;
            if( !oRE.test(oEle.value) ){
                alert(_TF016);
                oEle.focus();
                return(false);
            }
        }
        
        if(oEle.value.trim()!="" && oEle.textFormat=="tel"){
            bChecked = true;
            oRE = /^(\d{2,4}-)*(\d{6,15})(-\d{1,4})?$/gi;
            if( !oRE.test(oEle.value) ){
                alert(_TF017);
                oEle.focus();
                return(false);
            }
        }
        
        if(oEle.value.trim()!="" && oEle.textFormat=="datetime"){
            oRE = /^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/gi;
            if( !oRE.test(oEle.value) ){
                alert(_TF018);
                oEle.focus();
                return(false);
            }
        }
        
        if(oEle.value.trim()!="" && oEle.textFormat.indexOf("date")!=-1){
            bChecked = true;
            if(oEle.textFormat=="date"){
                oRE = /^(\d{4})-(\d{1,2})-(\d{1,2})$/gi;
            }else{
                oRE = /^(\d{4})-(\d{1,2})-(\d{1,2})/gi;
            }
            if( !oRE.test(oEle.value) ){
                alert(_TF019);
                oEle.focus();
                return(false);
            }else{
                oRE.exec(oEle.value);
                var iYear = parseInt(RegExp.$1);
                var iMonth = parseInt(RegExp.$2);
                var iDay = parseInt(RegExp.$3);
                var iEndDay;
                if(iYear<1950 || iYear>( (new Date()).getFullYear() )){
                    alert(_TF01A);
                    oEle.focus();
                    return(false);
                }
                if(iMonth<1 || iMonth>12){
                    alert(_TF01B);
                    oEle.focus();
                    return(false);
                }
                switch(iMonth){
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        iEndDay = 31;
                        break;
                        case 4:
                        case 6:
                    case 9:
                    case 11:
                        iEndDay = 30;
                        break;
                    case 2:
                        if(iYear%4==0){iEndDay = 29;}else{iEndDay = 28;}
                }
                if(iDay<1 || iDay>iEndDay){
                    alert(_TF01C);
                    oEle.focus();
                    return(false);
                }
            }
        }
        
        if(oEle.value.trim()!="" && oEle.textFormat.indexOf("time")!=-1){
            bChecked = true;
            if(oEle.textFormat=="time"){
                oRE = /^(\d{1,2}):(\d{1,2}):(\d{1,2})$/gi;
            }else{
                oRE = /(\d{1,2}):(\d{1,2}):(\d{1,2})$/gi;
            }
            if( !oRE.test(oEle.value) ){
                alert(_TF01D);
                oEle.focus();
                return(false);
            }else{
                oRE.exec(oEle.value);
                var iHour = parseInt(RegExp.$1);
                var iMinute = parseInt(RegExp.$2);
                var iSecond = parseInt(RegExp.$3);
                if(iHour<0 || iHour>23){
                    alert(_TF01E);
                    oEle.focus();
                    return(false);
                }
                if(iMinute<0 || iMinute>59){
                    alert(_TF01F);
                    oEle.focus();
                    return(false);
                }
                if(iSecond<0 || iSecond>59){
                    alert(_TF020);
                    oEle.focus();
                    return(false);
                }
            }
        }
        
        if(oEle.value.trim()!="" && oEle.textFormat=="encryptfile"){
            bChecked = true;
            //if(!oEle.encryptedFilePath || !oEle.keyFilePath){
            if(!oEle.disabled){
                alert(_TF021);
                oEle.focus();
                return(false);
            }
        }
        
        if(oEle.textFormat=="nosubmit"){
            bChecked = true;
            oEle.disabled = true;
        }
        
        
        if(oEle.fieldType){
            bChecked = true;
            switch(oEle.fieldType){
                case "VARYING":
                    
                    break;
                case "TIMESTAMP":
                    oRE = /^(\d{4}-\d{1,2}-\d{1,2})?(#)?(\d{4}-\d{1,2}-\d{1,2})?$/;
                    if( oEle.value!="" ){
                        if( !oRE.test(oEle.value) ){
                            alert(_TF022);
                            oEle.focus();
                            return(false);
                        }else{
                            oRE.exec(oEle.value);
                            if( (RegExp.$1!="" && !valiDate(RegExp.$1, "-")) || (RegExp.$3!="" && !valiDate(RegExp.$3, "-")) ){
                                oEle.focus();
                                return(false);
                            }
                        }
                    }
                    break;
                case "BLOB":
                    //if(oEle.value!=""){
                    //    alert(_TF023);
                    //    oEle.focus();
                    //    return(false);
                    //}
                    break;
                case "LONG":
                    if(isNaN(oEle.value) || oEle.value.indexOf(".")!=-1){
                        alert(_TF024);
                        oEle.focus();
                        return(false);
                    }
                    break;
                case "DOUBLE":
                    if(isNaN(oEle.value)){
                        alert(_TF025);
                        oEle.focus();
                        return(false);
                    }
                    break;
            }
        }
        
        if(oEle.name=="SubmitOK"){
            oSubmitOK = oEle;
        }
        //eval("vReturnObj.abc=\"\\\"123\"");
    }
    
    
    //if(!bSubmitOKAdded){
    if(!oSubmitOK){
        oSubmitOK = document.createElement("INPUT");
        oSubmitOK.type = "hidden";
        oSubmitOK.name = "SubmitOK";
        hForm.appendChild(oSubmitOK);
    }
    
    //vReturnObj = null;
    vReturnObj.SubmitOK = oSubmitOK;
    vReturnObj.elements[vReturnObj.elements.length] = oSubmitOK;
    return(vReturnObj);
}







function valiDate(sDT, dtSpliter, noAlert){
    var aDate = sDT.split(dtSpliter);
    if( aDate.length!=3 ){
        if(!noAlert) alert(_TF030);
        return(false);
    }
    if( aDate[0].length!=4 || isNaN(aDate[0]) ){
        if(!noAlert) alert(_TF031);
        return(false);
    }
    if( aDate[1].length>2 || isNaN(aDate[1]) || (parseInt(aDate[1], 10)<1 || parseInt(aDate[1], 10)>12) ){
        if(!noAlert) alert(_TF032);
        return(false);
    }
    if( aDate[2].length>2 || isNaN(aDate[2]) ){
        if(!noAlert) alert(_TF033);
        return(false);
    }else{
        var sBigMon = "-1-3-5-7-8-10-12-";
        var iMonEndDay = 30;
        if( aDate[1]=="2" ){
            if( (parseInt(aDate[0], 10)%4)==0 ){
                iMonEndDay = 29;
            }else{
                iMonEndDay = 28;
            }
        }else if(sBigMon.indexOf("-"+aDate[1]+"-")!=-1){
            iMonEndDay = 31;
        }
        var iDay = parseInt(aDate[2], 10);
        if( iDay<1 || iDay>iMonEndDay ){
            if(!noAlert) alert(_TF033);
            return(false);
        }
    }
    return(true);
}








// set the opition(whose value is equal to the designated one) in the list box selected
function setDefaultIndex(oSelect, sEqualValue){
    for(var iNum=0; iNum<oSelect.options.length; iNum++){
        var oOp = oSelect.options[iNum];
        if(oOp.value==sEqualValue){oOp.selected = true;}
    }
}












// Menu Link swaping
function MM_findObj(n, d) { //v4.0
  var p,i,x;
  if(!d){ d=document;}
  if((p=n.indexOf("?"))>0 && parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document;
        n=n.substring(0,p);
  }
  /*if(!(x=d[n])&&d.all){
      x=d.all[n];alert(n);
  }*/
  if(d.all){ x = d.all[n]; }
  
  for (i=0;!x&&i<d.forms.length;i++){ x=d.forms[i][n];}
  for(i=0;!x&&d.layers&&i<d.layers.length;i++){ x=MM_findObj(n,d.layers[i].document);}
  if(!x && document.getElementById){ x=document.getElementById(n);}
  return x;
}













//bind the function to the event of an object
function Object_OnEvent(id_value, obj_index, event_value, func)
{
    if (!id_value || !event_value || !func)
        return false;
    if (isNaN(obj_index))
        return false;
    obj_index = Math.round(obj_index);

    var obj;
    if (id_value.toUpperCase() == "WINDOW")
        obj = window;
    if (!obj)
    {
        obj = document.all.item(id_value);
        if (!obj)
        {
            if (obj_index < 0)
                obj_index = 0;
            obj = document.all.tags(id_value)[obj_index];
        }
        else if (obj_index >= 0)
            obj = obj[obj_index];
    }
    if (!obj)
        return false;

    if (!obj.attachEvent)
        return false;
    obj.attachEvent(event_value, func);
    var aPara = Object_OnEvent.arguments;
    if(aPara.length % 2 == 0)
        for (var i = 4; i < aPara.length; i++)
            obj.attachEvent(aPara[i], aPara[++i]);
}

function Element_OnEvent(obj, event_value, func)
{
    if (!obj)
        return false;
    if (!obj.attachEvent)
        return false;
    obj.attachEvent(event_value, func);
    var aPara = Element_OnEvent.arguments;
    if(aPara.length % 2 == 1)
        for (var i = 3; i < aPara.length; i++)
            obj.attachEvent(aPara[i], aPara[++i]);
}














function getAdjacentElement(oEle, iOffset){
    var iIndex = -1;
    var oForm = oEle.form;
    if(!iOffset) iOffset = 0;
    for(var iNum=0; iNum<oForm.elements.length; iNum++){
        if(oForm.elements[iNum]===oEle){
            iIndex = iNum;
        }
    }
    if(iIndex==-1){
        return(null);
    }
    var iNewIndex = iIndex + iOffset;
    if(iNewIndex<0 || iNewIndex>=oForm.elements.length){
        return(null);
    }
    return(oForm.elements[iNewIndex]);
}













// Get current tag's absolute position in the document
function AbsPosition(oTagObj){
    if(!oTagObj || !oTagObj.tagName){
        //var oErr = new Error(-1, "Invalid parameter! A html dom tag object is needed.");
        return null;
    }
    
    var iMh = oTagObj.offsetHeight;
    var iMw = oTagObj.offsetWidth;
    var iMl = 0;
    var iMt = 0;
    var oParent = oTagObj;
    do{
        iMl += oParent.offsetLeft;
        iMt += oParent.offsetTop;
        if (!oParent.offsetParent) {break;}
        oParent = oParent.offsetParent;
    }while (oParent.tagName.toUpperCase() != "BODY")
    
    this.left = iMl;
    this.right = iMl + iMw;
    this.top = iMt;
    this.bottom = iMt + iMh;
    this.width = iMw;
    this.height = iMh;
    this.properties = "left, right, top, bottom, width, height";
    this.methods = "none";
    
    return this;
}












// 将物体1置于物体2的中间，取物体1的坐标
function setMiddlePosition(oToSet, oReferTo){
    if(!oToSet || !oToSet.tagName || !oReferTo || !oReferTo.tagName){
        alert("2 HTML DOM tag objects are needed");
        return false;
    }
    
    var iToSet_w = oToSet.offsetWidth;
    var iToSet_h = oToSet.offsetHeight;
    
    var iReferTo_w = oReferTo.offsetWidth;
    var iReferTo_h = oReferTo.offsetHeight;
    var iReferTo_t = 0;
    var iReferTo_l = 0;
    if(oReferTo.tagName.toUpperCase() != "BODY"){
        var oAP = new AbsPosition(oReferTo);
        iReferTo_t = oAP.top;
        iReferTo_l = oAP.left;
        oAP = null;
    }
    var iReferTo_scrollLeft = 0;
    var iReferTo_scrollTop = 0;
    if(oReferTo.scrollLeft && oReferTo.scrollTop){
        iReferTo_scrollLeft = oReferTo.scrollLeft;
        iReferTo_scrollTop = oReferTo.scrollTop;
    }
    
    
    oToSet.style.left = Math.round(iReferTo_l + (iReferTo_w - iToSet_w)/2 + iReferTo_scrollTop)+"px";
    oToSet.style.top  = Math.round(iReferTo_t + (iReferTo_h - iToSet_h)/2 + iReferTo_scrollTop)+"px";
}





//Show hide the list
function AdjustRow(rowID, action)
{
    var oFs = parent.DBViewer;
    if(!oFs){return(false)}
    var rows;
    if(oFs.rows)
    {
        rows = oFs.rows.split(",");
    }
    if(oFs.cols)
    {
        rows = oFs.cols.split(",");
    }
    var iNormalSize = Math.round(100/rows.length*10)/10 + "%";
    if(rowID>=rows.length || rowID<0)
    {
        alert(_TF040);
        return(false)
    }
    switch(action.toLowerCase())
    {
        case "max":
            for(var iNum=0; iNum<rows.length; iNum++)
            {
                rows[iNum] = "13";
            }
            rows[rowID] = "*";
            break;
        case "mid":
            if(rows[rowID]!="*")
            {
                rows[rowID] = iNormalSize;
            }else{
                for(var iNum=0; iNum<rows.length; iNum++)
                {
                    rows[iNum] = iNormalSize;
                }
            }
            break;
        case "min":
            for(var iNum=0; iNum<rows.length; iNum++)
            {
                rows[iNum] = "*";
            }
            rows[rowID] = "13";
            break;
    }
    if(oFs.rows)
    {
        oFs.rows = rows.join(",");
    }
    if(oFs.cols)
    {
        oFs.cols = rows.join(",");
    }
    
}







//
function HintBox()
{
    var shtml = "<div id='IDC_HINTBOX' style='position:absolute; height:20px; z-index:10; background-color: #D4D0C8; display: none;'></div>";
}















//popup menu Class
/*******************************************************************
********************************************************************

1) Make a main menu
            <table width="100%" border="0" cellspacing="3" cellpadding="0">
              <tr> 
                <td width="65" class="centerCell"><a href="#"><span id="IDC_MENU_I0" class="naviCaptionCell">Column XXX-1</span></a></td>
                <td width="140" class="centerCell"><a href="#"><span id="IDC_MENU_I1" class="naviCaptionCell">Column XXX-2</span></a></td>
                <td>&nbsp;</td>
              </tr>
            </table>

2) Make the style for submenu item cell and item text
    .subMenuItemCell {
	    background-color: #3D3D7A;
	    border: 1px solid #FFFFFF;
	    height: 20px;
	    text-indent: 10pt;
    }
    .subMenuItemCell_over {
	    background-color: #4670AE;
	    border: 1px solid #FFFFFF;
	    height: 20px;
	    text-indent: 5pt;
    }
    .subMenuItemLink {
	    font-size: 12px;
	    font-weight: bold;
	    color: #FFFFFF;
	    text-decoration: none;
    }

3) Set the array containing the texts and links of submenu items
    var subMenuList = new Array(2);
    
    subMenuList[0] = new Array(3);
    subMenuList[0][0] = new Array(2);
    subMenuList[0][0][0] = "testItem-00";
    subMenuList[0][0][1] = "link-00.htm";
    subMenuList[0][1] = new Array(2);
    subMenuList[0][1][0] = "testItem-01";
    subMenuList[0][1][1] = "link-01.htm";
    subMenuList[0][2] = new Array(2);
    subMenuList[0][2][0] = "testItem-02";
    subMenuList[0][2][1] = "link-02.htm";
    
    subMenuList[1] = new Array(2);
    subMenuList[1][0] = new Array(2);
    subMenuList[1][0][0] = "examItem-00";
    subMenuList[1][0][1] = "url-00.htm";
    subMenuList[1][1] = new Array(2);
    subMenuList[1][1][0] = "examItem-01";
    subMenuList[1][1][1] = "url-01.htm";

4) Make the initiation of the menu
    var listMenuKit;
    function initsubMenuSheet()
    {
        var lstMK;
        listMenuKit = new ListMenuKit("subMenuSheet");                          //Create the ListMenuKit Object to mange the popup menu (with Menu Sheet Name)
        lstMK = listMenuKit;
        lstMK.setItemCellStyle("subMenuItemCell");                              //Item Cell style
        lstMK.setItemCellHoverStyle("subMenuItemCell_over");                    //Item Cell style when mouse hovering
        lstMK.setItemLinkStyle("subMenuItemLink");                              //Item Text style
        //lstMK.setItemLinkStyle("subMenuItemLink_over");                       //Item Text style when mouse hovering (optional)
        
        lstMK.setSubMenuOffset(0, 6);                                           //Submenu's position relating to the main menu item
        lstMK.setSubMenuArray(subMenuList);                                     //Set the submenu item array to the ListMenuKit object
        var mainItemNum = lstMK.setMainMenuItemIDs("IDC_MENU_I0, IDC_MENU_I1"); //Set the IDs of main menu items into the object
        for (var i=0; i<mainItemNum; i++)
            Object_OnEvent("IDC_MENU_I"+i, -1, "onmouseover", lstMK.mainItemOver, "onmouseout", lstMK.mainItemOut);
    }
    window.attachEvent("onload", initsubMenuSheet);                             //run the initiation when win loaded

********************************************************************
********************************************************************/

function ListMenuKit(menuSheetName)
{
    var menuSheet;
    var menuTable;
    var itemList;
    var itemCount
    
    
    this.name = function()
    {
        return (menuSheetName);
    };
    this.sheet = function()
    {
        return (menuSheet);
    };
    this.itemList = function()
    {
        return (itemList);
    };
    this.itemCount = function()
    {
        return (itemCount);
    };
    
    var updateItemCount = function()
    {
        itemCount = itemList.length;
    };
    
    
    var menuHTML = "<div id=\"" + menuSheetName + "\" style=\"position:absolute; left:1px; top:1px; z-index:10;\">";
    menuHTML    += "<table width=\"200\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
    menuHTML    += "<tr>";
    menuHTML    += "<td><a href=\"#\"><span>&nbsp;</span></a></td>";
    menuHTML    += "</tr>";
    menuHTML    += "</table>";
    menuHTML    += "</div>";
    
    var setupMenuSheet = function()
    {
        if (menuSheet)
        {
            menuSheet.outerHTML = "";
        }
        if (document.body)
        {
            document.body.insertAdjacentHTML("beforeEnd", menuHTML);
        }
        menuSheet = MM_findObj(menuSheetName);
	    if(!menuSheet || !menuSheet.tagName || menuSheet.tagName.toUpperCase() != "DIV")
	    {
		    return (false);
	    }
	    setSheetDisplay(false);
	    
	    menuTable = menuSheet.children.item(0);
        if (menuTable.tagName.toUpperCase() != "TABLE")
        {
            return (false);
        }
        
        itemList = menuTable.rows;
        updateItemCount();
        
        Element_OnEvent(menuSheet, "onmouseover", keepSheet, "onmouseout", clearSheet);
    };
    this.setupMenuSheet = setupMenuSheet;
    
    var setSheetPosition = function(left, top)
    {
        if (menuSheet)
        {
            menuSheet.style.left = left;
            menuSheet.style.top = top;
        }
    };
    var setSheetDisplay = function(isShown)
    {
        if (menuSheet)
        {
            if (isShown == true)
            {
                menuSheet.style.display = "block";
            }
            else
            {
                menuSheet.style.display = "none";
            }
        }
    };
    var killSheetTimer = 0;
    var killSheet = function()
    {
        setSheetDisplay(false);
        window.clearTimeout(killSheetTimer);
        killSheetTimer = 0;
    }
    var clearSheet = function()
    {
        killSheetTimer = window.setTimeout(killSheet, 200);
    }
    var keepSheet = function()
    {
        if (killSheetTimer != 0)
        {
            window.clearTimeout(killSheetTimer);
            killSheetTimer = 0;
        }
    }
    
    
    
    var itemCellStyle = "";
    this.setItemCellStyle = function(styleName)
    {
        itemCellStyle = styleName;
    };
    var itemCellHoverStyle = "";
    this.setItemCellHoverStyle = function(styleName)
    {
        itemCellHoverStyle = styleName;
    };
    var itemLinkStyle = "";
    this.setItemLinkStyle = function(styleName)
    {
        itemLinkStyle = styleName;
    };
    var itemLinkHoverStyle = "";
    this.setItemLinkHoverStyle = function(styleName)
    {
        itemLinkHoverStyle = styleName;
    };
    
    var menuWidthRedundancy = 50;
    this.setWidthRedundancy = function(d)
    {
        if (!isNaN(d) && d>30)
            menuWidthRedundancy = d;
    };
    var getMenuWidth = function(vcharNum, redundancy)
    {
        var menuTableWidth = 10;
        var gotRule = null;
        for (var j=0; j<document.styleSheets.length; j++)
        {
            var oStyleSheet = document.styleSheets[j];
            for (var k=0; k<oStyleSheet.rules.length; k++)
            {
                var oRule = oStyleSheet.rules.item(k);
                if (oRule.selectorText == ("."+itemLinkStyle))
                {
                    gotRule = oRule;
                    break;
                }
            }
            //alert(document.styleSheets[1].href);
        }
        if (gotRule)
            menuTableWidth = Math.ceil( parseInt(gotRule.style.fontSize, 10) * vcharNum / 2 + redundancy);
        return (menuTableWidth);
    };
    
    
    
    var getItemCell = function(pos)
    {
        var row = itemList.item(pos);
        var cell = row.cells.item(0);
        return (cell);
    };
    var getItemLink = function(cell)
    {
        var _link = cell.children.item(0);
        if (!_link || !_link.tagName || _link.tagName.toUpperCase() != "A")
        {
            return (null);
        }
        return (_link);
    };
    var getItemTextSpan = function(cell)
    {
        var _link = getItemLink(cell);
        var _span = _link.children.item(0);
        if (!_span || !_span.tagName || _span.tagName.toUpperCase() != "SPAN")
        {
            return (null);
        }
        return (_span);
    };
    
    var setItemContent = function(cell, linkText, linkUrl)
    {
        var itemLink = getItemLink(cell);
        itemLink.href = linkUrl;
        var textSpan = getItemTextSpan(cell);
        textSpan.innerText = linkText;
        
        //if the link is outside of the current domain, open it with a blank window
        var _start = linkUrl.substr(0, 7).toLowerCase();
        if (_start == "http://")
            itemLink.target = "_blank";
    }; 
    
    
    
    var addItemCell = function(num)
    {
        for (var i=0; i<num; i++)
        {
            var row = itemList.item(0);
            var clRow = row.cloneNode(true);
            if (menuTable)
            {
                var newRow = menuTable.insertRow();
                newRow.replaceNode(clRow);
            }
        }
        updateItemCount();
    };
    
    var getMaxLengthOfItem = function(menuList)
    {
        var maxLen = 0;
        for (var i=0; i<menuList.length; i++)
        {
            var charLen = menuList[i][0].byteLength();
            if (charLen > maxLen)
                maxLen = charLen;
        }
        return (maxLen);
    }
    
    var setItemAttr = function(menuList)
    {
        addItemCell(menuList.length-1);
        menuTable.width = getMenuWidth(getMaxLengthOfItem(menuList), menuWidthRedundancy);
        
        for (var i=0; i<itemCount; i++)
        {
            var cell = getItemCell(i);
            Element_OnEvent(cell, "onmouseover", itemCellOver, "onmouseout", itemCellOut);
            cell.className = itemCellStyle;
            var textSpan = getItemTextSpan(cell);
            textSpan.className = itemLinkStyle;
            
            if (i < menuList.length)
            {
                setItemContent(cell, menuList[i][0], menuList[i][1]);
            }
        }
    };
    this.setItemAttr = setItemAttr;
    
    
    
    var itemCellHover = function(cell, isOver)
    {
        if (!cell || !cell.tagName)
            return (false);
        if (cell.tagName.toUpperCase() == "SPAN")
        {
            cell = cell.parentNode;
            if (cell.tagName.toUpperCase() == "A")
            {
                cell = cell.parentNode;
            }
            else
                return (false);
        }
        if (cell.tagName.toUpperCase() != "TD")
        {
            return (false);
        }
        
        if (isOver == true)
        {
            if (itemCellHoverStyle != "")
            {
                cell.className = itemCellHoverStyle;
            }
        }
        else
        {
            if (itemCellStyle != "")
            {
                cell.className = itemCellStyle;
            }
        }
    };
    this.itemCellHover = itemCellHover;
    
    var itemCellOver = function()
    {
        var cell = window.event.srcElement;
        if (!itemCellHover(cell, true))
            return (false);
    };
    this.itemCellOver = itemCellOver;
    
    var itemCellOut = function()
    {
        var cell = window.event.srcElement;
        if (!itemCellHover(cell, false))
            return (false);
    };
    this.itemCellOut = itemCellOut;
    
    
    
    var offsetX = 0, offsetY = 0;
    this.setSubMenuOffset = function(x, y)
    {
        if (isNaN(x) || isNaN(y))
            return (false);
        offsetX = x;
        offsetY = y;
    };
    
    var subMenuArray;
    this.setSubMenuArray = function(smArray)
    {
        subMenuArray = smArray;
    };
    var mainMenuItems;
    this.setMainMenuItemIDs = function(itemIDs)
    {
        var re = new RegExp(", ?","ig");
        mainMenuItems = itemIDs.split(re);
        return (mainMenuItems.length);
    };
    var findMainItemIndex = function(itemID)
    {
        for (var i=0; i<mainMenuItems.length; i++)
            if (itemID == mainMenuItems[i])
                return (i);
    };
    
    
    var currentItemID;
    this.mainItemOver = function()
    {
        var elmt = window.event.srcElement;
        if (currentItemID && currentItemID==elmt.id && killSheetTimer != 0)
        {
            keepSheet();
            return (true);
        }
        else if (currentItemID!=elmt.id)
        {
            killSheet();
        }
        currentItemID = elmt.id;
        
        var absPos = new AbsPosition(elmt);
        setupMenuSheet();
        setSheetPosition(absPos.left + offsetX, absPos.bottom + offsetY);
        setSheetDisplay(true);
        
        var itemIndex = findMainItemIndex(elmt.id);
        setItemAttr(subMenuArray[itemIndex]);
    };
    this.mainItemOut = function()
    {
        clearSheet();
    };
	
	return (this);
}















// get cookie data
function GetCookie(CookieName, CookieKey)
{
    // cookies are separated by semicolons
    var aCookie = document.cookie.split(";");
    for(var i=0; i < aCookie.length; i++){
            // a name/value pair (a crumb) is separated by an equal sign
        var aCrumb = new Array(2);
        var ckRE = /\s*(\w+)=(\S*)/gi;
        ckRE.exec(aCookie[i]);
        //if (CookieName == aCrumb[0].trim())
        aCrumb[0] = RegExp.$1;
        aCrumb[1] = RegExp.$2;
        //alert(aCrumb[0]);
        if(CookieName==aCrumb[0]){
            if(!CookieKey){
                return(unescape(aCrumb[1]));
            }else{
                if(aCrumb[1].indexOf("=")==-1){
                    // no keys in the cookie
                    return(null);
                    //return("no keys");
                }else{
                    //get cookie from sub-key
                    var aCookieKey = aCrumb[1].split("&");
                    for(var j=0; j < aCookieKey.length; j++){
                        ckRE = /\s*(\w+)=(\S*)/gi;
                        ckRE.exec(aCookieKey[j]);
                        aCrumb[0] = RegExp.$1;
                        aCrumb[1] = RegExp.$2;
                        //alert(aCrumb[0] + ":" + aCookieKey[j]);
                        if(CookieKey==aCrumb[0]){
                            //return(DecodeCookie(unescape(aCrumb[1])));
                            return(unescape(aCrumb[1]));
                        }
                    }
                }
            }
        }
    }
    
    // a cookie with the requested name does not exist
    return(null);
    //return("no cookie");
}

//Set cookie data
function SetCookie(CookieName, CookieKey, CookieValue){
    // cookies are separated by semicolons
    var aCookie = document.cookie.split(";");
    for(var i=0; i < aCookie.length; i++){
            // a name/value pair (a crumb) is separated by an equal sign
        var aCrumb = new Array(2);
        var ckRE = /\s*(\w+)=(\S*)/gi;
        ckRE.exec(aCookie[i]);
        //if (CookieName == aCrumb[0].trim())
        aCrumb[0] = RegExp.$1;
        aCrumb[1] = RegExp.$2;
        if(CookieName==aCrumb[0]){
            if(!CookieKey){
                aCrumb[1] = escape(CookieValue);
            }else{
                if(aCrumb[1].indexOf("=")!=-1){
                    //get cookie from sub-key
                    var aCookieKey = aCrumb[1].split("&");
                    for(var j=0; j < aCookieKey.length; j++){
                        var aCrumbKey = new Array(2);
                        ckRE = /\s*(\w+)=(\S*)/gi;
                        ckRE.exec(aCookieKey[j]);
                        aCrumbKey[0] = RegExp.$1;
                        aCrumbKey[1] = RegExp.$2;
                        //alert(aCrumb[0] + ":" + aCookieKey[j]);
                        if(CookieKey==aCrumbKey[0]){
                            aCrumbKey[1] = escape(CookieValue);
                            aCookieKey[j] = aCrumbKey.join("=");
                            aCrumb[1] = aCookieKey.join("&");
                        }
                    }
                }
            }
            
            if(i>0) aCrumb[0] = " " + aCrumb[0];
            aCookie[i] = aCrumb.join("=");
            break;
        }
    }
    
    //cant find the corresponding cookie
    //if(i==aCookie.length);
    var cookies = aCookie.join(";");
    document.cookie = cookies;//escape(cookies);
    //document.cookie = "";
    return(cookies);
}
/*
//暂无效---
//cookie中文编码程序：
function CodeCookie(str)
{
    var strRtn="";

　for (var i=str.length-1;i>=0;i--)
　{
　　strRtn+=str.charCodeAt(i);
　　if (i) strRtn+="a"; //用a作分隔符
　}
　return strRtn;
}

//cookie中文解码程序：
function DecodeCookie(str)
{
　var strArr;
　var strRtn="";

　strArr=str.split("a");

　for (var i=strArr.length-1;i>=0;i--) 
　strRtn+=String.fromCharCode(eval(strArr[i]));

　return strRtn;
}
*/







function WinSizeAdapter(){
    var oBody = window.document.body;
    var oTable = oBody.firstChild;
    
    //check if the window is opened with specific width and height
    if(window.name && window.opener && !window.opener.closed && window.opener.location.hostname==window.location.hostname){
        return false;
    }
    
    if(oBody.offsetWidth<=800 && oBody.firstChild && oBody.firstChild.tagName=="TABLE"){
        oTable.width = "778";
    }else if(oBody.firstChild && oBody.firstChild.tagName=="TABLE" && oTable.width=="778"){
        oTable.width = "100%";
    }
}

//window.attachEvent("onresize",WinSizeAdapter);








function keyDown(){
    if(event.keyCode==78&&event.ctrlKey){
        alert(0);
        return(false);
    }
}
document.attachEvent("onkeydown", keyDown);
//document.attachEvent("oncontextmenu", function(){return(false)});







// Global Language Setting
setLanguage("English");




//ERiS webpage Title setting
function setErisPageTitle()
{
    //alert(document.title);
    //document.title = "僄儕僗丒僐儞僒儖僥傿儞僌 - 拞崙價僕僱僗憤崌巟墖";
}
//window.attachEvent("onload", setErisPageTitle);

