/***************************************************************************************************/
/********* VALIDADOR DE FORMULARIOS ****************************************************************/
/********* JOSE IGNACIO MARCOS PEREZ - DIGIVAL.ES  *************************************************/
/***************************************************************************************************/
function init_form(){
	$('form').each(function(i, formulario){
		$(formulario).submit(function(){
			if(validaForm($(this))){
				return true;				
			}else{
				return false;
			}
		});
	});
};
/***************************************************************************************************/
/********* VALIDA FORMS ****************************************************************************/
/***************************************************************************************************/
var falloValida;

function validaForm(f){
	falloValida = 0;
	// COMPRUEBO LOS OBLIGATORIOS ***************************************
	if($("#"+$(f).attr('id')+' .obligatorio').length){
		var c_ob = $("#"+$(f).attr('id')+' .obligatorio');
		for(o=0;o<c_ob.length;o++){
			if(!val_vacio(c_ob[o].value)){
				error('Campo obligatorio.', c_ob[o]);
			}else{
				limpiaerror(c_ob[o]);
			}
		}
	}
	// ******************************************************************
	
	// COMPRUEBO LA REPETICION DEL PASSWORD ***************************************
	if($("#"+$(f).attr('id')+' .ob_pass').length){
		var c_ob_pass =$("#"+$(f).attr('id')+' .ob_pass');
		if(c_ob_pass[1].value != c_ob_pass[0].value ){
			error('Las contraseņas deben de ser iguales', c_ob_pass[1]);
		}else	if(c_ob_pass[1].value.length>0 && (c_ob_pass[1].value.length<6 || c_ob_pass[1].value.length>10)) {
			error("La contraseņa debe tener entre 6 y 10 caracteres", c_ob_pass[1]);
		}else{
			limpiaerror(c_ob_pass[1]);
		}
	}
	// ******************************************************************
	
	// COMPRUEBO QUE EL CAMPO SEA NUMERICO ******************************
	if($("#"+$(f).attr('id')+' .ob_num').length){
		var c_ob_num =$("#"+$(f).attr('id')+' .ob_num');
		for(n=0;n<c_ob_num.length;n++){
			if(!numerico(c_ob_num[n].value)) {
				error("El campo no es numerico", c_ob_num[n]);
			}else	if(!val_vacio(c_ob_num[n].value)){
				error('Campo obligatorio.', c_ob_num[n]);
			}else{
				limpiaerror(c_ob_num[n]);
			}
		}
	}
	
	// COMPRUEBO LOS EMAILS *********************************************
	if($("#"+$(f).attr('id')+' .ob_email').length){
		var c_ob_email = $("#"+$(f).attr('id')+' .ob_email');
		for(em=0;em<c_ob_email.length;em++){
			if (!validateEmail(c_ob_email[em].value)) {
				error("Se necesita un correo electr&oacute;nico v&aacute;lido.", c_ob_email[em]);
			}else if(!val_vacio(c_ob_email[em].value)){
				error('Campo obligatorio.', c_ob_email[em]);
			}else{
				limpiaerror(c_ob_email[em]);
			}
		}
	}
	// ******************************************************************
	
	// COMPRUEBO LOS CHECKBOX O RADIOS - AL MENOS UNO MARCADO ***********
	if($("#"+$(f).attr('id')+' .ob_radios').length){
		var c_ob_radios = $("#"+$(f).attr('id')+' .ob_radios');
		for(r=0;r<c_ob_radios.length;r++){
			if(!(c_ob_radios[r].checked)){
				error('Debe aceptar las condiciones.', c_ob_radios[r]);
			}else{
				limpiaerror(c_ob_radios[r]);
			}
		}
	}
	// ******************************************************************
	
	// VALIDACION DE NUMERO DE CUENTA CORRIENTE *************************
	if($("#"+$(f).attr('id')+' .ob_ccc').length){
		var c_ob_ccc = $("#"+$(f).attr('id')+' .ob_ccc');
		for(c=0;c<c_ob_ccc.length;c++){
			if(c_ob_ccc[c].value.length!=20){
				error("El numero de cuenta debe constar de 20 digitos", c_ob_ccc[c]);
			}else if (!numerico(c_ob_ccc[c].value)){
				error("Por favor, introduzca correctamente los datos, no son numericos", c_ob_ccc[c]);
			}else{
				var banco2= c_ob_ccc[c].value.substring(0,4);
				var sucursal2= c_ob_ccc[c].value.substring(4,8);
				var dc2= c_ob_ccc[c].value.substring(8,10);
				var cuenta2= c_ob_ccc[c].value.substring(10);
				if (!(obtenerDigito("00" + banco2 + sucursal2) == parseInt(dc2.charAt(0))) || 
					 !(obtenerDigito(cuenta2) == parseInt(dc2.charAt(1)))) {
				  error("Los digitos de control no se corresponden con los demas numeros", c_ob_ccc[c]);
				}else{
					limpiaerror(c_ob_ccc[c]);
				} 
			}
		}
	}
	// ******************************************************************
	
	// COMPROBAR QUE NO SE PASAN DE LOS 300 MEGAS EL MULTIDOMINIO *******
	if($("#"+$(f).attr('id')+' .tamanoMulti').length){
		var tamanoMulti = $("#"+$(f).attr('id')+' .tamanoMulti');
		for(x=0;x<tamanoMulti.length;x++){
			if(tamanoMulti[x].value == 0){
				error('Campo obligatorio.', tamanoMulti[x]);
			}else{
				limpiaerror(tamanoMulti[x]);
			}
		}	
	}
	// ******************************************************************
	
	if(falloValida == 1) return false;
	else return true;
}

/***************************************************************************************************/
/********* FUNCION DE ERROR ************************************************************************/
/***************************************************************************************************/
function error(err, campo){
	if(campo.parentNode.lastChild.tagName == 'SPAN'){
		campo.parentNode.lastChild.firstChild.nodeValue = err;
	}else{
		var error = document.createElement('span');
		error.className = "errorForm";
		error.innerHTML = err;
		campo.parentNode.appendChild(error);
	}
	falloValida = 1;
}
function limpiaerror(campo){
	if(campo.parentNode.lastChild.tagName == 'SPAN'){
			campo.parentNode.removeChild(campo.parentNode.lastChild);
	}
}
/***************************************************************************************************/
/********* VALIDACION DE CAMPO VACIO ***************************************************************/
/***************************************************************************************************/
function val_vacio(obj){
	if(obj== null || obj.length == 0) return false;
	else return true;
}
/***************************************************************************************************/
/********* VALIDACION DE EMAIL *********************************************************************/
/***************************************************************************************************/
function validateEmail(email) {
	var emailExp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
	if(emailExp.test(email)) return true;
	else return false;
 }
 /***************************************************************************************************/
/********* VALIDACION DE CCC ***********************************************************************/
/***************************************************************************************************/
function obtenerDigito(valor){
	  valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
	  control = 0;
	  for (i=0; i<=9; i++)
		control += parseInt(valor.charAt(i)) * valores[i];
	  control = 11 - (control % 11);
	  if (control == 11) control = 0;
	  else if (control == 10) control = 1;
	  return control;
}
/***************************************************************************************************/
/********* VALIDACION DE ALFANUMERICO  *************************************************************/
/***************************************************************************************************/
function alfanumerico(valor){
	  cad = valor.toString();
	  for (var i=0; i<cad.length; i++) {
			var caracter = cad.charAt(i);
			if (!((caracter>"0" && caracter<"9") || (caracter>"a" && caracter<"z") || (caracter>"A" && caracter<"Z"))){
				return false;
			}
		}
	  return true;
}

/***************************************************************************************************/
/********* VALIDACION DE CAMPO NUMERICO  ***********************************************************/
/***************************************************************************************************/
function numerico(valor){
	  cad = valor.toString();
	  for (var i=0; i<cad.length; i++) {
		var caracter = cad.charAt(i);
		if (caracter<"0" || caracter>"9")
		  return false;
	  }
	  return true;
}

function numericodecimal(valor){
	  cad = valor.toString();
	  for (var i=0; i<cad.length; i++) {
		var caracter = cad.charAt(i);
		if (caracter<"0" || caracter>"9"){
			if (caracter!="," && caracter!=".")
				return false;
		}
	  }
	  return true;
}

/***************************************************************************************************/
/********* EVENTO ON LOAD **************************************************************************/
/***************************************************************************************************/
$(document).ready(init_form);