//表單檢查
//三個為一組: "欄位名", "錯誤訊息", "格式"

//一般檔案
//"欄位名", "副檔名1|副檔名2|副檔名3...|錯誤訊息", "格式"

//指定檔名
//"欄位名", "檔案名稱.副檔名|錯誤訊息", "格式"
function chkform(){
	var msg = "", args = chkform.arguments;
	var formName = args[0];
	for(i=1;i<args.length;i+=3){
		for(j=0;j<document.forms[formName].length;j++) {
			if(document.forms[formName].elements[j].name == args[i]){
				var temp = j;
				val = document.forms[formName].elements[j].value;
			}
		}
		//字串
		if(args[i+2] == "isStr") msg = isStr(val,args[i+1],msg);
		if(args[i+2] == "orStr") msg = orStr(val,args[i+1],msg);
		//文字區塊
		if(args[i+2] == "isText") msg = isText(val,args[i+1],msg);
		if(args[i+2] == "orText") msg = orText(val,args[i+1],msg);
		//E-Mail
		if(args[i+2] == "isMail") msg = isMail(val,args[i+1],msg);
		if(args[i+2] == "orMail") msg = orMail(val,args[i+1],msg);
		//數字
		if(args[i+2] == "isNum") msg = isNum(val,args[i+1],msg);
		if(args[i+2] == "orNum") msg = orNum(val,args[i+1],msg);
		//身份證字號
		if(args[i+2] == "ckIdCard") msg = ckIdCard(val,args[i+1],msg);
		//密碼
		if(args[i+2] == "ckPass"){
			str = args[i].split("|");
			for(j=0;j<document.forms[formName].length;j++) {
				if(document.forms[formName].elements[j].name == str[0]) pass0 = document.forms[formName].elements[j].value;
				if(document.forms[formName].elements[j].name == str[1]) pass1 = document.forms[formName].elements[j].value;
			}
			msg = ckPass(pass0,pass1,args[i+1],msg);
		}
		//下拉選單
		if(args[i+2] == "isSel") msg = isSel(val,args[i+1],msg);
		//日期格式
		if(args[i+2] == "isDate") msg = isDate(val,args[i+1],msg);
		//檔案
		if(args[i+2] == "isFile"){
			str = args[i+1].split("|");
			msg = isFile(val,str,str[str.length-1],msg);
		}
		if(args[i+2] == "orFile"){
			str = args[i+1].split("|");
			msg = orFile(val,str,str[str.length-1],msg);
		}
		//指定檔案名稱
		if(args[i+2] == "isAFile"){
			str = args[i+1].split("|");
			msg = isAFile(val,str[0],str[1],msg);
		}
		if(args[i+2] == "orAFile"){
			str = args[i+1].split("|");
			msg = orAFile(val,str[0],str[1],msg);
		}
	}
	if(msg){
        if(parent.document.getElementById("pause")){
            if(parent.document.getElementById("pause").style.display=='' ){
                ClsPrompt();
            }
        }
		alert(msg);
		return false;
	}else return true;
}

//去除前後空白
function trim(strvalue){
	ptntrim = /(^\s*)|(\s*$)/g;
	return strvalue.replace(ptntrim,""); 
}

//字串檢查( 必填欄位 )
function isStr(strvalue,filed,msg){
	if(!trim(strvalue) || /\s{2}/.test(strvalue) || /[%\\\'\"]/.test(strvalue) || /mime/i.test(strvalue)) msg = msg?msg +filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//字串檢查( 非必填欄位 )
function orStr(strvalue,filed,msg){
	if(trim(strvalue).length > 0) if(/\s{2}/.test(strvalue) || /[%\\\'\"]/.test(strvalue) || /mime/i.test(strvalue)) msg = msg?msg +filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//文字區塊( 必填欄位 )
function isText(strvalue,filed,msg){
	if(!trim(strvalue) || /[%\\\'\"]/.test(strvalue) || /mime/i.test(strvalue)) msg = msg?msg +filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//文字區塊( 非必填欄位 )
function orText(strvalue,filed,msg){
	if(trim(strvalue).length > 0) if(/[%\\\'\"]/.test(strvalue) || /mime/i.test(strvalue)) msg = msg?msg +filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//Mail 檢查( 必填欄位 )
function isMail(strvalue,filed,msg){
	if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.\w+$/.test(strvalue))) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//日期 檢查( 必填欄位 )
function isDate(strvalue,filed,msg){
	if(!/^([0-9]){4}\-([0-9]){2}\-([0-9]){2}$/.test(strvalue)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
    else{
       var tmp = strvalue.split("-");
       yea=tmp[0];
       mon=tmp[1];
       da=tmp[2];
       if( (parseInt(yea,10) < 1000) || (parseInt(yea,10) > 2999) ){//年份
            msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
            return msg;
       }
       if( (parseInt(mon,10) < 1) || (parseInt(mon,10) > 12) ){//月份
       
            msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
            return msg;
       }
       if (parseInt(da,10) < 1){//日
            msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
            return msg;
       }         

       if( ((parseInt(mon,10) == 1) || (parseInt(mon,10) == 3) || (parseInt(mon,10) == 5) || (parseInt(mon,10) == 7) || 
            (parseInt(mon,10) == 8) || (parseInt(mon,10) == 10) || (parseInt(mon,10) == 12)) && (parseInt(da,10) > 31) ){
            msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
            return msg;
       }   
       
       if( ((parseInt(mon,10) == 2) || (parseInt(mon,10) == 4) || (parseInt(mon,10) == 6) || (parseInt(mon,10) == 9) || (parseInt(mon,10) == 11) ) && (parseInt(da,10) > 30) ){
            msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
            return msg;
       }   
       if(parseInt(mon,10) == 2){//月份
         if(( (parseInt(yea,10) % 4) == 0) && (parseInt(da,10) > 29) ){
                msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
                return msg;
         }
         else
           if((parseInt(yea,10) % 4 != 0) && (parseInt(da,10) > 28)){         
                msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
                return msg;
           }
       }            
       
	}
        //if(parseInt(tmp[1]) > 12 || parseInt(tmp[2]) > 31) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
    
    return msg;
}

//Mail 檢查( 非必填欄位 )
function orMail(strvalue,filed,msg){
	if(strvalue.length > 0) if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.\w+$/.test(strvalue))) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//數字檢查( 必填欄位 )
function isNum(strvalue,filed,msg){
	if(!/^[0-9#\-]+$/.test(strvalue)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//數字檢查( 非必填欄位 )
function orNum(strvalue,filed,msg){
	if(strvalue.length > 0) if(!/^[0-9#\-]+$/.test(strvalue)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}



//密碼檢查
function ckPass(passwd,ckpass,filed,msg){
	if(!passwd || (passwd != ckpass)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//下拉選單
function isSel(strvalue,filed,msg){
	if(!strvalue) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//檔案檢查( 須上傳 )
function isFile(strvalue,type,filed,msg){
	if(!FILEBASE(strvalue,type)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//檔案檢查( 可上傳 )
function orFile(strvalue,type,filed,msg){
	if(strvalue && !FILEBASE(strvalue,type)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//指定檔案名稱檢查( 須上傳 )
function isAFile(strvalue,fname,filed,msg){
	if(!FILENAME(strvalue,fname)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//指定檔案名稱檢查( 可上傳 )
function orAFile(strvalue,fname,filed,msg){
	if(strvalue && !FILENAME(strvalue,fname)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
	return msg;
}

//檔名資料比對
function FILENAME(obj,fname){
	myfilename = obj.toLowerCase();
	if(myfilename.indexOf(fname) > -1) return true;
	else return false;
}

//副檔名資料比對
function FILEBASE(obj,type){
	myfilename = obj.toLowerCase();
	Ts = type;
	for(k = 0 ; k < Ts.length-1 ; k++){
		if(myfilename.indexOf(Ts[k]) > -1)	return true;
	}
	return false;
}
//身分證字號檢查
function ckIdCard(strvalue,filed,msg){
    strvalue = strvalue.toUpperCase();
    var local=new Array(36)
    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'
    local[34]='I'
    local[35]='O'

    var fl=strvalue.substring(0,1);
    var bok1 = 0;
    var en = ''; 
    for(var i=10;i<=35;i++){
        if(local[i]==fl){
            en =  String(i);
            bok1=1;
            break;
        }
    }
    if(strvalue.substring(1,2)=="1" || strvalue.substring(1,2)=="2"){
        var t = parseInt(en.substring(0,1))+parseInt(en.substring(1,2)*9);
        
        var g = 1;
        for(var k=8;k>=1;k--){
            t+= parseInt(strvalue.substring(g,g+1))*k;
            g++
        }
        var chNum = t%10;
        chNum = parseInt(chNum>0?(10-parseInt(chNum)):0);
        if(chNum!=parseInt(strvalue.substring(9,10))) bok1=false;
    }else bok1=false;
    if(!bok1) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
    else if(!/^[a-zA-Z](1|2)[0-9]{8}$/.test(strvalue)) msg = msg?msg + filed +" error !\n\r":filed +" error !\n\r";
    return msg;
}
