var xhr_object; // Objecte XMLHttpRequest

/*
		libinit - Initialitzacio de la libreria
*/
function libXMLHttpInit() {
	xhr_object = null;
	crearXMLHttpRequestObjecte()
}

/*
		crearXMLHttpRequestObjecte   - 	crea l'objecte XMLHttpRequest segons 
							que el navegador ès Firefox o Internet Explorer
*/ 
function crearXMLHttpRequestObjecte() {
	if(window.XMLHttpRequest) // Firefox 
		xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	else { // XMLHttpRequest no functiona
		alert("XMLHTTPRequest no functiona amb aquest navegador..."); 
		return; 
	} 
}

/* 
		cargarDoc - carga un document
url 			- L'adreça on ès situat el document
quadreParametres 	- Un quadre amb els parametres a enviar al document
method			- Mètode utilizat per enviar les dades al document
funcio			- nom de la funcio que sera executat quan la resposta del servidor arribara
Exemple d'utilizaciò :
cargarDoc("./default.asp", quadreAmbElsMeusParametres, "post",  "accioAExecutarAmbLesDades()")
*/
function cargarDoc(url, quadreParametres, method, funcio, asincron) {
	if (arguments.length < 4) {
		asincron = true;
	}
	
	var dades = null;
	
	if (xhr_object == null) {
		crearXMLHttpRequestObjecte();
	}
	
	if (method.toUpperCase() == "GET") {
		url += "?";
		
		// afegit dels parametres a l'url
		for (var param in quadreParametres) {
			url += param + "=" + quadreParametres[param] + "&";
		}
		// open(method, filename, synchronous[false]|asynchronous[true])	
		xhr_object.open("GET", url, asincron);
	} else {
		dades = "";
		for (var param in quadreParametres) {
			dades += param + "=" + quadreParametres[param] + "&";
		}
		// open(method, filename, synchronous[false]|asynchronous[true])
		xhr_object.open("POST", url, asincron);
		
		// Cal indicar el typus de codi
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
	}

	// funciò que sera executat cada vegada que canviara la valor de onreadystatechange
	xhr_object.onreadystatechange = function() {
		eval(funcio);
	}
	
	// tramesa de la requirement
	xhr_object.send(dades);
	
	if (!asincron) {
		checkLogout();
	}
}

/*
	baixamentComplet - Torna true si el baixament ès complet i ha functionat, false sino
*/
function baixamentComplet() {
	if (xhr_object.readyState == 4 && xhr_object.status == 200) {
		return true;
	}
	return false;
}

function communicationSucceed() {
	if (xhr_object.readyState == 4 && xhr_object.status == 200) {
		return true;
	}
	
	return false;
}

function getStatus() {
	return xhr_object.status;
}

function getResponseText() {
	return xhr_object.responseText;
}

function checkLogout() {
	if (communicationSucceed()) {
		if(xhr_object.getResponseHeader("login") == "true") {
			location.href = location.href.replace("/admin/.*", "/admin/logout.asp");
		}
	}
}