
function mb_hasClass(el,class_name) {
	try {
		classes = el.className.split(" ");
		for (var i=0;i<classes.length;i++) {
			if (classes[i] == class_name) {
				return true;
			}
		}
		return false;
	} catch (e) {
		try { console.log(el, class_name); } catch(e) { }
	}
}
function mb_addClass(el,class_name) {
	try {
		if (!mb_hasClass(el,class_name)) {
			el.className = (el.className != '') ? el.className + " " + class_name : class_name;
		}
	} catch(e) {
		try { console.log(el, class_name); } catch(e) { }
	}
}
function mb_removeClass(el,class_name) {
	try {
		classes = el.className.split(" ");
		var okay = "";
		for (var i=0;i<classes.length;i++) {
			if (classes[i] != class_name) {
				okay = (okay != '') ? okay + " " + classes[i] : classes[i];
			}
		}
		el.className = okay;
	} catch (e) {
		try { console.log(el, class_name); } catch(e) { }
	}
}
function CLASS(class_name,element) {
	if (!element) {
		element = document;
	}
	var docall = element.getElementsByTagName("*");
	var elements = new Array();
	for (var i=0;i<docall.length;i++) {
		var classes = docall[i].className.split(" ");
		for (var j=0;j<classes.length;j++) {
			if (classes[j].match(class_name)) {
				elements.push(docall[i]);
			}
		}
	}
	return elements;
}
function ID(id) {
	return document.getElementById(id);
}
function checkEmail(strng) {
	var error = "";
	if (strng == "") {
		//error = "You must enter an e-mail address.\n";
		return false;
	}
	var emailFilter=/^.+@.+\..{2,3}$/;
	if (!(emailFilter.test(strng))) { 
		//error = "You must enter a valid e-mail address.\n";
		return false;
	} else {
		//test email for illegal characters
		var illegalChars = /[\(\)\,\;\:\\\"\[\]]/;
		if (strng.match(illegalChars)) {
			//error = "The e-mail address contains illegal characters.\n";
			return false;
		}
	}
	return true;    
}
function validate(form,requiredclass) {
	var invalid_class = 'required';
	inputs = CLASS(requiredclass,form);
	var valid = true;
	var checked = false;
	var error_object = new Array();
	error_object.push("Please enter all required fields. The asterisk indicates required fields. ");
	var response = CLASS('error',form)[0];
	for (var i=0;i<inputs.length;i++) {
		var label = CLASS(inputs[i].name + "_label",form)[0];
		if (inputs[i].tagName.toLowerCase() == 'input') {
			switch (inputs[i].type.toLowerCase()) {
				case "text" :
					if (inputs[i].value=='') {
						addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
						valid = false;
					} else if (inputs[i].name == 'email' && !checkEmail(inputs[i].value)) {
						error_object.push("Email address is invalid. ");
						addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
						valid = false;
					} else if (mb_hasClass(label, invalid_class)) {
						removeValidateErrors(label,invalid_class,label.innerHTML.substring(2,label.innerHTML.length));
					}
					break;
				case "radio" :
					var radios = NAME(inputs[i].name,form);
					var radios_checked = false;
					for (var j=0;j<radios.length;j++) {
						if (radios[j].checked) {
							radios_checked = true;
						}
					}
					if (!radios_checked) {
						addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
						valid = false;
					} else if (mb_hasClass(label, invalid_class)) {
						removeValidateErrors(label,invalid_class,label.innerHTML.substring(2,label.innerHTML.length));
					}
					break;
				case "checkbox" :
					var checkboxes = NAME(inputs[i].name,form);
					var checkboxes_checked = false;
					for (var j=0;j<checkboxes.length;j++) {
						if (checkboxes[j].checked) {
							checkboxes_checked = true;
						}
					}
					if (!checkboxes_checked) {
						addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
						valid = false;
					} else if (mb_hasClass(label, invalid_class)) {
						removeValidateErrors(label,invalid_class,label.innerHTML.substring(2,label.innerHTML.length));
					}
					break;
				case "file" :
					if (inputs[i].value=='') {
						addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
						valid = false;
					} else if (mb_hasClass(label, invalid_class)) {
						removeValidateErrors(label,invalid_class,label.innerHTML.substring(2,label.innerHTML.length));
					}
					break;
				case "password" :
					if (inputs[i].name.search(/_confirm/)==-1) {
						var confirm_password = NAME(inputs[i].name + "_confirm",form)[0];
						var confirm_label = CLASS(confirm_password.name + "_label",form)[0];
						if (confirm_password.value != inputs[i].value) {
							addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
							addValidateErrors(confirm_label,response,error_object,invalid_class,"* " + confirm_label.innerHTML);
							truncate = label.innerHTML.substring(2,label.innerHTML.length);
							confirm_truncate = confirm_label.innerHTML.substring(2,confirm_label.innerHTML.length);
							error_object.push("Passwords must be the same. ");
							valid = false;
						} else if (inputs[i].value=='') {
							addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
							addValidateErrors(confirm_label,response,error_object,invalid_class,"* " + confirm_label.innerHTML);
							truncate = label.innerHTML.substring(2,label.innerHTML.length);
							confirm_truncate = confirm_label.innerHTML.substring(2,confirm_label.innerHTML.length);
							valid = false;
						} else if (mb_hasClass(label, invalid_class)) {
							removeValidateErrors(label,invalid_class,truncate);
							removeValidateErrors(CLASS(confirm_password.name + "_label",form)[0],invalid_class,confirm_truncate);
						}
					}
					break;
				case "hidden" :
					if (inputs[i].value=='') {
						addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
						valid = false;
					} else if (mb_hasClass(label, invalid_class)) {
						removeValidateErrors(label,invalid_class,label.innerHTML.substring(2,label.innerHTML.length));
					}
					break;
			}
		} else if (inputs[i].tagName.toLowerCase() == 'textarea') {
			if (inputs[i].value=='') {
				addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
				valid = false;
			} else if (mb_hasClass(label, invalid_class)) {
				removeValidateErrors(label,invalid_class,label.innerHTML.substring(2,label.innerHTML.length));
			}
		} else if (inputs[i].tagName.toLowerCase() == 'select') {
			if (inputs[i].options[inputs[i].selectedIndex].value=="") {
				addValidateErrors(label,response,error_object,invalid_class,"* " + label.innerHTML);
				valid = false;
			} else if (mb_hasClass(label, invalid_class)) {
				removeValidateErrors(label,invalid_class,label.innerHTML.substring(2,label.innerHTML.length));
			}
		}
	}
	if (!valid) {
		addErrorResponse(response,error_object,invalid_class);
	}
	return valid;
}
function addValidateErrors(label,response,error_object,class_name,innerhtml) {
	if (!mb_hasClass(label, class_name)) {
		mb_addClass(label,class_name);
		label.innerHTML = innerhtml;
	}
}
function addErrorResponse(response,error_object,class_name) {
	if (!mb_hasClass(response,class_name)) {
		mb_addClass(response,class_name);
	}
	response.innerHTML = "";
	for (var i=0;i<error_object.length;i++) {
		response.innerHTML += error_object[i];
	}
}
function removeValidateErrors(label,class_name,innerhtml) {
	mb_removeClass(label,class_name);
	label.innerHTML = innerhtml;
}
