function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }
    }
    return (arrReturnElements)
}



function prepareForm() {
  if(!document.getElementById) {
    return;
  }
  if(!document.getElementById("contact")) {
    return;
  }

  // find container
	var container = document.getElementById("submit");

  // create details div
  var details = document.createElement("div");
	details.setAttribute("id","details");
  details.setAttribute("class", "invisible");
	container.appendChild(details);

  // create wait gif
	var element = document.getElementById('details');
	var image = document.createElement("img");
	image.setAttribute("src","images/wait.gif");
	image.setAttribute("alt","Sending email, please wait");
	image.setAttribute("id","wait");
	element.appendChild(image);

  // create loading message
	var span = document.createElement("span");
	span.setAttribute("id","theStatus");
	var message = document.createTextNode("Sending email, please wait");
	span.appendChild(message);
	element.appendChild(span);


	document.getElementById("contact").onsubmit = function() {
    clearErrors
    var data = "";
    // bytefx.fade(document.getElementById('frmContact'), 100, 50, 1);
		details = setTimeout("document.getElementById('details')", 1000);

    // hide submit and show wait image
    submitBtn = document.getElementById("submitbtn");
    submitBtn.className = "hidden";
    element.className = "";

    for (var i=0; i<this.elements.length; i++) {
			inputName = this.elements[i].nodeName;
			if( inputName=="INPUT" || inputName=="TEXTAREA") {  // Will need to be updated if accepting more input types
				data+= "&";
				data+= this.elements[i].name;
				data+= "=";
				data+= escape(this.elements[i].value);
			}
    }
    return !sendData(data);
  };

}

function sendData(data) {
  var request = getHTTPObject();
  if (request) {
    request.onreadystatechange = function() {
      parseResponse(request);
    };
    request.open( "POST", "contact-logic.cfm", true );
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.send(data);
    return true;
  } else {
    return false;
  }
}

function parseResponse(request) {
  if (request.readyState == 4) {
    if (request.status == 200 || request.status == 304) {
      var container = document.getElementById("frmContact");
      container.innerHTML = request.responseText;
      prepareForm();
			displayErrors();
    }
  }
}

function getHTTPObject() {
  var xhr = false;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }
  return xhr;
}

function displayErrors() {
	var errors = getElementsByClassName(document,'div','errorPane');
	for (var i=0; i<errors.length; i++) {
    errors[i].style.display = "none";
    errors[i].style.height = "23px";
    errors[i].style.overflow = "hidden";
		slidedown(errors[i].id);
	}
}

function clearErrors() {
	var errors = getElementsByClassName(document,'div','errorPane');
	for (var i=0; i<errors.length; i++) {
		slideup(errors[i].id);
	}
}

window.onload = prepareForm;
