function countEmptyFormFields(strFormName) // as integer
	{
	// **** by JerryNixon@fellowship.net, Feb 2001
	// setup variables
	var objForm = document.forms[strFormName];
	var intCount = 0;
	var strHighlightCode = "objForm.elements[i].style.background='#00FFFF';";
	var strNormalCode = "objForm.elements[i].style.background='white';";

  function getSelBtn(radioGrp){
    for (var i = 0; i < radioGrp.length; i++){
      if (radioGrp[i].checked) {
        return 1;
      }
    }
    return 0;
  }

	// loop through all form fields
	for (i=0; i <= objForm.elements.length-1; i++)
		{
		// test first if field is required
		if (objForm.elements[i].getAttribute("RequiredField") != null)
			{ 
			// reset boolean
			bProblem = false;
			// check radio buttons
			if (objForm.elements[i].type == "radio")
			  if (getSelBtn(objForm.elements[i]) == 0)
			    bProblem = false;
			
			// if (objForm.elements[i].type == "button") 	{ bProblem = false; }
			// if (objForm.elements[i].type == "select") 	{ bProblem = false; }
			// if (objForm.elements[i].type == "reset") 	{ bProblem = false; }
			if (objForm.elements[i].type == "text") 	{ bProblem = (objForm.elements[i].value == "") }
			if (objForm.elements[i].type == "password") 	{ bProblem = (objForm.elements[i].value == "") }
			if (objForm.elements[i].type == "select-one") 	{ bProblem = (objForm.elements[i].selectedIndex < 1) }
			if (objForm.elements[i].type == "checkbox") 	{ bProblem = (objForm.elements[i].checked != true) }
			// handle coloring elements
			if (bProblem)
				{
				 // increase count of non compliant
				 intCount++;
				 // highlight incomplete fields
				 eval(strHighlightCode);
				} 
			   else 
				{
				 // unhighlight, in case it is highlighted
				 eval(strNormalCode);
				} 
			// close if required
			}
		// close loop all fields
		}
	// return count of empty required
	return intCount;
	// close function
}