// ************************************************************************** //
// * Funcion que controla los caracteres introducidos en un campo de texto. * //
// * Se introduce la cadena y una condición, dependiendo de ella se compara * //
// * con los grupos de caracteres requeridos.																* //
// ************************************************************************** //
function caracter(cadena,tipo)
{
  var c=0;

  letras="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  hora="0123456789:";
  numero="0123456789.";
  numero2="0123456789";
  caracter_control="§#!|ºª\"\\·$%&/()=?¿¡{}+*'[]_,;:<>";
  letras_especiales="ñÑàèìòùáéíóúüçÁÉÍÓÚÜÇ ";
  signos_puntuacion=".,;:";

	if (tipo == "es_numero") {
  	for (c=0;c<cadena.length;c++) 
    	if (numero.indexOf(cadena.charAt(c)) == -1) 
				return false;
	}
	
	if (tipo == "es_numero2") {
  	for (c=0;c<cadena.length;c++) 
    	if (numero2.indexOf(cadena.charAt(c)) == -1) 
				return false;
	}
	
	if (tipo == "es_hora") {
  	for (c=0;c<cadena.length;c++) 
    	if (hora.indexOf(cadena.charAt(c)) == -1) 
	    return false;
	}
	
	if (tipo == "no_numero") {
  for (c=0;c<cadena.length;c++)
    if ((numero.indexOf(cadena.charAt(c)) != -1) ||(caracter_control.indexOf(cadena.charAt(c)) == 1))
      return false;
  }    

	if (tipo == "es_letra") {
  	for (c=0;c<cadena.length;c++)
    	if (letras.indexOf(cadena.charAt(c)) == -1)
      	return false;
  }

	if (tipo == "numero_letra") {
 		for (c=0;c<cadena.length;c++)
    	if ((letras.indexOf(cadena.charAt(c)) == -1) && (letras.indexOf(cadena.charAt(c)) == -1) && (letras_especiales.indexOf(cadena.charAt(c)) != -1))
      	return false;
  }

	if (tipo == "caracter_control") {
  	for (c=0;c<cadena.length;c++)
    	if (caracter_control.indexOf(cadena.charAt(c)) != -1) 
      	return false;
  }

	if (tipo == "no_especial") {
  	for (c=0;c<cadena.length;c++)
    	if ((numero.indexOf(cadena.charAt(c)) == -1) && (letras.indexOf(cadena.charAt(c)) == -1) && (signos_puntuacion.indexOf(cadena.charAt(c)) == -1) )
      	return false;
  }
	
	return true;		
}


function eliminaCerosIzq(cadena) {
	cad = new String(cadena);
	while(cad.substring(0,1)=="0" && cad.length>1)
  	cad=cad.substring(1,cad.length);
  return parseInt(cad);
}

function es_fecha(valor,opr) {
	fecha = new String(valor);
	
	pos1 = fecha.indexOf('-',0);
 	pos2 = fecha.indexOf('-',pos1+1);
	
	dia = fecha.substring(0,2);
  mes = fecha.substring(pos1+1,pos2);
  ano2 = fecha.substring(6,10);
	ano = eliminaCerosIzq (fecha.substring(pos2+1,fecha.length));
	
	if (fecha.length==0) {
		return true;
  }
		  
	if (pos1 == -1 || pos2 == -1 || pos1 != 2 || pos2 != 5) {
  	alert ("La Fecha introducida no es válida.\nEl formato correcto es 'dd-mm-aaaa'");
    return false;
  }
	   
	if (ano <= 1898) {
  	alert ("La Fecha es incorrecta.\nEl año ha de ser superior a 1898");
  	return false;
  }
  
	if ( !(caracter(dia,"es_numero")) || !(caracter(mes,"es_numero")) || !(caracter(ano2,"es_numero")) ) {
  	alert ("La Fecha ha de expresarse en números.\nEl formato correcto es 'dd-mm-aaaa'");
		return false;
  }
  
	if ((dia < 1) || (dia > 31) || (mes < 1) || (mes > 12) || (ano < 0)) {
    alert ("La Fecha es incorrecta.\nHay valores fuera de rango");
    return false;
  }
  
	if ( mes == 2 ) {
  	if ( dia > 29 ) {
    	alert ("La Fecha es incorrecta, Febrero no tiene ese día.\nEl formato correcto es 'dd-mm-aaaa'");
      return false;
    }
    
		if ((dia ==29 ) && !((ano % 400 == 0 ) || ((ano % 4 == 0) && !(ano % 100 ==0)))) {
    	alert ("La Fecha es incorrecta, el año " + ano + " no es bisiesto.\nEl formato correcto es 'dd-mm-aaaa'");
      return false;
    }
  }
  	else if (( dia == 31 ) && (( mes == 4 ) || ( mes == 6 ) || ( mes == 9 ) || ( mes == 11 ))) {
    	alert ("La Fecha es incorrecta, el mes especificado no tiene 31 días.\nEl formato correcto es 'dd-mm-aaaa'");
      return false;
    }
        
	if (opr==1) {
		if (!fecha_actual(dia,mes,ano))
    	return false;
		}									        
	
	return true;
}

 //********************************************************************************************
  //Función EsEmail
  //Comprueba si se trata de un email correcto o no 
  //*******************************************************************************************
  function EsEmail(campo)
  {
	var sPart1,sServer,iUltimopunto,iBlanco,bOk,iCont;	
	bOk=false;
	//buscamos algun blanco
	sBlanco=campo.split(" ");	
	if(sBlanco.length==1)
	{		
		sPart1=campo.split("@");		
		if(sPart1.length==2)
		{
			sPart2=sPart1[1].split(".");
			iUltimopunto=(sPart2.length);	
			if (iUltimopunto>=2)
			{
				//debido a que los arrays empiezan en 0
				iUltimopunto=iUltimopunto-1
				if((sPart2[iUltimopunto].length>1) & (sPart2[iUltimopunto].length<4))
				{
					//hasta aqui todo esta ok
					bOk=true;														
					for(iCont=0;iCont<iUltimopunto+1;iCont++)					{					
						
						//comprobamos si hay algo entre los puntos
						if(sPart2[iCont].length<=0)
						{
							bOk=false;							
						}
					}					
				}
			}			
		}
		
	}
	return(bOk);
  }
		  
// ****************************************************************************** //
// Función que controla el formato del código postal y que la provincia que
// se extrae a partir de los dígitos coincide con la provincia especificada.
// ****************************************************************************** //
function es_codigo(codigo,provincia) {
  
  cod = new String(codigo);
  prov = parseFloat(provincia);

  if ((cod.length > 5)||(cod.length < 5)) {
    alert ("El campo Código Postal debe tener 5 dígitos");
    return false;
  }
  else {
    if ( !caracter(cod,"es_numero2") ) {
	alert ("El campo Código Postal debe estar formado por números");
	return false;
    }
    else {
      indice = parseFloat(cod.substring(0,2));
      if ((indice < 1) || (indice > 52)) {
	alert ("El campo Código Postal no corresponde a ninguna provincia española");
	return false;
      }
      
      if (indice!=prov) {
        alert ("El campo Provincia no coincide con el campo Código Postal especificado");
	return false;
      }
      else {
        return true;
      }
    }
  }
  
  return true;
}

function getSelectValue (elemento) {
	return elemento.options[elemento.selectedIndex].value;
}

// ************************************************************************** //
// Función que compara la letra obtenida a partir de los dígitos 
// proporcionados, con la que espeficica el usuario
// ************************************************************************** //
function valida_dni (numero, letra) {
	letras = new Array("T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E");
	num = eliminaCerosIzq(numero);
	if(num<23) { indice = num; }
	else  { indice = numero-(parseInt(num/23)*23); }
	
	if (letra.toUpperCase() != letras[indice])
	{
		alert ("Por favor, introduzca un N.I.F. correcto.");
		return false;
	}
	return true;
}

// ************************************************************************** //
// Función que controla el formato de un NIF introducido y separa la letra 
// del número.
// ************************************************************************** //
function disgrega_NIF (cadenaNIF) {
        if (cadenaNIF.length > 9) {
                alert ("El N.I.F. no puede tener más de 9 caracteres");
                return false;
        }
  numero = cadenaNIF.substring(0, cadenaNIF.length-1);
  letra = cadenaNIF.substring(cadenaNIF.length-1);
  if ((!caracter(numero,"es_numero")) || (!caracter(letra,"es_letra"))) {
    alert("Por favor, introduzca N.I.F. correcto.");
    return false;
  }
  else {
    numero = cadenaNIF.substring(0, cadenaNIF.length-1);
    letra = cadenaNIF.substring(cadenaNIF.length-1);
    if (!(valida_dni(numero,letra))) 
      return false;
  }
  return true;
}

function eliminaCerosIzq(cadena) {
	cad = new String(cadena);
	while(cad.substring(0,1)=="0" && cad.length>1)
  	cad=cad.substring(1,cad.length);
  return parseInt(cad);
}

//********************************************************************************************
// Función es_hora
// Comprueba si la hora pasada corresponde con el formato hh:mm si no es asi devuelve un msg de error
//*******************************************************************************************
function es_hora(valor) {
	hora = new String(valor);
	
	hh = parseInt(hora.substring(0,2));
	separador = hora.substring(2,3);
        mm = parseInt(hora.substring(3,5));
        
        if (separador!=":") {            
            return false;
        }
        
        if (hh > 23 || hh < 0) {            
            return false;
        }
        
        if (mm > 59 || mm < 0) {            
            return false;
        }
        
        return true;
}

function AutocompletarCombo(objcombo,objcuadro) {
	    var sw=0;
	    for (var i=0; i<objcombo.length; i++) {
			var combo=new String(objcombo[i].text);
			var cuadro=new String(objcuadro.value);
			var pos=cuadro.length;
			
			combo=combo.toLowerCase();
			cuadro=cuadro.toLowerCase();
			
			combo=combo.substring(pos,0);
			
			if (combo == cuadro && sw == 0) {
				objcombo[i].selected = true;
				sw=1;
			}
			if (cuadro == "") {
				objcombo[0].selected = true;
			}
		}		
  }