var tries = 0;

function validateForm ( form ) 
{
    var retval = true;  // be optimistic!!
    var silent = false;
    for ( var e=0; e < form.elements.length; e++ ) 
    {
	var el = form.elements[e];
	var errname = el.name + "error";

	if (el.type != 'radio' && el.value != '')
	{
	    var ndx = el.value.search(/</);
	    if (ndx >= 0)
	    {
	        retval=false;
		silent=true;
	    }
	}

	if (el.name=='title'||el.name=='state'||
	    el.name=='zipcode'||el.name=='fax'||
	    el.name=='questions'||el.name=='submit'||
	    el.name=='reset')
	{
	    // ok if empty or anything else
	    // but reject junk in non empty fields
	    if (el.name=='fax' && el.value != '')
	    {
		var ndx = el.value.search(/[^0-9-.\s()+]/);
		if (ndx >= 0)
		{
		    retval=false;
		    silent=true;
		}
		// international... means the rest could be
		// alphanumeric, includin extended latin/ascii set, so...
	    }
	}
	else if ( el.type == 'radio' )
	{
	    var group = form [el.name];
	    var checked = false;
	    if (!group.length) 
		checked = el.checked;
	    else
		for ( var r = 0; r < group.length; r ++ )
		    if ( ( checked = group [ r ].checked ) )
			break;
	    if ( !checked ) 
	    {
		var output = "<span style=\"color:red\">Please choose an option!</span>";
		document.getElementById(errname).innerHTML=output;
		retval = false;
	    }
	    else
	    {
		document.getElementById(errname).innerHTML='';
	    }

	}
	else if ( el.value == '' ) 
	{
	    var output = "<span style=\"color:red\">Please fill in required field!</span>";
	    document.getElementById(errname).innerHTML=output;
	    retval = false;
	}
	else
	{
	    //alert(el.name + " with value " + el.value);
	    document.getElementById(errname).innerHTML='';
	    if (el.name=='email')
	    {
		var ndx1 = el.value.search(/^([\w.-])+@([\w])+\./);
		var ndx2 = el.value.search(/\.([a-z])+$/);
		if (ndx1 < 0 || ndx2 < 0)
		{
		    retval=false;
		    silent=true;
		}
	    }
	    /* nope...no can do...people put in things like "no phone" 
	    or even "xxxxx or xxxxxx" augh!
            if (el.name=='phone')
	    {
		var ndx = el.value.search(/[^0-9-.\s()+]/);
		if (ndx >= 0)
		{
		    retval=false;
		    silent=true;
		}
	    }
	    */
	    if (el.name=='firstname' || el.name=='lastname' ||
	        el.name=='state' || el.name=='country')
	    {
		var ndx = el.value.search(/\d/);
		if (ndx > 0)
		{
		    retval=false;
		    silent=true;
		}
	    }
	}
    }
    document.getElementById('generalerror').innerHTML='';
    tries++;
    if (tries >= 3)
    {
//alert("too many failures");
	document.getElementById('generalerror').innerHTML=
		  "<input type=\"hidden\" name=\"discard\" value=\"Y\">\n";
        return true;
    }

    if (retval===false)
    {
	if (silent===false)
	{
	    document.getElementById('generalerror').innerHTML=
		  "<span style=\"color:red\">Please go back and fill in required field(s)!</span>";
	}
	return false;
    }
    else
    {
	return true;
    }
}

