<!--

// Funcion que saca el valor seleccionado de un radiobutton
function getCheckedValue(radioObj) {
	
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}
	
	
//Funcion que limpia el formulario. Vale para campos select, text, textarea y password.
function limpiarFormulario() {
  document.formulario.reset();
}

//Campo numerico de al menos 9 digitos
function chkTelefono(campo) {
	if (isNaN(campo.value) || (campo.value.length < 9)){
		alert("Debe introducir un n?mero de tel?fono v?lido");
		campo.focus();
		campo.blur();
		campo.select();
		return false;
	}else{
		return true;
	}
}

//Campo numerico que no contenga un .
function chkEntero(campo){
	if (!isNaN(campo.value)) {
		// es un numero 
		var numero = campo.value;
		if (numero.indexOf(".") != -1) {
			alert("Debe introducir un numero entero");
			campo.focus();
			campo.blur();
			campo.select();
			return false;
		}else{
			return true;
	}
  } else {
  	alert("Debe introducir un numero entero");
	campo.focus();
	campo.blur();
	campo.select();
  	return false;
  }
}
		 

//Campo numerico de al menos 5 digitos
function chkCP(campo){
	if (isNaN(campo.value) || (campo.value.length < 5)){
		alert("Debe introducir un C?digo Postal v?lido de 5 cifras");
		campo.focus();
		campo.blur();
		campo.select();
		return false;
	}else{
		return true;
	}

}

// select con algun valor seleccionado
function selectSeleccionado(selector) {
	if (selector.selectedIndex == -1) {
		alert("Debe seleccionar un elemento");
		selector.focus();
		selector.blur();
		return false;
	} else {
		return true;
	}
}

function chkSelectMultiple(selector) {
	if (selector.options.length <= 0) {
		alert("Debe seleccionar un elemento");
		selector.focus();
		selector.blur();
		return false;
	} else {
		return true;
	}
}

//Campo numerico
function chkNumero(campo){
	if (isNaN(campo.value)){
		alert("Debe introducir un n?mero v?lido");
		campo.focus();
		campo.blur();
		campo.select();
		return false;
	}else{
		return true;
	}
}

//Campo sigue estructura de direccion email
function chkEmail(campo){
  var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
  var regex = new RegExp(emailReg);
  	if (!regex.test(campo.value)) {
   		alert("Debe introducir una direcci?n de correo v?lida");
		   campo.focus();
		   campo.blur();
		   campo.select();
		   return false;
	  }else{
		   return true;
	  }
}

//Campo no en blanco
function chk(campo){
	if (campo.value == ""){
		 alert("Debe introducir un valor en el campo seleccionado");
//alert("Es necesario introducir todos los datos");
		 campo.focus();
		 campo.blur();
		 campo.select();
		 return false;
	}else{
		 return true;
	}
}

//Campo no en blanco sin sacar un mensaje
function chkSinMensaje(campo){
	if (campo.value == "")	 
		return false;
	else
		 return true;
}

//Campo no vacio
function chkVacio(campo){

	return campo.value == "" ? 1: 0 ;

}

//Anyo dado es bisiesto
function esBisiesto(anio) {
return (((anio % 4 == 0) && (anio % 100 != 0)) || (anio % 400 == 0)) ? 1 : 0;
}

//Comprueba fecha existente
function diaCorrecto(dia,mes,anio){

var dias=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

	dias[1]=dias[1]+esBisiesto(anio);
	return ((anio>1900) && (mes<13)  && (dia<=dias[mes-1]));
//	return ((anio>1900) && (mes<13)  && (dia<=dias[mes-1])) ? 1:0;
}

//Comprueba hora existente en formato 24h
function horaCorrecta(hora,min){
	return ((hora<24) && (min<60) && (hora>=0) && (min>=0));
}

//Fecha en formato correcto
function chkFecha(campo){

var plantilla = new RegExp(/^\d+\/\d+\/\d{4}$/gi) ;
var primero = campo.value.indexOf("/");
var segundo = campo.value.indexOf("/",primero+1);
if ((primero > -1) && (segundo > -1)) {
    var dia=parseInt(campo.value.substring(0,primero),10);
    var mes=parseInt(campo.value.substring(primero+1,segundo),10);
    var anio=parseInt(campo.value.substring(segundo+1,10),10);}
 else
   {alert("Debe introducir una fecha completa usando como caracter de separacion la barra '/'");
    campo.focus();
    campo.blur();
    campo.select();
    return false;}

if ((!plantilla.test(campo.value)) || (!diaCorrecto(dia,mes,anio)))
             {alert("Debe introducir una fecha valida en el formato dd/mm/aaaa");
	      campo.focus();
	      campo.blur();
	      campo.select();
	      return false;}
else
	return true;

}

//Fecha en formato correcto
function chkFechaSeparada(dia,mes,anio){

if ((!diaCorrecto(dia,mes,anio))) {
		  alert("Debe introducir una fecha valida.");
	      return false;
} else
	return true;
}


//Timestamp en formato correcto
function chkTimestamp(campo){

var plantilla = new RegExp(/^\d+\/\d+\/\d{4} \d+\:\d+$/gi);
var primero = campo.value.indexOf("/");
var segundo = campo.value.indexOf("/",primero+1);
var espacio = campo.value.indexOf(" ");
var dospuntos = campo.value.indexOf(":");
if ((primero > -1) && (segundo > -1) && (espacio > -1) && (dospuntos > -1)) {
    var dia=parseInt(campo.value.substring(0,primero),10);
    var mes=parseInt(campo.value.substring(primero+1,segundo),10);
    var anio=parseInt(campo.value.substring(segundo+1,10),10);
    var hora=parseInt(campo.value.substring(espacio,dospuntos));
    var min=parseInt(campo.value.substring(dospuntos+1,campo.value.length));
    }
 else
   {alert("Debe introducir una fecha y hora completas con el formato 'dd/mm/yyyy hh:mm'");
    campo.focus();
    campo.blur();
    campo.select();
    return false;}

//    alert("uno="+plantilla.test(campo.value)+" dos="+diaCorrecto(dia,mes,anio)+" tres="+horaCorrecta(hora,min));
//alert (plantilla.test(campo.value) && diaCorrecto(dia,mes,anio) && horaCorrecta(hora,min))


if (plantilla.test(campo.value) && diaCorrecto(dia,mes,anio) && horaCorrecta(hora,min))
        return true;
else
     {alert("Debe introducir una fecha valida en el formato 'dd/mm/aaaa hh:mm'");
      campo.focus();
      campo.blur();
      campo.select();
      return false;}
}


//Cuenta bancaria en formato correcto
function chkCCC(campo){

var plantilla = new RegExp(/^\d{4}\-\d{4}\-\d{2}\-\d{10}$/gi) ;
var primero = campo.value.indexOf("-");
var segundo = campo.value.indexOf("-",primero+1);
var tercero = campo.value.indexOf("-",segundo+1);
if ((primero > -1) && (segundo > -1) && (tercero > -1)) {
    var entidad=parseInt(campo.value.substring(0,primero),10);
    var sucursal=parseInt(campo.value.substring(primero+1,segundo),10);
    var codigo=parseInt(campo.value.substring(segundo+1,tercero),10);
    var cuenta=parseInt(campo.value.substring(tercero+1,23),10);
    }
else
   {alert("El C.C.C. introducido no se ajusta al formato\n'XXXX-XXXX-XX-XXXXXXXXXX'");
    campo.focus();
    campo.blur();
    campo.select();
    return false;}

if (!plantilla.test(campo.value))
             {alert("Debe introducir  c?digo de cuenta cliente en formato\n'XXXX-XXXX-XX-XXXXXXXXXX'");
	      campo.focus();
	      campo.blur();
	      campo.select();
	      return false;}

else
        return true;

}





//Campo no contiene comillas
function chkComillas(campo){
  var comillasReg = "\.*\'\.*";
  var regex = new RegExp(comillasReg);
  	if (regex.test(campo.value)) {
   		alert("No se permite usar comillas en los campos de formulario.");
		   campo.focus();
		   campo.blur();
		   campo.select();
		   return false;
	  }else{
		   return true;
	  }
}


//Campo no tiene valor = "nada"
function chkNada(campo){
	if (campo.options[campo.options.selectedIndex].value == "nada"){
		 alert("Debe seleccionar un valor en el desplegable.");
		 campo.focus();
		 return false;
	}else{
		 return true;
	}
}

//Longitud del campo no sobrepasa limite
function chkNumChars(campo,limite){
	if (campo.value.length > limite) {
		alert("Este valor no admite mas de " + limite + " caracteres.");
		campo.focus();
		campo.blur();
		campo.select();
		return false;
	}else{
		return true;
	}

}

//Longitud del campo es mayor que limite
function chkMinChars(campo,limite){
	if (campo.value.length < limite) {
		alert("Este valor debe tener al menos una longitud de " + limite + " caracteres.");
		campo.focus();
		campo.blur();
		campo.select();
		return false;
	}else{
		return true;
	}

}

//Campos iguales numerico
function chkClaves(campo1,campo2){
	if (campo1.value!=campo2.value){
		alert("La confirmacion de la clave no coincide con el original");
		campo1.focus();
		campo1.blur();
		campo1.select();
		return false;
	}else{
		return true;
	}
}


//fecha2 es posterior o igual a fecha1
function fechaPosterior(campo1,campo2){
    var primero = campo1.value.indexOf("/");
    var segundo = campo1.value.indexOf("/",primero+1);
    var dia=campo1.value.substring(0,primero);
    var mes=campo1.value.substring(primero+1,segundo);
    var anio=campo1.value.substring(segundo+1,10);
    var fecha1=anio+mes+dia;
    primero = campo2.value.indexOf("/");
    segundo = campo2.value.indexOf("/",primero+1);
    dia=campo2.value.substring(0,primero);
    mes=campo2.value.substring(primero+1,segundo);
    anio=campo2.value.substring(segundo+1,10);
    fecha2=anio+mes+dia;
if (fecha2<fecha1) {
		alert("Esta fecha debe ser igual o posterior.");
		campo2.focus();
		campo2.blur();
		campo2.select();
		return false;
	}else{
		return true;
	}
}



<!-- Devuelve el maximo de dos valores -->
function max (uno, dos) {
if (uno>dos)
   return uno
else return dos
}

// CIF Correcto
// Que hay algo escrito y es un CIF valido
// Si el CIF empieza por P,Q o S, el digito de control debe ser letra, no digito
function chkCIF (campoCIF) {
	var CIF = campoCIF.value;
	var esNIF = chkNIF(campoCIF,false);
	if (esNIF)
		return true;
	// un cif debe tener 9 cifras
	// la primera indica el tipo de sociedad
	// el ultimo digito indica el digito de control
	// comprobamos la longitud del CIF
	// ademas de comprobar si el campo no esta vacio
	if (!isNaN(parseInt(CIF.substring(0,1)))) {
		alert ('NIF incorrecto o el primer digito de un CIF tiene que ser una letra');
		return false;
	}
	var letraInicial = CIF.substring(0,1).toUpperCase();
	if (chkMinChars(campoCIF,9) && chkNumChars(campoCIF,9) && chk(campoCIF)) {
	// primero comprobamos que los numeros sean validos
	var seguir = new Boolean(true);
	var esNumeroUltimoElemento = new Boolean (true);
	for (var i=1;((i<CIF.length) && (seguir));i++) 
        // comprobamos que el caracter sea un caracter
		if (isNaN(parseInt(CIF.substring(i,i+1)))) 
			seguir = false; 
			
		// comprobamos el tipo de letra inicial
		if ((letraInicial != 'P') && (letraInicial != 'Q') && (letraInicial != 'S')) 
			esNumeroUltimoElemento = !isNaN(parseInt(CIF.substring(8,9)));
			
		// si es un numero el ultimo elemento
		if (!((seguir) && (esNumeroUltimoElemento))) {
				alert ("El CIF introducido no es correcto, debe tener el formato A99999999");
				return false;
		}
			// el numero sigue siendo correcto
		else {
				// primero sumamos los digitos pares
				// se van a verificar los digitos del 2 al 8
				var sumaDigitosPares = parseInt(CIF.substring(2,3));
				sumaDigitosPares += parseInt(CIF.substring(4,5)); 
				sumaDigitosPares += parseInt(CIF.substring(6,7));
				// tratamos las posiciones impares
				var sumaDigitosImpares = 0;
				// primer digito impar
				var digitoImpar = parseInt(CIF.substring(1,2))* 2;
				// si el digitoImpar es mayor que 10 ,debemos sumar sus partes
				if (digitoImpar >= 10)
				 	sumaDigitosImpares += parseInt(String(digitoImpar).substring(0,1)) +  parseInt(String(digitoImpar).substring(1,2));	
				else
					sumaDigitosImpares += digitoImpar;
			    // segundo digito impar
				digitoImpar = parseInt(CIF.substring(3,4))* 2;
				// si el digitoImpar es mayor que 10 ,debemos sumar sus partes
				if (digitoImpar >= 10)
				 	sumaDigitosImpares += parseInt(String(digitoImpar).substring(0,1)) +  parseInt(String(digitoImpar).substring(1,2));	
				else
					sumaDigitosImpares += digitoImpar;	
				// tercer digito impar
				digitoImpar = parseInt(CIF.substring(5,6))* 2;
				// si el digitoImpar es mayor que 10 ,debemos sumar sus partes
				if (digitoImpar >= 10)
				 	sumaDigitosImpares += parseInt(String(digitoImpar).substring(0,1)) +  parseInt(String(digitoImpar).substring(1,2));	
				else
					sumaDigitosImpares += digitoImpar;
				// cuarto digito impar
				digitoImpar = parseInt(CIF.substring(7,8))* 2;
				// si el digitoImpar es mayor que 10 ,debemos sumar sus partes
				if (digitoImpar >= 10)
				 	sumaDigitosImpares += parseInt(String(digitoImpar).substring(0,1)) +  parseInt(String(digitoImpar).substring(1,2));	
				else
					sumaDigitosImpares += digitoImpar;
				
				var sumaParcial = sumaDigitosPares + sumaDigitosImpares;
				sumaParcial = sumaParcial % 10;
				sumaParcial = 10 - sumaParcial;
				if ((letraInicial == 'P') && (letraInicial == 'Q') && (letraInicial == 'S')) {
					suma = suma + 64;
					// pasamos el valor de la suma a caracter
					if ((CIF.substring(8,9).toUpperCase()) == (String.fromCharCode(sumaParcial).toUpperCase()))
						return true;
					else
						alert ("El CIF introducido no es correcto, debe tener el formato A99999999");
				}
					else if (parseInt(CIF.substring(8,9)) == (String(sumaParcial).substring(String(sumaParcial).length -1,String(sumaParcial).length)))
						return true;
					else
						alert ("El CIF introducido no es correcto, debe tener el formato A99999999");	
			}	
	}
	else 
		return false;
		
}

// NIF Correcto
// Que hay algo escrito y es un NIF valido
// Si el NIF empieza por X tambi?n vale
 function chkNIF(campo, mensaje) {
  var nifReg = "^[X]?\\d{8}\\w$";
  var regex = new RegExp(nifReg);
  	if (!regex.test(campo.value)) {
  		if (mensaje) {
   		alert("Debe introducir un NIF en formato 99999999A o X99999999A");
		   campo.focus();
		   campo.blur();
		   campo.select();
		   }
		   return false;
	  } 
 
  var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
  var dni = campo.value.substring((campo.value.indexOf('X')+1)%9, campo.value.length-1);
  var numero = dni%23;
  return letras.substring(numero,numero+1)==campo.value.substring(campo.value.length-1,campo.value.length);
 }
 
 /**** FUNCIONES DE VALIDACION DE NIF Y NIE EXTRANJERO ***********/
 
 function str_replace(search, replace, subject) {
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'
 
    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 
    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    };
 
    return sa ? s : s[0];
}


 //Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error
function valida_nif_cif_nie(a) 
{
	var temp=a.toUpperCase();
	var cadenadni="TRWAGMYFPDXBNJZSQVHLCKE";
 
	if (temp!==''){
		//si no tiene un formato valido devuelve error
		if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			return 0;
		}
 
		//comprobacion de NIFs estandar
		if (/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			posicion = a.substring(8,0) % 23;
			letra = cadenadni.charAt(posicion);
			var letradni=temp.charAt(8);
			if (letra == letradni)
			{
			   	return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//algoritmo para comprobacion de codigos tipo CIF
		suma = parseInt(a[2])+parseInt(a[4])+parseInt(a[6]);
		for (i = 1; i < 8; i += 2)
		{
			temp1 = 2 * parseInt(a[i]);
			temp1 += '';
			temp1 = temp1.substring(0,1);
			temp2 = 2 * parseInt(a[i]);
			temp2 += '';
			temp2 = temp2.substring(1,2);
			if (temp2 == '')
			{
				temp2 = '0';
			}
 
			suma += (parseInt(temp1) + parseInt(temp2));
		}
		suma += '';
		n = 10 - parseInt(suma.substring(suma.length-1, suma.length));
 
		//comprobacion de NIFs especiales (se calculan como CIFs)
		if (/^[KLM]{1}/.test(temp))
		{
			if (a[8] == String.fromCharCode(64 + n))
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//comprobacion de CIFs
		if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp))
		{
			temp = n + '';
			if (a[8] == String.fromCharCode(64 + n) || a[8] == parseInt(temp.substring(temp.length-1, temp.length)))
			{
				return 2;
			}
			else
			{
				return -2;
			}
		}
 
		//comprobacion de NIEs
		//T
		if (/^[T]{1}/.test(temp))
		{
			if (a[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
 
		//XYZ
		if (/^[XYZ]{1}/.test(temp))
		{
			pos = str_replace(['X', 'Y', 'Z'], ['0','1','2'], temp).substring(0, 8) % 23;
			if (a[8] == cadenadni.substring(pos, pos + 1))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
	}
 
	return 0;
}
//-->

function onlyLettersAndNumbers( string )
	{
		chars = string.toString();
		
		for ( var i = 0; i < chars.length; i++ )
		{
			var char = chars.charAt( i );
			
			if ( ( char < "0" ) ||
			     ( char > "9" && char < "A" ) ||
			     ( char > "Z" && char < "a" ) ||
			     ( char > "z" ) )
				return false;
		}
		
		return true;
	}

//-->
