// JavaScript Document

function checkObligat() {
   for (var i=0; i < arguments.length; i++) {
   // alert (arguments[i].value);
      if ((arguments[i].value.length == 0) || (arguments[i].value == "0")) {
		alert ("Por favor, rellene el campo obligatorio indicado por la posición del cursor.");
		arguments[i].focus();
		return false;
	   }
   }
}

function compruebaRegExp(regx, value){
  switch (regx){
  case "alfa":
    return ((/^[a-zA-Z]+$/).test(value));
  case "alfaEspacio":
    return ((/^[a-zA-Z ]+$/).test(value));
  case "alfaAcentos":
    return ((/^[a-zA-Zà-üÀ-Ü]+$/).test(value));
  case "alfaAcentosEspacio":
    return ((/^[a-zA-Zà-üÀ-Ü ]+$/).test(value));
  case "alfaAcentosSep":
    return ((/^[a-zA-Zà-üÀ-Ü ,\-\.\/]+$/).test(value));
  case "alfaNum":
    return ((/^[a-zA-Z0-9]+$/).test(value));
  case "alfaNumEspacio":
    return ((/^[a-zA-Z0-9 ]+$/).test(value));
  case "alfaNumSep":
    return ((/^[a-zA-Z0-9 ,\-\.\/]+$/).test(value));
  case "alfaNumAcentos":
    return ((/^[a-zA-Zà-üÀ-Ü0-9]+$/).test(value));
  case "alfaNumAcentosEspacio":
    return ((/^[a-zA-Zà-üÀ-Ü0-9 ]+$/).test(value));
  case "alfaNumAcentosSep":
    return ((/^[a-zA-Zà-üÀ-Ü0-9ªº ,\%\+\!\$\&\?\-\.\/]+$/).test(value));
  case "general":
    return ((/^[a-zA-Zà-üÀ-Ü0-9ªº ,\%\+\!\$\&\?\-\.\/]+$/).test(value));
  case "numEntero":
    return ((/^\d+$/).test(value));
  case "numEnteroSep":
    return ((/^[\d \-]+$/).test(value));
  case "real":
    return ((/^(\+|-)?[0-9][0-9]*(\,[0-9]*)?$/).test(value));
  case "tarjeta":
    return ((/^\d+$/).test(value) && validacionLuhn(value));
  case "codPostEsp":
    return ((/^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$/).test(value));
  case "email":
    return ((/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,5})+$/).test(value));
  case "moneda":
    return ((/^\d+([\.]\d\d)?$/).test(value));
  case "refProducto":
    return ((/^[a-zA-Z0-9\-]+$/).test(value));
  case "nombreArchivo":
    return ((/^[a-zA-Zà-üÀ-Ü0-9 \-\.\_]+$/).test(value));
  case "telefono":
    return ((/^[\d() \-\+]+$/).test(value));
  default:
    regx2=new RegExp(regx);
    return (regx2.test(value));
  }
}

function validacionLuhn(ccnum){
   // Checksum ("Mod 10")
   // Add even digits in even length strings or odd digits in odd length strings.
   var checksum = 0;
   for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
      checksum += parseInt(ccnum.charAt(i-1));
   }
   // Analyze odd digits in even length strings or even digits in odd length strings.
   for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
      var digit = parseInt(ccnum.charAt(i-1)) * 2;
      if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
   }
   return ((checksum % 10) == 0);
}

function quitaEspacios(textoALimpiar){
	textoALimpiar = textoALimpiar.replace(/[\u0000-\u000C\u000E-\u001F]+/g, "");
	textoALimpiar = textoALimpiar.replace(/\u000D+/g, " ");
	textoALimpiar = textoALimpiar.replace(/^ +/, "");
	textoALimpiar = textoALimpiar.replace(/ +$/, "");
	textoALimpiar = textoALimpiar.replace(/ +/g, " ");
	return(textoALimpiar);
}

function compruebaCampo(regx, campo){
   campo.value = quitaEspacios(campo.value);
   if (campo.value.length>0){
		if(compruebaRegExp(regx,campo.value)==false){
		   alert("Por favor, introduzca carácteres válidos.");
		   campo.focus();
		   campo.select();
		   return false;
		}
		else {
			return true;
		}
   }
}

function compruebaPassword (campoPassword1, campoPassword2, regx) {
	if(compruebaCampo(regx, campoPassword1)) {
		  if((campoPassword1.value.length > 0) && (campoPassword2.value.length > 0) && (campoPassword1.value != campoPassword2.value)) {
  			alert("Las contraseñas son diferentes.");
  			campoPassword1.value = "";						
  			campoPassword1.focus();
 	      }
	}
}

function validarCuentaBanco(cc1,cc2,dc){
/* Comprobar que los datos son correctos*/
if (!(cc1.match(/^\d{8}$/) && cc2.match(/^\d{10}$/) && dc.match(/^\d{2}$/) )) return false;
	var arrWeights = new Array(1,2,4,8,5,10,9,7,3,6);	// vector de pesos
	var dc1=0, dc2=0;
	/* Cálculo del primer dígito de cintrol*/
	for (i=7;i>=0;i--) dc1 += arrWeights[i+2] * cc1.charAt(i);
	dc1 = 11 - (dc1 % 11);
	if (11 == dc1) dc1 = 0;
	if (10 == dc1) dc1 = 1;   	    
	/* Cálculo del segundo dígito de control*/
	for (i=9;i>=0;i--) dc2 += arrWeights[i] * cc2.charAt(i);
	dc2 = 11 - (dc2 % 11);
	if (11 == dc2) dc2 = 0;
	if (10 == dc2) dc2 = 1;   	    
	/* Comprobar la coincidencia y delvolver el resultado*/
	return (10*dc1+dc2 == dc);	// Javascript infiere tipo entero para dc1 y dc2
}

function compruebaNumCuenta (campoCuenta, entidad, agencia, digitoControl, numCuenta) {
if (compruebaCampo ('numEntero', campoCuenta)) {
	if ((entidad.value.length > 0) && (agencia.value.length > 0) && (digitoControl.value.length > 0) && (numCuenta.value.length > 0)) {
		if(validarCuentaBanco (entidad.value + agencia.value, numCuenta.value, digitoControl.value) == false) {
		 	alert("El número de cuenta no es válido. Por favor, vuelva a teclearlo.");
  			campoCuenta.value = "";						
			campoCuenta.focus();
  			// campoCuenta.select();
		}
	}
}	
}