<!--
/*
 * $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;
    //alert(keypress);
        if (keypress!=0 )
        {
            if (keypress < 48 || 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 checkEmailFormate(val_eamil) {
    if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(val_eamil))){
        return -1;
    }
    return 0;
}
	
	
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.checkNumericLength=checkNumericLength;
	this.checkSId = checkSId;//身份證驗證
    var error = false;
	
	function checkSId(FSObj){
		var ret = 0;
		var obj = FSObj.getObj();
		if(obj.value.length != 10) 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 checkEmail(FSObj,isRequire) { //
        isFormSubObject(FSObj);
        var obj = FSObj.getObj();
        setBackgroundColor(obj,normal_color);
        var ret = 0;
        
        var val = obj.value;
        var valLength=0;
        //判斷是否為中文碼
		    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 = 5001;
        }
        if (valLength > 0) {
            if(checkEmailFormate(val) == -1) ret = 5002;
        }
		if (ret != 0) {
				error = true;
				var errMsg = getMessage(ret,FSObj.getDesc());
				FSObj.setMessage(errMsg);
			}
        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 checkNumericLength(FSObj,isRequire,isSpace,len,minlen) {
        isFormSubObject(FSObj);
        var obj = FSObj.getObj();
        setBackgroundColor(obj,normal_color);
        var val = obj.value;
        var ret = 0;
        if (isRequire) {
            ret = checkStringLength(FSObj,isRequire,isSpace,len,minlen);
        } else {
            ret = checkString(FSObj,false,false,0);
        }

		if (ret == 0 && obj.value.length == 0)  return 0;
	
		for(var i = 0; i < val.length; i++){
				if(!(parseInt(val[i]) >=0 && parseInt(val[i]) <=9)) {
				ret = 1201;
			}


		}	
	
	
        if (ret != 0) {
            error = true;
            FSObj.setMessage(getMessage(ret,FSObj.getDesc(),len));
        }
        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;
		
    }
}
