function validate(){
	var retVal = true;
	var errorString = "";
	var fieldsToValidate = document.forms[0].required.value;
	var aFields = fieldsToValidate.split(",");

	//alert('should loop through ['+aFields.length+'] times');
	for(var i=0;i<aFields.length;i++){
		//curField = document.getElementById(aFields[i]);
		curField = eval('document.forms[0].'+aFields[i]);

		//alert('looping through ['+i+'] times');
		//select case on field type
		//if null, then assume array type

		
		switch(curField.type)
		{
			case 'text':
			case 'textarea':			
			case 'radio':
				isValid = hasData(curField, false);
				break;			
			case 'select-one':
				isValid = hasListData(curField, false);
				break;
			case 'checkbox':
				if(curField.length){
					isValid = hasListData(curField, true);
				}else{
					isValid = hasData(curField, false);
				}
				break;			
			default:
				isValid = hasData(curField, true)
				//alert('curField.type='+curField.type);
				//alert(' assume that we found an array!');
				break;
		}

		//alert(isValid);
		if(isValid == false){
			errorString += concatErrorString(curField);
			toggleError(curField, true);
		} else {
			toggleError(curField, false);
		}
	}

	oErrorDiv = document.getElementById('ErrorDescription');
	if(errorString.length > 0){
		//alert('errors='+errorString);
		oErrorDiv.innerHTML=errorIntro+errorString;
		retVal = false;
	} else
	{
		oErrorDiv.innerHTML="";
	}
	return retVal;
}

function concatErrorString(oField){
	var retVal = "";
	if(oField.name == null)
	{
		retVal = '<div class="errorDisp">'+oField[0].name +'</div>';
	} else
	{
		retVal = '<div class="errorDisp">'+oField.name +'</div>';
	}
	return retVal;
}

function toggleError(oField, showError)
{
		if(showError == true && oField.name != null){
			if(curField.className)
			{
				iPos = curField.className.indexOf("error");
				if(iPos == -1)
				{
					curField.className = curField.className + " error";
				}
			} else {
				curField.className = " error";
			}
		} else if(showError == true && oField.name == null){
			for(var i=0;i<oField.length;i++)
			{
				if(curField[i].className)
				{
					iPos = curField[i].className.indexOf("error");
					if(iPos == -1)
					{
						curField[i].className = curField[i].className + " error";
					}
				} else {
					curField[i].className = " error";
				}
			}
		} else if(showError == false && oField.name != null){
			if(curField.className)
			{
				iPos = curField.className.indexOf("error");
				if(iPos > -1)
				{
					curField.className=curField.className.substr(0, iPos);
				}
			}
		}  else if(showError == false && oField.name == null){
			for(var i=0;i<oField.length;i++)
			{
				if(curField[i].className)
				{
					iPos = curField[i].className.indexOf("error");
					if(iPos > -1)
					{
						curField[i].className=curField[i].className.substr(0, iPos);
					}
				}
			}
		}
}

function hasListData(oField, allowFirstValue)
{
	retVal = false;

	for(var i=0;i<oField.length;i++)
	{
		if(oField[i].selected==true)
		{
			if((allowFirstValue==false && i>0) || allowFirstValue==true)
			{
				retVal = true;
				break;
			}
		}
	}

	return retVal;

}

function hasData(oField, isArray)
{
	retVal = false;

	if(isArray==false)
	{
		if(oField.type == "checkbox")
		{
			if(oField.checked==true)
			{
				retVal = true;
			}
		} else if(oField.value != "" || oField.value.length>0)
		{
			retVal = true;
		}
	} else
	{
		for(var i=0;i<oField.length;i++)
		{
			if(oField[i].checked==true)
			{
				retVal = true;
				break;
			}
		}
	}

	return retVal;
}
