function Asynchronous()
{
	this._xmlhttp = new FactoryXMLHttpRequest();	
}

function Asynchronous_call(url)
{
	var instance = this;
	this._xmlhttp.open('GET', url, true);
	this._xmlhttp.onreadystatechange = function()
	{
		switch (instance._xmlhttp.readyState)
		{
			case 1:
				instance.loading();
				break;
			case 2:
				instance.loaded();
				break;
			case 3:
				instance.interactive();
				break;
			case 4:
				instance.complete(instance._xmlhttp.status,
									instance._xmlhttp.statusText,
									instance._xmlhttp.responseText,
									instance._xmlhttp.responseXML);
				break;			
		}
	}
	
	// do send the request
	this._xmlhttp.send(null);
}

function Asynchronous_loading()
{}

function Asynchronous_loaded()
{}

function Asynchronous_interactive()
{}

function Asynchronous_complete(status, statusText, responseText, responseHTML)
{}

Asynchronous.prototype.loading = Asynchronous_loading;
Asynchronous.prototype.loaded = Asynchronous_loaded;
Asynchronous.prototype.interactive = Asynchronous_interactive;
Asynchronous.prototype.complete = Asynchronous_complete;

Asynchronous.prototype.call = Asynchronous_call;