function validateRule(el, rule) {
	var i, error = false, options = new Array();

	for (i = 0; i < rule.length; i++) {
		var pos, key, value = true;
		
		key = rule[i];
		if ((pos = key.indexOf("=")) != -1) {
			value = key.substring(pos+1);
			key = key.substring(0, pos);
		}
		
		options[key] = value;
	}
	
	var value = null;

	switch(el.tagName.toUpperCase()) {
		case "TEXTAREA":
		case "INPUT": {
			value = el.value;
		} break;
		
		case "SELECT": {
			value = (el.selectedIndex == -1 ? null : el[el.selectedIndex].value);
		} break;
	}
	
	if (options["required"] == true) {
		if (value == null || value == '' || (options["dontselect"] != undefined && value == options["dontselect"])) {
			error = true;
		}
	}
	
	if (options["minlength"] && value.length < parseInt(options["minlength"])) {
		error = true;	
	}
	
	if (options["maxlength"] && value.length > parseInt(options["maxlength"])) {
		error = true;	
	}

	if (el.disabled) {
		error = false;
	}
	

	if (error && options["errorBackgroundColor"]) {
		el.style.backgroundColor = options["errorBackgroundColor"];	
	} else if (!error && options["backgroundColor"]) {
		el.style.backgroundColor = options["backgroundColor"];	
	}
	
	return error;
}

function validate(frm, rules) {
	var name, rule, el, errors = false;

	for (name in rules) {
		rule = rules[name];
		if ((el = frm[name]) != null) {
			errors += validateRule(el, rule);
		}
	}
	
	if (errors) {
		alert('Sorry you have not filled in required fields. Please fill in all yellow fields.');
	}
	
	return (errors == false);
}
