var timeoutId, request=null;
var ajax_stack = new Array(0);
var debug = 0;

function ajax_checkqueue() {
  if(request == null  || request.readyState == 4) {
    url = ajax_stack.shift();
    if(url == undefined) return;
//    ajax_kickout("GET","http://charity8"+url,true);
    ajax_kickout("GET",url,true);
  } else { 
//    alert('busy state='+request.readyState); 
  }
}
  

function ajax_queue (url) {
//alert('queue '+url);
//  if (!request) { alert("AJAX error 1001"); return; }
  ajax_stack.push(url);
  ajax_checkqueue();
}

//event handler for XMLHttpRequest
function ajax_handler(){
  var sss = 1004; var resp="";
    try{
        if(request.readyState == 4){
            clearTimeout(timeoutId );
//alert('fin st='+request.status);
            if(request.status == 200){ // successful
                //return value is a JavaScript array
                resp = request.responseText;
                if(debug) { alert( resp); }
                var mess = fld2('mess');
                sss = 1005;
                if(mess!=null) mess.value = mess.value + request.responseText;
                sss = 1006;
                X2.eval(resp);
            } else {
//                alert("AJAX error "+request.status);
                //request.status is 503 = not found
                //500 = server error
            }
            sss = 1007;
            ajax_checkqueue();
            return;
        }//end outer if
    } catch (err)   {
        if (sss==1006) {
          alert("post AJAX eval error. JS=\n"+resp);
        } else {
          alert("AJAX error "+sss+" err= "+err.message);
        }
    }
}

function ajax_timeout(){
  clearTimeout(timeoutId );
  request.abort();
  alert("AJAX error 1003");
  ajax_checkqueue();
}

/* Initialize a Request object that is already constructed */

function ajax_kickout(reqType,url,bool){
//  alert('starting '+url);

  if(window.XMLHttpRequest){
    request = new XMLHttpRequest();
  } else if (window.ActiveXObject){
    request=new ActiveXObject("Msxml2.XMLHTTP");
    if (! request){
      request=new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (! request){
      alert("AJAX error 1001"); // browser does not support AJAX
      return;
    }
  }

//  try{
    /* Specify the function that will handle the HTTP response */
    request.onreadystatechange=ajax_handler; 
//alert('open '+url);
    request.open(reqType,url,bool);
/*
    open method: see http://msdn.microsoft.com/en-us/library/ms536648(VS.85).aspx
    if p3=false; IE freezes until return
    optional p4=user, p5=password for http authentication
*/
    timeoutId = setTimeout(ajax_timeout,10000); // milliseconds
    request.send(null);
//alert('kickout url='+url+' readyState='+ request.readyState); 
//  } catch (err) {
//    alert("AJAX error 1002 err="+err.message);  /* cannot init */
//  }
}
