﻿//==============================================================
// Designer : Eric Lu
// Description : Validate Form Data
// Version : 2.0
// Create Date : 2003/6/26
// Last Update : 2004/11/4
//==============================================================
function v(ary)
{	
	var flag = true;
	var first = false;
	var ErrMsg = "";
	
	for (var i=0;i<ary.length;i++)
	{					
		
		var obj = document.getElementById(ary[i].ID);
		
		ary[i].Type = ary[i].Type.replace("_null","").replace("_over","");
		
		if (!checkData(obj,ary[i]) )
		{
			
			if (ary[i].N == 0 && trim(obj.value) == "")
			{				
				continue;
			}
			
			if (!first)
			{
				obj.focus();
				first = true;
			}
			ErrMsg += getShowMsg(ary[i],ary[i].CN);
		}
	}

	if (ErrMsg != "")
	{
		alert(ErrMsg);
		flag = false;
	}		
	
	return flag;
}

function checkData(obj,ary)
{	
	var IsValid = true;
	var pat;
	
	switch(ary.Type)
	{	
		case "tn" :	
			IsValid = execRegExp(".",trim(obj.value));
			if (ary.max) 	
			{		
				ary.wordcount = 
					trim(obj.value).replace("\r\n","").replace("\n\r","").replace("\n","").replace("\r","").length;	
				if (ary.wordcount > ary.max)
				{
					IsValid = false;
					ary.Type = "tn_over";					
				}
			}
			
			if (ary.min)
			{
				ary.wordcount = 
					trim(obj.value).replace("\r\n","").replace("\n\r","").replace("\n","").replace("\r","").length;	
				if (ary.wordcount < ary.min)
				{
					IsValid = false;
					ary.Type = "tn_needmore";					
				}			
			}
							
			break;		
		case "tnan" :			
			if (IsValid = execRegExp(".",trim(obj.value)))
			{
			
				IsValid = (!isNaN(obj.value));
			}
			else	
			{					
				ary.Type = "tnan_null";		
			}
			break;
		case "mail" :
			if (IsValid = execRegExp(".",trim(obj.value)))
				IsValid = execRegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$",obj.value);
			else			
				ary.Type = "mail_null";		
			break;			
		case "ddl" :
			if (obj.selectedIndex == 0) IsValid = false;
			break;			
		case "ddlv" :
			if (obj.options[obj.selectedIndex].value == "")
				IsValid = false;
			break;
		case "list" :			
			if (obj.options.length == 0)
				IsValid = false;
			break;
		case "date" :
			if (IsValid = execRegExp(".",trim(obj.value)))	
			{							
				IsValid =  (valid_date(obj.value));		
			}	
			else
			{
				ary.Type = "date_null";
			}				
			break;
	}
			
	return IsValid;
}

function execRegExp(pattern,str)
{
	var pat = new RegExp(pattern);
	return (pat.exec(str))
}

function getShowMsg(ary,columnName)
{		
	var showMsg = "";
	switch(ary.Type)
	{
		case "tn":				
			showMsg = columnName + " : 請輸入 ! \n";
			break;
		case "tn_over":
			showMsg = columnName + " : 字數請在" + ary.max + "個字以內,目前您的字數為"
			+ ary.wordcount +"個字 ! \n";
			ary.Type = "tn";
			break;
		case "tn_needmore":
			showMsg = columnName + " : 字數至少要為" + ary.min + "個字以上,目前您的字數為"
			+ ary.wordcount +"個字 ! \n";
			ary.Type = "tn";
			break;		
		case "tnan_null":
			showMsg = columnName + " : 請輸入 ! \n";
			ary.Type = "tnan";
			break;
		case "tnan":
			showMsg = columnName + " : 請輸入數字 ! \n";
			break;
		case "mail_null":
			showMsg = columnName + " : 請輸入 ! \n";
			ary.Type = "mail";
			break;
		case "mail":
			showMsg = columnName + " : Email格式錯誤 ! \n";
			break;
		case "ddl":
			showMsg = columnName + " : 請選擇 ! \n";
			break;
		case "ddlv":
			showMsg = columnName + " : 請選擇 ! \n";
			break;			
		case "list":
			showMsg = columnName + " : 請選擇 ! \n";
			break;	
		case "date":
			showMsg = columnName + " : 日期錯誤 ! (例:2004/3/1)  \n";
			break;	
		case "date_null":
			showMsg = columnName + " : 請輸入 ! \n";
			ary.Type = "date";	
			break;		
		
	}
	return showMsg;
}

function trim(s) {
	var a=0, b=s.length-1;
	while(a<b) {
		if(s.substr(a,1)!=' ' && s.substr(b,1)!=' ')break;
		if(s.substr(a,1)==' ')a++;
		if(s.substr(b,1)==' ')b--;
	}
	return s.substr(a, b-a+1);
}

function valid_date(datestr){              

	var date_err=false;  //default no error              
	var yy = datestr.substring(0,datestr.indexOf("/",0));
	var	mm = datestr.substring(datestr.indexOf("/",0)+1,datestr.lastIndexOf("/",datestr.length));
	var	dd = datestr.substring(datestr.lastIndexOf("/",datestr.length)+1,datestr.length);

	//alert(yy + ":" + mm + ":" + dd);	

	if(isNaN(yy)||isNaN(mm)||isNaN(dd)){              
		date_err=true;              
	}              
	if (mm<=0 || mm>12){              
		date_err=true;              
	}              
	else{              
		if (mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12){              
			if (dd > 31){              
				date_err=true;              
			}              
		}              
		if (mm==4||mm==6||mm==9||mm==11){              
			if (dd > 30){              
				date_err=true;              
			}              
		}              
		if (mm==2){              
			if ((eval(yy)+1911)%4==0){              
				if (dd > 29){              
					date_err=true;              
				}              
			}              
			else if (((eval(yy)+1911)%4)!=0){              
				if (dd > 28){              
					date_err=true;              
					
				}              
			}	              
		}              
	}              
	if (dd<=0 || date_err==true){              
		date_err=true;              
		return false;              
	}              
	return true;		              
}  

