function AjaxLib(){
	
	var req = null;
    if (window.XMLHttpRequest) { // Mozilla/Firefox/Safari
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // Internet Explorer
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
	if (req) {
		this.processa=function(arquivo,op,valores,tiporetorno,funcao,metodo){
		
			metodo      = metodo || 'GET';
			tiporetorno = tiporetorno || 'TEXT';
			valores     = valores || '';
			funcao      = funcao || ProcessaRetorno;
			var resultado = '';
			
			if(arquivo.indexOf("?op=")>-1){
				op = arquivo.substr(eval(arquivo.indexOf("?op=")+4),arquivo.length) || op;
				var arquivo = arquivo.substr(0,arquivo.indexOf("?op="));			
			}
						
			var variaveis = 'op='+encodeURI(op)+'&'+valores;
			for(xx=0;xx<variaveis.indexOf('&&');xx++){variaveis = variaveis.replace('&&','&');}
						
			req.onreadystatechange = function(){
				if (req.readyState == 4) {
			        if (req.status == 200 || req.status == 0) {	
						if (tiporetorno=='XML'){ resultado=req.responseXML; }else{ resultado=req.responseText; }
						if (req.responseText == '') return false; // nao tem retorno
						if (funcao) funcao(op,resultado);
	    			} else {
            			switch(req.status){
                                case 204: { MsgAlerta("Erro Ajax: O servidor n&atilde;o respondeu ao chamado."); break }
                                case 400: { MsgAlerta("Erro Ajax: Endere&ccedil;o inv&aacute;lido."); break }
                                case 403: { MsgAlerta("Erro Ajax: Voc&ecirc; n&atilde;o possui permiss&atilde;o para acessar esse arquivo."); break }
                                case 404: { MsgAlerta("Erro Ajax: Arquivo n&atilde;o encontrado."); break }
                                case 500: { MsgAlerta("Erro Ajax: Erro interno do servidor."); break }
                                case 502: { MsgAlerta("Erro Ajax: Servidor ocupado."); break }
                                case 503: { MsgAlerta("Erro Ajax: O servidor n&atilde;o respondeu no tempo limite."); break }
                                 default: { MsgAlerta("Erro Ajax: Algum erro ocorreu ao carregar este conte&uacute;do."); break }
                        }
        			}
    			}				
			}
			variaveis=this.antiCache(variaveis);
			
			if(metodo.toUpperCase()=='POST'){ var arquivofinal = arquivo; } else { var arquivofinal = arquivo+'?'+variaveis; var variaveis=null; }
			
			req.open(metodo, arquivofinal, true);
			req.setRequestHeader('Content-Type', "application/x-www-form-urlencoded; charset=iso-8859-1");
			req.send(variaveis);
			
		}
		this.antiCache = function(aurl){
    		var dt = new Date();
       		return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
	    } 
	}

}