/**
 * @author jmunoz
 * @projectDescription template fichero javascript
 * @id javascript-template.js
 * @see /js/dojo/dojo.js
 */

var aErrorFields = new Array();
var hasErrors = false;
var emptyMandatories = false;
/*
/*	
 *	clases de validacion
 */	
//metodo utilizado para validar formularios
validateForm = function(pObjName, pFormName, pTagErrorName){
	aErrorFields.length = 0;
	hasErrors = false;
	emptyMandatories = false;
	
	validationErrors(pFormName);
	
	validationRequired(pFormName);
	
	if(hasErrors || emptyMandatories){
		showErrors(pObjName, pFormName, pTagErrorName);
		return false;
	
	}else{
		if(pTagErrorName){
			$(pTagErrorName).addClassName('d-none');
		}
		return true;
	}
}

//metodo utilizado en validateForm
validationErrors = function(pFormName){
	oFormulario = $(pFormName);
	$$('input').each(function(poInput){
		if(poInput.getAttribute('errorTag')=="error"){		
			olabelCampo = poInput.getAttribute('fieldLabel');
			$(olabelCampo).addClassName('label-error');
			$(poInput).addClassName('field-error');
			
			aErrorFields[aErrorFields.length] = $(olabelCampo).innerHTML;
			
			hasErrors = true;											
		}else if(poInput.getAttribute('errorTag')==""){
			olabelCampo = poInput.getAttribute('fieldLabel');
			$(olabelCampo).removeClassName('label-error');
			$(poInput).removeClassName('field-error');
		}
	});
}

//metodo utilizado en validateForm
validationRequired = function(pFormName){
	oFormulario = $(pFormName);
	$$('#'+pFormName+' *.mandatory').each(function(poElementosObligatorios){
		// valida radios y checkbox
		if (poElementosObligatorios.type == "radio"){
			// validamos todos los radios de la misma coleccion
			var radiosCheckeados = false;
			var oColeccion = document.getElementsByName(poElementosObligatorios.name);
			oColeccion.each( function(poColeccion){
				if(poColeccion.checked){
					radiosCheckeados = true;						
				}
			});
			if(!radiosCheckeados){
				oColeccion.each( function(poColeccion){
					$(poColeccion.getAttribute('fieldLabel')).addClassName('label-error-mandatory');
					emptyMandatories = true;					
				});
			}else{
				oColeccion.each( function(poColeccion){
					$(poColeccion.getAttribute('fieldLabel')).removeClassName('label-error-mandatory');
				});
			}
		}
		// valida selects
		if (poElementosObligatorios.type == "select-one"){
			if (!poElementosObligatorios.disabled && poElementosObligatorios.selectedIndex == 0){
				olabelCampo = poElementosObligatorios.getAttribute('fieldLabel');
				$(olabelCampo).addClassName('label-error-mandatory');
				$(poElementosObligatorios).addClassName('field-error-mandatory');
				
				emptyMandatories = true;
			}else{
				olabelCampo = poElementosObligatorios.getAttribute('fieldLabel');
				$(olabelCampo).removeClassName('label-error-mandatory');
				$(poElementosObligatorios).removeClassName('field-error-mandatory');
			}
		}
		
		// valida inputs
		if (poElementosObligatorios.type == "text" || poElementosObligatorios.type == "file" || poElementosObligatorios.type == "password"){
			if (!poElementosObligatorios.disabled && poElementosObligatorios.value == ""){
				olabelCampo = poElementosObligatorios.getAttribute('fieldLabel');
				$(olabelCampo).addClassName('label-error-mandatory');
				$(poElementosObligatorios).addClassName('field-error-mandatory');
				
				emptyMandatories = true;
			}else{
				olabelCampo = poElementosObligatorios.getAttribute('fieldLabel');
				$(olabelCampo).removeClassName('label-error-mandatory');
				$(poElementosObligatorios).removeClassName('field-error-mandatory');
			}
		}
		
		// valida textareas
		if (poElementosObligatorios.type == "textarea"){
			if (!poElementosObligatorios.disabled && poElementosObligatorios.value == ""){
				if(poElementosObligatorios.getAttribute('fieldLabel')){
					olabelCampo = poElementosObligatorios.getAttribute('fieldLabel');
					$(olabelCampo).addClassName('label-error-mandatory');
				}
				$(poElementosObligatorios).addClassName('field-error-mandatory');
				emptyMandatories = true;
			}else{
				if(poElementosObligatorios.getAttribute('fieldLabel')){
					olabelCampo = poElementosObligatorios.getAttribute('fieldLabel');
					$(olabelCampo).removeClassName('label-error-mandatory');
				}
				$(poElementosObligatorios).removeClassName('field-error-mandatory');
			}
		}
	});			
}

//metodo utilizado en validateForm
showErrors = function(pObjName, pFormName, pTagErrorName){
	// si hay mensaje de error donde mostrar lo ocurrido
	if(pTagErrorName){
		// mostramos la descripcion de error de validacion
		$(pTagErrorName).removeClassName('d-none');
		// asignamos el valor del boton que valida el formulario al label lMotivoError que indica por que no se puede realizar la accion
		$$('#'+pTagErrorName+' *.lErrorReason LABEL')[0].innerHTML = nls.litMotivoError + $(pObjName).getAttribute('value') + '.';		
		if(hasErrors){
			// mostramos label lCamposError
			$($$('#'+pTagErrorName+' *.lErrorFields LABEL')[0]).removeClassName('d-none');
			// inicializo el mensaje
			$$('#'+pTagErrorName+' *.lErrorFields LABEL')[0].innerHTML = nls.litCamposError;
			//dojo.query('.lErrorFields', pTagErrorName, 'LABEL')[0].innerHTML = nls.litCamposError;
			
			var aLabelsError = $$('#'+pFormName+' *.label-error') 
			//dojo.query('.label-error', pFormName);
			aLabelsError.each(function(paLabelsError){
				var textToShow = paLabelsError.firstChild?paLabelsError.firstChild.innerHTML:paLabelsError.innerHTML;
				
				$$('#'+pTagErrorName+' *.lErrorFields LABEL')[0].innerHTML += textToShow;
				//dojo.query('.lErrorFields', pTagErrorName, 'LABEL')[0].innerHTML += textToShow;
				if(paLabelsError != aLabelsError[aLabelsError.length - 1]){
					$$('#'+pTagErrorName+' *.lErrorFields LABEL')[0].innerHTML += ', ';
					//dojo.query('.lErrorFields', pTagErrorName, 'LABEL')[0].innerHTML += ', ';
				}
			});														
			
		}else{
			// ocultamos label lCamposError
			$($$('#'+pTagErrorName+' *.lErrorFields LABEL')[0]).addClassName('d-none');
			//dojo.addClass(dojo.query('.lErrorFields', pTagErrorName, 'LABEL')[0], 'd-none');
		}
		
		if(emptyMandatories){
			// mostramos label lCamposObligatorios
			$($$('#'+pTagErrorName+' *.lMandatoryField LABEL')[0]).removeClassName('d-none');
			//dojo.removeClass(dojo.query('.lMandatoryField', pTagErrorName, 'LABEL')[0], 'd-none');
			// inicializo el mensaje
			$($$('#'+pTagErrorName+' *.lMandatoryField LABEL')[0]).innerHTML = nls.litCamposObligatorios;
			//dojo.query('.lMandatoryField', pTagErrorName, 'LABEL')[0].innerHTML = nls.litCamposObligatorios;		
		}else{
			// ocultamos label lCamposObligatorios
			$($$('#'+pTagErrorName+' *.lMandatoryField LABEL')[0]).addClassName('d-none');
			//dojo.addClass(dojo.query('.lMandatoryField', pTagErrorName, 'LABEL')[0], 'd-none');
		}
	}
}
/*
//metodo para validar que al menos un campo de un formulario ha sido rellenado
validationAtLeastOne = function(pObjName, pFormName, pTagErrorName, pTagErrorNameUno){
	if(validateForm(pObjName, pFormName, pTagErrorName)){					
		var unoValido = false;
		var oElementosFormulario = $(pFormName).elements;
		dojo.forEach(oElementosFormulario, function(poElementosFormulario){
			// valida selects
			if (poElementosFormulario.type == "select-one"){
				if (!poElementosFormulario.disabled && poElementosFormulario.selectedIndex != 0){
					unoValido = true;
					return false;
				}
			}
			// valida inputs
			if (poElementosFormulario.type == "text"){
				if (!poElementosFormulario.disabled && poElementosFormulario.value != ""){
					unoValido = true;
					return false;
				}
			}
			// valida textareas
			if (poElementosFormulario.type == "textarea"){
				if (!poElementosFormulario.disabled && poElementosFormulario.value != ""){
					unoValido = true;	
					return false;
				}
			}
			// valida radios
			if (poElementosFormulario.type == "radio"){
				if (!poElementosFormulario.disabled && poElementosFormulario.checked){
					unoValido = true;	
					return false;
				}
			}
		});
		
		if(!unoValido){
			// si hay mensaje de error donde mostrar lo ocurrido
			if(pTagErrorNameUno){
				dojo.removeClass($(pTagErrorNameUno), 'd-none');
			}
			return false;
			
		}else{
			dojo.addClass($(pTagErrorNameUno), 'd-none');
			
			return true;
		}	
	}else{
		if(pTagErrorNameUno){			
			dojo.addClass($(pTagErrorNameUno), 'd-none');
		}
	}	
}
*/
// metodo para validar hora
_ishour = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var template = /^2[0|1|2|3]:[0|1|2|3|4|5]\d{1}$|[0|1]\d{1}:[0|1|2|3|4|5]\d{1}$/;
	var bValido = template.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

// metodo para validar mail
_ismail = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var template = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
	var bValido = template.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

//metodo para validar lista de mails separados por coma
_ismaillist = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var mails = sValueInput.split(",");
	
	for(i = 0; i < mails.length; i++){		
		var mail = mails[i];
		var template = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
		var bValido = template.test(mail) ? true : false;
		if(sValueInput == "" || bValido){
			oInput.setAttribute('errorTag', '');
		}else{
			oInput.setAttribute('errorTag', 'error');
			break;
		}		
	}		
}

// metodo para validar telefonos
_istelephone = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var template = /^[9|8|6]\d{8}$/; 
	var bValido = template.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

// metodo para validar numericos
_isnumber = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var template = /^\d{0,}$/;
	var bValido = template.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

// metodo para validar cifras con dos decimales separados por punto o coma (para moneda)
_iscipher = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var template = /^\d{1,}[.,]\d{1,2}$|^\d{1,}$/;
	var bValido = template.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

//metodo para validar numericos mayores que cero
_isnumberhigherzero = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var template = /^\d{0,}$/;
	var bValido = template.test(sValueInput) ? true : false;
	bValido = bValido && sValueInput > 0 ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	} 	
}

// metodo para validar urls
_isurl = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	var template = /^www.[a-zA-Z0-9\-\.]+.[a-z]{2,3}$/;
	var bValido = template.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

// metodo para validar codigos postales
_ispostalzip = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var template = /^\d{5}$/;
	var bValido = template.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

//metodo para validar codigos postales
_isvalidweakpassword = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var enoughRegex = new RegExp("(?=.{6,}).*", "g");
	//var template = /^\w{6,40}$/;
	var bValido = enoughRegex.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

//metodo para validar codigos postales
_isvalidmediumpassword = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
	var bValido = mediumRegex.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

//metodo para validar codigos postales
_isvalidstrongpassword = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
	var bValido = strongRegex.test(sValueInput) ? true : false;
	
	if(sValueInput == "" || bValido){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}

// metodo para validar cif
_iscif = function(evt){
	var oInput = $(this);
	var sValueInput = oInput.value;
	
	if(sValueInput == "" || validateCif(sValueInput) || validateNif(sValueInput) || validateNIE(sValueInput)){
		oInput.setAttribute('errorTag', '');
	}else{
		oInput.setAttribute('errorTag', 'error');
	}
}
validateCif = function(pCif){
	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;
	
	pCif = pCif.toUpperCase();
	
	var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g);
	if (!regular.exec(pCif)) return false;
	
	ultima = pCif.substr(8,1);
	
	for (var cont = 1 ; cont < 7 ; cont ++){
		xxx = (2 * parseInt(pCif.substr(cont++,1))).toString() + "0";
		impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
		pares += parseInt(pCif.substr(cont,1));
	}
	xxx = (2 * parseInt(pCif.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;	
}
validateNif = function(pDni){
	var bReturnValue = true;
	
	 // se rellena con ceros por delante
    if (pDni.length > 0 && pDni.length < 10){
		var iCeros = 9 - pDni.length;
		for (i = 0; i < iCeros; i++){
			pDni = '0' + pDni;
       	}
    }

    if (pDni.length == 9){
		numero = pDni.substr(0, pDni.length-1);
        let = pDni.substr(pDni.length-1, 1).toUpperCase();
        numero = numero % 23;
        letra = 'TRWAGMYFPDXBNJZSQVHLCKET';
        letra = letra.substring(numero, numero+1);                       
        if (letra != let){
			bReturnValue = false;
		}
    }else{
    	bReturnValue = false;
    }
	
    return bReturnValue;
}
validateNIE = function(pNie){
	var bReturnValue = true;

	 if (pNie.length== 9){
		var expreg = new RegExp ("^(X|x)[0-9]{7}[a-zA-Z]$");
        if (!(expreg.test(pNie))){
			bReturnValue = false;
		}
    }else{
        bReturnValue = false;

    }
    return bReturnValue;
}

// metodo para validar numero de cuenta
_isCCC = function(evt){
	dojo.query('.entidad_', this.parentNode)[0];
	var entidad = dojo.query('.entidad_', this.parentNode)[0]; 
	var oficina = dojo.query('.oficina_', this.parentNode)[0];
	var dc = dojo.query('.dc_', this.parentNode)[0];
	var numero = dojo.query('.numero_', this.parentNode)[0];

	var aInputCCC = dojo.query('input', this.domNode);
	if((entidad.value == "" && oficina.value == "" && dc.value == "" && numero.value == "") || validateCCC(entidad.value, oficina.value, dc.value, numero.value)){
		entidad.setAttribute('errorTag', '');
		oficina.setAttribute('errorTag', '');
		dc.setAttribute('errorTag', '');
		numero.setAttribute('errorTag', '');
	}else{
		entidad.setAttribute('errorTag', 'error');
		oficina.setAttribute('errorTag', 'error');
		dc.setAttribute('errorTag', 'error');
		numero.setAttribute('errorTag', 'error');
	}
}
validateCCC = function(pEntidad, pOficina, pDc, pNumero){
	if (!(getDigit("00" + pEntidad + pOficina) == parseInt(pDc.charAt(0))) || !(getDigit(pNumero) == parseInt(pDc.charAt(1))))
		return false;
	else
		return true;			
}
getDigit = function(pValor){
	valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
	control = 0;
	for (i=0; i<=9; i++)
		control += parseInt(pValor.charAt(i)) * valores[i];
	control = 11 - (control % 11);
	if (control == 11) control = 0;
	else if (control == 10) control = 1;
		return control;
}
//metodo para validar dos inputs que sean iguales
_inputEquals = function(pElement,pRepeatedElement){
	
	var bValido = pElement.value == pRepeatedElement.value ? true : false;
	
//	if(pElement.value != "" && bValido){
//		pElement.setAttribute('errorTag', '');
//	}else{
//		pElement.setAttribute('errorTag', 'error');
//	}
	
	return bValido;
}


Event.observe(window, 'load', function() {
	
	if($('submitButtonId')){
		
		Event.observe($('submitButtonId'), 'click', function() {			
			var bValidationForm = validateForm('submitButtonId', 'contacto');
			if(bValidationForm == true){
				$('contacto').submit();
			}
		});
		
		Event.observe($('iEmail'), 'blur', _ismail);
	}
	
	if($('bAdminForm')){
		
		Event.observe($('bAdminForm'), 'click', function() {			
			var bValidationForm = validateForm('bAdminForm', 'fAdminForm');
			if(bValidationForm == true){
				$('fAdminForm').submit();
			}
		});
	}
	
	if($('bSubmitButton')){
		
		Event.observe($('bSubmitButton'), 'click', function() {			
			var bValidationForm = validateForm('bSubmitButton', 'fForm');
			if(bValidationForm == true){
				$('fForm').submit();
			}
		});
	}
});

