/*
=======================================================================================================
File Name     : form.js
Language     :JavaScript
Last Modify    :1999/8/13
CopyingRight:Ho Yi-Lin
Descrition		: Form Object Addon
Functional: form method addin lock() ,unlock()  ,submitCheck() ,blurCheck() ,lockAlpha() ,lockNum()
=======================================================================================================
*/
//must include string.js

//initialisize
function formObjectAddon(){

	eventSet();
	var flag=0;
	for(i=0;i<document.forms.length;i++){
		document.forms[i].submitCheck=submitCheck;
		document.forms[i].lock=lock;
		document.forms[i].unlock=unlock;
		for(j=0;j<document.forms[i].elements.length;j++){
			if (document.forms[i].elements[j].type=="text") {
				document.forms[i].elements[j].checkValue=checkValue;
				document.forms[i].elements[j].lockNum=lockNum;
				document.forms[i].elements[j].lockAlpha=lockAlpha;
				//繼承check屬性值
				if(document.forms[i].elements[j].check) flag=1;
				if(flag==1){
					if(!document.forms[i].elements[j].check) document.forms[i].elements[j].check=document.forms[i].elements[j-1].check;
				}
			}
		}
	}
}

//Error Message
function errmsg(index){
	
	var errmsg=new Array()
		  errmsg[0]="這個欄位不允許空白！"
          errmsg[1]="身分證字號需為十位數！"
		  errmsg[2]="身分證字號第一個字需為英母！"
		  errmsg[3]="身分證字號後九位需為數字！"
		  errmsg[4]="身分證號碼驗證錯誤！"
		  errmsg[5]="請輸入數字！"
		  errmsg[6]="請輸入英文字母！"
		  errmsg[7]="無效的Email格式！\n\n例：ptis@ptis.com.tw"
		  errmsg[8]="無效的郵遞區號！"
		  errmsg[9]="請輸入整數！"
		  errmsg[10]="無效的日期格式！\n\n例：1999/1/1"
		  errmsg[11]="請輸入最少"+arguments[1]+"位數！"
		  errmsg[12]="錯誤的電話號碼格式!\n\n例:02-27377000"
		  errmsg[13]="還有欄位尚未填寫！"
		  errmsg[14]="請填寫英文字母或整數！"
		  errmsg[15]="無效的日期!"
		  errmsg[16]="無效的小時格式!"
		  errmsg[17]="無效的分鐘格式!"
		  errmsg[18]="依照現行法令，請輸入10位或15位之晶片號碼！"
		  errmsg[19]="手續費不得大於300元，請重新輸入！"
		  errmsg[20]="表單序號應為10碼！"
			
	alert(errmsg[index])
}

//事件指定
function eventSet(){

	document.forms[0].onsubmit=submitCheck;
	for(i=0;i<document.forms[0].elements.length;i++){
		if (document.forms[0].elements[i].type=="text"){
			document.forms[0].elements[i].onblur=checkValue;
		}
	}
}

//TextBox 的 constructor
 function textBox(obj){
	//properties
	this.checkType=obj.check.charAt(0);
	this.allowNull=obj.check.charAt(1);
	this.minLength=obj.check.substring(2);
	this.value=obj.value.trimSpace();

	//method
	this.focus=obj.focus;
	this.select=obj.select;
	this.disabled=obj.disabled;
}

//form送回server 前的Check
function submitCheck(){

	var inputobj=this.tags("input");

		for(var i=0;i<inputobj.length;i++){
			if(inputobj[i].type=="text"){
				var boxobj=new textBox(inputobj[i])
				if(boxobj.allowNull==0&&boxobj.value.isEmpty()){
					if(boxobj.disabled==false){
					errmsg(13);
					boxobj.focus();
					return false;
					}
				}
			}
		}
	return true;
}

//textbox的檢查
 function checkValue(){
	//建立物件
	var boxobj=new textBox(this);
	//檢查是否為空值
	if(boxobj.value.isEmpty()) return;
	//檢查位數
	if(boxobj.value.length < boxobj.minLength){
		errmsg(11,boxobj.minLength);
		boxobj.focus();
		return;
	}

    //各種格式檢查
	switch(boxobj.checkType){
			case "I":idnoCheck(boxobj);break;
     		case "F":numCheck(boxobj);break;
			case "A":alphaCheck(boxobj);break;
			case "E":emailCheck(boxobj);break;
			case "Z":zipCheck(boxobj);break;
    		case "W":intCheck(boxobj);break;
			case "D":dateCheck(boxobj);break;
			case "T":telCheck(boxobj);break;
			case "B":iaCheck(boxobj);break;
			case "C":cdateCheck(boxobj);break;
			case "H":hourCheck(boxobj);break;
			case "M":minuteCheck(boxobj);break;
			case "U":break;
			case "P":chipidCheck(boxobj);break;
			case "G":injchargeCheck(boxobj);break;
			case "R":regnumCheck(boxobj);break;
	}
}

 //數字鎖定(使用KeyPress觸發)
 function lockNum(){

		if ((event.keyCode < 47) || (event.keyCode > 58)) 
		     event.keyCode = 0;
	
 }

 //英文字母鎖定(使用KeyPress觸發)
 function lockAlpha(){
 
	if ((event.keyCode < 65) || (event.keyCode > 90&&event.keyCode <97 ||event.keyCode >122 ))
        event.keyCode = 0;
 }

//鎖定
function lock(){

	for (i=0;i<this.elements.length;i++){
		if (this.elements[i].name=="edit") continue;
		this.elements[i].color="gray";
		this.elements[i].disabled=true;
		for(j=0;j<arguments.length;j++){
			if(this.elements[i].name==arguments[i]){this.elements[i].disabled=false;this.elements[i].color="black";}
		}
	}
}

//解除
function unlock(){
	
	for (i=0;i<this.elements.length;i++){
		if (this.elements[i].name=="edit"){this.elements[i].disabled=true;continue;}
		this.elements[i].disabled=false;
		this.elements[i].color="black";
		for(j=0;j<arguments.length;j++){
			if(this.elements[i].name==arguments[i]){this.elements[i].readOnly=true;this.elements[i].style.color="red"}
		}
	}

	for (i=0;i<this.elements.length;i++ ){
		if (this.elements[i].type=="text"&&!this.elements[i].readOnly){
			this.elements[i].focus();
			break;
		}
	}

}

//檢查身分證號碼
function idnoCheck(obj){

	with(obj){
		if(!value.charAt(0).isAlpha()){errmsg(2);obj.focus();return;}
		if(!value.allowLength(10)){errmsg(1);obj.focus();return;}
		if(!value.substring(1).isNum()){errmsg(3);obj.focus();return;}
		//if(!value.isIDNo()){errmsg(4);obj.focus();}
		if ((value.charAt(0)=="x") || (value.charAt(0)=="X"))
		{
		}
		else
			{
			if(!value.isIDNo()){
				if(confirm("身分證號碼不對，請重新確認，若身分證號碼確認無誤，請按「取消」鍵"))
				{obj.focus();}
				else{}
			}
		}
	}
}

//檢查數字和英文字
function iaCheck(obj){

	with(obj){
		if(!value.isIA()){errmsg(14);obj.focus();}
	}
}

//檢查數字
function numCheck(obj){

	with(obj){
		if(!value.isNum()){errmsg(5);obj.focus();}
	}
}

//檢查英文字母
function alphaCheck(obj){

	with(obj){
		if(!value.isAlpha()){errmsg(6);obj.focus();}
	}
}

//檢查E-mail
function emailCheck(obj){

	with(obj){
		if((value.indexOf("@")==-1|| value.indexOf(".")==-1)){errmsg(7);obj.focus();}
	}
 }

  //檢查郵遞區號
 function zipCheck(obj){

 	with(obj){
		if(!(value.allowLength(3)&&value.isNum())){errmsg(8);obj.focus();}
	}
 }

//檢查整數
function intCheck(obj){

	with(obj){
		if(!value.isInt()){errmsg(9);obj.focus();}
	}
}

//檢查日期
function dateCheck(obj){

	with(obj){
		if(!value.isDate()){errmsg(10);obj.focus();}
	}
}

//檢查電話號碼
function telCheck(obj){

  with(obj){
	if(value.length < 6) {errmsg(12);obj.focus();}
	else{
		for(i=0;i<value.length;i++){
				if(value.charAt(i)=="-" || value.charAt(i)=="(" || value.charAt(i)==")") continue;
				if(value.charAt(i) < "0" || value.charAt(i) > "9"){errmsg(12); obj.focus();return;} 
		}
		} 
  }
}

//檢查民國日期
function cdateCheck(obj){

	var tempArray=obj.value.split("/")
	if(tempArray.length==3){
		if(tempArray[0].isInt()&&tempArray[0].isInt()&&tempArray[0].isInt()){
			if(parseInt(tempArray[0]) <150){
				tempArray[0]=parseInt(tempArray[i])+1911;
				var temp=tempArray.join("/")
				if(temp.isDate()) return;
			}
		}
	}
	errmsg(15);
	obj.focus();
}

//
//檢查小時
function hourCheck(obj){

  if(obj.value.isInt()){
	if(parseInt(obj.value) <= 12 && parseInt(obj.value) >= 0) return;
  }
  errmsg(16);
  obj.focus();
}

//檢查分鐘
function minuteCheck(obj){

  if(obj.value.isInt()){
	if(parseInt(obj.value) <  60 && parseInt(obj.value) >= 0) return;
  }
  errmsg(17);
  obj.focus();
}

//檢查晶片號碼
function chipidCheck(obj){

	with(obj){
		if(!value.isIA()){errmsg(14);obj.focus();return;}
		if(value.length<10 || value.length>20 ){errmsg(18);obj.focus();}
	}
}

//檢查植入手續費
function injchargeCheck(obj){

	with(obj){
		if(!value.isInt()){errmsg(9);obj.focus();}
		if(value.setMin(301)){errmsg(19);obj.focus();}
	}
}

//檢查表單序號
function regnumCheck(obj){

	with(obj){
		if(!value.isIA()){errmsg(14);obj.focus();return;}
		if(value.length!=10){errmsg(20);obj.focus();}
	}
}
