function validarTelefono(telefono, valPorDef)
{
	/* Se crea un patrón para validar el número de teléfono, tiene que ser un número */
	re = /[^0-9]/;
	
 	// Se comprueba si el texto concuerda con el patrón especificado.
	if (re.test(telefono.value))
	{
		alert("El teléfono debe ser numérico");
		telefono.value = valPorDef;
		return false;
	}
	else if (telefono.value.length<=8)
	{
		alert("Debe introducir el teléfono de al menos 9 caracteres");
		telefono.value = valPorDef;
		return false;
	}
	return true;
}

function validarFax(fax, valPorDef)
{
	/* Se crea un patrón para validar el número de fax, tiene que ser un número */
	re = /[^0-9]/;
	
 	// Se comprueba si el texto concuerda con el patrón especificado.
	if (re.test(fax.value))
	{
		alert("El fax debe ser numérico");
		fax.value = valPorDef;
	}
	else if (fax.value.length<=8)
	{
		alert("Debe introducir el fax de al menos 9 caracteres");
		fax.value = valPorDef;
	}
}

function validarCodigoPostal(codigoPostal, valPorDef)
{
	/* Se crea un patrón para validar el número de código postal, tiene que ser un número */
	re = /[^0-9]/;

	// Se comprueba si el texto concuerda con el patrón especificado.
	if (re.test(codigoPostal.value))
	{
	    alert("El código postal debe ser numérico")
	    codigoPostal.value = valPorDef;
	}
	else if (codigoPostal.value.length<=4)

	{

		alert("Debe introducir el código postal de 5 caracteres ");
		codigoPostal.value = valPorDef;
	}

}

function validarEmail(email, valPorDef)
{

	var check = false;
	var originalEmail = email;
	auxEmail = email.value;
	
	
	// Se divide la dirección de correo en la parte del dominio, y en la parte del nombre.
	emailarray = auxEmail.split("@");

	if (emailarray.length != 2)
	{
		check = true;	//Demasiadas arrobas.
	}
	else
	{
		// Se examina la parte del nombre.
		if (emailarray[0].search("^[A-Za-z0-9]") == -1) check = true; // El comienzo del nombre debe ser alfanumérico.
		if (emailarray[0].search("[A-Za-z0-9]$") == -1) check = true; // El final del nombre debe ser alfanumérico.
		if (emailarray[0].search("[\.\_\-]+") > 0)
		{
			// Se permite el punto, el guión bajo o el guión, pero no en los extremos del nombre
			if (emailarray[0].search("[A-Za-z0-9][\.\_\-][A-Za-z0-9]+$") == -1) check = true;	
		}
		// Se examina la parte del dominio.
		// Los dos primeros caracteres deben ser alfanuméricos, así como los dos últimos. Al menos debe haber un punto.
		if (emailarray[1].search("^[A-Za-z0-9][A-Za-z0-9\-]+[\.]+[A-Za-z0-9]{2,}") == -1) check = true;
		if (originalEmail.value.indexOf("..") >= 0) check = true; // No se admiten dos puntos juntos.
	}
	if (check)
	{
		alert("Debe introducir dirección de correo válido");
		email.value = valPorDef;
	}
}

function validarEmailSinBlancos(email, valPorDef)
{
	var check = false;
	var originalEmail = email;
	auxEmail = email.value;
	
	
	// Se divide la dirección de correo en la parte del dominio, y en la parte del nombre.
	emailarray = auxEmail.split("@");

	if (emailarray.length != 2)
	{
		check = true;	//Demasiadas arrobas.
	}
	else
	{
		// Se examina la parte del nombre.
		if (emailarray[0].search("^[A-Za-z0-9]") == -1) check = true; // El comienzo del nombre debe ser alfanumérico.
		if (emailarray[0].search("[A-Za-z0-9]$") == -1) check = true; // El final del nombre debe ser alfanumérico.
		if (emailarray[0].search("[\.\_\-]+") > 0)
		{
			// Se permite el punto, el guión bajo o el guión, pero no en los extremos del nombre
			if (emailarray[0].search("[A-Za-z0-9][\.\_\-][A-Za-z0-9]+$") == -1) check = true;	
		}
		// Se examina la parte del dominio.
		// Los dos primeros caracteres deben ser alfanuméricos, así como los dos últimos. Al menos debe haber un punto.
		if (emailarray[1].search("^[A-Za-z0-9][A-Za-z0-9\-]+[\.]+[A-Za-z0-9]{2,}") == -1) check = true;
		if (originalEmail.value.indexOf("..") >= 0) check = true; // No se admiten dos puntos juntos.
		if (originalEmail.value.indexOf(" ") >= 0) check = true; // No se admiten blancos.
	}
	if (check)
	{
		alert("Debe introducir dirección de correo válido, y sin espacios en blanco");
		email.value = valPorDef;
	}
}


function validaEmail(valor) {
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)){
   return (true)
  } else {
   alert("La dirección de email es incorrecta.");
   return (false);
  }
 }



/**
 * Función que convierte el caracter ',' en '.'
 */
 function convertirComaPunto (vCadena) {

    var copia = "";
    for (i=0; i< vCadena.length; i++) {
        if (vCadena.charAt (i)== ',')
            copia += '.';
        else
            copia += vCadena.charAt(i);
    }

    return copia;
}
/**
 * Función que devuelve el número de decimales del número que se pasa como parámetro.
 */
function numerosDecimales(numero){
	
	var numeroLength = convertirComaPunto(numero).length;	
	var parteDecimal = 0;
	for(i=0;i<numeroLength;i++)
		{
		if(numero.charAt(i)=='.')
			{
    			parteDecimal = numeroLength-(i+1);
    			return parteDecimal;
			}
		}
	return 0;
}
/**
 * Función que valida si el parámetro pasado es un numero entero y positivo.
 */
function esNumeroPositivoEntero(numero){
	if(numero<0)
		return false;
	if(numerosDecimales(numero)>0)
		return false;
	return true;	
}
/**
 * Funcion que mira siel campo recogido es un cif o un nif.
 */

function validar(valor)
{ 
   var dato = valor.value.charAt(0);   
   if (isNaN(dato)==true && dato!='X' && dato!='Y' && dato!='Z' &&
   	   dato!='x' && dato!='y' && dato!='z')
   {   	 
   	 validateCIF(valor,"");
   }
   else
   {     	  
   	  //Validación NIE
   	  if(dato=='X' || dato=='Y' || dato=='Z' ||
   	  	 dato=='x' || dato=='y' || dato=='z')	//X,Z,Y
	  {		  	
	  	validarNIE(valor,"");	  		  	
	  }
	  else
	  {	  	
	  	esDniValido(valor,"");
	  }	  
   }
}
/**
 * Funcion que evalua de un mismo campo si es un NIF ó CIF.
 */
function validarNIFCIF(valor,valPorDef)
{
   var dato = valor.value.charAt(0);
   if (isNaN(dato)==true)
   {
	  validateCIF(valor,"");
   }
   else
   {
	  esDniValido(valor,"");
   }
}

/**
 * Funcion que devuelve si un campo DNI es correcto.
 */
function esDniValido(nif, valPorDef){ 
	
	// Quitar los 0's de la izquierda del DNI
	var i = 0;
	var salir = false;
	while(i < nif.value.length && !salir)
	{ 
		if(nif.value.charAt(i) > 0)
		{ salir = true; }
		else
		{ i++; }
	}
	auxNif = nif.value.substring(i,nif.value.length);
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE'; 
	var dni = auxNif.substring(0,auxNif.length-1); 
	
	if(!esNumeroPositivoEntero(dni)){
		alert("Debe introducir DNI válido");
		nif.value = valPorDef;
	}
	if (dni.length>9){
		alert("Debe introducir DNI válido");
		nif.value = valPorDef;
	}
	

	var letraNif = nif.value.charAt(nif.value.length-1); 
	var letraAux; 
	var numero = dni%23; 
	letraAux = letras.substring(numero,numero+1); 
	if(letraAux != letraNif.toUpperCase())
	{ 
		alert("Debe introducir un nif válido");
		nif.value = valPorDef;
	}
}

/**
 * Funcion que devuelve si un campo es un NIE correcto
 */
function validarNIE(nie, valPorDef)
{	
	// Quitar los 0's de la izquierda del DNI
	var snie = nie.value;
	snie = nie.value.substring(1,nie.value.length);
	var i = 0;
	var salir = false;
	while(i < snie.length && !salir)
	{ 
		if(snie.charAt(i) > 0)
		{ salir = true; }
		else
		{ i++; }
	}	
	var auxNie = snie.substring(i,snie.length-1);	
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';				  				   
	var dni = snie.substring(i,snie.length-1);//auxNie.substring(0,auxNie.length-1);	
	if(!esNumeroPositivoEntero(dni)){
		alert("Debe introducir NIE válido");
		nie.value = valPorDef;
	}
	if (dni.length>9){
		alert("Debe introducir NIE válido");
		nie.value = valPorDef;
	}
	
	var letraNie = snie.charAt(snie.length-1);	 
	var letraAux;
	var numero = parseInt(dni/23);	
	var parteEntera = numero*23;
	var numeroVerificacion; 
	while(parteEntera>parseInt(dni))
	{
		parteEntera = parteEntera - 23;
	}
	numeroVerificacion = parseInt(dni) - parteEntera + 1;		
	
	letraAux = letras.substring(numeroVerificacion-1,numeroVerificacion);	
	if(letraAux != letraNie.toUpperCase())
	{ 
		alert("Debe introducir un nie válido");
		nie.value = valPorDef;
	}	
}




/**
 * Formato CIF: X NNNNNNNN C
 *		X:Letra de tipo de Organización,una de las siguientes ->( A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S }
 *  	NNNNNNNN: Numeros.
 *  	C: Dígito de control,un número ó letra ->  A ó 1,B ó 2,C ó 3,D ó 4,E ó 5,F ó 6, G ó 7,H ó 8,I ó 9,J ó 0
 */
 function  validateCIF(cif, valPorDef){
		//Declaracion variables locales
		var iPares 		= 0;
		var iNones 		= 0;
		var iParcialNones = 0;
		var iSumTotal 	= 0;
		var iDigControl	= 0;
		var letras= new Array ("A","B","C","D","E","F","G","H","K","L","M","N","P","Q","S");
		var result = null;
		var bEncontrado = false;
	    var cLetra;
		
			//Obtenemos la primera letra del CIF
			cLetra = cif.value.toUpperCase().charAt(0);
			
			//Comprobamos que la letra se encuentre en el array
			for ( i=0;!bEncontrado && i<letras.length;i++)
			{
				if (letras[i] != String.valueOf(cLetra))
				{
				    bEncontrado= true;	    
				 }
			}	

			//Se comprueba que la longitud sea 9 y que el primer caracter sea una letra y que sea correcta,
			//dentro del array
			if (cif.value.length !=9 || cLetra.isNaN || !bEncontrado)
			{
				//La longitud debe ser 9
				//return result;
				alert("Debe introducir un cif válido de 9 digitos");
				cif.value = valPorDef;		
			}
			//Comenzamos con la validacion
			else
			{							
				
				//Sumamos las cifras pares del numero central XX NNNNNNNN X
				for (i=2;i<8;i+=2)
				{
//					Para lo pares
					//iPares += Integer.parseInt(String.valueOf(cif.value.charAt(i)));
					iPares += parseInt(cif.value.charAt(i));
				
					
				}
				//Obtenemos las cifras impares las multiplicamos y sumamos
				for ( i=1;i<8;i+=2)
				{	
					//Para los impares			
					//iParcialNones = 2* Integer.parseInt(String.valueOf(cif.value.charAt(i)));
					iParcialNones = 2* parseInt(cif.value.charAt(i));
					//Si tiene mas de 2 cifras, sumamos las cifras entre ellas
					if (iParcialNones > 9) iParcialNones = 1 +(iParcialNones - 10);
					
					//Lo sumamos al total
					iNones += iParcialNones;
				}	

				//Sumamos el resultado de pares e impares
				iSumTotal = iPares + iNones;

				//Obtenemos el digito de control restando cogiento la ultima cifra de la 
				//iSumTotal y restandolo a 10	
				iDigControl = 10 - (iSumTotal % 10);

				//Si es 10 
				if (iDigControl==10) iDigControl = 0;
                
				//Cambio de la validación del CIF
				if(cLetra=='K' || cLetra=='P' || cLetra=='Q' || cLetra=='S')
				{//Es letra
					var cLetraFinal = cif.value.toUpperCase().charAt(8);					
					bEncontrado = false;
					switch(iDigControl)
					{
						case 1: if(cLetraFinal =='A') bEncontrado = true;
								break;
						case 2: if(cLetraFinal =='B') bEncontrado = true;
								break;
						case 3: if(cLetraFinal =='C') bEncontrado = true;
								break;
						case 4: if(cLetraFinal =='D') bEncontrado = true;
								break;
						case 5: if(cLetraFinal =='E') bEncontrado = true;
								break;
						case 6: if(cLetraFinal =='F') bEncontrado = true;
								break;		
						case 7: if(cLetraFinal =='G') bEncontrado = true;
								break;		
						case 8: if(cLetraFinal =='H') bEncontrado = true;
								break;		
						case 9: if(cLetraFinal =='I') bEncontrado = true;
								break;		
						case 0: if(cLetraFinal =='J') bEncontrado = true;
								break;					
					}
					if (!bEncontrado)
					{						
						alert("Debe introducir un cif válido");
						cif.value = valPorDef;		
					}									
				}
				else
					if(cLetra=='A' || cLetra=='B' || cLetra=='E' || cLetra=='H')
					{//Es número						
						if (iDigControl != parseInt(cif.value.charAt(8)))
						{
						   alert("Debe introducir un cif válido");
						   cif.value = valPorDef;
						}
					}
					else
					{//Es letra o número												
						var cLetraFinal = cif.value.toUpperCase().charAt(8);						
						 												
						if(!isNaN(parseInt(cLetraFinal))) //es número
						{							
							if (iDigControl != parseInt(cLetraFinal))
							{
							   alert("Debe introducir un cif válido");
							   cif.value = valPorDef;
							}
						}
						else //es letra
						{												
							bEncontrado = false;
							switch(iDigControl)
							{
								case 1: if(cLetraFinal =='A') bEncontrado = true;
										break;
								case 2: if(cLetraFinal =='B') bEncontrado = true;
										break;
								case 3: if(cLetraFinal =='C') bEncontrado = true;
										break;
								case 4: if(cLetraFinal =='D') bEncontrado = true;
										break;
								case 5: if(cLetraFinal =='E') bEncontrado = true;
										break;
								case 6: if(cLetraFinal =='F') bEncontrado = true;
										break;		
								case 7: if(cLetraFinal =='G') bEncontrado = true;
										break;		
								case 8: if(cLetraFinal =='H') bEncontrado = true;
										break;		
								case 9: if(cLetraFinal =='I') bEncontrado = true;
										break;		
								case 0: if(cLetraFinal =='J') bEncontrado = true;
										break;					
							}
							if (!bEncontrado)
							{						
								alert("Debe introducir un cif válido");
								cif.value = valPorDef;		
							}
						}
					}				
			}
		
	}
 



function esNumerico(campo, ValPorDef)

{

    //Patron 

	re=/[^0-9]/;
    if (re.test(campo.value))

	{

		alert("Debe ser numérico el número de ejemplares");

		campo.value = ValPorDef;

		

	}

}

function contieneCaracterEspecial(campo, ValPorDef)
{
	var STR_PTO_COMMA      = ";";
	var STR_COMILLAS       = "\"";
    var STR_COMILLA_SIMPLE = "\'";
    var STR_BARRA          = "|";
    var STR_MAYOR          = ">";
    var STR_MENOR          = "<";
    var STR_NUEVA_LINEA    = "%0A";
    var STR_IGUAL          = "=";
    var STR_PARENTESIS_AB  = "(";
    var STR_PARENTESIS_CE  = ")";
    var STR_ASTERISCO      = "*";    
       
    if((campo.value.indexOf(STR_PTO_COMMA) !=  -1 ) || (campo.value.indexOf(STR_COMILLAS) !=  -1 ) ||
	   (campo.value.indexOf(STR_COMILLA_SIMPLE) !=  -1 ) || (campo.value.indexOf(STR_BARRA) !=  -1 ) || 
	   (campo.value.indexOf(STR_MAYOR) !=  -1 ) || (campo.value.indexOf(STR_MENOR) !=  -1 ) || 
	   (campo.value.indexOf(STR_NUEVA_LINEA) !=  -1 ) || (campo.value.indexOf(STR_IGUAL ) !=  -1 ) || 
	   (campo.value.indexOf(STR_PARENTESIS_AB) !=  -1 ) || (campo.value.indexOf(STR_PARENTESIS_CE) !=  -1 ) ||  
	   (campo.value.indexOf(STR_ASTERISCO) !=  -1 ))		   
	{
		//alert('No debe introducir caracteres especiales:  ; " \' | > < = \( \) * ');
		campo.value = ValPorDef;
		return true;
	}
		
	return false;
}

function validarMovil(movil, valPorDef)
{
	/* Se crea un patrón para validar el número de fax, tiene que ser un número */
	re = /[^0-9]/;
	
 	// Se comprueba si el texto concuerda con el patrón especificado.
	if (re.test(movil.value))
	{
		alert("El movil debe ser numérico");
		movil.value = valPorDef;
	}
	else if (movil.value.length<=8 && movil.value.length>0)
	{
		alert("Debe introducir el móvil de al menos 9 caracteres");
		movil.value = valPorDef;
	}
}

function validarFaxNoObligatorio(fax, valPorDef)
{
	/* Se crea un patrón para validar el número de fax, tiene que ser un número */
	re = /[^0-9]/;
	
 	// Se comprueba si el texto concuerda con el patrón especificado.
	if (re.test(fax.value))
	{
		alert("El fax debe ser numérico");
		fax.value = valPorDef;
	}
	else if (fax.value.length<=8 && fax.value.length>0)
	{
		alert("Debe introducir el fax de al menos 9 caracteres");
		fax.value = valPorDef;
	}
}

//La función devuelve true si el url que le pasas es de la forma
// 'http://(n caracteres).(n caracteres)(0 ó más veces).(2 ó 3 caracteres)', 
//y false si no
function validarWeb(web, valPorDef){	
	var re=/^http:\/\/\w+(\.\w+)*\.\w{2,3}$/;	
	if(!re.test(web.value)){
		alert("La url no es valida");
		web.value = valPorDef;
	}
}
