function trim(stringToTrim) {
	if (stringToTrim == null) { return ""; }
	return stringToTrim.replace(/^\s+|\s+$/g, "");
}

function validateForm(formId, errorId, isAjax) {
	var valid = true;
	var form = document.getElementById(formId);
	var errorDiv = document.getElementById(errorId);

	var errorLines = null;
	errorLines = Array();
	
//	errorDiv.innerHTML = '';

	for (var i = 0; i <form.elements.length; i++) {
		var el = form.elements[i];

		var errorLine = false;
		var error = el.attributes.getNamedItem("error") ? el.attributes.getNamedItem("error").value : false;
		if (!el.attributes.getNamedItem('required') || el.attributes.getNamedItem("required").value == 'true') {
		
			if (el.type == 'text' || el.type == 'file' || el.type == 'textarea' || el.type == 'password') {
				var trim_value = trim(el.value);
				if (trim_value == null || trim_value == '') {
				//	el.focus();
					errorLine = error ? error : el.name + ' cannot be blank';
					valid = false;
				}
			}
			else if (el.type.indexOf('select') != -1) {
				if (el.selectedIndex == -1 || trim(el.value) == "") {
				//	el.focus();
					errorLine = error ? error : 'Please select a value of the select field:' + el.name;
					valid = false;
				}
			}
			else if (el.type =='radio') {
				var group = form[el.name];
				var checked = false;
				if (!group.length) {
					checked = el.checked;
				}
				else {
					for (var j = 0; j < group.length; j++) {
						if ((checked = group[j].checked)) { break; }
					}
				}
				
				if (!checked) {
				//	el.focus();
					errorLine = error ? error : 'Please check one of the radio buttons: ' + el.name;
					valid = false;
				}
			}
			else if (el.type =='checkbox') {
				var group = form[el.name];
				if (group.length > 1) {
					var checked = false;
					for (var j = 0; j < group.length; j++) {
						if ((checked = group[j].checked)) { break; }
					}
				}
				else { var checked = true; }
			
				if (!checked) {
				//	el.focus();
					errorLine = error ? error : 'Please check one of the checkboxes: ' + el.name;
					valid = false;
				}
			}
		}

		if (errorLine) {
			var listItem = document.createElement("li");
			var errorLineText = document.createTextNode(errorLine);
			listItem.appendChild(errorLineText);
			errorLines[errorLines.length] = listItem;
		}
		else {
			var type = el.attributes.getNamedItem("datatype") ? el.attributes.getNamedItem("datatype").value : 'string';

			if (type != 'string') {
				if (type == 'integer') {
					errorLine = (el.value == +(el.value)) && (el.value.indexOf('.') < 0) ? false : 'You must enter a whole number for ' + el.name;
					if (errorLine) { valid = false; }
				}
			}

			if (errorLine) {
				var listItem = document.createElement("li");
				var errorLineText = document.createTextNode(errorLine);
				listItem.appendChild(errorLineText);
				errorLines[errorLines.length] = listItem;
			}
		}
	}
	
//	errorMsg += '</ul>';

	if (valid) {
		if (isAjax) {form.onsubmit();} else {form.submit();}
	}
	else {
		var errorChildren = errorDiv.childNodes;

		for(i = errorChildren.length - 1; i > -1; --i) {
			errorDiv.removeChild(errorChildren[i]);
		}


		if (errorLines.length > 0) {
			var errorMsgText = document.createTextNode('There were some problems with your submission:');
			errorDiv.appendChild(errorMsgText);
			var unorderedList = document.createElement("ul");

			for(i = 0; i < errorLines.length; ++i) {
				unorderedList.appendChild(errorLines[i]);
			}
			errorDiv.appendChild(unorderedList);
		}
//		errorDiv.innerHTML = errorMsg;
	}
}
