//**************************************************************** 
// You are free to copy the "form_validate" script as long as you  
// keep this copyright notice: 
// Author: Zhouyu (xiaoyu_zhou@163.com)
// 2003/08/20
//**************************************************************** 
 
// Log of changes: 



// Definition of class form_validate 
// ***************************************************************** 
 
function form_validate() //constructor 
{
	//constant data 
	this.splitstr = ";";
	this.emailreg = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+([\.][a-zA-Z0-9-]+)+$/;
	this.alnumreg = /^[a-zA-Z0-9]{1,}$/;
	this.alreg = /^[a-zA-Z]{1,}$/;
	this.datereg = /^(\d+)\-(\d+)\-(\d+)\s/;
	this.doublereg = /^[0-9]{0,}\.{0,1}[0-9]{0,}$/; 

	
	//dynamic data
	this.check = true;
	this.ifmsgbox = true;		//if need alter
	this.ifsetfocus = false;	// if need set focus	
	this.thisform = document.myform;
	this.message = "";		//錯誤提示信息
	this.msgid = 0;				//錯誤提示序號
	
	this.emptyarray = "";	
	this.emailarray = "";
	this.numarray = "";
	this.limitnumarray = "";
	this.doublearray = "";
	this.datearray = "";
	this.alnumarray = "";
	this.alarray = "";

	
	//methods 
	this.get_split_string = get_split_string;
	this.focus_item = focus_item;
	this.msgbox = msgbox;
	this.check_email = check_email;	
	this.check_empty = check_empty;	
	this.check_num = check_num;
	this.check_limitnum = check_limitnum;
	this.check_date = check_date;
	this.check_alnum = check_alnum;
	this.check_al = check_al;
	this.check_double = check_double;
	this.get_split_array = get_split_array;
	this.check_all = check_all;

}
	
// email類型檢查
function check_email()
{
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var thisform = this.thisform;
	var checkarray = this.emailarray;
	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		itemmsg = this.get_split_string(itemstr,2);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_item(itemid,thisform);
		
		if (itemvalue)
		{			
			if(!this.emailreg.test(itemvalue))
			{
				this.msgid = this.msgid+1;
				this.message = this.message+this.msgid+"."+itemmsg+"\n";
			}
		
		}	
	}
	return true;	
}

// 字母或者數字
function check_alnum()
{
	var i = 0;
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var thisform = this.thisform;
	var checkarray = this.alnumarray;

	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		itemmsg = this.get_split_string(itemstr,2);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_item(itemid,thisform);
		
		if (itemvalue)
		{
			if(!this.alnumreg.test(itemvalue))
			{
				this.msgid = this.msgid+1;
				this.message = this.message+this.msgid+"."+itemmsg+"\n";
			}
		
		}	
	}
}

// 字母
function check_al()
{
	var i = 0;
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var thisform = this.thisform;
	var checkarray = this.alarray;

	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		itemmsg = this.get_split_string(itemstr,2);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_item(itemid,thisform);
		
		if (itemvalue)
		{
			if(!this.alreg.test(itemvalue))
			{
				this.msgid = this.msgid+1;
				this.message = this.message+this.msgid+"."+itemmsg+"\n";
			}
		
		}	
	}
}




// 不可為空
function check_empty()
{
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var itemvalue = "";
	var checkarray = this.emptyarray;
	var thisform = this.thisform;
	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		itemmsg = this.get_split_string(itemstr,2);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_null(itemid,thisform);
		if (itemvalue==-1)
		{
			this.msgid = this.msgid+1;
			this.message = this.message+this.msgid+"."+itemmsg+"\n";
		}	
	}
}


// 整數類型檢查
function check_num()
{
	var i = 0;
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var checkarray = this.numarray;
	var thisform = this.thisform;
	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		itemmsg = this.get_split_string(itemstr,2);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_item(itemid,thisform);
		if (isNaN(itemvalue))
		{
			this.msgid = this.msgid+1;
			this.message = this.message+this.msgid+"."+itemmsg+"\n";
		}	
	}
	return true;	
}


// 數字
function check_double()
{
	var i = 0;
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var checkarray = this.doublearray;
	var thisform = this.thisform;
	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		itemmsg = this.get_split_string(itemstr,2);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_item(itemid,thisform);
		if (itemvalue)
		{
			if(!this.doublereg.test(itemvalue))
			{
				this.msgid = this.msgid+1;
				this.message = this.message+this.msgid+"."+itemmsg+"\n";
			}
		
		}	
	}
	return true;	
}

//type = 0 : =
//type = 1 : <
//type = 2 : >
function check_limitnum()
{
	var i = 0;
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var checkarray = this.limitnumarray;
	var thisform = this.thisform;
	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		limitnum = this.get_split_string(itemstr,2);
		type =  this.get_split_string(itemstr,3);
		itemmsg =  this.get_split_string(itemstr,4);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_item(itemid,thisform);
		if (!itemvalue)
		{
			return false;			
		}
		switch (type) {
			case "0" :
				if (itemvalue.length!=limitnum)
				{
					this.msgid = this.msgid+1;
					this.message = this.message+this.msgid+"."+itemmsg+"\n";
				}
				break;				
			case "1" :
				if (itemvalue.length>limitnum)
				{
					this.msgid = this.msgid+1;
					this.message = this.message+this.msgid+"."+itemmsg+"\n";
				}
				break;					
			case "2" :
				if (itemvalue.length<limitnum)
				{
					this.msgid = this.msgid+1;
					this.message = this.message+this.msgid+"."+itemmsg+"\n";
				}
				break;					
			default :
				if (itemvalue.length!=limitnum)
				{
					this.msgid = this.msgid+1;
					this.message = this.message+this.msgid+"."+itemmsg+"\n";
				}
				break;								
				
		} 
	
	}
	return true;	
}

// 日期類型檢查
function check_date()
{
	var i = 0;
	var itemstr = "";
	var itemid = "";
	var itemname = "";
	var thisform = this.thisform;
	var checkarray = this.datearray;
	if (checkarray =="")
	{
		return true;
	}
	for (i in checkarray)
	{
		itemstr = checkarray[i];
		itemid = this.get_split_string(itemstr,0);
		itemname = this.get_split_string(itemstr,1);
		itemmsg = this.get_split_string(itemstr,2);
		if (!itemname)
		{
			itemname = itemid;	
		}
		itemvalue = check_item(itemid,thisform);
		
		if (itemvalue)
		{	
			if (itemvalue.lastIndexOf(" ")!=(itemvalue.length-1)) itemvalue=itemvalue+" ";		
			if(!this.datereg.test(itemvalue))
			{
				this.msgid = this.msgid+1;
				this.message = this.message+this.msgid+"."+itemmsg+"\n";
			}
		
		}	
	}
	return true;	
}

function check_all()
{
	this.check_empty();
	this.check_alnum();
	this.check_email();
	this.check_date();
	this.check_num();
	this.check_limitnum();
	this.check_double();
	this.check_al();
	if(this.message!='')
	{
		this.message = "以下填寫內容出錯，請重新檢查:\n" + this.message;
		this.msgbox(this.message);
		return false;
	}
	return true;		
}


function focus_item(itemname)
{
	var i = 0;
	var itemvalue = "";
	thisform = this.thisform;	
	if (thisform.elements.length==0)
	{
		return false;
	}
	if (!this.ifsetfocus)
	{
		return false;	
	}
	for (i=0;i<thisform.elements.length;i++)
	{
		if (itemname ==thisform.elements[i].name)
		{
			thisform.elements[i].select();
			thisform.elements[i].focus();
			return true;
		}
	}			
	return false;
}

function msgbox(message)
{
	if (this.ifmsgbox)
	{
		alert (message);	
	}	
}

function get_split_string(str,num)
{
	if (!str || str=="") return "";
	try{
		strarray = str.split(this.splitstr);	
		return strarray[num];
	}
	catch(e)
	{
		//alert(e.description);		
	}	
}

function get_split_array(str,num,splitstr)
{
	if (!str || str=="") return "";
	if (!splitstr || splitstr=="") splitstr=":";
	strarray = str.split(splitstr);	
	return strarray[num];
}


// Definition of class form_validate 
// ***************************************************************** 
 





// common function
function check_item(itemname,myform)
{
	var itemvalue = false;
	if(myform=="")
	{
		myform = document.myform;
	}
	var thisform = myform;
	if (thisform.elements.length==0)
	{
		return false;
	}
	for (i=0;i<thisform.elements.length;i++)
	{
		if (itemname ==thisform.elements[i].name)
		{
			itemvalue = thisform.elements[i].value;
			return itemvalue;
		}
	}			
	return itemvalue;
}

// common function
function set_item(itemname,v,myform)
{
	if(myform=="")
	{
		myform = document.myform;
	}
	var thisform = myform;
	if (thisform.elements.length==0)
	{
		return false;
	}
	for (i=0;i<thisform.elements.length;i++)
	{
		if (itemname ==thisform.elements[i].name)
		{
			thisform.elements[i].value = v;
			return ;
		}
	}			
	return ;
}


// 檢查表單內容是否為空
function check_null(itemname,myform)
{
	var itemvalue = '';
	if(myform=="")
	{
		myform = document.myform;
	}
	var thisform = myform;
	if (thisform.elements.length==0)
	{
		return 1;
	}
	for (i=0;i<thisform.elements.length;i++)
	{
		if (itemname ==thisform.elements[i].name)
		{
			itemvalue = thisform.elements[i].value;
			if(itemvalue!='')
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
	}			
	return 1;
}

function checkradio(id1,myform)	{
	if(myform=="")
	{
		myform = document.myform;
	}
	var obj1=myform.all[id1];
	var id="";
	if (obj1)	{
		var c1=obj1.length;
		if (c1 > 0)	{
			for (var i=0; i < c1; i++)	{
				if (obj1.item(i).checked)	{
					id=obj1.item(i).value;
					break;
				}
			} 
		}	else	{
			if (obj1.checked)	{
				id=obj1.value;
			}
		}
	}
	return id;
}


function checkmutibox(id2,myform)	{
	if(myform=="")
	{
		myform = document.myform;
	}
	var obj1=myform.all[id2];
	var id="";
	if (obj1)	{
		var c1=obj1.length;
		if (c1 > 0)	{
			for (var i=0; i < c1; i++)	{
				if (obj1.item(i).checked)	{
					if (id == "")	{
						id=obj1.item(i).value;
					}	else	{
						id=id+","+obj1.item(i).value;
					}
				}
			} 
		}	else	{
			if (obj1.checked)	{
				id=obj1.value;
			}
		}
	}
	return id;
}

