//  cjm  2/12/2008
//  If field is required, validate checkboxes, radio buttons, and text fields
//  If email field, validate format using regular expression 

function validate( form )
{
	list = '';
	elems = form.elements;
	for( i = 0; i < elems.length; i++ )
	{
		if( elems[i].getAttribute('required') == 'true' )
		{
			if( elems[i].type == 'checkbox' )
			{
				if( !validateGroup( elems[i].name ) )
					list += format( elems[i].name ) + '\n';
			}
			else if( elems[i].type == 'radio' )
			{
				if( !validateGroup( elems[i].name ) )
					list += format( elems[i].name ) + '\n';
			}
			else
			{
				if( elems[i].value == '' )
					list += format( elems[i].name ) + '\n';
				else
				{
						if ( elems[i].name == "email" )
						{
								if (!(validateEmail(elems[i].value) ) )
								{
									alert( 'Please enter valid email address:\n\n' + list );
								return false;
						  	}	

						}

				}
			}
		}
	}
	if( list == '' )
		return true;
	alert( 'Please fill out the following required fields:\n\n' + list );
	return false;
}

function validateGroup( groupName, minChecked )
{
	minChecked = (minChecked == null) ? 1 : minChecked;
	group = document.getElementsByName( groupName );
	counter = 0;
	for( j = 0; j < group.length; j++ )
	{
		if( group[j].checked )
			counter++;
	}
	return( counter >= minChecked );
}

function validateEmail ($email) {
//	var reg_exp='^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$';
	var reg_exp='^[^@ ]+@[^@ ]+\.[^@ \.]+$';

	if ($email.match(reg_exp)) 
	{
	return true;
	} else 
	{
	return false;
	}
}

function format( elemName )
{
	formatted = elemName.substring( 0, 1 ).toUpperCase();
	remainder = elemName.substring( 1, elemName.length );
	for( j = 0; j < remainder.length; j++ ) {
		char = remainder.charAt( j );
		if( isUpper( char ) )
		{
			formatted += ' ';
			formatted += char;
		}
		else if( char == '_' )
		{
			formatted += ' ';
			j++;
			char = remainder.charAt( j );
			formatted += char.toUpperCase();
		}
		else
			formatted += char;
	}
	return formatted;
}

var numeric = '0123456789';
var lower   = 'abcdefghijklmnopqrstuvwxyz';
var upper   = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function isValid( string, check )
{
	if( string == '' )
		return true;
	for( k = 0; k < string.length; k++ )
	{
		if( check.indexOf( string.charAt( k ), 0 ) == -1 )
			return false;
	}
	return true;
}
function isNumeric( string )
{ return isValid( string, numeric ); }
function isLower( string )
{ return isValid( string, lower ); }
function isUpper( string )
{ return isValid( string, upper ); }
function isAlpha( string )
{ return isValid( string, lower + upper ); }
function isAlphaNumeric( string )
{ return isValid( string, lower + upper + numeric ); }