//--------ezuiCheckForm->檢查數據的主程序----------Begin//
//檢查表單的類
function ezuiCheckForm(form){
	this.msgResourse=new ezuiMessageResource();
	this.init=tmEzuiCheckFormInit;
	this.setForm=tmEzuiSetForm;
	this.getForm=tmEzuiGetForm;
	this.setCapture=tmEzuiSetCapture;
	this.getCapture=tmEzuiGetCapture;
	this.checkForm=tmEzuiCheckForm;
	this.showMessage=tmEzuiShowMessage;
	
	this.clearMessage=tmEzuiClearMessage;
	
	this.checkObject=tmEzuiCheckObj;
	//檢查是否為空
	this.isEmpty=tmEzuiIsEmpty;
	//檢查是否為數字，參數0=默認值
	this.isInteger=tmEzuiIsInteger;
	//檢查是否為浮點數,參數0=默認值
	this.isFloat=tmEzuiIsFloat;
	//檢查mask
	this.mask=tmEzuiMask;
	//檢查是否為信用卡號碼
	this.isCreditCard=tmEzuiIsCreditCard;
	//檢查是否為有效的email
	this.isEmail=tmEzuiIsEmail;
	//檢查最小長度
	this.checkMinlength=tmEzuiCheckMinlength;
	//檢查最大長度
	this.checkMaxlength=tmEzuiCheckMaxlength;
	//檢查臺灣公民的身份ID
	this.checkTwSID=tmEzuiCheckTwSID;
	
	this.getRadioValue=tmEzuiGetRadioValue;
	this.disableOtherSubmit=tmEzuiDisableOtherSubmit;
	this.init(form);
	return this;
}
function tmEzuiCheckFormInit(form){
	this.DebugEnable=false;
	this.focused=false;
	this.lableFocused=false;
	//validator rules
	this._Required="required";
	this._Integer="integer";
	this._Float="float";
	this._Mask="mask";
	this._CreditCard="creditCard";
	this._Email="email";
	this._Minlength="minlength";
	this._Maxlength="maxlength";
	this._TwSID="twSID";
	//form表單元件類型
	this._TextType="text";
	this._TextAreaType="textarea";
	this._HiddenType="hidden";
	this._CheckBoxType="checkbox";
	this._RadioType="radio";
	this._SelectOneType="select-one";
	this._SelectMultiple="select-multiple";
	this._File="file";
	
	this.util=new ezuiUtil();
	this._form=(form!=null)?form:null;
	this._capture="";
	this.clearMessage();
	
	this.retCode = EzuiCheckFormRetCodes.otherError;
}
var EzuiCheckFormRetCodes = {
	success : 0,
	otherError : -1,
	notFindElement : -2
};
function tmEzuiClearMessage(){
	for(var j=0;j<document.forms.length;j++){
		form_objects=document.forms[j].elements;
		var lastarea="";
		for (var i = 0;i < form_objects.length;i++){
			try{
				var objname=form_objects[i].name;
				var msgname=objname+".msg";
				document.getElementById(msgname).innerHTML="";
			}catch(e){
			}
			try{
				var objname=form_objects[i].name;
				for(var ii=0;ii<15;ii++){
					var msgname=objname+".msg["+ii+"]";
					var arrobj=document.getElementById(msgname);
					if(arrobj==null){
						break;
					}else{
						arrobj.innerHTML="";
					}
				}
			}catch(e){
			}
		}
	}
}
function tmEzuiSetForm(form){
	this._form=form;
}
function tmEzuiGetForm(){
	return this._form;
}
function tmEzuiSetCapture(capture){
	this._capture=capture;
}
function tmEzuiGetCapture(){
	return this._capture;
}
function tmEzuiCheckForm(){
	return false;
}
function tmEzuiShowMessage(elements,i,errortype,p0,p1,p2,p3){
	p0=this.getCapture();
	try{
		var msglable=document.getElementById(elements[i].name+".msg");
		if(msglable!=null){
			msglable.innerHTML=this.msgResourse.getMessage(errortype,p0,p1,p2,p3);
			try{
				if(!this.focused&&!this.lableFocused) msglable.focus();
				this.lableFocused=true;
			}catch(e){}
		}	
	}catch(e){}
	try{
		var msglable=document.getElementById(elements[i].name+".msg["+i+"]");
		if(msglable!=null){
			msglable.innerHTML=this.msgResourse.getMessage(errortype,p0,p1,p2,p3);
			try{
				if(!this.focused&&!this.lableFocused) msglable.focus();
				this.lableFocused=true;
			}catch(e){}
		}	
	}catch(e){}
}
//檢查數據
function tmEzuiCheckObj(objName,depend,df){
	
	//var obj=this.getForm().elements(objName);
	var obj=this.util.getFormElements(this.getForm(),objName);
	if(obj==null){
		if(this.DebugEnable) alert("Not find element ["+objName+"]!");
		this.retCode=EzuiCheckFormRetCodes.notFindElement;
		return false;
	}else if(this.util.isArray(obj) && obj.length<1){
		if(this.DebugEnable) alert("Not find element ["+objName+"]!");
		this.retCode=EzuiCheckFormRetCodes.notFindElement;
		return false;
	}
	switch(depend){
		case this._Required:
			return !(this.isEmpty(obj,df));
		break;
		case this._Integer:
			return (this.isInteger(obj,df));
		break;
		case this._Float:
			return (this.isFloat(obj,df));
		break;
		case this._Mask:
			return (this.mask(obj,df));
		break;
		case this._CreditCard:
			return this.isCreditCard(obj,df);
		break;
		case this._Email:
			return this.isEmail(obj,df);
		break;
		case this._Minlength:
			return this.checkMinlength(obj,df);
		break;
		case this._Maxlength:
			return this.checkMaxlength(obj,df);
		break;
		case this._TwSID:
			return this.checkTwSID(obj,df);
		break;
	}
	return true;
}
//檢查是否為空
function tmEzuiIsEmpty(obj,df){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
		case this._HiddenType:
		case this._File:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(this.util.isNullString(obj[i].value)){
					if(df!=null){
						obj[i].value=df;
					}else{
						try{
							if(!this.focused) obj[i].focus();
							this.focused=true;
						}catch(e){}
						this.showMessage(obj,i,this.msgResourse._MSG_REQUIRED_ERROR_TYPE);
					}
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.success;
				return true;
			}
		break;
		case this._CheckBoxType:
		case this._RadioType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(obj[i].checked){
					j++;
				}
			}
			if(j==0){
				try{
					if(!this.focused) obj[0].focus();
					this.focused=true;
				}catch(e){}
				this.showMessage(obj,0,this.msgResourse._MSG_CHECKBOX_REQUIRED_ERROR_TYPE);
				//this.retCode=EzuiCheckFormRetCodes.success;
				return true;
			}
		break;
		case this._SelectOneType:
		case this._SelectMultiple:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(obj[i].selectedIndex==-1){
					if(df!=null){
						obj[i].selectedIndex=df;
					}else{
						try{
							if(!this.focused) obj[i].focus();
							this.focused=true;
						}catch(e){}
						this.showMessage(obj,i,this.msgResourse._MSG_CHECKBOX_REQUIRED_ERROR_TYPE);
					}
					j++;
				}
			}
			if(j>0){ 
				this.retCode=EzuiCheckFormRetCodes.success;
				return true;
			}
		break;
	}
	this.retCode=EzuiCheckFormRetCodes.otherError;
	return false;
}
//檢查是否為數字，參數0=默認值
function tmEzuiIsInteger(obj,df){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
		case this._HiddenType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && !(obj[i].value.toString().regExpTest(/^(\d)*$/))){
					//設置默認值
					if(df!=null){
						obj[i].value=df;
					}else{
						this.showMessage(obj,i,this.msgResourse._MSG_INTEGER_FORMATE_ERROR_TYPE);
					}
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
//檢查是否為浮點數,參數0=默認值
function tmEzuiIsFloat(obj,df){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
		case this._HiddenType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && !(obj[i].value.toString().regExpTest(/^(\d)*(\.){0,1}(\d)*$/))){
					//設置默認值
					if(df!=null){
						obj[i].value=df;
					}else{
						this.showMessage(obj,i,this.msgResourse._MSG_FLOAT_FORMATE_ERROR_TYPE);
					}
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
//檢查值是否符合mask
function tmEzuiMask(obj,p){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && !(obj[i].value.toString().regExpTest(p))){
					this.showMessage(obj,i,this.msgResourse._MSG_MASK_FORMATE_ERROR_TYPE);
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
//檢查是否為信用卡號碼
function tmEzuiIsCreditCard(obj,p){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && !this.util.isCreditCard(obj[i].value.toString(),p)){
					this.showMessage(obj,i,this.msgResourse._MSG_CREDITCARD_FORMATE_ERROR_TYPE);
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
//檢查是否為有效的email
function tmEzuiIsEmail(obj,p){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && !this.util.isEmail(obj[i].value.toString())){
					this.showMessage(obj,i,this.msgResourse._MSG_EMAIL_FORMATE_ERROR_TYPE);
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
//檢查最小長度
function tmEzuiCheckMinlength(obj,p){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && obj[i].value.toString().length<p){
					this.showMessage(obj,i,this.msgResourse._MSG_MINLENGTH_ERROR_TYPE,null,p);
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
//檢查最大長度
function tmEzuiCheckMaxlength(obj,p){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && obj[i].value.toString().length>p){
					this.showMessage(obj,i,this.msgResourse._MSG_MAXLENGTH_ERROR_TYPE,null,p);
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
//檢查臺灣公民的身份ID
function tmEzuiCheckTwSID(obj,p){
	if(this.util.isArray(obj)){
		var strType=obj[0].type;
	}else{
		var strType = obj.type;
		var tmpobj=new Array();
		tmpobj[0]=obj;
		obj=tmpobj;
	}
	switch(strType){
		case this._TextType:
		case this._TextAreaType:
			var j=0;
			for(var i=0;i<obj.length;i++){
				if(!this.util.isNullString(obj[i].value) && !this.util.isTwSID(obj[i].value.toString())){
					this.showMessage(obj,i,this.msgResourse._MSG_TWSID_ERROR_TYPE,null,p);
					j++;
				}
			}
			if(j>0){
				this.retCode=EzuiCheckFormRetCodes.otherError;
				return false;
			}
		break;
	}
	return true;
}
function tmEzuiGetRadioValue(radioName){
	var obj=this.util.getFormElements(this.getForm(),radioName);
	for(var i=0;i<obj.length;i++){
		if(obj[i].checked){
			return obj[i].value;
		}
	}
	return null;
}
//--------ezuiCheckForm->檢查數據的主程序----------End//
function tmEzuiDisableOtherSubmit()
{            
	//var obj = event.srcElement;
	if(arguments.length==1){
		var obj=arguments[0];
		obj.disabled=true;
	}else{
	    var objs = document.getElementsByTagName('INPUT');
	    for(var i=0; i<objs.length; i++)
	    {
	        if(objs[i].type.toLowerCase() == 'submit')
	        {
	            objs[i].disabled = true;
	        }
	    }
    }   
}
//--------ezuiUtil->本對象用于提供一些通用的方法----------Begin//
function ezuiUtil(){
	this.isArray=ezuiIsArray;
	this.isString=ezuiIsString;
	this.isRegExp=ezuiIsRegExp;
	this.getFormElements=ezuiGetFormElements;
	this.isNullString=ezuiIsNullString;
	this.isCreditCard=ezuiIsCreditCard;
	this.isEmail=ezuiUtilIsEmail;
	this.isTwSID=ezuiUtilIsTwSID;
	
	this.formatMoney=ezuiFormatMoney;
}
function ezuiFormatMoney(priceStr,size,breakchar){
	var ret=null;
	if(priceStr!=null){
		ret="";
		var len=priceStr.length;
		var m=parseInt(len/size);
		var lf=len%size;
		for(var i=0;i<m;i++){
			ret=(lf==0&&(i==m-1)?"":breakchar)+priceStr.substring(len-(i+1)*size, len-i*size)+ret;
		}
		ret=priceStr.substring(0, len-m*size)+ret;
	}
	return ret;
}
function ezuiGetFormElements(f,objname){
	var form_objects=f.elements;
	if(objname==null) return form_objects;
	var returnObj=new Array();
	var j=0;
	var nameIsRegExp=false;
	if(this.isString(objname)){
		if(objname.regExpTest(/^\/(.)*\/$/)){
			nameIsRegExp=true;
		}
	}else{
		if(this.isRegExp(objname)){
			nameIsRegExp=true;
		}else{
			objname=objname.toString();
		}
	}
	for (var i = 0;i < form_objects.length;i++){
		if(form_objects[i].name==objname || (nameIsRegExp && form_objects[i].name.regExpTest(objname))){
			returnObj[j]=form_objects[i];
			j++;
		}
	}
	return returnObj;
}
function ezuiIsArray(obj) {
	try{
		var constructorName=obj.constructor.toString();
   		if (constructorName.indexOf("Array") == -1)
      	return false;
   		else
      	return true;
	}catch(e){
   		return false;
	}
}
function ezuiIsString(obj){
	try{
		var constructorName=obj.constructor.toString();
   		if (constructorName.indexOf("String") == -1)
      	return false;
   		else
      	return true;
	}catch(e){
   		return false;
	}
}
function ezuiIsRegExp(obj){
	try{
		var constructorName=obj.constructor.toString();
   		if (constructorName.indexOf("RegExp") == -1)
      	return false;
   		else
      	return true;
	}catch(e){
   		return false;
	}
}
function ezuiIsNullString(s){
	try{
		if(s.toString().Trim().length!=0) return false
	}catch(e){
		return true;
	}
	return true;
}
function ezuiUtilIsEmail(str) {
	var ccErrorNo = 0;
	var ccErrors = new Array ();

	ccErrors [0] = "Invalid E-mail ID";

	var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if (str.indexOf(at)==-1){
	   ccErrorNo = 0;
	   return false;
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   ccErrorNo = 0;
	   return false;
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    ccErrorNo = 0;
	    return false;
	}

	 if (str.indexOf(at,(lat+1))!=-1){
	    ccErrorNo = 0;
	    return false;
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    ccErrorNo = 0;
	    return false;
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    ccErrorNo = 0;
	    return false;
	 }
	
	 if (str.indexOf(" ")!=-1){
	    ccErrorNo = 0;
	    return false;
	 }

 	return true;				
}

function ezuiIsCreditCard(cardnumber, cardname){
	var ccErrorNo = 0;
	var ccErrors = new Array ();
	
	ccErrors [0] = "Unknown card type";
	ccErrors [1] = "No card number provided";
	ccErrors [2] = "Credit card number is in invalid format";
	ccErrors [3] = "Credit card number is invalid";
	ccErrors [4] = "Credit card number has an inappropriate number of digits";
	 // Array to hold the permitted card characteristics
	var cards = new Array();
	
	// Define the cards we support. You may add addtional card types.
	
	//  Name:      As in the selection box of the form - must be same as user's
	//  Length:    List of possible valid lengths of the card number for the card
	//  prefixes:  List of possible prefixes for the card
	//  checkdigit Boolean to say whether there is a check digit
	
	cards [0] = {name: "Visa", 
	             length: "13,16", 
	             prefixes: "4",
	             checkdigit: true};
	cards [1] = {name: "MasterCard", 
	             length: "16", 
	             prefixes: "51,52,53,54,55",
	             checkdigit: true};
	cards [2] = {name: "DinersClub", 
	             length: "14,16", 
	             prefixes: "300,301,302,303,304,305,36,38,55",
	             checkdigit: true};
	cards [3] = {name: "CarteBlanche", 
	             length: "14", 
	             prefixes: "300,301,302,303,304,305,36,38",
	             checkdigit: true};
	cards [4] = {name: "AmEx", 
	             length: "15", 
	             prefixes: "34,37",
	             checkdigit: true};
	cards [5] = {name: "Discover", 
	             length: "16", 
	             prefixes: "6011,650",
	             checkdigit: true};
	cards [6] = {name: "JCB", 
	             length: "15,16", 
	             prefixes: "3,1800,2131",
	             checkdigit: true};
	cards [7] = {name: "enRoute", 
	             length: "15", 
	             prefixes: "2014,2149",
	             checkdigit: true};
	cards [8] = {name: "Solo", 
	             length: "16,18,19", 
	             prefixes: "6334, 6767",
	             checkdigit: true};
	cards [9] = {name: "Switch", 
	             length: "16,18,19", 
	             prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
	             checkdigit: true};
	cards [10] = {name: "Maestro", 
	             length: "16", 
	             prefixes: "5020,6",
	             checkdigit: true};
	cards [11] = {name: "VisaElectron", 
	             length: "16", 
	             prefixes: "417500,4917,4913",
	             checkdigit: true};
	             
	// Establish card type
	var cardType = -1;
	for (var i=0; i<cards.length; i++) {
	
	  // See if it is this card (ignoring the case of the string)
	  if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
	    cardType = i;
	    break;
	  }
	}
	
	// If card type not found, report an error
	if (cardType == -1) {
	   ccErrorNo = 0;
	   return false; 
	}
	 
	// Ensure that the user has provided a credit card number
	if (cardnumber.length == 0)  {
	   ccErrorNo = 1;
	   return false; 
	}
	  
	// Now remove any spaces from the credit card number
	cardnumber = cardnumber.replace (/\s/g, "");
	
	// Check that the number is numeric
	var cardNo = cardnumber
	var cardexp = /^[0-9]{13,19}$/;
	if (!cardexp.exec(cardNo))  {
	   ccErrorNo = 2;
	   return false; 
	}
	     
	// Now check the modulus 10 check digit - if required
	if (cards[cardType].checkdigit) {
	  var checksum = 0;                                  // running checksum total
	  var mychar = "";                                   // next char to process
	  var j = 1;                                         // takes value of 1 or 2
	
	  // Process each digit one by one starting at the right
	  var calc;
	  for (i = cardNo.length - 1; i >= 0; i--) {
	  
	    // Extract the next digit and multiply by 1 or 2 on alternative digits.
	    calc = Number(cardNo.charAt(i)) * j;
	  
	    // If the result is in two digits add 1 to the checksum total
	    if (calc > 9) {
	      checksum = checksum + 1;
	      calc = calc - 10;
	    }
	  
	    // Add the units element to the checksum total
	    checksum = checksum + calc;
	  
	    // Switch the value of j
	    if (j ==1) {j = 2} else {j = 1};
	  } 
	
	  // All done - if checksum is divisible by 10, it is a valid modulus 10.
	  // If not, report an error.
	  if (checksum % 10 != 0)  {
	   ccErrorNo = 3;
	   return false; 
	  }
	}  
	
	// The following are the card-specific checks we undertake.
	var LengthValid = false;
	var PrefixValid = false; 
	var undefined; 
	
	// We use these for holding the valid lengths and prefixes of a card type
	var prefix = new Array ();
	var lengths = new Array ();
	  
	// Load an array with the valid prefixes for this card
	prefix = cards[cardType].prefixes.split(",");
	    
	// Now see if any of them match what we have in the card number
	for (i=0; i<prefix.length; i++) {
	  var exp = new RegExp ("^" + prefix[i]);
	  if (exp.test (cardNo)) PrefixValid = true;
	}
	    
	// If it isn't a valid prefix there's no point at looking at the length
	if (!PrefixValid) {
	   ccErrorNo = 3;
	   return false; 
	}
	  
	// See if the length is valid for this card
	lengths = cards[cardType].length.split(",");
	for (j=0; j<lengths.length; j++) {
	  if (cardNo.length == lengths[j]) LengthValid = true;
	}
	
	// See if all is OK by seeing if the length was valid. We only check the 
	// length if all else was hunky dory.
	if (!LengthValid) {
	   ccErrorNo = 4;
	   return false; 
	};   
	
	// The credit card is in the required format.
	return true;
}
function ezuiUtilIsTwSID(strTmp){
	var blnPass = strTmp.regExpTest(/^[a-hj-np-zA-HJ-NP-Z][12]\d{8}$/);
	if( blnPass ) {
		var acc;
		var locationNumber = new Array( 1, 10, 19, 28, 37, 46, 55, 64, 73, 82,
			2, 11, 20, 29, 38, 47, 56, 65, 74, 83, 
			3, 12, 21, 30);
		var locationChar = new Array( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','J', 
			'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 
			'U', 'V', 'X', 'Y', 'W', 'Z' );
		for(var i = 0 ; i<26; i++){
			if( strTmp.charAt(0).toUpperCase() == locationChar[i] ){
				acc = locationNumber[i];
				break;
			}
		}
		var d1 = strTmp.charAt(1);
		var d2 = strTmp.charAt(2);
		var d3 = strTmp.charAt(3);
		var d4 = strTmp.charAt(4);
		var d5 = strTmp.charAt(5);
		var d6 = strTmp.charAt(6);
		var d7 = strTmp.charAt(7);
		var d8 = strTmp.charAt(8);
		var d9 = strTmp.charAt(9);
		var checksum = acc+8*d1+7*d2+6*d3+5*d4+4*d5+3*d6+2*d7+1*d8+1*d9;
		var check1 = parseInt(checksum/10);
		var check2 = checksum/10;
		var check3 = (check2-check1)*10;
		if (checksum == check1*10){ 
			;
		} else { 
			if (d9 == (10-check3)) { 
				;
			} else { 
				return false;
			}
		}
	}else{
		return false;
	}
	return true;
}
//--------ezuiUtil->本對象用于提供一些通用的方法----------End//
//--------String->添加/修改String的一下方法----------Begin//
function regExpTest(objRegExp) {
	try{
		var conName=objRegExp.constructor.toString();
		if (conName.indexOf("String") != -1){
			if(objRegExp.regExpTest(/^\/(.)*\/$/)){
				objRegExp=new RegExp(objRegExp.substring(1,objRegExp.length-2));
			}else{
				objRegExp=new RegExp(objRegExp);		
			}
		}
	}catch(e){}
	var strTest = this.toString();
	return objRegExp.test(strTest);
}
String.prototype.regExpTest = regExpTest;
//--------String->添加/修改String的一下方法----------End//
//--------ezuiMessageResource->為ezuiCheckForm提供語言包----------Begin//
//獲取resource信息
function ezuiMessageResource(){
	this.init=tmEzuiMessageResourceInit;
	this.chooseMessage=tmEzuiMessageResourceChooseMessage;
	this.getMessage=tmEzuiMessageResourceGetMessage;
	this.init();
	return this;
}
function tmEzuiMessageResourceGetMessage(type){
  var msg = this.chooseMessage(type);
  //alert(msg);
  for (var i=1; i<arguments.length; i++) {
  	if(arguments[i]!=null){
  		//排出第一個參數i-1=0開始
    	var key = "\\{" + (i-1) + "\\}";
    	var value = arguments[i].toString();
    	var regExp = new RegExp(key, "ig");
    	msg = msg.replace(regExp, value);
    }
  }

  return msg;
}
function tmEzuiMessageResourceChooseMessage(errortype){
	switch(errortype){
		case this._MSG_REQUIRED_ERROR_TYPE:
			return this._MSG_REQUIRED_ERROR;
		break;
		case this._MSG_INTEGER_FORMATE_ERROR_TYPE:
			return this._MSG_INTEGER_FORMATE_ERROR;
		break;
		case this._MSG_FLOAT_FORMATE_ERROR_TYPE:
			return this._MSG_FLOAT_FORMATE_ERROR;
		break;
		case this._MSG_CHECKBOX_REQUIRED_ERROR_TYPE:
			return this._MSG_CHECKBOX_REQUIRED_ERROR;
		break;
		case this._MSG_MASK_FORMATE_ERROR_TYPE:
			return this._MSG_MASK_FORMATE_ERROR;
		break;
		case this._MSG_CREDITCARD_FORMATE_ERROR_TYPE:
			return this._MSG_CREDITCARD_FORMATE_ERROR;
		break;
		case this._MSG_EMAIL_FORMATE_ERROR_TYPE:
			return this._MSG_EMAIL_FORMATE_ERROR;
		break;
		case this._MSG_MINLENGTH_ERROR_TYPE:
			return this._MSG_MINLENGTH_ERROR;
		break;
		case this._MSG_MAXLENGTH_ERROR_TYPE:
			return this._MSG_MAXLENGTH_ERROR;
		break;
		case this._MSG_TWSID_ERROR_TYPE:
			return this._MSG_TWSID_ERROR;
		break;
	}
}


//###################### Solve event in firefox
if(window.addEventListener)
{
	FixPrototypeForGecko();
}
function FixPrototypeForGecko()
{
	HTMLElement.prototype.__defineGetter__("runtimeStyle",element_prototype_get_runtimeStyle);
	window.constructor.prototype.__defineGetter__("event",window_prototype_get_event);
	Event.prototype.__defineGetter__("srcElement",event_prototype_get_srcElement);
}
function element_prototype_get_runtimeStyle()
{
	//return style instead...
	return this.style;
}
function window_prototype_get_event()
{
	return SearchEvent();
}
function event_prototype_get_srcElement()
{
	return this.target;
}

function SearchEvent()
{
	//IE
	if(document.all)
		return window.event;
		
	func=SearchEvent.caller;
	while(func!=null)
	{
		var arg0=func.arguments[0];
		if(arg0)
		{
			if(arg0.constructor==Event)
				return arg0;
		}
		func=func.caller;
	}
	return null;
}

//--------ezuiMessageResource->為ezuiCheckForm提供語言包----------End//


String.prototype.Trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

