var aSyncCallEnabled = true;

function aSyncCall( url, params, onSuccess, onFailure ) {
	var _ajax = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");

	_ajax.onreadystatechange = function() {
		_onSuccess = onSuccess;		// These re-defines were intended to act as closures,
		_onFailure = onFailure;		// but don't appear to be necessary.

		if ( _ajax.readyState != 4 )
			return;

		if ( _ajax.status == 200 )
		{
			if ( _ajax.responseText )
				_onSuccess( _ajax.responseText );
			else
				_onFailure( "" );
		}
		else
			_onFailure( "" );
	}

	_ajax.open( "POST", url, true );	// true = async.
	_ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	_ajax.setRequestHeader("Content-length", params.length);
	_ajax.setRequestHeader("Connection", "close");
	_ajax.send( params );
}

function aSyncCallEx( reuseObj, url, params, onSuccess, onFailure, onException ) {
	if ( !aSyncCallEnabled )
		// aSyncCallEnabled is turned off in onbeforeunload to prevent further
		// calls being made.  most applicable to firefox.
		return;

	if ( reuseObj == null )
		var _ajax = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
	else
	{
		var _ajax = reuseObj;
		//try { _ajax.abort(); } catch(e) { }
	}

	if ( _ajax.readyState != 0 && _ajax.readyState != 4 )
	{
		//_log("Receiver is busy:" + _ajax.readyState );
		// busy
		return;
	}

	// ie6/win cannot re-user xhr objects unless you either call abort before the subsequent call
	// or call open before setting onreadystatechange.
	_ajax.open( "POST", url, true );	// true = async.

	_ajax.onreadystatechange = function() {
		var _onSuccess = onSuccess;		// These re-defines were intended to act as closures,
		var _onFailure = onFailure;		// but don't appear to be necessary.
		var _onException = onException;

		if ( _ajax.readyState != 4 )
			return;

		// ie6/win returns "12029" in the .responseText on error (amongst others).
		// firefox tosses an exception in the event of an error...  so:
		try {
			var dummy = _ajax.status;
		}
		catch(e)
		{
			_onException(e.name+"::"+e.message);
			return;
		}

		if ( _ajax.status == 200 )
		{
			if ( _ajax.responseText )
				_onSuccess( _ajax.responseText );
			else
				_onFailure( "" );
		}
		else
			_onFailure( _ajax.status );
	}

	_ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	_ajax.setRequestHeader("Content-length", params.length);
	_ajax.setRequestHeader("Connection", "close");
	_ajax.send( params );
}

