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


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

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

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 != "")
					{
					  
					  //GENERAL (estan en callbacksComus.js
						if (tipusConsulta == "getLanguages")							tractaConsultaGetLanguages(xmldoc);
						if (tipusConsulta == "getCountryCodes")						tractaConsultaGetCountryCodes(xmldoc);
					  
						// Detall apartament (les funcions estan a callbackApartmentDetails.js)
						if (tipusConsulta == "readProductDetail") 						tractaReadProductDetail(xmldoc);		
						if (tipusConsulta == "readProductImages")							tractaReadProductImages(xmldoc);
					  if (tipusConsulta == "readProductGoogleAddress") 			tractaReadProductGoogleAddress(xmldoc);
					  if (tipusConsulta == "readProductBasePrices") 				tractaReadProductBasePrices(xmldoc);						
						if (tipusConsulta == "calendarGetMonthAvailability")	tractaCalendarGetMonthAvailability(xmldoc);
						if (tipusConsulta == "calculatePrices")								tractaCalculatePrices(xmldoc);
						
						//availability
						if (tipusConsulta == "getAvailability")			tractaGetAvailability(xmldoc);
						
						//BOOKING 2. Listado y guardado de clientes en formulario de reserva (estan en callbacksBooking.js)
						if(tipusConsulta == "getCustomer")					tractaGetCustomer(xmldoc);
						if(tipusConsulta == "saveCustomer")					tractaSaveCustomer(xmldoc);
						if(tipusConsulta == "getCheckins")					tractaGetCheckins(xmldoc);
						if(tipusConsulta == "saveCustomerAjax")			tractaSaveCustomer(xmldoc);
						if(tipusConsulta == "lostPassword")					tractaLostPassword(xmldoc);
						
						//BOOKING 3 (callbacksBooking.js)
						if(tipusConsulta == "calculatePricesBooking3")		tractaCalculatePricesBooking3(xmldoc);
						if(tipusConsulta == "getCustomerBooking3")				tractaGetCustomerBooking3(xmldoc);
						if(tipusConsulta == "getProductDetailsBooking3")	tractaGetProductDetailsBooking3(xmldoc);
						
						//BOOKING 4 (callbacksBooking.js)
						if(tipusConsulta == "setInProcess")								tractaSetInProcess(xmldoc);
						
						//BOOKING 5
						if(tipusConsulta == "verifyTransaction")		tractaVerifyTransaction(xmldoc);
						if(tipusConsulta == "getBooking")						tractaGetBooking(xmldoc);
						if(tipusConsulta == "sendNotifications")		tractaSendNotifications(xmldoc);
						
						//datosBooking
						if(tipusConsulta == "saveBookingCliente")		tractaSaveBookingCliente(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
//***************************************

