var v_frms = new Array();

function validateForm(frm) {
	var valid = false;
	var missing_flds = null;
	var frm_elem = document.getElementById(frm);
	
	if(v_frms[frm] != null) {
		valid = true;
		for(fld in v_frms[frm]) {
			var value = frm_elem[fld].value;
			
			if(v_frms[frm][fld]["required"] && ! validateMinLength( value ) ) {
				if(missing_flds != null)
					missing_flds += ", ";
				else
					missing_flds = "";
				missing_flds += v_frms[frm][fld]["label"];
				valid = false;
			}
			else if(v_frms[frm][fld]["type"] == "email" && !validateEmail( value ) ) {
				if(missing_flds != null)
					missing_flds += ", ";
				else
					missing_flds = "";
				missing_flds += v_frms[frm][fld]["label"];
				valid = false;
			}
		}
	}
	if(!valid) {	
		var msg;	
		if( window.validatorStrings && window.validatorStrings.failureIntro ) {
			// Try to use localised string, if available
			msg = window.validatorStrings.failureIntro;
		}
		else {
			// Otherwise use default
			msg = "The following required fields were not supplied:";
		}	
	
		alert( msg + "\n" + missing_flds );
	}
		
	return valid;
}

function validateMinLength( value ) {
	// Fields are considered "blank" if they contain less than two characters, after trimming whitepsace.
	var isValid = validatorTrim(value).length >= 2;
	return isValid;
}

function validateEmail( value ) {
	// We consider anything that contains one @ and one . to be a valid email address.
	var i1 = String( value ).indexOf( "@" );
	var i2 = String( value ).indexOf( "." );
	var isValid = ( i1 >= 0 && i2 >= 0 );
	return isValid;
}

function addField(frm, name, label, type, required) {
	
	if(!v_frms[frm]) {
		v_frms[frm] = new Array();
	}
	
	v_frms[frm][name] = new Array();
	v_frms[frm][name]["name"] = name;
	v_frms[frm][name]["label"] = label;
	v_frms[frm][name]["type"] = type;
	v_frms[frm][name]["required"] = required;
}

// JavaScript's missing String.trim function
function validatorTrim( s ) {
	return String( s ).replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
}

