var vlist = Array(
"given_name", "your given name",
"family_name", "your family name"
);

function validateForm( f ) {
	for ( var i = 0; i < vlist.length; i+=2 ) {
		var n = vlist[i];
		if ( !validateNamed( f, n, vlist[i+1] ) ) {
			return false;
		}
	}
	if ( !validateEmail( f, "e", "your Email Address" ) ) {
		return false;
	}
	return true;
}

function validateEmail( f, n, nn ) {
	var v = f.elements[n].value;
	var valid = true;
	if ( v.indexOf( "@" ) == -1 ) {
		valid = false;
	}
	if ( v.indexOf( "." ) == -1 ) {
		valid = false;
	}
	if ( !valid ) {
		alert( "Please check " + nn + ". It does not appear to be valid." );
		f.elements[n].focus();
		return false;
	}
	return true;
}

function validateNamed( f, n, nn ) {
	var e = f.elements[n];
	if ( e ) {
		if ( !validateElement( e, nn, false ) ) {
			return false;
		}
	}
	else {
		var es = n.split( "|" );
		for ( var j = es.length - 1; j >= 0; j-- ) {
			e = f.elements[es[j]];
			if ( e ) {
				if ( j > 0 ) {
					if ( validateElement( e, nn, true ) ) {
						break;
					}
				}
				else {
					if ( !validateElement( e, nn, false ) ) {
						return false;
					}
				}
			}
		}
	}
	return true;
}

function validateElement( e, nn, silent ) {
	if ( e.type == "text" || e.type == "textarea" ) {
		if ( e.value && e.value != "" ) {
			return true;
		}
		if ( !silent ) {
			alert( "Please fill in " + nn + "." );
			e.focus();
		}
		return false;
	}
	else if ( e.type == "select" || e.type == "select-one" ) {
		if ( e.selectedIndex > 0 ) {
			return true;
		}
		if ( !silent ) {
			alert( "Please choose " + nn + "." );
			e.focus();
		}
		return false;
	}
	else if ( e.type == "radio" || e.type == "checkbox" ) {
		if ( e.checked ) return true;
		if ( !silent ) {
			alert( "Please " + nn + "." );
			//e.focus();
		}
		return false;
	}
	else if ( e.length ) {
		for ( var i = e.length - 1; i >= 0; i-- ) {
			if ( i > 0 ) {
				if ( validateElement( e[i], nn, true ) ) {
					return true;
				}
			}
			else {
				if ( !validateElement( e[i], nn, silent ) ) {
					return false;
				}
			}
		}
		return true;
	}
	return true;
}