
function xmlrpc_createRequest()
{
    var    req;
    var    ok;

    req = false;
    ok = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest)
    {
        try
        {
            req = new XMLHttpRequest();
            ok = true;
        }
        catch(e)
        {
            req = false;
            ok = false;
        }
    }
    if(!ok)
    {
        // branch for IE/Windows ActiveX version
        if(window.ActiveXObject)
        {
            try
            {
                req = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e)
            {
                try
                {
                    req = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e)
                {
                    req = false;
                }
            }
        }
    }

    return(req);
}

function xmlrpc_sendRequest(url,processor)
{
    var    req;

    req = xmlrpc_createRequest();

    if(req)
    {
        req.onreadystatechange = xmlrpc_createProcessResult(req,processor);
        req.open("GET", url, true);
        req.send('');
    }
}

function xmlrpc_sendData(url,processor,data)
{
    var    req;

    req = xmlrpc_createRequest();

    if(req)
    {
    	var	reqData	= [];
    	var	idx	= 0;
    	
    	for(prop in data)
    	{
    		if(idx > 0)
    		{
    			reqData[idx]='&';idx++;
    		}
    		reqData[idx]=escape(prop);idx++;
    		reqData[idx]='=';idx++;
    		reqData[idx]=escape(data[prop]);idx++;
    	}
    
        req.onreadystatechange = xmlrpc_createProcessResult(req,processor);
        req.open("POST", url, true);
        req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        req.send(reqData.join(''));
    }
}

function xmlrpc_createProcessResult(req,processor)
{
	var	theReq	= req;
	var	theProc	= processor;
	
	req = null;
	processor = null;
	
	return(function()
	{
		if(theReq.readyState == 4)
		{
			theProc(theReq);
			theProc = null;
			theReq = null;
		}
	});
}

