

var XHRFactory = (function()
{
	// static private member
	var stack = new Array();
	var poolSize = 10;
 	var nullFunction = function() {}; // for nuking the onreadystatechange
 
 	// private static methods
	function createXHR() 
	{
		if (window.XMLHttpRequest) 
			return new XMLHttpRequest();
		else if (window.ActiveXObject) 
			return new ActiveXObject('Microsoft.XMLHTTP')
	}

	// cache a few for use
	for (var i = 0; i < poolSize; i++) 
	{
		stack.push(createXHR());
	}
 
 	//shared instance methods
	return (
	{
		release:function(xhr)
		{
			xhr.onreadystatechange = nullFunction;
			stack.push(xhr);
		},
		getInstance:function()
		{
			if (stack.length < 1)
				return createXHR();
			else
				return stack.pop();
		},
		toString:function()
		{
			return "stack size = " + stack.length;
		}
	});
 
})();
