function ajax() {
    if(!this.xmlhttp) {
        try{
            this.xmlhttp = new XMLHttpRequest();
        }catch(ee){
            try{
                this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }catch(e){
                try{
                    this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }catch(E){
                    this.xmlhttp = false;
                }
            }
        }
    }
    return this;
}

ajax.prototype.fila = new Array();
ajax.prototype.filaControl = 0;
ajax.prototype.requestURL = function(par) {
    this.fila[this.fila.length] = par;
    if((this.filaControl+1) == this.fila.length) {
        this.ajaxExec();
    }
}

ajax.prototype.ajaxExec = function() {
    var method = "POST";
    this.xmlhttp.open(method,this.fila[this.filaControl].url,true);

    //Funcao para tratamento do retorno
    this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");

    _this = this;
    if(this.fila[this.filaControl].execBefore) {
        //alert("before");
        eval(this.fila[this.filaControl].execBefore);
        //alert(this.fila[this.filaControl].execBefore);
   }
    this.xmlhttp.onreadystatechange=function() {
        //alert(100 / (5-_this.xmlhttp.readyState)+"%");
        if (_this.xmlhttp.readyState==4) {
            //Mostra o HTML recebido
            var DOM=_this.xmlhttp.responseXML;
            if(_this.fila[_this.filaControl].getDOM) {
                eval(_this.fila[_this.filaControl].getDOM);
            }
            retorno=unescape(_this.xmlhttp.responseText.replace(/\+/g," "));
            //alert(retorno);

            var tg;
            if(tg = document.getElementById(_this.fila[_this.filaControl].target)) {
                tg.innerHTML = retorno;
            }
            if(_this.fila[_this.filaControl].execAfter) {
                eval(_this.fila[_this.filaControl].execAfter);
                //alert(_this.fila[_this.filaControl].execAfter);
            }

            //Roda o proximo
            _this.filaControl++;
            if(_this.filaControl < _this.fila.length)setTimeout("_this.ajaxExec()",10);
            if(_this.filaControl == _this.fila.length) {
                _this.filaControl = 0;
                _this.fila = [];
            }
        }
    }
    //Executa
    var pars ;
    this.fila[this.filaControl].par ? pars = this.fila[this.filaControl].par : pars = null;
    //alert(pars);
    this.xmlhttp.send(pars);
}

ajax = new ajax;
/*
ajax.requestURL({"url":'post.php',"target":"dvCommited","par":'valor=val',"execBefore":"alert('Antes')","execAfter":"alert('Depois')"});
*/