/*	UTILITY FUNCTIONS */	

//set focus to first form field
function setFocus() {
	//document.forms[0].elements[0].focus();
	if( document.forms[0] && document.forms[0].elements[0] && ( document.forms[0].elements[0].type == 'text' || document.forms[0].elements[0].type == 'password' || document.forms[0].elements[0].type == 'select-one' ) ) {
		document.forms[0].elements[0].focus();
	}
}
//function trims trailing spaces
function trim( txt ) {
	yatmp = txt.replace(/\s+$/,"");
	trimmed_value = yatmp.replace(/^\s+/,"");
	return trimmed_value;
}

/*	GENERIC VALIDATION FUNCTIONS */

function getRadioValue( opt ) {
	tmp = "";
	for ( i=0; i < opt.length; i++ ) {
		if ( opt[i].checked ) {
			tmp = opt[i].value;
		}
	}
	return tmp;
}
//validate email address
function isEmail( txt ) {
	re = new RegExp( "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$" );
	if( txt.match( re ) == txt ) {
		return true;
	}
	else {
		return false;
	}
}
//validate postal code
function isPostalCode( txt ) {
	re = new RegExp( "[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]" );
	if( txt.match( re ) == txt ) {
		return true;
	}
	else {
		return false;
	}
}
//validate telephone number
function isTelephone( tel ) {
	re = new RegExp( "[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" );
	if( tel.match( re ) == tel ) {
		return true;
	}
	else {
		return false;
	}
}
//validate radio buttons
function validateRadio( opt ) {
	tmp = false;
	for( i = 0; i < opt.length; i++ ) {
		if( opt[ i ].checked ) {
			tmp = true;
			break;
		}
	}
	return tmp;
}
//validate drop-down
function validateSelect( cbo ) {
	if( cbo.options[0].selected ) {
		return false;
	}
	else {
		return true;
	}
}
//validate text field
function validateText( txt ) {
	if( trim( txt ).length == 0 ) {
		return false;
	}
	else {
		return true;
	}
}

/*	FORM VALIATION FUNCTIONS */

//function checks whether or not there is an error;
function formValid( txt ) {
	if( txt != "" ) {
		alert( txt );
		return false;
	}
	else {
		return true;
	}
}
//Login Form
function validateLogin() {
	//initialize error message
	msg = "";
	//username required
	if( ! validateText( document.forms[0].Username.value ) || ! validateText( document.forms[0].Password.value ) ) {
		msg += "Please enter your username and password.\n\n";
	}
	//if there are errors, show error message
	return formValid( msg );
}
//Lost Password Form
function validateLostPassword() {
	//initialize error message
	msg = "";
	//email required
	if( ! validateText( document.forms[0].Email.value ) ) {
		msg += "Please enter your email address.\n\n";
	}
	//if there are errors, show error message
	return formValid( msg );
}
//Student Form
function validateStudent( add ) {
	//initialize error message
	msg = "";
	//student first name required for new record
	if( add == "yes" ) {
		if( ! validateText( document.forms[0].FirstName.value ) ) {
			msg += "\'First Name\' is a required field.\n\n";
		}
	}
	//student first name required for new record
	if( add == "yes" ) {
		if( ! validateText( document.forms[0].LastName.value ) ) {
			msg += "\'Last Name\' is a required field.\n\n";
		}
	}
	//username required
	if( ! validateText( document.forms[0].Username.value ) ) {
		msg += "\'Username\' is a required field.\n\n";
	}
	//password required
	if( ! validateText( document.forms[0].Password.value ) ) {
		msg += "\'Password\' is a required field.\n\n";
	}
	//confirm password required
	if( ! validateText( document.forms[0].ConfirmPassword.value ) ) {
		msg += "\'Confirm Password\' is a required field.\n\n";
	}
	//do passwords match?
	if( validateText( document.forms[0].Password.value ) && validateText( document.forms[0].ConfirmPassword.value ) ) {
		if( document.forms[0].Password.value != document.forms[0].ConfirmPassword.value ) {
			msg += "The passwords do not match.\n\n";
		}
	}
	//address1 required
	if( ! validateText( document.forms[0].Address1.value ) ) {
		msg += "\'Mailing Address\' is a required field.\n\n";
	}
	//city required
	if( ! validateText( document.forms[0].City.value ) ) {
		msg += "\'City\' is a required field.\n\n";
	}
	//province required
	if( ! validateSelect( document.forms[0].Province ) ) {
		msg += "\'Province\' is a required field.\n\n";
	}
	//valid postal code
	if( ! validateText( document.forms[0].PostalCode1.value ) && ! validateText( document.forms[0].PostalCode2.value ) ) {
		msg += "\'Postal Code\' is a required field.\n\n";
	}
	else {
		if( ! isPostalCode( '' + document.forms[0].PostalCode1.value + document.forms[0].PostalCode2.value ) ) {
			msg += "\'Postal Code\' is not a valid postal code.\n\n";
		}
	}
	//valid email required
	if( ! validateText( document.forms[0].Email.value ) ) {
		msg += "\'Email\' is a required field.\n\n";
	}
	else {
		//email formatting
		if( ! isEmail( document.forms[0].Email.value ) ) {
			msg += "\'Email\' is not a valid email address.\n\n";
		}
	}
	//telephone
	tmp = '' + document.forms[0].Telephone1.value + document.forms[0].Telephone2.value + document.forms[0].Telephone3.value;
	if( ! validateText( tmp ) ) {
		msg += "\'Telephone\' is a required field.\n\n";
	}
	else {
		if( ! isTelephone( tmp ) ) {
			msg+= "\'Telephone'\ is not a valid telephone number.\n\n";
		}
	}
	//telephone type required
	if( ! validateSelect( document.forms[0].TelephoneType ) ) {
		msg += "\'Telephone Type\' is a required field.\n\n";
	}
	//profession
	if( ! validateSelect( document.forms[0].Profession ) ) {
		msg += "\'Profession\' is a required field.\n\n";
	}
	else {
		if( document.forms[0].Profession.options[ document.forms[0].Profession.selectedIndex ].text == "Other" ) {
			if( ! validateText( document.forms[0].ProfessionOther.value ) ) {
				msg += "\'Other Profession\' is required when you select \'Other\' for your Profession.\n\n";
			}
		}
	}
	//health region
	if( ! validateSelect( document.forms[0].HealthRegion ) ) {
		msg += "\'Health Region\' is a required field.\n\n";
	}
	else {
		if( document.forms[0].HealthRegion.options[ document.forms[0].HealthRegion.selectedIndex ].text == "Other" ) {
			if( ! validateText( document.forms[0].HealthRegionOther.value ) ) {
				msg += "\'Other Health Region\' is required when you select \'Other\' for your Health Region.\n\n";
			}
		}
	}
	//consent required
	if( add == "yes" ) {
		if( getRadioValue( document.forms[0].Consent ) != "Yes" ) {
			msg += "You must agree to the terms and conditions.\n\n";
		}
	}
	//if there are errors, show error message
	return formValid( msg );
}