//Clase encargada de formatear un dato numerico. Recibe como paremetros los separadores de miles y de decimales
//obtenidos de la sesion de usuario
function ConversorNumero(teSeparadorMilesLocal, teSeparadorDecimalesLocal)
{
	this.teSeparadorDecimalesNumerico = '.';
	this.teSeparadorMilesLocal = teSeparadorMilesLocal;
	this.teSeparadorDecimalesLocal = teSeparadorDecimalesLocal;

	this.formatearNumero = function (idCampo, idEtiqueta, caDigitos, caDecimales, boSepararMiles, boRellenarCerosIzquierda, vaMaximo, vaMinimo, boRequerido)
	{
		var vaCampo = document.getElementById(idCampo).value;

		if (this.esValidoBoRequerido(idCampo, idEtiqueta, boRequerido))
		{
			//Si no es requerido pero esta informado o es requerido
			if ((!boRequerido && (!this.esCampoVacio(vaCampo))) || boRequerido)
			{
				//Quitamos el separador de miles
				var teRemplazar = '/' + this.getTeSeparadorMilesLocalEscapado() + '/g';
				var vaCampo = vaCampo.replace(eval(teRemplazar), '');
				//Ponemos el separador de decimales de los numericos
				teRemplazar = '/' + this.getTeSeparadorDecimalesLocalEscapado() + '/g';
				vaCampo = vaCampo.replace(eval(teRemplazar), this.teSeparadorDecimalesNumerico);
		
				if (isNaN(vaCampo) || (vaCampo.indexOf(' ')!=-1))
				{
					gestorMensajesUsuario.ponerError (idCampo, idEtiqueta, 10003);
					return false;
				}
				else
				{
					var nuValorCampo = new Number(vaCampo);
					//Comprobamos el rango
					if ((vaMaximo != 0))
					{
						if (nuValorCampo < vaMinimo)
						{
							gestorMensajesUsuario.ponerError (idCampo, idEtiqueta, 10003);
							return false;
						}
						else if (nuValorCampo > vaMaximo)
						{
							gestorMensajesUsuario.ponerError (idCampo, idEtiqueta, 10003);
							return false;
						}
					}
					
					// && (vaMinimo != 0)
		
					nuPosicionSeparadorDecimales = vaCampo.indexOf(this.teSeparadorDecimalesNumerico)
					var parteEntera = '';
					var parteDecimal = '';
					if (nuPosicionSeparadorDecimales > -1)
					{
						var partes =  vaCampo.split(this.teSeparadorDecimalesNumerico);
						parteEntera = partes[0];
						parteDecimal = partes[1];
					}
					else
					{
						parteEntera = vaCampo;
					}
					var partePositiva = parteEntera;
					if (parteEntera.indexOf('-') == 0)
						partePositiva = parteEntera.substring(1, parteEntera.length);
					if (partePositiva.length > caDigitos)
					{
						gestorMensajesUsuario.ponerError(idCampo, idEtiqueta, 10003);
						return false;
					}
					else if (parteDecimal.length > caDecimales)
					{
						gestorMensajesUsuario.ponerError(idCampo, idEtiqueta, 10003);
						return false;
					}
					else
					{
						//Se quitan los ceros por delante
						partePositiva = new Number(partePositiva).toString();
						var partePositivaFormateada = partePositiva;
						//Se aņaden los ceros si se pide expresamente
						if (boRellenarCerosIzquierda)
						{
							var cerosARellenar = caDigitos - partePositiva.length;
							for (i = 0; i < cerosARellenar; i++)
								partePositiva = '0' + partePositiva;
							partePositivaFormateada = partePositiva;
						}
						if (boSepararMiles)
						{
							var nuSeparadores = Math.floor(partePositiva.length / 3);
							if (partePositiva.length % 3 == 0)
								nuSeparadores--;
							//Volcamos sobre variable donde tomamos los datos el numero sin ceros por la izquierda
							partePositiva = partePositivaFormateada;
							partePositivaFormateada = '';
							if (nuSeparadores > 0)
							{
								for (i = 0; i < nuSeparadores + 1; i++)
								{
									if (partePositiva.length > 3)
									{
										partePositivaFormateada = this.teSeparadorMilesLocal + partePositiva.substring(partePositiva.length - 3, partePositiva.length) + partePositivaFormateada;
										partePositiva = partePositiva.substring(0, partePositiva.length - 3);
									}
									else
									{
										partePositivaFormateada = partePositiva + partePositivaFormateada;
									}
								}
							}
							else
								partePositivaFormateada = partePositiva;
						}
		
						var caCerosARellenarPorDerecha = caDecimales - parteDecimal.length;
						for (i = 0; i < caCerosARellenarPorDerecha; i++)
							parteDecimal = parteDecimal + '0';					
						var campoFormateado = partePositivaFormateada;
						if (parteDecimal.length > 0)
							campoFormateado = campoFormateado + this.teSeparadorDecimalesLocal + parteDecimal;
						if (parteEntera.indexOf('-') == 0)
							campoFormateado = '-' + campoFormateado;
												
						var elem = document.getElementById(idCampo);
						
						if ( (elem != null) && (elem.value != campoFormateado) )
							elem.value = campoFormateado;
						
						//gestorMensajesUsuario.quitarError(idCampo, idEtiqueta);
						return true;
					}
				}			
			} 
			else
			{
				//gestorMensajesUsuario.quitarError (idCampo, idEtiqueta);
				return true;
			}
		}
	}

	this.formatearNumeroSimple = function (idCampo, caDigitos, caDecimales, boSepararMiles, boRellenarCerosIzquierda, boRequerido)
	{
		var idEtiqueta = this.obtenerIdEtiqueta(idCampo);
		if (this.formatearNumero (idCampo, idEtiqueta, caDigitos, caDecimales, boSepararMiles, boRellenarCerosIzquierda, 0, 0, boRequerido))
		{
			gestorMensajesUsuario.quitarError(idCampo, idEtiqueta);
			return true;
		}
		else
		{
			//gestorMensajesUsuario.ponerError(idCampo, conversorElemento.getDePrefijoIdEtiqueta() + idCampo);
			return false;
		}
	}
	
	this.getTeSeparadorMilesLocalEscapado = function()
	{
		if (this.teSeparadorMilesLocal == '.')
			return "\\."; 
		else
			return this.teSeparadorMilesLocal;
	}
	
	this.getTeSeparadorDecimalesLocalEscapado = function()
	{
		if (this.teSeparadorDecimalesLocal == '.')
			return "\\."; 
		else
		 	return this.teSeparadorDecimalesLocal;
	}
}
//Se declara la herencia
ConversorNumero.prototype = new ConversorElemento();
