function validate(form, version)
{
	//check all the inputs.
	
	fv = validateInputs(form);
	
	
	//if there are errors display them
	if (fv.numErrors() > 0)
	{
		//alert("There were "+ fv.numErrors()+" error(s) in your submission. Please check your input.");
		if(version && version==2)
		{
			
			fv.displayErrorsV2();
		}
		else
			fv.displayErrors();
		return false;
	}
	else
		return true;
}

function validateInputs(form)
{	
	// instantiate object
	fv = new formValidator();
	form = document.getElementById(form);
	// perform checks
	// check for empty name field
	//form = document.getElementById(formId);
	for (i=0;i<form.length; i++)
	{
		element = form.elements[i];
		validation_text = element.className ;
		//alert (element.lang);
		//
		//alert(validation_text);return false;
		element_name = element.name;
		//Clean the previsouslt shown errors, if any
		if(document.getElementById(element_name+ '_error'))
			document.getElementById(element_name+ '_error').innerHTML ='';
		
		if (validation_text =="")
			continue;
		else
		{
			value = element.value;
			validations_for_this_field = validation_text.split("|");
			errors_for_this_field = element.title.split("|");
			for (vi=0;vi<validations_for_this_field.length; vi++)
			{
				if (errors_for_this_field[vi])
					possible_error = errors_for_this_field[vi];
				else
					possible_error = "Error in input.";
					
				validation_arr = validations_for_this_field[vi].split(':');
				validation = validation_arr[0];
				if (validation == 'NONEMPTY' && fv.isEmpty(value))
				{
					//alert("raising erroe on " + element_name);
						fv.raiseError(possible_error, element_name);
						break;
				}
				else if (validation == 'ALPHA' && !fv.isAlphabetic(value))
				{
						fv.raiseError(possible_error, element_name);
						break;
				}
				else if (validation == 'ALPHANUMERIC' && !fv.isAlphaNumeric(value))
				{
						fv.raiseError(possible_error, element_name); 
						break;
				}
				else if (validation == 'NUMERIC' && !fv.isNumber(value))
				{
						fv.raiseError(possible_error, element_name); 
						break;
				}
				else if (validation == 'INTEGER' && !fv.isInteger(value))
				{
						fv.raiseError(possible_error, element_name); 
						break;
				}				
				else if (validation == 'FLOAT' && !fv.isNumber(value))
				{
						fv.raiseError(possible_error, element_name); 
						break;
				}
				else if (validation == 'ZIP' && !fv.isZipCode(value))
				{
						fv.raiseError(possible_error, element_name);
						break;
				}
				else if (validation == 'CC' && !fv.isCreditCard(value))
				{
						fv.raiseError(possible_error, element_name);
						break;
				}
				else if (validation == 'CCV' && !fv.isCCV(value))
				{
						fv.raiseError(possible_error, element_name);
						break;
				}
				else if (validation == 'PHONE' && !fv.isPhone(value))
				{
						fv.raiseError(possible_error , element_name);
						break;
				}
				
				else if (validation == 'EMAIL' && !fv.isEmailAddress(value))
				{
						fv.raiseError(possible_error , element_name);	
						break;
				}
				else if (validation == 'PASSWORD' && !fv.isPassword(value))
				{
						
						fv.raiseError(possible_error , element_name);	
						break;
				}
				else if (validation == 'IDENTICAL' && validation_arr[1] && document.getElementById(validation_arr[1]) && value!=document.getElementById(validation_arr[1]).value )
				{
						
						fv.raiseError(possible_error , element_name);	
						break;
				}
				else if (element.type =="checkbox" && validation == 'NONEMPTY' && !fv.isChecked(element))
				{
						fv.raiseError(possible_error, element_name);
						break;
				}
				
				//now check for min string requirement, is provided
				if (validation_arr[1] && !isNaN(validation_arr[1]) )
				{
					if ((validation == 'ALPHA' || validation == 'ALPHANUMERIC' || validation == 'NUMERIC' || validation == 'STRING') && !fv.hasMinimumLength(value, validation_arr[1]))
					{
						fv.raiseError(possible_error, element_name);
						break;
					}
					
					if (validation == 'INTEGER' && !fv.hasMinValue(value, validation_arr[1]))
					{
						fv.raiseError(possible_error, element_name);
						break;
					}
				}
				
				//now check for min string requirement, is provided
				if (validation_arr[1] && !isNaN(validation_arr[1]) )
				{
					if ((validation == 'ALPHA' || validation == 'ALPHANUMERIC' || validation == 'NUMERIC' || validation == 'STRING') && !fv.hasMinimumLength(value, validation_arr[1]))
					{
						fv.raiseError(possible_error, element_name);
						break;
					}
					
					if ((validation == 'INTEGER' || validation == 'FLOAT') && !fv.hasMinValue(value, validation_arr[1]))
					{
						fv.raiseError(possible_error, element_name);
						break;
					}
				}
				
				//now check for max string requirement, is provided
				if (validation_arr[2] && !isNaN(validation_arr[2]) )
				{
					if ((validation == 'ALPHA' || validation == 'ALPHANUMERIC' || validation == 'NUMERIC') && !fv.hasMaximumLength(value, validation_arr[2]))
					{
						fv.raiseError(possible_error, element_name);
						break;
					}
					
					if ((validation == 'INTEGER' || validation == 'FLOAT') && !fv.hasMaxValue(value, validation_arr[2]))
					{
						fv.raiseError(possible_error, element_name);
						break;
					}
				}
			}
		}
		
	}
	//return the form validating objects for displaying errors
	return fv;
}

