

function AjaxRequest(action, params)
{
    this.ON_COMPLETE= "OnComplete";

    this.AddOnCompleteListener      =  AddOnCompleteListener;
    this.MakeQuery                  =  MakeQuery;
    this.GetXmlHttpRequestObject    =  GetXmlHttpRequestObject;
    this.OnHttpRequestEvent         =  OnHttpRequestEvent;
    
    this.listeners  = new Array();
    this.action     = action;
    this.params     = params;
    this.searchReq  = this.GetXmlHttpRequestObject();
}

function AddOnCompleteListener(type, listener)
{
    this.listeners.push([type, listener]);
    //this.listeners[this.listeners.length] = listener;
}

function MakeQuery()
{
    if (this.searchReq != null)
    {
        var queryString = "";
        for (var k in this.params)
        {
             if (queryString == "") queryString = k + "=" + URLEncode(this.params[k]);
             else                   queryString = queryString + "&" + k + "=" + URLEncode(this.params[k]);
        }
                                  
        this.searchReq.abort();
        this.searchReq.open("GET", this.action + '?' + queryString, true);
        this.searchReq.onreadystatechange = this.OnHttpRequestEvent; 
        this.searchReq.ajaxRequest = this;
        this.searchReq.send(null);
        return true;
    }
    
    return false;
}

function GetXmlHttpRequestObject() 
{
    if (window.XMLHttpRequest)      return new XMLHttpRequest();
    else if(window.ActiveXObject)   return new ActiveXObject("Microsoft.XMLHTTP");
    else                            alert("Seu navegador nao suporta AJAX. Por favor, atualize seu navegador!");
    
    return null;
}

function OnHttpRequestEvent()
{
    var ajaxRequest =  this.ajaxRequest;
    if (ajaxRequest != null && this.readyState == 4)
    {
        for (var i = 0; i <  ajaxRequest.listeners.length; i++)
        {
            var result =  TextToXML(this.responseText);
            if (ajaxRequest.listeners[i][0] == "OnComplete") ajaxRequest.listeners[i][1](result);  
        }
    }
}

function TextToXML(text)
{
    try //Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(text);
        return xmlDoc;
    }
    catch(e)
    {
        try //Firefox, Mozilla, Opera, etc.
        {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(text,"text/xml");
            return xmlDoc;
        }
        catch(e) 
        {
            alert(e.message);
        }
    }
    return null;
}