var GAcommunicator=new Object();

GAcommunicator.READY_STATE_UNINITIALIZED=0;
GAcommunicator.READY_STATE_LOADING=1;
GAcommunicator.READY_STATE_LOADED=2;
GAcommunicator.READY_STATE_INTERACTIVE=3;
GAcommunicator.READY_STATE_COMPLETE=4;

GAcommunicator.ContentLoader=function(url,params,onload,onerror)
{
this.params = params;
this.url=url;
this.req=null;
this.onload=onload;
this.onerror=(onerror) ? onerror : this.defaultError;
this.loadXMLDoc(url,params);
}

GAcommunicator.ContentLoader.prototype=
{

loadXMLDoc:function(url,params)
{
	//alert(params);
	if(window.netscape && window.netscape.security.PrivilegeManager.enablePrivilege)
	{
		try
		{
			netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
		}
		catch(e){}
	}


	if (window.XMLHttpRequest)
	{
		this.req=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		this.req=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if (this.req)
	{
		try{
		var loader=this;
		this.req.onreadystatechange=function()
		{
			loader.onReadyState.call(loader);
		}
		if(params != "")
		{	//alert(params);
			this.req.open('POST',url,true);
			this.req.send(params);
			params="";
		}
		else
		{
			this.req.open('GET',url,true);
			this.req.send(null);
		}
			
	}
	catch (err)
	{
		this.onerror.call(this);
	}
}
}
,
onReadyState:function()
{
	var req=this.req;
	var ready=req.readyState;

	if (ready==GAcommunicator.READY_STATE_COMPLETE)
	{
		var httpStatus=req.status;
		if (httpStatus==200 || httpStatus==0)
		{
			this.onload.call(this);
		}
		else
		{
			this.onerror.call(this);
		}
	}
}
,
defaultError:function()
{
	alert("error fetching data!"
		+"\n\nreadyState:"+this.req.readyState
		+"\nstatus: "+this.req.status
		+"\nheaders: "+this.req.getAllResponseHeaders());
}
}