
/*******************************************************************************
  Función que elimina los separadores de millar de un número
  Retorno: La cadena sin el separador de millar
*******************************************************************************/
function EliminaMillares(valor, separador)
{
  valor = "" + valor
  var aux = ""
  for (var i = 0; i < valor.length; i++)
  {
    if (valor.substring(i, i + 1) != separador)
      aux = aux + valor.substring(i, i + 1)       
  }
  return aux;
}


/*******************************************************************************
  Compureba si una cadena es un número, admitiendo como decimal el separador que
  se le pase por parámetro.
  Hace la comprobación para números reales.
  Retorno: Devuelve true o false en función del resultado.
*******************************************************************************/
function isNumber(Input, separador) 
{
  var numbers="0123456789" + separador;
  var CharacterCheck;
  var counter = 0, comas=0; 

  if (Input.substring(0, 1) == "-")
    Input = Input.substring(1, Input.length)
  for (var i=0; i < Input.length; i++)
  {
    if (Input.substring(i, i + 1) == ",")
      comas++;
    CharacterCheck = Input.substring(i, i+1); 
    if (numbers.indexOf(CharacterCheck) != -1)
      counter ++;
    else 
      return false
    if (comas > 1)
      return false;
  }
  return true
};
 

/*******************************************************************************
  Da formato a un número poniendo como separador de decimales la coma, y como
  separador de millares el punto. A parte de esto, los ceros a la izquierda de
  la parte entera, y los de la derecha de la parte decimal, se eliminan.
  Argumentos:
	-numero: Numero en que se empleará la coma como separador de decimales.
	 Los puntos pueden aparecer como separador de millar pero serán
	 previamente eliminados.
	-FormatoSalida: Cadena en que se indica el formato de salida del número,
	 indicando el separador de decimales, si obligatoriamente habrá o no
	 decimales (T o F), separador de millares, número de decimales (Con valor
	 -1 no se redondeará la parte decimal) Ejs: ",F.2", ".T,3"
	-FormatoEntrada: Indica el separador de decimales y de millares del 
	 número de entrada. Ejs.: ",." ".,"
  Retorno:
	-Número formateado.
	-Error en caso de que el número no fuera correcto.
*******************************************************************************/
function FormatNumero(numero, FormatoSalida, FormatoEntrada)
{

  var j;
  var DecimalEntrada = FormatoEntrada.substring(0, 1)
  var DecimalSalida = FormatoSalida.substring(0, 1)
  
  if (FormatoSalida.substring(1, 2) == "T")
    decobligatorio = true
  else
    decobligatorio = false
   
  var MillarEntrada = FormatoEntrada.substring(1, 2)
  var MillarSalida = FormatoSalida.substring(2, 3)
  var decimales = FormatoSalida.substring(3)
  var i = 0;
  var aux = '';
  var longdec = 0;
  var negativo = "";
  numero = EliminaMillares(numero, MillarEntrada)
//window.alert(numero)
  if (numero.substring(0, 1) == "-")
  {
    negativo = "-"
    numero = numero.substring(1, numero.length)
  }

  if (!isNumber(numero, DecimalEntrada))
  {
    window.alert("El número a formatear no es correcto.")
    return ""
  }

  //Separacion de la parte entera de la decimal
  var entera = numero, decimal = '';

  for (i = 0; i < numero.length; i++)
  {
    if (numero.substring(i, i+1) == DecimalEntrada)
    {
      entera = numero.substring(0, i)
      decimal = numero.substring(i + 1, numero.length)
      i = numero.length
    }
  }

  //Eliminar los ceros a la izquierda de la parte entera
  while (entera.length > 1 && entera.substring(0, 1) == "0")
    entera = entera.substring(1, entera.length)
  if (entera == "" || entera == 0)
    entera = "0"

  //Eliminar los ceros a la derecha de la parte decimal
  while (decimal.length > 1 && decimal.substring(decimal.length - 1, decimal.length) == "0")
    decimal = decimal.substring(0, decimal.length - 1)    

  //Redondeo de la parte decimal  
  longdec = decimal.length;
  if (decimales != -1 && decimal.length > decimales)
  {
    if (decimal.substring(decimales, parseInt(decimales) + 1) >= 5)
    { 
      decimal = decimal.substring(0, decimales)
      decimal = "" + (parseInt(decimal, 10) + 1)  
      if (decimal.length > decimales)
      {
        decimal= 0
        entera = "" + (parseInt(entera, 10) + 1)
      }
    }
    decimal = "" + decimal
    decimal = decimal.substring(0, decimales)    
    i = decimal.length
    while (i < longdec && i < decimales)
    {
      decimal = "0" + decimal
      i++;
    }      
  }

  //Eliminar los ceros a la derecha de la parte decimal
  while (decimal.length > 1 && decimal.substring(decimal.length - 1, decimal.length) == "0")
    decimal = decimal.substring(0, decimal.length - 1)    


  //Si la parte decimal es obligatoria, rellenar si es preciso
  i = decimal.length
  if (decimales != -1 && decobligatorio == true)
    while (i < decimales)
    {
      decimal = decimal + "0"
      i++
    }

  //Puntuaciones de millar
  i = 0;
  for (j=(entera.length - 1); j >= 0; j--)
  {
    if (i==3)
    {
      i=0;
      aux = MillarSalida + aux;
    }
    aux = entera.substring(j, j+1) + aux;
    i++;
  }
  if ((decimal != "" && decimal > 0) || (decobligatorio && decimales != -1))
    aux = aux + DecimalSalida + decimal
  return (negativo + aux)
}


