// JavaScript Document
addLoadListener(initForm);
function createRequest() {
  try {
    request = new XMLHttpRequest();
  } catch (tryMS) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (otherMS) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }	
  return request;
}


function getActivatedObject(e) {
  var obj;
  if (!e) {
    // early version of IE
    obj = window.event.srcElement;
  } else if (e.srcElement) {
    // IE 7 or later
    obj = e.srcElement;
  } else {
    // DOM Level 2 browser
    obj = e.target;
  }
  return obj;
}

function addEventHandler(obj, eventName, handler) {
  if (document.attachEvent) {
    obj.attachEvent("on" + eventName, handler);
  } else if (document.addEventListener) {
    obj.addEventListener(eventName, handler, false);
  }
}

var warnings = {
  "name" : {
    "required": "Please enter in your name.",
    "letters" : "Only letters are allowed in a name.",
    "err"     : 0
  },
    "company" : {
    "required": "Please enter in your company.",
    "letters" : "Only letters are allowed in a company name.",
	"special" : "Cannot contain special characters.",
    "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 question or comments.",
	  "letters" : "Only letters are allowed in this field.",
	  "special" : "Cannot contain special characters.",
	  "err"	: 0
  }
}


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

function fieldIsFilled(e) {
	var me = getActivatedObject(e);
	if (me.value =="") {
		//Display an error message
		//me.focus();
		warn(me, "required");
		me.className="invalid";
	} 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
		//me.focus();
		warn(me, "format");
		me.className="invalid";
	} 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-Z]+$/;
	if (nonAlphaChars.test(me.value)) {
		//Display error message
		//me.focus();
		warn(me, "special");
		me.className="invalid";
	} else {
		//No problems; we're good to go
		unwarn(me, "special");
		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
		//me.focus();
		warn(me, "letters");
		me.className="invalid";
	} 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
		//me.focus();
		warn(me, "numbers");
		me.className="invalid";
	} else {
		//No problems; we're good to go
		unwarn(me, "numbers");
		me.className="valid";
	}
}

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;
}

