var request = null;

/* Funkcja opkawujaca do skonstruowania obiektu zadania.
Parametry:
	reqType: typ zadania HTTP (POST, GET)
	url: adres URL programu serwerowego
	asynch: czy zadanie jest asynchroniczne, czy tez nie
	respHandle: nazwa funkcji, ktora bedzie obslugiwala odpowiedz
	Kazde piec parametrow przedstawione przez arhuments[4] stanowia dane
	żądania POST przeznaczonego do wyslania */
function httpRequest(reqType, url, asynch, respHandle) {
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		request = new ActiveXObject("Msxml2.XMLHTTP");
		if (!request) {
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	/* Sprawdzamy czy wystepuja zadania null jezli zaden objekt nie zostal zainicjowany */
	if (request) {
		/* Jezeli parametr reqType jest typu POST, wowczas
		piaty argument funkcji stanowia dane przesylane metoda POST */
		if(reqType.toLowerCase() != "post") {
			initReq(reqType,url,asynch,respHandle);
		} else {
			var args = arguments[4];
			if (args != null && args.length > 0) {
				initReq(reqType, url, asynch, respHandle, args);
			}
		}
	} else {
		alert("Używana przeglądarka nie pozwala na wykorzystanie wszystkich funkcji aplkacji!");
	}
}

/* Inicjalizacja obiektu zadania, ktory zostal juz skonstruowany. */
function initReq(reqType, url, bool, respHandle) {
	try {
		/* okreslamy funkcje, ktora bedzie obslugiwac odpowiedz HTTP */
		request.onreadystatechange = respHandle;
		request.open(reqType, url, bool);
		/* Jezeli parametr reqType jest typu POST, wowczas
		piaty argument funkcji stanowia dane przesylane metoda POST. */
		if (reqType.toLowerCase() == "post") {
			request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
			request.send(arguments[4]);
		} else {
			request.send(null);
		}
	} catch (errv) {
		alert (
			"W tym momencie aplikacja "+
			"nie może połączyć się z serwerm. "+
			"Proszę spróbować ponownie za chwilę.\n"+
			"Szczegółowe informacje o błędzie: "+errv.message);
	}
}
