function frmValidate(frm,message) {
// Checks that all fields specified in the hidden field 'required' are filled out
// Works with textboxes and multiple checkboxes and radio buttons (not single ones though, must be a group)
// 06/07/02 : JA : Added textarea and radio support. Also added ability to specify form and 'fields requird' message
// --/--/-- : AR : modified for empty required field
// 09/12/04 : JA : Updated to support 'password' type. Added automatic password validation, if another password box is found
// 02/03/09 : DB : Added extra email validation (not just checking for an '@') (Taken from the Voice site)
//				 : Now checks required and non required fields (if present). E.g. email

	/*****************************
	* Check None Required Fields *
	*    (Only populated ones)   *
	*****************************/
	var i = 0;
	
	while(frm.elements[i]) {
		var field = frm.elements[i];
		
		if( field.name == "email" && field.value != "") {
			// Do e-mail validation check
			var regExp = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$/;			
			
			if(!regExp.test(field.value)){
				alert("Please provide a valid e-mail address");
				return false;
			}			
		}
		
		i++;
	}

	/************************
	* Check Required fields *
	************************/
	
	if (frm.required.value == "")
		return true;
	
	var fields = frm.required.value.split(",");
	var i = 0, required = 0, password_seen = false, password = "";
	
	while( fields[i] ) {
		field = fields[i];

		type = eval("frm." + field + ".type");
		
		if( type == null ) {
		// Then we assume there are more than one of this element on the page (as with checkboxes, radio buttons)
			type = eval("frm." + field + "[0].type");
		}
		
		if (type == "select-one")
			{
			var selectfield = eval("frm." + field );
			
			if (selectfield.options.selectedIndex != 0)
				required++;
				
			}
			
		if( type == "checkbox" || type == "radio") {
		
			x = 0;
			check = 0;
			while( eval("frm." + field + "[x]") ) {
				if( eval("frm." + field + "[x].checked") == true )
					check = 1;
				x++;
			}
			
			if( check == 1 )
				required++;
		}
		
		if( type == "text" || type == "textarea" || type == "password") {
			var process = true;
			
			fieldvalue = eval("frm." + field + ".value");
			
			if( type == "password" && !password_seen) {
				password_seen = true;
				password = fieldvalue;
			}
			else if (type == "password" && password_seen) {
				// Assuming this is the validation box
				if( password != fieldvalue ) {
					message = "Passwords do not match";
					process = false;
				}
			}
				
			if( fieldvalue != "" && process )
				required++;
		}		
		i++;
	}
	
	if( required != fields.length ) {
		if( message ) {
			alert(message);
		}
		else {
			alert("Please check that you have completed all fields marked *");		
		}
		return false;
	} else {
		return true;
	}
}