
// Passa un node XML a String
function xml2str(xmlNode)
{
	try {
		return (new XMLSerializer()).serializeToString(xmlNode);
	}
	catch (e) {
		try {
			// Internet Explorer.
			return xmlNode.xml;
		}
		catch (e)
		{
			//Strange Browser ??
			alert('Xmlserializer not supported');
		}
	}
	return false;
}

// Desescapa els simbols XML que s'han escapat en el fitxer php de la peticio
function xml_unescape(str)
{
	str = str.replace(/&quot;/g, '"');
	str = str.replace(/&apos;/g, "'");
	str = str.replace(/&lt;/g	 , '<');
	str = str.replace(/&gt;/g  , '>');
	str = str.replace(/&amp;/g , '&');
	return str;
}

// Desescapa els simbols HTML que s'han escapat en el fitxer php de la peticio amb la funció htmlentities()
function html_unescape(str)
{
	if (str.indexOf('&') == -1) return str;

	var html_enc = new Array('&amp;','&lt;','&gt;','&quot;','&#039;','&euro;','&Agrave;','&Aacute;','&Acirc;','&Atilde;','&Auml;','&Aring;','&AElig;','&Ccedil;','&Egrave;','&Eacute;','&Ecirc;','&Euml;','&Igrave;','&Iacute;','&Icirc;','&Iuml;','&ETH;','&Ntilde;','&Ograve;','&Oacute;','&Ocirc;','&Otilde;','&Ouml;','&Oslash;','&Ugrave;','&Uacute;','&Ucirc;','&Uuml;','&Yacute;','&THORN;','&szlig;','&agrave;','&aacute;','&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&yacute;','&thorn;','&yuml;','&ordf;','&ordm;','&shy;','&iexcl;','&cent;','&pound;','&curren;','&yen;','&brvbar;','&sect;','&uml;','&copy;','&laquo;','&not;','&reg;','&macr;','&deg;','&plusmn;','&sup2;','&sup3;','&acute;','&micro;','&para;','&middot;','&cedil;','&sup1;','&raquo;','&frac14;','&frac12;','&frac34;','&iquest;','&divide;');
	var html_dec = new Array('&','<','>','"','\\\'','€','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','ª','º','','¡','¢','£','¤','¥','¦','§','¨','©','«','¬','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','»','¼','½','¾','¿','÷');

	var n = html_dec.length;
	for (var i=0; i<n; i++)
	{
		eval("str = str.replace(/"+html_enc[i]+"/g , '"+html_dec[i]+"');");
	}
	return str;
}


// Rep un item XML i retorna el valor "data" si pot, si no retorna "";
function xml_consultaDada(item)
{
	var ret = "";
	if (!item) return "";
	if (!item.childNodes) return "";
	for (var i=0; i < item.childNodes.length; i++){
		if (item.childNodes[i].data) ret += item.childNodes[i].data;
	}
	return ret;
}

// Retorna un nombre aleatori per passar-li a la consulta HTTP pq IE no ho agafi de la cache
function aleat()
{
	var ran_unrounded=Math.random()*1000000;
	var ran=Math.floor(ran_unrounded);
	return ran;
}

// Funcions TRIM. Si no es passa el segon parametre es tallaran els seguents caracters:
// 		" " (ASCII 32 (0x20)), an ordinary space.
// 		"\t" (ASCII 9 (0x09)), a tab.
// 		"\n" (ASCII 10 (0x0A)), a new line (line feed).
// 		"\r" (ASCII 13 (0x0D)), a carriage return.
// 		"\0" (ASCII 0 (0x00)), the NUL-byte.
// 		"\x0B" (ASCII 11 (0x0B)), a vertical tab.
function trim(str, chars) {return ltrim(rtrim(str, chars), chars);}
function ltrim(str, chars) {chars = chars || "\\s";return str.replace(new RegExp("^[" + chars + "]+", "g"), "");}
function rtrim(str, chars) {chars = chars || "\\s";return str.replace(new RegExp("[" + chars + "]+$", "g"), "");}


/*
 *	Comprova el reultat d'una consulta AJAX
 *	Si el camp "resultat" != OK mostra el missatge d'error
 *	Sino mostra el missatge de camp notify (si existeix)
 *
 *	Per mostrar els errors mira si existeix una capa amb id="errors" i hi escriu el resultat.
 *	Si no existeix, mostra el resultat en un alert()
 *	Per notify fa el mateix amb la capa amb id="notify"

 *	RETORNA TRUE: si la resultat=='OK'
 						FALSE:	si resultat!='OK'
 */
function comprovaResultat(xmldoc)
{
	var respItem = xmldoc.getElementsByTagName('resultat').item(0);
	var resposta = xml_unescape(xml_consultaDada(respItem));
	if (resposta != "OK") {
		alert(resposta);
		return false;
	}
	return true;
}

//***************************************
// AJAX
//***************************************
var http_request = false;
var b_http_request = false;

function unloadHttpRequest()
{
	var esborra = false;
	try{
		if (http_request != false) 	{
			esborra = true;
		}
	}
	catch(e){
		esborra = true;
	}
	if (esborra == true)
	{
		try{
			delete(http_request);
		}catch(e){}
		http_request = false;
	}
}

function buscaActiveX()
{
//	try{ return new ActiveXObject("Msxml2.XMLHTTP.6.0") }catch(e){}
//	try{ return new ActiveXObject("Msxml2.XMLHTTP.3.0") }catch(e){}
	try{ return new ActiveXObject("Msxml2.XMLHTTP") 		}catch(e){}
	try{ return new ActiveXObject("Microsoft.XMLHTTP")	}catch(e){}
	return false;
}

var buffURL = [];
var buffValors = [];
var timOut = 0;
function buffer(url, valors)
{
	buffURL.push(url);
	buffValors.push(valors);
	if (timOut == 0) timOut = setTimeout("esperaConsultaHttp()", 100);
}
function esperaConsultaHttp()
{
	if (b_http_request == false)
	{
		var url = buffURL.shift();
		var valors = buffValors.shift();
		consultaHttp(url, valors);
	}
	if (buffURL.length > 0) 		timOut = setTimeout("esperaConsultaHttp()", 100);
	else timOut = 0;
}


// Si es passa el camp "valors", aquests senviaran per POST.
//	"valors" ha d'estar codificat com a URL (camp=valor&camp2=valor2)
function consultaHttp(url, valors)
{
	// Si http_request està ocupat, ens esperem
	if (b_http_request != false) {
		buffer(url, valors);
		return false;
	}

	b_http_request = true;
	http_request = false;

	if (window.XMLHttpRequest)
	{ // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml; charset=utf-8');
		}
	}
	else if (window.ActiveXObject)
	{ // IE
		http_request = buscaActiveX();//new ActiveXObject("Msxml2.XMLHTTP");
	}

	if (!http_request) {
		alert('Error :( No es posible crear una instancia XMLHTTP');
		return false;
	}

	http_request.onreadystatechange = alertContents;
	if (valors == undefined || valors == '')
	{
		http_request.open('GET', url, true);
		http_request.send(null);
	}
	else
	{
		// Enviem els valors per POST
		http_request.open ('POST', url, true);
		http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		http_request.send(valors);
	}

	return true;
}

// Si es passa el camp "valors", aquests senviaran per POST.
//	"valors" ha d'estar codificat com a URL (camp=valor&camp2=valor2)
function consultaHttpSinAlertContents(url, valors) //v1.0
{
	// Si http_request està ocupat, ens esperem
	if (b_http_request != false) {
		buffer(url, valors);
		return false;
	}

	b_http_request = true;
	http_request = false;

	if (window.XMLHttpRequest)
	{ // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml; charset=utf-8');
		}
	}
	else if (window.ActiveXObject)
	{ // IE
		http_request = buscaActiveX();//new ActiveXObject("Msxml2.XMLHTTP");
	}

	if (!http_request) {
		alert('Error :( No es posible crear una instancia XMLHTTP');
		return false;
	}

	http_request.onreadystatechange = null;
	if (valors == undefined || valors == '')
	{
		http_request.open('GET', url, true);
		http_request.send(null);
	}
	else
	{
		// Enviem els valors per POST
		http_request.open ('POST', url, true);
		http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		http_request.send(valors);
	}

	return true;
}


function alertContents()
{

	try
	{
		if (http_request.readyState == 4)
		{
			if (http_request.status == 200)
			{
		  	//alert("reponse : " + http_request.responseText);
				if (http_request.responseText != "")
				{
					var xmldoc = http_request.responseXML;
					var tipusConsulta = xml_consultaDada(xmldoc.getElementsByTagName('tipusConsulta').item(0));
					//alert(tipusConsulta);
					if (tipusConsulta != "")
					{
						if (tipusConsulta == "enviaCasilla") tractaEnviaCasilla(xmldoc);
					}
					http_request = false;
					b_http_request = false;
				}//else alert("respuesta vacia");
			}
			else{
				//alert('Hi ha hagut problemes amb la peti
			}
		}
	}
	catch (e) {}
}
//***************************************
// FINAL AJAX
//***************************************

function tractaConsultaGetCountryCodes(xmldoc)
{
	if (!comprovaResultat(xmldoc)) return false;

	alert("de moment tot va be");
}
