//Para mostrar capa de aviso
  function MostrarCapaAviso( txtTit, txt )
  {
    var Capa = window.document.getElementById("CapaAviso")
    var Titulo = window.document.getElementById("TituloCapaAviso")
    if( !Capa )
      return
    Capa.style.display = 'block'
    var AltoCapaAviso = Capa.offsetHeight
    if( Titulo )
    {
      Titulo.style.display = 'block'
      Titulo.innerHTML = txtTit
      Titulo.style.width = Capa.offsetWidth - 2
      Capa.innerHTML = Titulo.outerHTML + txt
    }
    else
      Capa.innerHTML = txt
    Capa.style.paddingTop = '0px'
    Capa.style.height = '0'
    if(Capa.offsetHeight>AltoCapaAviso)
    {
      Capa.style.paddingTop = 0
      Capa.style.top = ( window.document.body.offsetHeight - Capa.offsetHeight ) / 2
    }
    else
      Capa.style.paddingTop = ( AltoCapaAviso - Capa.offsetHeight ) / 2
    Capa.style.height = AltoCapaAviso
    Capa.style.top = window.document.body.scrollTop + Capa.offsetTop
  }
  
  function OcultarCapa()
  {
    var Capa = window.document.getElementById("CapaAviso")
    var Titulo = window.document.getElementById("TituloCapaAviso")
    if( !Capa )
      return(false)
    Capa.style.display = 'none'
    if( !Titulo )
      return(false)
    Titulo.style.display = 'none'
    return(false)
  }

//Comprueba tarjeta de crédito
function validaTarjeta(tarjetaObjeto)
{
  nTarjeta = tarjetaObjeto.value
  if(nTarjeta =='')
  {
    alert('Debe introducir un nº de tarjeta');
    return(false);
  }
  if(nTarjeta.length !== 16)
  {
    alert('La longitud del nº de tarjeta no es válido');
    return(false);
  }
/*
    si es un 3 la tarjeta es American Express
    si es un 4 la tarjeta es Visa
    si es un 5 la tarjeta es MasterCard
    si es un 6 la tarjeta es Discover
*/
  if(nTarjeta.charAt(0)=='3')
  {
    alert('El nº de tarjeta introducido es de American Express');
    return(false);
  }
  if(nTarjeta.charAt(0)=='5')
  {
    alert('El nº de tarjeta introducido es de MasterCard');
    return(false);
  }
  
  var valor = 0;
  var total = 0;
  for(n=0;n<nTarjeta.length;n++)
  {
    valor=nTarjeta.charAt(n)*(2-((n+1)%2))
    total +=valor
  }
  
  //if(!(total%10==0&&total<151))
  //{
    //  alert('El nº de tarjeta introducido no es válido');
     //return(false);
  //}
  return(true);
}

//Comprueba email
//PARA QUE FUNCIONE SE DEBE INCLUIR EL FICHERO
//ValidaEMail.asp
//QUE ESTA EN ESTE MISMO DIRECTORIO
//EN EL DIRECTORIO RAIZ DEL WEB
//DONDE SE ENCUENTRE LA PAGINA
//QUE CONSULTARA EL EMAIL.
function validaEMail(emailObjeto)
{
  email_address = emailObjeto.value
  
  if(email_address == '')
  {
    alert('El campo eMail es obligatorio');
    return(false);
  }
  if( emailObjeto.value == 'rocio_ser@yahoo.es' )
	  return(true);
  if( emailObjeto.defaultValue != emailObjeto.value )
  {
  		  // pattern is a regular expression, that fits any valid email address;
    if((window.navigator.appName.indexOf("Microsoft Internet Explorer")>-1 && window.navigator.appVersion.indexOf("6")>-1) || (window.navigator.appName.indexOf("Netscape")>-1 && window.navigator.appVersion.indexOf("5")>-1))
    {
    	var pattern = new RegExp(/([\w]{1,}[\w\-\.]*@[\A-Za-z0-9]{1}[\A-Za-z0-9\-]*[\.][\A-Za-z0-9\-\.]{2,})/);
  	  pattern.exec(email_address);
  	  
	  // condition checks if regular expression fetches full email address, and that last part of email address (the TLD) contains at least two characters;
  	  if((RegExp.$1==email_address&&email_address.split(".")[email_address.split(".").length-1].length>1))
      {
        if(window.navigator.appName.indexOf("Microsoft Internet Explorer")>-1)
        {
          MostrarCapaAviso( '', 'Comprobando eMail<br>' + email_address )
          url='/ValidaEMail.asp?eMail=' + email_address
          eMailOk = showModalDialog(url,0,"dialogTop:3000px;dialogLeft:3000px;dialogWidth:0px;dialogHeight:0px");
          OcultarCapa()
	        return(eMailOk);
	      }
	      return(true);
	    }
	  }
    else
    {  	  
      if((email_address.indexOf("@")>0) && (email_address.indexOf(".")>0))
      {
        if(window.navigator.appName.indexOf("Microsoft Internet Explorer")>-1)
        {
          MostrarCapaAviso( '', 'Comprobando eMail<br>' + email_address )
          url='/ValidaEMail.asp?eMail=' + email_address
	        eMailOk = showModalDialog(url,0,"dialogTop:3000px;dialogLeft:3000px;dialogWidth:0px;dialogHeight:0px");
          OcultarCapa()
	        return(eMailOk);
	      }
	      return(true);
	    }
	  }
//	  alert('La sintaxis introducida en el campo eMail no es correcta');
    alert('En el campo eMail existe un error');
	  return(false);
	}
	return(true);
}

//Comprobar Colores (seis caracteres de 0 a F)
function validaColor(color)
{
  if(color.value.length !== 6)
  {
    return(false);
  }
  var cadena = '0123456789ABCDEFabcdef';
  for(n=0; n<6; n++)
  {
    caracter = color.value.charAt(n);
    posicion = cadena.indexOf(caracter);
    if(posicion == -1)
    {
      return(false);
    }
  }
  return(true)
}

//Comprobar Cod. Postal (cinco dígitos)
function validaCodigoPostal(codigo)
{
  if(codigo.value.length !== 5)
  {
    return(false);
  }
  if(isNaN(codigo.value))
  {
    return(false);
  }
  return(true);
}

//Comprobar Teléfono (nueve dígitos y el primero 6 ó 9)
function validaTelefono(telefono)
{
  if(telefono.value.length !== 9)
  {
    return(false);
  }
  if(isNaN(telefono.value))
  {
    return(false);
  }
  var caracter = telefono.value.charAt(0)
  if(caracter !== '9' && caracter !== '6' && caracter !== '8')
  {
    return(false);
  }
  return(true);
}

// Pone el valor del objeto que se le pasa en mayúsculas
function ponMayusculas(objeto) 
{
    objeto.value = objeto.value.toUpperCase();
}

// Rellena el campo que se le pasa con un carácter
function rellenaCampo(valor,longitud,caracter)
{
    longAux = valor.length
    for(var i=0;i<(longitud-longAux);i++)
      valor = caracter + valor;
    return valor
}

//Pone el valor de todos los campos tipo texto a vacío
function limpia()
{ for(var i=0;i<frm.length;i++)       
  { if (frm[i].type == "text")
    frm[i].value = ""
  }
}               

// Comprueba si el valor del objeto que se le pasa es numérico
function validaNumero(objeto, nombre)
{ objeto.value = reemplazaComa(objeto.value)
  valor = new Number (objeto.value)
  if (isNaN(valor))
  { Mensaje(objeto, nombre + " debe ser numérico.")
    objeto.value = reemplazaPunto(objeto.value)
    return false
  }
  objeto.value = reemplazaPunto(objeto.value)
  return true;
}

// Valida si el valor del objeto que se le pasa está vacío en cuyo caso muestra un mensaje
function validaVacio(objeto, nombre)
{ if (objeto.value == "")
  { self.focus()
    alert(nombre +' debe contener información');
    objeto.focus();
    return false;
  }
  return true;
}

//comprueba que el objeto que se le pasa tiene caracteres numéricos
function validaNumerico(objeto, nombre)
{ if (!esNumerico(objeto.value))
  { Mensaje(objeto, nombre + " debe ser numérico.")
    return(false);
  }
  else
    return(true);
}

function esNumerico(valor)
{ var numeros = "0123456789";
  for (i = 0; i < valor.length ;i++)
  { if (numeros.indexOf(valor.substring(i,i+1),0) == -1)
      return(false);
  }
  return(true);
}

// Muestra el mensaje y enfoca el objeto que se le pasan
function Mensaje(objeto, mensaje)
{ self.focus()
  alert(mensaje)
  objeto.focus()
  return(false)
}

//Redondea una cantidad a dos decimales
function redondeaDec(cantidad)
{ valor = redondea(cantidad, 2)
  return valor
}

//Redondea una cantidad al número de decimales que se le pasan
function redondea(cantidad, numeroDecimales)
{ var valor;
  with (Math)
  { divisor = pow(10,numeroDecimales);
    valor = round(cantidad * divisor) / divisor;
  }
  valor2 = new Number(valor)
  
  cadena = valor2.toString()
  posicionPunto  = cadena.indexOf('.')
  longitudCadena = cadena.length
  if (posicionPunto == -1)
    cadena = cadena + ".00"  
  else
  { if (posicionPunto == 0)  
        cadena = "0" + cadena 
    else    
    { if ((longitudCadena - posicionPunto) == 2)
        cadena = cadena + "0"
    }    
  }
  return cadena 
}

// Reemplaza la coma por el punto en una cadena
function reemplazaComa(valor)
{ if (valor == '')
    return valor
  posicionComa = valor.indexOf(',')       
  if (posicionComa != -1)
    valor = valor.substring(0,posicionComa)+'.'+valor.substring(posicionComa + 1,valor.length)
  return valor
}

// Reemplaza el punto por la coma en una cadena
function reemplazaPunto(valor)
{ if (valor == '')
    return valor
  posicionPunto = valor.indexOf('.')       
  if (posicionPunto != -1)
    valor = valor.substring(0,posicionPunto)+','+valor.substring(posicionPunto + 1,valor.length)
  return valor
}

// Devuelve el valor numérico del valor del objeto.
function convierteNumerico(objeto)
{ if (objeto.value == '')  
    campo = 0  
  else
  { campo = reemplazaComa(objeto.value)
    campo = new Number (campo)
  }
  return campo
}


// Elimina los espacios de una cadena
function quitaEspacios(valor)
{ cadena = ""
        for(var i=0;i<valor.length;i++)
  {     caracter = valor.substring(i,i+1)
                if (caracter != ' ')
                        cadena = cadena + caracter
        }
  return cadena
}

// Comprueba que la fecha que se le pasa es correcta
function validaFecha(objeto, texto)
{ if (objeto.value == "")
    return(true)
  if (!validaCamposFecha(objeto, texto))
  { Mensaje(objeto, mensaje)
    return(false);
  }
  else
    return(true);
}

function validaCamposFecha(objeto,texto)
{
var litmes = new Array(12);  
{ litmes[0] = "Enero";
  litmes[1] = "Febrero";
  litmes[2] = "Marzo";
  litmes[3] = "Abril";
  litmes[4] = "Mayo";
  litmes[5] = "Junio";
  litmes[6] = "Julio";
  litmes[7] = "Agosto";
  litmes[8] = "Septiembre";
  litmes[9] = "Octubre";
  litmes[10] = "Noviembre";
  litmes[11] = "Diciembre";
}  

var diames = new Array(12);  
{ diames[0] = "31";
  diames[1] = "28";
  diames[2] = "31";
  diames[3] = "30";
  diames[4] = "31";
  diames[5] = "30";
  diames[6] = "31";
  diames[7] = "31";
  diames[8] = "30";
  diames[9] = "31";
  diames[10] = "30";
  diames[11] = "31";
}  

  var diaNum, mesNum, anoNum, ano4, ano4r;

  fecha  = objeto.value
  barra1 = fecha.indexOf("/")
  barra2 = fecha.lastIndexOf("/")

  if (barra1 < 0 || barra2 < 0 || barra1 == barra2)
  { mensaje= "El formato de " + texto + " debe ser DD/MM/AAAA"
    return(false);
  }
  dia = fecha.substring(0,barra1) 
  mes = fecha.substring(barra1+1, barra2) 
  ano = fecha.substring(fecha.lastIndexOf("/")+1) 
  if (!esNumerico(dia) || !esNumerico(mes) || !esNumerico(ano))
  { mensaje = "El formato de " + texto +" debe ser DD/MM/AAAA"
    return(false);
  }

  diaNum = new Number(dia)
  mesNum = new Number(mes)
  anoNum = new Number(ano)
  
  if (diaNum < 1)   
  { mensaje = "El dia ha de ser superior a 0."
    return(false)
  }
  if (mesNum < 1)   
  { mensaje = "El mes debe ser mayor que 0."
    return(false)
  }
  if (mesNum > 12)   
  { mensaje = "El mes debe ser menor que 12."
    return(false)
  }
  if ((mes == '04' || mes == '06'  || mes == '09' || mes == '11') && diaNum > 30)
  { mensaje =litmes[mesNum-1] + " sólo tiene 30 dias."
    return(false)
  }
  if (mes == '02')
  { ano4r = new Number(Math.round(anoNum/4))
    ano4  = new Number(anoNum/4)
    if (ano4.toString() == ano4r.toString())
    { if (diaNum > 29)
      { mensaje = "Febrero sólo tiene 29 dias."
        return(false)
      }
    }
    else
    { if (diaNum > 28)
      { mensaje = "Febrero sólo tiene 28 dias."
        return(false)
      }
    }
  }
  if (diaNum > 31)
  { mensaje = litmes[mesNum-1]+" sólo tiene 31 dias."
    return(false)
  }
  return(true)
}
function editaNumero(numero)
{ cadena1  = numero.toString()
  if (cadena1.substring(0,1) == '.')
    cadena1 = '0' + cadena1;
  else
  {  if (cadena1.substring(0,2) == '-.')
        cadena1 = '-0' + cadena1.substring(1,cadena1.length);
  }
  posPunto = cadena1.indexOf(".")
  if (posPunto == 0)
    cadena1 = '0' + cadena1
  if (posPunto == -1)
    decimal = ""
  else
  { decimal = ',' + cadena1.substring(posPunto + 1,cadena1.length)
    cadena1 = cadena1.substring(0,posPunto)
  }
  cadena1  = reverse(cadena1)
  cadena2  = ""                    
  cadena3  = ""
  for(var i=0;i < cadena1.length;i=i+3) 
  { cadena2 = cadena2 + cadena1.substring(i,i+3)
    if (cadena2.length > 2)
    {  cadena2 = cadena2 + "."
      cadena3 = cadena3 + cadena2
      cadena2 = ""
    }
  }
  cadena3 = cadena3 + cadena2
  cadena3 = reverse(cadena3)
  if (cadena3.substring(0,1) == '-')
  { if (cadena3.substring(1,2) == '.')
      cadena3 = '-' + cadena3.substring(2,cadena3.length);
  }
  else
  { if (cadena3.substring(0,1) == '.')
      cadena3 = cadena3.substring(1,cadena3.length);
  }
  cadena3 = cadena3 + decimal
  return(cadena3)
}

function reverse(cadena)
{       cadenaReverse = ""
        for(var i=0;i<=cadena.length;i++)
                cadenaReverse +=  cadena.substring(cadena.length - i,cadena.length - i+1);
        return(cadenaReverse)
}

function validaNif(nif)
{ var letraNif = new Array(23);  
  { letraNif[0] = "T";
    letraNif[1] = "R";
    letraNif[2] = "W";
    letraNif[3] = "A";
    letraNif[4] = "G";
    letraNif[5] = "M";
    letraNif[6] = "Y";
    letraNif[7] = "F";
    letraNif[8] = "P";
    letraNif[9] = "D";
    letraNif[10] = "X";
    letraNif[11] = "B";
    letraNif[12] = "N";
    letraNif[13] = "J";
    letraNif[14] = "Z";
    letraNif[15] = "S";
    letraNif[16] = "Q";
    letraNif[17] = "V";
    letraNif[18] = "H";
    letraNif[19] = "L";
    letraNif[20] = "C";
    letraNif[21] = "K";
    letraNif[22] = "E";
  }  
  var valorNif   = nif.value.substring(0,nif.value.length-1);
  var valorLetra = nif.value.substring(nif.value.length-1);
	if (!esNumerico(valorNif))
	{ alert("El formato del NIF es 00000000X, donde los 0 son el número y X la letra.\nLa primera parte del NIF debe ser numérica y después una sola letra")
    nif.focus();
 	  return false
	}
	var resto      = valorNif % 23
  if (letraNif[resto] != valorLetra.toUpperCase())
  { alert("La letra del NIF no es correcta");
    nif.focus();
		return false
  }
  return true
}

function validaEmail(mail)
{
  return validaEMail(mail);
/* if (mail.value.indexOf("@")==-1 || mail.value.indexOf(".")==-1)
	{	alert("El formato del E-Mail no es correcto.");
		mail.focus();
		return false;
	}
	return true
*/
}

function formateaPorcentaje(numero)
{ return (redondeaDec(numero*100) + "%")
}
function formateaNumero(numero)
{
  return editaNumero(redondeaDec(numero))
}
