/* -------------------------------------------------------

		Misc Functions

------------------------------------------------------- */

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

/* -------------------------------------------------------

		Lightbox functions/functionality

------------------------------------------------------- */

function showBox(url) {
    $('#headerflash').hide();
	var urlArray = url.split('facultyid/');
	var facultyID = (urlArray[1]);
	$('#overlay').empty();
	loadForm(facultyID);
    return false;
}

function hideBox() {
    $('#box').hide();
	$('#box').empty();
	waitGif = document.createElement("img");
	waitGif.setAttribute("id", "waitGif");
	waitGif.setAttribute("src", "http://www.doanestuart/doanestuart.org/images/wait.gif");
	waitGif.setAttribute("alt", "Please wait... loading");
	box.appendChild(waitGif);
    $('#overlay').hide();
	$('#headerflash').show();
    return false;
}

function center(element){
    try{
        element = $(element);
    }catch(e){
        return;
    }

    var my_width  = 0;
    var my_height = 0;

    if ( typeof( window.innerWidth ) == 'number' ){
        my_width  = window.innerWidth;
        my_height = window.innerHeight;
    }else if ( document.documentElement &&
             ( document.documentElement.clientWidth ||
               document.documentElement.clientHeight ) ){
        my_width  = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    }
    else if ( document.body &&
            ( document.body.clientWidth || document.body.clientHeight ) ){
        my_width  = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }

    element.style.position = 'absolute';
    element.style.zIndex   = 99;

    var scrollY = 0;

    if ( document.documentElement && document.documentElement.scrollTop ){
        scrollY = document.documentElement.scrollTop;
    }else if ( document.body && document.body.scrollTop ){
        scrollY = document.body.scrollTop;
    }else if ( window.pageYOffset ){
        scrollY = window.pageYOffset;
    }else if ( window.scrollY ){
        scrollY = window.scrollY;
    }

    var elementDimensions = Element.getDimensions(element);

    var setX = ( my_width  - elementDimensions.width  ) / 2;
    var setY = ( my_height - elementDimensions.height ) / 2 + scrollY;

    setX = ( setX < 0 ) ? 0 : setX;
    setY = ( setY < 0 ) ? 0 : setY;

    element.style.left = setX + "px";
    element.style.top  = (setY - 50) + "px";

    element.style.display  = 'block';
}

/* -------------------------------------------------------

		Ajax functions/functionality

------------------------------------------------------- */

function loadForm(facultyID) {
  var request = getHTTPObject();
	url = "email-logic.cfm/facultyid/" + facultyID;
  if (request) {
    request.onreadystatechange = function() {
      parseResponse(request);
			document.getElementById('overlay').show();
			center('box');
    };
    request.open("GET", url);
    request.send(null);
    return true;
  } else {
    return false;
  }
}

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

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

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

  // create wait gif
	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);

	// set up overlay hiding
	var btnCancel = document.getElementById('cancel');
	if(btnCancel) { btnCancel.setAttribute("onClick","hideBox(); return false;"); }

	if(document.getElementById("faculty-contact")) {
		document.getElementById("faculty-contact").onsubmit = function() {
			clearErrors
			var data = "";
			details = setTimeout("document.getElementById('details')", 1000);

			// hide submit and show wait image
			submitBtn = document.getElementById("submit");
			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", "email-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("box");
      container.innerHTML = request.responseText;
      prepareForm();
			displayErrors();
			hookReturn();
    }
  }
}

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 = "26px";
    errors[i].style.overflow = "hidden";
		slidedown(errors[i].id);
	}
}

function hookReturn() {
	var returnLink = document.getElementById('return');
	if (returnLink) {
		returnLink.onclick = function() {
			hideBox();
			return false;
		}
	}
}

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

/* -------------------------------------------------------

		Init functions/functionality

------------------------------------------------------- */

function hookLinks(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)){
            oElement.setAttribute("onClick","showBox(this.href); return false;");
        }
    }
    return false;
}

function initForm() {

	// create and insert lightbox elements
	filler1 = document.createTextNode("overlay");
	// filler2 = document.createTextNode(" ");
	waitGif = document.createElement("img");
	waitGif.setAttribute("id", "waitGif");
	waitGif.setAttribute("src", "http://www.doanestuart.org/images/wait.gif");
	waitGif.setAttribute("alt", "Please wait... loading");
	overlay = document.createElement("div");
	overlay.setAttribute("id","overlay");
	overlay.setAttribute("style","display:none");
	overlay.appendChild(filler1);
	box = document.createElement("div");
	box.setAttribute("id","box");
	box.setAttribute("style","display:none");
	box.appendChild(waitGif);
	facultyList = document.getElementById('facultyList');
	facultyList.appendChild(overlay);
	facultyList.appendChild(box);
	
	// add listener to links
	hookLinks(document,'a','email');
}

Event.observe(window, 'load', initForm, false);

