function isEmail(email) {
	
	var atpos = email.indexOf("@");
	var dotpos = email.lastIndexOf(".");
	if (atpos<1 || dotpos<atpos+2)
		return false;
	else
		return true;
	
}

function in_array(needle, haystack) {
	
	for (var i=0; i<haystack.length; i++) {
		if (needle == haystack[i])
			return true;
	}
	return false;
	
}

function validate(thisForm) {
	
	var i = 0;
	var form = thisForm;
	var submittable = true;
	
	var select_values = new Array("None selected", "", "None", "NULL");
   
   var checkboxes = [];
	
	for (i=0;i<form.length;i++) {
		
		var element = form.elements[i]
		var fail = false;
		element.className = "";
		
		if (element.id.toLowerCase() == "no_val")
			break;
		
		if ((element.type == "text" || element.type == "textarea") && element.value == "")
			fail = true;
		else if (element.type == "select-one" && in_array(element.value, select_values))
			fail = true;
		
		try {
			lower_name = element.name.toLowerCase();
			if (lower_name.indexOf("email") > -1 && isEmail(element.value) == false)
			fail = true;
		}
		catch (e) {
		}
      
      // Ensure a checkbox is selected.
      if  ((element.type == "checkbox") && (element.id.toLowerCase() == "val")) {
         if (!isDefined(checkboxes[element.name]))
            checkboxes[element.name] = false;
         if (element.checked)
            checkboxes[element.name] = true;
      }
		
		if (fail == true) {
			element.className = "fail";
			submittable = false;
		}
		
	}
   
   for (var set in checkboxes) {
      if (checkboxes[set] == false) {
         submittable = false;
         var wholeSet = document.getElementsByName(set);
         for (var item in wholeSet) {
            wholeSet[item].className = "fail";
         }
      }
   }
	
	if (submittable == true)
		return true;
	
	window.scroll(0,0);
	var failure = document.getElementById("failure");
	if (failure)
		failure.style.display = "block";
	return false;
	
}

function selectAll(thisCheck) {
	
	var i =0;
	var form = thisCheck.form;
	
	for (i=0;i<form.length;i++) {
		if (form.elements[i].type == "checkbox" && form.elements[i] != thisCheck) {
			form.elements[i].checked = thisCheck.checked;
			form.elements[i].disabled = thisCheck.checked;
		}
	}
	
}

// Disables or Enables an entire form when called.
function toggleForm(thisCheck) {
	
	var i =0;
	var form = thisCheck.form;
	
	for (i=0;i<form.length;i++) {
		// Don't disable this checkbox.
		if (form.elements[i] == thisCheck) continue;
		// Disable/Enable everything else.
		form.elements[i].disabled = !thisCheck.checked;
	}
	
}

// Hides/Unhides an object of id name.
function showElement(name, visible) {
	
	if (!document.getElementById(name)) return;
	if (visible)
		document.getElementById(name).style.display = '';
	else
		document.getElementById(name).style.display = 'none';
	
}

function isDefined (variable) {
    return (typeof(variable) == "undefined")?  false: true;
}