// 設定系統使用參數
var bDebug_=false;     // 是否需於 emis_save.jsp , emis_data.jsp 作 Debug且不將視窗關閉
var bDateType_=true;  // 日期格式是否為西元格式
var sDateSepa_="/";     // 日期是否使用分隔符號
var sTimeSepa_=":";     // 時間是否使用分隔符號
var iCurrPage_=1;      // 目前分頁之頁碼

// ***************************** 字串函數 **********************************
// 重複產生字串
// sCh:重複字元
// iLen:重複個數
function emisReplicate(sCh, iLen) {
  var _sStr = "";
  for (var i=0; i < iLen; i++)
      _sStr += sCh;
  return _sStr;
}

// 左邊去空白
// sValue:傳入之字串
function emisLtrim(sValue) {
   for (var i=0; i<=sValue.length; i++) {
      if(sValue.substring(i,i+1)!=" ")
         break;
   }
   return sValue.substring(i,sValue.length);
}

// 右邊去空白
// sValue:傳入之字串
function emisRtrim(sValue) {
   for (var i=sValue.length; i>=0; i--) {
      if(sValue.substring(i-1,i)!=" ")
         break;
   }
   return sValue.substring(0, i);
}

// 左右邊去空白
// sValue:傳入之字串
function emisTrim(sValue) {
   return emisRtrim(emisLtrim(sValue));
}

// 左邊補空白
// sValue:傳入之字串
// iLen:補入個數sPad 未傳入, 以 " " 字串
// sPad 未傳入, 以 " " 字串
function emisPadl(sStr, iLen, sPad) {
  if (arguments.length==2) sPad=" ";
  sStr = "" + sStr;
  return emisReplicate(sPad, iLen-emisLength(sStr)) + sStr;
}

// 右邊補空白
// sValue:傳入之字串
// iLen:補入個數sPad 未傳入, 以 " " 字串
// sPad 未傳入, 以 " " 字串
function emisPadr(sStr, iLen, sPad) {
  if (arguments.length==2) sPad=" ";
  sStr = "" + sStr;
  return sStr + emisReplicate(sPad, iLen-emisLength(sStr));
}

// 左右邊補空白
// sValue:傳入之字串
// iLen:補入個數sPad 未傳入, 以 " " 字串
// sPad 未傳入, 以 " " 字串
function emisPadc(sStr, iLen, sPad) {
  if (arguments.length==2) sPad=" ";
  sStr = "" + sStr;

  var _iLeft=0, _iRight=0;
  var _iLength=iLen-emisLength(sStr);
  if (_iLength>0) {
    _iLeft=parseInt(_iLength/2);
    _iRight=_iLength-_iLeft;
  }
  return emisReplicate(sPad, _iLeft) + sStr + emisReplicate(sPad, _iRight);
}

// 取出中文字以兩個Byte長度計
// 與 Java substr 寫法一樣
// 最後一個 Byte 為中文字第一 Bytes,則捨去此中文字
// sStr:傳入之字串
// iStart:開始取出之第?個Byte
// iEnd:結束之第?個Byte
function emisSubstr(sStr, iStart, iLength) {
  var _iCount=0;
  var _iStart=-1, _iEnd=-1;
  for( var i=0; i < sStr.length ; i++) {
    if ( sStr.charCodeAt(i) >= 0x2E80 )
      _iCount +=2;
    else
      _iCount +=1;

    // 取得開始值
    if (_iStart==-1 && _iCount>iStart) {
      _iStart=i;
    }

    // 取得結束值
    if (_iEnd==-1 && _iCount>iStart - 0 + iLength -1) {
      // 最後一個 Byte 為中文字第一 Bytes,則捨去此中文字
      if (_iCount>iStart - 0 + iLength)
        _iEnd=i-1;
      else
        _iEnd=i;
      break;
    }
  }

  // 若無結束值則以字串長度
  if (_iEnd==-1) _iEnd=sStr.length;

  return sStr.substr(_iStart, _iEnd - _iStart - 0 + 1);
}

// 取得中文字串長度
// sValue:傳入之字串
function emisLength(sValue) {
  var _iLength = 0;
  for( var i=0; i < sValue.length ; i++) {
    if( sValue.charCodeAt(i) >= 0x2E80 )
      _iLength +=2;
    else
      _iLength +=1;
  }
  return _iLength;
}

// 輸入欄位 Picture 處理
// 必須在 onkeypress event 才會有作用, onkeydown 分不出字母大小寫
// sType="U" 轉換英文字母為大寫
//       "A" 僅能輸入英文字母
//       "B" 僅能輸入英文字母及數字
//       "C" 僅能輸入英文字母外加 空白跟#
//       "9" 僅能輸入數字
//       "N" 僅能輸入數字, "."
//       "$" 僅能輸入數字, ".", "+", "-"
//       "D" 僅能輸入數字, ".", "/"
//       "S" 僅能輸入數字, "+", "-"
//       "T" 僅供電話號碼專用 , 允許 數字,"+","-","(",")" ,"#"
//       "M" 僅供時間用 , 允許 數字,":"
// oField: 欄位物件
// iLength: 欄位長度控制
function emisPicture(sType, oField, iLength) {
  var _iKeyCode = window.event.keyCode;
  //alert(_iKeyCode);
  if(!emisEmpty(oField)){
    oField.setAttribute("PICURE" , sType);
  }
  // 判斷中文字串長度
  if (!emisEmpty(oField)) {
    if (!emisChkLength(oField.value, iLength-1)) {
      window.event.returnValue = false;
      return false;
    }
  }

  // ENTER, TAB 至下一欄位
  // 不是 Button 按 ENTER, TAB 至下一欄位
  if ((_iKeyCode==13 || _iKeyCode==9) && window.event.srcElement.type!="button") {
    window.event.keyCode = 9;
    return true;
  }

  sType=sType.toUpperCase();

  // "U" 轉換英文字母為大寫
  if (sType == "U") {
    if (_iKeyCode > 96  && _iKeyCode < 123 )
      window.event.keyCode = _iKeyCode - 32;
    return true;
  }

  // "A" 僅能輸入英文字母
  if (sType == "A") {
    if (_iKeyCode < 65  || _iKeyCode > 123 )
      window.event.returnValue = false;
    return true;
  }

  // "B" 僅能輸入英文字母及數字
  if (sType == "B") {
    if (!((_iKeyCode>=65 && _iKeyCode<=123) || (_iKeyCode>=48 && _iKeyCode<=57)))
      window.event.returnValue = false;
    return true;
  }
  // "C" 僅能輸入英文字母及數字 add by Jacky
  if (sType == "C") {
    if (!((_iKeyCode>=65 && _iKeyCode<=123) || (_iKeyCode>=48 && _iKeyCode<=57) || (_iKeyCode=32) ) )
      window.event.returnValue = false;
    return true;
  }

  // "9" 僅能輸入數字
  if (sType == "9") {
    if (_iKeyCode < 48  || _iKeyCode > 57)
      window.event.returnValue = false;
    return true;
  }

  // "N" 僅能輸入數字, "."
  if (sType == "N") {
    if ((_iKeyCode < 48  || _iKeyCode > 57) && _iKeyCode!=46)
      window.event.returnValue = false;
    return true;
  }

  // "$" 僅能輸入數字及".", "+", "-"
  if (sType == "$") {
    if ((_iKeyCode < 48  || _iKeyCode > 57) &&
         _iKeyCode!=46 && _iKeyCode!=43 &&_iKeyCode!=61 && _iKeyCode!=45 && _iKeyCode!=95)
      window.event.returnValue = false;
    return true;
  }

  // "D" 僅能輸入數字及".", "/"
  if (sType == "D") {
    if ((_iKeyCode < 48  || _iKeyCode > 57) &&
         _iKeyCode!=46 && _iKeyCode!=47)
      window.event.returnValue = false;
    return true;
  }

  // "S" 僅能輸入數字及"+", "-"
  if (sType == "S") {
    if ((_iKeyCode < 48  || _iKeyCode > 57) &&
       _iKeyCode!=45 && _iKeyCode!=43 )  //2004/09/13 Frankie 原_iKeyCode!=61 &&_iKeyCode!=45 && _iKeyCode!=95,移除,並加入_iKeyCode!=45
      window.event.returnValue = false;
    return true;
  }
  //2004/10/22 [1139] Jacky 增加電話號碼的picture "T"
  // "T"  僅供電話號碼專用 , 允許 數字,"+","-","(",")" ,"#"
  if (sType == "T") {
    if ((_iKeyCode < 48  || _iKeyCode > 57) &&
       _iKeyCode!=45 && _iKeyCode!=43  &&
       _iKeyCode!=40 && _iKeyCode!=41 && _iKeyCode!=35)
      window.event.returnValue = false;
    return true;
  }

  //加入一個時間欄位限製  add by Andy
  // "M" 僅能輸入數字及":"
  if (sType == "M") {
    if ((_iKeyCode < 48  || _iKeyCode > 57) && _iKeyCode!=58 )
      window.event.returnValue = false;
    return true;
  }
} // emisPicture()

// 轉成貨幣數字表示
// iValue : 傳入的數值
// sSign  : 前置符號, 如 "$", 預設 ""
function emisMoney(iValue, sSign) {
  if (isNaN(iValue-0))
    return iValue;

  var _sValue=iValue+"";
  var _iPoint=_sValue.indexOf(".");
  var _iStart=_iPoint<0? _sValue.length: _iPoint;

  var _sRetValue="";
  var _sChar="";
  var _iCount=0;
  for (var i=_iStart-1; i>=0; i--) {
    _sChar=_sValue.charAt(i);
    _iCount++;
    if (_iCount==3 && i>0) {
      _sChar="," + _sChar;
      _iCount=0;
    }
    _sRetValue=_sChar + _sRetValue;
  }

  _sRetValue=_iPoint<0? _sRetValue: _sRetValue + _sValue.substr(_iPoint);

  return (emisEmpty(sSign)?"" : sSign) + _sRetValue;
}

// 四捨五入函數
// iValue : 傳入的數值
// iDecimal : 所取的小數位數
function emisRound(iValue ,iDecimal) {
  var _iReturn = iValue * Math.pow(10, iDecimal);

  _iReturn = Math.round(_iReturn) / Math.pow(10, iDecimal);
  return _iReturn;
}

// 補入 %, 以供 SQL Like 使用
// sSql: 傳入之 SQL 字串
// sKeyL:左邊補入, 不傳則預設為 "%"
// sKeyR:右邊補入, 不傳則預設為 "%"
// iLen:左邊補入個數sPad 未傳入, 以 " " 字串
// sPad 未傳入, 以 " " 字串
function emisSqlLike(sSql, sKeyL, sKeyR, iLen, sPad) {
  if (emisEmpty(sSql)) return "";

  //$ 91.4.19 sSql 有 %, 則不處理
  if (sSql.indexOf("%")>=0) return sSql;

  //$ 91.4.19 支援補零處理
  if (!emisEmpty(iLen)) return emisPadl(sSql,iLen,sPad);

  var _iArgLength=arguments.length;
  sKeyL=_iArgLength<2? "%": sKeyL;
  sKeyR=_iArgLength<3? "%": sKeyR;
  return sKeyL + sSql + sKeyR;
}

// 去除 SQL Like 符號
// sSql: 傳入之 SQL 字串
// sKey: 去除之 Key, 不傳則預設為 "%"
function emisSqlLikeRepl(sSql, sKey) {
  if (emisEmpty(sSql)) return "";

  //$ 91.4.19 sSql 有 %, 則不處理
  //if (sSql.indexOf("%")>=0) return sSql; // 2003.10.11 刪除 KC

  var _sKey = arguments.length==1 ? "%" : sKey;
  return sSql.replace(new RegExp(_sKey, "g"),"");
}

// Empty 之字串傳回空白字串
// sEmptyValue: 若傳入 sStr 為 Empty時, 傳回之值, 不傳預設為 ""
function emisSetEmpty(sStr, sEmptyValue) {
  sEmptyValue = arguments.length==1 ? "" : sEmptyValue;
  return emisEmpty(sStr)? sEmptyValue: sStr;
}

// *************************** 日期時間函數 ********************************
// 取得今天或傳入日期的字串
// sDate: 傳入之日期的字串, 不傳預設為今天
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisDate(sDate, sSep) {
  var _iDateYear  =bDateType_? 0: 1911;    // 是否為西元年格式
//var _iDateLength=emisTrim(sDateSepa_).length;    // 日期是否多加一位數
  var _iDateLength=bDateType_? 1: 0;       // 日期是否多加一位數
  var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
  if (emisEmpty(sDate)) {
    var _oDate = new Date();
    return emisPadl(_oDate.getFullYear()-_iDateYear, 3+_iDateLength, "0") + _sSep +
           emisPadl(_oDate.getMonth()+1, 2, "0") + _sSep +
           emisPadl(_oDate.getDate(), 2, "0");
  }
  else {
    var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
    sDate=sDate.replace(new RegExp(_sSep, "g"),"");

    if (sDate.length<7+_iDateLength)
      sDate=emisPadl(sDate, 7+_iDateLength, "0");
    else if (sDate.length>7+_iDateLength)
      sDate=emisPadl(sDate.substr(0,4)-_iDateYear, 3+_iDateLength, "0") +
            sDate.substr(4,2) + sDate.substr(6,2);

    if (_sSep!="")
      sDate=sDate.substr(0,3+_iDateLength) + _sSep + sDate.substr(3+_iDateLength,2) + _sSep + sDate.substr(5+_iDateLength,2);
    return sDate;
  }
} // emisDate()

// 取得今天或傳入日期之"年"的字串
// sDate: 傳入之日期的字串, 不傳預設為今天
function emisYear(sDate) {
  var _iDateYear  =bDateType_? 0: 1911;    // 是否為西元年格式
  var _iDateLength=bDateType_? 1: 0;       // 日期是否多加一位數
  if (emisEmpty(sDate))
    return emisPadl(new Date().getFullYear()-_iDateYear, 3+_iDateLength, "0");
  else {
    sDate=emisDate(sDate);
    return sDate.substr(0,3+_iDateLength);
  }
}

// 取得今天或傳入日期之"月"的字串
// sDate: 傳入之日期的字串, 不傳預設為今天
function emisMonth(sDate) {
  var _iDateLength=bDateType_? 1: 0;       // 日期是否多加一位數
  if (bDateType_)
    sDate=emisDate(sDate, "/");
  else
    sDate=emisCtoa(emisDate(sDate), "/");
  return emisPadl(new Date(sDate).getMonth()+1, 2, "0");
}

// 取得今天或傳入日期之"日"的字串
// sDate: 傳入之日期的字串, 不傳預設為今天
function emisDay(sDate) {
  var _iDateLength=bDateType_? 1: 0;       // 日期是否多加一位數
  if (bDateType_)
    sDate=emisDate(sDate, "/");
  else
    sDate=emisCtoa(emisDate(sDate), "/");
  return emisPadl(new Date(sDate).getDate(), 2, "0");
}

// 取得今天或傳入日期之"星期"的字串
// sDate: 傳入之日期的字串, 不傳預設為今天
// lNum: 星期之格式, 不傳預設為星期日、一..., 傳值則為數值 0,1...
function emisWeek(sDate, lNum) {
  if (bDateType_)
    sDate=emisDate(sDate, "/");
  else
    sDate=emisCtoa(emisDate(sDate), "/");

  var _nDay = new Date(sDate).getDay();
  if (emisEmpty(lNum))
     return "星期" + "日一二三四五六".substr(_nDay, 1);
  else
    return _nDay;  // 星期日傳回 "0"
}

// 將民國年字串轉換西元年字串
// sDate: 傳入之民國年日期的字串, 不傳預設為今天
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisCtoa(sDate, sSep) {
  sDate=emisDate(sDate);
  var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
  sDate=sDate.replace(new RegExp(_sSep, "g"),"");
  return sDate.substr(0,3)-0 + 1911 + _sSep + sDate.substr(3,2) + _sSep + sDate.substr(5,2);
}

// 將西元年字串轉換民國年字串
// sDate: 傳入之西元年日期的字串
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisAtoc(sDate, sSep) {
  var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
  sDate=sDate.replace(new RegExp(_sSep, "g"),"");
  return emisDate(sDate.substr(0,4)- 1911 + sDate.substr(4,2) + sDate.substr(6,2), _sSep);
}

// 加減 iMonth 月數後的年月
// sMonth: 傳入之年月的字串, 不傳預設為今天
// iDiff: 相加月數
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisMonthCal(sMonth, iMonth, sSep) {
  var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
  var _sDate =emisDate(emisEmpty(sMonth)?"": sMonth + _sSep + "01");
  var _iYear =emisYear(_sDate) -0 + parseInt(iMonth/12);
  var _iMonth=emisMonth(_sDate) - 0 + iMonth%12;

  if(_iMonth==0) {
    _iYear =_iYear - 1;
    _iMonth="12";
  }
  else if(_iMonth>12) {
    _iYear =_iYear + 1;
    _iMonth=_iMonth%12;
  }
  else if(_iMonth<0) {
    _iYear =_iYear - 1;
    _iMonth=12 + _iMonth%12;
  }

  var _iDateLength=bDateType_? 1: 0;       // 日期是否多加一位數
  return emisPadl(_iYear,3+_iDateLength,"0") + _sSep + emisPadl(_iMonth,2,"0");
}

// 加減 iMonth 月數後的日期
// sDate: 傳入之日期的字串, 不傳預設為今天
// iDiff: 相加月數
function emisMonthDiff(sDate, iMonth) {
  var _iYear =emisYear(sDate) -0 + parseInt(iMonth/12);
  var _iMonth=emisMonth(sDate) - 0 + iMonth%12;
  var _iDay  =emisDay(sDate);

  if(_iMonth==0) {
    _iYear =_iYear - 1;
    _iMonth="12";
  }
  else if(_iMonth>12) {
    _iYear =_iYear + 1;
    _iMonth=_iMonth%12;
  }
  else if(_iMonth<0) {
    _iYear =_iYear - 1;
    _iMonth=12 + _iMonth%12;
  }

  var _iDateLength=bDateType_? 1: 0;       // 日期是否多加一位數
  return emisDate(emisPadl(_iYear,3+_iDateLength,"0") + emisPadl(_iMonth,2,"0") + emisPadl(_iDay,2,"0"));
}

// 加減 iDiff 天數後的日期
// sDate: 傳入之日期的字串, 不傳預設為今天
// iDiff: 相加減天數
function emisDateDiff(sDate, iDiff) {
  var _sDate=sDate;
  if (bDateType_)
    _sDate=emisDate(sDate,"/");
  else
    _sDate=emisCtoa(sDate,"/");

  var _oDate=new Date(_sDate);
  var _iDiffSec=_oDate.getTime()+(24*60*60*1000*iDiff);
  var _oDiffDate=new Date();
  _oDiffDate.setTime(_iDiffSec);
  if (bDateType_)
    return emisDate(_oDiffDate.getFullYear() + emisPadl(_oDiffDate.getMonth()+1,2,"0") +
                    emisPadl(_oDiffDate.getDate(),2,"0"));
  else
    return emisAtoc(_oDiffDate.getFullYear() + emisPadl(_oDiffDate.getMonth()+1,2,"0") +
                    emisPadl(_oDiffDate.getDate(),2,"0"));
}

// 日期相減
// sDate1, sDate2: 傳入之日期的字串
function emisDateSub(sDate1, sDate2) {
  var _sDate1=sDate1;
  var _sDate2=sDate2;
  if (bDateType_) {
    _sDate1=emisDate(sDate1,"/");
    _sDate2=emisDate(sDate2,"/");
  } else {
    _sDate1=emisCtoa(sDate1,"/");
    _sDate2=emisCtoa(sDate2,"/");
  }
  var _oDate1=new Date(_sDate1);
  var _oDate2=new Date(_sDate2);
  return parseInt((_oDate2 - _oDate1)/24/60/60/1000);
}

// 將分隔符號去除
// sDate: 傳入之日期的字串
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisDateSep(sDate, sSep) {
  var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
  sDate=sDate.replace(new RegExp(_sSep, "g"),"");
  return sDate;
}

// 將分隔符號加入
// sDate: 傳入之日期的字串
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisDateSepConv(sDate, sSep) {
  if (!emisEmpty(sDate, sSep)) sDate=emisDate(sDate);
  return sDate;
}

// 將輸入是民國或西元格式, 一律轉為設定之格式
// sDate: 傳入之日期的字串
// sSep: 日期格式分隔字, 不傳預設為 ""
// bDateType: 日期格式是否為西元格式
function emisDateConv(sDate, sSep, bDateType) {
  var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
  sDate=sDate.replace(new RegExp(_sSep, "g"),"");

  var _bDateType;
  if (arguments.length==1)
     _bDateType=bDateType_;
  else
     _bDateType=emisEmpty(bDateType)? false: true;

  if (_bDateType) {
    // 西元格式
    if (sDate.length<8) {
      sDate=emisPadl(sDate,7,"0");  // 補 0
      sDate=sDate.substr(0,3)-0 + 1911 + _sSep + sDate.substr(3,2) + _sSep + sDate.substr(5,2);
    }
  } else {
    // 民國格式
    if (sDate.length==8)
      sDate=emisDate(sDate.substr(0,4)- 1911 + sDate.substr(4,2) + sDate.substr(6,2), _sSep);
  }

  return sDate;
}

// 取得系統時間 HH:MM:SS
// sSep:分隔符號, 如":", 不傳則預設無
// sSet:是否顯示 AM/PM, 預設不顯示
// lSet:是否顯示秒, 預設不顯示
function emisTime(sSep, sSet, lSet) {
  var _sSep = emisEmpty(sSep) ? sTimeSepa_ : sSep;
  var _sSet = "";
  var _oDate = new Date();
  var _sHr   = emisPadl(_oDate.getHours()  , 2, "0");
  var _sMin  = emisPadl(_oDate.getMinutes(), 2, "0");
  var _sSec  = emisPadl(_oDate.getSeconds(), 2, "0");

  if (!emisEmpty(sSet)) {
    if (_sHr>12) {
      _sSet= "PM ";
      _sHr = emisPadl(_sHr - 12, 2, "0");
    }
    else if (_sHr==12)
      _sSet= "PM ";
    else
      _sSet= "AM ";
  }
  return _sSet + _sHr + _sSep + _sMin + (emisEmpty(lSet)? "" : _sSep + _sSec);
}

// 時間相減
// sTime1, sTime2: 傳入之時間:HHMM(時分)
// 傳回值為 4 位數 HHMM, 且自動補 0, 若 sTime1 > sTime2 則補負號
function emisTimeSub(sTime1, sTime2, sSep) {
  if (emisEmpty(sTime1) || emisEmpty(sTime2)) return;

  var _sSep = emisEmpty(sSep) ? sTimeSepa_ : sSep;
  sTime1=emisPadl(sTime1.replace(":",""),4,"0");
  sTime2=emisPadl(sTime2.replace(":",""),4,"0");
  var _iHour1 = sTime1.substr(0,2)-0;
  var sTime="";
  if (sTime1 > sTime2) {
    // 將 sTime1 與 sTime2 互調
    sTime = sTime1;
    sTime1 = sTime2;
    sTime2 = sTime;
  }

  var _iHour1 = sTime1.substr(0,2)-0;
  var _iMin1  = sTime1.substr(2,2)-0;
  var _iHour2 = sTime2.substr(0,2)-0;
  var _iMin2  = sTime2.substr(2,2)-0;

  var _iHour = _iHour2 - _iHour1;
  var _iMin  = _iMin2 - _iMin1;
  if (_iMin < 0) {
    _iHour--;
    _iMin = _iMin + 60;
  }

  return (sTime==""?"":"-") + emisPadl(_iHour,2,"0") + _sSep + emisPadl(_iMin,2,"0");
}

// 將時間轉成小時
// sTime 傳入之時間:HHMM(時分)
// 傳回值為小時，取小一數1位
function emisTimeConv(sTime) {
  sTime=sTime.replace(":","");

  var _sSign="";
  if (sTime.substr(0,1)=="-") {
    _sSign="-";
    sTime=sTime.substr(1,sTime.length);
  }

  var _iHour = sTime.substr(0,2)-0;
  var _iMin  = sTime.substr(2,2)-0;

  // 傳回小時單位，取小數一位, 並作四捨五入
  return _sSign + emisRound((_iHour*60+_iMin)/60, 1) -0;
}

// 日期時間相減
// sDate1, sTime1, sDate2, sTime2: 傳入之時間:HHMM(時分)
// 傳回值為小時，取小一數1位
function emisCalTime(sDate1, sTime1, sDate2, sTime2) {
  // 若有 Empty() 傳入值則傳回 -1
  if (emisEmpty(sDate1) | emisEmpty(sTime1) | emisEmpty(sDate2) | emisEmpty(sTime2))
     return -1;

  // 一天之工作時間起迄
  var _iTotalTime=24;
  var _sStTime ="0000";
  var _sEndTime="2400";

  var _iHours=(emisDateSub(sDate1, sDate2)-0) * _iTotalTime; // 一天以24小時計

  if (_iHours==0) {
     _iHours=emisTimeConv(emisTimeSub(sTime1, sTime2));
  } else {
     _iHours=_iHours + emisTimeConv(emisTimeSub(sTime1, _sEndTime))
                     + emisTimeConv(emisTimeSub(_sStTime, sTime2))
                     - _iTotalTime;
  }

  // 取小數一位, 並作四捨五入
  return emisRound(_iHours, 1);
}



// *************************************************************************


// ***************************** 判斷處理函數 ******************************
// 判斷是否為空白
// xVaule:傳入之任何形態值
function emisEmpty(xValue) {

  if (xValue == null || xValue == "null" || xValue == "undefined" || xValue == "NaN" || xValue == "")
    return true;
  return false;
}

// 判斷是否為數值
// xVaule:傳入之任何形態值
// iFigure: 允許之整數位, 不傳則只判斷是否為數值
// iScale : 允許之小數位
// 傳回 ="": 是數值型態, !="": 不符合型態, 且傳回訊息字串
function emisChkNum(xValue, iFigure, iScale) {
  var _sType=typeof(xValue)
  var _sValue=xValue;

  // 轉換型態
  if (_sType=="number")
    _sValue=xValue+"";       // 轉型為字串
  else if (_sType=="object") {
    if (typeof(xValue.value)!="undefined")
      _sValue=xValue.value;  // 傳入為物件取其 value
  }
  else {
    _sValue=xValue+"";
  }

  // 空白則 return true
  if (_sValue=="") return "";

  var _iValue=_sValue-0;
  // 判斷是否為數值
  if (isNaN(_iValue))
    return "不是數值型態！";

  _sValue=_iValue+"";   // 轉型為字串
  var _iPoint=_sValue.indexOf(".");
  var _iLimit=emisReplicate("9",iFigure-0) - 0;

  // 判斷整數
  if (!emisEmpty(iFigure)) {
    if (_iPoint>0) _iValue=_sValue.substring(0,_iPoint);
    if (_iValue>_iLimit || _iValue<-_iLimit)
      return "整數位超出 " + iFigure + "位數！";
  }

  // 判斷小數
  if (_iPoint>0) {
    if (emisEmpty(iScale) || iScale==0) {
      return "不可有小數位！";
    } else {
      if (_sValue.substring(_iPoint+1,_sValue.length).length>iScale)
        return "小數位超出 " + iScale + "位數！";
    }
  }

  return "";
} // emisChkNum()

// 判斷日期是否為正確
// sDate: 傳入之日期的字串
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisChkDate(sDate, sSep) {
  // 處理補 "0", 及 "/"
  sDate=emisDate(sDate, sSep);

  // 強迫轉型為西元格式, 且加 "/"
  var _sDate;
  if (bDateType_) {
    _sDate=emisDate(sDate, "/");
  } else {
    _sDate=emisCtoa(sDate,"/");
  }

  var _oDate=new Date(_sDate);
  _sDate=emisDate(_oDate.getFullYear() + emisPadl(_oDate.getMonth()+1,2,"0") +
                  emisPadl(_oDate.getDate(),2,"0"), sSep);

  // 判斷日期與實際 Date() 傳回是否相同, 相同則正確
  if (_sDate==sDate)
    return true;
  return false;
}

// 判斷年月是否為正確
// sDate: 傳入之日期的字串
// sSep: 日期格式分隔字, 不傳預設為 ""
function emisChkMonth(sMonth, sSep) {
  var _sSep = emisEmpty(sSep) ? sDateSepa_ : sSep;
  return emisChkDate(sMonth+_sSep+"01", sSep)
}

// 判斷時間是否為正確
// sTime: 傳入之時間的字串
function emisChkTime(sTime, sSep) {
  var _sSep = emisEmpty(sSep) ? sTimeSepa_ : sSep;
  sTime = sTime.replace(_sSep,"");
  if (sTime.length < 4)
     return false;

  var _sHH, _sMM;
  _sHH = sTime.substr(0,2);
  _sMM = sTime.substr(2,2);
  if (_sHH < "00" || _sHH >= "24" ||
      _sMM < "00" || _sMM >= "60")
     return false;

  if (sTime.length>4) {
    var _sSS = sTime.substr(4,2);
    if (_sSS < "00" || _sSS >= "60")
       return false;
  }

  return true;
}

// 判斷統一編號是否為正確
// sValue:傳入之字串
function emisChkP_ID(sValue) {
  if (sValue=="") return "";

  if (sValue.length != 8)
    return "輸入長度錯誤！";

  // 統一編號
  for (var i = 0; i < 8; i++) {
    if (sValue.charAt(i)>= "A")
      return "編號只能為數字！";
  }

  var _iValue=0;
  var _iValue1=0;
  var _sChar;
  var _iChar;
  for (var i = 0; i <8; i++) {
    _sChar=sValue.charAt(i);
    if (i==0 || i==2 || i==4 || i==7) {
      // 第 0,2,4,7 直接將值加入
      _iChar = _sChar-0;
      _iValue = _iValue + _iChar;
      _iValue1= _iValue + _iChar;
    }
    else if (i==1 || i==3 || i==5) {
      // 第 1,3,5 將值*2 加入, 分十位及個位相加
      _sChar = emisPadl((_sChar - 0) *2,2,"0");
      _iChar = (_sChar.substr(0,1) - 0) + (_sChar.substr(1,1) - 0);
      _iValue = _iValue  + _iChar;
      _iValue1= _iValue1 + _iChar;
    }
    else {
      // 第 6 將值*4 加入, 分十位及個位相加
      _sChar = emisPadl((_sChar - 0) *4,2,"0");
      _iChar = (_sChar.substr(0,1) - 0) + (_sChar.substr(1,1) - 0);
      _iValue = _iValue  + _iChar;

      // _iValue1 取十位及個位相加後之十位數
      _sChar = emisPadl(_iChar - 0,2,"0");
      _iValue1= _iValue1 + (_sChar.substr(0,1) - 0);
    }
  }

  return _iValue%10!=0 && (sValue.charAt(6)-0!=7 || _iValue1%10!=0)? "編碼錯誤！" : "";
}

// 判斷身份證號是否為正確
// sValue:傳入之字串
// 2006/05/25 andy: 將裡面的幾個條件判斷修正（如if (_sFValue="X")修改為if (_sFValue=="X")）
function emisChkID_NO(sValue) {
  if (sValue=="") return "";

  if (sValue.length != 10)
    return "輸入長度錯誤！";

  sValue = sValue.toUpperCase();
  if (sValue.length == 10) {
    // 身份證號
    var _sFValue = sValue.charAt(0);
    if (_sFValue < "A" || _sFValue > "Z")
      return "證號第一碼只能為英文字母！";

    for (var i = 1; i < 10; i++) {
      if (sValue.charAt(i) < "0" || sValue.charAt(i) > "9")
          return "證號後九碼只能為數字！";
    }

    // 判斷身份證規則
    _sFValue=sValue.charAt(0);
    var _iFValue=sValue.charCodeAt(0);
    if (_sFValue>="A" && _sFValue<="H")
      _iFValue=_iFValue-55;           // A=10,B=11......
    else if (_sFValue>="J" && _sFValue<="N")
      _iFValue=_iFValue-56;           // J=18,K=19......
    else if (_sFValue>="P" && _sFValue<="V")
      _iFValue=_iFValue-57;           // P=23,Q=24......
    else if (_sFValue=="X")
      _iFValue=30;
    else if (_sFValue=="Y")
      _iFValue=31;
    else if (_sFValue=="W")
      _iFValue=32;
    else if (_sFValue=="Z")
      _iFValue=33;
    else if (_sFValue=="I")
      _iFValue=34;
    else if (_sFValue=="O")
      _iFValue=35;

    var _sFNum=_iFValue + "";
    var _iFNum1=_sFNum.charAt(0) -0;
    var _iFNum2=_sFNum.charAt(1) -0;
    var _iFNum =_iFNum1 + 9*_iFNum2

    for (var i = 1; i < 9; i++)
      _iFNum = parseInt(_iFNum) + (9-i) * parseInt(sValue.charAt(i));

    if ((parseInt(_iFNum) + parseInt(sValue.charAt(9)))%10!=0)
      return "證號編碼錯誤！";
  }

  return "";
} // emisChkID_NO

// 判斷統一發票是否為正確
// sValue:傳入之字串
function emisChkInvoice(sValue) {
  if (sValue=="") return "";

  if (sValue.length != 10)
    return "輸入長度錯誤！";

  var _sFValue = sValue.charAt(0);
  if (_sFValue < "A" || _sFValue > "Z")
    return "編號第一碼只能為英文字母！";

  var _sSValue = sValue.charAt(1);
  if (_sSValue < "A" || _sSValue > "Z")
    return "編號第二碼只能為英文字母！";

  for (var i = 2; i < 10; i++) {
    if (sValue.charAt(i) < "0" || sValue.charAt(i) > "9")
      return "統一發票後八碼只能為數字！";
  }

  return "";
} // emisChkInooice

// 判斷中文字串長度
// sValue:傳入之字串
// iLength:傳入之長度
function emisChkLength(sValue, iLength) {
  if (emisLength(sValue)>iLength)
    return false;
  return true;
}

// 判斷E-Mail是否合法
// sValue:傳入之字串
function emisChkEMail(sValue) {
  if (!emisEmpty(sValue)) {
    //regularExpression = /^[^\s]+@[^\s]+\.[^\s]{2,3}$/;
    regularExpression = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\- ])+\.)+([a-zA-Z0-9])+$/;
    if (regularExpression.test(sValue)) {
        return true;
    }else{
        return false;
    }
  }
//  if (!emisEmpty(sValue) && sValue.indexOf("@")<0)
//    return false;
  return true;
}

// 判斷WWW是否合法
// sValue:傳入之字串
function emisChkWWW(sValue) {
  if (!emisEmpty(sValue) && sValue.indexOf(".")<0)
    return false;
  return true;
}
// *************************************************************************


// ************************** 欄位檢核處理函數 *****************************
// 判斷欄位是否為空白
// oField : 欄位物件
// sMsg   : 欄位名稱訊息
// iPage  : 此欄位分頁位置
function emisEmptyValid(oField, sMsg, iPage) {
  if (oField.value.replace(/ /g,"")=="") {
    alert("「" + sMsg + "」欄位不可為空白！");
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  return true;
}

// 判斷欄位是否為數字
// oField : 欄位物件
// iFigure: 允許之整數位, 不傳則只判斷是否為數值
// iScale : 允許之小數位
// sMsg   : 欄位名稱訊息
// sUMsg  : 自訂訊息
// iPage  : 此欄位分頁位置
function emisNumValid(oField, iFigure, iScale, sMsg, sUMsg, iPage) {
  var _sMsg=emisChkNum(oField, iFigure, iScale);
  if (_sMsg!="") {
    if (emisEmpty(sUMsg))
      alert((emisEmpty(sMsg)? "": "「" + sMsg + "」欄位") + _sMsg);
    else
      alert(sUMsg);
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  return true;
}

// 判斷欄位是否為日期
// oField : 欄位物件
// sMsg   : 欄位名稱訊息
// iPage  : 此欄位分頁位置
// bDefault: 是否允許空白, 不傳則預設允許
function emisDateValid(oField, sMsg, iPage, bDefault) {
  var _sDate=oField.value.replace(/ /g,"");
  if (_sDate=="" && emisEmpty(bDefault)) return true;
  if (!emisChkDate(_sDate)) {
    alert("「" + sMsg + "」欄位日期格式錯誤！");
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  oField.value=emisDate(_sDate);
  return true;
}

// 判斷欄位是否為年月
// oField : 欄位物件
// sMsg   : 欄位名稱訊息
// iPage  : 此欄位分頁位置
function emisMonthValid(oField, sMsg, iPage) {
  var _sMonth=oField.value.replace(/ /g,"");
  if (_sMonth=="") return true;
  if (_sMonth.length<4) {
    alert("「" + sMsg + "」欄位格式錯誤(年,月)！");
    emisPageChg(iPage);
    oField.value="";
    oField.focus();
    return false;
  }
  if (!emisChkMonth(_sMonth)) {
    alert("「" + sMsg + "」欄位年月格式錯誤！");
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  var _iDateLength=emisTrim(sDateSepa_).length;    // 日期是否多加一位數
  oField.value=emisDate(_sMonth+"01");
  oField.value=oField.value.substring(0,oField.value.length-2-_iDateLength);
  return true;
}

// 判斷欄位是否為時間
// oField : 欄位物件
// sMsg   : 欄位名稱訊息
// iPage  : 此欄位分頁位置
function emisTimeValid(oField, sMsg, iPage, sSep) {
  if (emisEmpty(oField.value)) return true;

  if (!emisChkTime(oField.value.replace(/ /g,""), sSep)) {
    alert("「" + sMsg + "」欄位時間格式錯誤！");
    emisPageChg(iPage);
    oField.focus();
    return false;
  }

  if (!emisEmpty(sTimeSepa_) && oField.value.indexOf(sTimeSepa_)<=0)
    oField.value=oField.value.substr(0,2) + sTimeSepa_ + oField.value.substr(2,4);

  return true;
}

// 判斷欄位是否為統一編號
// oField : 欄位物件
// sMsg   : 欄位名稱訊息
// bCheck : 是否必須 Check 正確才可輸出
function emisP_IDValid(oField, sMsg, bCheck, iPage) {
  var _sValue=oField.value.replace(/ /g,"");  // 去空白
  var _sMsg=emisChkP_ID(_sValue);
  if (_sMsg!="") {
    alert("「" + sMsg + "」欄位" + _sMsg);
    if (!emisEmpty(bCheck)) {
      emisPageChg(iPage);
      oField.focus();
      return false;
    }
  }
  oField.value=_sValue;
  return true;
}

// 判斷欄位是否為身份證號
// oField : 欄位物件
// sMsg   : 欄位名稱訊息
// bCheck : 是否必須 Check 正確才可輸出
function emisID_NOValid(oField, sMsg, bCheck, iPage) {
  var _sValue=oField.value.toUpperCase().replace(/ /g,"");  // 大寫,去空白
  var _sMsg=emisChkID_NO(_sValue);
  if (_sMsg!="") {
    alert("「" + sMsg + "」欄位" + _sMsg);
    if (!emisEmpty(bCheck)) {
      emisPageChg(iPage);
      oField.focus();
      return false;
    }
  }
  oField.value=_sValue;
  return true;
}

// 判斷欄位是否為統一發票號碼
// oField : 欄位物件
// sMsg   : 欄位名稱訊息
// iPage  : 此欄位分頁位置
function emisInvoiceValid(oField, sMsg, iPage) {
  var _sValue=oField.value.toUpperCase().replace(/ /g,"");  // 大寫,去空白
  var _sMsg=emisChkInvoice(_sValue);
  if (_sMsg!="") {
    alert("「" + sMsg + "」欄位" + _sMsg);
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  oField.value=_sValue;
  return true;
}

// 判斷編號欄位之起始編號迄是否大於終止編號
// oField1: 起始欄位物件
// oField2: 結束欄位物件
// sMsg   : 欄位名稱訊息
// sUMsg  : 自訂訊息
// iPage  : 此欄位分頁位置
function emisSeqValid(oField1, oField2, sMsg, sUMsg, iPage) {
  var _bValid=true;
  if (oField1.value!="" && oField2.value!="") {
    if (isNaN(oField1.value) || isNaN(oField2.value)) {
      if (oField1.value > oField2.value) _bValid = false;
    } else {
      // 是數值之處理
      if (oField1.value-0 > oField2.value-0) _bValid = false;
    }

    if (!_bValid) {
      alert(emisEmpty(sUMsg)? "「" + sMsg + "」起始不可大於終止！": sUMsg);
      emisPageChg(iPage);
      oField1.focus();
    }
  }
  return _bValid;
}

// 判斷欄位長度是否為超過
// oField : 欄位物件
// iLength: 欄位長度
// sMsg   : 欄位名稱訊息
function emisLengthValid(oField, iLength, sMsgField, iPage) {
  if (!emisChkLength(oField.value, iLength)) {
    var objMsg=document.getElementById(sMsgField);
    if(objMsg!=null&&typeof(objMsg)!="undefined"){
      alert("「" +objMsg.value + "」欄位輸入長度超過 " + iLength + " 字元！");
    }else{
      alert("此欄位輸入長度超過 " + iLength + " 字元！");
    }
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  return true;
}

// 判斷E-Mail欄位否為合法
// oField : 欄位物件
function emisChkEMailValid(oField, sMsg, iPage) {
  if (!emisChkEMail(oField.value)) {
    alert("「" + sMsg + "」欄位格式錯誤");
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  return true;
}

// 判斷WWW欄位否為合法
// oField : 欄位物件
function emisChkWWWValid(oField, sMsg, iPage) {
  if (!emisChkWWW(oField.value)) {
    alert("「" + sMsg + "」欄位必須輸入\".\"符號");
    emisPageChg(iPage);
    oField.focus();
    return false;
  }
  return true;
}
/*
 * 信用卡號檢核
 * 參數：oCardField-卡號欄位，sCardNo-卡號字串，sMsg-出錯時的提示訊息
 * 正確卡號示例：33272809408，23970587900，40000604409，32910003509，23970027701
 *            4579610190622208,4579521000522001,5520000123248205,4311951004685285
 */
function emisChkCardNo(oCardField,sCardNo,sMsg){
  if(typeof(oCardField) == "object") {
    sCardNo = oCardField.value;
  }
  if( emisEmpty(sCardNo) ) return true;

  var _iSum = 0;
  var _iLen = sCardNo.length;
  if(_iLen < 11 ){
    alert("「信用卡號」欄位長度不可小於11碼！");
    if(typeof(oCardField) == "object") oCardField.select();
    return false;
  } else if(_iLen > 16 ){
    alert("「信用卡號」欄位長度不可大於16碼！");
    if(typeof(oCardField) == "object") oCardField.select();
    return false;
  }
  if( _iLen == 11 ){   //U卡11碼
    var _sTmp = "7356798597";
    for( i = 9; i>= 0; i-- ) {
      _iSum += (sCardNo.charAt(i)-0) * (_sTmp.charAt(i)-0);
    }
    var j = Math.floor(_iSum/100) * 5;
    _iSum = _iSum%100;
    j += Math.floor(_iSum/10) * 9;
    j += Math.floor(_iSum%10) * 7;
    j = j%10 + 3 ;
    
    if( (j%10 + (sCardNo.charAt(10) -0) )%10 == 0 ){
      return true;
    } else {
      if(emisEmpty(sMsg)){
        alert("「信用卡號」欄位編碼錯誤！");
      } else {
        alert(sMsg);
      }

      if(typeof(oCardField) == "object") {
        oCardField.select();
      }
      return false;
    }
  } else {
    //由右往左算：偶數位數值X2(若大於9,就乘2再減9) +  奇數位數值  = result  result可被10整除就ok
    sCardNo = emisPadl(sCardNo,16,0);

    for (i = 15; i>= 0; i--){
      //alert(sCardNo.charAt(i)-0)
      if(i%2 != 0){ //奇數位。
        _iSum += (sCardNo.charAt(i)-0);
      } else { //偶數位。
        if( (sCardNo.charAt(i)-0)*2 > 9 ) {
          _iSum += (sCardNo.charAt(i)-0) * 2 - 9;
        } else _iSum += (sCardNo.charAt(i)-0) * 2;
      }
    }

    if( _iSum%10 == 0 ) {
      if(typeof(oCardField) == "object") {
        oCardField.value = sCardNo;
      }
      return true;
    } else {
      if(emisEmpty(sMsg)){
        alert("「信用卡號」欄位編碼錯誤！");
      } else alert(sMsg);

      if(typeof(oCardField) == "object") {
        oCardField.select();
      }
      return false;
    }
  }
}
// *************************************************************************


// ************************* 訊息處理函數 **********************************
// MsgBox 顯示訊息
// emisMsgBox(顯示字串, 顯示類型, 預設按鈕, 對話框預設值, 對話框Size, 對話框MaxLength, 輸入對話框之 Picture)
// 顯示類型: "?":確認訊息, "T":多重訊息, "F":資訊訊息, "I":輸入對話框, "P":密碼對話框
// 輸入對話框之Picture: sPicture="U" 轉換英文字母為大寫 ...
function emisMsgBox(sStr, sType, iDefault, sInput, iSize, iMaxLength, sPicture) {
  _sMsgStr_      =sStr;
  _sMsgType_     =sType;
  _iMsgDefault_  =emisEmpty(iDefault)? 1: iDefault;
  _sMsgInput_    =sInput;
  _iMsgSize_     =emisEmpty(iSize)? 10: iSize;
  _iMsgMaxLength_=emisEmpty(iMaxLength)? _iMsgSize_: iMaxLength;
  _sMsgPicture_  =sPicture;

  // 各顯示類別預設值
  var _iWidth=170;
  var _iHeight=130;
  var _iNowLength=15;
  if (sType=="?") {        // 確認訊息
    _iWidth=260;
    _iNowLength=24;
  }
  else if (sType=="T") {   // 多重訊息
    _iWidth=360;
    _iNowLength=40;
  }
  else if (sType=="I" || sType=="P") {   // 輸入對話框 & 密碼對話框
    _iWidth=260 + (_iMsgSize_-10)*10;
    _iNowLength=10;
  }

  // 處理輸入之字串
  var _aStr=sStr.split("\n");
  var _iMaxLength=0;
  var _iLength;
  for (var i=0; i<_aStr.length; i++) {
    _iLength=emisLength(_aStr[i])
    if (_iLength>_iMaxLength)
      _iMaxLength=_iLength;
  }
  // 依最大字數增加 Width
  if (_iMaxLength>_iNowLength)
    _iWidth=_iWidth + (_iMaxLength-_iNowLength)*10;  // 預設為 msgbox.htm 字體為 9pt

  // 依行數增加 Height
  _iHeight=_iHeight + (_aStr.length-1)*10;

  // For 螢幕 Size 處理
  if (screen.availWidth!=800) {
    _iWidth=_iWidth*screen.availWidth/800;
    _iHeight=_iHeight*screen.availHeight/600;
  }

  //alert(_iWidth);
  var _sRetStr=emisShowModal("../../js/emis_msg.htm", _iWidth, _iHeight);
  if ((sType=="I" || sType=="P") && _sRetStr=="Cancel")
    return "";
  else
    return _sRetStr;
}

// 顯示詢問訊息  emisAnswer(訊息字串, 預設按鍵)
// emisAnswer("是否確定欲刪除此資料？ <Y/N>\n11\n22\n33", 2);
// emisAnswer("是否確定欲儲存此資料？ <Y/N/C>", 1, "T");
// sStr:訊息字串
// iDefault:預設按鍵
// sType:顯示類型
function emisAnswer(sStr, iDefault, sType) {
  sType=emisEmpty(sType)? "?": sType;
  return emisMsgBox(sStr, sType, iDefault);
}

// 顯示訊息  emisMsg(顯示字串)
// emisMsg("資料庫總計筆數:100筆！");
// sStr:訊息字串
function emisMsg(sStr) {
  return emisMsgBox(sStr, "F");
}

// 輸入對話框  emisPrompt(提示字串, 預設值, Size, MaxLength)
// emisPrompt("請輸入編號:", "0000001", 20);
function emisPrompt(sStr, sInput, iSize, iMaxLength, sPicture) {
  return emisMsgBox(sStr, "I", 1, sInput, iSize, iMaxLength, sPicture)
}
// *************************************************************************


// ************************* 視窗處理函數 **********************************
// 開啟 ShowModal 畫面, 不可切回上一畫面
// sURL   : 開啟之網頁
// iWidth : 視窗寬度, 不傳預設為 300px
// iHeigth: 視窗高度, 不傳預設為 100px
// 2005/03/10 加入一iTop參數,控製其視窗距離屏幕頂端的高度 update by andy
function emisShowModal(sURL, iWidth, iHeight,iTop) {
  iWidth =(emisEmpty(iWidth) ?300:iWidth);
  iHeight=(emisEmpty(iHeight)?100:iHeight);
  var _sDialogTop = "";
  if(!emisEmpty(iTop)){
    _sDialogTop = "dialogTop=" + iTop +";";
  }
  return window.showModalDialog(sURL, window,
         "dialogWidth=" + iWidth + "px;dialogHeight=" + iHeight + "px;"+ _sDialogTop +
         "center=center;border=thin;help=no; menubar=no;toolbar=no;location=no;directories=no;status=no;resizable=0; scrollbars=0");
}

// 開啟一新視窗
// sURL   : 開啟之網頁
// iWidth : 視窗寬度, 不傳預設為 300px
// iHeigth: 視窗高度, 不傳預設為 100px
// iTop   : 視窗 Top 座標, 不傳預設為依解析度置中
// iLeft  : 視窗 Left 座標, 不傳預設為依解析度置中
function emisWinOpen(sURL, iWidth, iHeight, iTop, iLeft, sName) {
  if (arguments.length==1) {
    window.open(sURL);
    return;
  }

  // -1表示開最大視窗
  if (iWidth == -1) iWidth = screen.availWidth;
  if (iHeight == -1) iHeight = screen.availHeight-20;

  iWidth =(emisEmpty(iWidth) ?300:iWidth);
  iHeight=(emisEmpty(iHeight)?100:iHeight);

  // 未傳座標則將視窗置中
  if (arguments.length<5) {
    iTop =(screen.availHeight/2)-(iHeight/2)-1;
    iLeft=(screen.availWidth/2)-(iWidth/2)-1;
  }

  sName=(emisEmpty(sName)?"":sName);

  return window.open(sURL, sName,
         "width=" + iWidth + "px,height=" + iHeight + "px," +
         "top=" + iTop + "px,Left=" + iLeft + "px," +
         "border=thin,help=no,menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=0,scrollbars=1");
}

// 開一個視窗再傳入idForm的輸入值, 讓指定.jsp能用getParameter()取出輸入值
// sURL : 開啟之網頁
// sName: 網頁名稱
// oForm: submit Form 名稱
function emisOpen(sURL, sName, oForm) {
  var _sFlag = "width=300px,height=100px,status=1,scrollbars=1,resizable=1,hotkeys=0"+
               ",top=" + ((screen.availHeight-200)/2) +
               ",left=" + ((screen.availWidth-400)/2);
  // 無傳入 Form Object 則以第一個 Form
  var _oForm = oForm ; //add by Ben [eros 3339] 20050530
  if (emisEmpty(oForm))
    _oForm = document.forms[0]; // modify by Ben [eros 3339] 20050530
  // sName 以 Random 產生, 以避免會不同作業會開同一視窗
  sName=emisEmpty(sName)? (Math.floor(Math.random() * 10000000000) -0) +"": sName;
  var _oWin = window.open("", sName, _sFlag);
  var _sAction=_oForm.action;
  var _sTarget=_oForm.target;
  _oForm.action = sURL;
  _oForm.target = sName;
  _oForm.submit();

  // 還原 action, target
  _oForm.action = _sAction;
  _oForm.target = _sTarget;
  return _oWin;
} // emisOpen()


// 調整 Style 屬性
// oStyle : 欲調整 Style 之物件
// sStyle : 欲調整 Style 之屬性
// aAttrib: 欲調整 Style 之屬性值 aAttrib[0]:800*600之處理,
//                                aAttrib[1]:1024*768之處理
function emisAdjustStyle(oStyle, sStyle, aAttrib) {
  if (sStyle.toLowerCase() == "height") {
    if (screen.availWidth >= 1024)
      oStyle.height = aAttrib[0];
    else
      oStyle.height = aAttrib[1];
  }
}

// 顯示跑馬燈畫面
// emis_marquee(window.idSpan, "start");
// emis_marquee(window.idSpan, "end");
// oObj: 處理之 span 物件
// sAction: 目前之動作, "start"=開始, "end"=結束
// sMsg: 顯示之訊息, 不傳入則顯示 "資料處理中，請稍待片刻．．．．"
function emisMarquee(oObj, sAction, sMsg) {
  if (emisEmpty(sMsg)) sMsg = "資料處理中，請稍待片刻．．．．";
  if (sAction == "start")
    oObj.innerHTML = "<marquee id=marMsg scrolldelay=150>"+
       "<b style='color:#CC6666 ; cursor:hand'>" + sMsg + "</b></marquee>";
  else if (sAction == "end") {
    document.all.marMsg.disabled=true;
    oObj.innerHTML = "";
  }
  else
    oObj.innerHTML = "<marquee id=marMsg scrolldelay=150>"+
       "<b style='color:#CC6666 ; cursor:hand'>" + sMsg + "</b></marquee>";
}

// 畫面分頁處理
// iPage 目前頁次
function emisPageChg(iPage) {
  if (emisEmpty(iPage)) return;
  if (iPage==iCurrPage_) return;   // 頁碼與目前頁碼相同則不處理

  iCurrPage_=iPage;     // 將頁碼存於 iCurrPage_
  iPage=iPage-1;        // 將頁碼 -1, 以配合 Array 處理
  var _sImagePath="../../images/";
  for (var i=0; i<aPage_.length; i++) {
    eval("document.all." + aPageTable_[i] + ".style.display='none'");
    eval("document.all." + aPage_[i] + ".src='" + _sImagePath + aPageImage2_[i] +"'");
  }
  eval("document.all." + aPageTable_[iPage] + ".style.display=''");
  eval("document.all." + aPage_[iPage] + ".src='" + _sImagePath + aPageImage1_[iPage] +"'");
}

/** 2005/04/25 [eros 3041] andy start:emisOnblurBefore()和emisOnchangeAfter()兩函數 */
// 欄位onblur事件處理公用函數
// @author:andy 2005/04/25
// 參數:oObject - 處理之欄位
// 調用範例:emisOnblurBefore(this);
function emisOnblurBefore(oObject){
  if( emisEmpty(oObject)
    || typeof(oObject) != "object"
    || typeof(eval("window.fncOnblurBefore" + oObject.name)) != "function"
    )	{
    return true;
  }

  try {
    //調用前端各作業中所定議的欄位onblur時需作其他處理的函數.
    //如欄位名為P_NO,前端所定義之函數應為:fncOnblurBeforeP_NO(obj) (參數名obj可任意命名)
    var isSuccessed = eval("window.fncOnblurBefore" + oObject.name + "(oObject);");
    return isSuccessed
  } catch (e) {
    alert("fncOnblurBefore" + oObject.name + "() error！");
    return false;
  }
}

// 欄位onchange事件處理公用函數
// @author:andy 2005/04/25
// 參數:oObject - 處理之欄位
// 調用範例:emisOnblurAfter(this);
function emisOnblurAfter(oObject){
 if( emisEmpty(oObject)
    || typeof(oObject) != "object"
    || typeof(eval("window.fncOnblurAfter" + oObject.name)) != "function"
    )	{
    return true;
  }

  //try {
    //調用前端各作業中所定議的欄位onblur事件時需作其他處理的函數.
    //如欄位名為P_NO,前端所定義之函數應為:fncOnblurAfterP_NO(obj) (參數名obj可任意命名)
    var isSuccessed = eval("window.fncOnblurAfter" + oObject.name + "(oObject);");
    return isSuccessed

  //} catch (e) {
  //  alert("fncOnblurAfter" + oObject.name + "() error！");
    return false;
 // }
}
/** 2005/04/25 [eros 3041] andy end */

/**取得傳入日期年份的第一周星期一的日期,當前周數,當前周的星期一和星期日的日期
   參數:sDate-傳入之日期,不傳將取當日之日期;
       sSep-日期分隔符,有傳時將傳回的日期加上指定的分隔符;
   返回值:傳回一個有四個元素的數組:
        [0]-第一周星期一的日期
        [1]-周數
        [2]-所屬周的星期一的日期
        [3]-所屬周的星期日的日期
        [4]-當前系統日期
 */
function emisGetWeekInf(sDate,sSep){
  var _sURL = "ACT=getWeekInf&TITLE=資料選擇作業&DATE=" + sDate;
  var aRetVal = emisGetData(_sURL)[0].split(",");

  if(!emisEmpty(sSep)){
    aRetVal[0] = emisDate(aRetVal[0],sSep);
    aRetVal[2] = emisDate(aRetVal[2],sSep);
    aRetVal[3] = emisDate(aRetVal[3],sSep);
    aRetVal[4] = emisDate(aRetVal[4],sSep);
  }
  return aRetVal;
}

/**取得單據最大單號加一的單號,並根據FIELDFORMAT檔設定自動左補零
 * @author:andy 2005/06/12
 *    參數:sTable-操作TABLE  sFields-單號對應之字段(欄位)名
 *        aCondFld-條件欄位名數組,與aCondVal對應
 *        aCondVal-條件欄位值數組,與aCondFld對應
 *        sFdType-對應到FIELDFORMAT表中的FD_TYPE,不傳時取sFields
 *  返回值:新單號字串.
 *調用範例:var billNo = emisGetBillNo("IMP_PART_H","IMP_NO",["S_NO"],["003"]);
 *   其他:也可用此函數取得表身最大RECNO+1(emisGetBillNo("IMP_PART_D","RECNO",["S_NO","IMP_NO"],["003","0000000008"]);)
 */
function emisGetBillNo(sTable,sField,aCondFld,aCondVal,sFdType,sDateFld){
  var sConds = " 1 = 1";
  for(i = 0; i < aCondFld.length; i++){
    sConds += " and " + aCondFld[i] + " = ''" + aCondVal[i] + "''";
  }

  var _sURL = "ACT=getBillNo&TITLE=資料選擇作業"
    + "&FIELD=" + sField + "&TABLE=" + sTable
    + "&CONDS=" + sConds + "&FD_TYPE=" + ( emisEmpty(sFdType) ? sField : sFdType )
    + "&DATEFLD=" + (emisEmpty(sDateFld) ? "CRE_DATE" : sDateFld );

  var sRetVal = emisGetData(_sURL)[0].split(",");
  
  if(sRetVal[2] == "Y" && !emisEmpty(sRetVal[1])) {
    sRetVal[0] = emisPadl( (sRetVal[0] - 0) + 1, sRetVal[1],"0" );
  }else{
    sRetVal[0] = (sRetVal[0] - 0) + 1;
  }

  return sRetVal[0];
}

/**
 * 共用取數據函數(不用再在每個作業的XML中都去寫一個ACT,前端調用也比較方便)
 * @author:andy 2005/06/16
 *    參數:sTable-操作TABLE
 *        sFields-需取得之字段(欄位)名,可以為多個,以逗號隔開 ,傳空串時預設取FLS_NO
 *        aCondFld-條件欄位名數組,與aCondVal對應
 *        aCondVal-條件欄位值數組,與aCondFld對應
 *        sOtherCond-其他特殊條件(如:FLS_NO != '0');
 *  返回值:取得的數組值.
 * 調用範例:
 * var aRetVal = wtnGetData("PO_H","FLS_NO",["S_NO","NO"],["003","0000000001"]);
 * var aRetVal = wtnGetData("IMP_PART_H","ENTER_DATE",["S_NO","IMP_NO"],["003","0000000006"]);
 * var aRetVal = wtnGetData("IMP_PART_H","ENTER_DATE,REMARK,IS_HQ",["S_NO","IMP_NO"],["003","0000000006"]);
 * var aRetVal = wtnGetData("IMP_PART_H","Count(1) as CNT",["S_NO"],["003"],"IS_H != '1'");
 */
function wtnGetData(sTable,sField,aCondFld,aCondVal,sOtherCond){
  var sConds = " 1 = 1";

  if(emisEmpty(sField)){
    sField = " FLS_NO ";
  }

  sConds = emisSetWhereCond("",aCondFld,aCondVal,sOtherCond);

  var _sURL = "ACT=getData&TITLE=資料選擇作業"
    + "&FIELD=" + sField + "&TABLE=" + sTable
    + "&CONDS=" + sConds ;

  var sRetVal = emisGetData(_sURL);

  return sRetVal;
}

/**
 * 組條件字串函數
 * 參數:sCondName-條件字串接收物件(如:"CONF_WHERE";可以傳空字串)
 *     aCondFld-條件欄位名數組,與aCondVal對應
 *     aCondVal-條件欄位值數組,與aCondFld對應
 *     sOtherCond-其他特殊條件(運算符不是"="的)
 * 返回值:組合好的條件字串
 */
function emisSetWhereCond(sCondName,aCondFld,aCondVal,sOtherCond){
  var sRetCond = " 1 = 1";
  if(!emisEmpty(aCondFld)) {
    for( i=0; i<aCondFld.length; i++ ){
      sRetCond += " and " + aCondFld[i] + " = '" + aCondVal[i] + "'" ;
    }
  }

  if(!emisEmpty(sOtherCond)){
    sRetCond += " and " + sOtherCond ;
  }

  if(!emisEmpty(sCondName)){
    eval("document.all." + sCondName).value = sRetCond;
  }
  return sRetCond;
}

// 功能說明: 設定游標註點
function setFocus(aFocusField){
  try{
    window.focus();
    for(i=0; i < aFocusField.length ; i++) {
      try{
        var aField_ = $("#"+ aFocusField[i]);
        aField_.focus();
        break;
      } catch(ee) {
      try{
        eval('document.all.' + aFocusField[i] + '.focus()');
        break;
      }
      catch(e) {}
      }
    }
  }
  catch(e) {}
}

// 判斷時間是否正確
// obj: 時間物件
// sSep:分隔符號
function wtnChkTime(obj,sSep) {
  sSep = emisEmpty(sSep) ? ":" : sSep;
  var sTime;
  var _sHH, _sMM,_sSS;
  if((obj.value).indexOf(sSep)==-1){    //沒有輸入分隔符號
    sTime=obj.value;
    _sHH = emisPadl(sTime.substr(0,2),2,"0");
    _sMM = emisPadl(sTime.substr(2,2),2,"0");
    _sSS = emisPadl(sTime.substr(4,sTime.length),2,"0");
  }else{                                //有輸入分隔符號
    _sHH = wtnSubstr(obj.value,sSep);
    _sMM = wtnSubstr(obj.value.substr(_sHH.length+1,obj.length),sSep);
    _sSS = wtnSubstr(obj.value.substr((_sHH+_sMM).length+2,obj.length),sSep);
    if(_sSS == "" && _sMM.length > 2){
      _sSS = _sMM.substr(2,_sMM.length);
      _sMM = _sMM.substr(0,2);
    }
    //小時,分鐘,秒數前補零
    _sHH = emisPadl(_sHH,2,"0");
    _sMM = emisPadl(_sMM,2,"0");
    _sSS = emisPadl(_sSS,2,"0");
  }
  sTime=emisPadl(_sHH,2,"0")+emisPadl(_sMM,2,"0")+emisPadl(_sSS,2,"0");

  if (sTime.length>6)  return false;
  if (_sHH < "00" || _sHH >= "24" || _sMM < "00" || _sMM >= "60"
    || _sSS < "00" || _sSS >= "60" ) {
     return false;
  } else {
    obj.value=_sHH + sSep + _sMM + sSep + _sSS;
    return true;
  }
}
//根據指定的字符截取字串,配合上面時間欄位的函數wtnChkTime.
function wtnSubstr(sStr,sSep){
  if(sStr=="" || sSep=="") return sStr;
  if(sStr.indexOf(sSep)==-1) return sStr;
  else {
    return sStr.substr(0,sStr.indexOf(sSep));
  }
}

function wtnSetFlsNoWhere(sFlsNo){
  if(typeof(document.all.FLS_NO_WHERE) == "object"){
    if( sFlsNo == '0' ){
      document.all.FLS_NO_WHERE.value = " = '0'"
    } else if(sFlsNo == '3'){
      document.all.FLS_NO_WHERE.value = " >= '3'"
    } else if(sFlsNo == '1'){
      document.all.FLS_NO_WHERE.value = " = '1'"
    } else {
      document.all.FLS_NO_WHERE.value = "";
    }
  }
}

//使用Ajax方式執行操作
function emisSaveAjax(url) {
  var xml;
  try {
    xml = new ActiveXObject("Msxml2.XMLHTTP");
  } catch(e) {
    xml = new ActiveXObject("Microsoft.XMLHTTP");
  }
  var post = "";
  //返回數據數組
  //  var url = "getUserMsg.jsp?USER_ID=" + sUSER_ID + "&S_NO=" + sS_NO;
  xml.open("GET", url, false);
  //使用POST方法打開一到服務器的連接接，以異步方式通信
  //xml.setrequestheader("content-length", post.length);
  xml.setrequestheader("content-type", "application/x-www-form-urlencoded");
  xml.send(post);
  //傳送數據
  var res = "";
  if (xml.readyState == 4 && xml.status == 200) {
    res = xml.responseText;
  }
  return res;
}

//用JQuery 的方式，取得頁面輸入欄位值
function getDataById() {
    var dataStr = "";
   //類型為輸入框
    $("input").each(function(i) {
      if (this.id != "" && this.value != "") {
        if (dataStr.length == 0)
          dataStr = this.id + "=" + this.value;
        else
          dataStr += "&" + this.id + "=" + this.value;
      }
    });
    //類型為下拉框
    $("select").each(function(i) {
      if (this.id != "" && this.value != "")
      {
        if (dataStr.length == 0) {
          dataStr = this.id + "=" + this.value;
        }
        else
          dataStr += "&" + this.id + "=" + this.value;
      }
    });
    //類型為SPAN
    $("span").each(function(i) {
      if (this.id != "" && $(this).html() != "")
      {
        if (dataStr.length == 0) {
          dataStr = this.id + "=" + $(this).html();
        }
        else
          dataStr += "&" + this.id + "=" + $(this).html();
      }
    });
    return dataStr;
  }

  //用JQuery POST 的方式提交數據
 function sendPost(urlStr) {
    $.ajax({
      type:"POST",
      url:urlStr,
      setTimeout:2000,
      error:function() {
        removeLoadDiv();
        alert("ERROR!")
      },
      data:getDataById(),
      success:function(msg) {
        removeLoadDiv();
        //處理完成後保存返回信息
        if( typeof(afterSendPostProce) == "function") afterSendPostProce(msg);
        else alert(msg);

      }
    }
   );
 }
//請求時的等待效果
 function requestProgress(top,left){
   //讓頁面呈現陰影效果
   var proDiv=$("<div id='proDiv'></div>");
   proDiv.css("position","absolute");
   proDiv.css("top","0px");
   proDiv.css("left","0px");
   proDiv.css("width",$(document).width()+"px");
   proDiv.css("height",$(document).height()+"px");
   proDiv.css("background-color","black");
   proDiv.css("filter","Alpha(opacity=10)");
   proDiv.css("-moz-opacity",".1");
   proDiv.css("opacity","0.1");
   proDiv.appendTo("body");
   var _top="260px";
   var _left="430px";
   if(!emisEmpty(top))
     _top=top;
   if(!emisEmpty(left))
     _left=left;
   //用於顯示處理效果 的圖片
   var imgDiv=$("<div id='imgDiv'  style='position:absolute;top:"+_top+";left:"+_left+";z-index:10000'>"+
   "<img id='imgLoad' src='../../images/load2.gif' valign='center'><font color='blue'><b> Loading ...</b></font></img></div>");
   imgDiv.appendTo("body");
 }
 //請求完成後刪除加載的效果
 function removeLoadDiv(){
   var proDiv= $("#proDiv");
   var imgDiv= $("#imgDiv");
   if(proDiv!=null){
     proDiv.remove();
   }
   if(imgDiv!=null){
     imgDiv.remove();
   }
 }

// 判斷中國身份證號是否為正確
// sValue:傳入之字串
function emisChkCN_ID_NO(sValue) {
    if (sValue == "") return "";

    var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
    var error;
    var varArray = new Array();
    var intValue;
    var lngProduct = 0;
    var intCheckDigit;
    var intStrLen = sValue.length;
    var idNumber = sValue;
    // initialize
    if ((intStrLen != 15) && (intStrLen != 18)) {
        return "輸入身份證號碼長度不對！";
    }
    // check and set value
    for (i = 0; i < intStrLen; i++) {
        varArray[i] = idNumber.charAt(i);
        if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
            return "錯誤的身份證號碼！";
        } else if (i < 17) {
            varArray[i] = varArray[i] * factorArr[i];
        }
    }
    if (intStrLen == 18) {
        //check date
        var date8 = idNumber.substring(6, 14);
        if (emisChkDate(date8) == false) {
            return "身份證中日期信息不正確！";
        }
        // calculate the sum of the products
        for (i = 0; i < 17; i++) {
            lngProduct = lngProduct + varArray[i];
        }
        // calculate the check digit
        intCheckDigit = 12 - lngProduct % 11;
        switch (intCheckDigit) {
            case 10:
                intCheckDigit = 'X';
                break;
            case 11:
                intCheckDigit = 0;
                break;
            case 12:
                intCheckDigit = 1;
                break;
        }
        // check last digit
        if (varArray[17].toUpperCase() != intCheckDigit) {
            return "身份證驗證位錯誤！正確為： " + intCheckDigit;
        }
    }
    else {        //length is 15
        //check date
        var date6 = idNumber.substring(6, 12);
        if (emisChkDate("19" + date6) == false) {
            return "身份證日期信息有誤！";
        }
    }
    return "";
}
