var request = null;

function getXMLHttpRequest()
{
	var xhr = null;
	try
	{
		xhr = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(oc)
		{
			xhr = null;
		}
	}
	if(!xhr && typeof XMLHttpRequest != "undefined")
	{
		xhr = new XMLHttpRequest()
	}
	return xhr;
}

function getURL(url)
{
    if( request && request.readyState!=0)
    {
        request.abort();
    }
    request=getXMLHttpRequest();
    if(request)
    {
        request.open("GET", url, true);
        request.onreadystatechange=function()
        {
            if(request.readyState == 4 && request.responseText)
            {
                if (request.responseText.charAt(0) != "<")
                {
                    eval(request.responseText)
                }
            }
        };
        request.send(null);
    }
}

function invoke(baseUrl, callback, func, params)
{
    getURL(prepareURL(baseUrl, callback, func, params));
}

function prepareURL( baseUrl, callback, func, parms )
{
    // build URL to call
    var URL = baseUrl;
    // always send callback
    URL += "?C=" + callback;
    // func and parms are optional
    if (func != null)
    {
        URL += "&F=" + escape(func);

        if (parms != null)
        {
            if (typeof(parms) == "string")
            {
                // single parameter
                URL += "&P0=" + escape(parms+'') + "";
            }
            else
            {
                // assume parms is array of strings
                for( var i=0; i < parms.length; i++ )
                {
                    URL += "&P" + i + "=" + escape(parms[i]+'') + "";
                }
            }
        }
    }
    return URL;
}