var Pattern = new Object();

Pattern.word = /[\w\d]+/;
Pattern.number = /^[,\d\s]+$/;
Pattern.email = /^[-.\w\d]{1,20}[@][-.\w\d]{1,30}$/;


Pattern.betterEmail = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
//...^^ that will put hairs on your chest ^^...   /flexmuscles 

//helper fn. i wish this was builtin to js
function trim(s){
	return s.replace(/^\s+(\S+.*)/, '$1').replace(/(.*\S+)\s+$/, "$1");
}

///jay did this so shoot im or send praise


var validators = {
	'exist': function(inputElement) {
		//checkboxes and multi-select dropdowns and radio groups are Special cases for existence checking. 
		if ("checkbox,radio".search(inputElement.type) >= 0) {
			var aCheckboxes = document.getElementsByName(inputElement.name);
			var bIsAnyoneChecked = false;
			for (var i = 0; i  < aCheckboxes.length && !bIsAnyoneChecked; i++){
				if (aCheckboxes.item(i).checked){
					bIsAnyoneChecked = true;
				}
			}
			return bIsAnyoneChecked;
		} else if (inputElement.nodeName == 'SELECT') {
			if (inputElement.selectedIndex == -1){
				return false;
			}
			return trim(inputElement.options[inputElement.selectedIndex].value).length;
		} else {
			return trim(inputElement.value).length;
		}
	},
	
	'word': function(inputElement) {
		return trim(inputElement.value).search(Pattern.word) != -1;
	},
	
	'number': function(inputElement) {
		return trim(inputElement.value).search(Pattern.number) != -1;
	},
	
	'email': function(inputElement) {
		return trim(inputElement.value).search(Pattern.betterEmail) != -1;
	}
	
};

validators.string = validators.word; //alias

function validateForm(form)
{
	errorCount = "";
	errorMessage = "An error has occured in the following fields: \n\n";

	var currentValue = form.elements;
	var bValid = true;
	var sInputNamesValidated = {}; //keep track of input NAME already validated
	

	for (i=0; i<currentValue.length; i++) {
		var inputElement = currentValue[i];
		if (sInputNamesValidated[inputElement.name]){
			continue;
		}
		var validatorName = inputElement.getAttribute('validator');
		if (validatorName && validators[validatorName]){
			if ( !validators[validatorName](inputElement)){
				errorMessage += inputElement.getAttribute('message') + "\n\n";
				bValid = false;
			}
		}
		sInputNamesValidated[inputElement.name] = true;
	}
	
	if (!bValid){
		alert(errorMessage);
		return false;
	}
	return true;
}




