function checkFormGeneric(formname) {

//loop through all elements in the form, check the type of each and validate accordingly.
//highlight each field that doesnt have a value.
//all values are required except textarea as they are optional comments

var showError = false;
var showEmailError = false;
var hi_colour = "#5d9dd0";
var lo_colour = "#FFFFFF";
var form_colour = "#FFFFFF";
var checkboxMissing=false;

var radio_btns = [];
for(var i=0; i< document[formname].elements.length; i++) {

//check textbox
if ((document[formname].elements[i].lang == "validate") || (document[formname].elements[i].lang == "validate-email")) {

if (document[formname].elements[i].type == "text") {
//if no value, highlight it
if ((document[formname].elements[i].lang == "validate") && (document[formname].elements[i].value == "")) {
showError = true;
document[formname].elements[i].style.background=hi_colour;
} else if ((document[formname].elements[i].lang == "validate-email") && (!emailCheck(document[formname].elements[i].value))) {
showEmailError = true;
document[formname].elements[i].style.background=hi_colour;
} else {
//else dont highlight or un-highlight if its highlighted.
document[formname].elements[i].style.background=lo_colour;
}
}

//check radio buttons - create entry in the array for this radio button group
if (document[formname].elements[i].type == "radio") {
btn = document[formname].elements[i];
if(!radio_btns[btn.name]) { radio_btns[btn.name] = 0; } //if button group not already in array, put in array and set to 0
if(btn.checked) { radio_btns[btn.name] = 1; } //if that button is checked, set to 1

}
if (document[formname].elements[i].type == "checkbox") {
btn = document[formname].elements[i];
if(!radio_btns[btn.name]) { radio_btns[btn.name] = 0; } //if button group not already in array, put in array and set to 0
if(btn.checked) { radio_btns[btn.name] = 1; } //if that button is checked, set to 1
checkboxMissing=true;
}

}

for(var k in radio_btns)
{
if(!radio_btns[k]) {
showError = true;
//set that button group to highlighted using the span tag around it.
document.getElementById(k).style.background=hi_colour; 
} else {
document.getElementById(k).style.background=form_colour; 
}


}
}


if (showError) {
alert("Required information missing. Please ensure you complete all of the higlighted fields.");
return false;
} 
if (showEmailError) {
alert("Please enter a valid email address.");
return false;
} 
return true;

}

function emailCheck (emailStr) {
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	//alert("Email address seems incorrect (check @ and .'s)")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]
if (user.match(userPat)==null) {
    //alert("The username doesn't seem to be valid.")
    return false
}
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        //alert("Destination IP address is invalid!")
		return false
	    }
    }
    return true
}

var domainArray=domain.match(domainPat)
if (domainArray==null) {
	//alert("The domain name doesn't seem to be valid.")
    return false
}
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   //alert("The address must end in a three-letter domain, or two letter country.")
   return false
}
if (len<2) {
   var errStr="This address is missing a hostname!"
   //alert(errStr)
   return false
}
return true;
}
