function Validate(element, messageElement, type, required)
{	
	var message;
	
	//get the element value
	var val = Trim(element.value);
	
	//validity of field
	var valid = true;
    
	switch(type)
	{
		case "freeform":
		{
			valid = true;
			break;
		}
		case "whole":
		{
			message = 'Must be a postive number';
			
			//first test it's a whole number
			var exp = /(^\d\d*$)/;
			if(!exp.test(val))
				valid = false
				
			break;
		}
		case "integer":
		{
			message = 'Must be an integer (a positive or negative number with no decimal)';
			
			var exp = /(^-?\d\d*$)/;
			if(!exp.test(val))
				valid = false
				
			break;
		}
		case "number":
		{
			message = 'Must be a positive or negative number';
			
			var exp = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
			if(!exp.test(val))
				valid = false
				
			break;
		}
		case "string":
		{
		    //the exception message
			message = 'Text required';
			valid = true;
			
			break;
		}
		case "areacode":
		{
			//the exception message
			message = 'Must be a valid area code in the format 555 ';
		
			//first test it's a whole number
			var exp = /(^\d\d*$)/;
			if(!exp.test(val))
				valid = false
			
			if(val.length != 3)
				valid = false;
				
			break;
		}
		case "phone":
		{
			message = 'Must be a phone number in the format 555-5555';
			var exp = /^\d{3}\-\d{4}$/;
			valid = exp.test(val);
			break;
		}
		case "email":
		{
			message = 'Must be an email address in the format address@domain.com';
			var exp = /^([a-zA-Z0-9_\-])+(\.([a-zA-Z0-9_\-])+)*@((\[(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5])))\.(((([0-1])?([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))\]))|((([a-zA-Z0-9])+(([\-])+([a-zA-Z0-9])+)*\.)+([a-zA-Z])+(([\-])+([a-zA-Z0-9])+)*))$/;
			valid = exp.test(val);
			break;
		}
		case "date":
		{
			break;
		}
		case "money":
		{
			message = 'Must be a money value in the format 9.99';
			
			var exp = /^(-)?\d+(\.\d\d)?$/;
			if(!exp.test(val))
				valid = false
				
			break;
		}
	}
	
	//no data is a valid option for non-required fields
	if(!required && !valid && val.length == 0)
		valid = true;
		
	//required fields must have content
	if(required && val.length == 0)
	    valid = false;
	
	//set the message
	
	if(!valid)	
	{
	    //document.getElementById(messageElement).innerText = message;	   
	    element.setAttribute("valid", "false");
	}
    else
    {
        //document.getElementById(messageElement).innerText = '';
        element.setAttribute("valid", "true");
    }
    
    
    
}

function Trim(s) 
{
	while (s.substring(0,1) == ' ') 
	{
		s = s.substring(1,s.length);
	}
	while (s.substring(s.length-1,s.length) == ' ') 
	{
		s = s.substring(0,s.length-1);
	}
	return s;
}
