// JavaScript Document
var warnings = {
  "name" : {
    "required": "Please enter in your name.",
    "letters" : "Only letters are allowed in a first name.",
    "err"     : 0
  },
  "email" : {
    "required": "Please enter in your e-mail address.",
    "format" : "Please enter your e-mail in the form 'name@domain.com'.",
    "err"     : 0
  },
  "comments" : {
	  "required": "Please send us your comments or suggestions.",
	  "letters" : "Only letters are allowed in this field.",
	  "err"	: 0
  }
}


function initForm() {
	addEventHandler(document.getElementById("name"), "blur", fieldIsFilled);
	addEventHandler(document.getElementById("name"), "blur", fieldIsLetters);
	addEventHandler(document.getElementById("email"), "blur", fieldIsFilled);
	addEventHandler(document.getElementById("email"), "blur", emailIsProper);
	addEventHandler(document.getElementById("comments"), "blur", fieldIsFilled);
	addEventHandler(document.getElementById("comments"), "blur", fieldIsMixed);
}

function fieldIsFilled(e) {
	var me = getActivatedObject(e);
	if (me.value =="") {
		//Display an error message
		warn(me, "required");
	} else {
		// No problem; we're good to go
		unwarn(me, "required");
	}
}

function emailIsProper(e) {
	var me = getActivatedObject(e);
	if (!/^[\w\.-_\+]+@[\w-]+(\.\w{2,4})+$/.test(me.value)) {
		//Display an error message
		warn(me, "format");
		me.focus();
	} else {
		// No problem; we're good to go
		unwarn(me, "format");
		me.className = "valid";
	}
}
//function for Mixed letters and numbers plus white spaces
function fieldIsMixed(e) {
	var me = getActivatedObject(e);
	var nonAlphaChars = /^[0-9a-zA-Zs]+$/;
	if (nonAlphaChars.test(me.value)) {
		//Display error message
		warn(me, "letters");
		me.focus();
	} else {
		//No problems; we're good to go
		unwarn(me, "letters");
		me.className = "valid";
	}
}
//function for letters only plus white space
function fieldIsLetters(e) {
	var me = getActivatedObject(e);
	var nonAlphaChars = /[^a-zA-Z]+$/;
	if (nonAlphaChars.test(me.value)) {
		//Display error message
		warn(me, "letters");
		me.focus();
	} else {
		//No problems; we're good to go
		unwarn(me, "letters");
		me.className = "valid";
	}
}
//function for numbers only
function fieldIsNumbers(e) {
	var me = getActivatedObject(e);
	var nonNumericChars = /[^0-9]/;
	if (nonNumericChars.test(me.value)) {
		//Display error message
		warn(me, "numbers");
	} else {
		//No problems; we're good to go
		unwarn(me, "numbers");
	}
}

function warn(field, warningType) {
	var parentNode = field.parentNode;
	var warning = eval('warnings.' + field.id + '.' + warningType);
	if (parentNode.getElementsByTagName("p").length == 0) {
		var p = document.createElement("p");
		field.parentNode.appendChild(p);
		var warningNode = document.createTextNode(warning);
		p.appendChild(warningNode);
		p.className = "warning";
	} else {
		var p = parentNode.getElementsByTagName("p")[0];
		p.childNodes[0].nodeValue = warning;
	}
	document.getElementById("submit").disabled = true;
}

function unwarn(field, warningType) {
	if(field.parentNode.getElementsByTagName("p").length > 0) {
		var p = field.parentNode.getElementsByTagName("p")[0];
		var currentWarning = p.childNodes[0].nodeValue;
		var warning = eval('warnings.' + field.id + '.' + warningType);
		if (currentWarning == warning) {
			field.parentNode.removeChild(p);
		}
	}
	var fieldsets = document.getElementById("feedback").getElementsByTagName("fieldset");
	for (var i=0; i<fieldsets.length; i++) {
		var fieldWarnings = fieldsets[i].getElementsByTagName("p").length;
		if (fieldWarnings > 0) {
			document.getElementById("submit").disabled = true;
			return;
		}
	}
	document.getElementById("submit").disabled = false;
}
