var errFound = false;

function Error(elem, text) {
	/* Error function */
	if (errFound) return;
	alert(text);
	elem.select();
	elem.focus();
	errFound = true;
}

function ValText(elem, text) { 
	/* Clean text */
	var re = new RegExp("^[a-zA-Z0-9\s\r\n]+$");
	if (!elem.value.match(re)) Error(elem, "Invalid " + text);
}

function ValText2(elem, text) {
	/* Text with any characters */
	if (elem.value == "") Error(elem, "Please specify " + text);
}

function ValWord(elem, text) { 
	/* Word (a-z, A-Z, 0-9, _ ) */
	var re = new RegExp("^[\\w]+$");
	if (!elem.value.match(re)) Error(elem, "Invalid " + text);
}

function ValID(elem, text) { 
	var re = new RegExp("^[\\w\\-\\.]+$");
	if (!elem.value.match(re)) Error(elem, "Invalid " + text);
}

function ValEmail(elem, text) {
	/* Email Address */
	if (elem.value == "") Error(elem, "Please specify the " + text);
	var re = new RegExp("^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$");
	if (!elem.value.match(re)) Error(elem, "Invalid " + text);
}

function ValNum(elem, text) {
	/* Positive Number */
	if (elem.value == "") Error(elem, "Please specify the " + text);
	if (isNaN(elem.value)) Error(elem, "Invalid " + text + ": it must be numeric");
	if (elem.value <= 0) Error(elem, "Invalid " + text);
}

function ValNumeric(elem, text) {
	/* Any Number */
	if (elem.value == "") Error(elem, "Please specify the " + text);
	if (isNaN(elem.value)) Error(elem, "Invalid " + text + ": it must be numeric");
}

function ValLength(elem, length, text) {
	/* Test for minimum string length */
	if (elem.value.length < length) Error(elem, text + ' must have at least ' + length + ' characters');
}

function ValMaxLength(elem, maxlength, text) {
	/* Test for maximum string length */
	if (elem.value.length > maxlength) Error(elem, text + ' must have no more than ' + maxlength + ' characters');
}

function Confirm(elem, elem2, text) {
	if (elem.value != elem2.value)  Error(elem, text + ' not confirmed');
}
