cnb.kgibank.com Open in urlscan Pro
60.251.29.27  Public Scan

URL: https://cnb.kgibank.com/B2C/js/b2c.js
Submission: On April 21 via manual from SG — Scanned from SG

Form analysis 0 forms found in the DOM

Text Content

/**
 * string format
 * 例:
 * alert( 'key:[{0}],value:[{1}]'.f('name','Super Man') );
 * 結果 - key:[name],value:[Super Man]
 * @return format 結果
 * @author Shaka 2013.03.12
 */
String.prototype.format = String.prototype.f = function () {
	var txt = this;
	for(var i=0;i<arguments.length;i++) {
		var exp = new RegExp('\\{' + (i) + '\\}','gm');
		txt = txt.replace(exp,arguments[i]);
	}
	return txt;
};

/**
 *IE8無indexOf Method,補上prototype
 * @author Clark 2016.01.27
 */
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
        "use strict";
        if (this == null) {
            throw new TypeError();
        }
        var t = Object(this);
        var len = t.length >>> 0;
        if (len === 0) {
            return -1;
        }
        var n = 0;
        if (arguments.length > 1) {
            n = Number(arguments[1]);
            if (n != n) { // shortcut for verifying if it's NaN
                n = 0;
            } else if (n != 0 && n != Infinity && n != -Infinity) {
                n = (n > 0 || -1) * Math.floor(Math.abs(n));
            }
        }
        if (n >= len) {
            return -1;
        }
        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
        for (; k < len; k++) {
            if (k in t && t[k] === searchElement) {
                return k;
            }
        }
        return -1;
    }
}

var DATAGRID_BODY_SUFFIX_ID = "_DataGridBody";

// 銀行代碼檢核
var bankRegExp = /^\d{7}$/;
// ATM銀行代碼檢核
var atmRegExp = /^\d{3}$/;
// 他行代碼檢核
var interbankNotRegExp = /^\d{3}0000$/;
// 自行代碼檢核
var intrabankRegExp = /^809\d{4}$/;
// 帳號檢核
var accountRegExp = /^\d{1,}$/;
// 凱基帳號長度
var cosmosAccountRegExp = /^(\d{12}|\d{14}|\d{16})$/;
//凱基帳號長度
var payeeCosmosAccountRegExp = /^(\d{12}|\d{14}|\d{15}|\d{16})$/;
// 統編檢核
var uidRegExp = /^[\d|a-zA-Z]+$/;
// 日期檢核
var dateRegExp = /^\d{4}\/\d{2}\/\d{2}$/;
// 電話區碼檢核
var zipRegExp = /^\d{2,4}$/;
// 純數字
var numberRegExp = /^\d*$/;
// 英數字 (a-z, A-Z, 0-9, _, +)
var wordRegExp = /^(\w|\+)*$/;
// 外幣收款帳號檢核,欄位不得為中文或不允許字元,僅允許大寫英數字或/ - ? : ( ){ }. , ‘ + 及空格,且第一字元不可為: 與 –"和/和空白
var fxPayeeAcctRegExp = /^[a-zA-Z0-9|\\|\?|\(|\)|\{|\}|\.|\,|\'|\+][a-zA-Z0-9|\/|\-|\?|\:|\(|\)|\{|\}|\.|\,|\'|\+|\s]*$/;
//var fxPayeeAcctRegExp = /^[\w|\\|\?|\(|\)|\{|\}|\.|\,|\'|\+|\s][\w|\/|\-|\?|\:|\(|\)|\{|\}|\.|\,|\'|\+|\s]*$/;
//var fxPayeeAcctRegExp = /^[a-zA-Z0-9|\\|\?|\(|\)|\{|\}|\.|\,|\'|\+|\s][a-zA-Z0-9|\/|\-|\?|\:|\(|\)|\{|\}|\.|\,|\'|\+|\s]*$/;
// 電話檢核
var telRegExp = new RegExp("^[0-9]{6,8}$");
// 行動電話檢核
var mobileRegExp = new RegExp("^[0-9]{10}$");
// email檢核
var emailRegExp = new RegExp("^[\\w-]+([\\.+][\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$");
//中文檢核
var chineseRegExp =/[\u4E00-\u9FA5]/;

var obuExp = new RegExp("^[A-Za-z]{3}.*$");

// 取得Jsf元件Id
function gjid(id) {
	return getJsfId(getFormId(), id);
}

// 設定錯誤訊息至id
function setErrorMsg(id, msg) {
	// 找到訊息節點
	var span = document.getElementById(id);
	
	if(!span){
		return true;
	}
	
	// 若有錯誤, 則顯示訊息 (加入子節點)
	if(msg.length > 0) {
		span.className = 'error';
		span.innerHTML = msg;
		return false;
	}
	else {
		span.className = 'hide';
		span.innerHTML = '';
		return true;
	}
}

// 設定錯誤訊息至top error area
function setTopErrorMsg(msg) {
	var div = gid('validateErrMsgSet');
	
	// 若有錯誤, 則顯示訊息 (加入子節點)
	if(msg.length > 0) {
		div.className = 'error_top';
		div.innerHTML = msg;
		return false;
	}
	else {
		div.className = 'hide';
		div.innerHTML = '';
		return true;
	}
}

// 彈現錯誤訊息
function popupErrorMsg(msg) {
	
	// 若有錯誤, 則顯示訊息 (加入子節點)
	if(msg.length > 0) {
		alert(msg);
		return false;
	}
	else {
		return true;
	}
}

// 取得id的錯誤訊息
function getErrorMsg(id) {
	// 找到訊息節點
	var span = document.getElementById(id);
	return span.innerHTML;
}

// 清除id的錯誤訊息
function clearErrorMsg(id) {
	setErrorMsg(id, '');
}

// 清除所有錯誤訊息
function clearAllErrorMsg() {
	
	// 清除伺服端錯誤訊息
	clearServerErrorMsg();
	
	// 找到訊息節點
	var spans = document.getElementsByTagName("span");
	for(var i = 0; i < spans.length; i++) {
		if (spans[i].className == 'error') {
			spans[i].className = 'hide';
			spans[i].innerHTML = '';
		}
	}
}

// 清除伺服端錯誤訊息
function clearServerErrorMsg() {
	var spans = document.getElementsByTagName("span");
	for (var i = 0; i < spans.length; i++) {
		if (spans[i].className == 'error_top') {
			spans[i].className = 'hide';
			spans[i].innerHTML = '';
		}
	}
	
	var divs = document.getElementsByTagName("div");
	for (var i = 0; i < divs.length; i++) {
		if (divs[i].className == 'error_top') {
			divs[i].className = 'hide';
			divs[i].innerHTML = '';
		}
	}
}

// 退件原因Combo連動InputText
function onComboRejectReasonClick(combo, input) {
	var rejectReason = gid(gjid(combo)).value;
	if (rejectReason == 'none') {
		rejectReason = '';
	}
	gid(gjid(input)).value = rejectReason;
}

// 交易資訊: 設定交易結果class
// 依據success設定result的class
function setResultClass(success, result) {
	if (!success) {
		chgClass(gid(result), 'warning');
	}
}

function addIETabOrder()
{
	var links = document.getElementsByTagName('a');
	
	for (var i = 0; i < links.length; i++) {
		links[i].tabIndex = -1;
	}
}


function onAgreeClick(agree, lay) {
	var agree = gid(gjid(agree));
	if (agree.checked) {
		show(lay, '');
	}
	else {
		hide(lay);
	}
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBizTime() {
	if (arguments.length == 2) {
		return checkBizTimeWithoutDateId(arguments[0], arguments[1]);
	}
	else if (arguments.length == 3) {
		return checkBizTimeWithDateId(arguments[0], arguments[1], arguments[2]);
	}
	else {
		return false;
	}
}

/**
 * 檢核營業時間(台幣單筆交易)
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBizTimeTwdTx() {

	if (arguments.length == 3) {
		return checkBizTimeTwdTxWithoutDateId(arguments[0], arguments[1], arguments[2]);
	}
	else if (arguments.length == 4) {
		return checkBizTimeTwdTxWithDateId(arguments[0], arguments[1], arguments[2], arguments[3]);
	}
	else {
		return false;
	}
	
}

/**
 * 檢核營業時間(台幣整批交易)
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBatchBizTimeTwdTx() {
	
	if (arguments.length == 4) {
		return checkBatchBizTimeTwdTxWithoutDateId(arguments[0], arguments[1], arguments[2], arguments[3]);
	}
	else if (arguments.length == 5) {
		return checkBatchBizTimeTwdTxWithDateId(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
	}	
	else {
		return false;
	}
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBatchBizTime() {
	if (arguments.length == 3) {
		return checkBatchBizTimeWithoutDateId(arguments[0], arguments[1], arguments[2]);
	}
	else if (arguments.length == 4) {
		return checkBatchBizTimeWithDateId(arguments[0], arguments[1], arguments[2], arguments[3]);
	}
	else {
		return false;
	}	
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBatchBizTimeWithoutDateId(companyUid,taskId, popup) {
	if (popup) {
		return isBeforeBatchBizTime(companyUid,taskId);
	}
	else {
		return true;
	}
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBatchBizTimeWithDateId(companyUid ,nextBizDateId, taskId, popup) {
	if (popup) {
		var oldDate = gid(gjid(nextBizDateId));
		var newDate = getBatchNextBizDate(companyUid,taskId);
		if (oldDate.value == newDate) {
			return true;
		}
		else {
			oldDate.value = newDate;
			return false;
		}
	}
	else {
		return true;
	}
}

/**
 * 檢核自行營業時間(台幣整批)
 * 
 * @param taskId
 * @param popup
 * @return
 */      
function checkBatchBizTimeTwdTxWithDateId(companyUid ,nextBizDateId, taskId, popup, intraBank) {
	if (popup) {
		var oldDate = gid(gjid(nextBizDateId));
		var newDate = "";
		if(intraBank){
			newDate = getBatchIntraBankNextBizDate(companyUid,taskId);
		}else{
			newDate = getBatchNextBizDate(companyUid,taskId);
		}
		if (oldDate.value == newDate) {
			return true;
		}
		else {
			oldDate.value = newDate;
			return false;
		}
	}
	else {
		return true;
	}
}

/**
 * 檢核自行營業時間(台幣單筆)
 * 
 * @param nextBizDateId
 * @param taskId
 * @param popup
 * @param intraBank
 * @return
 */      
function checkBizTimeTwdTxWithDateId(nextBizDateId, taskId, popup, intraBank) {
	if (popup) {
		var oldDate = gid(gjid(nextBizDateId));
		var newDate = getIntraBankNextBizDate(taskId,intraBank);
		
		if (oldDate.value == newDate) {
			return true;
		}
		else {
			oldDate.value = newDate;
			return false;
		}
	}
	else {
		return true;
	}
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBizTimeWithoutDateId(taskId, popup) {
	if (popup) {
		return isBeforeBizTime(taskId);
	}
	else {
		return true;
	}
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBizTimeTwdTxWithoutDateId(taskId, popup, isTrabank) {
	if (popup) {
		return isBeforeBizTimeTwdTx(taskId,isTrabank);
	}
	else {
		return true;
	}
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBatchBizTimeTwdTxWithoutDateId(companyUid, taskId, popup, isTrabank) {
	if (popup) {
		return isBeforeBatchBizTimeTwdTx(taskId,isTrabank, companyUid);
	}
	else {
		return true;
	}
}

/**
 * 檢核營業時間
 * 
 * @param taskId
 * @param popup
 * @return
 */
function checkBizTimeWithDateId(nextBizDateId, taskId, popup) {
	if (popup) {
		var oldDate = gid(gjid(nextBizDateId));
		var newDate = getNextBizDate(taskId);
		
		window.console && console.log('>> field value = ' + oldDate);
		window.console && console.log('>> ajax  value = ' + newDate);
		
		if (oldDate.value == newDate) {
			return true;
		}
		else {
			oldDate.value = newDate;
			return false;
		}
	}
	else {
		return true;
	}
}

/**
 * Check User ID / Password Sample : checkUserIDPassword(txtUserPassword,
 * "options={length:[6,
 * 20],lower:1,upper:1,numeric:1,special:0,badWords:['password','steven','levithan'],badSequenceLength:3}");
 */
function checkUserIDPassword (pw, optionParam) {
	var options;
	eval(optionParam);
	// default options (allows any password)
	var o = {
		lower:    0,
		upper:    0,
		alpha:    0, /* lower + upper */
		numeric:  0,
		special:  0,
		length:   [0, Infinity],
		custom:   [ /* regexes and/or functions */ ],
		badWords: [],
		badSequenceLength: 0,
		noQwertySequences: false,
		noSequential:      false,
		badSameChar:       false
	};

	for (var property in options)
		o[property] = options[property];

	// for (var property in o)
	// alert(o[property]);

	var	re = {
			lower:   /[a-z]/g,
			upper:   /[A-Z]/g,
			alpha:   /[A-Z]/gi,
			numeric: /[0-9]/g,
			special: /[\W_]/g
		},
		rule, i;
	

	// enforce min/max length
	if (pw.length < o.length[0] || pw.length > o.length[1])
		return false;
	
	// check has full char
	if (hasFullChar(pw)) {
		return false;
	}

	// 僅英數字
	var idRegExp = /^[0-9a-zA-Z]*$/; 
	if (!idRegExp.exec(pw)) {
		return false;
	}
	  

	// enforce lower/upper/alpha/numeric/special rules
	for (rule in re) {
		if ((pw.match(re[rule]) || []).length < o[rule])
			return false;
	}	
	
	// enforce word ban (case insensitive)
	/*
	 * for (i = 0; i < o.badWords.length; i++) { if
	 * (pw.toLowerCase().indexOf(o.badWords[i].toLowerCase()) > -1) return
	 * false; }
	 */
	for (i = 0; i < o.badWords.length; i++) {
		if (pw.toLowerCase() == o.badWords[i].toLowerCase())
			return false;
	}

	// enforce the no sequential, identical characters rule
	if (o.noSequential && /([\S\s])\1/.test(pw))
		return false;

	// 相同英數字
	if (o.badSameChar) {
		var count = 1;
		for (i = 0; i < pw.length-1; i++) {
			if (pw.charAt(i) == pw.charAt(i+1)){
				count ++;
			} 
		}
		if (pw.length == count) {
			return false;
		}
	}

	// enforce alphanumeric/qwerty sequence ban rules
	if (o.badSequenceLength) {
		var	lower   = "abcdefghijklmnopqrstuvwxyz",
			upper   = lower.toUpperCase(),
			numbers = "0123456789",
			qwerty  = "qwertyuiopasdfghjklzxcvbnm",
			start   = o.badSequenceLength - 1,
			seq     = "_" + pw.slice(0, start);
		for (i = start; i < pw.length; i++) {
			seq = seq.slice(1) + pw.charAt(i);
			if (
				lower.indexOf(seq)   > -1 ||
				upper.indexOf(seq)   > -1 ||
				numbers.indexOf(seq) > -1 ||
				(o.noQwertySequences && qwerty.indexOf(seq) > -1)
			) {
				return false;
			}
		}
	}
	
	if (o.badSequenceLength) {
		var	lower   = "zyxwvutsrqponmkjihgfedcba",
			upper   = lower.toUpperCase(),
			numbers = "0987654321",
			qwerty  = "mnbvcxzlkjhgfdsapoiuytrewq",
			start   = o.badSequenceLength - 1,
			seq     = "_" + pw.slice(0, start);
		for (i = start; i < pw.length; i++) {
			seq = seq.slice(1) + pw.charAt(i);
			if (
				lower.indexOf(seq)   > -1 ||
				upper.indexOf(seq)   > -1 ||
				numbers.indexOf(seq) > -1 ||
				(o.noQwertySequences && qwerty.indexOf(seq) > -1)
			) {
				return false;
			}
		}
	}

	// enforce custom regex/function rules
	for (i = 0; i < o.custom.length; i++) {
		rule = o.custom[i];
		if (rule instanceof RegExp) {
			if (!rule.test(pw))
				return false;
		} else if (rule instanceof Function) {
			if (!rule(pw))
				return false;
		}
	}

	// great success!
	return true;
}

/**
 * 取得 byte 長度
 */
function byteLength(val){
	var num = 0;
	for(i=0,len = val.length; i<len; i++){	
		var charByte = val.charCodeAt(i) > 255 ? 2:1;
		num += charByte;
	}
	return num;
}

/**
 * 
 * @param val
 * @return
 */
function hasFullChar(val){
	var num = 0;
	for(i=0,len = val.length; i<len; i++){	
		if (val.charCodeAt(i) > 255) {
			return true;
		}
	}
	return false;
}

/**
 * email檢核
 */
function checkMutilEmail(email) {
    if (email == null || email.length == 0) {
    	return false;
    }
    var str_array = email.split(";");
    for(var i=0;i<str_array.length;i++){
        if(checkEmail(str_array[i])==false){
            return false;
        }
    }
    return true;
}

/**
 * email檢核
 */
function checkEmail(email) {
    if(/^([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)$/.test(email)==false){
        return false;
    }
    return true;
}


/**
 * 數值檢核
 */
function isNumber (str) {
  	if (str.length == 0) return true;
  	re = /^[0-9]+$/
	return str.match(re);
}

/**
 * 另開視窗(可支援Print) url : 子視窗頁面url width : 子視窗頁面寬度 height : 子視窗頁面高度
 */
function openPrintModalDialog(url, width, height)
{
	return openModalDialog(url, width, height, '');
}

/**
 * 另開視窗 aURL : 子視窗頁面url aWidth : 子視窗頁面寬度 aHeight : 子視窗頁面高度 aArgs : JS傳遞變數
 */
function openModalDialog(url, width, height, args)
{
	var currentTime = new Date();

	if (url.indexOf("?") > -1) {
		url += "&Timestamp=" + currentTime.getTime();
	}
	else
	{
		url += "?Timestamp=" + currentTime.getTime();
	}
	var strFeatures = "dialogWidth=" + width + "px; dialogHeight=" + height + "px; resizable='yes'; scrollbars='yes'; center='yes'; help='no'; status='no'";
	var strAgrs={"parent":window,"args":args};
	
	//return window.showModalDialog(url, strAgrs, strFeatures);
	
    var resizable = "yes";
    var scroll = "yes";
    var status = "no";

    // get the modal specs
    var mdattrs = strFeatures.split(";");
    for (i = 0; i < mdattrs.length; i++) {
       var mdattr = mdattrs[i].split(":");

       var n = mdattr[0];
       var v = mdattr[1];
       if (n) { n = n.trim().toLowerCase(); }
       if (v) { v = v.trim().toLowerCase(); }

       if (n == "dialogheight") {
    	   height = v.replace("px", "");
       } else if (n == "dialogwidth") {
    	   width = v.replace("px", "");
       } else if (n == "resizablea") {
          resizable = v;
       } else if (n == "scroll") {
          scroll = v;
       } else if (n == "status") {
          status = v;
       }
    }
    var isNestOpen = args;
    var targetWin = window.open(url, '', 'toolbar=no, location=no, directories=no, status=' + status + ', menubar=no, scrollbars=' + scroll + ', resizable=' + resizable + ', copyhistory=no, width=' + width + ', height=' + height + ', center=yes' );
    targetWin.focus();
    return targetWin;
}


/**
 * 另開視窗(可支援Print) url : 子視窗頁面url width : 子視窗頁面寬度 height : 子視窗頁面高度
 */
function openPdfDialog(url, width, height)
{
	var strFeatures = "width=" + width + "px,height=" + height + "px,resizable=yes,scrollbars=yes,center=yes,help=no,status=no";
	return window.open(url, "", strFeatures);
}
// /**
// * 是否為 yyyy/MM/dd 的有效日期
// * @param sDate
// * @return
// */
// function isDate(sDate) {
// if (dateRegExp.exec(sDate)) {
// var dArr = sDate.split("/");
// var d = new Date(dArr[1]+"/"+dArr[2]+"/"+dArr[0]);
// return d.getFullYear() == dArr[0] && d.getMonth() + 1 == dArr[1] &&
// d.getDate() == dArr[2];
// }
// else {
// return false;
// }
// }
//
// /**
// * 將 yyyy/MM/dd 的日期字串轉為 Date
// * @param sDate
// * @return
// */
// function getDate(sDate) {
// if (isDate(sDate)) {
// var dArr = sDate.split("/");
// return new Date(dArr[1]+"/"+dArr[2]+"/"+dArr[0]);
// }
// else {
// return null;
// }
// }


// 全部展開Tree
function doTreeOpenAll(){
	var treeArr = creatTreeArray();      
	for( k = 0 ; k < treeArr.length ; k++){            
		var tree1 = document.getElementById(treeArr[k]);
		var nodes = tree1.childNodes;
		doTreeOpen(nodes);
	} 
	var chk_hd = document.getElementsByName('chk_hd');
	for(var j=0; j<chk_hd.length; j++){
		chk_hd[j].className = 'collapse1';
	}
}

function creatTreeArray(){
	var treeArr = new Array();
    var dl = document.forms[0].getElementsByTagName('dl');
 	for(i = 0; i < dl.length ; i++){
    	var id = dl[i].id;
    	if(id != '' && id.indexOf('tree') != -1){
    		treeArr.push(id);
    	}
    }    
    return treeArr;
}

function doTreeOpen(nodes){	
    var dtSet=false;
    var ddSet=false;
    for(var i = 0 ; i < nodes.length ; i++){
        // alert("i: "+i+" nodes : "+nodes[i].nodeName);
        if(nodes[i].nodeName == 'DT'){
            nodes[i].className  = 'current';
            dtSet=true;
        }else if(nodes[i].nodeName =='DD') {
            nodes[i].className  = 'current';
            ddSet=true;
        }
        
        if(dtSet && ddSet){			
            break;
        }
    }
    resizeHeight();
    // resizeFrame();
}

// 凱基帳號檢核
function checkCosmosAccount(accountNo) {
	// 帳號規則:共14碼或12碼
	// 虛擬帳號有16碼
	if (accountNo.length != 16 && accountNo.length != 14 && accountNo.length != 12) {
		return false;
	}	

	var tmp;
	
	// 舊帳號檢核邏輯
	if(accountNo.length == 12 || (accountNo.length == 14 && accountNo.substr(0,2) == "00")){
		
		if(accountNo.length == 14){
			accountNo = accountNo.substr(2,12);
		}
		
		//2014.09.10 updated by alf 
		//依申請單編號:1030800271  主旨:凱基期貨虛擬帳號。
		//調整帳號規則:6及7開頭者視為虛擬帳號,企網銀前端不檢核,由後端主機檢核。
		// 2開頭者視為虛擬帳號
		if (accountNo.substr(0,1) == "2" || accountNo.substr(0,1) == "6" || accountNo.substr(0,1) == "7") {
			return true;
		}	
		
		// 台幣帳號檢核邏輯
		// 檢碼N12 = 10 – (SUM MOD 10)
		// SUM = N1 *3 + N2 *7 + N3 *1 + N4 *3 + N5 *7 + N6 *1 + N7 *3 + N8 *7 + N9
		// *1 + N10*3 + N11*7
		var tmp = new String("37137137137");
		var sum = 0;
		for (var i = 0; i < 11; i++) {
			s1 = parseInt(accountNo.substr(i,1));
	    	s2 = parseInt(tmp.substr(i,1));
	    	sum += s1*s2;
		}
		var calculate = 10 - (sum % 10);
		var check = parseInt(accountNo.substr(11,1));
		
		// 若除10餘0,則取0
		if (calculate == 10) {
			calculate = 0;
		}
		return calculate == check;
		
	} else if (accountNo.length == 14){
		// 新帳號檢核邏輯
		
		//3,4,5開頭者視為虛擬帳號
		if (accountNo.substr(0,1) == "3" || accountNo.substr(0,1) == "4" || accountNo.substr(0,1) == "5") {
			return true;
		}
		
		// 00620_分戶帳 / 00650_凱證DSU
		if (accountNo.substr(0,5) == "00620" || accountNo.substr(0,5) == "00650") {
			return true;
		}
		
		// 信用卡 888+ID
		if (accountNo.substr(0,3) == "888") {
			return true;
		}
		
		// 檢碼N16 = 10 – (SUM MOD 10)
		// SUM = N1 *0 + N2 *0 + N3 *7 + N4 *1 + N5 *3 + N6 *7 + N7 *1 + N8 *3 + N9
		// *7 + N10*1 + N11*3 + N12*7 + N13*1 + N14*3 + N15*7 
		tmp = new String("7137137137137");
		
		var sum = 0;
		for (var i = 0; i < 13; i++) {
			s1 = parseInt(accountNo.substr(i,1));
	    	s2 = parseInt(tmp.substr(i,1));
	    	sum += s1*s2;
		}
		var calculate = 10 - (sum % 10);
		var check = parseInt(accountNo.substr(13,1));
		
		// 若除10餘0,則取0
		if (calculate == 10) {
			calculate = 0;
		}
		
		// "新帳號"之檢查碼逢4變8
		if (calculate == 4){
			calculate = 8;
		}
		
		return calculate == check;
		
	} else {
		// 16碼檢核邏輯
		
		// 7,8,9開頭者視為虛擬帳號
		if (accountNo.substr(0,1) == "7" || accountNo.substr(0,1) == "8" || accountNo.substr(0,1) == "9") {
			return true;
		}
		
		// 貸款 555886
		if (accountNo.substr(0,6) == "555886") {
			return true;
		}
		
	}

	return false;
}

//凱基帳號檢核
function checkCosmosPayeeAccount(accountNo) {
	
	if (accountNo.length == 15) {
		return true;
	}	

	
	// 帳號規則:共14碼或12碼
	// 虛擬帳號有16碼
	if (accountNo.length != 16 && accountNo.length != 14 && accountNo.length != 12) {
		return false;
	}	

	var tmp;
	
	// 舊帳號檢核邏輯
	if(accountNo.length == 12 || (accountNo.length == 14 && accountNo.substr(0,2) == "00")){
		
		if(accountNo.length == 14){
			accountNo = accountNo.substr(2,12);
		}
		
		//2014.09.10 updated by alf 
		//依申請單編號:1030800271  主旨:凱基期貨虛擬帳號。
		//調整帳號規則:6及7開頭者視為虛擬帳號,企網銀前端不檢核,由後端主機檢核。
		// 2開頭者視為虛擬帳號
		if (accountNo.substr(0,1) == "2" || accountNo.substr(0,1) == "6" || accountNo.substr(0,1) == "7") {
			return true;
		}	
		
		// 台幣帳號檢核邏輯
		// 檢碼N12 = 10 – (SUM MOD 10)
		// SUM = N1 *3 + N2 *7 + N3 *1 + N4 *3 + N5 *7 + N6 *1 + N7 *3 + N8 *7 + N9
		// *1 + N10*3 + N11*7
		var tmp = new String("37137137137");
		var sum = 0;
		for (var i = 0; i < 11; i++) {
			s1 = parseInt(accountNo.substr(i,1));
	    	s2 = parseInt(tmp.substr(i,1));
	    	sum += s1*s2;
		}
		var calculate = 10 - (sum % 10);
		var check = parseInt(accountNo.substr(11,1));
		
		// 若除10餘0,則取0
		if (calculate == 10) {
			calculate = 0;
		}
		return calculate == check;
		
	} else if (accountNo.length == 14){
		// 新帳號檢核邏輯
		
		//3,4,5開頭者視為虛擬帳號
		if (accountNo.substr(0,1) == "3" || accountNo.substr(0,1) == "4" || accountNo.substr(0,1) == "5") {
			return true;
		}
		
		// 00620_分戶帳 / 00650_凱證DSU
		if (accountNo.substr(0,5) == "00620" || accountNo.substr(0,5) == "00650") {
			return true;
		}
		
		// 信用卡 888+ID
		if (accountNo.substr(0,3) == "888") {
			return true;
		}
		
		// 檢碼N16 = 10 – (SUM MOD 10)
		// SUM = N1 *0 + N2 *0 + N3 *7 + N4 *1 + N5 *3 + N6 *7 + N7 *1 + N8 *3 + N9
		// *7 + N10*1 + N11*3 + N12*7 + N13*1 + N14*3 + N15*7 
		tmp = new String("7137137137137");
		
		var sum = 0;
		for (var i = 0; i < 13; i++) {
			s1 = parseInt(accountNo.substr(i,1));
	    	s2 = parseInt(tmp.substr(i,1));
	    	sum += s1*s2;
		}
		var calculate = 10 - (sum % 10);
		var check = parseInt(accountNo.substr(13,1));
		
		// 若除10餘0,則取0
		if (calculate == 10) {
			calculate = 0;
		}
		
		// "新帳號"之檢查碼逢4變8
		if (calculate == 4){
			calculate = 8;
		}
		
		return calculate == check;
		
	} else {
		// 16碼檢核邏輯
		
		// 7,8,9開頭者視為虛擬帳號
		if (accountNo.substr(0,1) == "7" || accountNo.substr(0,1) == "8" || accountNo.substr(0,1) == "9") {
			return true;
		}
		
		// 貸款 555886
		if (accountNo.substr(0,6) == "555886") {
			return true;
		}
		
	}

	return false;
}

// 統編/身份證號檢核
function checkUid(uid) {
	
	if (uid.length == 8) {
		
		if(obuExp.exec(uid)) {
			
			return true;
			
		} else {
			
			return checkCompanyUid(uid);
		}
	}
	else if (uid.length == 10) {
		
		if(obuExp.exec(uid)) {
			
			return true;
			
		} else {
			
			return checkPersonUid(uid);
		}		
	}
	else if (uid.length == 11) {
		return true;
	}
	else {
		return false;
	}
}

function checkCompanyUid(uid) {
    // 公司統編需為8碼數字
    re = /^\d{8}$/;
    if (!re.test(uid)) {
        return false;
    }else{	//--2023/01/09 取消企網銀統一編號檢核 by Nathan
    	return true;
    }
    
    /*
	// 公司統編檢核邏輯
    var tmp = new String("12121241");
    var sum = 0;
    for (i=0; i< 8; i++) {
    	s1 = parseInt(uid.substr(i,1));
    	s2 = parseInt(tmp.substr(i,1));
    	sum += cal(s1*s2);
    }
    if (sum % 10 == 0) {
    	return true;
    }
    else if (uid.substr(6,1) == "7" && (sum + 1) % 10 == 0) {
        return true;
    }
    else {
    	return false;
    }*/
}

function cal(n) {
    var sum=0;
    while (n!=0) {
        sum += (n % 10);
        n = (n - n%10) / 10; // 取整數
    }
    return sum;
}

function checkPersonUid(uid){
	var UPPERCASE = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; // 請注意W的位置,I和O二字母置最未
	var d1 = UPPERCASE.indexOf(uid.substr(0,1)) + 10;
	var d2 = UPPERCASE.indexOf(uid.substr(1,1)) % 10;
	re1 = /^[A-Z][1,2][0-9]{8}$/;
	re2 = /^[A-Z][A-D][0-9]{8}$/;
	// 身份證字號 (國人)
	if (re1.test(uid)) {
		uid = d1 + uid.substring(1,10);
    }
	// 統一證號 (外國人)
	else if (re2.test(uid)) {
		uid = d1 + "" + d2 + uid.substring(2,10);
    }
	else {
		return false;
	}
	// checksum
	var checksum_id = parseInt(uid.substr(0,1)) * 1 ;
	for (i=1; i<=9; i++) {
		checksum_id += parseInt(uid.substr(i,1)) * (10-i) ;
	}
	
	checksum_id = checksum_id % 10;		// 若除10餘0,則取0
	if (checksum_id > 0) {
		checksum_id = 10-checksum_id;
	}
	return checksum_id == parseInt(uid.substr(10,1));
}

/**
 * 依據ComboValue取得Account物件
 */
function Account(comboValue) {
	this.ACCOUNT_DELIM = '$$$';
	if(comboValue == 'none' || comboValue.length == 0) {
		this.values = new Array("", "");
	}
	else {
		this.values = comboValue.split(this.ACCOUNT_DELIM);
	}
	// 鍵值
	this.companyAccountKey = this.values[0];
	// 帳號
	this.accountNo = this.values[1];
	// 是否顯示餘額
	this.isBalance = (this.values[2] == "1");
	// 是否擁有轉帳權限
	this.isTx = (this.values[3] == "2");
	
	// TODO 新核心 需加入科目別以方便畫面上判斷所需
	if(this.values.length == 5){
		// 科目別
		this.ledger = this.values[4];
	}
	
}

/**
 * 取得Payee物件
 */
function Payee() {
// this.ACCOUNT_DELIM = '$$$';
// if(comboValue == 'none' || comboValue.length == 0) {
// this.values = new Array("", "");
// }
// else {
// this.values = comboValue.split(this.ACCOUNT_DELIM);
// }
// // 鍵值
// this.companyAccountKey = this.values[0];
// // 帳號
// this.accountNo = this.values[1];
// // 是否顯示餘額
// this.isBalance = (this.values[2] == "1");
// // 是否擁有轉帳權限
// this.isTx = (this.values[3] == "2");
	
	// 付款通路
	this.payerKind = "0";
	// 收款銀行
	this.payeeBankId = "";
	// 收款帳號
	this.payeeAccountNo = "";
	// 收款統編
	this.payeeUid = "";
	// 收款戶名
	this.payeeName = "";
	// 收款Mail
	this.payeeMail = "";
	// 手續費負擔
	this.chargeAmtType = "0";
	// 帳戶別名
	this.payeeAccountAlias = "";
	
	
}

 /**
  * 取得FxPayee物件
  */
 function FxPayee() {
 // this.ACCOUNT_DELIM = '$$$';
 // if(comboValue == 'none' || comboValue.length == 0) {
 // this.values = new Array("", "");
 // }
 // else {
 // this.values = comboValue.split(this.ACCOUNT_DELIM);
 // }
 // // 鍵值
 // this.companyAccountKey = this.values[0];
 // // 帳號
 // this.accountNo = this.values[1];
 // // 是否顯示餘額
 // this.isBalance = (this.values[2] == "1");
 // // 是否擁有轉帳權限
 // this.isTx = (this.values[3] == "2");
 	
 	// 付款通路
 	this.payerKind = "0";
 	
 	// 收款帳號
 	this.payeeAccountNo = "";
 	
 	// 收款戶名
 	this.payeeName1 = "";
 	this.payeeName2 = "";
 	
 	// 收款Mail
 	this.payeeMail = "";
 	
 	// 帳戶別名
 	this.payeeAccountAlias = "";
 	
 	// 收款人地址
 	this.payeeAddress1 = "";
 	this.payeeAddress2 = "";
 	
 	//收款人電話
 	this.payeeTel ="";
 	
 	//收款銀行名稱
 	this.payeeBankName1="";
 	this.payeeBankName2="";
 	
 	//收款銀行地址
 	this.payeeBankAdd1="";
 	this.payeeBankAdd2="";
 	
 	//CNAPS
 	this.cnaps="";
 	
 	//收款銀行國別
 	this.payeeBankNation="";
 	
 	//匯出匯款方式
 	this.remitType="";
 	
 	//費用負擔別
 	this.feeType="0";
 	
 	//付款附言
 	this.memo1="";
 	this.memo2="";
 	this.memo3="";
 	this.memo4="";
 	
 } 
 
/**
 * 隱藏網頁物件
 */
function hide(id) {
	var element = gid(id);
	element.className = 'hide';
	// resize
	resizeHeight();
}

/**
 * 顯示網頁物件
 */
function show(id, className) {
	var element = gid(id);
	element.className = className;
	// resize
	resizeHeight();
}

/**
 * 轉為半形字
 */
function asc(text){
	var asciiTable = "!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ";
	var big5Table  = "%uFF01%u201D%uFF03%uFF04%uFF05%uFF06%u2019%uFF08%uFF09%uFF0A%uFF0B%uFF0C%uFF0D%uFF0E%uFF0F%uFF10%uFF11%uFF12%uFF13%uFF14%uFF15%uFF16%uFF17%uFF18%uFF19%uFF1A%uFF1B%uFF1C%uFF1D%uFF1E%uFF1F%uFF20%uFF21%uFF22%uFF23%uFF24%uFF25%uFF26%uFF27%uFF28%uFF29%uFF2A%uFF2B%uFF2C%uFF2D%uFF2E%uFF2F%uFF30%uFF31%uFF32%uFF33%uFF34%uFF35%uFF36%uFF37%uFF38%uFF39%uFF3A%uFF3B%uFF3C%uFF3D%uFF3E%uFF3F%u2018%uFF41%uFF42%uFF43%uFF44%uFF45%uFF46%uFF47%uFF48%uFF49%uFF4A%uFF4B%uFF4C%uFF4D%uFF4E%uFF4F%uFF50%uFF51%uFF52%uFF53%uFF54%uFF55%uFF56%uFF57%uFF58%uFF59%uFF5A%uFF5B%uFF5C%uFF5D%uFF5E%u3000";

	var result = "";
	for (var i = 0; i < text.length; i++) {
		var val = escape(text.charAt(i));
		var j   = big5Table.indexOf(val);
		result += (((j > -1) && (val.length == 6)) ? asciiTable.charAt(j / 6) : text.charAt(i));
	}
	return result;
}

/**
 * 轉為全形字
 */
function unAsc(text) {

	var asciiTable = "!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ";
	var big5Table = "%uFF01%u201D%uFF03%uFF04%uFF05%uFF06%u2019%uFF08%uFF09%uFF0A%uFF0B%uFF0C%uFF0D%uFF0E%uFF0F%uFF10%uFF11%uFF12%uFF13%uFF14%uFF15%uFF16%uFF17%uFF18%uFF19%uFF1A%uFF1B%uFF1C%uFF1D%uFF1E%uFF1F%uFF20%uFF21%uFF22%uFF23%uFF24%uFF25%uFF26%uFF27%uFF28%uFF29%uFF2A%uFF2B%uFF2C%uFF2D%uFF2E%uFF2F%uFF30%uFF31%uFF32%uFF33%uFF34%uFF35%uFF36%uFF37%uFF38%uFF39%uFF3A%uFF3B%uFF3C%uFF3D%uFF3E%uFF3F%u2018%uFF41%uFF42%uFF43%uFF44%uFF45%uFF46%uFF47%uFF48%uFF49%uFF4A%uFF4B%uFF4C%uFF4D%uFF4E%uFF4F%uFF50%uFF51%uFF52%uFF53%uFF54%uFF55%uFF56%uFF57%uFF58%uFF59%uFF5A%uFF5B%uFF5C%uFF5D%uFF5E%u3000";

	var result = "";
	for ( var i = 0 ; i < text.length ; i ++ ) {
		var val = text.charAt(i) ;
		var j = asciiTable.indexOf(val) * 6 ;
		result += ( j > -1 ? unescape(big5Table.substring( j , j + 6 ) ) : val );
	}
	return result;
}

/**
 * 將Input欄位設定為全形字
 */
function setUnAsc(id) {
	var object = gid(gjid(id));
	object.value = unAsc(object.value);
}

/**
 * 判斷字串是否為空
 */
function isEmpty(str) {
	if (str == null) {
		return true;
	}
	else if (str == '') {
		return true;
	}
	else {
		return false;
	}
}

String.prototype.trim = function() {
    // Use a regular expression to replace leading and trailing
    // spaces with the empty string
    return this.replace(/(^\s+)|(\s+$)/g, "");
}

// pads left
String.prototype.lpad = function(padString, length) {
	var str = this;
    while (str.length < length) {
    	str = padString + str;
    }
    return str;
}
 
// pads right
String.prototype.rpad = function(padString, length) {
	var str = this;
    while (str.length < length) {
    	str = str + padString;
    }
    return str;
}

Date.prototype.addMonth = function(interval) {
	var month = (this.getMonth() + interval) %12;
	var date = this.getDate();
	this.setMonth(this.getMonth() + interval);
	if(date != this.getDate()) {
		var newDate = new Date(this.getFullYear(), month + 1, 0);
		this.setMonth(0);
		this.setDate(newDate.getDate());
		this.setMonth(newDate.getMonth());
	}
}

Date.prototype.addDate = function(interval) {
	this.setDate(this.getDate() + interval);
}

Date.prototype.clearTime = function() {
	this.setHours(0);
	this.setMinutes(0);
	this.setSeconds(0);
	this.setMilliseconds(0);
}

// 將日期物件轉換為字串 (YYYY/MM/DD)
Date.prototype.toString = function() {
	var year = "";
	var month = new String(this.getMonth() + 1).lpad("0", 2);
	var day = new String(this.getDate()).lpad("0", 2);
	year = new String(this.getFullYear()).lpad("0", 4);
	return year + "/" + month + "/" + day;
}

//利用Byte單位來計算字串長度,中文字(4),英文字(4),總共(8)
String.prototype.Blength = function() {

    var arr = this.match(/[^\x00-\xff]/ig);

    return  arr == null ? this.length : this.length + arr.length;

}

// 將字串 (YYYY/MM/DD)轉換為日期物件
function getDate(isoDateString) {
	var array = isoDateString.split("/");
	if(array.length != 3) {
		return null;
	}
	var year = parseInt(array[0].replace(/^[0]*/, ""));
	var month = parseInt(array[1].replace(/^[0]*/, "")) - 1;
	var day = parseInt(array[2].replace(/^[0]*/, ""));
	var date = new Date(year, month, day);
	return date;
}

// 檢查字串是否為正確之日期
function isValidDateString(isoDateString) {
	// 將字串轉換為日期
	var date = getDate(isoDateString);
	
	// 檢查日期是否轉換成功(為null則失敗)
	if (date == null) {
		return false;
	}
	// 檢查日期是否與輸入字串完全一致
	// 如: 2011/02/29 -轉換-> 2011/03/01 則不一致
	if (isoDateString != date.toString()) {
		return false;
	}
	else {
		return true;
	}
}
/*******************************************************************************
 * 
 * 檢核共用API
 * 
 ******************************************************************************/

// 取得檢核訊息Id
// validate + 欄位Id (首字轉大寫)
function getValidateId(id) {
	var str = id.substr(0,1).toUpperCase();
	str += id.substr(1, id.length - 1);
	str = "validate" + str;
	return str;
}

/**
 * 檢核錯誤
 * 
 * 1. 清除Server錯誤訊息
 * 2. 重設高度
 * 3. 捲動至最頂端
 */
function validateError() {
	clearServerErrorMsg();
	resizeHeight();
	if(parent.document != undefined){
		parent.document.documentElement.scrollTop = 0;
	}
}
 /**
  * 小寫轉大寫
  */
function toUpCase(id){
	var object = gid(gjid(id));
	object.value = object.value.toUpperCase();
}
 
// 檢核至少勾選一筆 (Popup)
function validateCheck(checkBoxKey) {
	// 無CheckBox, 不需檢核
	if (isEmpty(checkBoxKey)) {
		return true;
	}
	
	var checks = getCheckboxValue(checkBoxKey);
	if (checks == null) {
		popupErrorMsg('請至少勾選一筆交易');
		return false;
	}
	
	return true;
}

/*******************************************************************************
 * 
 * 退件檢核
 * 
 ******************************************************************************/

function validateReject(rejectReason_Id, checkBoxKey) {
	var rejectReason = getValue(gjid('rejectReason'));
	
	var validateRejectReason_Id = getValidateId(rejectReason_Id);
	
	var result = true;
	
	// 檢核至少勾選一筆 (Popup)
	if (!validateCheck(checkBoxKey)) {
		return false;
	}
	
	// 確定退件回原編輯人員 (Confirm)
	if (!validateConfirmReject()) {
		return false;
	}
	
	// 檢核退件原因
	if (!validateRejectReason(rejectReason, validateRejectReason_Id)) {
		result = false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

/*******************************************************************************
 * 
 * 退件檢核
 * 
 ******************************************************************************/

function validateRejectCancel(rejectReason_Id, checkBoxKey) {
	var rejectReason = getValue(gjid('rejectReason'));
	
	var validateRejectReason_Id = getValidateId(rejectReason_Id);
	
	var result = true;
	
	// 檢核至少勾選一筆 (Popup)
	if (!validateCheck(checkBoxKey)) {
		return false;
	}
	
	// 確定退件回原編輯人員 (Confirm)
	if (!validateConfirmRejectCancel()) {
		return false;
	}
	
	// 檢核退件原因
	if (!validateRejectReason(rejectReason, validateRejectReason_Id)) {
		result = false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

// 確定退件回原編輯人員 (Confirm)
function validateConfirmReject() {
	return confirm('確定退件回原編輯人員?');
}

//確定退件回原編輯人員 (Confirm)
function validateConfirmRejectCancel() {
	return confirm('【請注意!】該筆交易尚未完成註銷程序,以下請務必確認:       若確要「註銷交易」,請按【取消】鍵,並將該註銷交易選擇【審核/放行】以完成註銷程序;若確要「取消註銷」,請按【確定】鍵,該註銷交易將退回原編輯人員不做任何調整。');
}

// 檢核退件原因
function validateRejectReason(rejectReason, validateRejectReason_Id) {
	
	clearErrorMsg(validateRejectReason_Id);
	
	if (rejectReason == '') {
		setErrorMsg(validateRejectReason_Id, '請輸入退件原因');
		return false;
	}
	
	return true;
}

/*******************************************************************************
 * 
 * 刪除檢核
 * 
 ******************************************************************************/

function validateDelete(checkBoxKey) {
	
	var result = true;
	
	// 檢核至少勾選一筆 (Popup)
	if (!validateCheck(checkBoxKey)) {
		return false;
	}
	
	// 確定刪除交易資料 (Confirm)
	if (!validateConfirmDelete(checkBoxKey)) {
		return false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

// 確定刪除交易資料 (Confirm)
function validateConfirmDelete(checkBoxKey) {
	// 無法選擇 (單筆)
	if (isEmpty(checkBoxKey)) {
		return confirm('確定刪除此筆交易資料?');
	}
	// 多選
	else {
		var checks = getCheckboxValue(checkBoxKey);
		var count = checks.length;
		return confirm('確定刪除' + count + '筆交易資料?');
	}
}

//確定刪除交易資料 (Confirm)
function validateTemplateelete(TemplateName) {

	return confirm('確定刪除範本 '+TemplateName+'?');
	
}


function validateBatchDelete(checkBoxKey) {
	
	var result = true;
	
	// 檢核至少勾選一筆 (Popup)
	if (!validateCheck(checkBoxKey)) {
		return false;
	}
	
	// 確定刪除交易資料 (Confirm)
	if (!validateBatchConfirmDelete(checkBoxKey)) {
		return false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

// 確定刪除整批交易資料 (Confirm)
function validateBatchConfirmDelete(checkBoxKey) {
	// 無法選擇 (單批)
	if (isEmpty(checkBoxKey)) {
		return confirm('確定刪除此批交易資料?');
	}
	// 多選
	else {
		var checks = getCheckboxValue(checkBoxKey);
		var count = checks.length;
		return confirm('確定刪除' + count + '批交易資料?');
	}
}
/*******************************************************************************
 * 
 * 常用收款人檢核
 * 
 ******************************************************************************/

// 檢核常用收款人資料
function validateCommonPayee(payerKind_Id, payeeBankId_Id, payeeAccountNo_Id, payeeName_Id , payeeMail_Id, payeeUid_Id) {
	var payerKind = getRadioValue(gjid(payerKind_Id));
	var payeeBankId = getValue(gjid(payeeBankId_Id));
	var payeeAccountNo = getValue(gjid(payeeAccountNo_Id));
	var payeeName = getValue(gjid(payeeName_Id));
	var payeeMail = getValue(gjid(payeeMail_Id));
	var payeeUid = getValue(gjid(payeeUid_Id));
	
	var validatePayerKind_Id = getValidateId(payerKind_Id);
	var validatePayeeBankId_Id = getValidateId(payeeBankId_Id);
	var validatePayeeAccountNo_Id = getValidateId(payeeAccountNo_Id);
	var validatePayeeName_Id = getValidateId(payeeName_Id);
	var validatePayeeMail_Id = getValidateId(payeeMail_Id);
	var validatePayeeUid_Id = getValidateId(payeeUid_Id);
	
	var result = true;
	
	// 檢核付款通路
	if (!validateCommonPayee_PayerKind(payerKind, validatePayerKind_Id)) {
		result = false;
	}
	
	// 檢核收款銀行
	if (!validateCommonPayee_PayeeBankId(payeeBankId, validatePayeeBankId_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款帳號
	if (!validateCommonPayee_PayeeAccountNo(payeeAccountNo, validatePayeeAccountNo_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款人戶名
	if (!validateCommonPayee_PayeeName(payeeName, validatePayeeName_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款人Mail
	if (!validateTxDetail_PayeeMail(payeeMail, validatePayeeMail_Id)) {
		result = false;
	}
	
	// 檢核收款人統編
	if (!validateCommonPayee_PayeeUid(payeeUid, validatePayeeUid_Id)) {
		result = false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

// 檢核付款通路
function validateCommonPayee_PayerKind(payerKind, validatePayerKind_Id) {
	
	clearErrorMsg(validatePayerKind_Id);
	
	// 若付款通路為空白,顯示錯誤訊息『請選擇付款通路』
	if (payerKind < 1 || payerKind > 2) {
		setErrorMsg(validatePayerKind_Id, '請選擇付款通路');
		return false;
	}
	
	return true;
}

// 檢核收款銀行
function validateCommonPayee_PayeeBankId(payeeBankId, validatePayeeBankId_Id, payerKind) {
	
	clearErrorMsg(validatePayeeBankId_Id);
	
	// 若付款通路為跨行匯款,但收款銀行為空白,顯示錯誤訊息『請輸入收款銀行』
	if (payeeBankId == '') {
		setErrorMsg(validatePayeeBankId_Id, '請輸入收款銀行');
		return false;
	}
	if (!bankRegExp.exec(payeeBankId)) {
		setErrorMsg(validatePayeeBankId_Id, '收款銀行須為7碼數字');
		return false;
	}
	// 若付款通路為跨行匯款,但收款銀行代號前3碼為809,顯示錯誤訊息『跨行匯款時,收款銀行代號不可為809凱基銀行代碼』
	if (payerKind == 2 && intrabankRegExp.exec(payeeBankId)) {
		setErrorMsg(validatePayeeBankId_Id, '跨行匯款時,收款銀行代號不可為809凱基銀行代碼');
		return false;
	}
	// 若付款通路為跨行匯款,但收款銀行後4碼為0000(通匯行必須要有分行代碼),顯示錯誤訊息『收款銀行錯誤』
	if (payerKind == 2 && interbankNotRegExp.exec(payeeBankId)) {
		setErrorMsg(validatePayeeBankId_Id, '收款銀行錯誤');
		return false;
	}
	
	return true;
}

// 檢核收款帳號
function validateCommonPayee_PayeeAccountNo(payeeAccountNo, validatePayeeAccountNo_Id, payerKind) {
	
	clearErrorMsg(validatePayeeAccountNo_Id);
	
	// 若收款帳號為空白,顯示錯誤訊息『請輸入收款帳號』
	if (payeeAccountNo == '') {
		setErrorMsg(validatePayeeAccountNo_Id, '請輸入收款帳號');
		return false;
	}
	// 若收款帳號不是輸入數字,顯示錯誤訊息『收款帳號須為數字』。
	if (!accountRegExp.exec(payeeAccountNo)) {
		setErrorMsg(validatePayeeAccountNo_Id, '收款帳號須為數字');
		return false;
	}
	// 若付款通路為自行轉帳,但「收款帳號」長度<>12或14,顯示錯誤訊息『凱基銀行帳號須為12或14或16位數字』
	if (payerKind == 1 && !payeeCosmosAccountRegExp.exec(payeeAccountNo)) {
		setErrorMsg(validatePayeeAccountNo_Id, '凱基銀行帳號須為12或14或15或16位數字');
		return false;
	}
	// 若付款通路為自行轉帳,檢核帳號是否符合凱基帳號規則邏輯,有誤時,顯示錯誤訊息『收款帳號非凱基銀行帳號』
	if (payerKind == 1 && !checkCosmosPayeeAccount(payeeAccountNo)) {
		setErrorMsg(validatePayeeAccountNo_Id, '收款帳號非凱基銀行帳號');
		return false;
	}
	// 若付款通路為跨行行轉帳,但「收款帳號」長度大於14,顯示錯誤訊息『跨行時收款帳號必須小於或是等於14位數字』
	if (payerKind == 2 && payeeAccountNo.length > 14 ) {
		setErrorMsg(validatePayeeAccountNo_Id, '跨行時收款帳號必須小於或是等於14位數字');
		return false;
	}
	
	return true;
}

// 檢核收款人戶名
function validateCommonPayee_PayeeName(payeeName, validatePayeeName_Id, payerKind) {
	
	clearErrorMsg(validatePayeeName_Id);
	
	// 若付款通路為跨行匯款,但收款人戶名為空白,顯示錯誤訊息『請輸入收款人戶名』
	if (payerKind == 2 && payeeName == '') {
		setErrorMsg(validatePayeeName_Id, '請輸入收款人戶名');
		return false;
	}
	
	return true;
}

// 檢核收款人統編
function validateCommonPayee_PayeeUid(payeeUid, validatePayeeUid_Id) {
	
	clearErrorMsg(validatePayeeUid_Id);
	
	// 若不是空白時檢核
	if (payeeUid == '') {
		return true;
	}
	// 檢核須為英數字,有誤時,顯示錯誤訊息『收款人統編格式錯誤』
	if (!uidRegExp.exec(payeeUid)) {
		setErrorMsg(validatePayeeUid_Id, '收款人統編格式錯誤');
		return false;
	}
	// 20181005 payeeUid.length() > 10,顯示錯誤訊息『收款人統編錯誤』
	if (payeeUid.length>10 ) {
		setErrorMsg(validatePayeeUid_Id, '收款人統編錯誤');
		return false;
	}
	
	return true;
}

/*******************************************************************************
 * 
 * 交易日期檢核
 * 
 ******************************************************************************/

// 檢核交易日期資料
function validateTxDate() {
	if (arguments.length == 5) {
		return validateTxDatePeriod(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
	}
	else if (arguments.length == 1) {
		return validateTxDateSimple(arguments[0]);
	}
	else {
		return false;
	}
}


// 檢核交易日期資料
function validateTxDatePeriod(periodType_Id, txDate_Id, comboPeriodDay_Id, startDate_Id, endDate_Id) {
	var periodType = getRadioValue(gjid(periodType_Id));
	var txDateStr = getValue(gjid(txDate_Id));
	var comboPeriodDay = getValue(gjid(comboPeriodDay_Id));
	var startDateStr = getValue(gjid(startDate_Id));
	var endDateStr = getValue(gjid(endDate_Id));
	
	var validateDay_Id = getValidateId(txDate_Id);
	var validatePeriod_Id = getValidateId(endDate_Id);
	
	var result = true;
	
	// 檢核付款日期
	if (!validateTxDate_TxDate(periodType, txDateStr, comboPeriodDay, startDateStr, endDateStr, validateDay_Id, validatePeriod_Id)) {
		result = false;
	}
	
	return result;
}

// 檢核交易日期資料
function validateTxDateSimple(txDate_Id) {
	var txDateStr = getValue(gjid(txDate_Id));
	
	var validateDay_Id = getValidateId(txDate_Id);
	
	var result = true;
	
	// 檢核付款日期
	if (!validateTxDate_TxDate(1, txDateStr, '', '', '', validateDay_Id, '')) {
		result = false;
	}
	
	return result;
}

// 檢核付款日期
function validateTxDate_TxDate(periodType, txDateStr, comboPeriodDay, startDateStr, endDateStr, validateDay_Id, validatePeriod_Id) {
	if (!isEmpty(validatePeriod_Id)) {
		clearErrorMsg(validatePeriod_Id);
	}
	
	clearErrorMsg(validateDay_Id);
	
	// 若選擇週期預約
	if (periodType == 2) {
		// 若預約起日或預約迄日為空白,顯示錯誤訊息『請輸入付款日期』
		if (isEmpty(startDateStr) || isEmpty(endDateStr)) {
			setErrorMsg(validatePeriod_Id, '請輸入日期');
			return false;
		}
		// 若預約起日或預約迄日輸入格式不符合西元年YYYY/MM/DD格式,顯示錯誤訊息『付款日期格式錯誤,格式為西元年YYYY/MM/DD』
		if (!dateRegExp.exec(startDateStr) || !dateRegExp.exec(endDateStr)) {
			setErrorMsg(validatePeriod_Id, '日期格式錯誤,格式為西元年YYYY/MM/DD');
			return false;
		}
		// 若預約起日或預約迄日的日期正確性有誤,顯示錯誤訊息『日期錯誤』
		if (!isValidDateString(startDateStr) || !isValidDateString(endDateStr)) {
			setErrorMsg(validatePeriod_Id, '日期錯誤');
			return false;
		}
		
		var startDate = getDate(startDateStr);
		var endDate = getDate(endDateStr);
		// 若(預約迄日< 預約起日),顯示錯誤訊息『預約迄日不可早於預約起日』
		if (startDate.getTime() > endDate.getTime()) {
			setErrorMsg(validatePeriod_Id, '預約迄日不可早於預約起日');
			return false;
		}
		
		// 若使用者輸入的預約日於預約起日~迄日沒有可預約的日期(如選擇每月1號,自2011/3/10至2011/3/31),顯示錯誤訊息『預約區間內無可預約付款交易日』
		var day = parseInt(comboPeriodDay);
		var firstDate = new Date(startDate.getFullYear(), 0, day);
		if (day < startDate.getDate()) {
			firstDate.addMonth(startDate.getMonth() + 1);
		}
		else {
			firstDate.addMonth(startDate.getMonth());
		}
		if (firstDate.getTime() > endDate.getTime()) {
			setErrorMsg(validatePeriod_Id, '預約區間內無可預約付款交易日');
			return false;
		}
	}
	
	// 若選擇指定付款日
	else {
		// 若付款日期為空白,顯示錯誤訊息『請輸入付款日期』
		if (isEmpty(txDateStr)) {
			setErrorMsg(validateDay_Id, '請輸入付款日期');
			return false;
		}
		// 若付款日期輸入格式不符合西元年YYYY/MM/DD格式,顯示錯誤訊息『付款日期格式錯誤,格式為西元年YYYY/MM/DD』
		if (!dateRegExp.exec(txDateStr)) {
			setErrorMsg(validateDay_Id, '付款日期格式錯誤,格式為西元年YYYY/MM/DD');
			return false;
		}
		// 若付款日期的日期正確性有誤,顯示錯誤訊息『日期錯誤』
		if (!isValidDateString(txDateStr)) {
			setErrorMsg(validateDay_Id, '日期錯誤');
			return false;
		}
	}
	return true;
}

/*******************************************************************************
 * 
 * 交易主檔檢核
 * 
 ******************************************************************************/

// 檢核交易主檔資料
function validateTxMaster(comboAccount_Id) {
	var comboAccount = getValue(gjid(comboAccount_Id));
	
	var validateComboAccount_Id = getValidateId(comboAccount_Id);
	
	var result = true;
	
	// 檢核付款帳號
	if (!validateTxMaster_ComboAccount(comboAccount, validateComboAccount_Id)) {
		result = false;
	}
	
	return result;
}

// 檢核付款帳號
function validateTxMaster_ComboAccount(comboAccount, validateComboAccount_Id) {
	
	clearErrorMsg(validateComboAccount_Id);
	
	if (isEmpty(comboAccount) || comboAccount == 'none') {
		setErrorMsg(validateComboAccount_Id, '請輸入付款帳號');
		return false;
	}
	
	return true;
}

/*******************************************************************************
 * 
 * 交易明細檢核
 * 
 ******************************************************************************/

// 檢核交易明細資料
function validateTxDetail(txAmt_Id, limit, payerKind_Id, payeeBankId_Id, payeeAccountNo_Id, payeeName_Id, payeeMail_Id, payeeUid_Id , payerAccountNo) {
	
	var txAmt = getValue(gjid(txAmt_Id));
	var payerKind = getRadioValue(gjid(payerKind_Id));
	var payeeBankId = getValue(gjid(payeeBankId_Id));
	var payeeAccountNo = getValue(gjid(payeeAccountNo_Id));
	var payeeName = getValue(gjid(payeeName_Id));
	var payeeMail = getValue(gjid(payeeMail_Id));
	var payeeUid = getValue(gjid(payeeUid_Id));
	
	var validateTxAmt_Id = getValidateId(txAmt_Id);
	var validatePayerKind_Id = getValidateId(payerKind_Id);
	var validatePayeeBankId_Id = getValidateId(payeeBankId_Id);
	var validatePayeeAccountNo_Id = getValidateId(payeeAccountNo_Id);
	var validatePayeeName_Id = getValidateId(payeeName_Id);
	var validatePayeeMail_Id = getValidateId(payeeMail_Id);
	var validatePayeeUid_Id = getValidateId(payeeUid_Id);
	
	var result = true;
	
	// 檢核付款金額
	if (!validateTxDetail_TxAmt(txAmt, limit, payerKind, validateTxAmt_Id)) {
		result = false;
	}
	
	// 檢核付款通路
	if (!validateTxDetail_PayerKind(payerKind, validatePayerKind_Id)) {
		result = false;
	}
	
	// 檢核收款銀行
	if (!validateTxDetail_PayeeBankId(payeeBankId, validatePayeeBankId_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款帳號
	if (!validateTxDetail_PayeeAccountNo(payeeAccountNo, validatePayeeAccountNo_Id, payerKind, payerAccountNo)) {
		result = false;
	}
	
	// 檢核收款人戶名
	if (!validateTxDetail_PayeeName(payeeName, validatePayeeName_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款人Mail
	if (!validateTxDetail_PayeeMail(payeeMail, validatePayeeMail_Id)) {
		result = false;
	}
	
	// 檢核收款人統編
	// 20170710:不用檢核
	// 20170720:自行檢核是否超過10碼
	// 20181005:檢核是否超過10碼,不區分自跨行
	if (!validateTxDetail_PayeeUid_Simple(payeeUid, validatePayeeUid_Id)) {
	 	   result = false;
	}
	
	
	if (!result) {
		validateError();
	}
	return result;
}

// 檢核交易明細資料 for CACTX207
function validateTxDetail_207(txAmt_Id, limit, payerKind_Id, payeeBankId_Id, payeeAccountNo_Id, payeeName_Id, payeeMail_Id, payeeUid_Id , payerAccountNo) {
	
	var txAmt = getValue(gjid(txAmt_Id));
	//var payerKind = getRadioValue(gjid(payerKind_Id));
	var payerKind = getValue(gjid(payerKind_Id));
	var payeeBankId = getValue(gjid(payeeBankId_Id));
	var payeeAccountNo = getValue(gjid(payeeAccountNo_Id));
	var payeeName = getValue(gjid(payeeName_Id));
	var payeeMail = getValue(gjid(payeeMail_Id));
	var payeeUid = getValue(gjid(payeeUid_Id));
	
	var validateTxAmt_Id = getValidateId(txAmt_Id);
	var validatePayerKind_Id = getValidateId(payerKind_Id);
	var validatePayeeBankId_Id = getValidateId(payeeBankId_Id);
	var validatePayeeAccountNo_Id = getValidateId(payeeAccountNo_Id);
	var validatePayeeName_Id = getValidateId(payeeName_Id);
	var validatePayeeMail_Id = getValidateId(payeeMail_Id);
	var validatePayeeUid_Id = getValidateId(payeeUid_Id);
	
	var result = true;
	
	// 檢核付款金額
	if (!validateTxDetail_TxAmt(txAmt, limit, payerKind, validateTxAmt_Id)) {
		result = false;
	}
	
	// 檢核付款通路
	if (!validateTxDetail_PayerKind(payerKind, validatePayerKind_Id)) {
		result = false;
	}
	
	// 檢核收款銀行
	if (!validateTxDetail_PayeeBankId(payeeBankId, validatePayeeBankId_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款帳號
	if (!validateTxDetail_PayeeAccountNo(payeeAccountNo, validatePayeeAccountNo_Id, payerKind, payerAccountNo)) {
		result = false;
	}
	
	// 檢核收款人戶名
	if (!validateTxDetail_PayeeName(payeeName, validatePayeeName_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款人Mail
	if (!validateTxDetail_PayeeMail(payeeMail, validatePayeeMail_Id)) {
		result = false;
	}
	
	// 檢核收款人統編
	// 20170710:不用檢核
	// 20170720:自行檢核是否超過10碼
	// 20181005:檢核是否超過10碼,不區分自跨行
	if (!validateTxDetail_PayeeUid_Simple(payeeUid, validatePayeeUid_Id)) {
	 	   result = false;
	}
	
	
	if (!result) {
		validateError();
	}
	return result;
}

// 檢核付款金額
function validateTxDetail_TxAmt(txAmt, limit, payerKind, validateTxAmt_Id) {
	
	clearErrorMsg(validateTxAmt_Id);
	
	// 若付款金額為空白,顯示錯誤訊息『請輸入付款金額』
	if (txAmt == '') {
		setErrorMsg(validateTxAmt_Id, '請輸入付款金額');
		return false;
	}
	// 若付款金額不是輸入數字,顯示錯誤訊息『付款金額須為正整數』。
	if (!numberRegExp.exec(txAmt)) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	// 若付款金額<>正整數,顯示錯誤訊息『付款金額須為正整數』
	if (parseInt(txAmt) <= 0) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	// 台幣單筆若案件為退件狀態時,一筆案件匯款案件不可超過5000萬,顯示錯誤訊息『付款金額不可超過跨行單筆限額5000萬』 
	// 台幣整批付款及薪資整批付款須檢核單筆明細,若為跨行匯款,付款金額不可大於5000萬,若超過,顯示錯誤訊息『付款金額不可超過跨行單筆限額5000萬』
	// 1. 台幣單筆退件重編, 2. 台幣整批付款, 3. 薪資整批付款需將limit設為true
	if (limit && payerKind == 2 && parseInt(txAmt) > 50000000) {
		setErrorMsg(validateTxAmt_Id, '付款金額不可超過跨行單筆限額5000萬');
		return false;
	}

	return true;
}

// 檢核付款通路
function validateTxDetail_PayerKind(payerKind, validatePayerKind_Id) {
	
	clearErrorMsg(validatePayerKind_Id);
	
	if(payerKind == 3){
		return true;
	}
	
	// 若付款通路為空白,顯示錯誤訊息『請選擇付款通路』
	if (payerKind < 1 || payerKind > 2) {
		setErrorMsg(validatePayerKind_Id, '請選擇付款通路');
		return false;
	}
	
	return true;
}

// 檢核收款銀行
function validateTxDetail_PayeeBankId(payeeBankId, validatePayeeBankId_Id, payerKind) {
	
	clearErrorMsg(validatePayeeBankId_Id);
	
	// 若付款通路為跨行匯款,但收款銀行為空白,顯示錯誤訊息『請輸入收款銀行』
	if (payeeBankId == '') {
		setErrorMsg(validatePayeeBankId_Id, '請輸入收款銀行');
		return false;
	}
	
	if(payerKind == 3 && !atmRegExp.exec(payeeBankId)){
		setErrorMsg(validatePayeeBankId_Id, 'ATM跨行轉帳 收款銀行須為3碼數字');
		return false;
	}
	if ((payerKind == 1 || payerKind == 2 )&& !bankRegExp.exec(payeeBankId)) {
		setErrorMsg(validatePayeeBankId_Id, '收款銀行須為7碼數字');
		return false;
	}
	// 若付款通路為跨行匯款或ATM跨行轉帳,但收款銀行代號前3碼為809,顯示錯誤訊息『跨行匯款時,收款銀行代號不可為809凱基銀行代碼』
	if ( (payerKind == 2 || payerKind == 3 ) && intrabankRegExp.exec(payeeBankId)) {
		setErrorMsg(validatePayeeBankId_Id, '跨行匯款時,收款銀行代號不可為809凱基銀行代碼');
		return false;
	}
	// 若付款通路為跨行匯款,但收款銀行後4碼為0000(通匯行必須要有分行代碼),顯示錯誤訊息『收款銀行錯誤』
	if (payerKind == 2 && interbankNotRegExp.exec(payeeBankId)) {
		setErrorMsg(validatePayeeBankId_Id, '收款銀行錯誤');
		return false;
	}

	return true;
}

// 檢核收款帳號
function validateTxDetail_PayeeAccountNo(payeeAccountNo, validatePayeeAccountNo_Id, payerKind, payerAccountNo) {
	
	clearErrorMsg(validatePayeeAccountNo_Id);
	
	// 若收款帳號為空白,顯示錯誤訊息『請輸入收款帳號』
	if (payeeAccountNo == '') {
		setErrorMsg(validatePayeeAccountNo_Id, '請輸入收款帳號');
		return false;
	}
	// 若收款帳號不是輸入數字,顯示錯誤訊息『收款帳號須為數字』。
	if (!accountRegExp.exec(payeeAccountNo)) {
		setErrorMsg(validatePayeeAccountNo_Id, '收款帳號須為數字');
		return false;
	}
	
	// 若付款通路為自行轉帳,但「收款帳號」長度<>12或14,顯示錯誤訊息『凱基銀行帳號須為12或14或16位數字』
	if (payerKind == 1 && !payeeCosmosAccountRegExp.exec(payeeAccountNo)) {
		setErrorMsg(validatePayeeAccountNo_Id, '凱基銀行帳號須為12或14或15或16位數字');
		return false;
	}
	
	// 若付款通路為自行轉帳,檢核帳號是否符合凱基帳號規則邏輯,有誤時,顯示錯誤訊息『收款帳號非凱基銀行帳號』
	if (payerKind == 1 && !checkCosmosPayeeAccount(payeeAccountNo)) {
		setErrorMsg(validatePayeeAccountNo_Id, '收款帳號非凱基銀行帳號');
		return false;
	}
	
	// 若付款通路為跨行行轉帳,但「收款帳號」長度大於14,顯示錯誤訊息『跨行時收款帳號必須小於或是等於14位數字』
	if (payerKind == 2 && payeeAccountNo.length > 14 ) {
		setErrorMsg(validatePayeeAccountNo_Id, '跨行時收款帳號必須小於或是等於14位數字');
		return false;
	}
	
	// 若付款通路為自行轉帳,但收款帳號與付款帳號相同,顯示錯誤訊息『收款帳號不可與付款帳號相同』
  //申請單編號:1020400363   修改日期:2013/05/02   說明:不檢核轉出入帳戶不得為同一帳戶
  /*
	if (payerKind == 1 && payerAccountNo == payeeAccountNo) {
		setErrorMsg(validatePayeeAccountNo_Id, '收款帳號不可與付款帳號相同');
		return false;
	}*/
	
	return true;
}

// 檢核收款人戶名
function validateTxDetail_PayeeName(payeeName, validatePayeeName_Id, payerKind) {
	
	clearErrorMsg(validatePayeeName_Id);
	
	// 若付款通路為跨行匯款,但收款人戶名為空白,顯示錯誤訊息『請輸入收款人戶名』
	if (payerKind == 2 && payeeName == '') {
		setErrorMsg(validatePayeeName_Id, '請輸入收款人戶名');
		return false;
	}
	
	return true;
}

//檢核收款人Mail
function validateTxDetail_PayeeMail(payeeMail, validatePayeeMail_Id) {
	
	clearErrorMsg(validatePayeeMail_Id);
	
	if (payeeMail == '') {
		return true;
	}
	var payeeMails = payeeMail.replace('\r\n','').replace(/;$/,'').split(';');
	
	if(payeeMail.length > 0) {
		
		for(var i=0; i<payeeMails.length; i++) {
			if(!emailRegExp.exec(payeeMails[i])) {			
				setErrorMsg(validatePayeeMail_Id, '收款人Email格式有誤。');
				return false;
			}			
		}
	}
	
	return true;
}

// 檢核收款人統編
function validateTxDetail_PayeeUid(payeeUid, validatePayeeUid_Id) {
	
	clearErrorMsg(validatePayeeUid_Id);
	
	// 若不是空白時檢核
	if (payeeUid == '') {
		return true;
	}
	// 檢核須為英數字,有誤時,顯示錯誤訊息『收款人統編格式錯誤』
	if (!uidRegExp.exec(payeeUid)) {
		setErrorMsg(validatePayeeUid_Id, '收款人統編格式錯誤');
		return false;
	}
	// 檢核若非8、10、11碼,顯示錯誤訊息『收款人統編錯誤』
	if (payeeUid.length != 8 && payeeUid.length != 10  && payeeUid.length != 11 ) {
		setErrorMsg(validatePayeeUid_Id, '收款人統編錯誤');
		return false;
	}
	// 檢核統編是否符合統編規則,有誤時,顯示錯誤訊息『收款人統編錯誤』
	if (!checkUid(payeeUid)) {
		setErrorMsg(validatePayeeUid_Id, '收款人統編錯誤');
		return false;
	}
	
	return true;
}

/*******************************************************************************
 * 
 * 會計憑證檢核
 * 
 ******************************************************************************/


// 檢核新增會計憑證
function validateAddTxInvoice(id, max) {
	var table = gid(gjid(id + DATAGRID_BODY_SUFFIX_ID));
	var count = table.rows.length - 1;
	if (count >= max) {
		alert('會計憑證總筆數最多為' + max + '筆');
		return false;
	}
	
	return true;
}

// 檢核會計憑證資料
function validateTxInvoice(id) {
	var table = gid(gjid(id + DATAGRID_BODY_SUFFIX_ID));
	
	var result = true;
	
	// 會計憑證可不輸入。若有輸入,則須進行以下檢核
	for (var i = 1; i < table.rows.length; i++) {
		
		var row = table.rows[i];
		
		var invoiceNo_Id = row.cells[0].getElementsByTagName('input')[0].id;
		var invoiceDate_Id = row.cells[1].getElementsByTagName('input')[0].id;
		var invoiceAmt_Id = row.cells[2].getElementsByTagName('input')[0].id;
		var invoiceRemark_Id = row.cells[3].getElementsByTagName('input')[0].id;
		
		var invoiceNo = getValue(invoiceNo_Id);
		var invoiceDate = getValue(invoiceDate_Id);
		var invoiceAmt = getValue(invoiceAmt_Id);
		var invoiceRemark = getValue(invoiceRemark_Id);
		
		var validateInvoiceNo_Id = getValidateId(invoiceNo_Id);
		var validateInvoiceDate_Id = getValidateId(invoiceDate_Id);
		var validateInvoiceAmt_Id = getValidateId(invoiceAmt_Id);
		var validateInvoiceRemark_Id = getValidateId(invoiceRemark_Id);
		
		// 檢核發票號碼
		if (!validateTxInvoice_InvoiceNo(invoiceNo, validateInvoiceNo_Id)) {
			result = false;
		}
		
		// 檢核發票日期
		if (!validateTxInvoice_InvoiceDate(invoiceDate, validateInvoiceDate_Id)) {
			result = false;
		}
		
		// 檢核發票金額
		if (!validateTxInvoice_InvoiceAmt(invoiceAmt, validateInvoiceAmt_Id)) {
			result = false;
		}		
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

// 檢核發票號碼
function validateTxInvoice_InvoiceNo(invoiceNo, validateInvoiceNo_Id) {
	
	clearErrorMsg(validateInvoiceNo_Id);
	
	// 若發票號碼未輸入,顯示錯誤訊息『請輸入發票號碼』。
	if (invoiceNo == '') {
		setErrorMsg(validateInvoiceNo_Id, '請輸入發票號碼');
		return false;
	}
	
	// 不可輸入中文字
	var len1 = byteLength(invoiceNo);
	var len2 = invoiceNo.length;
	if (len1 > len2) {
		setErrorMsg(validateInvoiceNo_Id, '不可輸入中文字');
		return false;
	}
	
	return true;
}

// 檢核發票日期
function validateTxInvoice_InvoiceDate(invoiceDateStr, validateInvoiceDate_Id) {
	
	clearErrorMsg(validateInvoiceDate_Id);
	
	// 若發票日期為空白,顯示錯誤訊息『請輸入發票日期』
	if (isEmpty(invoiceDateStr)) {
		setErrorMsg(validateInvoiceDate_Id, '請輸入發票日期');
		return false;
	}
	// 若發票日期輸入格式不符合西元年YYYY/MM/DD格式,顯示錯誤訊息『付款日期格式錯誤,格式為西元年YYYY/MM/DD』
	if (!dateRegExp.exec(invoiceDateStr)) {
		setErrorMsg(validateInvoiceDate_Id, '發票日期格式錯誤,格式為西元年YYYY/MM/DD');
		return false;
	}
	// 若發票日期的日期正確性有誤,顯示錯誤訊息『發票日期錯誤』
	if (!isValidDateString(invoiceDateStr)) {
		setErrorMsg(validateInvoiceDate_Id, '發票日期錯誤');
		return false;
	}
	
	return true;
}

// 檢核付款金額
function validateTxInvoice_InvoiceAmt(invoiceAmt, validateInvoiceAmt_Id) {
	
	clearErrorMsg(validateInvoiceAmt_Id);
	
	// 若發票金額為空白,顯示錯誤訊息『請輸入發票金額』
	if (invoiceAmt == '') {
		setErrorMsg(validateInvoiceAmt_Id, '請輸入發票金額');
		return false;
	}
	// 若發票金額不是輸入數字,顯示錯誤訊息『發票金額須為正整數』。
	if (!numberRegExp.exec(invoiceAmt)) {
		setErrorMsg(validateInvoiceAmt_Id, '發票金額須為正整數');
		return false;
	}
	// 若發票金額<>正整數,顯示錯誤訊息『發票金額須為正整數』
	if (parseInt(invoiceAmt) <= 0) {
		setErrorMsg(validateInvoiceAmt_Id, '發票金額須為正整數');
		return false;
	}
	
	return true;
}

/*******************************************************************************
 * 
 * 交易狀態查詢檢核
 * 
 ******************************************************************************/


// 檢核交易狀態查詢資料
function validateTxQuery() {
	if (arguments.length == 6) {
		return validateTxQuery_Cancel(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
	}
	else if (arguments.length == 7) {
		return validateTxQuery_Query(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], arguments[6]);
	}
	else if (arguments.length == 3){
		return validateTxQuery_Query3(arguments[0], arguments[1], arguments[2]);
	}
	else if (arguments.length == 4){
		return validateTxQuery_Query2(arguments[0], arguments[1], arguments[2],arguments[3]);
	}
	else {
		return false;
	}
}

 
 
 
 
 
// 檢核預約註銷-交易狀態查詢資料
function validateTxQuery_Cancel(taskCombo_Id, startDate_Id, endDate_Id, payerAccountNo_Id, startMoney_Id, endMoney_Id) {
	
	var taskCombo = getValue(gjid(taskCombo_Id));
	var startDateStr = getValue(gjid(startDate_Id));
	var endDateStr = getValue(gjid(endDate_Id));
	var payerAccountNo = getValue(gjid(payerAccountNo_Id));
	var startMoneyStr = getValue(gjid(startMoney_Id));
	var endMoneyStr = getValue(gjid(endMoney_Id));
	
	var validateTaskCombo_Id = getValidateId(taskCombo_Id);
	var validateTxDate_Id = getValidateId(endDate_Id);
	var validatePayerAccountNo_Id = getValidateId(payerAccountNo_Id);
	var validateTxAmt_Id = getValidateId(endMoney_Id);
	
	var result = true;
	
	// 檢核交易類型
	if (!isEmpty(taskCombo_Id) && !validateTxQuery_TaskCombo(taskCombo, validateTaskCombo_Id)) {
		result = false;
	}
	
	// 檢核付款日期
	if (!validateTxQuery_TxDate(startDateStr, endDateStr, validateTxDate_Id)) {
		result = false;
	}
	
	// 2016/7/20 : 不用再判斷起日是否需大於今日
	// 檢核註銷查詢付款日期 
	//else if (!validateTxCancel_TxDate(startDateStr, endDateStr, validateTxDate_Id)) {
	//	result = false;
	//}
	
	// 檢核付款帳號
	if (!validateTxQuery_PayerAccountNo(payerAccountNo, validatePayerAccountNo_Id)) {
		result = false;
	}
	
	// 檢核付款金額
	if (!validateTxQuery_TxAmt(startMoneyStr, endMoneyStr, validateTxAmt_Id)) {
		result = false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

//檢核付款日期
function validateTxCancel_TxDate(startDateStr, endDateStr, validateTxDate_Id) {
	
	clearErrorMsg(validateTxDate_Id);

	var startDate = getDate(startDateStr);
	var endDate = getDate(endDateStr);
	//var today = new Date();
	var today = Date.parse((new Date()).toDateString());
	// 付款日期須檢核起日必須>系統日,否則顯示錯誤『起日須大於今日』。
	if (startDate < today) {
		setErrorMsg(validateTxDate_Id, '起日須大於等於今日');
		return false;
	}
	
	return true;
}



// 檢核狀態處理查詢-交易狀態查詢資料
function validateTxQuery_Query(txStatusCombo_Id, taskCombo_Id, startDate_Id, endDate_Id, payerAccountNo_Id, startMoney_Id, endMoney_Id) {
	
	var txStatusCombo = getValue(gjid(txStatusCombo_Id));
	var taskCombo = getValue(gjid(taskCombo_Id));
	var startDateStr = getValue(gjid(startDate_Id));
	var endDateStr = getValue(gjid(endDate_Id));
	var payerAccountNo = getValue(gjid(payerAccountNo_Id));
	var startMoneyStr = getValue(gjid(startMoney_Id));
	var endMoneyStr = getValue(gjid(endMoney_Id));
	
	var validateTxStatusCombo_Id = getValidateId(txStatusCombo_Id);
	var validateTaskCombo_Id = getValidateId(taskCombo_Id);
	var validateTxDate_Id = getValidateId(endDate_Id);
	var validatePayerAccountNo_Id = getValidateId(payerAccountNo_Id);
	var validateTxAmt_Id = getValidateId(endMoney_Id);
	
	var result = true;
	
	// 檢核處理狀態
	if (!validateTxQuery_TxStatusCombo(txStatusCombo, validateTxStatusCombo_Id)) {
		result = false;
	}
	
	// 檢核交易類型
	if (!isEmpty(taskCombo_Id) && !validateTxQuery_TaskCombo(taskCombo, validateTaskCombo_Id)) {
		result = false;
	}
	
	// 檢核付款日期
	if (!validateTxQuery_TxDate(startDateStr, endDateStr, validateTxDate_Id)) {
		result = false;
	}
	
	// 檢核付款帳號
	if (!validateTxQuery_PayerAccountNo(payerAccountNo, validatePayerAccountNo_Id)) {
		result = false;
	}
	
	// 檢核付款金額
	if (!validateTxQuery_TxAmt(startMoneyStr, endMoneyStr, validateTxAmt_Id)) {
		result = false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

//檢核狀態處理查詢-交易狀態查詢資料
function validateTxQuery_Query2(txStatusCombo_Id, startDate_Id, endDate_Id, payerAccountNo_Id) {
	
	var txStatusCombo = getValue(gjid(txStatusCombo_Id));
	var startDateStr = getValue(gjid(startDate_Id));
	var endDateStr = getValue(gjid(endDate_Id));
	
	var validateTxStatusCombo_Id = getValidateId(txStatusCombo_Id);
	var validateTxDate_Id = getValidateId(endDate_Id);
	var payerAccountNo = getValue(gjid(payerAccountNo_Id));
	var validatePayerAccountNo_Id = getValidateId(payerAccountNo_Id);
	var result = true;
	
	// 檢核處理狀態
	if (!validateTxQuery_TxStatusCombo(txStatusCombo, validateTxStatusCombo_Id)) {
		result = false;
	}
	
	// 檢核付款日期
	if (!validateTxQuery_TxDate(startDateStr, endDateStr, validateTxDate_Id)) {
		result = false;
	}// 檢核註銷查詢付款日期 
	else if (!validateTxCancel_TxDate(startDateStr, endDateStr, validateTxDate_Id)) {
		result = false;
	}
	
	// 檢核付款帳號
	if (!validateTxQuery_PayerAccountNo(payerAccountNo, validatePayerAccountNo_Id)) {
		result = false;
	}
	if (!result) {
		validateError();
	}
	return result;
}

//檢核狀態處理查詢-交易狀態查詢資料
function validateTxQuery_Query3(txStatusCombo_Id, startDate_Id, endDate_Id) {
	
	var txStatusCombo = getValue(gjid(txStatusCombo_Id));
	var startDateStr = getValue(gjid(startDate_Id));
	var endDateStr = getValue(gjid(endDate_Id));
	//var payerAccountNo = getValue(gjid(payerAccountNo_Id));
	var validateTxStatusCombo_Id = getValidateId(txStatusCombo_Id);
	var validateTxDate_Id = getValidateId(endDate_Id);
	
	var result = true;
	
	// 檢核處理狀態
	if (!validateTxQuery_TxStatusCombo(txStatusCombo, validateTxStatusCombo_Id)) {
		result = false;
	}
	
	// 檢核付款日期
	if (!validateTxQuery_TxDate(startDateStr, endDateStr, validateTxDate_Id)) {
		result = false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

// 檢核處理狀態
function validateTxQuery_TxStatusCombo(txStatusCombo, validateTxStatusCombo_Id) {
	
	clearErrorMsg(validateTxStatusCombo_Id);
	
	if (isEmpty(txStatusCombo) || txStatusCombo == 'none') {
		setErrorMsg(validateTxStatusCombo_Id, '請選擇處理狀態');
		return false;
	}
	
	return true;
}

// 檢核交易類型
function validateTxQuery_TaskCombo(taskCombo, validateTaskCombo_Id) {
	
	clearErrorMsg(validateTaskCombo_Id);
	
	if (isEmpty(taskCombo) || taskCombo == 'none') {
		setErrorMsg(validateTaskCombo_Id, '請選擇交易類型');
		return false;
	}
	
	return true;
}

// 檢核付款日期
function validateTxQuery_TxDate(startDateStr, endDateStr, validateTxDate_Id) {
	
	clearErrorMsg(validateTxDate_Id);
	
	// 若付款起日或付款迄日為空白,顯示錯誤訊息『請輸入付款日期』
	if (isEmpty(startDateStr) || isEmpty(endDateStr)) {
		setErrorMsg(validateTxDate_Id, '請輸入付款日期');
		return false;
	}
	// 若付款起日或付款迄日輸入格式不符合西元年YYYY/MM/DD格式,顯示錯誤訊息『付款日期格式錯誤,格式為西元年YYYY/MM/DD』
	if (!dateRegExp.exec(startDateStr) || !dateRegExp.exec(endDateStr)) {
		setErrorMsg(validateTxDate_Id, '付款日期格式錯誤,格式為西元年YYYY/MM/DD');
		return false;
	}
	// 若付款起日或付款迄日的日期正確性有誤,顯示錯誤訊息『日期錯誤』
	if (!isValidDateString(startDateStr) || !isValidDateString(endDateStr)) {
		setErrorMsg(validateTxDate_Id, '日期錯誤');
		return false;
	}
	
	var startDate = getDate(startDateStr);
	var endDate = getDate(endDateStr);
	// 若(付款迄日< 付款起日),顯示錯誤訊息『迄日不可早於起日』
	if (startDate.getTime() > endDate.getTime()) {
		setErrorMsg(validateTxDate_Id, '迄日不可早於起日');
		return false;
	}
	
	return true;
}

// 檢核付款帳號
function validateTxQuery_PayerAccountNo(payerAccountNo, validatePayerAccountNo_Id) {
	
	clearErrorMsg(validatePayerAccountNo_Id);
	
	// 若不是空白時檢核
	if (payerAccountNo == '') {
		return true;
	}
	// 若付款帳號不是輸入數字,顯示錯誤訊息『付款帳號須為數字』。
	if (!accountRegExp.exec(payerAccountNo)) {
		setErrorMsg(validatePayerAccountNo_Id, '付款帳號須為數字');
		return false;
	}
	// 付款帳號長度<>12或14,顯示錯誤訊息『凱基銀行帳號須為12或14或16位數字』
	if (!cosmosAccountRegExp.exec(payerAccountNo)) {
		setErrorMsg(validatePayerAccountNo_Id, '凱基銀行帳號須為12或14或16位數字');
		return false;
	}
	// 檢核帳號是否符合凱基帳號規則邏輯,有誤時,顯示錯誤訊息『付款帳號非凱基銀行帳號』
	if (!checkCosmosAccount(payerAccountNo)) {
		setErrorMsg(validatePayerAccountNo_Id, '付款帳號非凱基銀行帳號');
		return false;
	}
	
	return true;
}

// 檢核付款金額
function validateTxQuery_TxAmt(startMoney, endMoney, validateTxAmt_Id) {
	
	clearErrorMsg(validateTxAmt_Id);
	
	var validateStartMoney = true;
	var validateEndMoney = true;
	// 若付款金額為空白,則不檢核
	if (startMoney == '') {
		validateStartMoney = false;
	}
	if (endMoney == '') {
		validateEndMoney = false;
	}
	// 若付款金額不是輸入數字,顯示錯誤訊息『付款金額須為正整數』。
	if (validateStartMoney && !numberRegExp.exec(startMoney)) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	if (validateEndMoney && !numberRegExp.exec(endMoney)) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	// 若付款金額<>正整數,顯示錯誤訊息『付款金額須為正整數』
	if (validateStartMoney && parseInt(startMoney) <= 0) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	if (validateEndMoney && parseInt(endMoney) <= 0) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	// 若付款金額(上限) < 付款金額(下限),顯示錯誤訊息『付款金額錯誤』
	if (validateStartMoney && validateEndMoney && parseInt(startMoney) > parseInt(endMoney)) {
		setErrorMsg(validateTxAmt_Id, '付款金額錯誤');
		return false;
	}

	return true;
}

//檢核外幣轉帳付款交易狀態處理查詢-交易狀態查詢資料
function validateFrTxQuery_Query(txStatusCombo_Id, taskCombo_Id, startDate_Id, endDate_Id, payerAccountNo_Id) {
	var txStatusCombo = getValue(gjid(txStatusCombo_Id));
	var taskCombo = getValue(gjid(taskCombo_Id));
	var startDateStr = getValue(gjid(startDate_Id));
	var endDateStr = getValue(gjid(endDate_Id));
	var payerAccountNo = getValue(gjid(payerAccountNo_Id));
	//var startMoneyStr = getValue(gjid(startMoney_Id));
	//var endMoneyStr = getValue(gjid(endMoney_Id));
	var validateTxStatusCombo_Id = getValidateId(txStatusCombo_Id);
	var validateTaskCombo_Id = getValidateId(taskCombo_Id);
	var validateTxDate_Id = getValidateId(endDate_Id);
	var validatePayerAccountNo_Id = getValidateId(payerAccountNo_Id);
	//var validateTxAmt_Id = getValidateId(endMoney_Id);
	var result = true;
	
	// 檢核處理狀態
	if (!validateTxQuery_TxStatusCombo(txStatusCombo, validateTxStatusCombo_Id)) {
		result = false;
	}
	
	// 檢核交易類型
	if (!isEmpty(taskCombo_Id) && !validateTxQuery_TaskCombo(taskCombo, validateTaskCombo_Id)) {
		result = false;
	}
	
	// 檢核付款日期
	if (!validateTxQuery_TxDate(startDateStr, endDateStr, validateTxDate_Id)) {
		result = false;
	}
	
	// 檢核付款帳號
	if (!validateTxQuery_PayerAccountNo(payerAccountNo, validatePayerAccountNo_Id)) {
		result = false;
	}
	
	//付款日期須大於查詢當日
	var txType = gid(gjid('txTypeCombo')).value;
	var startDate = getDate(startDateStr);
	var now = new Date();
	if(txType == '1'){
	
		if(now.getTime() > startDate.getTime()){
			setErrorMsg(validateTxDate_Id, '付款日期須大於查詢當日');
			result =  false;
		}
		
	}
	
	if (!result) {
		validateError();
	}
	return result;
}
// function disable_a(name, className){
// names = document.getElementsByName(name);
// for(var i=0; i<names.length; i++){
// if(!names[i].lang){
// names[i].lang = names[i].href;
// names[i].rel = names[i].className;
// names[i].href ='javascript:void(0)';
// names[i].className = className;
// }else{
// names[i].href ='javascript:void(0)';
// names[i].className = className;
// }
// }
// }
//
// function enable_a(name, className) {
// names = document.getElementsByName(name);
// for(var i=0; i<names.length; i++){
// if(names[i].lang){names[i].href = names[i].lang}
// if(names[i].rel){names[i].className = names[i].rel;}
// }
// }

// 取得收款人銀行分行名稱
function getPayeeBankName(fullBankId) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getPayeeBankName"
		+ "&FullBankId=" + trim(fullBankId);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	result = " 查無銀行分行名稱";
        },
        sync: true
 	});
 	return result;
}


// 判斷是否為營業日
function isBusinessDay(dt) {
	var result = "";
	
//	sUrl = "/B2C/B2CAjaxSyncData?FN=getPayeeBankName"
//		+ "&FullBankId=" + trim(fullBankId);
	
//	console.log('CTT 1');
//	console.log(dt);
	sUrl = "/B2C/B2CAjaxSyncData?FN=getLbDateCode1"
		+ "&dt=" + trim(dt);
	
//	sUrl = "/B2C/B2CAjaxSyncData?FN=isBusinessDay"
		
	
//	console.log('CTT 2');
	
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data) == 0;
        },
        error: function(data) {
        	result = " 查詢營業日失敗";
        },
        sync: true
 	});
 	return result;
}


// 取得餘額(台幣)
function getBalance(uid, uuid, accountNo) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getBalance"
		+ "&Uid=" + trim(uid)
		+ "&Uuid=" + trim(uuid)
		+ "&AccountNo=" + trim(accountNo);
	
    dojo.xhrGet({
    	url: sUrl,
    	preventCache: true,
        load: function(data) {
        	result = " 餘額:" + trim(data);
        },
        error: function(data) {
        	result = " 系統異常,請稍候再試";
        },
        sync: true
 	});
 	return result;
}

//取得餘額(外幣)
function getBalanceFr(accountNo, currencyId, companyKey) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getBalanceFr&AccountNo={0}&CurrencyId={1}&companyKey={2}"
		.f(trim(accountNo), trim(currencyId), companyKey);
    dojo.xhrGet({
    	url: sUrl,
    	preventCache: true,
        load: function(data) {
        	result = " 餘額:" + trim(data);
        },
        error: function(data) {
        	result = " 系統異常,請稍候再試";
        },
        sync: true
 	});
 	return result;
}


//取得試算金額(外幣)
function getBalanceExeTestFr(accountNo, currencyId, companyKey,amt,payeeCcy,payerUid,userKey) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getBalanceExeTestFr&AccountNo={0}&CurrencyId={1}&companyKey={2}&amt={3}&payeeCcy={4}&payerUid={5}&userKey={6}"
		.f(trim(accountNo), trim(currencyId), companyKey,trim(amt),trim(payeeCcy),trim(payerUid),trim(userKey));
    dojo.xhrGet({
    	url: sUrl,
    	preventCache: true,
        load: function(data) {
        	result = " " + trim(data);
        },
        error: function(data) {
        	result = " 系統異常,請稍候再試";
        },
        sync: true
 	});
 	return result;
}


// 取得常用收款人鍵值
function getCommonPayeeKey(fullBankId, accountNo, companyKey) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getCommonPayeeKey"
		+ "&FullBankId=" + trim(fullBankId)
		+ "&AccountNo=" + trim(accountNo)
		+ "&CompanyKey=" + trim(companyKey);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//取得外幣常用收款人鍵值
function getFrCommonPayeeKey(payerKind, accountNo, companyKey) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getFrCommonPayeeKey"
		+ "&PayerKind=" + trim(payerKind)
		+ "&AccountNo=" + trim(accountNo)
		+ "&CompanyKey=" + trim(companyKey);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//是否在批次營業時間內
function isBeforeBatchBizTime(companyUid,taskId) {
	var result = false;
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=isBeforeBatchBizTime"
		+ "&TaskId=" + trim(taskId)
		+ "&CompanyUid=" + trim(companyUid);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = (trim(data).toLowerCase() == "true");
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//取得次營業日
function getBatchNextBizDate(companyUid,taskId) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getBatchNextBizDate"
		+ "&TaskId=" + trim(taskId)
		+ "&CompanyUid=" + trim(companyUid);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//取得次營業日
function getBatchIntraBankNextBizDate(companyUid,taskId,intraBank) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getBatchIntraBankNextBizDate"
		+ "&TaskId=" + trim(taskId)
		+ "&CompanyUid=" + trim(companyUid);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//取得次營業日
function getIntraBankNextBizDate(taskId,isInTraBank) {
	var result = "";
	
	var inTraBank = '0';//0為interbank
	if(isInTraBank){
		inTraBank = '1';
	}
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getIntraBankNextBizDate"
		+ "&InTraBank=" + trim(inTraBank)
		+ "&TaskId=" + trim(taskId);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}


// 是否在營業時間內
function isBeforeBizTime(taskId) {
	var result = false;
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=isBeforeBizTime"
		+ "&TaskId=" + trim(taskId);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = (trim(data).toLowerCase() == "true");
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//是否在營業時間內
function isBeforeBizTimeTwdTx(taskId,isInTraBank) {
	var result = false;
	var inTraBank = '0';//0為interbank
	if(isInTraBank){
		inTraBank = '1';
	}
	sUrl = "/B2C/B2CAjaxSyncData?FN=isBeforeBizTimeTwdTx"
		+ "&TaskId=" + trim(taskId)
		+ "&InTraBank=" + trim(inTraBank);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = (trim(data).toLowerCase() == "true");
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//是否在營業時間內
function isBeforeBatchBizTimeTwdTx(taskId,isInTraBank,companyUid) {
	var result = false;
	var inTraBank = '0';//0為interbank
	if(isInTraBank){
		inTraBank = '1';
	}
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=isBeforeBatchBizTimeTwdTx"
		+ "&TaskId=" + trim(taskId)
		+ "&InTraBank=" + trim(inTraBank)
		+ "&CompanyUid=" + trim(companyUid);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = (trim(data).toLowerCase() == "true");
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}


// 取得次營業日
function getNextBizDate(taskId) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getNextBizDate"
		+ "&TaskId=" + trim(taskId);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//取得常用收款人鍵值
function getPayerTemplateKey(payerTemplateName,userkey,txBatchType,taskId) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getPayerTemplateKey"
		+ "&payerTemplateName=" + encodeURIComponent(trim(payerTemplateName))
		+ "&userkey=" + trim(userkey)
		+ "&txBatchType=" + trim(txBatchType)
		+ "&taskId=" + trim(taskId);
	//alert(sUrl);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//取得外幣交易範本鍵值
function getFxTemplateKey(payerTemplateName,userkey,txBatchType,taskId) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getFxTemplateKey"
		+ "&payerTemplateName=" + encodeURIComponent(trim(payerTemplateName))
		+ "&userkey=" + trim(userkey)
		+ "&txBatchType=" + trim(txBatchType)
		+ "&taskId=" + trim(taskId);
	//alert(sUrl);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}


//取得信用狀範本鍵值
function getLcTemplateKey(lcTemplateName,userkey,taskId) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getLcTemplateKey"
		+ "&lcTemplateName=" + encodeURIComponent(trim(lcTemplateName))
		+ "&userkey=" + trim(userkey)
		+ "&taskId=" + trim(taskId);
	//alert(sUrl);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

// 檢核收款銀行代號
function validatePayeeBankId(payeeFullBankId) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=validatePayeeBankId"
		+ "&PayeeFullBankId=" + trim(payeeFullBankId);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = (trim(data).toLowerCase() == "true");
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

// 檢核付款金額
function validateTxAmt(companyKey, payerKind, chargeAmtType, txAmt) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=validateTxAmt"
		+ "&CompanyKey=" + trim(companyKey)
		+ "&PayerKind=" + trim(payerKind)
		+ "&ChargeAmtType=" + trim(chargeAmtType)
		+ "&TxAmt=" + trim(txAmt);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = (trim(data).toLowerCase() == "true");
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

//取得餘額
function getLoanAccountValue(uid, uuid, accountNo) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getLoanAccountValue"
		+ "&Uid=" + trim(uid)
		+ "&Uuid=" + trim(uuid)
		+ "&AccountNo=" + trim(accountNo);
	
	//alert("sUrl:" + sUrl);
    dojo.xhrGet({
    	url: sUrl,
    	preventCache: true,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	result = " 系統異常,請稍候再試";
        },
        sync: true
 	});
 	return result;
}

//取得貸款試算餘額
function getLoanAccountValueNew(uid, uuid,accountNo,amt) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getLoanAccountValueNew"
		+ "&Uid=" + trim(uid)
		+ "&Uuid=" + trim(uuid)
		+ "&AccountNo=" + trim(accountNo)
		+ "&Amt=" + trim(amt);
	//alert("sUrl:" + sUrl);
    dojo.xhrGet({
    	url: sUrl,
    	preventCache: true,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	result = " 系統異常,請稍候再試";
        },
        sync: true
 	});
 	return result;
}

Number.prototype.formatMoney = function(c, d, t){ var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");  };


Date.prototype.addYear = function(interval) {	this.addMonth(interval * 12);  }


function doSubmitForm(callback,isEnableAll){
	/**1.不管如何先清楚server的錯誤**/
	/**2.執行Client端驗證**/
	/**3.將disabled的元件改成component**/
	validateError();
	var result = callback();
	if(result && !!isEnableAll){
		beforeSubmit();
	}else{
		//移除遮罩

	}
	return result;
}

/**由於disable會造成為法把值提交到server,所以要先把他enable**/
function beforeSubmit() {
	var theform = gid('form1');
	if(typeof(theform) != 'undefined' && !!theform){
		if (document.all || document.getElementById) {
			for (i = 0; i < theform.length; i++) {
				var formElement = theform.elements[i];
				if (true) {
					formElement.disabled = false;
				}
			}
		}
	}
}

//取得臺幣科目別
function getTwSubject(account){
	if(!account)
		return "";
	return account.substring(3,5);
}

//取得外幣最低起存額
function getOpenMinAmt(affairCode, branchClass, ccy) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getOpenMinAmt" + "&AffairCode=" + trim(affairCode) + "&BranchClass=" + trim(branchClass) + "&Ccy=" + trim(ccy);
	
	//alert("sUrl:" + sUrl);
    dojo.xhrGet({
    	url: sUrl,
    	preventCache: true,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	result = " 系統異常,請稍候再試";
        },
        sync: true
 	});
 	return result;
}

// 取得company branch class, OBU or DBU
function getCompanyBranchClass(companyKey) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getCompanyBranchClass" + "&CompanyKey=" + trim(companyKey);
	
	//alert("branchClassUrl:" + sUrl);
    dojo.xhrGet({
    	url: sUrl,
    	preventCache: true,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	result = " 系統異常,請稍候再試";
        },
        sync: true
 	});
 	return result;
}

//是否有中文
function haveChinese(s) { 
	return s.search(chineseRegExp)>-1;
}


/**
 * 取得公告訊息
 * @returns
 */
function getBulletinMessage() {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getBulletinMessage";
	
	if (typeof dojo != "undefined") {
		
	//alert("getBulletinMessage:" + sUrl);
	    dojo.xhrGet({
	    	url: sUrl,
	    	preventCache: true,
	        load: function(data) {
	        	result = data;
	        },
	        error: function(data) {
	        	result = " 系統異常,請稍候再試發佈訊息異常";
	        },
	        sync: true
	 	});
	}
 	return result;
}



function getB2CSysMessage() {
	var msg = getBulletinMessage();
	//alert(String.fromCharCode(36889));
	//alert(msg);
	if(msg.trim() !='') {
		//alert('not blank');
		//alert(msg);
		if (typeof parent.alterReminderMaintain == 'function') { 
			//alert(msg);
			parent.alterReminderMaintain(msg);
		}
		
	}
	//parent.alterReminder1(msg);
}

/**
 * 取得Alert訊息
 * @returns
 */
function getAlertMessage() {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=getAlertMessage";
	
	if (typeof dojo != "undefined") {
		
	//alert("getBulletinMessage:" + sUrl);
	    dojo.xhrGet({
	    	url: sUrl,
	    	preventCache: true,
	        load: function(data) {
	        	result = data;
	        },
	        error: function(data) {
	        	result = " 系統異常,請稍候再試警示訊息異常";
	        },
	        sync: true
	 	});
	}
 	return result;
}

/*******************************************************************************
 * 
 * 交易明細檢核
 * 
 ******************************************************************************/

// 檢核交易明細資料
function validateTemplateTxDetail(txAmt_Id, limit, payerKind_Id, payeeBankId_Id, payeeAccountNo_Id, payeeName_Id, payeeMail_Id, payeeUid_Id , payerAccountNo) {
	
	var txAmt = getValue(gjid(txAmt_Id));
	var payerKind = getRadioValue(gjid(payerKind_Id));
	var payeeBankId = getValue(gjid(payeeBankId_Id));
	var payeeAccountNo = getValue(gjid(payeeAccountNo_Id));
	var payeeName = getValue(gjid(payeeName_Id));
	var payeeMail = getValue(gjid(payeeMail_Id));
	var payeeUid = getValue(gjid(payeeUid_Id));
	
	var validateTxAmt_Id = getValidateId(txAmt_Id);
	var validatePayerKind_Id = getValidateId(payerKind_Id);
	var validatePayeeBankId_Id = getValidateId(payeeBankId_Id);
	var validatePayeeAccountNo_Id = getValidateId(payeeAccountNo_Id);
	var validatePayeeName_Id = getValidateId(payeeName_Id);
	var validatePayeeMail_Id = getValidateId(payeeMail_Id);
	var validatePayeeUid_Id = getValidateId(payeeUid_Id);
	
	var result = true;
	
	// 檢核付款金額
	if (!validateTemplateTxDetail_TxAmt(txAmt, limit, payerKind, validateTxAmt_Id)) {
		result = false;
	}
	
	// 檢核付款通路
	if (!validateTxDetail_PayerKind(payerKind, validatePayerKind_Id)) {
		result = false;
	}
	
	// 檢核收款銀行
	if (!validateTxDetail_PayeeBankId(payeeBankId, validatePayeeBankId_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款帳號
	if (!validateTxDetail_PayeeAccountNo(payeeAccountNo, validatePayeeAccountNo_Id, payerKind, payerAccountNo)) {
		result = false;
	}
	
	// 檢核收款人戶名
	if (!validateTxDetail_PayeeName(payeeName, validatePayeeName_Id, payerKind)) {
		result = false;
	}
	
	// 檢核收款人Mail
	if (!validateTxDetail_PayeeMail(payeeMail, validatePayeeMail_Id)) {
		result = false;
	}
	
	// 檢核收款人統編
	// 20170710:不用檢核
	// 20170720:自行檢核是否超過10碼
	// 20181005:檢核是否超過10碼,不區分自跨行
	if (!validateTxDetail_PayeeUid_Simple(payeeUid, validatePayeeUid_Id)) {
	 	   result = false;
	}
	
	if (!result) {
		validateError();
	}
	return result;
}

//檢核付款金額
function validateTemplateTxDetail_TxAmt(txAmt, limit, payerKind, validateTxAmt_Id) {
	
	clearErrorMsg(validateTxAmt_Id);
	
	// 若付款金額為空白,顯示錯誤訊息『請輸入付款金額』
	if (txAmt == '') {
		setErrorMsg(validateTxAmt_Id, '請輸入付款金額');
		return false;
	}
	// 若付款金額不是輸入數字,顯示錯誤訊息『付款金額須為正整數』。
	if (!numberRegExp.exec(txAmt)) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	// 若付款金額<>正整數,顯示錯誤訊息『付款金額須為正整數』
	if (parseInt(txAmt) < 0) {
		setErrorMsg(validateTxAmt_Id, '付款金額須為正整數');
		return false;
	}
	// 台幣單筆若案件為退件狀態時,一筆案件匯款案件不可超過5000萬,顯示錯誤訊息『付款金額不可超過跨行單筆限額5000萬』 
	// 台幣整批付款及薪資整批付款須檢核單筆明細,若為跨行匯款,付款金額不可大於5000萬,若超過,顯示錯誤訊息『付款金額不可超過跨行單筆限額5000萬』
	// 1. 台幣單筆退件重編, 2. 台幣整批付款, 3. 薪資整批付款需將limit設為true
	if (limit && payerKind == 2 && parseInt(txAmt) > 50000000) {
		setErrorMsg(validateTxAmt_Id, '付款金額不可超過跨行單筆限額5000萬');
		return false;
	}

	return true;
}


//檢核收款人統編
function validateTxDetail_PayeeUid_Simple(payeeUid, validatePayeeUid_Id) {
	
	clearErrorMsg(validatePayeeUid_Id);
	
	// 若不是空白時檢核
	if (payeeUid == '') {
		return true;
	}
	
	if (payeeUid.length > 10) {
		setErrorMsg(validatePayeeUid_Id, '收款人統編錯誤');
		return false;
	}
	
	return true;
}

if (typeof cibForce == 'undefined') {
    var cibForce = true;
    var jsIP = "/B2C/js/";
    var jsFolder = "ciben";
    var fsIP = "/B2C/js/";
    var fsFolder = "ciben/css";
    //var fsFileName = ((navigator.appName=='Microsoft Internet Explorer'||!!(navigator.userAgent.match(/Trident/)||navigator.userAgent.match(/rv 11/))==1)?(true):(false))?("WFont?t=eot&c="):("WFont?t=ff&c=");
    var fsFileName = "EUDC_CHLF.tte";
    var rule_out_cbwfs = "";
    var script = document.createElement("script");
    script.src = jsIP + jsFolder + "/lib/cbwfs.js";
    document.getElementsByTagName('head')[0].appendChild(script);
}

//檢核是否為營業日
function validateBusinessDate(txDate) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=validateBusinessDate"
		+ "&TxDate=" + trim(txDate);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = (trim(data).toLowerCase() == "true");
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}

/**
 * URL encode / decode  Object
 * 使用方法 : Url.encode(aaa)
 * 使用方法 : Url.decode(aaa)
 */

var Url = {
    // public method for url encoding
    encode : function (string) {
        return escape(utf8_encode(string));
    },

    // public method for url decoding
    decode : function (string) {
        return utf8_decode(unescape(string));
    }    
};

//UTF-8 encoding
function utf8_encode (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++) {

        var c = string.charCodeAt(n);

        if (c < 128) {
            utftext += String.fromCharCode(c);
        }
        else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        }
        else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }

    }
    return utftext;
}
//UTF-8 decoding
function utf8_decode (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length ) {

        c = utftext.charCodeAt(i);

        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        }
        else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }

    }

    return string;
}

function base64ToHex(base64Str) {
	  var raw = atob(base64Str);
	  var HEX = '';
	  for (var i = 0; i < raw.length; i++) {
	    var _hex = raw.charCodeAt(i).toString(16);
	    HEX += _hex.length === 2 ? _hex : '0' + _hex;
	  }
	  return HEX.toUpperCase();
}

//修改聯絡資料送email認證碼
function sendVerifyCode(mail,userKey,companyKey) {
	var result = "";
	
	sUrl = "/B2C/B2CAjaxSyncData?FN=checkMail"
		+ "&Mail=" + trim(mail)
		+ "&UserKey=" + trim(userKey)
		+ "&CompanyKey=" + trim(companyKey);
    dojo.xhrGet({
    	url: sUrl,
        load: function(data) {
        	result = trim(data);
        },
        error: function(data) {
        	window.alert("系統異常,請稍候再試");
        },
        sync: true
 	});
 	return result;
}