function noEspacios(cadena){
	for (i = 0; (i < cadena.length) && (cadena.charAt(i) == " "); i++);
	if(i == cadena.length)
		return true;
	else
		return false;
}

function DigitoControl(cadena){
	var cifras = new Array(1,2,4,8,5,10,9,7,3,6);
    var chequeo = 0;
    for (var i=0; i < cifras.length; i++)
		chequeo += parseInt(cadena.charAt(i)) * cifras[i];
    chequeo = 11 - (chequeo % 11);
	if (chequeo == 11) {chequeo = 0;}
	if (chequeo == 10) {chequeo = 1;}
    return chequeo;
}

function EsNumeroEntero(valor){
    var cadena = valor.toString();
	var longitud = cadena.length;
	if (longitud == 0)
		return false;
	var ascii = null;
    for (var i=0; i<longitud; i++) {
		ascii = cadena.charCodeAt(i);
        if (ascii < 48 || ascii > 57){return false;}
    }
	return true;
}

function compruebaMail(cadena){
	var i = 0;
	var salir = 0;
	while((i < cadena.length) && !salir){
		if (cadena.charAt(i) != "@")
			i++;
		else
			salir = 1;
	}
	if ((i==0) || ((cadena.length - (i + 1)) < 4 ) || !salir)
		return false;
	if((((cadena.length - (i + 1)) > 4 ) &&
		(cadena.charAt(cadena.length - 3) != ".") &&
		(cadena.charAt(cadena.length - 2) != ".") &&
		(cadena.charAt(cadena.length - 4) != ".")) ||
		((cadena.length - (i + 1)) == 4 ) &&
		(cadena.charAt(cadena.length - 3) != "."))
			return false;
	return true;
}

function compruebaFormatoCif(cadena){
	var letras='JABCDEFGHI';
	for(var i=1;i<8;i++)
		if((cadena.charAt(i) < '0') || (cadena.charAt(i) > '9'))
			return false;
	if((cadena.charAt(8) < '0') || (cadena.charAt(8) > '9'))
		if(letras.indexOf(cadena.charAt(8))==-1)
			return false;
	return true;
}
	
function validarCIF(texto){
	var pares = 0;
	var impares = 0;
	var suma;
	var ultima;
	var unumero;
	var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
	var xxx;
	texto = texto.toUpperCase();
	if(!compruebaFormatoCif(texto))
		return false;
	// var regular =/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g;
	//  if (!regular.exec(texto)) return false;
	ultima = texto.substr(8,1);
	for (var cont = 1 ; cont < 7 ; cont ++){
		xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
		impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
		pares += parseInt(texto.substr(cont,1));
	}
	xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0";
	impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
	suma = (pares + impares).toString();
	unumero = parseInt(suma.substr(suma.length - 1, 1));
	unumero = (10 - unumero).toString();
	if (unumero == 10)
		unumero = 0;
	if ((ultima == unumero) || (ultima == uletra[unumero]))
		return true;
	else
		return false;
}
	
function compruebaCIF(cadena){
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	cadena=cadena.toUpperCase();
	var dni=cadena.substring(0,8);
	var res;
	if(cadena.length != 9)
		return false;
	if((cadena.charAt(0) < '0') || (cadena.charAt(0) > '9')) {
		res=validarCIF(cadena);
		return res;
	}
	else {
		for (i=1; i<cadena.length-2;i++)
			if((cadena.charAt(0) < '0') || (cadena.charAt(0) > '9'))
				return false;
		if (!((cadena.charAt(8) < '0') || (cadena.charAt(8) > '9')))
			return false;
		else if (cadena.charAt(8)!=letras.charAt(dni%23))
			return false;
		return true;
	}
}

function compruebaTlfn(cadena){
	var j=0;
	var k=0;
	var i=1;
	if(cadena.length > 15)
		return false;
	/* if(cadena.charAt(0)!='+') return false;
	seguir=true;
	while((cadena.charAt(i)!='.') && (i<5) && (seguir)){
		if((cadena.charAt(i) < '0') || (cadena.charAt(i) > '9'))
			seguir=false;
		else
			i++;
	}
	if((i>=5) || (!seguir))
		return false; */
	//for (j=i+1; (j<cadena.length) && (k<=9); j++){
	for (j=0; (j<cadena.length) && (k<=9); j++){
		k++;
		if((cadena.charAt(j) < '0') || (cadena.charAt(j) > '9'))
			return false;
	}
	if (k!=9)
		return false;
	return true;
}

function compruebaCP(cadena){
	var i;
	if (cadena.length != 5)
		return false;
	for (i=0; i<(cadena.length); i++)
		if ((cadena.charAt(i) < '0') || (cadena.charAt(i) > '9'))
			return false;
	return true;
}

function compruebaCCC(entidad,oficina,dc,nc){
	// Comprobamos que solo hemos introducido numeros
	if (!EsNumeroEntero(entidad) || !EsNumeroEntero(oficina) || !EsNumeroEntero(dc) || !EsNumeroEntero(nc))
		return false;
	// Comprobamos el primer digito de control
	var primer_control="00"+entidad+oficina;
	var primer_digito=DigitoControl(primer_control);
	if (primer_digito != dc.charAt(0))
		return false;
	// Comprobamos el segundo digito de control
	var segundo_control=nc;
	var segundo_digito=DigitoControl(segundo_control);
	if (segundo_digito != dc.charAt(1))
		return false;
	return true;
}

function comprobar(nombreFormulario){
//Comprueba que se rellenen todos los campos. Comprobar que lo datos introducidos son coherentes
	var empresa='document.'+nombreFormulario+'.empresa';
	var cif='document.'+nombreFormulario+'.cif';
	var nombre='document.'+nombreFormulario+'.nombre';
	var apellido='document.'+nombreFormulario+'.apellido';
	var direccion='document.'+nombreFormulario+'.direccion';
	var poblacion='document.'+nombreFormulario+'.poblacion';
	var provincia='document.'+nombreFormulario+'.provincia';
	var telefono='document.'+nombreFormulario+'.telefono';
	var email='document.'+nombreFormulario+'.email';
	var reemail='document.'+nombreFormulario+'.reemail';
	var emailtec='document.'+nombreFormulario+'.emailtec';
	var reemailtec='document.'+nombreFormulario+'.reemailtec';
	var cp='document.'+nombreFormulario+'.cp';
	var pais='document.'+nombreFormulario+'.pais';
	var codpais='document.'+nombreFormulario+'.codpais';
	var idformapago='document.'+nombreFormulario+'.idformapago';
	var formapago='document.'+nombreFormulario+'.formapago';
	var ccc1='document.'+nombreFormulario+'.ccc1';
	var ccc2='document.'+nombreFormulario+'.ccc2';
	var ccc3='document.'+nombreFormulario+'.ccc3';
	var ccc4='document.'+nombreFormulario+'.ccc4';

	// Comprobar que los datos obligatorios existen
	if(eval(cif+'.value==""') || noEspacios(eval(cif+'.value'))){
		alert("El campo CIF/NIF es obligatorio");
		eval(cif+'.focus()');
		return false;
	}

	//Comprobar que el CIF tiene un formato correcto
	if (!compruebaCIF(eval(cif+'.value'))){
		alert("El CIF o NIF no es correcto. Rellene con ceros hasta obtener un número de 8 cifras, con una letra al final del número si es un NIF, o una letra al principio si es un CIF");
		eval(cif+'.focus()');
		return false;
	}
	eval(cif+'.value="'+eval(cif+'.value.toUpperCase()')+'"');

	if(eval(empresa+'.value==""') || noEspacios(eval(empresa+'.value'))){
		alert("El campo EMPRESA es obligatorio");
		eval(empresa+'.focus()');
		return false;
	}
	
	if(eval(nombre+'.value==""') || noEspacios(eval(nombre+'.value'))){
		alert("El campo NOMBRE es obligatorio");
		eval(nombre+'.focus()');
		return false;
	}
	
	if(eval(apellido+'.value==""') || noEspacios(eval(apellido+'.value'))){
		alert("El campo APELLIDO es obligatorio");
		eval(apellido+'.focus()');
		return false;
	}
	
	if(eval(direccion+'.value==""') || noEspacios(eval(direccion+'.value'))){
		alert("El campo DIRECCION es obligatorio");
		eval(direccion+'.focus()');
		return false;
	}

	if(eval(telefono+'.value==""') || noEspacios(eval(telefono+'.value'))){
		alert("El campo TELEFONO es obligatorio");
		eval(telefono+'.focus()');
		return false;
	}
	
	if(eval(poblacion+'.value==""') || noEspacios(eval(poblacion+'.value'))){
		alert("El campo POBLACION es obligatorio");
		eval(poblacion+'.focus()');
		return false;
	}
	
	if(eval(provincia+'.value==""') || noEspacios(eval(provincia+'.value'))){
		alert("El campo PROVINCIA es obligatorio");
		eval(provincia+'.focus()');
		return false;
	}
	
	if(eval(cp+'.value==""') || noEspacios(eval(cp+'.value'))){
		alert("El campo CODIGO POSTAL es obligatorio");
		eval(cp+'.focus()');
		return false;
	}

	// Comprobar que el telefono sea correcto
	if (!compruebaTlfn(eval(telefono+'.value'))){
		alert("El teléfono no es correcto");
		eval(telefono+'.focus()');
		return false;
	}

	// Comprobar que sea un codigo postal correcto
	if(eval(cp+'.value != ""'))
		if (!compruebaCP(eval(cp+'.value'))){
			alert("El Código Postal no es correcto");
			eval(cp+'.focus()');
			return false;
		}

    // Comprobar que el email tiene un formato correcto
	if (!compruebaMail(eval(email+'.value'))){
		alert("Debe introducir un e-mail correcto");
		eval(email+'.focus()');
		return false;
	}
	else {
		// Comprobar que los dos emails son iguales
		if (eval(email+'.value')!=eval(reemail+'.value')){
			alert("El email de confirmación no es igual al original");
			eval(reemail+'.focus()');
			return false;
		}
	}
		
	// Comprobar que se ha introducido el email tecnico y es correcto
	if (eval(emailtec+'.value!=""')) {
		if (!compruebaMail(eval(emailtec+'.value'))) {
			alert("El e-mail técnico introducido no es correcto");
			eval(emailtec+'.focus()');
			return false;
		}
		else {
			if (eval(emailtec+'.value')!=eval(reemailtec+'.value')){
				alert("El e-mail técnico de confirmación no es igual al original");
				eval(reemailtec+'.focus()');
				return false;
			}
		}
	}

    // Rellenar el pais
	numero=eval(codpais+'.selectedIndex');
	texto=eval(codpais+'.options['+numero+'].text');
	eval(pais+'.value="'+texto+'"');

	//Formatear los Datos de la Forma de Pago en una cadena única
	if (eval(idformapago+'.value == 3')) { // Domiciliación Bancaria
		// Comprobar si se introdujo la cuenta bancaria y si es correcta
		if (eval(ccc1+'.value!=""') || eval(ccc2+'.value!=""') || eval(ccc3+'.value!=""') || eval(ccc4+'.value!=""')) {
			if (!compruebaCCC(eval(ccc1+'.value'),eval(ccc2+'.value'),eval(ccc3+'.value'),eval(ccc4+'.value'))) {
				alert("El código de cuenta bancaria introducido no es correcto");
				eval(ccc1+'.focus()');
				return false;
			}
		}
		eval(formapago+'.value = '+ccc1+'.value+" "+'+ccc2+'.value+" "+'+ccc3+'.value+" "+'+ccc4+'.value');
	}
	else // IDFormaPago == 1 -> Pago Vía World Pay; IDFormaPago == 2 -> Transferencia;
		eval(formapago+'.value = document.'+nombreFormulario+'.datosformapago.value');

	return true;
}

