//  generic form validation function
//  pass a list of form field objects, and each will be checked for a value
//  fields containing 'email' in the name will be checked for an email-format value
//  tim@saltstonemedia.co.uk

function validateForm() {

	var flds = validateForm.arguments;
	var val = true;
	var err = '';

	var firstFld = null;

	for( var i = 0; i < flds.length; i++ ) {
		if( flds[ i ] ) {
			if( typeof( flds[ i ].type ) != 'undefined' ) {
				switch( flds[ i ].type ) {
					case 'select-one' : {
						if( ! flds[ i ].options[ flds[ i ].selectedIndex ].value ) {
							val = false;
							err += ( flds[ i ].title ? flds[ i ].title : flds[ i ].name ) + ' must be selected.\n';
						}
						break;
					}
					case 'checkbox' : {
						if( ! flds[ i ].checked ) {
							val = false;
							err += ( flds[ i ].title ? flds[ i ].title : flds[ i ].name ) + ' must be checked.\n';
						}
						break;
					}
					default : {
						if( ! flds[ i ].value ) {
							val = false;
							err += ( flds[ i ].title ? flds[ i ].title : flds[ i ].name ) + ' must be completed.\n';
						} else {

							var fldTxt = flds[ i ].name;
							if( flds[ i ].title ) fldTxt += ' ' + flds[ i ].title;

							if( fldTxt.toLowerCase().indexOf( 'email' ) != -1 || fldTxt.toLowerCase().indexOf( 'e-mail' ) != -1 ) {
								// assume from the field name that this should be an email address

								var mailEx = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
								if( ! mailEx.test( flds[ i ].value ) ) {
									val = false;
									err += ( flds[ i ].title ? flds[ i ].title : flds[ i ].name ) + ' must contain an e-mail address.\n';
								}
							}

							if( fldTxt.toLowerCase().indexOf( 'postcode' ) != -1 ) {
								// assume from the field name that this should be postcode

								if( flds[ i ].value.length < 5 || flds[ i ].value.length > 10 ) {
									val = false;
									err += ( flds[ i ].title ? flds[ i ].title : flds[ i ].name ) + ' must contain a postcode, 5-10 characters long.\n';
								}
							}

							if( fldTxt.toLowerCase().indexOf( 'issue' ) != -1 ) {
								// assume from the field name that this should be issue number
								if( parseInt( flds[ i ].value ) > 99 ) {
									val = false;
									err += ( flds[ i ].title ? flds[ i ].title : flds[ i ].name ) + ' must contain an issue number of 1-2 digits.\n';
								}
							}
						}
					}
				}
			} else {
				var chk = false;
				for( var btn = 0; btn < flds[ i ].length; btn++ ) {
					if( flds[ i ][ btn ].type == 'radio' ) {
						if( flds[ i ][ btn ].checked ) chk = true;
					}
				}
				if( ! chk ) {
					val = false;
					err += ( flds[ i ].title ? flds[ i ].title : flds[ i ].name ) + ' must be selected.\n';
				}
			}
		}
		if( err && ! firstFld ) {
			firstFld = flds[ i ];
		}
	}
	if( ! val ) {
		alert( err );
		if( typeof( firstFld.select ) == 'function' ) {
			firstFld.select();
		} else {
			firstFld.focus();
		}
	}
	return val;
}
