function checkRequired(form_name) {
	
	failed = false;
	
	if (document.forms[form_name].required.value) {
		reqArray = document.forms[form_name].required.value.split(",");

		for (a = 0; a < reqArray.length; a++) {
			if(document.forms[form_name].elements[reqArray[a]].value == "") {
				document.forms[form_name].elements[reqArray[a]].className = "textfield-required";
				if (!failed) { document.forms[form_name].elements[reqArray[a]].focus(); }
				failed = true;
			} else {
				document.forms[form_name].elements[reqArray[a]].className = "textfield-ok";
			}
		}

		if (failed) {
			alert("One or more required fields were not filled in. Please fill in all the required fields before submitting.\nThe required fields are highlighted.");
			return false
		}
	}

	return true;
}

function checkPosition(form_name) {
	
	var failed = false;
	
	var elements = parseInt(document.forms[form_name].elements.length) - 3;
	var max_pos = elements;
	var positions = new Array(elements - 1);
	
	for(var i = 0; i < elements; i++) {
		var curr_pos = document.forms[form_name].elements[i].value;
		if ((!isNumeric(curr_pos)) || (parseInt(curr_pos) > max_pos) || (parseInt(curr_pos) < 1) || (curr_pos == "")) {
			document.forms[form_name].elements[i].className = "textfield-required";
			if (!failed) { document.forms[form_name].elements[i].focus(); }
			failed = true;
		} else {
			var duplicate = false;
			for(j = 0; j < positions.length; j++) {
				if (parseInt(positions[j]) == parseInt(curr_pos))
					duplicate = true;
			}
			
			if (duplicate) {
				document.forms[form_name].elements[i].className = "textfield-required";
				if (!failed) { document.forms[form_name].elements[i].focus(); }
				failed = true;
			} else {
				document.forms[form_name].elements[i].className = "textfield-ok";
				positions[i] = parseInt(curr_pos);
			}
		}
	}
	
	if (failed) {
		alert("The proposed item order is invalid. Check fields highlighted in red for:\n- non-numeric values;\n- numeric values less than 1;\n- numeric values larger than the maximum number of items;\n- duplicated numeric values.")
		return false;
	}
	
	return true;	
}

function checkEmail(str) {
	var emailFilter=/^.+@.+\..{2,3}$/;
	if (!(emailFilter.test(str))) { return false; }

	var illegalChars= /[\(\)<>,;:\\\/"\[\]]/;
	if (str.match(illegalChars)) { return false; }

	return true;
}

function checkValidNick(str) {
	var legalChars = /^[-a-z _]+$/i;
	if (str.match(legalChars)) { return true; } else { return false; }
}

function checkValidDate(str) {
	var regexp = /^\d{4}\-\d{2}-\d{2} \d{2}:\d{2}:?\d{0,2}$/;
	if (!(regexp.test(str))) { return false; } else { return true; }
}
