  var req;
  var which;
  var asyncTarget="";
  var waitUrl;
  var targetUrl;
  var available=true;
  
  function asyncLoad(target, _waitUrl, _targetUrl) {
  	if (available) {
  		available=false;
		document.getElementById(target).innerHTML ="";
	  	asyncTarget=target;
	  	waitUrl=_waitUrl+"&t="+new Date().getTime();
	  	targetUrl=_targetUrl+"&t="+new Date().getTime();;
	  	retrieveURL(waitUrl);
	}
  }
  
  function retrieveURL(url) {
	available=false;
    if (window.XMLHttpRequest) { // Non-IE browsers
      req = new XMLHttpRequest();
      req.onreadystatechange = processStateChange;
      try {
        req.open("GET", url, true);
      } catch (e) {
        alert(e);
      }
      req.send(null);
    } else if (window.ActiveXObject) { // IE
      req = new ActiveXObject("Microsoft.XMLHTTP");
      if (req) {
        req.onreadystatechange = processStateChange;
        req.open("GET", url, true);
        req.send();
      }
    }
  }

  
 function processStateChange() {
    if (req.readyState == 4) { // Complete
      if (req.status == 200) { // OK response
        document.getElementById(asyncTarget).innerHTML = req.responseText;
      } else {
        alert("Problem: " + req.statusText);
      }
      if (targetUrl=="") {
	      available=true;
	  } else {
	      retrieveURL(targetUrl);
	      targetUrl="";
	  }
    }
  }