function makeRequest(URL) {
	var http_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...
  	http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
    	http_request.overrideMimeType('text/xml'); // php must set MIME type to text/xml as well
      //http_request.overrideMimeType('application/xhtml+xml');
      //http_request.overrideMimeType('text/html');
    }
	} 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() { AJAXcatcher(URL, http_request); };
  http_request.open('GET', URL, true);
  http_request.send(null);
}

function AJAXcatcher(URL, http_request, cascadetospp) {
	// passes http_request on to relevant handler function
	if (URL.substr(8,6) == 'getfam') ShowFamilies(http_request);
	if (URL.substr(8,6) == 'getgen') ShowGenera(http_request);
	if (URL.substr(8,6) == 'getspe') ShowSpecies(http_request);
	return;
}


function getInnerText (node) {
	if (typeof node.textContent != 'undefined') {
		return node.textContent;
	} else if (typeof node.innerText != 'undefined') {
		return node.innerText;
	} else if (typeof node.text != 'undefined') {
		return node.text;
	}
	else {
		switch (node.nodeType) {
			case 3:
			case 4:
			return node.nodeValue; break;
			case 1:
			case 11:
				var innerText = '';
				for (var i = 0; i < node.childNodes.length; i++) {
					innerText += getInnerText(node.childNodes[i]);
				}
				return innerText;
				break;
			default:
				return '';
		}
	}
}