// 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;','&nbsp;','&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;');
	var html_dec = new Array('&',' ','<','>','"','\\\'','€','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ');

	var n = html_dec.length;
	for (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)
{
	if (!item) return "";
	if (!item.firstChild) return "";
	if (!item.firstChild.data) return "";
	return item.firstChild.data;
}

// 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"), "");}


function arreglaData(sdata)
{
	// data te el format "yyyy-mm-dd hh:mm:ss"
	// i volem el format hh:mm  (dd-mm-yyyy)
	var posEspai = sdata.indexOf(" ");
	var reshora = sdata.substring(posEspai+1,sdata.length-3);
	var resdata = sdata.substring(8,10) + sdata.substring(4,8) + sdata.substring(0,4);
	return reshora;// + " &nbsp; (" + resdata + ")";
}

function hora()
{
	var d = new Date();
	h = d.getHours();			if (h < 10) h = "0"+h;
	m = d.getMinutes();		if (m < 10) m = "0"+m;
	s = d.getSeconds();		if (s < 10) s = "0"+s;
	return h + ":" + m;	//+ ":" + s;
	
}


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;
}


// Posa salts de linia per si hi ha una paraula que es molt llarga sense cap espai
function posaPosiblesSaltsDeLinia(frase)
{
	// IE i Safari ja suporten "word-wrap: break-all;"
	if (es.ie || es.safari) return frase;
	
	var posibleSaltLinia = "&#8203;";	// Suportat per tots els navegadors menys IE
	
	var maxLongParaula = 25;
	
	var arr = frase.split(' ');
	var str = "";	
	for (var i=0; i<arr.length; i++)
	{
		if (arr[i].length > maxLongParaula)
		{
			var niter = arr[i].length/maxLongParaula;
			for (var j=0; j<niter; j++){
				var fins = ((j+1)*maxLongParaula < arr[i].length) ? (j+1)*maxLongParaula : arr[i].length;
				str += arr[i].substring(j*maxLongParaula, fins)+posibleSaltLinia;
			}
			str += " ";
		}
		else
			str += arr[i] + " ";
	}
	
	return str;
}



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

function unloadHttpRequest()
{
	if (http_request != false) 
	{
		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;
}
// 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)
{
		
	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);
	}
}

function alertContents() 
{
	try
	{
		if (http_request.readyState == 4) 
		{
			if (http_request.status == 200) 
			{
				//alert(http_request.responseText);
				if (http_request.responseText != "")
				{
					var xmldoc = http_request.responseXML;
					var tipusConsulta = xml_consultaDada(xmldoc.getElementsByTagName('tipusConsulta').item(0));
					if (tipusConsulta != "")
					{
						if (tipusConsulta == "consultaNovetats")					tractaConsultaNovetats(xmldoc);			// Xat, usuaris online, missatges nous, 
						else if (tipusConsulta == "escriuFrase") 					tractaEscriuFrase(xmldoc);					// Xat
						else if (tipusConsulta == "creaXat") 							tractaCreaXat(xmldoc);							// Xat
						else if (tipusConsulta == "guardaConversa") 			tractaGuardaConversa(xmldoc);				// Xat
						else if (tipusConsulta == "recuperaConversa") 		tractaRecuperaConversa(xmldoc);			// Xat
						else if (tipusConsulta == "esborraConversa") 			tractaEsborraConversa(xmldoc);			// Xat
						else if (tipusConsulta == "notificacioEsticEscrivint") 		tractaNotificacioEsticEscrivint(xmldoc);	// Xat
						else if (tipusConsulta == "marcaFotoPrincipal") 	tractaMarcaFotoPrincipal(xmldoc);		// Fotos
						else if (tipusConsulta == "consultaContacta") 		tractaConsultaContacta(xmldoc);			// Contacta
						else if (tipusConsulta == "eliminaXat") 					tractaEliminaXat(xmldoc);						// Xat
						else if (tipusConsulta == "eliminaXatPerUsuaris") tractaEliminaXatPerUsuaris(xmldoc);	// Xat
						else if (tipusConsulta == "consultaLocalitats")		tractaConsultaLocalitats(xmldoc);		// MiPerfil/SobreMi, Registre
						else if (tipusConsulta == "canviaGenere")					tractaCanviaGenere(xmldoc);					// Gestió / cuenta
					}
					http_request = false;
				}
			}
			else
			{
				//alert('Hi ha hagut problemes amb la peticio.');
			}
		}
	}
	catch (e) {}
}
//***************************************
// FINAL AJAX
//***************************************

//Variables pel xat. Es necessiten a tractaConsultaNovetats(xmldoc).
var gJoHeEscritLultim = [];
gJoHeEscritLultim[2] = "mm";

var jsUltimMsgRebut = ""; // Emmagatzema l'hora de l'ultim missatge rebut

// Xat, usuaris online, missatges nous, ...
function tractaConsultaNovetats(xmldoc)
{
	
	// Consultem si hi ha alguna cosa que haguem d'executar
	var numExecucionsJS = xmldoc.getElementsByTagName('executaJS').length;
	for (var i=0; i<numExecucionsJS; i++)
	{
		var execucioJS = xmldoc.getElementsByTagName('executaJS').item(i);
		var comanda = xml_consultaDada(execucioJS.getElementsByTagName("comanda").item(0));
		eval(comanda);
	}
	
	comprovaResultat(xmldoc); // Comprovem el resultat i mostrem els errors que hi hagi

	// Consultem si hi ha alguna cosa que haguem d'executar després d'ensenyar el missatge d'error (en cas de que n'hi hagi algun)
	var numExecucionsJS = xmldoc.getElementsByTagName('executaJSDespresAlert').length;
	for (var i=0; i<numExecucionsJS; i++)
	{
		var execucioJS = xmldoc.getElementsByTagName('executaJSDespresAlert').item(i);
		var comanda = xml_consultaDada(execucioJS.getElementsByTagName("comanda").item(0));
		eval(comanda);
	}


	// Consultem les frases que hem rebut dels xats
	var c = 0;
	while(frases = xmldoc.getElementsByTagName('frases').item(c++))
	{
		var frase = xml_unescape(xml_consultaDada(frases.getElementsByTagName('frase').item(0)));
		var data = xml_unescape(xml_consultaDada(frases.getElementsByTagName('data').item(0)));
		var idUsuari = xml_unescape(xml_consultaDada(frases.getElementsByTagName('idUsuari').item(0)));
		var nomUsuari = xml_unescape(xml_consultaDada(frases.getElementsByTagName('nomUsuari').item(0)));
		var idXat = parseInt(xml_unescape(xml_consultaDada(frases.getElementsByTagName('idXat').item(0))));
		if (frase != "")
		{
			// Posa salts de linia per si hi ha una paraula que es molt llarga sense cap espai
			frase = posaPosiblesSaltsDeLinia(frase);
			
			var xatDiv = document.getElementById("xatDiv"+idXat);
			if (gJoHeEscritLultim != 2) xatDiv.innerHTML += "<span class='verd2'><b>"+nomUsuari+":</b></span><br>";
			xatDiv.innerHTML += "<p class='verdXat' style='margin:0 0 5px 10px;'>"+frase+"</p>";
			gJoHeEscritLultim = 2;
			xatDiv.scrollTop = xatDiv.scrollHeight; // fem baixar l'scroll
			var obj = document.getElementById("comentarisDiv"+idXat);
			obj.innerHTML = ultimMissatgeRebut + ": " + arreglaData(data);
			jsUltimMsgRebut = ultimMissatgeRebut + ": " + arreglaData(data);
		}
	}


	// Consultem si l'usuari remot està escrivint
	if(usuariEscrivint = xmldoc.getElementsByTagName('usuariEscrivint').item(0))
	{
		var idXat = xml_unescape(xml_consultaDada(usuariEscrivint.getElementsByTagName('idXat').item(0)));
		var msgDiv = document.getElementById("comentarisDiv"+idXat);
		if (msgDiv)
		{
			var usuari = xml_unescape(xml_consultaDada(usuariEscrivint.getElementsByTagName('usuari').item(0)));
			var escrivint = xml_unescape(xml_consultaDada(usuariEscrivint.getElementsByTagName('escrivint').item(0)));
			if (escrivint == "1") msgDiv.innerHTML = usuari+" está escribiendo un mensaje";
			else									msgDiv.innerHTML = jsUltimMsgRebut;
		}
	}
	
	
	
	// Consultem si tenim missatges nous
	var missatgesNous = xml_consultaDada(xmldoc.getElementsByTagName('missatgesNous').item(0));
	if (missatgesNous != "" && missatgesNous != 0)
	{
		//	Escriure el nombre de missatges nous
		var cpaMsg = document.getElementById("msgNousDiv");		
		if (!cpaMsg || cpaMsg.innerHTML != missatgesNous)
		{
			if (missatgesNous > 99) missatgesNous = 99;
			
			var s = "<table style='width:100%; height:85%;' ><tr><td align='center'>";
			s += "<a href='"+jsNivell+"missatges/index.php' class='blancLink'><b><div id='msgNousDiv'>"+missatgesNous+"</div></b></a>";
			s += "</td></tr></table>";
			
			var cpaMsgExt = document.getElementById("msgNousExtDiv");
			if (es.ie)	cpaMsgExt.style.background = "url("+jsNivell+"img/numMsg.gif)";
			else				cpaMsgExt.style.background = "url("+jsNivell+"img/numMsg.png)";
			cpaMsgExt.innerHTML = s;
			
			if (jsFadeMissatges == false) iniciaFadeMissatges();	//scripts/fadeMissatges.js
		}
	}

	// Consultem si hem d'escriure usuaris online
	var numUsuarisOnline = xmldoc.getElementsByTagName('usuarisOnline').length;
	if (numUsuarisOnline > 0)
	{
		
		var obj = document.getElementById("usuarisOnlineDiv");
		if (obj)
		{
			obj.innerHTML = "";
			for (var i=0; i<numUsuarisOnline; i++)
			{

				var usuari = xmldoc.getElementsByTagName('usuarisOnline').item(i);
				var id = xml_consultaDada(usuari.getElementsByTagName("idUsuari").item(0));
				var nom = xml_unescape(xml_consultaDada(usuari.getElementsByTagName("nomUsuari").item(0)));
				var nou;
				if(xml_unescape(xml_consultaDada(usuari.getElementsByTagName("nou").item(0)))==true)
					nou="<img title='nuevo' src='"+jsNivell+"img/ico-nuevo-negro.gif' alt='nuevo'>";
				else
					nou="<img src='"+jsNivell+"img/ico-transparente.gif' alt='nonuevo'>";
				obj.innerHTML += "<p style='height:20px; margin:0px;'>"+nou+"&nbsp;<a href='"+jsNivell+"perfils/visualizatzio.php?usuari="+id+"' class='blancLink'>"+nom+"</a></p>";
				
			}
		}
	}
	
	// Consultem si hi ha algú que vol xarlar amb mi (NOU XAT)
	var numNousXats = xmldoc.getElementsByTagName('nouXat').length;

	esborraNotificacions(numNousXats);

	for (var i=0; i<numNousXats; i++)
	{
		var nouXat = xmldoc.getElementsByTagName('nouXat').item(i);
		var idUsuariRemot = xml_consultaDada(nouXat.getElementsByTagName("idUsuari").item(0));
		var nom = xml_unescape(xml_consultaDada(nouXat.getElementsByTagName("nomUsuari").item(0)));
		var idXat = xml_consultaDada(nouXat.getElementsByTagName("idXat").item(0));

		notificacio_escriuNotificacio(idXat, idUsuariRemot, nom);
	}
	
}

function tractaNotificacioEsticEscrivint(xmldoc)
{
	comprovaResultat(xmldoc);
}

function tractaCreaXat(xmldoc)
{
	comprovaResultat(xmldoc);
}

function tractaEscriuFrase(xmldoc)
{
	if (comprovaResultat(xmldoc))
	{
		var idXat = xml_unescape(xml_consultaDada(xmldoc.getElementsByTagName('idXat').item(0)));
		var fraseItem = xmldoc.getElementsByTagName('frase').item(0);
		var frase = xml_unescape(xml_consultaDada(fraseItem));
//		escriuFraseADiv(frase, idXat);	Això es crida a xat_enviaFrase() de xat.js
	}
	
	// Consultem si hi ha alguna cosa que haguem d'executar
	var numExecucionsJS = xmldoc.getElementsByTagName('executaJS').length;
	for (var i=0; i<numExecucionsJS; i++)
	{
		var execucioJS = xmldoc.getElementsByTagName('executaJS').item(i);
		var comanda = xml_consultaDada(execucioJS.getElementsByTagName("comanda").item(0));
		eval(comanda);
	}
}

function escriuFraseADiv(str, idXat)
{
		var xat = document.getElementById("xatDiv"+idXat);
		if (xat.innerHTML == "&nbsp;") xat.innerHTML = "";
		if (gJoHeEscritLultim != 1) xat.innerHTML += "<span class='grisClar'><b>"+gNomUsuari+":</b></span><br>";
		xat.innerHTML += "<p style='margin:0 0 5px 10px;'>"+posaPosiblesSaltsDeLinia(str)+"</p>";
		gJoHeEscritLultim = 1;
		xat.scrollTop = xat.scrollHeight; // fem baixar l'scroll
}

function tractaGuardaConversa(xmldoc)
{
	if (comprovaResultat(xmldoc))
	{
		var obj = document.getElementById("comentarisDiv");
		obj.innerHTML = gConversaDesada+" "+hora();
	}
}

function tractaRecuperaConversa(xmldoc)
{
	if (comprovaResultat(xmldoc))
	{
		var xat = document.getElementById("xatDiv");
		xat.innerHTML = xml_unescape(xml_consultaDada(xmldoc.getElementsByTagName("conversa").item(0)));
	}
}


function tractaEsborraConversa(xmldoc)
{
	if (comprovaResultat(xmldoc))
	{
		alert("la conversa s'ha esborrat correctament");
	}
}

function tractaMarcaFotoPrincipal(xmldoc)
{
	if (comprovaResultat(xmldoc))
	{
		var idFotoPrincipal = xml_unescape(xml_consultaDada(xmldoc.getElementsByTagName('idFotoPrincipal').item(0)));
		var idFotoPrincipalAnterior = xml_unescape(xml_consultaDada(xmldoc.getElementsByTagName('idFotoPrincipalAnterior').item(0)));
		var vip = xml_unescape(xml_consultaDada(xmldoc.getElementsByTagName('vip').item(0)));
		
		// Popsem el Radio Button a la foto principal anterior
		if (idFotoPrincipalAnterior != "-1"){
			var capa = document.getElementById("fotPpalDiv"+idFotoPrincipalAnterior);
			if (capa){
				capa.innerHTML = "<input type='radio' value='"+idFotoPrincipalAnterior+"' id='"+idFotoPrincipalAnterior+"' onClick='marcaFotoPrincipal("+idFotoPrincipalAnterior+","+vip+")'>";
			}
		}

		// Indiquem quina es la foto principal				
		var capa = document.getElementById("fotPpalDiv"+idFotoPrincipal);
		if (capa){
			capa.innerHTML = textFotoPrincipal;
		}
		
	}
}
function tractaConsultaContacta(xmldoc)
{
	if (xml_unescape(xml_consultaDada(xmldoc.getElementsByTagName('resultat').item(0)))=="OK")
	{
		alert("Su mensaje se ha enviado");
		document.getElementById("botoPeto").disabled=false;
		document.getElementById("botoPeto").id='';
	}
	else
		alert(xml_unescape(xml_consultaDada(xmldoc.getElementsByTagName('resultat').item(0))));
}


function tractaEliminaXat(xmldoc)
{
	comprovaResultat(xmldoc);
}

function tractaEliminaXatPerUsuaris(xmldoc)
{
	comprovaResultat(xmldoc);
}

function tractaConsultaLocalitats(xmldoc)
{
	if (comprovaResultat(xmldoc))
	{
		var localitats = xmldoc.getElementsByTagName('localitats').item(0);
		var num_localitats = localitats.getElementsByTagName('localitat').length;
		var localitatsArr = [];
		for (var i=0; i<num_localitats; i++)
		{
			var t = html_unescape(xml_unescape(xml_consultaDada(localitats.getElementsByTagName('localitat').item(i))));
			if (t != "undefined" && t != ""){
				localitatsArr[i] = t;
			}
		}
		// Aquesta funció existeix a perfils/sobreMi.php i a registroUsuari.php
		omplirLocalitats(localitatsArr);
	}
}

// Aquesta funció es crida quan un usuari es connecta amb el mateix login que un altre ja connectat.
// Es desconnecta a l'usuari que porta més temps connectat i es deixa el que s'acaba de connectar
function sessioAcabada()
{
	document.location = jsNivell+"index.php?desconnectar=1&sessioAcabada=1"
}