var pv_forms = new Array();
var pv_fields = new Array();
var pv_errormsgs = new Array();
var pv_validators = new Array();

var pv_numberOfErrors = 'There were a number of errors:\n';

function pv_addvalidatefield(form, field, errormsg, validator) {
	pv_forms.push(form);
	pv_fields.push(field);
	pv_errormsgs.push(errormsg);
	pv_validators.push(validator);
}

function pv_addformfield(form, field, errormsg) {
	pv_addvalidatefield(form, field, errormsg, pv_notnull);
}

function pv_addfield(field, errormsg) {
	pv_addvalidatefield(null, field, errormsg, pv_notnull);
}

function pv_notnull(value) {
	if ("" == value) return false;
	else return true; 
}

function pv_validatefield(form, index) {
	var fieldname = pv_fields[index];
	var foundfield = false;
	
	for (var i = 0; i < form.elements.length; i++) {
		var thisfield = form.elements.item(i);
		
		if (thisfield.name == fieldname) {
			if (thisfield.checked || ((thisfield.type != 'radio') && (thisfield.type != 'checkbox'))) {
				foundfield = true;
				if (!pv_validators[index](thisfield.value)) return pv_errormsgs[index];
			}
		}
	}
	
	if (!foundfield) return pv_errormsgs[index];
}

function pv_validate(form) {
	var errors = new Array();
	
	for (var i = 0; i < pv_fields.length; i++) {
		if ((pv_forms[i] != null) && (pv_forms[i] != form.name)) {
			continue;
		}
		
		var possErrMsg = pv_validatefield(form, i);
		if (possErrMsg) errors.push(possErrMsg);
	}
	
	if (errors.length == 0) {
		return true;
	} else if (errors.length == 1) {
		alert(errors[0]);
		return false;
	} else {
		var compoundmsg = pv_numberOfErrors;
		for (var i = 0; i < errors.length; i++) {
			compoundmsg += "\t- " + errors[i] + "\n";
		}
		alert(compoundmsg);
		
		return false;
	}
}