﻿/**
 *	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"), "");
}



function unescapeHTML(html) {
   var htmlNode = document.createElement("DIV");
   htmlNode.innerHTML = html;
   if(htmlNode.innerText)
      return htmlNode.innerText; // IE
   return htmlNode.textContent; // FF
}
/*
 * Desescapa els simbols HTML
 */
function html_unescape(str)
{
	if(typeof str != "string") return "";
	if(str == "") return 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;','&iquest;');
	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;','&iquest;');

	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)
{
	if(typeof texto != "string") return "";
	if(texto == "") return 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)
{
	if(typeof txt != "string") return "";
	if(txt == "") return txt;
	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)
{
	if(typeof str != "string") return "";
	if(str == "") return 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;
}



// Fa un alert decodificant tags html i canviant simbols per codificació hexadecimal
function alertSafe(str)
{
	alert(codHex(html_unescape(str)));
}

// Fa un prompt decodificant tags html i canviant simbols per codificació hexadecimal
function promptSafe(str, str2)
{
	if(typeof(str2) == "undefined") str2 = "";
	var ret = prompt(codHex(html_unescape(str)), codHex(html_unescape(str2)));
	return ret;
}

// Fa un confirm decodificant tags html i canviant simbols per codificació hexadecimal
function confirmSafe(str, str2)
{
	var ret = confirm(codHex(html_unescape(str)));
	return ret;
}


/**
 *	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=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);
	return sn;
}


/**
 *	Codifica un string a utf8
 */
function utf8_encode( s )
{
  return unescape( encodeURIComponent( s ) );
}

/**
 *	Decodifica un string a utf8
 */
function utf8_decode( s )
{
  return decodeURIComponent( escape( s ) );
}
