spamWords = /(viagra|ciallis|levitra|vicodin|casino|free ringtones|Lipitor)/gi;

function preFillForm(){

	// Loop through all the forms on the page
	for(i=0;i<document.forms.length;i++){

		// Form = the form this loop is dealing with
		form = document.forms[i];
		// Validate all form elements requiring validation on form submission
		if (form.getAttribute('validate') != null){
			form.onsubmit = function(){
				validation = "passed";
				spamTotal  = 0;
				for(i=0;i<this.length;i++){
					field = this[i];
					if(field.getAttribute('validate') || field.getAttribute('regexp') || field.getAttribute('required') != null){
						if(!validate(field)){
							validation = "failed";
						}
					}
					
					if(matches = field.value.match(spamWords)){
						spamTotal += Math.round(matches.length/field.value.split(" ").length*100);
					}
				}
				
				if (form.getAttribute('maxSpam') && spamTotal >= form.getAttribute('maxSpam')){
					validation = "failed";
				}
				
				if (validation != "passed"){
					alert('Warning: Form did not validate!');
					return false;
				}
			}
		}

		// Loop through the inputs on this form
		for(ii=0;ii<form.length;ii++){

			// Field = the field we are dealing with
			field = form[ii];
			
			// Check to see if this input has any custom attributes
			if((preFill = field.getAttribute('preFill')) || field.getAttribute('validate') || field.getAttribute('required') != null || field.getAttribute('regexp')){

				// Fill in the pre-fill value
				if (preFill != null)
					field.value = preFill;

				// Clear input if it has the preset text in it.
				field.onfocus = function(){
					if(this.value == this.getAttribute('preFill')) this.value = "";
				}

				// Check to make sure the field is valid
				field.onchange = function(){
					validate(this);
				}
				field.onblur = function(){
					validate(this);
				}
			}
		}
	}
}

function validate(field){
	validateType = field.getAttribute('validate');
	validateRule = new RegExp(".*");
	
	rules = {
		text:       /^[a-z ]+$/i,
		number:     /^[0-9]+$/,
		"MM-YYYY":  /^[0-9]{2}-[0-9]{4}$/,
		zipcode:    /^\d{5}([\-]\d{4})?$/,
		visa:       /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/,
		amex:       /^3[4,7]\d{13}$/,
		discover:   /^6011-?\d{4}-?\d{4}-?\d{4}$/,
		mastercard: /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/,
		email: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|biz|info|name|aero|biz|info|jobs|museum)\b/
	}

	if(validateType){
		validateRule = new RegExp(rules[validateType]);
	}

	if (field.getAttribute('regexp')){
		validateRule = new RegExp(field.getAttribute('regexp'));
	}

	if(!field.value.match(validateRule) || (field.getAttribute('required') != null && field.value == "")){
		validateFail(field);
		return false;
	}else{
		validatePass(field);
		return true;
	}

}

function validateFail(obj){
	if(obj.parentNode.nodeName == "LABEL"){
		obj.parentNode.className = obj.parentNode.className+" labelValidateFail";
	}else{
		obj.className = obj.className+" inputValidateFail";
	}					
	
}
function validatePass(obj){
	obj.parentNode.className = obj.parentNode.className.replace(" labelValidateFail","");
	obj.className = obj.className.replace(" inputValidateFail","");
}


// Fill out the form and set the clear functions when the page is ready
preFillForm();