//potrzebne do tworzenia obiektu requestu
var XMLHTTPREQUEST_MS_PROGIDS = new Array(
  "Msxml2.XMLHTTP.7.0",
  "Msxml2.XMLHTTP.6.0",
  "Msxml2.XMLHTTP.5.0",
  "Msxml2.XMLHTTP.4.0",
  "MSXML2.XMLHTTP.3.0",
  "MSXML2.XMLHTTP",
  "Microsoft.XMLHTTP"
);

//status kontrolki
var XMLHTTPREQUEST_READY_STATE_UNINITIALIZED = 0;
var XMLHTTPREQUEST_READY_STATE_LOADING       = 1;
var XMLHTTPREQUEST_READY_STATE_LOADED        = 2;
var XMLHTTPREQUEST_READY_STATE_INTERACTIVE   = 3;
var XMLHTTPREQUEST_READY_STATE_COMPLETED     = 4;

//tworzy obiekt requestu w hoscie
function getXMLHttpRequest()
{
	var httpRequest = null;

	if (window.XMLHttpRequest != null)
		httpRequest = new window.XMLHttpRequest();
	else if (window.ActiveXObject != null)
	{ //dla IE
		var success = false;
		for (var i = 0; i < XMLHTTPREQUEST_MS_PROGIDS.length && !success; ++i)
		{
			try
			{
				httpRequest = new ActiveXObject(XMLHTTPREQUEST_MS_PROGIDS[i]);
				success = true;
			}
			catch (e)
			{}
		}
	}
	return httpRequest;
}

function Communicate(ServiceLocalizator,ServiceData,Context,onComplete)
{
	//pobieramy obiekt requestu
	var requester = getXMLHttpRequest();
	if(requester == null) return;

	//tworzymy zapytanie
	var data="";
	data += "ServiceLocalizator="
	data += ServiceLocalizator;
	data += "&";
	data += "ServiceData="
	data += ServiceData;

	//pobieramy adress strony do ktorej postujemy
	var EndPointAdress = document.getElementById("Status1_CommunicationEndPoint").value;
	requester.open("GET", EndPointAdress+"?"+data,true);

	//jest to po to aby request nie szedl z cachu
	requester.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	//jest to fukcja inline jaka aostanie wywolana asynchronicznie po zakonczeniu reqestu
	requester.onreadystatechange=function() 
    {
		try
		{
			if (requester.readyState==XMLHTTPREQUEST_READY_STATE_COMPLETED)
			{
				if (requester.status == 200 || requester.status==0) //udalo sie
					onComplete.Complete(requester.responseText,Context);
				else //nie udalo sie
					onComplete.Failed(Context); 
			}
		}
		catch(e)
		{ //nie udalo sie
			onComplete.Failed(Context); 
		}
	}

    //to jest poczatek zdalnego asynchronicznego wywolania 
	requester.send(null);
}