
ajaxTimeout = null;


ajax = {
    
    pendingReqs: 0,

    finish: function() {
            alert('Ajax is all done!');
    }, 
    
    finishReqs: function() {
              
        if (ajax.pendingReqs == 0) {
            window.clearTimeout(ajaxTimeout);
            ajax.finish();        
        } else {
            ajaxTimeout = window.setTimeout(ajax.finishReqs, 500);            
        }    
    },

    buildReq : function (url, postArgs, callback) {
        ajax.pendingReqs ++;
        
        if (window.XMLHttpRequest) {
            var req = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            var req = new ActiveXObject("Msxml2.XMLHTTP");
            if (! req) {
                var req = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        req.callback = callback;

        req.open('POST', url, true);
     
        
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        
        req.onreadystatechange = function () {
      
            if (req.readyState == 4) {
                ajax.pendingReqs --;
                //ui.spinner.setAttribute('style', 'display: none');
                if (req.status == 200) {

                    var response = eval('(' + req.responseText + ')');
                    
                    //evals to ajax.response subproperties then result, error, and lookupNull.  non-result objects have a message property.
                    if (response.error) {
                        
                        ui.paletteSpinner.style.display = 'none';
                    } else if (response.lookupNull) {
                        alert(response.lookupNull.message);
                        ui.paletteSpinner.style.display = 'none';
                    } else {
                        
                        if (req.callback != null) {
                            req.callback(response);
                        } else {
                            alert('thinks null');
                        }
                    }
                }
                if (this .status == 404) {
                    alert('Oh! 404!');
                }
            }
        };
        
        //req.onreadystatechange = function() { alert(req.readyState) } ;
        
        req.send(postArgs);
    }
};