var gField
var dispatchLookup = new Array()
dispatchLookup["isEmpty"] = new dispatcher(isEmpty)
dispatchLookup["isNotEmpty"] = new dispatcher(isNotEmpty)
dispatchLookup["isNotChecked"] = new dispatcher(isNotChecked)
dispatchLookup["isEmail"] = new dispatcher(isEmail)
dispatchLookup["isPositiveInt"] = new dispatcher(isPositiveInt)
dispatchLookup["isNotSelected"] = new dispatcher(isNotSelected)

function dispatcher(validationFunc) {
	this.doValidate = validationFunc
}

// general purpose function to see if an input value has been entered at all
function isEmpty() {
	var inputStr = gField.value
	// alert ("Inputstr = " + inputStr);
	if (inputStr == null || inputStr == "") { return true}
	return false
}

function isNotEmpty() {
	var inputStr = gField.value
	// alert ("Inputstr = " + inputStr);
	if (inputStr == null || inputStr == "") { return false}
	return true
}

function isNotChecked() { // not fully tested
	var i;
	// alert ("in isNotChecked");
	// alert (gField.value);
	for (i=0; i < gField.length; i++) {
		if (gField[i].checked) {
			return false	
		}
	}
	return true
}

// general purpose function to see if a suspected numeric input
// is a positive integer
function isPositiveInt() {
	var inputValue = parseInt(gField.value);
	if (isNaN(inputValue)) {
		return false
	} else {
		if (inputValue < 1) {
			return false
		}
	}
	return true
}
 
function isEmail (){ /* Validate E-Mail */
	var emailexp = /^[a-z][\-a-z_0-9\.]+@[\-a-z_0-9\.]+\.[a-z]{2,4}$/i	
	var inputStr = gField.value
	return emailexp.test(inputStr)
}

function isNotSelected (){ /* do we have a selection */
	return (gField.type == "select-one" && gField.selectedIndex == 0)
}

// main validation function called by form event handlers
function validate(field, method) {
	//alert ("field.value = " + field.value + "; method = " + method)	
	gField = eval("document.forms[0]." + field.name)
	//alert ("gfield.value = " + gField.value)
	//alert ("gfield.name = " + gField.name)
	var args = validate.arguments
	//alert ("gfield.value = " + gField.value + "; args.length = " + args.length)
	for (i =1; i < args.length; i++) {
		// alert ("dispatchLookup[args[" + i + "]] = " + dispatchLookup[args[i]])
		if (!dispatchLookup[args[i]].doValidate()) {
			return false
		}
	}
	return true
}

function checkForm(form) {
	var i;
	if (validate(form.SALUTATION, "isNotSelected")) {
		alert("Please select a salutation.")
		gField.focus()
		// gField.select()
		return false
	}

	if (validate(form.FNAME, "isEmpty")) {
		alert("Please enter your first name.")
		gField.focus()
		gField.select()
		return false
	}
	
	if (validate(form.LNAME, "isEmpty"))  {
		alert("Please enter your last name.")
		gField.focus()
		gField.select()
		return false	
	}
	
	if (validate(form.EMAIL, "isEmpty"))  {
		alert("Please enter your E-Mail address.")
		gField.focus()
		gField.select()
		return false	
	}
	
	if ( validate(form.EMAIL, "isNotEmpty")) {
		if (!validate(form.EMAIL, "isEmail")) {
			alert("Please enter your correct E-Mail address.")
			gField.focus()
			gField.select()
			return false
		}
	}

	if (validate(form.TEL, "isEmpty"))  {
		alert("Please enter your telephone number.")
		gField.focus()
		gField.select()
		return false
	}
	if (validate(form.COUNTRY, "isNotSelected")) {
		alert("Please select a country.")
		gField.focus()
		gField.click()
		// gField.select()
		return false
	}
	
	return true
}
