function validateForms() {
	var thisRef = this;
	var forms = document.getElementsByClassName("FormValidation");
	for(var i=0; i<forms.length; i++) {
		//var validateForm = document.forms[i].getAttribute('validateForm');
		//There was a problem due to this so I hv removed the dependency of validateForm attribute
		var form = forms[i];
		for(j=0;j<form.elements.length;j++) {
			var elm = form.elements[j];
			var v_type = elm.getAttribute('validation');
			if(v_type) {	
				if(elm.type=='hidden' || elm.type=='button' || elm.type=='select-one') {
					// skip validation
				} else if(elm.type=='checkbox') {
					elm.onchange = function(evt) {
						validateCheckBox(this);
					}					
				} else if(elm.type=='radio') {
					elm.onchange = function(evt) {
						validateRadioGroup(this);
					}
				} else{
					elm.onchange = function(evt) {
						validateField(this);
					}
				}
			}
		}
		
	}
}


//This function validates form (argument) before submission
function validateForm(obj)
{
	var status= true;

	for(i=0;i<obj.elements.length;i++)
	{
		v_type = obj.elements[i].getAttribute('validation');

		if(v_type)
		{		
			if(obj.elements[i].type=='hidden' || obj.elements[i].type=='button' || obj.elements[i].type=='select-one')	{
				// skip validation
			} else if(obj.elements[i].type=='checkbox')	{
				if (validateCheckBox(obj.elements[i])=="")
					status = (status && true);
				else
					status = (status && false);				
			} else if(obj.elements[i].type=='radio') {
				if (validateRadioGroup(obj.elements[i])=="")
					status = (status && true);
				else
					status = (status && false);				
			} else {	
				if (validateField(obj.elements[i])=="")
					status = (status && true);
				else
					status = (status && false);
			}
		}
	}
	return status;
}

/**This method validates the value of a field being passed using the approriate validation rule
 * eml: email id, alp: alphabetical, aln: alphanumeric, int: integral, num: numeric, tel: telephone no, urt: unrestricted text
 * suffixes:- _m: mandatory, _o: optional
**/
function validateField(obj)	//the object being passed is to be a field
{
	var message;
	o_value=obj.value;
	v_type=obj.getAttribute('validation');

	if (v_type=='eml_m' || v_type=='eml_o')
		message=valEml(v_type,o_value);
	else if (v_type=='emls_m' || v_type=='emls_o')
		message=valEmls(v_type,o_value);
	else if (v_type=='alp_m' || v_type=='alp_o')
		message=valAlp(v_type,o_value);
	else if (v_type=='int_m' || v_type=='int_o')
		message=valInt(v_type,o_value);
	else if (v_type=='currency_m' || v_type=='currency_o')
		message=valCurrency(v_type,o_value);
	else if (v_type=='num_m' || v_type=='num_o')
		message=valNum(v_type,o_value);
	else if (v_type=='aln_m' || v_type=='aln_o')
		message=valAln(v_type,o_value);
	else if (v_type=='tel_m' || v_type=='tel_o')
		message=valTel(v_type,o_value);
	else if (v_type=='usr_m' || v_type=='usr_o')
		message=valUsr(v_type,o_value);
	else if (v_type=='urt_m') {
		message = valUrt(v_type,o_value);
		var minlength = obj.getAttribute('minlength');
		if(minlength) {
			message = valMinLength(o_value, minlength);
		}
	} else if(v_type=='urt_o')
		message=valUrt(v_type,o_value);
	else if (v_type=='fil_m' || v_type=='fil_o') {
		var allowedExtensions = obj.getAttribute('allowedExtensions').toLowerCase().split(",");
		message = valFil(v_type,o_value, allowedExtensions);
	}
	
	Element.showValidation(obj,message);
	
	return message;
}

//This function validates whether checkbox passed as an argument is checked or not; validation being chk_m
function validateCheckBox(obj)
{
	var message = "";
	var isChecked = obj.checked;
	v_type = obj.getAttribute('validation');
	if(v_type) {
		if (v_type=='chk_m' && isChecked)
		{
			message = "";
		}
		else {
			message = "This is a required field";
		}	
		Element.showValidation(obj,message);
	}
	
	return message;
}

//This function validates whether radio group passed as an argument is checked or not; validation being rad_m
function validateRadioGroup(obj)
{
	var message = "";
	var isChecked = false;
	var radioElms = document.getElementsByName(obj.name);
	v_type = obj.getAttribute('validation');
	if(v_type == "rad_m") {
		for(var i=0; i<radioElms.length; i++) {
			if(radioElms[i].checked) {
				isChecked = true;
			}
		}
		if (isChecked){
			message = "";
		}
		else {
			message = "This is a required field";
		}	
		Element.showValidation(obj,message);
	}
	
	return message;
}

//function to check the format of email address
function eCheck(str) 
{
	if (str.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/))	//match with the regular expression of email id
		return true;
	return false;		
}


//function to check if a string is purely alphabetical or not
function isAlphaNumeric(str)
{
	if(str.match(/^[a-z0-9._, ]+$/i))
		return true;
	return false;
}


//function to check if a string is alphanumeric or not
function isAlpha(str)
{
	if(str.match(/^[a-z._, ]+$/i))
		return true;
	return false;
}

//function to check if a string is integer or not
function isInt(str)
{
	if(str.match(/^[0-9]+$/))
		return true;
	return false;
}


//function to check if a string is a valid telephone number or not
function isTel(str)
{
	if(str.match(/^\(\d{3}\)[-]\d{3}[-]\d{4}$/))
		return true;
	return false;
}

//function to check if a username is valid or not
function isUsr(str)
{
	if(str.match(/^[a-z0-9.]+$/))
		return true;
	return false;
}

//function to check whether a file being uploaded has allowed extension
function validateExtension(str, allowedExtensions)
{
	str = str.toLowerCase();
	str_array = str.split(".");
	var extension = str_array[str_array.length-1];
	if(allowedExtensions.length != 0) {
		for(var i=0; i<allowedExtensions.length; i++) {
			if(extension == allowedExtensions[i]) {
				return true;
			}
		}
	}
	return false;	
}

//function to validate an email ids and generate approriate message
function valEmls(id,value)
{
	var message;
	if(value=="") {	//if the field is left blank
		if(id=='emls_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	} else {
		var list = value.split(',');
		for (y=0; y<list.length; y++) {
			if(!eCheck(list[y])) {	//check if the entry made is a valid email address
				message = "Invalid e-mail addresses";
				break;
			} else {
				message="";
			}
		}
	}

	return message;
}

//function to validate an email id and generate approriate message
function valEml(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='eml_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(!eCheck(value))	//check if the entry made is a valid email address
			message="Invalid e-mail address";
		else
			message="";
	return message;
}

//function to validate a file field and generate approriate message
function valFil(id,value,allowedExtensions)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='fil_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
	{	
		var return_value = validateExtension(value, allowedExtensions);

		if(return_value == true)
			message="";
		else
			message = "This file is not allowed";
	}
	return message;
}

//function to validate an alphanumeric field and generate approriate message
function valAlp(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='alp_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(!isAlpha(value))
			message="Only alphabetical values.";
		else
			message="";
	return message;
}

//function to validate an integer field and generate approriate message
function valInt(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='currency_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(!isInt(value))
			message="Only integer values.";
		else
			message="";
	return message;
}

//function to validate currency and generate approriate message
function valCurrency(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='currency_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(!(value.match(/^[0-9.]+$/)))
			message="Only digits are allowed.";
		else
			message="";
	return message;
}


//function to validate a numeric field and generate approriate message
function valNum(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='num_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(isNaN(value))
			message="Only numeric value.";
		else
			message="";
	return message;
}


//function to validate an alphanumeric field and generate approriate message
function valAln(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='aln_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(!isAlphaNumeric(value))
			message="Only alphanumeric values.";
		else
			message="";
	return message;
}


//function to validate a telephone number and generate approriate message
function valTel(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='tel_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(!isTel(value))
			message="Invalid telephone number";
		else
			message="";
	return message;
}

//function to validate a username and generate approriate message
function valUsr(id,value)
{
	var message;
	//var elm=document.getElementById('username');
	if(value=="")	//if the field is left blank
		if(id=='usr_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		if(!isUsr(value))
			message="Invalid Username";
		else
			message="";
			
	/*if(message!="")
		elm.style.display='none';
	else
		elm.style.display='';*/
		
	return message;
}

//function to validate an unrestricted text and generate approriate message
function valUrt(id,value)
{
	var message;
	if(value=="")	//if the field is left blank
		if(id=='urt_m')	//check if it's a Required field
			message="Required field";
		else
			message="";
	else
		message="";
	return message;
}

function valMinLength(value, minlength)
{
	var message;
	if(value.length < minlength)	//if length of value is less than minlength
		message="Atleast " + minlength + " characters required.";
	else
		message="";
	return message;
} 