/* 20040223 
* Each form needs to have an Array of responce text set and
* a function for checking the form on submit
*/

var gFeild;

function dispatcher(validationFunc) {
   this.doValidate = validationFunc
}

var dispatchLookup = new Array()
dispatchLookup["isNotEmpty"] = new dispatcher(isNotEmpty);
dispatchLookup["isNotEmptySelect"] = new dispatcher(isNotEmptySelect);
dispatchLookup["isNotEmptyChecked"] = new dispatcher(isNotEmptyChecked);

// main validation function called by form event handlers
function validate(field, method) {
	gField =  eval("window.document.forms[0]." + field.name)
	var args = validate.arguments
	for (i = 1; i < args.length; i++) {
		if (!dispatchLookup[args[i]].doValidate()) {
			return false
		}
	}
	return true
}

// create the feedback text messages for each field
var responseText = new Array()
responseText["default"] = "Please complete required fields.";
responseText["name"] = "Please provide your name.";
responseText["email"] = "Please provide your email address.";
responseText["first_name"] = "Please provide your first name.";
responseText["last_name"] = "Please provide your last name.";
responseText["address"] = "Please provide your address.";
responseText["city"] = "Please provide your city.";
responseText["state"] = "Please provide your state.";
responseText["zip"] = "Please provide your zip code.";
responseText["phone"] = "Please provide your phone.";
responseText["winetype"] = "Please provide the type of wine.";
responseText["is21"] = "Please declare your age.";

// onSubmit check the newsletter form
function checkNewsletterForm(form) {
if (validate(form.name, "isNotEmpty")) {
	if (validate(form.email, "isNotEmpty")) {
		return true;
		}
	}
return false
}

function checkwinemakerform(form) {
if (validate(form.first_name, "isNotEmpty")) {
	if (validate(form.last_name, "isNotEmpty")) {
		if (validate(form.email, "isNotEmpty")) {
			return true;
			}
		}
	}
return false
}

// onSubmit check the newsletter form
function checkwineclubform(form) {
if (validate(form.winetype, "isNotEmptySelect")) {
	if (validate(form.first_name, "isNotEmpty")) {
		if (validate(form.last_name, "isNotEmpty")) {
			if (validate(form.email, "isNotEmpty")) {
				if (validate(form.address, "isNotEmpty")) {
					if (validate(form.city, "isNotEmpty")) {
						if (validate(form.state, "isNotEmptySelect")) {
							if (validate(form.zip, "isNotEmpty")) {
								if (validate(form.phone, "isNotEmpty")) {
									if (validate(form.is21, "isNotEmptyChecked")) {
										return true;
										}
									}
								}
							}
						}
					}
				}
			} 
		}
	}
return false
}

// onSubmit check the education form
function checkEducationForm(form) {
	if (validate(form.first_name, "isNotEmpty")) {
		if (validate(form.last_name, "isNotEmpty")) {
			if (validate(form.email, "isNotEmpty")) {
				if (validate(form.address, "isNotEmpty")) {
					if (validate(form.city, "isNotEmpty")) {
						if (validate(form.state, "isNotEmptySelect")) {
							if (validate(form.zip, "isNotEmpty")) {
								if (validate(form.phone, "isNotEmpty")) {
									return true;
									}
								}
							}
						}
					}
				}
			} 
		}
return false
}


// general purpose function to see if an input value has been
function isNotEmpty() {
var inputStr = gField.value;
var fieldName = gField.name;
var oneChar = fieldName.charAt(fieldName.length-1)
if (isPosInteger(oneChar)) {
fieldName = gField.name.slice(0, gField.name.length-1);
}
	if (isEmpty(inputStr)) {
		if (responseText[fieldName]) {
		alert(responseText[fieldName]);
		} else {
		alert(responseText["default"]);
		}
		gField.focus()
		return false
	}	
	return true
}

// general purpose function to see if an input value for select element is empty
function isNotEmptySelect() {
var fieldName = gField.name;
var inputStr = gField.options[gField.selectedIndex].value
var oneChar = fieldName.charAt(fieldName.length-1)
if (isPosInteger(oneChar)) {
fieldName = gField.name.slice(0, gField.name.length-1);
}
	if (isEmpty(inputStr)) {
		if (responseText[fieldName]) {
		alert(responseText[fieldName]);
		} else {
		alert(responseText["default"]);
		}
		gField.focus()
		return false
	}	
	return true;
}
// general purpose function to see if a checkbox element is checked
function isNotEmptyChecked() {
var fieldName = gField.name;
	if (!gField.checked) {
		if (responseText[fieldName]) {
		alert(responseText[fieldName]);
		} else {
		alert(responseText["default"]);
		}
		gField.focus()
		return false
	}	
	return true
}

// general purpose function to see if an input value has been
// entered at all
function isEmpty(inputStr) {
	if (inputStr == null || inputStr == "") {
		return true
	}
	return false
}

// general purpose function to see if a suspected numeric input
// is a positive integer
function isPosInteger(inputVal) {
	inputStr = inputVal.toString()
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (oneChar < "0" || oneChar > "9") {
			return false
		}
	}
	return true
}

