﻿/**
 *	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(html) {
   var htmlNode = document.createElement("DIV");
   htmlNode.innerHTML = html;
   if(htmlNode.innerText)
      return htmlNode.innerText; // IE
   return htmlNode.textContent; // FF
}



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


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


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

/**
 *	Adapta una data segons l'idioma (si idioma!="en", passarà de yyyy-mm-dd a dd-mm-yyyy)
 *	(NO, SEMPRE RETORNA LA DATA AMB DD-MM-AAAA)
 *
 *	@param data (string): data amb el format yyyy-mm-dd
 *	@param idioma (string): idioma
 */
function adaptaData(strData, idioma){
	var tdata = strData;
	var sIdioma = String(idioma);
//	if (sIdioma.toLowerCase() != "en"){
		arr = strData.split("-");
		if (arr.length != 3) alertSafe("El format de la data d'entrada es incorrecte");
		tdata = arr[2]+"-"+arr[1]+"-"+arr[0];
//	}
	return tdata;
}


/**
 *	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 = ".";

	num = String(num).replace(",", ".");	// Passem el separador del valor que rebem a punt

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