

// esta variable indica si está bien dejar las casillas en blanco como regla general
var defaultEmptyOK = false

// caracteres válidos en general
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnñopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÑ"
var whitespace = " \t\n\r";

// caracteres admitidos en números de teléfono
var phoneChars = "()-+ ";

// mensajes de error
var mMessage="Error: no puede dejar este campo vacio";
var pPrompt = "Error: ";
var pAlphanumeric = "Por favor, escriba sólo letras y/o numeros.";
var pAlphabetic   = "Por favor, escriba sólo letras.";
var pInteger = "Por favor, escriba sólo números enteros.";
var pNumber = "Por favor, escriba sólo números.";
var pPhoneNumber = "Por favor, escriba un número de teléfono válido.";
var pEmail = "Por favor, escriba una dirección de correo electrónico válida.";
var pName = "Por favor, escriba texto que contenga solo letras, numeros o espacios.";
var pDate = "Por favor, escriba una fecha válida en formato dd/mm/aaaa.";


function makeArray(n) {
//*** BUG: If I put this line in, I get two error messages:
//(1) Window.length can't be set by assignment
//(2) daysInMonth has no property indexed by 4
//If I leave it out, the code works fine.
//   this.length = n;
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}



// función que comprueba si un campo está vacio
// parámetro de entrada : s (string)
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

// función que comprueba si un campo está vacio o solo tiene caracteres de espacio
// parámetro de entrada : s (string)
// parámetro de salida	: true/false
function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        // si el caracter en que estoy no aparece en whitespace,
        // entonces retornar falso
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

// función que quita todos los caracteres que que estan en 'bag' del string 's'
// parámetro de entrada : s (string)
// parámetro de salida	: true/false
function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    // Buscar por el string, si el caracter no esta en "bag", 
    // agregarlo a returnString
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}

// función que quita todos los caracteres que no estan en 'bag' de 's'
// parámetro de entrada : s (string)
// parámetro de salida	: true/false
function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}

// función que quita todos los espacios en blanco de un string
// parámetro de entrada : s (string)
// parámetro de salida	: s (string
function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

// La rutina siguiente es para cubrir un bug en Netscape
// 2.0.2 - seria mejor usar indexOf, pero si se hace
// asi stripInitialWhitespace() no funcionaria

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

// función que quita todos los espacios que antecedan al string
// parámetro de entrada : s (string)
// parámetro de salida	: s (string
function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}

// función que comprueba si 'c' es una letra del alfabeto espanol
// parámetro de entrada : c (string)
function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

// función que comprueba si 'c' es una letra del alfabeto espanol
// parámetro de entrada : c (string)
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

// función que comprueba si 'c' es letra o digito
// parámetro de entrada : c (string)
function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

// función que comprueba si es un numero entero (con o sin signo)
// parámetro de entrada : s (string)
function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if (!isDigit(c)) return false;
        } else { 
            if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}


// s es un numero (entero o flotante, con o sin signo)
// parámetro de salida	: true/false
function isNumber (s)
{  
   var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c)) return false;
        } else { 
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}


// función que comprueba si sólo tiene solo letras
// parámetro de entrada	: s (string)
// parámetro de salida	: true/false
function isAlphabetic (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isLetter(c))
        return false;
    }
    return true;
}


// función que comprueba si tiene solo letras y numeros
// parámetro de entrada	: s (string)
// parámetro de salida	: true/false
function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    return true;
}


// función que comprueba si tiene solo letras, numeros o espacios en blanco
// parámetro de entrada	: s (string)
// parámetro de salida	: true/false
function isName (s)
{
    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, whitespace ) ) );
}


// función que comprueba si es numero de telefono valido
// parámetro de entrada	: s (string)
// parámetro de salida	: true/false
function isPhoneNumber (s)
{   var modString;
    if (isEmpty(s)) 
       if (isPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isPhoneNumber.arguments[1] == true);
    modString = stripCharsInBag( s, phoneChars );
    return (isInteger(modString))
}

// función que comprueba si es una direccion de correo valida
// parámetro de entrada	: s (string)
// parámetro de salida	: true/false
function isEmail (s)
{
    if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}


// función que pone el string s en la barra de estado
// parámetro de entrada	: s (string)
function statBar (s)
{   window.status = s
}

// función mensaje que el campo está vacio
// parámetro de entrada	: s (string)
// parámetro de salida	: false
function warnEmpty (theField)
{   theField.focus()
    alert(mMessage)
    statBar(mMessage)
    return false
}

// función mensaje que el campo no es válido
// parámetro de entrada	: s (string)
// parámetro de salida	: false
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    statBar(pPrompt + s)
    return false
}

// la función genérica checkField
// parámetro de entrada	:	theField (string campo que se va a validar)
//							theFunction (string nombre de la función a utilizar)
//							emptyOk (opcional, true/false, indica si puede ir vacio un campo)
//							s (string mensaje de error)
// parámetro de salida	: true/false
function checkField (theField, theFunction, emptyOK, s)
{   
    var msg;
    
    
    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkField.arguments.length == 4) {
        msg = s;
    } else {
        if( theFunction == isAlphabetic ) msg = pAlphabetic;
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
        if( theFunction == isName ) msg = pName;
//        if( theFunction == isValidDate) msg = pDate;
    }

    if ((emptyOK == true) && (isEmpty(theField.value))) return true;

    if ((emptyOK == false) && (isEmpty(theField.value))) 
    {
		
		//return warnEmpty(theField);
	}
   
 
    
    if (theFunction(theField.value) == true)  
    {
      return true;
    }
    else
    {
	//return warnInvalid(theField,msg);
    }
}

// función que convierte a euros un importe
// parámetro de entrada	: s (string)
// parámetro de salida 	: numero (number) si no se puede hacer la operación sale 0
function convertEuro(s)
{
 numero = s.value;
 if (isNumber(numero) == true)
 {
  numero = numero /166.386;
  numero = numero * 100;
  numero = Math.round(numero);
  numero= numero / 100;
  return numero;
 }
 return 0;
}

// función que valida una fecha con los siguientes formatos
//	dd/mm/yyyy d/m/yyyy 	dd-mm-yyyy d-m-yyyy
// parámetro de entrada	: s (string)
// parámetro de salida 	: true/false y un aviso
function isValidDate(s) 
{

var datePat = /^(\d{2})(\/|-)(\d{2})\2(\d{4})$/;

var matchArray = s.match(datePat); 
if (matchArray == null) 
{
 if ((s.length == 0))
 {
  //alert("La fecha es un campo obligatorio.")
  return false;
 }
 alert("La fecha no está en formato dd/mm/aaaa.")
 return false;
}

day = matchArray[1];
month = matchArray[3];
year = matchArray[4];


if (day < 01 || day > 31) 
{
  alert("El día no está entre 1 y 31.");
  return false;
}

if (month < 01 || month > 12) 
{
 alert("El mes no está entre 1 y 12.");
 return false;
}

if ((month==04 || month==06 || month==09 || month==11) && day==31) 
{
 alert(month + " no tiene " + day + "días.");
 return false;
}

if (month == 2) 
{ 
 var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
 if (day>29 || (day==29 && !isleap)) 
 {
  alert("Febrero de " + year + " no tiene " + day + " días.");
  return false;
 }
}
return true;  // fecha es valida
}


// función que valida según vas tecleando un importe poniendole los puntos
// parámetro de entrada	: obj (string)
//				: sign ("positive"/cualquier otra cosa)
// parámetro de salida 	: no procesa el evento si se teclea incorrectamente

function quantity_control_keystroke(obj, sign, imaxlength)
{

   //comprueba que el length no supere el maximo para esa caja de texto	  	
   
   var snumero; 
   snumero = obj.value + 1; 
 
  if (snumero.length > imaxlength)
   {  
     event.returnValue = false;
     return false;  
   }
 
	
  //no dejar que ponga cero al principio de teclear el campo
  
  if (isEmpty(obj.value) && (event.keyCode == 48)) {
     event.returnValue = false;
  }
  else
  if (sign == "positive")
  {
    if ((event.keyCode < 48) || (event.keyCode > 57))
    {
      event.returnValue = false;
    }
    else 
    {
      var s_pre = obj.value;
      var s_inter = "";
      var s_post = "";
      var single_character = "";
      var poner_punto = 1;

      for (var i = 0; i < s_pre.length; i++)
      {
        single_character = s_pre.substring(i,i+1);

        if (single_character != ".")
        {
          s_inter = s_inter + single_character;
        }
      }

      s_inter = s_inter + String.fromCharCode(event.keyCode);

      for (var j = s_inter.length; j > 0; j--, poner_punto++)
      {
        s_post = s_inter.substring(j-1,j) + s_post;

        if ((poner_punto == 3) && (j != 1))
        {
          poner_punto = 0;
          s_post = "." + s_post;
        }
      }

      obj.value = s_post;

      event.returnValue = false;
    }
  }
  else
  {
    if (
         (
           isEmpty(obj.value)
             &&
           ((event.keyCode < 48) || (event.keyCode > 57))
             &&
           (event.keyCode != 43)
             &&
           (event.keyCode != 45)
         )
           ||
         (
           (obj.value.length > 0)
             &&
           ((event.keyCode < 48) || (event.keyCode > 57))
         )
       )
    {
      event.returnValue = false;
    }
    else if (obj.value != "+" && obj.value != "-")
    {
      var s_pre = obj.value;
      var s_inter = "";
      var s_post = "";
      var single_character = "";
      var poner_punto = 1;
      var sign_character = "";

      if (
           (s_pre.substring(0, 1) == "+")
             ||
           (s_pre.substring(0, 1) == "-")
         )
      {
        sign_character = s_pre.substring(0, 1);
        s_pre = s_pre.substring(1, s_pre.length);
      }

      for (var i = 0; i < s_pre.length; i++)
      {
        single_character = s_pre.substring(i,i+1);

        if (single_character != ".")
        {
          s_inter = s_inter + single_character;
        }
      }

      s_inter = s_inter + String.fromCharCode(event.keyCode);

      for (var j = s_inter.length; j > 0; j--, poner_punto++)
      {
        s_post = s_inter.substring(j-1,j) + s_post;

        if ((poner_punto == 3) && (j != 1))
        {
          poner_punto = 0;
          s_post = "." + s_post;
        }
      }

      obj.value = sign_character + s_post;

      event.returnValue = false;
    }
  }
}



// función que valida según vas tecleando un importe decimal
// parámetro de entrada	: obj (string)
//						: sign ("positive"/cualquier otra cosa)
//						: n_after (número posiciones decimales)
// parámetro de salida 	: no procesa el evento si se teclea incorrectamente
function real_quantity_control_keystroke(obj, sign, n_after, imaxlength)
{
 
 //comprueba que el length no supere el maximo para esa caja de texto	  	
   
   var snumero; 
   snumero = obj.value + 1; 
 
  if (snumero.length > imaxlength)
   {  
     event.returnValue = false;
     return false;  
   }
 
 
 
  if (sign == "positive")
  {
    if (
         (
           isEmpty(obj.value)
             &&
           ((event.keyCode < 48) || (event.keyCode > 57))
         )
           ||
         (
           (obj.value.length > 0)
             &&
           ((event.keyCode < 48) || (event.keyCode > 57))
             &&
           (event.keyCode != 44)
         )
       )
    {
      event.returnValue = false;
    }
    else
    {
      var s_pre_int = obj.value;
      var s_pre_frac = null;
      var s_inter = "";
      var s_post = "";
      var single_character = "";
      var poner_punto = 1;
      var comma = false;

      for (var i = 0; i < s_pre_int.length; i++)
      {
        single_character = s_pre_int.substring(i, i + 1);

        if (single_character == ",")
        {
          s_pre_frac = s_pre_int.substring(i + 1, s_pre_int.length);

          if (
               (s_pre_frac == null) || (s_pre_frac.length == 0)
             )
          {
            s_pre_frac = "";
          }

          s_pre_int = s_pre_int.substring(0, i);

          comma = true;

          break;
        }
        else if (single_character != ".")
        {
          s_inter = s_inter + single_character;
        }
      }

      if (event.keyCode == 44)
      {
        if (comma)
        {
          event.returnValue = false;
          return;
        }
        else
        {

          comma = true;
        }
      }
      else if (comma)
      {
        if (s_pre_frac.length >= n_after)
        {
          event.returnValue = false;
          return;
        }

        s_pre_frac = s_pre_frac + String.fromCharCode(event.keyCode);
      }
      else
      {
        s_inter = s_inter + String.fromCharCode(event.keyCode);
      }

      for (var j = s_inter.length; j > 0; j--, poner_punto++)
      {
        s_post = s_inter.substring(j-1,j) + s_post;

        if ((poner_punto == 3) && (j != 1))
        {
          poner_punto = 0;
          s_post = "." + s_post;
        }
      }

      if (comma)
      {
        s_post = s_post + ",";
      }

      if (s_pre_frac != null)
      {
        s_post = s_post + s_pre_frac;
      }

      obj.value = s_post;

      event.returnValue = false;
    }
  }
  else
  {
    if (
         (
           isEmpty(obj.value)
             &&
           ((event.keyCode < 48) || (event.keyCode > 57))
             &&
           (event.keyCode != 43)
             &&
           (event.keyCode != 45)
         )
           ||
         (
           (obj.value.length > 0)
             &&
           ((event.keyCode < 48) || (event.keyCode > 57))
             &&
           (event.keyCode != 44)
         )
       )
    {
      event.returnValue = false;
    }
    else if (obj.value != "+" && obj.value != "-")
    {
      var s_pre_int = obj.value;
      var s_pre_frac = null;
      var s_inter = "";
      var s_post = "";
      var single_character = "";
      var poner_punto = 1;
      var sign_character = "";
      var comma = false;

      if (
           (s_pre_int.substring(0, 1) == "+")
             ||
           (s_pre_int.substring(0, 1) == "-")
         )
      {
        sign_character = s_pre_int.substring(0, 1);
        s_pre_int = s_pre_int.substring(1, s_pre_int.length);
      }

      for (var i = 0; i < s_pre_int.length; i++)
      {
        single_character = s_pre_int.substring(i, i + 1);

        if (single_character == ",")
        {
          s_pre_frac = s_pre_int.substring(i + 1, s_pre_int.length);

          if (
               (s_pre_frac == null) || (s_pre_frac.length == 0)
             )
          {
            s_pre_frac = "";
          }

          s_pre_int = s_pre_int.substring(0, i);

          comma = true;

          break;
        }
        else if (single_character != ".")
        {
          s_inter = s_inter + single_character;
        }
      }

      if (event.keyCode == 44)
      {
        if (comma)
        {
          event.returnValue = false;
          return;
        }
        else
        {
          comma = true;
        }
      }
      else if (comma)
      {
        if (s_pre_frac.length >= n_after)
        {
          event.returnValue = false;
          return;
        }

        s_pre_frac = s_pre_frac + String.fromCharCode(event.keyCode);
      }
      else
      {
        s_inter = s_inter + String.fromCharCode(event.keyCode);
      }

      for (var j = s_inter.length; j > 0; j--, poner_punto++)
      {
        s_post = s_inter.substring(j-1,j) + s_post;

        if ((poner_punto == 3) && (j != 1))
        {
          poner_punto = 0;
          s_post = "." + s_post;
        }
      }

      if (comma)
      {
        s_post = s_post + ",";
      }

      if (s_pre_frac != null)
      {
        s_post = s_post + s_pre_frac;
      }

      obj.value = sign_character + s_post;

      event.returnValue = false;
    }
  }
}

// función que valida una caja para comprobar si es una cantidad
// parámetro de entrada	: obj (normalmente this)
//                      : sign (true/false)
//                      : name (nombre que va a aparecer en los alert para identificar la casilla)
function quantity_control_onblur(obj, sign, name)
{
  var s_pre = obj.value;
  var s_inter = "";
  var s_post = "";
  var single_character;
  var sign_character = "";
  var poner_punto = 1;

  if (
       (sign == 'positive') && ((s_pre.substring(0, 1) == '+') || (s_pre.substring(0, 1) == '-'))
     )
  {
    alert("La casilla \"" + name + "\" no puede contener el carácter1 \'" + s_pre.substring(0, 1) + "\'");
    obj.focus();
    return;
  }
  else if (
            (sign != 'positive') && ((s_pre.substring(0, 1) == '+') || (s_pre.substring(0, 1) == '-'))
          )
  {
    sign_character = s_pre.substring(0, 1);
    s_pre = s_pre.substring(1, s_pre.length);
  }

  for (var i = 0; i < s_pre.length; i++)
  {
    if ((single_character = s_pre.substring(i, i + 1)) != ".")
    {
      s_inter = s_inter + single_character;
    }
  }

  for (var j = 0; j < s_inter.length; j++)
  {
    if ((s_inter.charCodeAt(j) < 48) || (s_inter.charCodeAt(j) > 57))
    {
      alert("La casilla \"" + name + "\" no puede contener el carácter2 \'" + s_inter.substring(j, j + 1) + "\'");
      obj.focus();
      return;
    }
  }

  for (var k = s_inter.length; k > 0; k--, poner_punto++)
  {
    s_post = s_inter.substring(k - 1, k) + s_post;

    if ((poner_punto == 3) && (k != 1))
    {
      poner_punto = 0;
      s_post = "." + s_post;
    }
  }

  obj.value = sign_character + s_post;
}

// función que valida una caja para comprobar si es una cantidad real
// parámetro de entrada	: obj (normalmente this)
//                      : sign (true/false)
//                      : name (nombre que va a aparecer en los alert para identificar la casilla)
//                      : n_after (numero de decimales de la casilla)
function real_quantity_control_onblur(obj, sign, name, n_after)
{
  var s_pre = obj.value;
  var s_inter = "";
  var s_pre_int = "";
  var s_pre_frac = "";
  var s_post = "";
  var single_character;
  var sign_character = "";
  var poner_punto = 1;
  var comma = false;

  if (
       (sign == 'positive') && ((s_pre.substring(0, 1) == '+') || (s_pre.substring(0, 1) == '-'))
     )
  {
    alert("La casilla \"" + name + "\" no puede contener el carácter3 \'" + s_pre.substring(0, 1) + "\'");
    obj.focus();
    return;
  }
  else if (
            (sign != 'positive') && ((s_pre.substring(0, 1) == '+') || (s_pre.substring(0, 1) == '-'))
          )
  {
    sign_character = s_pre.substring(0, 1);
    s_pre = s_pre.substring(1, s_pre.length);
  }

  for (var i = 0; i < s_pre.length; i++)
  {
    if ((s_pre.substring(i, i + 1) == ",") && (comma))
    {
      alert("La casilla \"" + name + "\" no puede contener más de una vez el carácter4 \',\'");
      obj.focus();
      return;
    }
    else if (s_pre.substring(i, i + 1) == ",")
    {
      s_pre_int = s_pre.substring(0, i);

      if (i == s_pre.length - 1)
      {
        alert("La casilla \"" + name + "\" requiere algún decimal después de la coma");
        obj.focus();
        return;
      }

      s_pre_frac = s_pre.substring(i + 1, s_pre.length);
      comma = true;
    }
  }

  if (comma == false)
  {
    s_pre_int = s_pre;
  }

  if ((s_pre_frac != null) && (s_pre_frac != ""))
  {
    for (var j = 0; j < s_pre_frac.length; j++)
    {
      if ((s_pre_frac.charCodeAt(j) < 48) || (s_pre_frac.charCodeAt(j) > 57))
      {
        alert("La parte fraccionaria de la casilla \"" + name + "\" no puede contener el caracter \'" + s_pre_frac.substring(j, j + 1) + "\'");
      }
      else if (s_pre_frac.length > n_after)
      {
        alert("La casilla \"" + name + "\" no puede contener tantos decimales");
      }
    }
  }

  for (var k = 0; k < s_pre_int.length; k++)
  {
    if (((s_pre_int.charCodeAt(k) < 48) || (s_pre_int.charCodeAt(k) > 57)) && (s_pre_int.substring(k, k + 1) != "."))
    {
      alert("La casilla \"" + name + "\" no puede contener el carácter5 \'" + s_pre_int.substring(k, k + 1) + "\'");
      obj.focus();
      return;
    }
    else if ((single_character = s_pre_int.substring(k, k + 1)) != ".")
    {
      s_inter = s_inter + single_character;
    }
  }

  for (var l = s_inter.length; l > 0; l--, poner_punto++)
  {
    s_post = s_inter.substring(l - 1, l) + s_post;

    if ((poner_punto == 3) && (l != 1))
    {
      poner_punto = 0;
      s_post = "." + s_post;
    }
  }

  if (comma)
  {
    s_post = s_post + ",";
  }

  if (s_pre_frac != null)
  {
    s_post = s_post + s_pre_frac;
  }

  obj.value = sign_character + s_post;
}

var supportsKeys = false


function favChange(rnum) {
	f = document.newMsg;
	
	if (f.favs.selectedIndex >=0) {
		f.msgTo.value = f.favs.options[f.favs.selectedIndex].value
	}

	if (f.favs.selectedIndex > 0 && f.favs.selectedIndex <= rnum + 1) {
		f.observaciones.focus();
	} else {
		f.msgTo.focus();
	}
}
function calcCharLeft(f) {
		lenUSig = f.lenSSig.value
		maxLength = 15 - f.lenSysSig.value - lenUSig
        if (f.observaciones.value.length > maxLength) {
	        f.observaciones.value = f.observaciones.value.substring(0,maxLength)
		    charleft = 0
        } else {
			charleft = maxLength - f.observaciones.value.length
		}

        f.msgCL.value = charleft
}

function textKey(f) {
	supportsKeys = true
	calcCharLeft(f)
}


function ConvertBR(input) {
	// Converts carriage returns 
	// to <BR> for display in HTML

	var output = "";
	for (var i = 0; i < input.length; i++) {
	if ((input.charCodeAt(i) == 13) && (input.charCodeAt(i + 1) == 10)) {
	i++;
	output += "<BR>";
	} else {
	output += input.charAt(i);
	   }
	}
	return output;
	}