///////////////////
// Validar email //
///////////////////

function esMailValido(email){
        if(email.length == 0 || email.indexOf("@")==-1 || email.indexOf(".")==-1){
                return false;
                //Es falso
        }
        return true;
        //es correcto
}

//////////////////////////////
// Comprobar campos vacios  //
//////////////////////////////

function esVacio(campo){
        var espacio ="\t\n\r\ ";
        if(campo == null || campo.length == 0){
                return true;
        }
        var i;
        //Recorre la cadena hasta dar con un caracter que no sea vacio
        for (i = 0; i < campo.length; i++){
                var c = campo.charAt(i);
                if (espacio.indexOf(c) == -1){
                        return false;
                }
        }
        return true;
}

/////////////////////////////////////////////////////
// Comprobacion de datos correctos para un número  //
/////////////////////////////////////////////////////

function esNumeroValido(pCaracter){
  if (pCaracter.indexOf(".")!= -1)
  {
        punto = pCaracter.indexOf(".");
        //Parte entera
        pCaracter = pCaracter.substring(0,punto); //+ pCaracter.substring(coma + 1,pCaracter.length);
  }
  if (pCaracter.indexOf(",")!= -1)
  {
        coma = pCaracter.indexOf(",");
        //Parte entera
        pCaracter = pCaracter.substring(0,coma); //+ pCaracter.substring(coma + 1,pCaracter.length);
  }
  if(esVacio(pCaracter)){
        return false;
  }
  for (var i=0;i<pCaracter.length;i++) {
    var sByte=pCaracter.substring(i,i+1);
    if (sByte<"0" || sByte>"9") return false;
  }
  return true;
}

///////////////////////////////////////////////////////
//  Comprobacion de datos correctos para una cadena  //
///////////////////////////////////////////////////////

function esCadenaValida(pCaracter){

  for (var i=0;i<pCaracter.length;i++) {

    var sByte=pCaracter.substring(i,i+1);

    if (((sByte<"a" || sByte>"z") && (sByte!="ñ")) && ((sByte<"A" || sByte>"Z") && (sByte!="Ñ")) && (sByte!=" ")

    && (sByte!="1") && (sByte!="2") && (sByte!="3") && (sByte!="4") && (sByte!="5") && (sByte!="6") && (sByte!="7")

    && (sByte!="8") && (sByte!="9") && (sByte!="0")

        && (sByte!="á") && (sByte!="é") && (sByte!="í") && (sByte!="ó") && (sByte!="ú") && (sByte!="-")) return false;

  }

  return true;

}



//****************************** FUNCION PARA COMPROBAR DEC.(ESPECIFICANDO:ENTEROS Y DECIMALES)****************************
//FUNCION PARA COMPROBAR CAMPOS DECIMALES
function decimales(Cantidad,NumeroEnt,NumeroDec,Nombrecampo)
{
        
        var Decimales= NumeroDec //Numero de decimales
        var Enteros=NumeroEnt //Numero de enteros                
        var Valor=Cantidad.value; //Numero decimal        
        if (Valor.indexOf(",")!= -1 || Valor.indexOf(".")!= -1 )
        {
            //solo al principio diferenciamos del punto y de la coma
            if (Valor.indexOf(",") != -1) //se han especificado los decimales con la coma(,)
            {
                ParteEntera=Cantidad.value.substring(0,Cantidad.value.lastIndexOf(","));
                Centenas = Cantidad.value.substring(Cantidad.value.lastIndexOf(",")+1,Cantidad.value.length);
            }
            else //se han especificado los decimales con el punto (.)
            {
                ParteEntera=Cantidad.value.substring(0,Cantidad.value.lastIndexOf("."));
                Centenas = Cantidad.value.substring(Cantidad.value.lastIndexOf(".")+1,Cantidad.value.length);
            }        
            //Compruebo cada una de las partes para ver si son numéricas
            if (!esNumeroValido(ParteEntera))
            {
                alert("La parte entera de " + Nombrecampo + " debe ser numerica.");
                Cantidad.focus();
                return false
            }
            if (!esNumeroValido(Centenas))
            {
                alert("La parte decimal de " + Nombrecampo + " debe ser numerica.");
                Cantidad.focus();
                return false
            }
            //Compruebo el número de digitos enteros
            if (ParteEntera.length>Enteros)
            {
                alert("Cantidad de " + Nombrecampo + " errónea")
                Cantidad.focus();
                return false
            }
                        
            //Compruebo el numero de decimales
            if (Centenas.length>Decimales)
            {
                alert("Cantidad de " + Nombrecampo + " errónea")
                Cantidad.focus();
                return false
            }
            else
            {
                return true;
            }
        }
        else // Si no es decimal compruebo si es  numerico
        {
            if (!esNumeroValido(Cantidad.value))
            {                
                alert("El campo " + Nombrecampo + " debe ser numérico.")
                Cantidad.focus();
                return false
            }
            else
            {
                //Compruebo que el numero no exceda la longitud de la parte entera
                if (Cantidad.value.length>Enteros)
                {
                    alert("Cantidad de " + Nombrecampo + " errónea")                
                    Cantidad.focus();
                    return false;
                }                
            }
            return true;
        }
}



//////////////////////////
// VALIDACION FECHA MANT.
//////////////////////////
//Comienza Tratamiento de Fechas
    var Meses=new Array(01,02,03,04,05,06,07,08,09,10,11,12);
    var TextoMeses=new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
    var Dias=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var DiasB=new Array(31,29,31,30,31,30,31,31,30,31,30,31); //año bisiesto
    
    
     //AÑO BISIESTO
    function anyoBisiesto(anyo)
    {
        /**
        * si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
        */
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;

        /*
        * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
        * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
        */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                /**
                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
            */
            else
            {
                return true;
            }
        }
    }
    
    
    //Funcion que me dice si el dia es correcto para ese mes
    function fValidaDia(Dia,Mes,Anio,Foco)
    {
        if (anyoBisiesto(Anio))   //ES BISIESTO
        {
            if (Dia <= DiasB[Mes - 1])
            {
              return true;
            }
            else
            {
              alert("El día " + Dia + " es incorrecto para el mes de " + TextoMeses[Mes - 1]);
              //Foco.focus();
              return false;
            }
        }
        else // NO ES BISIESTO
        {
             if (Dia <= Dias[Mes - 1])
            {
              return true;
            }
            else
            {
              alert("El día " + Dia + " es incorrecto para el mes de " + TextoMeses[Mes - 1]);
              //Foco.focus();
              return false;
            }
        }
     }
     
    //Funcion que me dice si la fecha de inicio es anterior a la de Fin 
    function FechaFinCorrecta(ValorFechaInicio,ValorFechaFin,Foco)
    {    
        if (ValorFechaInicio > ValorFechaFin)
        {
            
            alert("La fecha de fin no puede ser menor que la fecha de inicio");
            Foco.focus();
            return false;
        }
        else
        {
            return true;
        }
    } 
 
    //***************************Validamos las fechas******************************
    function ValidarFecha(DiaInicio,MesInicio,AnioInicio,DiaFin,MesFin,AnioFin)
    {
        if (DiaInicio.value != "" && MesInicio.value!="" && AnioInicio.value!="")
        {
            if (fValidaDia(DiaInicio.value,MesInicio.value,AnioInicio.value,DiaInicio))
            {    
                FechaInicio=AnioInicio.value + MesInicio.value + DiaInicio.value
            
            }
            else
            {
                alert("No es fecha válida");
                return false;
            }
        
            if (DiaFin.value != "" && MesFin.value!="" && AnioFin.value!="")
            {
                if (fValidaDia(DiaFin.value,MesFin.value,AnioFin.value,DiaFin))
                {    
                    FechaFin=AnioFin.value + MesFin.value + DiaFin.value
                    if (FechaFinCorrecta(FechaInicio,FechaFin,DiaInicio))
                    {
                            
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
        
            }
            else
            {
                return true;
            }
        }
        else
        {
            return true;
        }
    }
    
    
    
    //valida una fecha única
    function ValidarFechaUnica(DiaUnico,MesUnico,AnioUnico)
    {
        if (DiaUnico.value != "" && MesUnico.value!="" && AnioUnico.value!="")
        {
            if (fValidaDia(DiaUnico.value,MesUnico.value,AnioUnico.value,DiaUnico))
            {                    
                return true;
            }
            else
            {
                alert("No es fecha válida");
                DiaUnico.focus();
                return false;
            }                    
        }
        else
        {
            return true;
        }
    }
    
      //funcion para cambiar en los decimales la "," por el "." y viceversa
function formatopunto(cantidad)
{
    if (cantidad.indexOf(",")!= -1)
    {
        parteentera=cantidad.substring(0,cantidad.lastIndexOf(","));
        partedecimal =cantidad.substring(cantidad.lastIndexOf(",")+1,cantidad.length);    
        numero=parteentera
        if (partedecimal!="") 
        {
            numero=numero + "." + partedecimal
        }
    }
    else
    {
        numero=cantidad
    }
    
    return numero;
}
function formatocoma(cantidad)
{
    if (cantidad.indexOf(".")!= -1)
    {        
        parteentera=cantidad.substring(0,cantidad.lastIndexOf("."));
        partedecimal =cantidad.substring(cantidad.lastIndexOf(".")+1,cantidad.length);        
        numero=parteentera
        if (partedecimal!="") 
        {
            numero=numero + "," + partedecimal
        }
    }
    else
    {
        numero=cantidad
    }
    return numero;
}

//funcion que me redondea los numeros decimales
function redondeo (numero,numerodec)
{        
    //significa que el numero es un entero
    if (numero.value.lastIndexOf(".") < 0)
    {
        pint=numero.value
        pdec=0
    }    
    else
    {
        pint=numero.value.substring(0,numero.value.lastIndexOf("."))
        pdec=numero.value.substring(numero.value.lastIndexOf(".")+1,numero.value.length);
    }    
    longitud=pdec.length
    // si hay más decimales de los indicados
    if ( longitud > numerodec)
    {
        sobran=longitud - numerodec            
        pdec=numero.value.substring(numero.value.lastIndexOf(".")+1,numero.value.length-sobran);        
        //numero a redondear            
        ultimo=numero.value.substring(numero.value.lastIndexOf(".")+ 1 + numerodec,numero.value.length + 1 - sobran);                
        if (ultimo>=5)
        {
            //ultimodec=numero.value.substring(numero.value.lastIndexOf(".")+ numerodec,numero.value.length  - sobran);        
            //ultimodec=ultmimodec + 1
            pdec=Number(pdec) + 1            
            //si el numero de decimales es menor que el indicado es porque al redondear ej(redondeo con 3 dec.): 0678 + 1=68
            sobran=sobran + numerodec - 1
            primerdecimal=numero.value.substring(numero.value.lastIndexOf(".")+ 1,numero.value.length  - sobran);                
            if (primerdecimal==0)
            {    
                formato=pint + "," + "0" + pdec                
            }
            else
            {
                formato=pint + "," + pdec
            }
        }
        else
        {
            //si no hay parte entera la igualo a 0
            if (pint=="")
            {
                pint = 0;
            }        
            formato=pint + "," + pdec
        }        
    }        
    else
    {        
        //si no hay parte entera la igualo a 0
        if (pint=="")
        {
            pint = 0;
        }
        formato=pint + "," + pdec
    }
    return formato
}
