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 if(reqArray[a].indexOf("date") >= 0) {
				if (!isValidDate(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";
				}
			} 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 isValidDate(date) {
	try {
		var tmp = new Date(date);
		var date_string = tmp.getDate() + " " + getMonthName(tmp.getMonth()) + " " + tmp.getFullYear();
		
		return (date == date_string);
	} catch(ex) {
		return false;
	}
}

function getMonthName(val) {
	var month = new Array(12);
	month[0] = "January";
	month[1] = "February";
	month[2] = "March";
	month[3] = "April";
	month[4] = "May";
	month[5] = "June";
	month[6] = "July";
	month[7] = "August";
	month[8] = "September";
	month[9] = "October";
	month[10] = "November";
	month[11] = "December";
	
	return month[val];
}

function checkTextField(form_name, field_name) {
	var field_value = document.forms[form_name].elements[field_name].value
	field_value = field_value.replace(/^\s*|\s*$/g, "");
	
	try	{
		if (field_value == "") {
			document.forms[form_name].elements[field_name].className = "textfield-required";
			return false;
		} else {
			document.forms[form_name].elements[field_name].className = "textfield-ok";
			return true;
		}
	} catch(e) {
		return false;
	}
}

function checkDatePickerField(form_name, field_name) {
    var field_value = document.forms[form_name].elements[field_name].value
    field_value = field_value.replace(/^\s*|\s*$/g, "");

    try {
        if (field_value == "") {
            document.forms[form_name].elements[field_name].className = "datepickerfield-required";
            return false;
        } else {
            document.forms[form_name].elements[field_name].className = "datepickerfield-ok";
            return true;
        }
    } catch (e) {
        return false;
    }
}

function checkCheckBox(form_name, field_name) {
	try {
		if (!document.forms[form_name].elements[field_name].checked)
			return false;
		else
			return true;
	} catch(e) {
		return false;
	}
}

function checkCheckBoxGroup(form_name, group_id) {
	var group_name = "group" + group_id;
	
	try {
		for(var i = 0; i < document.forms[form_name].elements[group_name].length; i++) {
			if (document.forms[form_name].elements[group_name][i].checked)
				return true;
		}
	} catch(e) {
		return false;
	}
}

function checkRadioButtonGroup(form_name, group_id) {
	var group_name = "group" + group_id;
	
	try {
		for(var i = 0; i < document.forms[form_name].elements[group_name].length; i++) {
			if (document.forms[form_name].elements[group_name][i].checked)
				return true;
		}
	} catch(e) {
		return false;
	}
}

function checkSelect(form_name, field_name) {
	try {
		if (document.forms[form_name].elements[field_name].selectedIndex == 0)
			return false;
		else
			return true;
	} catch(e) {
		return false;
	}
}

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; }
}
