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 (el.type.toUpperCase() == 'RADIO') {
			error = (el.checked == false);
		} else 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 (options["target"] != undefined) {
		el = document.getElementById(options["target"]);	
	}

	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, i;

	for (name in rules) {
		rule = rules[name];
		if ((el = frm[name]) != null) {
			if (el.length && el[0].tagName.toUpperCase() == 'INPUT' && el[0].type.toUpperCase() == 'RADIO') {
				var checked = false;
				for (i = 0; i < el.length && !checked; i++) {
					if (validateRule(el[i], rule) == false) {
						checked = true;
					}
				}
				if (!checked) {
					errors++;
				}
			} else {
				errors += validateRule(el, rule);
			}
		}
	}
	
	if (errors) {
		alert('Sorry you have not filled in required fields. Please fill in all yellow fields.');
	}
	
	return (errors == false);
}
