var net = new Object();

net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING       = 1;
net.READY_STATE_LOADED        = 2;
net.READY_STATE_INTERACTIVE   = 3;
net.READY_STATE_COMPLETE      = 4;

/**
 * Get an object to do requisitions
 */
net.getTransport = function() 
{
	var transport;
	if (window.XMLHttpRequest)
		transport = new XMLHttpRequest();
	else if (window.ActiveXObject)
	{
		try        {transport = new ActiveXObject('Msxml2.XMLHTTP');}
		catch(err) {transport = new ActiveXObject('Microsoft.XMLHTTP');}
	}
	return transport;
}



net.ContentLoader = function(component, url, method, requestParams)
{
   this.component     = component;
   this.url           = url;
   this.reqParams = requestParams;
   this.method        = method;
   this.arrayLoaderListener = Array();
//	alert('this.reqParams: ' + this.reqParams);
}


net.ContentLoader.prototype = 
{
	getTransport: function()
	{
		var transport;
		if (window.XMLHttpRequest)
			transport = new XMLHttpRequest();
		else if (window.ActiveXObject)
		{
			try        {transport = new ActiveXObject('Msxml2.XMLHTTP');}
			catch(err) {transport = new ActiveXObject('Microsoft.XMLHTTP');}
		}
		return transport;
	},
	addLoaderListener: function(loaderListener)
	{
		this.arrayLoaderListener.push(loaderListener);
	},
	setInputDialog: function(_iDiag)
	{
		this.iDiag = _iDiag;
	},
	sendRequest: function()
	{
		for (var i = 0; i < this.arrayLoaderListener.length; i++)
			this.arrayLoaderListener[i].startLoad();

		//if ( window.netscape && window.netscape.security.PrivilegeManager.enablePrivilege)
		//   netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
//		alert('sendRequest go');

		var requestParams = [];
		for (var i = 0; i < arguments.length; i++)
			requestParams.push(arguments[i]);
		if (this.reqParams)
			for (var i = 0; i < this.reqParams.length; i++)
				requestParams.push(this.reqParams[i]);

		var oThis = this;
		var request = this.getTransport();
		request.onreadystatechange = function() {oThis.handleAjaxResponse(request)};

		var queryQuery = '';
		if (this.iDiag)
			queryQuery = dojo.io.encodeForm(this.iDiag.formElem, dojo.string.encodeAscii);
		var queryQuery2 = this.queryString(requestParams);
		if (queryQuery == '' && queryQuery2 != '')
			queryQuery = queryQuery2;
		else if (queryQuery != '' && queryQuery2 != '')
			queryQuery = queryQuery + '&' + queryQuery2;
//		alert('queryQuery: ' + queryQuery + ', queryQuery2: ' + queryQuery2);

		if (this.method == 'POST')
		{
			request.open(this.method, this.url, true);
			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			request.send(queryQuery);
		}
		else
		{
			if (this.url.indexOf('?') != -1)
				request.open(this.method, this.url + '&' + queryQuery, true);
			else
				request.open(this.method, this.url + '?' + queryQuery, true);

			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			request.send(null);
		}
	},
	queryString: function(args)
	{
		var requestParams = [];
		for (var j = 0 ; j < args.length ; j++)
			requestParams.push(args[j]);

//		alert('args.length: ' + args.length);
//		alert('requestParams.length: ' + requestParams.length);

		var _queryString = '';
		if (requestParams && requestParams.length > 0)
		{
			for (var i = 0; i < requestParams.length; i++)
			{
				_queryString += requestParams[i].toString() + '&';
//				alert('_queryString: ' + _queryString);
			}
			_queryString = _queryString.substring(0, _queryString.length - 1);
		}
		return _queryString;
	},
	handleAjaxResponse: function(request) 
	{
		if (request.readyState == net.READY_STATE_COMPLETE)
		{
			if (this.isSuccess(request))
			{
				// alert('this.component.ajaxUpdate: ' + this.component.ajaxUpdate);
				this.component.ajaxUpdate(request);
			}
			else
				this.component.handleError(request);

			for (var i = 0; i < this.arrayLoaderListener.length; i++)
				this.arrayLoaderListener[i].loaded(request);
		}
	},
	isSuccess: function(request)
	{
		try
		{
			return	request.status == 0 || (request.status >= 200 && request.status < 300);
		}
		catch (err)
		{
			return false;
		}
	}
};
