function ValidateForm(roForm) {
	var bValid = true;
	var oElement;
	var sDataType = '';
	var sValue = '';
	var sErrorMessage = '';
	for (var nI = 0; nI < roForm.elements.length; nI++) {
		oElement = roForm.elements[nI];
		if (oElement && oElement.getAttribute('allowempty') && oElement.getAttribute('allowempty').toLowerCase() == 'false') {
			sDataType = oElement.getAttribute('datatype');
			if (sDataType !== null) {
				sDataType = sDataType.toLowerCase();
				sErrorMessage = oElement.getAttribute('errormessage');
				if (oElement.type.toLowerCase() === 'checkbox') {
					bValid = oElement.checked;
				} else {
					sValue = trim(ElementValue(oElement));
					if (sValue !== null) {
						if (isEmpty(sValue)) {
							bValid = false;
						} else if (sDataType === 'float') {
							bValid = isFloatingPointNumber(sValue);
						} else if (sDataType === 'integer' || sDataType === 'int') {
							bValid = isIntegerNumber(sValue);
						} else if (sDataType === 'phone') {
							bValid = isValidPhone(sValue);
						} else if (sDataType === 'emailaddress') {
							bValid = isValidEmailAddress(sValue);
						} else if (sDataType == 'captcha' && roForm.captchaChecksum) {
							bValid = calcMD5(sValue.toUpperCase()) === roForm.captchaChecksum.value;
						}
					}
				}
			}
		}
		if (!bValid) {
			alert(sErrorMessage);
			oElement.focus();
			break;
		}
	}
	return bValid;
}
function trim(rsString) {
	return rsString.replace(/^\s+|\s+$/, '');
}
function isEmpty(rsString) {
	return (rsString.length === 0);
}
function isFloatingPointNumber(rsString) {
	return (!isNaN(parseFloat(rsString)) && parseFloat(rsString) >= 0.0 && parseFloat(rsString).toString() === rsString);
}
function isIntegerNumber(rsString) {
	return (!isNaN(parseInt(rsString)) && parseInt(rsString) >= 0 && parseInt(rsString).toString() === rsString);
}
function isValidPhone(rsString) {
	return (!isNaN(parseInt(rsString.replace(/[\(\)\.\-\ ]/g, ''))));
}
function isValidEmailAddress(rsString) {
	var oRegexEmailFilter = /^.+@.+\.(.{2}|.{3}|.{4}|.{6})$/;
	var oRegexIllegalChars = /[\(\)\<\>\,\;\:\\\/\"\[\]]/;
	return (oRegexEmailFilter.test(rsString) && !oRegexIllegalChars.test(rsString));
}
function ElementValue(roElement) {
	if (roElement) {
		if (roElement.type.toLowerCase() === 'text') {
			return roElement.value;
		} else if (roElement.nodeName.toLowerCase() === 'textarea') {
			return roElement.value;
		}
	}
	return '';
 }
function CheckFloor(rnEntered, rnMinimum, rnDefault) {
	if (rnEntered < rnMinimum) {
		alert ("The minimum bid for this category is " + rnMinimum.toString());
	}
	return (rnEntered < rnMinimum) ? rnDefault : rnEntered;
}
function ExcludedCategory(roCheckbox, rsObject)
{
	var o = document.getElementById(rsObject);
	o.disabled = (roCheckbox.checked ? true : false);
}