// form highlighting
function setFocus(elem){
	elem.style.border='#aaaaff 1px solid';
}
function setBlur(elem){
	elem.style.border='#E0E0E0 1px solid';
}

// toggle div visibility
function toggleDisplay(id,defaultDisplay){
	var elem = document.getElementById(id);
	var display = elem.style.display||defaultDisplay;
	display == "none" ? displayBlock(id) : displayNone(id);
}
function displayBlock(id){
	document.getElementById(id).style.display = "block";
}
function displayNone(id){
	document.getElementById(id).style.display = "none";
}

// form validation
// @ elempolicy - [[name1,rule1,errormessage1],[name2,rule2,errormessage2],...[nameN,ruleN,errormessageN]]
//                rule is optional and will default to "required", error message is optional
//   currently supported rules are: "req" for can't be empty, "email" for email, "num" for valid non-zero positive number, "empty" for value must be empty(used for spam trapping)
function validateForm(formname,elempolicy){
	var form = document.forms[formname];
	if(!form){
		//alert("Form failed to validate.");
		return false;
	}
	var isValid = true;
	for(var i in elempolicy){
		var elem = form[elempolicy[i][0]];
		var rule = elempolicy[i][1]||"req";
		var errormessage = elempolicy[i][2];
		//alert(i+":"+elem+"|"+rule+"|"+errormessage);
		switch(rule){
			default:
			case "req":
				if(elem.value==""){
					error(elem,errormessage||"Please enter a value for "+elem.name+".");
					isValid = false;
				}
				break;
			case "email":
				if(elem.value.indexOf("@")==-1 || elem.value.indexOf(".")==-1){
					error(elem,errormessage||"Please enter a valid email address.");
					isValid = false;
				}
				break;
			case "num":
				if(isNaN(Number(elem.value)) || Number(elem.value) <= 0){
					error(elem,errormessage||"Please enter a non-zero positive number.");
					isValid = false;
				}
				break;
			case "empty":
				if(elem.value!=""){
					alert(errormessage||"Please leave the designated field blank. It is a trap to prevent spam.");
					elem.value = "";
					isValid = false;
				}
				break;
		}
		if(!isValid) break;
	}
	return isValid;
	function error(elem, errormessage){
		alert(errormessage);
		//if(navigator.appName.indexOf('Microsoft')==-1)
			elem.focus(); // in IE, this causes the red dotted error border below to get replaced by the blue one as set by setFocus
		elem.style.border = '1px dotted #ff0000';
		return false;
	}
}