/*
 * ajax.js
 * written by Asif Chowdhury
 * 2006-04-05
 * used to be an ajax library js
 * AJAX was here.
 */
 
/*
 * AJAX_makeRequest
 * takes in 1 parameter(url)
 * returns a boolean
 * outputs a modified DOM element
 * used to grab the xhtml from a generated page
 * and display it as part of this page...AJAX was here.
 */ 

function AJAX_makeRequest(url, targetObj, params) {
  var http_request = false; 
  if (window.XMLHttpRequest) { 
    // Mozilla, Safari,... 
    http_request = new XMLHttpRequest(); 
    if (http_request.overrideMimeType) { 
      // for problems with mozilla and some other browsers
      http_request.overrideMimeType('text/xml'); 
    } 
  } 
  else if (window.ActiveXObject) { 
   // IE 
    try { 
     http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) { 
      try { 
            http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      catch (e) {} 
    } 
  } 
  if (!http_request) { 
    alert('Giving up :( Cannot create an XMLHTTP instance'); 
    return false; 
  } 
  
  http_request.onreadystatechange = function() { 
    AJAX_displayContents(http_request, targetObj); 
  };
  http_request.open('POST', url, true);
  
  //Send the proper header information along with the request
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.setRequestHeader("Content-length", params.length);
	http_request.setRequestHeader("Connection", "close");
  
  http_request.send(params);
  
  return true;
}
 
/*
 * AJAX_displayContentsDebug
 * takes in 1 parameter (http_request)
 * returns nothing
 * outputs a modified DOM object
 * used to place in the generated code into this page.
 */

function AJAX_displayContentsDebug(http_request, targetObj) { 
  if (http_request.readyState == 4) { 
    if (http_request.status == 200) { 
      targetObj.firstChild.nodeValue=http_request.responseText;
    } 
    else { 
      alert('There was a problem with the request.'); 
    }
  }
  else {
    targetObj.firstChild.nodeValue='Loading...';
  }
}
 
/*
 * AJAX_displayContents
 * takes in 1 parameter (http_request)
 * returns nothing
 * outputs a modified DOM object
 * used to place in the generated code into this page.
 */

function AJAX_displayContents(http_request, targetObj) { 
  if (http_request.readyState == 4) { 
    document.getElementById('loadPage').style.display = 'none';
    if (http_request.status == 200) { 
      var xmldoc = http_request.responseText;
      if (xmldoc != null) {
            // this is to get around IE and Opera's XMLHTTPRequest resoponseXML bug
            var container = document.createElement('div');
            container.style.position='relative';
            container.style.width='100%';
            container.innerHTML = xmldoc;
            if (targetObj) {
              targetObj.replaceChild(container, targetObj.firstChild);
            }
      }
      else {
            alert('The document was not loaded!');
      }
    } 
    else { 
      alert('There was a problem with the request.'); 
    }
  }
  else {
    if (targetObj) {
      document.getElementById('loadPage').style.display = 'block';
	  //targetObj.firstChild.nodeValue='Loading...';
    }
  }
}
 
/*
 * AJAX_formPassIt
 * takes in 1 parameter(formObj)
 * returns nothing
 * outputs a web page in a DOM object
 * used to display the response from the form submittal into
 * the status object
 */

function AJAX_formPassIt(formObj, targetObj) {
  var elements = formObj.elements;
  var str = '';
  for (var i = 0; i < formObj.length; i++) {
    var curElement = elements[i];
    str += curElement.name + '=' + curElement.value + '&';
  }
  str = str.replace(/&$/, '');
  str = encodeURI(str);
  var server = formObj.action;
  server = server.replace(/\?.+$/, '');
  var params = str;
  var fullURI = server;
  var result = AJAX_makeRequest(fullURI, targetObj, params);
  if (! result) {
    // if we could not do this, then submit
    formObj.submit();
  }
}
 
/*
 * AJAX_countTags
 * takes in 1 parameter (n) {an object}
 * returns a number
 * outputs nothing
 * used to count the number of childrent this object has
 */
function AJAX_countTags(n) {
  var numTags = 0;
  if (n.nodeType == 1) {
    numTags++;
  }
  var children = n.childNodes;
  for (var i = 0; i < children.length; i++) {
      numTags += AJAX_countTags(children[i]);
  }
  return numTags;
}

