/**
 *	TRIM, LTRIM i RTRIM
 *
 *	Si no es passa res com a segon paràmetre, es farà un trim dels seguents simbols:
 *		" " (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"), "");
}		


/*
 * Desescapa els simbols HTML
 */
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;', '&lsquo;', '&rsquo;','&ldquo;', '&rdquo;','&mdash;','&ndash;','&lsaquo;','&rsaquo;','&trade;','&frac12;','&tilde;','&frac14;','&frac34;');
	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;
}


/*
 *	Escapa els simbols HTML
 */
function html_escape(str)
{
	var html_enc = new Array('&',' ','<','>','"','\\\'','€','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','‘','’','“','”','--','--','‹','›','™','½','˜','¼','¾');
	var html_dec = 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;', '&lsquo;', '&rsquo;','&ldquo;', '&rdquo;','&mdash;','&ndash;','&lsaquo;','&rsaquo;','&trade;','&frac12;','&tilde;','&frac14;','&frac34;');

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


/**
 *	Elimina els tags HTML (<xxxx>)
 *
 *	@param txt(string): Text amb tags HTML
 *
 *	@return (string): Text sense tags HTML
 */
function cleanupHTML(texto)
{
	var ini = texto.indexOf("<");
	var fi = texto.indexOf(">");
	while(ini > -1 && fi > -1)
	{
		texto = texto.substr(0,ini)+" "+texto.substr(fi+1,texto.length);
		ini = texto.indexOf("<");
		fi = texto.indexOf(">");
	}
	return texto;
}


/**
 *	Elimina els tags HTML (<xxxx>)
 *
 *	@param txt(string): Text amb tags HTML
 *	@param iniTag(string): tag d'obertura (ex. <style>)
 *	@param fiTag(string): tag de tancament  (ex. </style>)
 *
 *	@return (string): Text els tags HTML ni el contingut que hi havia dintre
 */
function removeHtmlTagContent(txt, iniTag, fiTag)
{
	var ini = txt.indexOf(iniTag);
	var fi = txt.indexOf(fiTag);
	while(ini > -1 && fi > -1)
	{
		txt = txt.substr(0,ini)+" "+txt.substr(fi+fiTag.length,txt.length);
		ini = txt.indexOf(iniTag);
		fi = txt.indexOf(fiTag);
	}
	return txt;
}


/**
 *	Codifica caràcters especials (accents, ñ, ...) en codis hexadecimals per poderlos 
 *	posar en un alert() de javascript
 */
function codHex(str)
{
	var spetial_chars = new Array('¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '®', '¯', '°', '±', '²', '³', '´', 'µ', '•', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ');
	var hex_encoding  = new Array('xA1', 'xA2', 'xA3', 'xA4', 'xA5', 'xA6', 'xA7', 'xA8', 'xA9', 'xAA', 'xAB', 'xAE', 'xAF', 'xB0', 'xB1', 'xB2', 'xB3', 'xB4', 'xB5', 'xB7', 'xB8', 'xB9', 'xBA', 'xBB', 'xBC', 'xBD', 'xBE', 'xBF', 'xC0', 'xC1', 'xC2', 'xC3', 'xC4', 'xC5', 'xC6', 'xC7', 'xC8', 'xC9', 'xCA', 'xCB', 'xCC', 'xCD', 'xCE', 'xCF', 'xD0', 'xD1', 'xD2', 'xD3', 'xD4', 'xD5', 'xD6', 'xD7', 'xD8', 'xD9', 'xDA', 'xDB', 'xDC', 'xDD', 'xDE', 'xDF', 'xE0', 'xE1', 'xE2', 'xE3', 'xE4', 'xE5', 'xE6', 'xE7', 'xE8', 'xE9', 'xEA', 'xEB', 'xEC', 'xED', 'xEE', 'xEF', 'xF0', 'xF1', 'xF2', 'xF3', 'xF4', 'xF5', 'xF6', 'xF7', 'xF8', 'xF9', 'xFA', 'xFB', 'xFC', 'xFD', 'xFE', 'xFF');

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


/**
 *	Converteix un número a un string amb el número de decimals i el separador desitjat
 *	Per defecte hi haurà dos decimals i el separador serà un punt
 *
 *	@param num (int / float) Número que volem amb format
 *	@param decimals (int) Número de decimals que es volem (per defecte 2)
 *	@param separador (string) Separaror dels decimals (per defecte .)
 */
function float2str(num, decimals, separador)
{
	if (decimals == undefined) decimals = 2;
	if (separador == undefined) separador = ".";
	var n = parseFloat(num);	// Ens assegurem de tenir un número
	
	n.toFixed(decimals);	// posem el número de decimals que volem, reomplint amb zeros a la dreta si es necessari
	
	sn = n+'';	// convertim el número a string
	
	sn.replace(/./g, separador);
}
