* Historico de versiones
* <p><pre>
* 7.0: 18/09/23: Movido a TOMCAT 10.
* 6.2: 10/01/23: getJsonResultBR y getArrayStringResultBR
* 6.1: 06/10/22: selectFirst* with params
* 6.0: 25/04/20: Extend Report to 35 columns
* 5.9: 03-03-19: Nuevo parametro hideEmpty en dynamic list
* 5.8: 02-12-18: execPreSql2 y 3, getJsonResultHTML
* 5.7: 04-09-18: Send email via Gmail
* 5.6: 17-07-18: Use TimeZoneDate en vez de Calendar
* 5.5: 11-06-18: execPrepSelect
* 5.4: 09-02-18: Decifrar HTML
* 5.3: 25-09-17: use more getLabels para pasarlo al ingels
* 5.2: 06-05-17: add getDtHrStrNN3 y getDtHrStrNN2
* 5.1: 12-01-17: add selectFirstNN (+2, 3)
* 5.0: 08-11-16: Date format US
* 4.9: 02-06-16: Envio de emails con attachments, call resetValues() en DynamicList reset icon
* 4.8: 31-01-16: Change getDate for getTimestamp
* 4.7: 01-12-15: Upgrade JAsperReports a version 6.2
* 4.6: 28-10-15: Ampliar openFlashChart a 23 grupos/sitios
* 4.5: 19-03-15: Bug fix selectFirstInt
* 4.4: 23-01-15: Add BigDecimal + fix bug on tranlslate number (made case insensitive)
* 4.3: 06-08-14: Add filterAlphaNumericNtilde in Tools + filterChar
* 4.2: 28-03-14: Report up to 25 colomns
* 4.1: 25-01-14: JSON query results
* 4.0: 15-01-14: Usa parametros dynamicos
* 3.9: 21-01-13: ofc AMPLIADO HASTA 16 DATASETS
* 3.8: 25-08-12: Report taglib: si no tiene cssClass definido, no usa fieldset.
* 3.7: 22-03-12: Solo commit/rollback si autocommit==true
* Fix nolimit param en AjaxList
* Nuevo tag OptionSQL para generar lista de <option> basadas en una consulta SQL
* Nuevo atributo disabled en DynamicList
* 3.6: 01-02-12: Ya no se permite el SQL como parametro de TestDB, por razon de seguridad.
* Si requieres un SQL diferente, sobreescribe el metodo getSQL.
* Si requieres un SQL dinamico, sobreescribe el metodo getSQL implementando algun tipo de seguridad (validacion de variable de session por ejemplo)
* 3.5: 24-01-12: Add getDateLong2+3, getDateMedium+2+3
* 3.4: 15-01-12: placeholder en DynamicList
* 3.3: 06-01-12: Move DynamicList to tag.utils.
* 3.2: 07-12-11: DynamicList: img align top, TestDB @WebServlet
* Add getCount2 y getCount3
* 3.1: 04-11-11: Report: nuevo parametro noDataMsg, AjaxList:
* 3.0: 30-10-11: AjaxList: Desde ahora usa encoding=ISO-8859-1 !!!!! Permite accentos en caja de texto de busqueda como en resultaods de busqueda. REQUIERE un archivo prototype.js adaptado (disponible en WebContent/js/)
* 2.9: 27-10-11: Send email con String y StringBuilder tambien
* DynamicList: permitir -1 como no_...., utilizando otro valor para el campo vacio. Si no es -1, mencionar el valor en el parametro menosUnoEsVacio (por defecto="-1")
* 2.8: 24-10-11: Nuevo atributo inputClass en DynamicList
* 2.7: 14-10-2011: Graficos en flash: hasta 12 series de datos en vez de 10.
* 2.6: 10-10-2011: Se agrego getDtHrStrAMPM y getDtHrStrAMPMRnd
* 2.5: 22-09-2011: Agregar setDouble a ConnectDB, agregar selectCountDistinct y selectFirstInt
* 2.4: 02-09-2011: Nuevos metodos para traducir numeros en español sin moneda
* 2.3: 15-08-2011: Report tag: no muestra titulo de columnas con titulo=" ". Para no mostrar celdas, usar style=display: none;
* 2.2: 13-07-2011: Fix Calculo.round2c
* 2.1: 13-06-2011: Formateo de numeros usando NumberFormat en vez de manejar el String.
* 2.0: 10-01-2011: Aumentar default value rowsPerPages a 9999 (Report tag)
* In DynamicList, reset image moved to parameter to allow override
* 1.9: 28-12-2010: Add getStringHTMLAccent para formatear solo los acenteos a HTML
* 1.8: 02-11-2010: Add setOrigin to log code initiating the connection
* 1.7: 16-10-2010: Add Tools.filterAlphaNumeric, fil getStringHTML2 and 3.
* 1.6: 16-09-2010: Fix calculo round3, add getDateString2 y 3, add getDtHrStr2 y 3
* 1.5: 11-08-2010: Log origin of SQL
* AjaxList: limitar a 60 registros en vez de 100 o 100000
* Report: cssClass + tableClass attributes
* 1.4: 26-07-2010: Add setNull int/string/float
* 1.3: 21-05-2010: Report: move private to protected, add tableClass and tableAlign parameters, add translateMonth in Tools
* 1.2: 15-05-2010: add getBoolean y setBoolean in ConnectDB, add style + tabindex in AjaxList
* 1.1: 26-04-2010: Add setDate(int,Timestamp), getDate(int), getDate2 y getDate3 y getFloat3 (int o String)
* 1.0: 04-03-2010: getStringHTML(int) supports null. New methos beforeFirst()
* Reporte: nuevop parametro debug para depurar
* 0.9: 23-01-2010: Bug fix TranslateDate day of week
* 0.8: 23-01-2010: Bug fix TranslateDate
* 0.7: 01-06-2009: New method getRs in ConnectDB
* Bug fix nolimit param on AjaxList
* Replace System.out.println by readDB.debug
* 0.6: 26-05-2009: Bug Fix selectPaginated, new param in selectFirstX.
* AjaxList: posibilidad de usar el tag sin cuerpo.
* Bug fix setStrDateHr(int pos, String val, long minutes)
* 0.5: 12-05-2009: Nuevo parametro dbType para el tipo de base de datos.
* Nuevas constantes para los nombres de base de datos:
* MYSQL, POSTGRES, ORACLE, FIREBIRD, SQLSERVER.
* dbType es nicializado por defecto a MYSQL,
* si cambias el valor, usa una constante.
* Llamada a procedimientos almancenados y filtros de resultset
* para Oracle/PostGresql/Firebird/SQL Server usando
* nuevos metodos selectFirstX y selectPaginatedX.
* 0.4: 07-05-2009: Agrege getCon a ConnectDB para uso con JFreeChart. Agrege la documentacion Java de todas las clases del paquete com.solucionjava.*.
* 0.3: 28-04-2009: Bug fix de execute(int) y execute(String, int)
* Prefix datasourceName con "java:comp/env/jdbc/" en el codigo
* TestDB ahora es asbstract class
* MailSender es ahora abstract class
* 0.2: 26-04-2009: Implementacion de initConnectionVariables
* 0.1: 25-04-2009: Version inicial
* </pre>
*
* @author Cedric Simon, SolucionJava.com
*
* @version 6.2