/*		
	Ajaxer, by rua.
	Butchered by bennor, 2006-02-08 (Added some code from the prototype library, removed some functions, caused general mayhem)
	Now requires conduit.js
*/
var Try = {
	these: function() 
	{
		var returnValue;
		for (var i = 0; i < arguments.length; i++) 
		{
			var lambda = arguments[i];
			try { returnValue = lambda(); break; }
			catch(e) {}
		}
		return returnValue;
	}
};

function Ajaxer()
{
	// initialise request
	this.request = Try.these(
		function() { return new ActiveXObject('Msxml2.XMLHTTP'); },
		function() { return new ActiveXObject('Microsoft.XMLHTTP'); },
		function() { return new XMLHttpRequest(); }
	) || false;
	
	this.CanMakeRequests = !!this.request; // convert request status to boolean
	
	this.GetTransport = function()
	{
		return Try.these(
			function() { return new ActiveXObject('Msxml2.XMLHTTP'); },
			function() { return new ActiveXObject('Microsoft.XMLHTTP'); },
			function() { return new XMLHttpRequest(); }
		) || false;
	}
	
	this.RemoteCall = function(url, callback)
	{
		var request = ajaxer.GetTransport();
		if(request) 
		{
			if(!$B('safari') && $N('body'))
				$N('body').style.cursor = 'wait'; // set cursor to busy
			
			request.open("GET", url, true);
			request.onreadystatechange = function()
			{
				if(!$B('safari') && $N('body'))
					$N('body').style.cursor = 'auto'; // reset cursor
				
				if(request.readyState == 4 && request.status == 200)
				{
					if(callback && typeof callback == 'function')
						callback(request.responseText);
				}
			}
			request.send(null);
		}
	};
	
	this.UpdateElement = function(url, el, onsuccess, onfailure) 
	{
		el = $(el);
		if(!el)
			return;

		var request = ajaxer.GetTransport();
		if(request) 
		{
			if(!$B('safari') && $N('body'))
				$N('body').style.cursor = 'wait'; // set cursor to busy
			this.busy = true;
			request.open("GET", url, true);
			request.onreadystatechange = function() 
			{
				if(request.readyState == 4)
				{
					if(!$B('safari') && $N('body'))
						$N('body').style.cursor = 'auto'; // reset cursor
						
					if(request.status == 200)
					{
						el.innerHTML = request.responseText;
						if(onsuccess && typeof onsuccess == 'function')
							onsuccess();
					}
					else if(onfailure)
					{
						if(typeof onfailure == 'function')
							onfailure(request.status);
						else // assume url
							document.location = onfailure;
					}
				}
			}
			request.send(null);
		}
	}
}
var ajaxer = new Ajaxer();
