// Author: Alan Nanut
// Description: Verifies all field types for input
// such as empty values, numeric values, and monetary values

var DATA_EMPTY = 1;
var DATA_NUMERIC = 2;
var DATA_COST = 4;


function MM_preloadImages() { //v3.0

  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();

    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)

    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}

}



// -------------------------------------------- DATA VALIDATION BEGINS

function parseFieldEmpty (str) {
	var msg = "- Empty value\n";
	if (str == "" || str == null) 
		return msg;
	for (var i = 0; i < str.length; i++)
		if (str.charAt (i) != ' ' && str.charAt (i) != '\t' && 
			str.charAt (i) != '\r' && str.charAt (i) != '\n')
			return "";
	return msg;
}


function parseFieldNumeric (str) {
	var msg = "- Non-numeric (positive integer) amount\n";
	
	if (str == "") 
		return msg;
	for (var i = 0; i < str.length; i++)
		if (str.charAt (i) < '0' || str.charAt (i) > '9')
			return msg;
	return "";
}

function parseFieldCost (str, formField) {
	var decFlag = 0;
	var ws = 0;
	var msg = "- Not a proper amount in dollars and/or cents\n";
	
	if (str == "") {
		formField.value = str;
		return "";
	}
	
	var i = 0;
	if (str.charAt (0) == '$') {
		i = 1;
		str = str.substring (1, str.length);
		formField.value = str;
	}
	
	for (i; i < str.length; i++) {
		if (str.charAt (i) == '.')
			if (decFlag)
				return msg;
			else
				decFlag = 1;
		else if (str.charAt (i) == ' ') {
			ws++;
			continue;
		}
		else if (str.charAt (i) < '0' || str.charAt (i) > '9')
			return msg;
	}
	if (ws == str.length)
		formField.value = 0;
	return "";
}


function parseFieldValue (type, formField, _min, _max) {

	if (formField == null)
		return true;
	var header = "Warning: The following data validation error(s) were detected:\n\n" + formField.name + "\n\n";
	var str = "";

	if (type & DATA_EMPTY)
		str += parseFieldEmpty (new String(formField.value));
	if (type & DATA_NUMERIC)
		str += parseFieldNumeric (new String (formField.value));
	if (type & DATA_COST)
		str += parseFieldCost (new String (formField.value), formField);

	if (_min != null && parseInt (formField.value, 10) < _min)
		str += "- Value must be at least " + _min + "\n";

	if (_max != null && parseInt (formField.value, 10) > _max)
		str += "- Value must be at most " + _max + "\n";

	if (str != "") {
		msg = header + str;
		alert (msg);
		return false;
	}
	return true;
}


function verifyRadio (formField) {

	var sel = 0;
	for (var i = 0; i < formField.length; i++)
		if (formField[i].checked)
			sel = 1; 
	
	if (!sel) {
		alert ("You must select a choice before continuing...");
		return false;
	}
	return true;
}

function verifySelected (formField) {

	if (formField.selectedIndex == 0) {
		alert ("You must select an option for '" + formField.name + "' before continuing...");
		return false;
	}
	return true;
}


function specifySelected (formField, hidden) {

	var str = "";
	var msg = "";
	
	if (formField.selectedIndex != 0)
		return true;

	str = prompt ("Specify the " + hidden.name + " name of the location for the request being placed.", "");
	if ((msg = parseFieldEmpty (str)) != "") {
		alert (hidden.name + " entry cannot be left blank!");
		return false;
	}
		
	hidden.value = str;
	return true;
}


function promptInput (formField, hidden) {

	var str = "";
	
	str = prompt ("Specify the name of the " + hidden.name + "...", "");
	if (str == "" || str == null) {
		alert (hidden.name + " entry cannot be left blank!");
		return false;
	}
		
	hidden.value = str;
	return true;
}



function confirmInput (str, hidden) {

	res = confirm (str);	
	hidden.value = res;
	return true;
}


function promptInputInit (formField, hidden, initStr) {

	var str = "";
	
	str = prompt ("Specify the name of the " + hidden.name + "...", initStr);
	if (str == "" || str == null) {
		alert (hidden.name + " entry cannot be left blank!");
		return false;
	}
		
	hidden.value = str;
	return true;
}


// -------------------------------------------- DATA VALIDATION ENDS

