// this one does multiple outstanding requests
//from http://groups.google.com/group/XMLHttpRequest/browse_thread/thread/3deab0ff4778fdf7/a8f83be73f135ed5
// http://www.manalab.com/lab/ahah/
// the key feature seems to be making the function ahahDonex that handles the return local to the main ahahx function

function ahah(url, target, funcname) {
        function ahahDonex() {
          if(req.readyState == 4){
            if(req.status == 200){
                  if(!(target == undefined)){
				    myresp = req.responseText;
					myresp = myresp.replace(/&gt;/gi,">")
					myresp = myresp.replace(/&lt;/gi,"<")
					myresp = myresp.replace(/&amp;/gi,"&")
                    document.getElementById(target).innerHTML = myresp;
                  }
                  if(!(funcname == undefined)){
                    eval(funcname+"(req.responseText);");
                  }
            }else{
                  if(!(target == undefined)){
                    document.getElementById(target).innerHTML = "AHAH error: " + url + "  " + req.statusText;
                  }
              if(!(funcname == undefined)){
                    eval(funcname+"(req.responseText);");
                  }
            }
          }
        }

        if(!(target == undefined)){
            document.getElementById(target).innerHTML = 'wait...';
        }
        if(window.XMLHttpRequest){
                var req = new XMLHttpRequest();
        }else if(window.ActiveXObject) {
                var req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if(req){
                req.onreadystatechange = function() {
                        ahahDonex();
                };
                req.open("GET", url, true);
                req.send("");
        }
} 

// invoking a function could be a useful option, also
// timestamp addition to url is to defeat the cache in IE that thinks that all GETs should be cached, even when the response says don't
 function ahahx(url, target, funcname) {
        url = url + '&x=' + new Date().getTime();
        function ahahDonex() {
          if(req.readyState == 4){
            if(req.status == 200){
                  if(!(target == undefined)){
				    myresp = req.responseText;
					myresp = myresp.replace(/&gt;/gi,">")
					myresp = myresp.replace(/&lt;/gi,"<")
					myresp = myresp.replace(/&amp;/gi,"&")
                    document.getElementById(target).innerHTML = myresp;
                  }
                  if(!(funcname == undefined)){
                    eval(funcname+"(req.responseText);");
                  }
            }else{
                  if(!(target == undefined)){
                    document.getElementById(target).innerHTML = "AHAH error: " + url + "  " + req.statusText;
                  }
              if(!(funcname == undefined)){
                    eval(funcname+"(req.responseText);");
                  }
            }
          }
        }

        if(!(target == undefined)){
            document.getElementById(target).innerHTML = 'wait...';
        }
        if(window.XMLHttpRequest){
                var req = new XMLHttpRequest();
        }else if(window.ActiveXObject) {
                var req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if(req){
                req.onreadystatechange = function() {
                        ahahDonex();
                };
                req.open("GET", url, true);
                req.send("");
        }
} 
