var _separadorFecha = "/";


function esFecha(campo, nulable, nombreCampo){
    var dia;
	var mes;
	var anyo;
	var fecha;
	
	var diasMes = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

	
	if (nulable && campo.value.length==0) {
		return true;
	}
	var cadena=campo.value;
	var re=/^([0-9]{1,2})[\/\-\.]([0-9]{1,2})[\/\-\.]([0-9]{4})$/ig;
	if (cadena.match(re)){
		// Formateamos el campo
		dia  = parseInt(Number(cadena.replace(re,"$1")));
		mes  = parseInt(Number(cadena.replace(re,"$2")));
		anyo = parseInt(Number(cadena.replace(re,"$3")));
		if (
			((mes>0) && (mes<=12) && (dia>0) && (dia<=diasMes[mes])) ||
			((mes==2) && (dia==29) && ((anyo%4)==0))
			) {
			campo.value=dia+_separadorFecha+mes+_separadorFecha+anyo;
			return true;
		}
	}

	alert("El Campo "+nombreCampo+" debe contener una fecha válida");
	try {
		campo.focus();
	} catch (myErr){
	}

	return false;
}

function esEntero(campo,minLen, maxLen, nombreCampo){
// nulo: Escribir true si puede ser nulo
// comprueba que se haya rellenado el campo con un entero
	// Si se permiten valores nulos
	if ((campo.value.length>=minLen) && (campo.value.length<=maxLen)){
		// No se permiten caracteres alfabéticos
		var cadena=campo.value;
		var re=/[^-?0-9]/ig;
		if (cadena.match(re)){
			alert("El campo "+nombreCampo+" no puede contener letras.");
			return false;
		}else{
			return true;
		}
	} else {
		if (undefined!=nombreCampo) { nombreCampo="'"+nombreCampo+"'";}
		alert("El Campo "+nombreCampo+" debe tener entre "+minLen+" y "+maxLen+" dígitos");
		try {
			campo.focus();
		} catch (myErr){
		}
		return false;
	}

}

function trim(campo){
    // elimina los blancos al principio y al final de una cadena
	// eliminamos blancos del principio
  	while ((campo.value.charAt(0)==' ')&&(campo.value.length>0)) {
		campo.value=campo.value.substr(1);
	}
	// eliminamos blancos del final
  	while ((campo.value.charAt(campo.value.length-1)==' ')&&(campo.value.length>0)) {
		campo.value=campo.value.substr(0,campo.value.length-1);
	}
}

function trimCadena(cadena){
    // elimina los blancos al principio y al final de una cadena
	// eliminamos blancos del principio
  	while ((cadena.charAt(0)==' ')&&(cadena.length>0)) {
		cadena=cadena.substr(1);
	}
	// eliminamos blancos del final
  	while ((cadena.charAt(cadena.length-1)==' ')&&(cadena.length>0)) {
		cadena=cadena.substr(0,cadena.length-1);
	}
	return cadena;
}


function esObligatorio(campo,nombreCampo){

// comprueba que se haya rellenado el campo
  if (campo.value.length==0){
    alert("El campo "+nombreCampo+" es obligatorio.");
	try {
		campo.focus();
	} catch (myErr){
	}
	return false;
  }else{
    return true;
  }
}


function palabras_prohibidas(mensaje){

// las palabras siempre en minusculas

var palabras= new Array( '\'', '"'); 
var i

mensaje=mensaje.toLowerCase();
for (i=0;i<=(palabras.length-1);i++)
    {
    if (mensaje.indexOf(palabras[i])!=-1)
	   {
	   return 1;
	   }
	}
return 0;
}


// Recibe en campo input y comprueba si es un texto entre minLen y 
// maxLen caracteres.
function esTexto(campo,minLen,maxLen,nombreCampo){
	trim(campo);
	// comprobamos el tamaño del campo una vez eliminados los blancos

	if ((campo.value.length>=minLen) && (campo.value.length<=maxLen) 
	    && (campo.value!="@vacio@") && (campo.value!="@nuevo@")){
		return true;
	} else {
		if (undefined!=nombreCampo) { nombreCampo="'"+nombreCampo+"'";}
		alert("El Campo "+nombreCampo+" debe tener entre "+minLen+" y "+maxLen+" caracteres");
		campo.focus();
		return false;
	}
}



function esDecimal(campo, minLenEntero, maxLenEntero, minLenDec, maxLenDec, nombreCampo) {
  trim(campo);
  var cadena  = campo.value.replace(",",".");
  campo.value = campo.value.replace(",",".");
  pos = cadena.lastIndexOf(".");

	if (pos==-1){
		/*
		 * *** Suprimido para solo coger ,
		re = new RegExp("^[0-9]{"+minLenEntero+"\\."+maxLenEntero+"}$", "ig")
		if (re.exec(cadena)!=null){
			return true;
		}
		*/
		re = new RegExp("^-?[0-9]{"+minLenEntero+","+(maxLenEntero-maxLenDec)+"}$", "ig")
		if (re.exec(cadena)!=null){
			return true;
		} else {
		   alert("El valor que ha introducido para "+nombreCampo+" no es un número decimal válido, el formato correcto es de "+minLenEntero+" a "+(maxLenEntero-maxLenDec)+" dígitos para la parte entera y de "+minLenDec+" a "+maxLenDec+" dígitos para la parte decimal separados por punto.");
		   campo.focus();
		   return false;
		}
	}
	if (maxLenDec < 1){
		maxLenDec = 1;
	}
	
	/*
	 * *** Suprimido para solo coger ,
	re = new RegExp("^[0-9]{"+minLenEntero+","+maxLenEntero+"}\\.[0-9]{1,"+maxLenDec+"}$", "ig")
	if (re.exec(cadena)!=null){
		return true;
	} 
	*/
	re = new RegExp("^-?[0-9]{"+minLenEntero+","+(maxLenEntero-maxLenDec)+"}\\.[0-9]{"+minLenDec+","+maxLenDec+"}$", "ig")
	if (re.exec(cadena)!=null){
		return true;
	} else {
	   alert("El valor que ha introducido para "+nombreCampo+" no es un número decimal válido, el formato correcto es de "+minLenEntero+" a "+(maxLenEntero-maxLenDec)+" dígitos para la parte entera y de "+minLenDec+" a "+maxLenDec+" dígitos para la parte decimal separados por punto.");
 	   campo.focus();
	   return false;
	}
}



// Funcion: aplanaCadena
// Input: cadena de texto original
// Output: cadena de texto convertida
// Funcion que dada una cadena nos la devuelve convertida a mayúsculas sin acentos y sin espacios al principio o al final
// Util para hacer comparación de cadenas.
function aplanaCadena(cadenaAplanar){
	var cadena=cadenaAplanar;
	cadena=cadena.toUpperCase();
	cadena=cadena.replace("Ä","A");
	cadena=cadena.replace("Ë","E");
	cadena=cadena.replace("Ï","I");
	cadena=cadena.replace("Ö","O");
	cadena=cadena.replace("Ö","U");
	
	cadena=cadena.replace("Â","A");
	cadena=cadena.replace("Ê","E");
	cadena=cadena.replace("Î","I");
	cadena=cadena.replace("Ô","O");
	cadena=cadena.replace("Û","U");
	
	cadena=cadena.replace("Á","A");
	cadena=cadena.replace("É","E");
	cadena=cadena.replace("Í","I");
	cadena=cadena.replace("Ó","O");
	cadena=cadena.replace("Ú","U");
	for(i=0;((i<cadena.length)&&(cadena.charAt(0)==" "));i++){
		cadena=cadena.substr(1,(cadena.length-1));
	}
	for(i=cadena.length;((i>0)&&(cadena.charAt(cadena.length-1)==" "));i--){
		cadena=cadena.substr(0,(cadena.length-1));
	}
	return (cadena);
}

function letraDni(numero){
   caracteres= 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','F');
   return ( caracteres[(parseInt(numero) % 23)]);
}

function esDni(dni){
  if(dni.length<5){
    alert("El DNI introducido no es correcto");
    return false;
  }else{
    numeros = dni.slice(0,dni.length-1);
    letra   = dni.slice(dni.length-1).toUpperCase();
    if(isNaN(numeros)){
	  alert("El DNI introducido no es correcto");
      return false;
    }
    if(!isNaN(letra)){
	  alert("El DNI introducido no es correcto");
      return false;
    }    
	resultado = (letraDni(numeros)==letra);
	if(!resultado){
		alert("El DNI introducido no es correcto");
	}
    return(resultado);
  }
}


//Función que devuelve true si fecha1 es menor que fecha 2 o alguna de las fechas
//introducidas es nula. Devuelve false en cualquier otro caso
function compararFechas(fecha1,fecha2){
	
	var f1 = new Date(fecha1.value.substr(6,4),fecha1.value.substr(3,2),fecha1.value.substr(0,2)) ;
	var f2 = new Date(fecha2.value.substr(6,4),fecha2.value.substr(3,2),fecha2.value.substr(0,2)) ;	
		
	if ((fecha1.value.length==0) || (fecha2.value.length==0) || (f1<f2)){
		return true ;
	}else{
		alert("La fecha de inicio debe ser anterior a la fecha de finalización") ;
	    return false ;
	}
}

function comprobarArrobas(cadena){
	lista = cadena.split("@") ;
	if ((cadena.charAt(0)=='@') || (cadena.charAt(cadena.length-1)=='@')){		
		return false ;
	}
	if (lista.length!=2){
		return false
	}
	return true ;

}

//Función que comprueba que una dirección de correo está bien escrita.
//
function esMailValido(campo,minLen,maxLen,nombreCampo){
	trim(campo);
	// comprobamos el tamaño del campo una vez eliminados los blancos
	if(campo.value == "" && minLen == 0){
		return true;
	}else if(campo.value == "" && minLen > 0){
		alert("El Campo "+nombreCampo+" debe tener entre "+minLen+" y "+maxLen+" caracteres");
		campo.focus();
		return false;		
	}
	
	campo.value=campo.value.replace(/\"/g,"`");
	campo.value=campo.value.replace(/\'/g,"`");
	campo.value=campo.value.replace(/´/g,"`");
	
	if ((campo.value.length>=minLen) && (campo.value.length<=maxLen) && (campo.value!="")){
		//Comrprobamos que no empieza ni acaba con @ y que solo contiene una.
		if (comprobarArrobas(campo.value)){
			return true;
		}else{
			alert("La dirección de correo que ha introducido no es correcta") ;
			return false ;
		}	
	}else{
		alert("El Campo "+nombreCampo+" debe tener entre "+minLen+" y "+maxLen+" caracteres");
		campo.focus();
		return false;				
	}
}