// RightClick Flexform validation functions
// (c) 2001-2009 www.rightclick.nl

function validateFlexform(oForm, sErrorMessage) {
	for (var i = 0; i < oForm.elements.length; i++) {
		var oInput = oForm.elements[i];
		var sValidate = oInput.getAttribute('validate');
		var sDescription = oInput.getAttribute('description');
		if (sValidate != null && !validateFlexfield(oInput, sValidate)) {
			oInput.focus();
			alert((sDescription != null ? sDescription + ' ' : '') + sErrorMessage);
			return false;
		}
	}
	return true;
}

function validateFlexfield(oInput, sValidateType) {
	var tldList = "eu|ac|ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jobs|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mobi|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|travel|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
	var email_validation = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
	
	if (sValidateType == 'X') {
		// No validation
		return true;
	}
	var s = oInput.value = trimSpaces(oInput.value);
	if (sValidateType == 'E' || sValidateType == 'F') {
		// E-mail
		if (sValidateType == 'F' && s == '') {
			// If F, may be empty so OK.
			return true;	
		}
		if (!email_validation.test(s)) return false;
	}
	if (sValidateType == 'M') {
		// Non-empty
		sType = oInput.type.toLowerCase();
		if (sType == 'checkbox') {
			// Get all siblings
			var aCheckbox = oInput.form.elements[oInput.name];		
            if (typeof aCheckbox.length == 'undefined') {
                return (oInput.checked);
            } else {
			    for (var i = 0; i < aCheckbox.length; i++) {
				    if (aCheckbox[i].checked) return true;
			    }
            } 
			return false;
		}
		if (sType == 'radio') {
			// Get all siblings
			var aRadio = oInput.form.elements[oInput.name];
			for (var i = 0; i < aRadio.length; i++) {
				if (aRadio[i].checked) return true;
			}
			return false;
		}
		return (oInput.value != '');
	}
	if (sValidateType == 'N' || sValidateType == 'O') {
		// Numeric
		if (sValidateType == 'O' && s == '') {
			// If O, may be empty so OK.
			return true;	
		}
		if (s == '') return false;
		return stringContainsOnly(s, ' -0123456789');
	}
	return true;
}

