/**
 * Clase Javascript encargada de gestionar la visualizaci?n de un mensaje de validaci?n. Recibe como 
 * par?metro la imagen que se muestra como indicaci?n de que se ha producido un error
 */
function GestorMensajesUsuario(deImagenError,boEsASL21)
{
	//Ruta donde se encuentra la imagen de error
	this.deImagenError = deImagenError;
	this.boEsASL21 = boEsASL21;

	/**
	 * Metodo que quita la indicacion de error para la etiqueta y campo indicados llamando a los
	 * metodos 'quitarErrorEtiqueta' y 'quitarErrorCampo' correspondientemente 
	 */
	this.quitarError = function (idCampo, idEtiqueta)
	{
		this.quitarErrorEtiqueta(idEtiqueta);
		this.quitarErrorCampo(idCampo);
	}
	
	/**
	 * Metodo que pone la indicacion de error para la etiqueta y campo indicados, con el mensaje que se informa mediante
	 * en numero de mensaje (nuMensaje) llamando a los m?todos 'ponerErrorEtiquetaGenerico' y 'ponerErrorCampo' correspondientemente  
	 */
	this.ponerErrorGenerico = function (idCampo, idEtiqueta, nuMensaje, boPintarImagen)
	{
		this.ponerErrorEtiquetaGenerico(idEtiqueta, nuMensaje, boPintarImagen);
		this.ponerErrorCampo(idCampo);
	}
	
	/**
	 * Pone un error llamando al m?todo 'ponerErrorGenerico' donde el par?metro boMostrarImagen toma siempre valor true
	 */
	this.ponerError = function (idCampo, idEtiqueta, nuMensaje)
	{
		this.ponerErrorGenerico(idCampo, idEtiqueta, nuMensaje, true);
	}

	/**
	 * Pone un error llamando al m?todo 'ponerErrorGenerico' donde el par?metro nuMensaje se indica a null y 
	 * boMostrarImagen toma siempre valor false 
	 */	
	this.ponerErrorSinImagen = function (idCampo, idEtiqueta)
	{
		this.ponerErrorGenerico(idCampo, idEtiqueta, null, false);
	}
	
	/**
	 * Pone la indicaci?n de error en una etiqueta llamando al m?todo 'ponerErrorEtiquetaGenerico' donde el par?metro
	 * boMostrarImagen siempre lleva valor true
	 */
	this.ponerErrorEtiqueta = function (idEtiqueta, nuMensaje)
	{
		this.ponerErrorEtiquetaGenerico(idEtiqueta, nuMensaje, true);
	}
	
	/**
	 * M?tod que pone un error en una etiqueta, donde se puede parametrizar si se muestra la imagen que indica el error
	 * y el n?mero de mensaje a mostrar. Si el valor del par?metro boMostrarImagen es false, no es utilizado el parametro
	 * nuMensaje.
	 * La forma de poner el error es obteniendo el elemento del documento HTML y a?adiendo el estilo 'letraRoja' al estilo existente
	 * solo en caso de que no lo tuviera. 
	 */
	this.ponerErrorEtiquetaGenerico = function (idEtiqueta, nuMensaje, boMostrarImagen)
	{
		var element = document.getElementById(idEtiqueta);

		// Capturamos la excepcion por si el elemento al que se intenta acceder no existe,
		// por ejemplo cuando hay un error de validacion y se intenta poner en rojo tanto
		// la etiqueta como el campo pero la etiqueta no existe (boLiteral="false"). De
		// esta forma evitamos el error JavaScript.
		try
		{
			if (this.boEsASL21) 
			{
				if (element.className.search(/\s?letraError/) != -1)
					this.quitarErrorEtiqueta(idEtiqueta);
				element.className = element.className + " letraError";
			} 
			else 
			{
				if (element.className.search(/\s?letraRoja/) != -1)
					this.quitarErrorEtiqueta(idEtiqueta);
				element.className = element.className + " letraRoja";
							
				if (boMostrarImagen)
					element.innerHTML = this.crearHTMLImagenError(nuMensaje) + element.innerHTML;
			}
			
		}
		catch(excepcion)
		{}
	}
	
	/**
	 * M?todo que pone la indicaci?n de error en un campo, obteniendo el elemento del documento HTML y a?adiendo el estilo 'bordeRojo' 
	 * al estilo existente solo en caso de que no lo tuviera. 
	 */
	this.ponerErrorCampo = function (idCampo)
	{
		var element = document.getElementById(idCampo);
		
		// Capturamos la excepcion por si el elemento al que se intenta acceder no existe,
		// por ejemplo cuando hay un error de validacion y se intenta poner en rojo tanto
		// la etiqueta como el campo pero la etiqueta no existe (boLiteral="false"). De
		// esta forma evitamos el error JavaScript.
		try
		{
			if (this.boEsASL21) 
			{
				if (element.className.search(/\s?bordeError/) == -1)
					element.className = element.className + " bordeError letraError";
			}
			else {
				if (element.className.search(/\s?bordeRojo/) == -1)
					element.className = element.className + " bordeRojo";
			}
		}
		catch(excepcion)
		{
		}
	}
	
	/**
	 * Metodo que quita la indicaci?n de error de una etiqueta, obteniendo el elemento del documento HTML y borrando el estilo 'letraRoja' 
	 * del estilo existente y quitando el tag HTML 'img' existente en el HTML de la etiqueta 
	 */ 
	this.quitarErrorEtiqueta = function (idEtiqueta)
	{
		var element = document.getElementById(idEtiqueta);
		
		// Capturamos la excepcion por si el elemento al que se intenta acceder no existe,
		// por ejemplo cuando hay un error de validacion y se intenta poner en rojo tanto
		// la etiqueta como el campo pero la etiqueta no existe (boLiteral="false"). De
		// esta forma evitamos el error JavaScript.
		try
		{
			if (this.boEsASL21) 
			{
				element.className = element.className.replace(/\s?letraError/, '');
			}
			else
			{
				element.className = element.className.replace(/\s?letraRoja/, '');
				element.innerHTML = element.innerHTML.replace(/<img(.)*(.)*>/i, '');
			}
		}
		catch(excepcion)
		{
		}
	}
	
	/**
	 * Metodo que quita la indicaci?n de error de un campo, obteniendo el elemento del documento HTML y borrando el estilo 'bordeRojo' 
	 * del estilo existente y quitando el tag HTML 'img' existente en el HTML de la etiqueta 
	 */ 
	this.quitarErrorCampo = function (idCampo)
	{
		var element = document.getElementById(idCampo);

		// Capturamos la excepcion por si el elemento al que se intenta acceder no existe,
		// por ejemplo cuando hay un error de validacion y se intenta poner en rojo tanto
		// la etiqueta como el campo pero la etiqueta no existe (boLiteral="false"). De
		// esta forma evitamos el error JavaScript. 
		try
		{
			if (this.boEsASL21) 
			{ 
				element.className = element.className.replace(/\s?bordeError/, '');
				element.className = element.className.replace(/\s?letraError/, '');
			}
			else
				element.className = element.className.replace(/\s?bordeRojo/, '');
		}
		catch(excepcion)
		{
		}
	}
	
	/**
	 * Metodo que genera el HTML correspondiente a la imagen de error, donde el atributo "alt" de la imagen
	 * tiene el mensaje de error asociado al par?metro nuMensaje recibido.
	 */
	this.crearHTMLImagenError = function (nuMensaje)
	{
		var deMensaje = gestorMensajes.obtenerDeMensaje(nuMensaje);
		return '<img src="' + deImagenError + '" alt="' + deMensaje + '" title="' + deMensaje + '" class="error" />'
	}
}

