function isMultipleTextFieldEntered(element, msg, minentered, maxentered) {
	var entered = 0;
	var firstEmpty = -1;
	var m;
	if (element) {
		if (typeof(element.length) != "undefined") {
			if (minentered && minentered < element.length) {
				m = minentered;
			} else {
				m = element.length;
			}
			for (var i = 0; i < m; i++ ) {
				if (element[i].value != '') {
					entered++;
				} else {
					if (firstEmpty == -1) {
						firstEmpty = i;
					}
				}
			}
		} else {
			if (element.value != '') {
			  entered = 1;
			}
		}
	}

	if (typeof(element.length) != "undefined") {
		if (minentered && maxentered) {
			if (minentered == maxentered) {
				if (!(entered == minentered)) {
					alert(msg);
					element[firstEmpty].focus();
					return false;
				}
			} else {
				if (!(entered >= minentered && entered <= maxentered)) {
					alert(msg);
					element[firstEmpty].focus();
					return false;
				}         }
		} else if (minentered && !maxentered) {
			if (entered < minentered) {
				alert(msg);
				element[firstEmpty].focus();
				return false;
			}
		} else if (!minentered && !maxentered) {
			if (entered < 1) {
				alert(msg);
				element[firstEmpty].focus();
				return false;
			}
		}
	} else {
		if (entered < 1)	{
			alert(msg);
			if (typeof(element.length) != "undefined") {
				element[firstEmpty].focus();
			} else {
				element.focus();
			}
			return false;
		}
	}
	return true;
}

function isMultipleTextFieldValid(element, msg, min_incl, min_excl, max_excl, max_incl, pattern) {
	if (element) {
		if (typeof(element.length) != "undefined") {
			for (var i = 0; i < element.length; i++ ) {
				if (!isTextFieldValid(element[i], msg, min_incl, min_excl, max_excl, max_incl, pattern)) {
					return false;
				}
			};
			return true;
		} else {
			return isTextFieldValid(element, msg, min_incl, min_excl, max_excl, max_incl, pattern);
		}
	} else {
		return true;
	}
}

function isTextFieldValid(element, msg, min_incl, min_excl, max_excl, max_incl, pattern) {
	if (element && element.value && element.value != '') {
		/*
		** If any of the "ends" cannot be converted to a number compare as character strings
		*/
		var num_min_incl = Number(min_incl);
		var num_min_excl = Number(min_excl);
		var num_max_excl = Number(max_excl);
		var num_max_incl = Number(max_incl);
		var value = Number(element.value);
		if (isNaN(num_min_incl) || isNaN(num_min_excl) || isNaN(num_max_excl) || isNaN(num_max_incl) || isNaN(value)) {
			var min_OK = ((min_incl == '') && (min_excl == '')) || ((min_incl != '') && (min_incl <= element.value)) || ((min_excl != '') && (min_excl < element.value));
			var max_OK = ((max_incl == '') && (max_excl == '')) || ((max_incl != '') && (max_incl >= element.value)) || ((max_excl != '') && (max_excl > element.value));
		} else {
			var min_OK = ((min_incl == '') && (min_excl == '')) || ((min_incl != '') && (num_min_incl <= value)) || ((min_excl != '') && (num_min_excl < value));
			var max_OK = ((max_incl == '') && (max_excl == '')) || ((max_incl != '') && (num_max_incl >= value)) || ((max_excl != '') && (num_max_excl > value));
		}
		var p = new RegExp(pattern);
		var pattern_OK = (pattern == '') || element.value.match(p);
		if (min_OK && max_OK && pattern_OK) {
			return true;
		} else {
			alert(msg);
			element.focus();
			return false;
		}
	} else {
		return true;
	}
}

function isDropdownListSelected(element, msg) {
	if (element && element.options[element.selectedIndex].value && element.options[element.selectedIndex].value != '') {
		return true;
	} else {
		alert(msg);
		element.focus();
		return false;
	}
}

function isMultipleSelectionSelected(element, msg, minselected, maxselected) {
	var selected = 0;
	if (element) {
		for (var i = 0; i < element.options.length; i++) {
			if (element.options[i].selected && element.options[i].value != '') {
				selected++;
			}
		}
		if (minselected && maxselected) {
			if (minselected == maxselected) {
				if (!(selected == minselected)) {
					alert(msg);
					element.focus();
					return false;
				}
			} else {
				if (!(selected >= minselected && selected <= maxselected)) {
					alert(msg);
					element.focus();
					return false;
				}         }
		} else if (minselected && !maxselected) {
			if (selected < minselected) {
				alert(msg);
				element.focus();
				return false;
			}
		} else if (!minselected && !maxselected) {
			if (selected < 1) {
				alert(msg);
				element.focus();
				return false;
			}
		}
	}
	return true;
}

function isRadioButtonSelected(element, msg) {
	var selected;
	if (element) {
		if (typeof(element.length) != "undefined" ) {
			for (var i = 0; i < element.length; i++ ) {
				selected = element[i].checked;
				if (selected) break;
			}
		} else {
			selected = element.checked;
		}
	}
	if (!selected) {
		alert(msg);
		if (typeof(element.length) != "undefined" ) {
			element[0].focus();
		} else {
			element.focus();
		}
		return false;
	}
	return true;
}

function isCheckboxSelected(element, msg, minselected, maxselected) {
	var selected = 0;
	if (element) {
		if (typeof(element.length) != "undefined") {
			for (var i = 0; i < element.length; i++ ) {
				if (element[i].checked) {
					selected++;
				}
			}
		} else {
			if (element.checked) {
			  selected = 1;
			}
		}
		if (minselected && maxselected) {
			if (minselected == maxselected) {
				if (!(selected == minselected)) {
					alert(msg);
					element[0].focus();
					return false;
				}
			} else {
				if (!(selected >= minselected && selected <= maxselected)) {
					alert(msg);
					element[0].focus();
					return false;
				}         }
		} else if (minselected && !maxselected) {
			if (selected < minselected) {
				alert(msg);
				element[0].focus();
				return false;
			}
		} else if (!minselected && !maxselected) {
			if (selected < 1) {
				alert(msg);
				element[0].focus();
				return false;
			}
		}
		return true;
	}
}

function insertInput(here, id, n, m) { 
	var span;
	var input = document.getElementById(id).cloneNode(true); 
	input.setAttribute("id", id + "_" + n);
	if (input.tagName == "INPUT") {
		input.setAttribute("value", "");
	}
	if (input.tagName == "TEXTAREA") {
		input.innerHTML = "";
	}
	span = document.createElement("span");
	span.setAttribute("class", "formcontrol");
	span.appendChild(input); 
	here.parentNode.insertBefore(span, here);
	if (m != "unbounded" && n == m) {
		here.style.display = "none";
	}
	return true;
}