function getXHR(){
	if(window.XMLHttpRequest){
		xmlhttp = new XMLHttpRequest();
	}else{
		xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
	}
	return xmlhttp;
}

/*
	@param request: String - wywoływany skrypt
	@param method: String - metoda; może przyjąć wartości GET lub POST
	@param async: Boolean - flaga, stwierdzająca czy zapytanie ma zostać wysłane
		asynchronicznie
	@param postRequest: String - zawartość zapytania POST (postaci: 
		"var1=val1&var2=val2&var3=val3..."); w przypadku wysyłania zapytania GET
		parametr postRequest powinien być ustawiony na NULL
	@param xhr: XMLHttpRequest - obiekt obsługujący zapytania AJAX
*/
function sendAJAXRequest(request,method,async,postRequest,xhr){
	if(xhr==null) var xmlhttp = getXHR();
	else var xmlhttp = xhr;
	if(method!='GET' && method!='POST') return false;
	xmlhttp.open(method,request,async);
	xmlhttp.send(method=='POST'?postRequest:null);
	return xmlhttp;
}

/*
	Funkcja sprawdzająca, czy podana w pierwszym wartość znajduje się w podanej
	w drugim parametrze tablicy.
	@param val - szukana wartość (dowolnego typu)
	@param tab - tablica do przeszukania
	@return Boolean - true, jeśli szukana wartość została znaleziona w 
		przeszukiwanej tablicy; false w przeciwnym wypadku
*/
function inArray(val,tab){
	var result = false;
	if(tab)
		for(var i = 0;i<tab.length && !result;i++){
			if(tab[i]==val) result = true;
		}
	return result;
}

/*
	Funkcja renderująca SELECT na podstawie przekazanej nazwy, obiektu JSON opcji
	i akcji onChange.
	@param name: String - nazwa tworzonego obiektu SELECT
	@param JSONOptions: Object - obiekt opcji do wyboru, postaci:
		JSONOptions = {
						'options':[
							{'id':id1,'label':label1},
							{'id':id2,'label':label2}
						],
						'selectedId':id
					}
	@param onChangeAction: String - akcja JS wywoływana onChange
	@return String - kod HTML wyrenderowanego SELECTa
*/
function renderJSONSelect(name,JSONOptions,onChangeAction,selectedId){
	var out = '<select name="'+name+'"'+(onChangeAction!=''?' onchange="'+onChangeAction+'"':'')+' style="width:140px;">';
	if(JSONOptions && JSONOptions.options && (JSONOptions.selectedId || JSONOptions.selectedId===0)){
		for(var i = 0;i<JSONOptions.options.length;i++){
			var option = JSONOptions.options[i];
			var id = option.id;
			var label = option.label;
			out += '<option value="'+id+'"'+(selectedId==id?' selected="selected"':'')+'>'+label+'</option>';
		}
	}
	out += '</select>';
	return out;
}
