/* Ajax function implementation 
* 
*/ 

/* Creating new HttpRequest object */

var httpRequest = false; 
createXMLHTTPObject(); 

/**
 * Tworzy obiekt XMLHTTP
 */
function createXMLHTTPObject(){
	if(window.XMLHttpRequest){
		httpRequest = new XMLHttpRequest();
		if(httpRequest.overrideMimeType){
			httpRequest.overrideMimeType('text/xml');
		}
	} else if(window.ActiveXObject){
		try{
		httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e){
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
			} catch(e){
				/* Hmmm... what we can do? */ 
				window.location('ajaxerr.html'); 
			}
		} 
	}
	return httpRequest; 
}

/**
 * Przetwarza dane formularza na string w formie ?zmienna=wartosc&zmienna=wartosc
 * gotowy do wyslania przez XMLHTTP
 * @param string formId id formularza 
 * @return string 
 */
function formData2QueryString(formId) {
	var docForm = document.getElementById(formId); 
	var i; 
	var strSubmit       = '';
	var formElemnt; 
	
	for(i = 0; i < docForm.elements.length; i++){
		formElem = docForm.elements[i]; 
		switch(formElem.type){
			case 'text': 
			case 'select-one': 
			case 'hidden': 
			case 'password': 
			case 'textarea': 
			case 'submit':
			case 'button':
				strSubmit += formElem.name + '=' + formElem.value + '&'; 
				break; 
			case 'checkbox': 
			case 'radio':
				if(formElem.checked){
					strSubmit += formElem.name + '=' + formElem.value + '&'; 
				}
				break; 
		}
	}
	return strSubmit; 
}

/**
 * Przetwrza dane z tablicy na string w formie ?zmienna=wartosc&zmienna=wartosc
 * gotowy do wysłania przez XMLHTTP
 * @param array arr 
 * @return string 
 */
function arrayData2QueryString(arr){
	if(arr == undefined) return; 
	var i; 
	strSubmit = ''; 
	for(var i in arr){
		strSubmit += i + '=' + arr[i] + '&';
	}
	strSubmit = strSubmit.substring(0, strSubmit.length - 1); 
	alert(strSubmit); 
	return strSubmit; 
}

/**
 * Wykonuje zapytanie z użyciem danych z formularza
 * @param string url ścieżka docelowa
 * @param string formId id formularza
 * @param function fnDone funkcja, która ma być wykonana po zakończeniu zapytania
 * otrzymuje jako parametr obiekt XMLHTTP
 * @return bool
 */
function makeRequestForm(url, formId, fnDone){
	var strSubmit = formData2QueryString(formId); 
	return makeRequestArgs(url, strSubmit, fnDone); 
}

/**
 * Wykonuje zapytanie z użyciem danych z tablicy
 * @param string url ścieżka docelowa
 * @param array arr tablica z danymi 
 * @param function fnDone funkcja, która ma być wykonana po zakończeniu zapytania
 * otrzymuje jako parametr obiekt XMLHTTP
 * @return bool
 */
function makeRequestArray(url, arr, fnDone){
	strSubmit = arrayData2QueryString(arr);
	return makeRequestArgs(url, strSubmit, fnDone);
}

/**
 * function makeRequestArgs 
 * Fuction makes request using &-style query 
 * @url - adress to post query
 * @arg - arguments in format arg1=value1&arg2=value2
 * @httpReq - XMLHTTP object 
 * @fnDone - function to execude after call 
 */ 

function makeRequestArgs(url, args, fnDone){
	if(!httpRequest){
		alert('Błąd! Obiekt httpRequest nie istnieje. Skontaktuj sie z administratorem.');
		return false;
	}

	httpRequest.open('POST', url, true); 
	httpRequest.setRequestHeader('User-Agent','XMLHTTP/1.0');
	httpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
	httpRequest.onreadystatechange = function(){
		if(httpRequest.readyState != 4){
			return; 
		} 
		if(httpRequest.status != 200 && httpRequest.status != 304){
			alert("Błąd komunikacji: " + httpRequest.status );
			return; 
		}
		if(httpRequest.readyState == 4){
			fnDone(httpRequest); 
		}
	}
	httpRequest.send(args); 
	return true;
}

		
