	/************************************* Expresiones reculares *****************************************/
	/**/
	/**/   var NIF= /^([0-9]{8}[a-zA-Z])$/;        // Valído el número del NIF
	/**/   var NIE= /^\X([0-9]{7}[a-zA-Z]{1})$/;   // Valído el número del NIE
	/**/   var Email = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
	/**/   var MAC = /^([0-9A-Fa-f]{2})\:([0-9A-Fa-f]{2})\:([0-9A-Fa-f]{2})\:([0-9A-Fa-f]{2})\:([0-9A-Fa-f]{2})\:([0-9A-Fa-f]{2})$/;
	/**/   var Telefono = /^(9|6)[0-9]{8}$/;
	/**/   var Hora = /^([0-2]{1}[0-9]{1})\:([0-5]{1}[0-9]{1})$/; // Valida la hora con el formato HH:MM
	/**/   var CIF = /^([a-zA-Z][0-9]{7}[0-9a-zA-Z])$/;                      // Validar numero C.I.F
	/**/
	/**/   var Fecha1 = /^([1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1})\-([0-1]{1}[0-9]{1})\-([0-3]{1}[0-9]{1})$/; // Formato de la fecha: aaaa-mm-dd
	/**/   var Fecha2 = /^([0-9]{1,2})\-([0-9]{1,2})\-([1-2]{1}[0-9]{1}[0-9]{1}[0-9]{1})$/; // Formato de la fecha: dd-mm-aaaa
	/**/   var Fecha3 = /^([0-9]{2}[/][0-9]{2}[/][0-9]{4})$/;
	/**/   var Decimal1 = /^([0-9]*)\,([0-9]*)$/;
	/**/   var Decimal2 = /^([0-9]*)\.([0-9]*)$/;
	/**/   var Entero = /^([0-9]*)$/;
	/**/   var CP= /^([- a-zA-Z0-9a-zA-Z]{3,10})$/;        // Valído el número del codigo postal.
	/**/   var Metal= /^([0-9]{4,6}[,|.][0-9]{1})$/;        
	/**/   var Dolar= /^([0-9]{1}[,|.][0-9]{4})$/;        
	/**/   // Falta depurarla para valores entre 0 y 255
	/*****************************************************************************************************/

	/******************************************************************************************************************/
	/* Función que me valida los datos según el tipo que sea                                                          */
	/******************************************************************************************************************/
	var provincia;  //variable que almacena el codigo de la provincia para comprobar que el codigo postal sea correcto.
	
	function validar_campo( nombre, val )
		{
			// Variales para el calculo del CIF
				var suma_pares = 0;     // Contiene la suma de los numeros pares
				var suma_impares = 0;   // Contiene la suma de los numeros impares
				var numero_impar = 0;
				var num = 0;
				var valor;
			 //Pongo la cadena recibida en mayusculas
//			   if (nombre != 'fecha') {
//					valor = val.value.toUpperCase();
//			   		} else {
//					valor = val.value;	
//					}
			
				//alert ("Nombre: "+nombre+" - Valor: "+val.value);
				//if (valor) 
				//{
				valor=val.value;

				switch (nombre)
					{
					/*********************************************************************************/
					case 'nif':
								valor = val.value.toUpperCase();
								if (valor == 0) {
									return true;
								} else {
									if ( !NIF.exec(valor) ) {
										NoValido(val);
										return false;	
									}else{
										//Ponemos un 1 para que nos deje comprobar los nif que empiezan por 0
										dni="1"+valor.substring(0,valor.length-1);
										dni=parseInt(dni)%100000000; //Quitamos el 1 de delante.
	
										tmp = (dni % 23);
										LetraNIF = dimeLetra (dni % 23);
	
										if (valor.substring(valor.length-1,valor.length)==LetraNIF) return true;
										else	return false;
									}
								}
								break;
							
							
					/*********************************************************************************/
					case 'cif':
								valor = val.value.toUpperCase();
								if ( !CIF.exec(valor) ) {
									NoValido(val);
									return false;
								}else {
									digito_control_a_comprobar = valor.substr (valor.length-1,valor.length);	
									//digito_control_a_comprobar = parseInt (digito_control_a_comprobar);
									suma_pares=0;
									suma_impares=0;
									numeros_centrales = valor.substr (1,7);	
									// Sumo los pares e impares
									for (i=0; i < numeros_centrales.length; i++) {
										if (i % 2 != 0) {
											num = numeros_centrales.substr (i,1);
											num = parseInt (num);
											suma_pares += num;
										}else{
											num = numeros_centrales.substr (i,1);
											num = parseInt (num);
											
											numero_impar = num * 2;
											numero_impar = parseInt (numero_impar);
											if ( numero_impar > 9 )	{
												parte_entera = numero_impar / 10;
												parte_entera = parseInt (parte_entera);
												resto = numero_impar % 10;
												temp = parte_entera + resto;
												suma_impares += temp;
											}else{
												suma_impares += numero_impar;
											}
										}
									}
									tmp = suma_pares + suma_impares;
									
									digito_control = tmp % 10;
									
									digito_control = parseInt (digito_control);
									
									digito_control = 10 - (tmp % 10);
	
									letras = "JABCDEFGHI";  
																		
									if ((digito_control_a_comprobar == digito_control) || (digito_control_a_comprobar == letras.substr(digito_control,1))) return true;
									else return false;
								}
								break;
							
					/*********************************************************************************/
					case 'nie':
								valor = val.value.toUpperCase();
								if ( !NIE.exec(valor) ) {
									NoValido(val);	
									return false;
								}else{
									dni="1"+valor.substring(1,valor.length-1);
									dni=parseInt(dni)%10000000; //Quitamos el 1 de delante.
									tmp = (dni % 23);
									LetraNIE = dimeLetra (dni % 23);
	
									if (valor.substring(valor.length-1,valor.length)==LetraNIE) return true;
									else return false;
								}
								break;


					/*********************************************************************************/
					case 'telefono_fijo':
								if ( !Telefono.exec(val.value) ) { 
								  NoValido(val);
								  return false;
								}else{
                  SiValido(val);
                  return true; 
                }
								break;
/************************************************************************************/
					case 'metal':
						if ( !Metal.exec(val.value) ) { 
						  NoValido(val);
						  return false;
						}else{
							SiValido(val);
							return true; 
						}
						break;
						
/************************************************************************************/
					case 'fecha3':
						if ( !Fecha3.exec(val.value) ) { 
						  NoValido(val);
						  return false;
						}else{
							SiValido(val);
							return true; 
						}
						break;

/************************************************************************************/
					case 'dolar':
						if ( !Dolar.exec(val.value) ) { 
						  NoValido(val);
						  return false;
						}else{
							SiValido(val);
							return true; 
						}
						break;
					/*********************************************************************************/
					case 'email':
								if ( !Email.exec(val.value) ) { 
									NoValido(val);
									return false;	
								} else {
								  SiValido(val);
									return true;
								}
								break;
								
					/*********************************************************************************/
					case 'cp':
						codigo=valor.substr (0,2);
						if (parseInt (codigo)!=provincia) { return false; }
						
						if ( !CP.exec(valor) ) {
							NoValido(val);
							return false;	
						}else {
						  SiValido(val);
              return true;
            }
						break;
					
					
					/*********************************************************************************/
					case 'cp_todos':
						if ( !CP.exec(valor) ) {
							NoValido(val);
							return false;	
						}else {
						  SiValido(val);
                    return true;
                  }
						break;
		
								
					/*********************************************************************************/
					case 'hora':
								if ( !Hora.exec(valor) ) 
									{
									NoValido(val);
									return false;	
									}
									else
									{
									  SiValido(val);
										return true;
									}
								break;
								
								
					/*********************************************************************************/
					case 'fecha':
								if ( !Fecha1.exec(valor) ) 
									{
									if ( !Fecha2.exec(valor) ) 
										{
										NoValido(val);
										return false;	
										}
										else
										{
										SiValido(val);
										return true;
										}
									}
									else
									{
									SiValido(val);
									return true;
									}
								break;
								
								
					/*********************************************************************************/
					case 'decimal':
								if ( !Decimal1.exec(valor) ) 
									{
									if ( !Decimal2.exec(valor) ) 
										{
										NoValido(val);
										return false;	
										}
										else
										{
										SiValido(val);
										return true;
										}
									}
									else
									{
									SiValido(val);
									return true;
									}
								break;
								
					case 'precio':
							if ( Decimal2.exec(valor) || Entero.exec(valor) ) 
								{
								  SiValido(val);
									return true;
								} else {
									NoValido(val);
									return false;	
								}
							break;			
			
					} // Fin switch
			//}
		
		
		return true;	
	
		}
	
	

	/******************************************************************************************************************/
	/* Esta función la utilizo para que me diga el digito de control                                                  */
	/******************************************************************************************************************/
	function obtenerDigito (IentOfi,InumCta)
		{
		alert (IentOfi);
		alert (InumCta);
		
		APesos = Array(1,2,4,8,5,10,9,7,3,6); // Array de "pesos"
			DC1=0;
			DC2=0;
			x=8;
			
			while(x>0) {
				digito=IentOfi[x-1];
				DC1=$DC1+(APesos[x+2-1]*(digito));
				x = x - 1;
			}
			
			alert (x);
			Resto = DC1%11;
			DC1=11-Resto;
			if (DC1==10) DC1=1;
			if (DC1==11) DC1=0;              // Dígito control Entidad-Oficina
		
			x=10;
			while(x>0) {
				digito=InumCta[x-1];
				DC2=$DC2+(APesos[x-1]*(digito));
				x = x - 1;
			}
			Resto = DC2%11;
			DC2=11-Resto;
			if (DC2==10) $DC1=1;
			if (DC2==11) $DC1=0;         // Dígito Control C/C
		
			DigControl=DC1+DC2;   // los 2 números del D.C.
			return DigControl;
			
		}
	
	

	/******************************************************************************************************************/
	/* Esta función la utilizo para que me diga la letra del DNI y NIE                                                */
	/******************************************************************************************************************/
	function dimeLetra (tmp)
		{
			switch (tmp) {
			  case 0: LetraNIF = "T"; break;
			  case 1: LetraNIF = "R"; break;
			  case 2: LetraNIF = "W"; break;
			  case 3: LetraNIF = "A"; break;
			  case 4: LetraNIF = "G"; break;
			  case 5: LetraNIF = "M"; break;
			  case 6: LetraNIF = "Y"; break;
			  case 7: LetraNIF = "F"; break;
			  case 8: LetraNIF = "P"; break;
			  case 9: LetraNIF = "D"; break;
			  case 10: LetraNIF = "X"; break;
			  case 11: LetraNIF = "B"; break;
			  case 12: LetraNIF = "N"; break;
			  case 13: LetraNIF = "J"; break;
			  case 14: LetraNIF = "Z"; break;
			  case 15: LetraNIF = "S"; break;
			  case 16: LetraNIF = "Q"; break;
			  case 17: LetraNIF = "V"; break;
			  case 18: LetraNIF = "H"; break;
			  case 19: LetraNIF = "L"; break;
			  case 20: LetraNIF = "C"; break;
			  case 21: LetraNIF = "K"; break;
			  case 22: LetraNIF = "E"; break;
			  case 23: LetraNIF = "T"; break;
			  default: LetraNIF = "Error"; break;
			}
			return LetraNIF;
		}
		
		
	/******************************************************************************************************************/
	/* Esta función verifica y rellena una hora introducida                                                           */
	/******************************************************************************************************************/
	function Hora_valida(fr) {
		var H= /^[0-2][0-9][0-5][0-9]$/;
		var H0= /^[0-9]$/;
		var H1= /^[0-2][0-9][0-5]$/;
		var H2= /^[0-2][0-9].[0-5][0-9]$/;
		var H3= /^[0-2][0-9].[0-5]$/;
		var H4= /^[0-2][0-9]$/;
		var H5= /^[0-9].[0-5]$/;
		var H6= /^[0-9].[0-5][0-9]$/;
		var H7= /^[0-9]:[0-5]$/;
		var H8= /^[0-9]:$/;
		var H9= /^[0-2][0-9]:$/;	
		var ok = false;		
		obj=document.getElementById(fr.name);

		if (H7.exec(fr.value)) {
			c=fr.value;
			obj.value="0"+c.substr (0, 1)+":"+c.substr (2, 1)+"0";
			ok = true;
		}
		if (H0.exec(fr.value) && !ok) {
			c=fr.value;
			obj.value="0"+c+":"+"00";
			ok = true;
		}
		if (H.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value=c.substr (0, 2)+":"+c.substr (2, 2);
			ok = true;
		}
		if (H1.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value=c.substr (0, 2)+":"+c.substr (2, 1)+"0";
			ok = true;
		}
		if (H2.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value=c.substr (0, 2)+":"+c.substr (3, 2);
			ok = true;
		}
		if (H3.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value=c.substr (0, 2)+":"+c.substr (3, 1)+"0";
			ok = true;
		}
		if (H4.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value=c.substr (0, 2)+":"+"00";
			ok = true;
		}
		if (H5.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value="0"+c.substr (0, 1)+":"+c.substr (3, 1)+"0";
			ok = true;
		}
		if (H6.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value="0"+c.substr (0, 1)+":"+c.substr (3, 2);
			ok = true;
		}
		if (H8.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value="0"+c.substr (0, 1)+":00";
			ok = true;
		}
		if (H9.exec(fr.value)&& !ok) {
			c=fr.value;
			obj.value=c.substr (0, 2)+":00";
			ok = true;
		}
		
		c=fr.value;
		if (c.substr (0, 2) > 23) obj.value="00:00";
		return true;
		
		
		alert("La Fecha introducida no es correcta.");
		obj.value="";
		return false;
	}
	
	function NoValido(val) {
		val.style.color = '#FF0000';
	}
	
	function SiValido(val) {
		val.style.color = '#000000';
	}
