var MBox =
{
	Version: '42'
}

var mbox =
{
	version: 42
}

MBox.AjaxRequest = Class.create();

MBox.AjaxRequest.prototype =
{
	initialize: function()
	{
	},

	sendRequest: function(requestURL)
	{
		if ( requestURL == null )
		return;

		var queryString = '';
		if (arguments.length > 1)
		queryString = this._createQueryString(arguments, 1);

		new Ajax.Request(requestURL, this._requestOptions(queryString));
	},

	// Private -- not part of intended engine API --------------------------------------------------------------------

	_requestOptions: function(queryString)
	{
		var requestHeaders = ['X-MBox-Version', MBox.Version ];

		return { requestHeaders: requestHeaders,
			parameters:     queryString,
			postBody:       null, // if null, Ajax.Request puts the parameters into the postBody (method: post)
			method:         'post',
			onComplete:     this._onRequestComplete.bind(this),
			onFailure:		this._onFailure.bind(this)
		};
	},

	_createQueryString: function(theArgs, offset)
	{
		var queryString = '';
		for (var i = offset; i < theArgs.length; ++i)
		{
			var anArg = theArgs[i];

			if (anArg != null)
			{
				if (i != offset)
					queryString += '&';

				if ((anArg.name != undefined	)	&&
					(anArg.value != undefined	)	)
					queryString += anArg.name +  '=' + encodeURIComponent(anArg.value);
				else
				{
					var ePos  = anArg.indexOf('=');
					var argName  = anArg.substring(0, ePos);
					var argValue = anArg.substring(ePos + 1);
					queryString += argName + '=' + encodeURIComponent(argValue);
				}
			}
		}

if (i != offset) queryString += '&'; queryString += 'm-box_phpsessid=e0d61f032c2c48890760d746806b83a2';		return queryString;
	},


	// private, not part of the intended api
	_onRequestComplete: function(request)
	{
		//!!TODO: error handling infrastructure??
		if (request.status != 200)
			return;

		var response = request.responseXML;
		this.ajaxUpdate(response);
	},

	_onFailure: function(request)
	{
		// TODO: failure handling
	},

	ajaxUpdate: function(xmldoc)
	{
		// do nothing, overridden in subclass
	}
}

