﻿/**
 *	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, si es passa -1 es posaran els decimals necessaris sense reomplir per la dreta amb zeros (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
	if (decimals > 0){
		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 = sn.replace(/\./, separador);	// Reemplacem el punt pel separador de decimals que volem

	return sn;
}

/**
 *	Adapta una data segons l'idioma (si idioma=="ES", passarà de yyyy-mm-dd a dd-mm-yyyy)
 *
 *	@param data (string): data amb el format yyyy-mm-dd
 *	@param idioma (string): idioma
 */
function adaptaData(strData, idioma){
	var tdata = strData;
	if (idioma == "ES"){
		arr = strData.split("-");
		if (arr.length != 3) exit("El format de la data d'entrada es incorrecte");
		tdata = arr[2]+"-"+arr[1]+"-"+arr[0];
	}
	return tdata;
}



/**
 *	Comprova si és una adreça de correu electrònic vàlida
 */
function isEmailAddress(email)
{
	if (email.length == 0 ) return false;
	var filter=/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$/;
	if (filter.test(email)) return true;
	return false;
}

