var Ajax =
{
	get: function(url, onSuccess)
	{
		this.send(url, 'GET', null, onSuccess);
	},

	post: function(url, data, onSuccess)
	{
		this.send(url, 'POST', data, onSuccess);
	},
	
	postAndReload: function(url)
	{
		this.post(url, null, function(request)
		{
			window.location.reload(true);
		});
	},
	
	postAndReplaceContents: function(url, elementId)
	{
		this.post(url, null, function(request)
		{
			document.getElementById(elementId).innerHTML = request.responseText;
		});
	},
	
	postAndReplaceForm: function(formId)
	{
		this.postForm(formId, function(request)
		{
			document.getElementById(formId).parentNode.innerHTML = request.responseText;
		});
	},
	
	postForm: function(formId, onSuccess)
	{
		var form = document.getElementById(formId);
		
		var data = '';
		
		for (var i = 0; i < form.elements.length; i++)
		{
			var element = form.elements[i];
			
			if (element.type == undefined || (element.type == 'checkbox' && !element.checked))
			{
				continue;
			}
			
			if (data != '')
			{
				data += '&';
			}
			
			data += encodeURIComponent(element.name) + '=' + encodeURIComponent(element.value);
		}
		
		this.post(form.action, data, onSuccess);
	},
	
	send: function(url, method, data, onSuccess)
	{
		var requestFactories = 
		[
			function () { return new XMLHttpRequest(); },
			function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
			function () { return new ActiveXObject('Msxml3.XMLHTTP'); },
			function () { return new ActiveXObject('Msxml2.XMLHTTP'); }
		];

		var request = null;
		
		for (var i = 0; i < requestFactories.length; i++)
		{
			try
			{
				request = requestFactories[i]();
			}
			catch (e)
			{
				continue;
			}
			
			break;
		}
		
		if (!request)
		{
			return;
		}
		
		request.open(method, url, true);
		
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
		request.setRequestHeader('If-Modified-Since', 'Thu, 1 Jan 1970 00:00:00 GMT');
		
		if (onSuccess)
		{
			request.onreadystatechange = function()
			{
				if (request.readyState == 4 && request.status == 200)
				{
					onSuccess(request);
				}
			};
		}
		
		request.send(data ? data : '');		
	}
};