var errores="";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑÄËÏÖÜ"
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñüöäïë"


////////////////////////////////////
//////////////////////cadenas
////////////////////////////////////

///// valida si un caracter es letra mayuscula

function es_mayuscula (c)
{    return ( uppercaseLetters.indexOf( c ) != -1 )
}

///// valida si un caracter es letra minuscula

function es_minuscula (c)
{
    return ( lowercaseLetters.indexOf( c ) != -1 ) 
           
}

///transformar a minusculas 
function minusculas (s)
{    return (uppercaseLetters.indexOf( s ) != -1 )   
}


///////////transforma a letras mayusculas   principal
///devuelve la cadena convertida
function convierte_mayusculas (s)
{   	var i;
	var tam=s.length;		
	var nuevo="";
        // Check that current character is numero.
	if (!(minusculas(s)))
	{
		s=s.toUpperCase();	
		nuevo +=s;
	}
	 return nuevo;
}


//////////transforma a letras minúsculas    principal
///devuelve la cadena convertida
function convierte_minusculas (s)
{   	var i;
	var tam=s.length;		
	var nuevo="";
        // Check that current character is numero.
	if (!(minusculas(s)))
	{
		s=s.toLowerCase();	
		nuevo +=s;
	}
	 return nuevo;
}




///// valida si los caracteres de un campo son letras devuelve true o false
/// no acepta espacios en blanco
/////se llama con el objeto 
function validacaracteres (s)
{   	
 	if (!textvacio(s.value))	
	{
	var i;	
	string=s.value;
	var tam=string.length;			
	for (i = 0; i <tam; i++)
	{   
        	// Check that current character is numero.
	        var c = string.charAt(i);
		if (!(es_minuscula(c)|| es_mayuscula(c)))
			return false;
	}	
	}
	else
 		return false;
	return true;
}

///// valida si los caracteres de un campo son letras y
///// acepta espacios en blanco devuelve true o false
/////se llama con el objeto 
function validacaracteresconespacios (s)
{   	
 	if (!textvacio(s.value))	
	{
	var i;	
	string=s.value;
	var tam=string.length;			
	for (i = 0; i <tam; i++)
	{   
        var c = string.charAt(i);
		if (!(es_minuscula(c)|| es_mayuscula(c)))
		{ if(c != " ")
			return false;
		}
	}	
	}
	else
 		return false;
	return true;
}


///convierte la primera letra a mayuscula de cada palabra de una frase (letra capital)
function letracapital(frmObj)
{
	var index,tmpStr,tmpChar,preString,postString,strlen;
	tmpStr = frmObj.value.toLowerCase();
	strLen = tmpStr.length;
	if (!textvacio(frmObj.value))  
	{
    		for (index = 0; index < strLen; index++)  
		{
			tmpChar = tmpStr.charAt(index);
			if ((index == 0) && (tmpChar != " ") ) 
			{
				tmpChar = tmpChar.toUpperCase();
				postString = tmpStr.substring(1,strLen);
				tmpStr = tmpChar + postString;
			}
			else 
			{	
				if (tmpChar == " ")
				{
					tmpChar = tmpStr.charAt(index+1).toUpperCase();
					preString = tmpStr.substring(0, index+1);
					postString = tmpStr.substring(index+2,strLen);
			                tmpStr = preString + tmpChar + postString;
         			}
       		}
    		}
	}
	return tmpStr;
}



//////////////////////////////////////////////////
///////////////////validacion de campos vacios
//////////////////////////////////////////////////

//////verifica si un text está vacío devuelve 0 =v o 1=f
function textvacio(campo)
{	
	return ( campo.length ==0 )
}


///valida radio buttons
function validaradio(vector)
{
 var largo=vector.length;
 for(i=0;i<largo;i++)
 {
   if(vector[i].checked)
   {return true;}
 }
 return false;
}

///valida select
function validaselect(campo,noselect)
{
	if(campo==noselect)
	{return false;}
	return true;
}

///valida checkbox
function validacheckbox(vector)
{
	var largo=0;
	largo=vector.length;
	for(i=0;i<largo;i++)
	{
		if(vector[i].type=="checkbox")
		{
			if(vector[i].checked)
			{return true;}
		}
	}
	return false;

}
//////////////////////////////////////////////////
/////////////////////////operaciones con cadenas
//////////////////////////////////////////////////

////// valida la longitud de una cadaena devuelve 0=v o 1=f
function validalongitud(cadena,longitud)
{
	var l=0;
	l=cadena.length;
	if (l == longitud)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}



//Funcion que quita espacios

function quitar(string)
{  //si necesito el .value
   while(''+string.charAt(0)==' ')
   string=string.substring(1,string.length);
   while(''+string.charAt(string.length-1)==' ')string=string.substring(0,string.length-1);
   return string;
}


///////////////////////////////////////////////
///////////////////////////////////numeros
//////////////////////////////////////////////


// valida numeros enteros positivos en text
function validanumerosenteros(cadena)
{
   num="0/1/2/3/4/5/6/7/8/9";
   vector=num.split("/") ;
   var correcto=0;
   var letra="";
   if(cadena==null)
   {
	alert('El campo esta vacio');    
   }
   else
   {
	for (i=0;i<cadena.length;i++)
	{
	    for(k=0;k<vector.length;k++)
	    {
		letra=cadena.charAt(i);
		if(letra!=vector[k])
		{
		    correcto=1;
		}
		else
		{
		    k=vector.length;
		    correcto=0;
		}
	    }
  	    if(correcto==1)
    	    {	
		i=cadena.length;
    	    }

	}
    }
  return correcto;
}


//valida numeros reales con o sin signo devuelve 0 o 1
function validarealesconosinsigno(cadena)
{
   num="0/1/2/3/4/5/6/7/8/9/./+/-";
   vector=num.split("/") ;
   var correcto=0;
   var letra="",primero="",ultimo="",l="";
   if(cadena==null)
   {
	alert('El campo esta vacio');    
   }
   else
   {
	   primero=cadena.charAt(0);
	   l=cadena.length;
	   ultimo=cadena.charAt(l-1);
	   if ((primero != ".") && (ultimo != "."))
	   {
		ultimo=cadena.charAt(l-1);
		if((ultimo != "+") && (ultimo != "-"))
		{
           for(i=1;i<l-1;i++)
           { 
            letra1=cadena.charAt(i);
             if((letra1== "+")||(letra1== "-"))
              {
                correcto=1;
                return correcto; 
              }
           } 

			for (i=0;i<cadena.length;i++)
			{
			    for(k=0;k<vector.length;k++)
			    {
				letra=cadena.charAt(i);
               
				if(letra!=vector[k])
				{ correcto=1;}
				else
				{
                 
                  k=vector.length;
		           correcto=0;       
                
				}
			    }
	  		    if(correcto==1)
	    		    {i=cadena.length;}
			}
		}
		else
		{correcto=1;}
	   }
           else
	   {correcto=1;}
     }
  return correcto;
}


// valida numeros enteros con o sin signo

function validaenterosconosinsigno(cadena)
{
   num="0/1/2/3/4/5/6/7/8/9/+/-";
   vector=num.split("/") ;
   var correcto=0;
   var letra="",primero="",ultimo="",l="";
   if(cadena==null)
   {
	alert('El campo esta vacio');    
   }
   else
   {
	   primero=cadena.charAt(0);
	   l=cadena.length;
	   ultimo=cadena.charAt(l-1);
	   if ((primero != ".") && (ultimo != "."))
	   {
		ultimo=cadena.charAt(l-1);
		if((ultimo != "+") && (ultimo != "-"))
		{
           for(i=1;i<l-1;i++)
           { 
            letra1=cadena.charAt(i);
             if((letra1== "+")||(letra1== "-"))
              {
                correcto=1;
                return correcto; 
              }
           } 

			for (i=0;i<cadena.length;i++)
			{
			    for(k=0;k<vector.length;k++)
			    {
				letra=cadena.charAt(i);
               
				if(letra!=vector[k])
				{ correcto=1;}
				else
				{
                 
                  k=vector.length;
		           correcto=0;       
                
				}
			    }
	  		    if(correcto==1)
	    		    {i=cadena.length;}
			}
		}
		else
		{correcto=1;}
	   }
           else
	   {correcto=1;}
     }
  return correcto;
}

////// valida rango devuelve true o false tanto pára reales y enteros con o sin signo

function validarango (cadena, min, max)
{
      if ((cadena < min) || (cadena > max))
      {
		return false;
      } 
     return true 
}  


/////////////////////////////////////////////////////////
////////////////////validaciones de la cedula///////
/////////////////////////////////////////////////////////

/////// valida el guion - de la cédula devuelve 0 o 1
function validaguion(campo)
{	
	var guion="";
	var guion=campo.charAt(9);
	if (guion == "-")
	{
		return 0;
	}
	else 
	{
		return 1;
	}
}


/////valida cedula en un solo campo con o sin - devuelve true o false
function validacedula1(cedula)
{
	if (cedula.length > 11)
		return false;
	if (! cedula.match(/\d{9}[-]\d/) && ! cedula.match(/\d{10}/))
		return false;
	if (cedula.length > 10)
		cedula = cedula.substr(0, 9) + cedula.charAt(10);
	var dosPrimerosDigitos = parseInt(cedula.substr(0, 2), 10);
	if (dosPrimerosDigitos < 1 || dosPrimerosDigitos > 21)
		return false;
	var acumulado = 0, digito, aux;
	for (var i=1; i<=9; i++) {
		digito = parseInt(cedula.charAt(i-1));
		if (i % 2 == 0) {
			acumulado += digito;
		} else {
			aux = 2 * digito;
			if (aux > 9) aux -= 9;
			acumulado += aux;
		}
	}
	acumulado = 10 - (acumulado % 10);
	if (acumulado == 10 )
		acumulado = 0;
	var ultimoDigito = parseInt(cedula.charAt(9));
	if (ultimoDigito != acumulado)
		return false;
	else
		return true;
}

//La variable s contendra los 9 caracteres de la cédula. cedula2
//La variable s1 contendra el último digito de la cédula. ultimo
//Esta funcion valida que la cedula sea correcta, en caso de darse esta
//la variable msgcedulab retornara con el valor Cedula Correcta true
//en caso de que la cedula sea incorrecta la variable msgcedula
//retornara con el valor de Cedula Incorrecta. false
function valida_cedula(s,s1)
{
      sum=0;
      l=s.length;
      if (l<9)
      {	 	
      	return false;
      }
      else
      {  	
	for(i=1;i<8;i=i+2)
	{
 	   p=s.charAt(i)
	   if(p==" ")
	   {
		return false;
	   }
           else
	   {	
		p=p*1;
 	        sum=sum+p;
	   }
      }
      for(j=0;j<9;j=j+2)
      {
      	m=s.charAt(j)
        if(m==" ")
	   {
		return false;
	   }		
           else
	   {	
	    m=m*2;
            if(m>9)
            {
            	m=m-9
            }
            sum=sum+m;
	   }
      }
      b=sum%10
      if (b!=0)
        d1=10-b
      else
         d1=0
      if((s1==" ")||(s1.length<1))
      	return false;
      else
      {
      	if(d1!=s1)
        {
      	  return false;
        }
        else
           return true;
      }
    }
}


/////////////////////////////////////////////////////
////////////////////////valida email
/////////////////////////////////////////////////////

////Valida email devuelve true o false
function validaemail(sEmail)
{
	if (window.RegExp)
	{
		var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
		var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
		var reg1 = new RegExp(reg1str);
		var reg2 = new RegExp(reg2str);
		if (!reg1.test(sEmail) && reg2.test(sEmail))
		{
			return true
		}
	 else
	 {
		return false
	 };
	} else if(email.indexOf("@") >= 0) {
		return true
	} else {
		return false
	}
}


/////////////////////////////////////////////////////
//////////////////////////////valida fecha
/////////////////////////////////////////////////////

//////////valida fecha devuelve true o false
function es_fecha()
{
	var dia,mes,anio;
	fecha=es_fecha.arguments;
	dia=fecha[0].value;
	mes=fecha[1].value;
	anio=fecha[2].value;
	var max=0;
	if (dia>0 && anio>0 && mes >0)
	{
	if (mes==2)
		if ((anio%4) == 0 )
			max=29;
		else 
	        	max=28;	
	else 
		if (mes==4 || mes==6 || mes==9 || mes==11)
			max=30;
		else
			max=31;
	return (dia>=1 && dia<=max)
	}
	else 	
		return false;	
}





/////////////////////////funcion valida formulario

function validaformulario()
{
  //valida cedula en un solo campo

  if(!textvacio(document.formulario.cedula1.value) )
  {
    bandera = validalongitud(document.formulario.cedula1.value,10)
    bandera1= validalongitud(document.formulario.cedula1.value,11)
    if((bandera==0)|| (bandera1 ==0))
    {
       bandera = validanumerosenteros(document.formulario.cedula1.value)
       if (bandera==0)
       {
          if(!validacedula1(document.formulario.cedula1.value))
          {
             alert("cedula incorrecta")
             document.formulario.cedula1.focus();
		    document.formulario.cedula1.select();
             return false;
          }
       }
       else
       {
          bandera=validaguion(document.formulario.cedula1.value); 
          if (bandera==0)
          {
            if(!validacedula1(document.formulario.cedula1.value))
            {
              alert("cedula incorrecta")
              document.formulario.cedula1.focus();
		     document.formulario.cedula1.select();
              return false;
             }
          } 
          else         
          {   
             alert("solo se permiten numeros el unico caracter permitido es el -")
             document.formulario.cedula1.focus();
  		    document.formulario.cedula1.select();
             return false;
          }    
       } 
	}
     else
     {
         alert("longitud incorrecta")
         document.formulario.cedula1.focus();
     	document.formulario.cedula1.select();
         return false;
     }
}
  else
  {
        alert("el campo cedula es requerido")
        document.formulario.cedula1.focus();
	   document.formulario.cedula1.select();
        return false;
  }


////////cedula 2

if(!textvacio(document.formulario.cedula2.value)) 
{
   if (!valida_cedula(document.formulario.cedula2.value,document.formulario.ultimo.value))
       {
         alert("cedula incorrecta")
         document.formulario.cedula2.focus();
         document.formulario.cedula2.select();
         return false;
       } 
}
else
     {
        alert("el campo cedula es requerido")
        document.formulario.cedula2.focus();
	   document.formulario.cedula2.select();
        return false;
     }

///////////// valida email
 
if(!textvacio(document.formulario.email.value))
{
  if(!validaemail(document.formulario.email.value))
  {
    alert("el email es incorrecto")
    document.formulario.email.focus();
    document.formulario.email.select();
    return false;
  } 
}
//////// numeros reales con o sin signo
if(!textvacio(document.formulario.reales.value))
{
  bandera= validarealesconosinsigno(document.formulario.reales.value)
  if (!bandera==0) 
  { 
    alert("el numero real es  incorrecto")
    document.formulario.reales.focus();
    document.formulario.reales.select();
    return false;
  }  
}  

/////////numeros enteros con o sin signo
if(!textvacio(document.formulario.enteros.value))
{
  bandera= validaenterosconosinsigno(document.formulario.enteros.value)
  if (bandera!=0) 
  { 
    alert("el numero entero es  incorrecto")
    document.formulario.enteros.focus();
    document.formulario.enteros.select();
    return false;
  }  
}  

//valida rango numeros reales con o sin signo
if(!textvacio(document.formulario.rango1.value))
{
  bandera= validarealesconosinsigno(document.formulario.rango1.value)
  if(bandera!=0)
  {
    alert("el numero real es  incorrecto")
    document.formulario.rango1.focus();
    document.formulario.rango1.select();
    return false;
  }
  else
  {
   if(!validarango(document.formulario.rango1.value,-10.5,100.5))
   {
      alert("el numero real esta fuera de rango")
      document.formulario.rango1.focus();
      document.formulario.rango1.select();
      return false;
   }
 }
} 

//valida rango numeros enteros con o sin signo
if(!textvacio(document.formulario.rango2.value))
{
  bandera= validarealesconosinsigno(document.formulario.rango2.value)
  if(bandera!=0)
  {
    alert("el numero entero es  incorrecto")
    document.formulario.rango2.focus();
    document.formulario.rango2.select();
    return false;
  }
  else
  {
   if(!validarango(document.formulario.rango2.value,-100,10000))
   {
      alert("el numero entero esta fuera de rango")
      document.formulario.rango2.focus();
      document.formulario.rango2.select();
      return false;
   }
 }
} 
///valida si son solo letras 
  if(!validacaracteres(document.formulario.caracteres))
  {
    errores += "escriba el sexo \n";
  
  }

/// transforma a mayusculas
if(!textvacio(document.formulario.mayusculas.value))
{
	if(!validacaracteresconespacios(document.formulario.mayusculas))
  	{
    		errores += "no son letras \n";
	}
	else
	{
        	document.formulario.mayusculas.value = quitar(document.formulario.mayusculas.value);
	        document.formulario.mayusculas.value= convierte_mayusculas(document.formulario.mayusculas.value);
	}
}


/// transforma a minúsculas
if(!textvacio(document.formulario.minusculas.value))
{
	if(!validacaracteresconespacios(document.formulario.minusculas))
  	{
    		errores += "no son letras \n";
	}
	else
	{
        	document.formulario.minusculas.value = quitar(document.formulario.minusculas.value);
	        document.formulario.minusculas.value= convierte_minusculas(document.formulario.minusculas.value);
	}
}


/////////valida fecha 
if (!es_fecha(document.formulario.dia,document.formulario.mes,document.formulario.anio))
{
			errores += "Fecha incorrecta \n" 	
}	

/////////Convierte la primera letra en mayuscula letra capital
if(!textvacio(document.formulario.capital.value))
{
	if(!validacaracteresconespacios(document.formulario.capital))
  	{
    		errores += "no son letras \n";
	}
	else
	{
         document.formulario.capital.value = quitar(document.formulario.capital.value);
         document.formulario.capital.value = letracapital(document.formulario.capital);
	}
}


////////////validacion de radio button
if(!validaradio(document.formulario.a))
{
   errores += "Escoja una opcion en el radio\n";
}


//////////////validacion de select
//////ciudades guarda el valor escogido
if(!validaselect(document.formulario.ciudades.value,0))
{
   errores += "Escoja una opción en el select \n";
}


//////////////validacion de checkbox
///////manda todo el formulario con elements
if(!validacheckbox(document.formulario.elements))
{
   errores += "Escoja al menos una opción \n ";
}

if (textvacio(errores))
	{
		errores="datos correctos";
		return true;
	}
	else
	{
		alert (errores);
		errores="";
		return false;
	}
return true;
}
/////////////////// fin de validaformulario
