function U2A(source, len) { //Unicode -> ASCII 轉換
	var result='';
	var code = source.match(/&#(\d+);/g);
	if (code == null) {return;}
	for (var i=0; i<code.length; i++) {
		result += String.fromCharCode(code[i].replace(/[&#;]/g, ''));
	}
	return Left(result, len);
}
//Left 函數
function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
//Right 函數
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}


//==================彈出式視窗=======================
function fnCallDialog(url,size) {
	var newWindow=null;
	//window.showModelessDialog(url,window,size);
	if ((!newWindow) || newWindow.closed)
	{
		newWindow=window.open(url,"new_win","resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,width=560,height=650,top=150,left=300");
	}
	else
	{
		newWindow.location.href=url;
		newWindow.focus();
	}
	newWindow.focus();
}
//==================表單驗證通式開始=======================
function check_all_fields(form_name) {
	document.getElementById(form_name).submit_button.disabled=true;//先讓SUBMIT按鈕失去作用，若表單驗證不過再讓它恢復
	var form_item;	
	var forms=document.getElementById(form_name);
	for (var i=0; i<forms.elements.length; i++) {
		if (forms.elements(i).getAttribute("validate")=='YES') {
			switch(forms.elements(i).getAttribute("type")) {
				case "select-one" :
					if (forms.elements(i).options[forms.elements(i).selectedIndex].value=="") {
						alert("請選擇"+forms.elements(i).getAttribute("ChtName")+"!");
						forms.elements(i).focus();
						document.getElementById(form_name).submit_button.disabled=false;
						return false;
						brealk;
					}
					break;
				case "checkbox" :
					var check_box_check=false;
					for (var j=0; j<document.all(forms.elements(i).getAttribute("name")).length; j++) {
						if (document.all(forms.elements(i).getAttribute("name"))(j).checked==true) {
							check_box_check=true;
							break;
						}
					}
					if (!check_box_check) {
						alert("請選取"+forms.elements(i).getAttribute("ChtName")+"!");
						document.getElementById(form_name).submit_button.disabled=false;
						return false;
						break;
					}
					break;
				case "password":
					if (forms.elements(i).getAttribute("RegularExpressionValidator")=="COMPARE") {//要與密碼欄位進行比對
						if (forms.elements(i).value!=document.getElementById(form_name).password.value) {
							alert("密碼與確認密碼欄位值不符，請重新輸入!");
							forms.elements(i).value="";
							document.getElementById(form_name).password.value="";
							document.getElementById(form_name).password.focus();
							document.getElementById(form_name).submit_button.disabled=false;
							return false;
							break;							
						}
					}
					else {
						if (!validate_form(forms.elements(i), i)) {//驗證不通過，傳回驗證失敗旗標
							forms.elements(i).focus();
							document.getElementById(form_name).submit_button.disabled=false;
							return false;
							break;
						}
					}
				default:
					if (!validate_form(forms.elements(i), i)) {//驗證不通過，傳回驗證失敗旗標
						forms.elements(i).focus();
						document.getElementById(form_name).submit_button.disabled=false;
						return false;
						break;
					}
					break;
			}	
		}
	}
	return true;
}
function validate_form(form_item, column_order) {
	str=form_item.value;//客戶端輸入值
	var re = new RegExp(form_item.getAttribute("RegularExpressionValidator"));
	cht_name=form_item.getAttribute("ChtName");//取得欄位中文名稱
	show_messagebox=form_item.getAttribute("ShowMessageBox");//是否要做彈出式警告?YES
	var regexp_str=form_item.getAttribute("RegularExpressionValidator");
	matchflag=re.exec(str);
	if (cht_name=='身分證字號') {
		return checkid(str);
	}
	else {
		return match_format(form_item, regexp_str, column_order, cht_name, show_messagebox, matchflag);
		//欄位物件, 正規驗證字串, 欄位順序, 中文欄位名稱, 是否要彈出警告視窗. 是否符合驗證格式
	}
}

function match_format(form_item, regexp_str, column_order, cht_name, show_messagebox, matchflag) {
	var error_message="";
	switch(regexp_str) {
		case "\\S{1,}" ://表示必填欄位
			switch(location.search) {
				case "?lang=chs" :
					error_message=cht_name +'- ' + unescape('%u5FC5%u987B%u586B%u5199') +  '.';					break;
				case "?lang=eng" :
					error_message=cht_name +'- must fill.';
					break;
				default :					
					error_message=cht_name +'- 必須填寫.';
					break;
			}
			//error_message=cht_name+"不得空白!"
			break;
		case "\\S+@\\S+\\.\\S{2,}" ://表示 E-mail 欄位
			error_message=cht_name+"格式不符，必須符合 name@company.com 的格式!"
			break;
		case "(19|20)\\d\\d[-/.](0[1-9]|1[012])[-/.](0[1-9]|[12][0-9]|3[01])" ://表示日期欄位
			error_message=cht_name+"格式不符，必須是 2005-01-01 或 2005/01/01 或 2005.01.01!"
			break;
		case "^\d+$" ://表示數字欄位(不含小數點)
			error_message=cht_name+"必須是數字格式!"
			break;
		case "^\d{1,}[\.]?\d+$" ://表示數字欄位(可含小數點)
			error_message=cht_name+"必須是數字格式(可含小數點)!"
			break;
		case "\\b0\\d{1,3}-\\d{5,8}" ://表示電話格式欄位
			error_message=cht_name+"格式不符，必須符合 02-87323348!"
			break;
		default ://其他定義格式的欄位
			if (form_item.getAttribute("maxlength")) {
				error_message=cht_name+"格式不符，"
				error_message+="必須輸入 "+form_item.getAttribute("minlength")+" ~ "+form_item.getAttribute("maxlength")+" 個字元!"
			}
			else {
				error_message=cht_name +'- must fill.'
				error_message=cht_name+"格式不符!"
			}
	}
	if (!matchflag) {//驗證不通過
		if (show_messagebox=="YES") {//要彈出警告視窗
			alert("『" + error_message + "』");
		}
		else {
			var spans=document.getElementById("new_span_"+column_order);
			//如果之前已經建立了錯誤訊息的 SPAN 區塊，就將錯誤訊息填入訊息區塊
			if (spans!=null) {
				spans.innerHTML='<img src="hand02-01.gif">&nbsp;<font color=FF0000>'+ error_message +'</font>';
			}
			//如果之前尚未建立錯誤訊息的 SPAN 區塊，就建立一個新的訊息區塊
			else {
				form_item.insertAdjacentHTML('afterEnd', '&nbsp;<span id=new_span_'+column_order+'><!--<img src="hand02-01.gif">--><br>&nbsp;<font color=FF0000>'+ error_message +'</font></span>');
			}
		}
		return false;
	}
	else {//如果驗證通過，就把錯誤訊息自訊息區塊中移除
		if (show_messagebox!="YES") {//不需要彈出警告視窗
			var spans=document.getElementById("new_span_"+column_order);
			if (spans!=null) {
				spans.innerHTML='';
			}
		}
		return true;
	}
}

//身分證驗證程式

var local=new Array(34) 
local[10]='A' 
local[11]='B' 
local[12]='C' 
local[13]='D' 
local[14]='E' 
local[15]='F' 
local[16]='G' 
local[17]='H' 
local[18]='J' 
local[19]='K' 
local[20]='L' 
local[21]='M' 
local[22]='N' 
local[23]='P' 
local[24]='Q' 
local[25]='R' 
local[26]='S' 
local[27]='T' 
local[28]='U' 
local[29]='V' 
local[32]='W' 
local[30]='X' 
local[31]='Y' 
local[33]='Z' 

function checkid(id) { 
	id=id.toUpperCase() 
	if(lengtherr(id)) { 
		alert('輸入的身分證字號長度有誤！') 
	}
	else if(firstlettererr(id)) { 
		alert('身分證第一碼查無此英文字母:'+id.substring(0,1)) 
	}
	else if(numerr(id)) { 
		alert('輸入的身分證後九碼應為數字！') 
	}
	else if(checkerr(id)) { 
		alert('您輸入的身分證字號有誤！') 

	}
	else { 
		return true;
	} 
} 

function lengtherr(id) { 
	if(id.length<10) 
		return 1 
	else 
		return 0 
} 

function firstlettererr(id) { 
	var fl=id.substring(0,1) 
	var haserr=1 
	for(i=10;i<=33;i++) { 
		if(local[i]!=fl) 
			continue 
		else{ 
			haserr=0 
			break 
		} 
	} 
	if(haserr==1) 
		return 1 
	else 
		return 0 
}

function numerr(id) { 
	var haserr=0 
		for(i=1;i<=9;i++) { 
			if(parseInt(id.substring(i,i+1))>0 || id.substring(i,i+1)=='0') 
				continue 
			else { 
				haserr=1 
				break
			} 
		} 
	if(haserr==1) 
		return 1 
	else 
		return 0 
} 

function checkerr(id) { 
	var se=new Array(10) 
	var we=0 
	var checkcode=0 
	for(i=10;i<=33;i++) { 
		if(local[i]==id.substring(0,1)) { 
			se[0]=parseInt((i+'0').substring(0,1)) 
			se[1]=parseInt((i+'0').substring(1,2)) 
			break 
		} 
	} 
	for(i=1;i<=9;i++) { 
		se[i+1]=parseInt(id.substring(i,i+1)) 
	} 
	for(i=0;i<=10;i++) { 
		if(i==0) 
			we=we+se[i] 
		else 
			we=we+(se[i]*(10-i)) 
	} 

	checkcode=((10-mod(we,10))+'0').substring(0,1) 
	if(checkcode!=id.substring(9,10)) 
		return 1 
	else 
		return 0 
} 

function mod(a,b) { 
	var r 
	r=Math.round(a/b) 
	if((b*r)>a) 
		r-=1 
		return (a-(b*r)) 
} 

