

// esta variable indica si est&aacute; bien dejar las casillas en blanco como regla general
var defaultEmptyOK = false

// caracteres v&aacute;lidos en general
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnñopqrstuvwxyzáéíóúãåàâäëèêïìîõòôö";
var uppercaseLetters = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ";
var lowercaseVocales = "aáãåàâäéëèêíïìîóõòôöúûùüýÿ";
var uppercaseVocales = "AÁÃÅÀÂÄEÉËÈÊIÍÏÌÎOÓÕÒÔÖUÚÛÙÜÝ";
var caracterpiso	 = "º"

var points = ".,@!¡¿?-_"
var whitespace = " \t\n\r";

// caracteres admitidos en n&uacute;meros de tel&eacute;fono
var phoneChars = "()-+ ";

// mensajes de error
var mMessage="Error: no puede dejar este campo vacio";
var pPrompt = "Error: ";
var pAlphanumeric = "Por favor, escriba s&oacute;lo letras y/o numeros.";
var pAlphabetic   = "Por favor, escriba s&oacute;lo letras.";
var pInteger = "Por favor, escriba s&oacute;lo n&uacute;meros enteros.";
var pNumber = "Por favor, escriba s&oacute;lo n&uacute;meros.";
var pPhoneNumber = "Por favor, escriba un n&uacute;mero de tel&eacute;fono v&aacute;lido.";
var pEmail = "Por favor, escriba una direcci&oacute;n de correo electr&oacute;nico v&aacute;lida.";
var pName = "Por favor, escriba texto que contenga solo letras, numeros o espacios.";
var pDate = "Por favor, escriba una fecha v&aacute;lida en formato dd/mm/aaaa.";

// Juanjo
function chequea(objeto, textoerror, condicion)
{
   if (condicion)
	 {
//	  	 eval('document.i' + objeto).src = "imagenes/signoFallido.gif";
		 if (!debug) error += '- ' + textoerror + '\n';
		 return;
	 }
	 
//	 eval('document.i' + objeto).src = "imagenes/shim.gif";
	 return;
}


function compruebanif(nif,letra)
{
	var correcto=true;
	var letras;
	if (!isAlphanumeric(nif))
	{
		correcto=false;
	}
	else
	{
		if (nif.length < 0)
		{
			correcto=false;
		}
		else
		{
				letras=letraNIF(nif);
				if (letras != letra.toUpperCase())
				{
					correcto=false;
				}
		}
	}
	return correcto;
}

// funcion que valida el NIB, que es el CCC portugues
function validar_NIB(num, dc) 
{
	peso  = "73178938624553155005493481762790093003";
	j = 0;
	suma = 0;
	resto = 0;
	chec = "";

	if(num.length != 21) return false;

	for (i=0; i<20; ++i) 
	{
        suma = suma + ( peso.substr(j,2)*num.substr(i,1));
		j += 2;
	}
	resto = suma % 97;
	chec = 98 - resto;
	return (chec == dc);
}

function validar_NIB_BAK(num) 
{
	if(num.length != 21) return false;
	
	// last digit is the check digit; put it aside
	ctl = num.charAt(20);
	num = num.substring(0, 20);     // 20 digits now
	
	val = 0;
	for (i=0; i<20; ++i) 
	{
		// I prefer (1 * x) to parseInt(x, 10)
		// and ... num is all digits already :)
		val = ((val + (1 * num.charAt(i))) * 10) % 97;
	}
	return (98 - val) == ctl;
}


// funcion que valida el Codigo Cuenta Cliente
function validar_ccc(codban,codag,dc,numcta)
{
	var resultado_ccc = true;
	var aux = 0;
	var resto = 0;
	var d1= 0;
	var d2 = 0;

	resultado_ccc = true;
	aux = ((parseInt(codag.value.charAt(3),10) * 6) + (parseInt(codag.value.charAt(2),10) * 3) +  (parseInt(codag.value.charAt(1),10) * 7) + (parseInt(codag.value.charAt(0),10) * 9) + (parseInt(codban.value.charAt(3),10) * 10) + (parseInt(codban.value.charAt(2),10) * 5) + (parseInt(codban.value.charAt(1),10) * 8) + (parseInt(codban.value.charAt(0),10) * 4));	
	resto = (aux % 11);
	d1 = (11 - resto);
	if (d1 == 10)
	{
		d1 = 1;
	}
	else if (d1 == 11)
	{
		d1 = 0;
	}
	if (d1 != parseInt(dc.value.charAt(0),10))
	{
		resultado_ccc = false;
		return (resultado_ccc);
	}
	aux = ((parseInt(numcta.value.charAt(9),10) * 6) + (parseInt(numcta.value.charAt(8),10) * 3) + (parseInt(numcta.value.charAt(7),10) * 7) + (parseInt(numcta.value.charAt(6),10) * 9) + (parseInt(numcta.value.charAt(5),10) * 10) + (parseInt(numcta.value.charAt(4),10) * 5) + (parseInt(numcta.value.charAt(3),10) * 8) + (parseInt(numcta.value.charAt(2),10) * 4) + (parseInt(numcta.value.charAt(1),10) * 2) + (parseInt(numcta.value.charAt(0),10) * 1));
	resto = (aux % 11);
	d2 = (11 - resto);
	if (d2 == 10)
	{
		d2 = 1;
	}
	else if (d2 == 11)
	{
		d2 = 0;
	}
	if (d2 != parseInt(dc.value.charAt(1),10))
	{
		resultado_ccc = false;
	}
		
	return (resultado_ccc);
}

function quitablancos ( cadena )
{
	return stripCharsInBag (cadena, whitespace)
}

function isDocumento(s)
{	

//	s = quitablancos(s)
	if (s.length>0)
	{
		if (s.substring(0,1) == "x" || s.substring(0,1)=='X')
		{
		
			// se trata de una tarjeta de extranjero
			return true;	
		}
		else
		{
			// se trata de un NIF normal y corriente
			return (compruebanif(s.substring(0, s.length-1), s.substring(s.length-1, s.length)))
		}
	}
	else
		return false;
}

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&oacute;n que comprueba si un campo est&aacute; vacio
// par&aacute;metro de entrada : s (string)
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

// funci&oacute;n que comprueba si un campo est&aacute; vacio o solo tiene caracteres de espacio
// par&aacute;metro de entrada : s (string)
// par&aacute;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&oacute;n que quita todos los caracteres que que estan en 'bag' del string 's'
// par&aacute;metro de entrada : s (string)
// par&aacute;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&oacute;n que quita todos los caracteres que no estan en 'bag' de 's'
// par&aacute;metro de entrada : s (string)
// par&aacute;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&oacute;n que quita todos los espacios en blanco de un string
// par&aacute;metro de entrada : s (string)
// par&aacute;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&oacute;n que quita todos los espacios que antecedan al string
// par&aacute;metro de entrada : s (string)
// par&aacute;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&oacute;n que comprueba si 'c' es una letra del alfabeto espanol
// par&aacute;metro de entrada : c (string)
function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

// funci&oacute;n que comprueba si 'c' es una letra del alfabeto espanol
// par&aacute;metro de entrada : c (string)
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

// funci&oacute;n que comprueba si 'c' es letra o digito
// par&aacute;metro de entrada : c (string)
function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

// funci&oacute;n que comprueba si es un numero entero (con o sin signo)
// par&aacute;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&aacute;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&oacute;n que comprueba si s&oacute;lo tiene solo letras
// par&aacute;metro de entrada	: s (string)
// par&aacute;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&oacute;n que comprueba si tiene solo letras y numeros
// par&aacute;metro de entrada	: s (string)
// par&aacute;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&oacute;n que comprueba si tiene solo letras, numeros o espacios en blanco
// par&aacute;metro de entrada	: s (string)
// par&aacute;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&oacute;n que comprueba si es numero de telefono valido
// par&aacute;metro de entrada	: s (string)
// par&aacute;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&oacute;n que comprueba si es numero código postal válido
// par&aacute;metro de entrada	: s (string)
// par&aacute;metro de salida	: true/false

//****************29/05/2006*********************************
//********************************************************
function isPostalCode (s)
{
	var correcto;
	
	correcto = true;
	if ((s=="") || (s.length<5) || (parseInt(s) >= 53000))
		correcto=false;
	return correcto;
}

//************************************************************
//***********************************************************

// funci&oacute;n que comprueba si es una direccion de correo valida
// par&aacute;metro de entrada	: s (string)
// par&aacute;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&oacute;n que pone el string s en la barra de estado
// par&aacute;metro de entrada	: s (string)
function statBar (s)
{   window.status = s
}

// funci&oacute;n mensaje que el campo est&aacute; vacio
// par&aacute;metro de entrada	: s (string)
// par&aacute;metro de salida	: false
function warnEmpty (theField)
{   theField.focus()
    alert(mMessage)
    statBar(mMessage)
    return false
}

// funci&oacute;n mensaje que el campo no es v&aacute;lido
// par&aacute;metro de entrada	: s (string)
// par&aacute;metro de salida	: false
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    statBar(pPrompt + s)
    return false
}

// la funci&oacute;n gen&eacute;rica checkField
// par&aacute;metro de entrada	:	theField (string campo que se va a validar)
//							theFunction (string nombre de la funci&oacute;n a utilizar)
//							emptyOk (opcional, true/false, indica si puede ir vacio un campo)
//							s (string mensaje de error)
// par&aacute;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&oacute;n que convierte a euros un importe
// par&aacute;metro de entrada	: s (string)
// par&aacute;metro de salida 	: numero (number) si no se puede hacer la operaci&oacute;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&oacute;n que valida una fecha con los siguientes formatos
//	dd/mm/yyyy d/m/yyyy 	dd-mm-yyyy d-m-yyyy
// par&aacute;metro de entrada	: s (string)
// par&aacute;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&iacute;a no est&aacute; 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&iacute;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&iacute;as.");
  return false;
 }
}
return true;  // fecha es valida
}

function compruebafecha(d1,m1,a1,fec)
{
	var correcto=true;
        if ((!isNaN(a1.value)) && (parseInt(a1.value) < 100))
                        a1.value=parseInt(a1.value)+1900

        if (isNaN(a1.value))
                correcto=false;
        else if (a1.value < 1900)
                 correcto=false;
          else if ((m1.value > 12) || (m1.value < 1))
                  correcto=false;
           else if ((d1.value > 31) || (d1.value < 1))
                   correcto=false;
            else if (((m1.value == 4) || (m1.value == 6) || (m1.value == 9) || (m1.value == 11)) && (d1.value > 30))
                    correcto=false;
             else if ((m1.value == 2) && (d1.value > 28))
             {
                    if ((d1.value != 29) || (parseInt(a1.value/4) != parseFloat(a1.value/4)))
                        correcto=false;
             }

        if (correcto)
        {
                if ((parseInt(d1.value) < 10)&&(d1.value.length<"2"))
                        d1.value="0"+d1.value;
                if ((parseInt(m1.value) < 10)&&(m1.value.length<"2"))
                        m1.value="0"+m1.value;
                fec.value=d1.value+"/"+m1.value+"/"+a1.value;
        }
        return correcto;
}

// funci&oacute;n que valida seg&uacute;n vas tecleando un importe poniendole los puntos
// par&aacute;metro de entrada	: obj (string)
//				: sign ("positive"/cualquier otra cosa)
// par&aacute;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&oacute;n que valida seg&uacute;n vas tecleando un importe decimal
// par&aacute;metro de entrada	: obj (string)
//						: sign ("positive"/cualquier otra cosa)
//						: n_after (n&uacute;mero posiciones decimales)
// par&aacute;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&oacute;n que valida una caja para comprobar si es una cantidad
// par&aacute;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&aacute;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&aacute;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&oacute;n que valida una caja para comprobar si es una cantidad real
// par&aacute;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&aacute;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&aacute;s de una vez el car&aacute;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&uacute;n decimal despu&eacute;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&aacute;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;
}




function bSiOkCaracteresHacienda(Cadena, Tipo){
	var caracter;
	var bAux=true;
	var bRespuesta=true;
	//Caracteres prohibidos
	var reg2=/[+*()]/;
	
	//Dependiendo del tipo de persona (FÍSICA o JURÍDICA)
	//se define la variable de tipo Expresión Regular 'reg', 
	//para que permita unos u otros caracteres
	
	if (Tipo==0){
		var reg = /[a-zA-ZÁÉÍÓÚáéíóúÜüÑñ .,]/;
	}
	else{
		var reg =/[a-zA-Z0-9ÁÉÍÓÚáéíóúÜüÑñ &;/:.,]/;
	}
	
	//Recorrer la cadena y detectar si alguno de los caracteres
	//introducidos no está permitido
	
	for (i=0; i<Cadena.length; i++){
		caracter=Cadena.substr(i,1);
		bAux=reg.test(caracter);
		//Si el caracter no válido es '-', permitirlo
		if (bAux==false){
			if((caracter=='-') || (caracter=="'")) bAux=true;
		}
		//alert(caracter+": "+bAux);
		
		//Establecer a False la respuesta, en el momento en que 
		//uno de los caracteres sea no permitido
		if(bAux==false){
			bRespuesta=false;
		}
	}
	return(bRespuesta);
}

//YMT validar direccion de correo tarjeta CEU.
function isEmailAddress(theElement)
    {
	    var s = theElement.value;
	    var filter=/^[A-Za-z][A-Za-z0-9_]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
	    
	    if (s.length == 0 ) return true;
    	
	    if (filter.test(s))
		    return true;
	    else
		    alert("Inserte una dirección de correo válida");
		    theElement.focus();
	    return false;
    }