/*******************************************************************************************************************************
	Author : Kailash Agrawal
	Modified and updated by : Soumya Roy
	Copyright: POKROK Technologies Ltd 2005.
******************************************************************************************************************************/

/*******************************************************************************************************************************
	Notes: the calling function should be like this:
	
	if(form_name_validation_error("form_name","control_name","data_type","atttribute","message"))
	{
			return false;
	}
	
	
	the function returns true if error occurs!
******************************************************************************************************************************/

function form_name_validation_error(form_name, control_name, data_type, atttribute, message)
{
	if(data_type != 'check_box' && data_type != 'check_box_group' && data_type != 'radio_group')
	{
		var control_value = eval("document."+form_name+"."+control_name).value;
		control_value = form_name_validation_Trim(control_value);
	}
	else
	{
		var obj = eval("window.document."+form_name).elements;
		var objcount = obj.length;
	}
	
	if(data_type == 'space')//detect space in entries
	{
		if(control_value == '' && eval("document."+form_name+"."+control_name).value != "")
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		else
			return false;
	}
	if(data_type == 'char')//detect blank fields(entries)
	{
		if(control_value == '')
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		else
			return false;
	}
	if(data_type == 'num')//check numerical values
	{
		if(isNaN(control_value) == true)
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'email')//check email
	{
		var emailStr = control_value;
		var emailPat=/^(.+)@(.+)$/
		var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
		var validChars="\[^\\s" + specialChars + "\]"
		var quotedUser="(\"[^\"]*\")"
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		var atom=validChars + '+'
		var word="(" + atom + "|" + quotedUser + ")"
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
		var matchArray=emailStr.match(emailPat)
		if (matchArray==null) 
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		var user=matchArray[1]
		var domain=matchArray[2]
		if (user.match(userPat)==null)
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null) 
		{
			for (var i=1;i<=4;i++) 
			{
				if (IPArray[i]>255) 
				{
					alert(message);
					eval("document."+form_name+"."+control_name).focus();
					return true;
				}
			}
				 
		}
		var domainArray=domain.match(domainPat)
		if (domainArray==null) 
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		var atomPat=new RegExp(atom,"g")
		var domArr=domain.match(atomPat)
		var len=domArr.length
		if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) 
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		if (len<2) 
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		return false;
	}
	if(data_type == 'length_max')//check maximum character length
	{
		attrib = parseInt(atttribute);
		if((control_value.length > attrib))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'length_min')//check minimum character length
	{
		attrib = parseInt(atttribute);
		if((control_value.length < attrib))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'char_match')//check for specific string
	{
		if((control_value == atttribute))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'char_not_match')//check for absence specific string
	{
		if((control_value != atttribute))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'size')//check character length
	{
		attrib = parseInt(atttribute);
		if((control_value.length != attrib))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'sp_char')//check for special characters
	{
		var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
		for (var i = 0; i < control_value.length; i++) 
		{
			if (iChars.indexOf(control_value.charAt(i)) != -1) 
			{
				alert (message);
				eval("document."+form_name+"."+control_name).focus();
				return true;
			}
  		}
	}
	if(data_type == 'in_space')//check for space in string
	{
		var iSpace = " ";
		if (control_value.indexOf(iSpace) != -1) 
		{
			alert (message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
  	}
	if(data_type == 'max_num')//check for maximum numerical values
	{
		if(parseInt(control_value) > parseInt(atttribute))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'min_num')//check for minimum numerical values
	{
		if(parseInt(control_value) < parseInt(atttribute))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'eq_num')//check for equality of specific numerical values
	{
		if(parseInt(control_value) != parseInt(atttribute))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'not_eq_num')//check for non-equality of specific numerical values
	{
		if(parseInt(control_value) == parseInt(atttribute))
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}	
		else
			return false;
	}
	if(data_type == 'check_box')//check checked check-box
	{
		if(eval("document."+form_name+"."+control_name).checked == false)
		{
			alert(message);
			eval("document."+form_name+"."+control_name).focus();
			return true;
		}
		else
			return false;
		
	}
	if(data_type == 'check_box_group')//check checked check-box in check-box group
	{
		var check_box_group_not_selected = true;
		var focus_check_box_group;
		for(i=0; i<objcount; i++)
		{
			if(obj[i].name == control_name && obj[i].checked == true)
			{
				check_box_group_not_selected = false;
				focus_check_box_group = i;
			}
		}
		if(check_box_not_selected)
		{
			alert(message);
			obj[focus_check_box_group].focus();
			return true;
		}
		else
			return false;
		
	}
	if(data_type == 'radio_group')//check checked radio_button in radio_button group
	{
		var radio_group_not_selected = true;
		var focus_radio_group;
		for(i=0; i<objcount; i++)
		{
			if(obj[i].name == control_name && obj[i].checked == true)
			{
				radio_group_not_selected = false;
				focus_radio_group = i;
			}
		}
		if(radio_group_not_selected)
		{
			alert(message);
			obj[focus_radio_group].focus();
			return true;
		}
		else
			return false;
		
	}
}


function form_name_validation_Trim(TRIM_VALUE)//
{
	if(TRIM_VALUE.length < 1)
	{
		return "";
	}
	
	TRIM_VALUE = Rform_name_validation_Trim(TRIM_VALUE);
	TRIM_VALUE = Lform_name_validation_Trim(TRIM_VALUE);
	
	if(TRIM_VALUE=="")
	{
		return "";
	}
	else
	{
	return TRIM_VALUE;
	}
} //End Function


function Rform_name_validation_Trim(VALUE)//
{
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 0)
	{
		return	"";
	}
	var iTemp = v_length -1;

	while(iTemp > -1)
	{
		if(VALUE.charAt(iTemp) == w_space)
		{
		}
		else
		{
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;

	} //End While
	return strTemp;

} //End Function


function Lform_name_validation_Trim(VALUE)//
{
	var w_space = String.fromCharCode(32);
	if(v_length < 1)
	{
	return "";
	}
	var v_length = VALUE.length;
	var strTemp = "";

	var iTemp = 0;

	while(iTemp < v_length)
	{
		if(VALUE.charAt(iTemp) == w_space)
		{
		}
		else
		{
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function