function dispatcher(validationFunc) 
{
	this.doValidate = validationFunc;
}

var dispatchLookup = new Array();

dispatchLookup["isNotEmpty"] = new dispatcher(isNotEmpty);
dispatchLookup["isPositiveInteger"] = new dispatcher(isPositiveInteger);
dispatchLookup["isZip"] = new dispatcher(isZip);
dispatchLookup["isPhone"] = new dispatcher(isPhone);
dispatchLookup["isCheckboxArrayNotEmpty"] = new dispatcher(isCheckboxArrayNotEmpty);
dispatchLookup["isComboBoxSelected"] = new dispatcher(isComboBoxSelected);

var gobjField;
var gobjLabel;

function Validate(strFormField, strLabel, objValidations)
{
	var args;

	gobjField = document.getElementById(strFormField);
	gobjLabel = document.getElementById(strLabel);
	args = Validate.arguments;
	
	for (i = 2; i < args.length; i++) 
	{
		if (!dispatchLookup[args[i]].doValidate()) 
		{
			gobjLabel.style.color = "red";
			return false;
		}
	}
	
	gobjLabel.style.color = "black";
	return true;
}

function isNotEmpty() 
{
	if (gobjField.value == "" || gobjField.value == null) 
	{
		return false;
	}
	return true;
}

function isZip() 
{
	var strTemp;

	if (gobjField.value.length == 0) 
		return true;

	var inputStr = gobjField.value;
	
	inputStr = inputStr.replace('-', '');
			
	if (!isPositiveInteger(inputStr))
		return false;
	
	if (inputStr.length != 5 && inputStr.length != 9) 
		return false;
		
	return true;
}

function isPositiveInteger(intNumber) 
{
	var inputStr;
	
	if (intNumber == "" || intNumber == null )
		inputStr = gobjField.value;
	else
		inputStr = intNumber;
		
	if (inputStr.length == 0) 
		return true;
	
	for (var i = 0; i < inputStr.length; i++) 
	{
		var oneChar = inputStr.charAt(i);
		
		if (oneChar < "0" || oneChar > "9") 
		{
			return false;
		}
	}
	return true;
}

function isPhone() 
{
	var inputStr = gobjField.value;
	
	if (inputStr.length == 0) 
		return true;
		
	inputStr = stripHyphens(inputStr);
	inputStr = stripSlashParens(inputStr);
	inputStr = stripPeriods(inputStr);
	
	if (!isPositiveInteger(inputStr))
		return false;
	
	if (inputStr.length != 10) 
		return false;
			
	return true;
}

function stripPeriods(inputStr) 
{
	var marker;
	
	while (inputStr.indexOf(".") != -1) 
	{
		marker = inputStr.indexOf(".");
		inputStr = inputStr.substring(0,marker) + inputStr.substring(marker+1,inputStr.length);
	}

	return inputStr;
}

function stripHyphens(inputStr) 
{
	var marker;
	
	while (inputStr.indexOf("-") != -1) 
	{
		marker = inputStr.indexOf("-");
		inputStr = inputStr.substring(0,marker) + inputStr.substring(marker+1,inputStr.length);
	}

	return inputStr;
}

function stripSlashParens(inputStr) 
{
	var marker;
	
	while (inputStr.indexOf("/") != -1) 
	{
		marker = inputStr.indexOf("/");
		inputStr = inputStr.substring(0,marker) + inputStr.substring(marker+1,inputStr.length);
	}
	while (inputStr.indexOf("(") != -1) 
	{
		marker = inputStr.indexOf("(");
		inputStr = inputStr.substring(0,marker) + inputStr.substring(marker+1,inputStr.length);
	}
	while (inputStr.indexOf(")") != -1) 
	{
		marker = inputStr.indexOf(")");
		inputStr = inputStr.substring(0,marker) + inputStr.substring(marker+1,inputStr.length);
	}
	while (inputStr.indexOf(" ") != -1) {
		marker = inputStr.indexOf(" ")
		inputStr = inputStr.substring(0,marker) + inputStr.substring(marker+1,inputStr.length)
	}
	
	return inputStr;
}

function isCheckboxArrayNotEmpty()
{
	var arFields = document.forms[0].elements[gobjField.id];
	
	for (var i = 0; i < arFields.length; i++)
	{
		if (arFields[i].checked)
			return true;
	}
	
	return (false);
}

function isComboBoxSelected()
{
	if (gobjField.selectedIndex == 0)	
		return false;
	else
		return true;
}

