/********************************************
	This script is taken from O'Reilly's Javascript book
	modified 11/7/08 to use jQuery blockUI plugin
	
	To call the script from your HTML form, use the following sytax.
	<form onSubmit = "
		this.fieldname.optional = true;
		this.numberfield.min = 0;
		this.numberfield.max = 99999;
		return verify(this);
	">	
	
********************************************/	

function isblank(s) {
	for (var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
	}
	return true;
}

function verify(f) {
	var haveJQueryBlockUI = false;
	if((typeof jQuery != 'undefined') && (typeof jQuery.blockUI != 'undefined')) {
		haveJQueryBlockUI = true;
	}


	var msg = "";
	var empty_fields = "";
	var errors = "";
	var radio_sel = new Array();
	
	for (var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		
		if (((e.type == "text")  || (e.type == "textarea")) && !e.optional) {
			if ((e.value == null) || (e.value == "") || isblank(e.value)) {
				if(true == haveJQueryBlockUI) {
					empty_fields += "<li>" + FieldNames[e.name] + "</li>";
				} else {
					empty_fields += "\n" + FieldNames[e.name];
				} // end if jquery block ui
				continue;
			}
			
			if (e.numeric || ((e.min != null) && (e.min != "")) || ((e.max != null) && (e.max != ""))) {
				var v = parseFloat(e.value);
				
				if (isNaN(v) ||
					((e.min != null) && (v < e.min)) ||
					((e.max != null) && (v > e.max))) {
					
					 	errors += "- The field " + FieldNames[e.name] + " must be a number";
					 	if (e.min != null)
					 		errors += " that is greater than " + e.min;
					 	if (e.max != null && e.min != null)
					 		errors += " and less than " + e.max;
					 	else if (e.max != null)
					 		errors += " that is less than " + e.max;
					 	errors += ".\n"
				}
				continue;
			}
			
			if (e.regex && (e.regex.test(e.value) == false)) {
				errors += "- The field " + FieldNames[e.name] + " is not in a valid format.\n";
			}

		}	//if (((e.type == "text")
		
		
		if ((e.type == "password") && !e.optional) {
			if ((e.value == null) || (e.value == "") || isblank(e.value)) {
				if(true == haveJQueryBlockUI) {
					empty_fields += "<li>" + FieldNames[e.name] + "</li>";
				} else {
					empty_fields += "\n" + FieldNames[e.name];
				} // end if jquery block ui
			}
		}


		if ((e.type == 'select-one') && (!e.optional)) {
			if ((e.options[e.selectedIndex].value == "") || (e.options[e.selectedIndex].value == null)) {
				if(true == haveJQueryBlockUI) {
					empty_fields += "<li>" + FieldNames[e.name] + "</li>";
				} else {
					empty_fields += "\n" + FieldNames[e.name];
				} // end if jquery block ui
			}
		}


		if ((e.type == 'radio') && (!e.optional)) {
			if (radio_sel[e.name] == null) { radio_sel[e.name] = false; }
			if (e.checked == true) { radio_sel[e.name] = true; }
		}


	}	//for (var i = 0; i < f.length; i++)

	if (radio_sel.length > 0) {
		for (key in radio_sel) {
			if (radio_sel[key] == false) {
				if(true == haveJQueryBlockUI) {
					empty_fields += "<li>" + FieldNames[key] + "</li>";
				} else {
					empty_fields += "\n" + FieldNames[key];
				} // end if jquery block ui
			}
		}
	}
	if (!empty_fields && !errors) return true;
	
	if (true == haveJQueryBlockUI) {
		msg += "<h2>The information you provided has NOT been submitted due to the following.</h2>";
		//msg += "Please make these necessary changes before trying again.\n\n\n";
		if (empty_fields) {
			msg += "<h3>The following fields require a response:</h3><ul>" + empty_fields + "</ul>";
			if (errors) msg += "<p>";
		}
		msg += errors + "</p>";
		
		//blockUI style confirmation window
		$.blockUI.defaults.css = { }; 
		$.blockUI({ 
			message: msg + '<a href="#" class="close">OK</a>',
			overlayCSS: {
				opacity: '0.5'
			}
		});
		$('.blockOverlay').click($.unblockUI);
		$('.blockUI a.close').click(function(){
			$.unblockUI();
			return false;
		});
		return false;
	} else { // end if have blockUI
		msg += "The information you provided has NOT been submitted due to the following.\n\n\n";
		//msg += "Please make these necessary changes before trying again.\n\n\n";
		if (empty_fields) {
			msg += " The following fields require a response:\n"
					+ empty_fields + "\n";
			if (errors) msg += "\n";
		}
		msg += errors;
		alert(msg);
		return false;
	} // end else (no blocUI)
}

