function NeedsIFrameRequest()
{
	var retval=null;
	try
	{
		retval=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			retval=new ActiveXObject("Microsoft.XMLHTTP");
		} 
		catch(oc)
		{
			retval=null;
		}
	}
	if(retval)
		return false;

	return (typeof(XMLHttpRequest) == "undefined");
}

if(NeedsIFrameRequest())
{
	var XMLHttpIFrameRequest = true; // defining global variable for testing purposes (see ajaxpostback.js)
	
	$(function()
	{
		log.debug("IFrameRequest loaded and ready to process stored requests");
		processStoredRequests();
	});
	var storedRequests = [];
	function processStoredRequests ()
	{
		var requests = storedRequests;
		storedRequests = null;
		for (var i=0;i<requests.length;i++)
		{
			var request = requests[i];
			request.send(request.postData);
		}	
	};
 
	// Used for ie6 withour activeX support
	XMLHttpRequest=function()
	{
		var finished = false;
		this.setRequestHeader=function(headers)
		{
			log.debug("setHeader = " + headers);
		};
		this.getResponseHeader=function()
		{
			return null;
		};
		this.abort = function()
		{
			
		};
		
		this.onreadystatechange=function()
		{
			return finished;
		};
		this.open=function(method,url)
		{
			this.url=url;
			this.method = method;
		};
		this.send=function(postdata)
		{
			if (storedRequests != null)
			{
				this.postData = postdata;
				storedRequests.push(this);
				return;
			}
			
			var iframe = document.createElement('IFRAME');
			
			iframe.style.display = 'none';
			$(iframe).height(0).width(0);
			document.body.appendChild(iframe);
			
			var xmlRequest = this;
			var callBack  = function() // Wait for requested data to return
			{
				log.debug("called back");
				
				var body = iframe.contentWindow.document.body;
				xmlRequest.responseText = (body != null)? body.innerHTML : '';
				xmlRequest.readyState=4;
				xmlRequest.status=200;
				$(iframe).remove();
				finished = true;
				xmlRequest.onreadystatechange();
			};
			if(postdata)
			{
				iframe.src="blank.html";
				$(iframe).one("load", function() // wait for blank.html to load
				{
					$(iframe).load(callBack);
					log.debug(["executing ",xmlRequest.method," request to ", xmlRequest.url]);
					var buffer = ["<FORM action='",xmlRequest.url,"' method='",xmlRequest.method,"'>"];
					var params = postdata.split("&");
					for(var i=0;i<params.length;i++)
					{
						var split = params[i].split("=");
						if(split.length==1)
							split[1]="";
						buffer.push("<input type='hidden' name='",split[0],"' value='",split[1],"'>");
					}
					buffer.push("</FORM>");
					var iFrameBody = iframe.contentWindow.document.body;
					iFrameBody.innerHTML=buffer.join('');
					iFrameBody.firstChild.submit();
				});
			}
			else
			{
				log.debug("executing GET request to "+ xmlRequest.url);
				$(iframe).load(callBack);	
				iframe.src = xmlRequest.url;
			}
		};
	};
}

(function(){
	if($ && $.ajaxSettings && $.ajaxSettings.xhr)
	{
		var originalFunction = $.ajaxSettings.xhr;
		$.ajaxSettings.xhr = function()
		{
			var request = null;
			try 
			{ 
				request = originalFunction(); 
			}
			catch(e) 
			{ 
				// jQuery uses the ActiveX object even if it is disabled.
				// We catch the exception and create an IFrameRequest.
				request = new XMLHttpRequest(); 
			}
			if (request == null)
			{
				alert("Ajax is disabled."); 
			}
			return request;
		}
	}
})();

