﻿<!--
/*
 * $Rev: 5950 $
 * $Author: nel_lee $
 * $Date: 2007-09-07 10:17:19 +0800 $
 *
 * function傳入值與說明:
 * 1.NumOnly : 限制只能輸入數字 HTML之INPUT 標籤中加入「onKeypress="if (!NumOnly(event)) return false;"」
 * 2.getSelectedText : 回傳 <select> 選擇的 text
 * 3.toDateNumeral : 傳入 year , month , day , 回傳 yyyymmdd
 * 4.getSpaceLength : 回傳空白字元的長度
 * 5.checkDate : 檢查日期格式 , 回傳 true / false
 */

var error_color = "#FFCCFF";
var normal_color = "#FFFFFF";

function NumOnly(ev){
    var keypress;
    if (!document.all)     // 如果不是IE
    {
        keypress    = ev.charCode;
        if (keypress!=0 && !(keypress < 45 && keypress > 57))
        {
            return false;
        }
    } else {
        keypress    = ev.keyCode;
        if (!(keypress > 47 && keypress < 59))
        {
            event.returnValue = false;
        }
    }
    return true;
}

function getSelectedText(obj) {
    var i = obj.selectedIndex;
    var ret = obj.options[i].text;
    return ret;
}

function toDateNumeral(val_y,val_m,val_d) {
    if (isNaN(val_y) || isNaN(val_m) || isNaN(val_d))
        return -1;
    var yy = parseInt(val_y)* 10000;
    var mm = parseInt(val_m)* 100;
    var dd = parseInt(val_d);
    return yy+mm+dd;
}

function getSpaceLength(val) {
    var len = 0;
    for( var idx = 0 ; idx < val.length ; idx++ )
        if( val.charAt(idx) == ' ')
            len++;
    return len;
}

function isDate(val_y,val_m,val_d) {
    if (isNaN(val_y) || isNaN(val_m) || isNaN(val_d))
        return false;
    var yy = parseInt(val_y*1);
    var mm = parseInt(val_m*1);
    var dd = parseInt(val_d*1);
    if(yy < 1911) return false;
    if(mm > 12 || mm < 1) return false;
    if(dd > 31 || dd < 1) return false;
    
    var val_date = (new Date(yy,mm-1,dd));
    return (val_date.getMonth()+1) == mm && val_date.getDate() == dd;
}

function isFormSubObject(FSObj) {
    if (!FSObj || !FSObj.getObj()) {
        alert("not Object"+FSObj);
        FSObj.getObj().value();
        return false;
    }
    return true;
}

function toBoolean(val) {
    if (typeof(val) == "boolean") 
        return val;
    return false;
}
 
function setBackgroundColor(obj,color) {
    if (obj == null || !obj.style)
        return;
    obj.style.backgroundColor = color;
}

function showMessage(FSObj_ary) {
    var msg = "";
    var cnt = 0;
    for (var i=0; i<FSObj_ary.length; i++) {
        if (FSObj_ary[i].getMessage().length != 0) {
            msg += cnt++ +"." + FSObj_ary[i].getMessage();
            setBackgroundColor(FSObj_ary[i].getObj(),error_color);
        }
    }
    alert(msg);
}
function showMessageNoAlert(FSObj_ary) {
    var msg = "";
    var cnt = 0;
    for (var i=0; i<FSObj_ary.length; i++) {
        if (FSObj_ary[i].getMessage().length != 0) {
            msg += cnt++ +"." + FSObj_ary[i].getMessage();
            setBackgroundColor(FSObj_ary[i].getObj(),error_color);
        }
    }
}    
	
function getDateArray(datestr,spiltstr)
{
	 var lthdatestr
	 if (datestr != "") lthdatestr= datestr.length ;
	 else return false;
  
	 //var datestr;
	 var YMD=Array();
	 var status;
	 status=0;
	 YMD[0] = "";
	 YMD[1] = "";
	 YMD[2] = "";
 
	for (i=0;i<lthdatestr;i++)
	 { 
		if (datestr.charAt(i)== '-')  status++;
	//alert("Invalid format of date!");
		if (status>2) return false;
		if ((status==0) && (datestr.charAt(i)!= '-')) YMD[0]=YMD[0]+datestr.charAt(i);
		if ((status==1) && (datestr.charAt(i)!= '-')) YMD[1]=YMD[1]+datestr.charAt(i);
		if ((status==2) && (datestr.charAt(i)!= '-')) YMD[2]=YMD[2]+datestr.charAt(i);
	 }

	if ((YMD[0].length!=4) || (YMD[1].length!=2) || (YMD[2].length!=2)) return false;

	return YMD;
}	


	
	
function checkSId(val_sid) {//身份證驗證
	if(val_sid.lenth != 10) return -1;
	return 0;
}
		
	
function ValidateJS() {
    this.isError = isError;
    this.checkString = checkString;
	this.checkStringLength = checkStringLength;
    this.checkNumeric = checkNumeric;
	this.checkDate = checkDate;
	this.checkEmail = checkEmail;
	this.checkSId = checkSId;//身份證驗證
	this.checkTB = checkTB;
    var error = false;
	function checkEmail(FSObj) {
		var ret = 0;
		var obj = FSObj.getObj();
			if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(obj.value))){
					ret = 5002;
			}
		if (ret != 0) {
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),""));
        }
		return ret;
	}
	function checkTB(FSObj){
		var ret = 0;
		var obj = FSObj.getObj();
		var tbNum = new Array(1,2,1,2,1,2,4,1);
		var temp = 0;
		var total = 0;
		for(var i = 0; i < tbNum.length ;i ++){
				temp = obj.value.charAt(i) * tbNum[i];
				total += Math.floor(temp/10)+temp%10;
		}
		if(total%10==0 || (total%10==9 && obj.value.charAt(6)==7))
			ret = 0;
		else 
			ret = 3002;

		
		if (ret != 0) {
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),""));
        }
		return ret;
	}
		
	function checkSId(FSObj){
		var ret = 0;
		var obj = FSObj.getObj();
		//if(obj.value.length != 10) ret = 3001;
		
		var m=new Array();
		var tempstr;
		var res;
		
		for(i=0;i<=9;i++)
			m[i+1]=obj.value.substr(i,1);
	
		tempstr = m[1];
		switch(tempstr.toUpperCase()){
			case "A":	m[1]=1  ;	break;
			case "B":	m[1]=10 ;	break;
			case "C":	m[1]=19 ;	break;
			case "D":	m[1]=28 ;	break;
			case "E":	m[1]=37 ;	break;
			case "F":	m[1]=46 ;	break;
			case "G":	m[1]=55 ;	break;
			case "H":	m[1]=64 ;	break;			
			case "I":	m[1]=39 ;	break;
			case "J":	m[1]=73 ;	break;
			case "K":	m[1]=82 ;	break;
			case "L":	m[1]=2  ;	break;
			case "M":	m[1]=11 ;	break;
			case "N":	m[1]=20 ;	break;
			case "O":	m[1]=48 ;	break;
			case "P":	m[1]=29 ;	break;	
			case "Q":	m[1]=38 ;	break;
			case "R":	m[1]=47 ;	break;
			case "S":	m[1]=56 ;	break;
			case "T":	m[1]=65 ;	break;
			case "U":	m[1]=74 ;	break;
			case "V":	m[1]=83 ;	break;
			case "W":	m[1]=21 ;	break;
			case "X":	m[1]=3  ;	break;
			case "Y":	m[1]=12 ;	break;
			case "Z":	m[1]=30 ;	break;					
			default :   res=0 ;
		}

		if(m[2]>2 || m[2]<1) res=0;
		
		if(res==0){
			ret = 3001;
		} else {
			var sum=m[1]+m[2]*8+m[3]*7+m[4]*6+m[5]*5+m[6]*4+m[7]*3+m[8]*2+parseInt(m[9])+parseInt(m[10]);
			if(sum%10==0) {
				ret = 0;
			} else {
				ret = 3001;
			}
		}
		
		if (ret != 0) {
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),""));
        }
		return ret;
	}
	
    function checkDate(FSObj,isRequire,spiltstr) { //
        isFormSubObject(FSObj);
        var obj = FSObj.getObj();
        setBackgroundColor(obj,normal_color);
        var ret = 0;
        var YMD = Array();
        var val = obj.value;
        if (toBoolean(isRequire) && val.length == 0) {
            ret = 1101;
        }

		YMD = getDateArray(val,spiltstr);
		if(!getDateArray(val,spiltstr)){
			 ret = 2003;
		}
		
		var yy = parseInt(YMD[0]);
		var mm = parseInt(YMD[1]);
		var dd = parseInt(YMD[2]);
		if(ret ==0 && yy < 1911) ret = 2001;
		if(ret ==0 && (mm > 12 || mm < 1)) ret = 2002;
		if(ret ==0 && (dd > 31 || dd < 1)) ret = 2003;
		if(ret ==0){
			var val_date = (new Date(yy,mm,dd));
			if(!(val_date.getMonth() == mm && val_date.getDate() == dd)) ret = 2003;
		}
        if (ret != 0) {
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),""));
		}
        return ret;
    }


    function checkString(FSObj,isRequire,isSpace,len,isBig5) { //
        isFormSubObject(FSObj);
        var obj = FSObj.getObj();
        setBackgroundColor(obj,normal_color);
        var ret = 0;
        
        var val = obj.value;
        var valLength=0;
        //判斷是否為中文碼
        if(!isBig5){
				valLength=val.length;
		}
		else{
		    for(var i = 0; i < val.length; i++){
		        if(val.charCodeAt(i) > 0x4E00 && val.charCodeAt(i) < 0x9FA5) {
					valLength+=2;
		        }
		        else{
		        	valLength+=1;
		        }
		    }
	    }
	    
        if (toBoolean(isRequire) && valLength == 0) {
            ret = 1101;
        }
        if (ret ==0 && !toBoolean(isSpace)) {
            if (valLength > 0 && valLength == getSpaceLength(val)) {
                ret = 1102;
            }
        }
        if (ret == 0 && len > 0 && valLength > len) {
            ret = 1103;
        }
        if (ret != 0) {
            error = true;
            var errMsg = getMessage(ret,FSObj.getDesc(),len);
            if(isBig5 && ret==1103)
            	errMsg+="("+comJsMessage_general_screen_message_big5_twobytes+")\n\n";
            FSObj.setMessage(errMsg);
        }
        return ret;
    }
	
    function checkStringLength(FSObj,isRequire,isSpace,len,minlen) { //
        isFormSubObject(FSObj);
        var obj = FSObj.getObj();
        setBackgroundColor(obj,normal_color);
        var ret = 0;
        
        var val = obj.value;
        if (toBoolean(isRequire) && val.length == 0) {
            ret = 1101;
        }
        if (ret ==0 && !toBoolean(isSpace)) {
            if (val.length > 0 && val.length == getSpaceLength(val)) {
                ret = 1102;
            }
        }
        if (ret == 0 && len > 0 && val.length > len) {
            ret = 1103;
        }
		
        if (ret != 0) {
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),len));
        }

		if (ret == 0 && val.length < minlen) {
            ret = 1104;
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),minlen));
		}
		return ret;
    }

	function checkNumeric(FSObj,isRequire,minV,maxV) {
        isFormSubObject(FSObj);
        var obj = FSObj.getObj();
        setBackgroundColor(obj,normal_color);
        
        var ret = 0;
        if (isRequire) {
            ret = checkString(FSObj,true,false,0);
        } else {
            ret = checkString(FSObj,false,false,0);
        }
        if (ret == 0 && obj.value.length == 0)
            return 0;
        if (ret == 0 && isNaN(obj.value))
            ret = 1201;
         
        var temp = "";
        if (ret == 0 && minV != null && !isNaN(minV)) {
            if (parseInt(obj.value) < parseInt(minV)) {
                ret = 1202;
                temp = minV;
            }
        }
        if (ret == 0 && maxV != null && !isNaN(maxV)) {
            if (parseInt(obj.value) > parseInt(maxV)) {
                ret = 1203;
                temp = maxV;
            }
        }
        if (ret != 0) {
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),temp));
        }
        return ret;
    }
  
    function isError() {
        return error;
    }
}

function FormSubObject(val_obj,val_desc) {
    this.getObj = getObj; 
    this.getDesc = getDesc;
    this.getMessage = getMessage;
    this.setMessage = setMessage;
    
    var obj = val_obj;
    var desc = val_desc == null?"":val_desc.toString();
    var message = "";
    
    function getObj() {
        return obj;
    }
    function getDesc() {
        return desc;
    }
    function isError() {
        return error;
    }
    function getMessage() {
        return message;
    }
    function setMessage(val_msg) {
	  message = val_msg;
		
    }
}
