   var http_request = false;
   var the_span;
   var new_home_image;
   var ajax_q = new ajax_queue();
   var ajax_busy = 0;
       
   function ajax_queue(){
		var queue = new Array();
		var current_index = 0;		
		var sizeOfQueue = 0;
		
		this._in = function(url, para, target){
			queue[current_index] = url + ";" + para + ";" + target;
			current_index++;
			sizeOfQueue++;
		}
		
		this._out = function(){	
			sizeOfQueue--;
			current_index--;
			return queue.shift();
		}
		
		this._sizeOfQueue = function(){
			return sizeOfQueue;
		}		
	}
	
	function start_queue(){						
		makeRequest('../library/pages/dummy.php', '?nothing=1', 'set_session_variable_div');
	}

	function createHttpRequest(mimetype) {
		var req;
		if (!mimetype) mimetype = 'text/plain';

		if (window.XMLHttpRequest) { 
			req = new XMLHttpRequest();
			if (req.overrideMimeType)
				req.overrideMimeType(mimetype);
		} else if (window.ActiveXObject) {
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}

		return req;
	}

  function makeRequest(url, parameters, target_span) {
		ajax_busy = 1;
		the_span = target_span;
		http_request = createHttpRequest();

		if (!http_request) {
			alert('Cannot create XMLHTTP instance');
			return false;
		}

		http_request.onreadystatechange = alertContents;
		http_request.open('GET', url + parameters + "&dummy=" + new Date().getTime(), true);
		http_request.send(null);
	}

	function makeRequestPost(url, parameters, target_span) {
		ajax_busy = 1;
		the_span = target_span;
		http_request = createHttpRequest();

		if (!http_request) {
			alert('Cannot create XMLHTTP instance');
			return false;
		}

		http_request.onreadystatechange = alertContents;
		http_request.open('POST', url + "?dummy=" + new Date().getTime(), true);
		http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	  http_request.setRequestHeader("Content-length", parameters.length);
	  http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
	}

	function getAsXML(url, parameters, success_fn, err_fn) {
		var sep = '&';
		var req = createHttpRequest('text/xml');
		ajax_busy = 1;

		function ready() {
			if (req.readyState == 4) {
				ajax_busy = 0;

				if (req.status == 200 && req.responseXML) {
					success_fn(req.responseXML);
				} else if (err_fn) {
					err_fn(req);
				} else if (!req.responseXML) {
					alert("Error parsing XML from server.");
				} else {
					alert("HTTP error: " + req.status + " " + req.statusText);
				}
			}
		}

		if (!req) {
			throw { name: 'NotImplementedError', message: 'Cannot create XMLHTTP instance.' };
		}

		if (url.indexOf("?") == -1 && parameters.indexOf("?") == -1) {
			sep = '?';
		}
		req.open('GET', url + parameters + sep + 'dummy=' + new Date().getTime(), true);
		req.onreadystatechange = ready;
		req.send(null);

		return function() { req.abort(); };
	}

	// postForm(HTMLElement form, String url, String target_obj, [function err_fn])
	// The response from submitting form to url is written into getElement(target_obj).innerHTML
	function postForm(form, url, target_obj, err_fn) {
		var sep = '&';
		var req = createHttpRequest('text/html');
		var parameters = '';
		ajax_busy = 1;

		function ready() {
			if (req.readyState == 4) {
				ajax_busy = 0;

				if (req.status == 200 && req.responseText) {
					getElementBase(target_obj).innerHTML = req.responseText;
				} else if (err_fn) {
					err_fn(req);
				} else {
					if (req.status == 200) {
						alert('No data.');
					} else {
						alert("HTTP error: " + req.status + " " + req.statusText);
					}
				}
			}
		}

		if (!req) {
			throw { name: 'NotImplementedError', message: 'Cannot create XMLHTTP instance.' };
		}

		var elts = form.elements, dsep = '', i, elt, type, value;
		for (i = 0; i < elts.length; ++i) {
			elt = elts[i];
			if (elt.disabled || !elt.name) { // skip disabled and unnamed elements
				continue;
			}

			type = ((elt.tagName.toLowerCase() == 'input') ? elt.type.toLowerCase() : elt.tagName.toLowerCase());

			if ((type == 'radio' || type == 'checkbox') && !elt.checked) { // skip unchecked things
				continue;
			} else if (type == 'select') {
				value = elt.options[elt.selectedIndex].value;
			} else { // text, hidden, textarea, (checked) radio/checkboxes
				value = elt.value;
			}

			parameters += dsep + elt.name + '=' + encodeURIComponent(value);
			dsep = '&';
		}

		if (url.indexOf("?") == -1) {
			sep = '?';
		}
		req.open('POST', url + sep + 'dummy=' + new Date().getTime(), true);
		req.onreadystatechange = ready;
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	  req.setRequestHeader("Content-length", parameters.length);
	  req.setRequestHeader("Connection", "close");
		req.send(parameters);

		// Return a function that will abort this specific request
		return function() { req.abort(); };
	}
	
	function get(obj, target_url, target_span) {	
		ajax_busy = 1;
		if (target_url.indexOf("?") == -1)
			var getstr = "?";
		else
			var getstr = "&";
		the_span = target_span;
		
		for (i=0; i<obj.childNodes.length; i++) {
			if (obj.childNodes[i].tagName == "INPUT") {
				if ( (obj.childNodes[i].type == "text") || (obj.childNodes[i].type == "hidden") )
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
			}
					
			if (obj.childNodes[i].type == "checkbox") {
				if (obj.childNodes[i].checked)
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
				else
					getstr += obj.childNodes[i].name + "=&";			
			}	
			
			if (obj.childNodes[i].type == "radio") {
				if (obj.childNodes[i].checked)
					getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";			
			}
		  
			if (obj.childNodes[i].tagName == "SELECT") {
				var sel = obj.childNodes[i];
				getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";				
			}
		}		
		makeRequest(target_url, getstr, the_span);
	}
	
	function alertContents() {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				result = http_request.responseText;
				document.getElementById(the_span).innerHTML = result;
				// Continue the ajax queue if there are more items				
				if (ajax_q._sizeOfQueue()){
					new_request = ajax_q._out();					
					new_request = new_request.split(";");
					if (new_request[0] == "start_ajax_indicator"){
						change_style(new_request[2], 'display', '');
						start_queue();
					}
					else if (new_request[0] == "stop_ajax_indicator"){
						change_style(new_request[2], 'display', 'none');
						start_queue();
					}
					else if (new_request[0] == "go"){
						window.location = 'index.php';
					}
          else if (new_request[0] == "init_mce"){
            tinyMCE.execCommand('mceAddControl', true, new_request[2]);
            if (ajax_q._sizeOfQueue())
              start_queue();
          }
					else
						makeRequest(new_request[0], new_request[1], new_request[2]);											
				}
				else
					ajax_busy = 0;			
			} else
				alert('There was a problem with the request.' + ' - http_request.status: ' + http_request.status);			
		}
	}

