/*	Esta función valida una lista de campos en un formulario, utilizando las funciones externas validaText
y validaSelect. Recibe 3 parámetros: el nombre del formulario, un array que es una lista de los campos a validar,
y una lista de etiquetas que identificarán a los campos no cumplimentados en el mensaje que aparece si alguno
no ha sido cumplimentado debidamente.
*/
function validaForm (nomForm, campos, etiquetas, mensaje_init, delimitador) {

var argumentos=validaForm.arguments;
if (argumentos[0] == null) {
	var nomForm = 'forms[0]';
} else {
	var nomForm = argumentos[0];
}

var campos = argumentos[1];
var etiquetas = argumentos[2];
if (argumentos[3] == '') {
	mensaje_init = 'Por favor, rellena\n';
}

if (argumentos[4] == null) {
	var delimitador = ', ';
}


var mensaje = mensaje_init;
	for ( var i = 0; i < campos.length; i++){
		switch (eval("document."+nomForm+"."+campos[i]).type.substring(0,1)){
			case "t" :	// texto o un textarea
				if (validaText(nomForm, campos[i]) == 0){
					if (mensaje == mensaje_init) {
						mensaje = mensaje+etiquetas[i];
					}else{
						mensaje = mensaje + delimitador+etiquetas[i];
					}
				}
				break;
			case "s" :	// select simple o múltiple
				if(validaSelect(nomForm, campos[i])==0){
					if (mensaje == mensaje_init) {
						mensaje = mensaje+etiquetas[i];
					}else{
						mensaje = mensaje + delimitador+etiquetas[i];
					}
				}
				break;
			case "p" :
				if (validaText(nomForm, campos[i]) == 0){
					if (mensaje == mensaje_init) {
						mensaje = mensaje+etiquetas[i];
					}else{
						mensaje = mensaje + delimitador+etiquetas[i];
					}
				}
				break;
			case "h" :
				if (validaText(nomForm, campos[i]) == 0){
					if (mensaje == mensaje_init) {
						mensaje = mensaje+etiquetas[i];
					}else{
						mensaje = mensaje + delimitador+etiquetas[i];
					}
				}
				break;				
			
			default :
				break;
		}
	}
	if (mensaje != mensaje_init) {
		alert(mensaje);
	} else {
		return 1;
	}
}

/*	Esta función valida un campo texto o textarea. Devuelve 0 si el campo está vacío o es nulo.
Devuelve 1 en caso contrario
*/
function validaText(nomForm,nomTexto) {
	if (eval("document."+nomForm+"."+nomTexto+".value") == null || eval("document."+nomForm+"."+nomTexto+".value") == "") {
		return 0;
	}
	else {
		return 1;
	}
}

/* Esta funcion valida la selección en un tag select, que debe ser diferente de la primera opción (o sea, 0)
Si se ha seleccionado algo distinto de la primera opción, devuelve 1. Si no, devuelve 0.
*/

function validaSelect(nomForm,nomSelect) {
	var indice = eval("document."+nomForm+"."+nomSelect+".selectedIndex");
	if (indice == 0) {
		return 0;
	}
	else {
		return 1;
	}
}

/* esta función comprueba que una dirección email es correcta */
function validaEmail(nomForm, nomCampo, mensaje){
	valor = eval("document."+nomForm+"."+nomCampo+".value");
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // no válidos
	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // válidos
	if (!reg1.test(valor) && reg2.test(valor)) { // si la sintaxis es correcta
		return 1;
	}
	alert(mensaje);
}

/* esta función comprueba que una lista de campos (array) son numéricos */
function validaNumericos(nomForm, listaCampos, listaEtiquetas, mensaje_init) {
	var argumentos=validaNumericos.arguments;
	var nomForm = argumentos[0];
	var campos = argumentos[1];
	var etiquetas = argumentos[2];
	if (argumentos.length == 4) {
		var mensaje_init = argumentos[3]
	} else {
		mensaje_init = 'Els següents camps només poden contenir números:\n';
	}
	var mensaje = mensaje_init;	
	// bucle para validar los campos
	for ( var i = 0; i < campos.length; i++){
		var valor_campo = eval("document."+nomForm+"."+campos[i]+".value");
		if (esNumerico (valor_campo) == 0) {
			if (mensaje == mensaje_init) {
				mensaje = mensaje+etiquetas[i];
			} else{
				mensaje = mensaje + ",\n"+etiquetas[i];
			}		
		}
	}
	if (mensaje != mensaje_init) {
		alert(mensaje);
	} else {
		return 1;
	}

}

function esNumerico (valor) {
	var reg = /[^0123456789]/;
	if (reg.test(valor)) {
		// si hay algún caracter no numérico.
		return 0;
	} else {
		return 1;
	}
}


// esta función anima el color de fondo de una TR
function onTR(tr,color,over){
	if (over) {
		tr.style.cursor='hand';
	} else {
		tr.style.cursor='default';
	}
	tr.bgColor=color;
}

// esta función cambia el valor de un campo en función de si uno de
// mismo nombre, pero terminado _chk está marcado o no
// sólo es obligatorio el primer campo
function Check (campo1, campo2, formulario) {
	if (Check.arguments[2] == null ) {
		formulario = eval(document.forms[0]);
	} else {
		formulario = eval('document.'+Check.arguments[2]);
	}

	var campo1 = Check.arguments[0];
	
	for (i=0; i<formulario.elements.length; i++) {
		if (formulario.elements[i].name == campo1) {
			campo1 = formulario.elements[i];
		}
	}
	
	
	// si no se ha definido el segundo campo, busca un campo con el mismo
	// nombre y terminado en _chk
	if (Check.arguments[1] == null) {
		nombre = campo1.name+'_chk';
		for (i=0; i<formulario.elements.length; i++) {
			if (formulario.elements[i].name == nombre) {
				campo2 = formulario.elements[i];
			}
		}
	}
	
	if (campo2.checked) {
		campo1.value = 1;
	} else {
		campo1.value = 0;
	}
}

function checkData(fecha) {
	if (fecha != null) {
		// el formato válido de fecha es dd/mm/aaaa
		var reg1 = /[0-9]{2}\/[0-9]{2}\/[0-9]{4}/;
		if (reg1.test(fecha)) {
			return 1;
		} else {
			alert('Formato de fecha no válido.');
		}
	} else {
		alert('Formato de fecha no válido.');
	}
}

/**
 * Muestra u oculta el primer nodo hijo (div) de un elemento
*/

function showDiv() {
	var args=showDiv.arguments;
	if (args[0] == null) {
		var el = this;
	} else {
		var el = args[0];
	}
	alert(el);
	parent = el.parentNode;
	if (parent != null) {
		if (this.className == "headerclosed") {
		} else {
		}
		divs = parent.getElementsByTagName("DIV");
		for (i=0; i<divs.length; i++) {
			if (divs[i].className == 'collapsible') {
				// alert(divs[i].id);
				if(divs[i].style.display == 'none') {
					divs[i].style.display = 'block';
				} else {
					divs[i].style.display = 'none';
				}
			}
		}
	}
}

// comprueba que el password y su confirmación son iguales
function checkPwd (pwd1, pwd2, msg, checkLength, pwdLength, msg2) {
	// valores por defecto
	var argumentos=checkPwd.arguments;
	if (argumentos[2] == null) {
		msg = 'La contraseña y su confirmación no coinciden.';
	}
	
	if (argumentos[3] == null)  {	 	// no se comprueba la longitud
		checkLength = 0;	
	}
	if (argumentos[4] == null) {		// longitud por defecto del password
		pwdLength = 6;
	}
	if (argumentos[5] == null) {
		msg2 = 'La contraseña no es lo bastante larga.';
	}
	

	// verifica los tipos, dado que el parámetro puede ser el valor directamente,
	// o bien el campo del formulario
	if (pwd1.type == 'password') {
		val1 = pwd1.value;
		val2 = pwd2.value;
	} else {
		val1 = pwd1;
		val2 = pwd2;
	}

	if (val1 != val2) {
		alert(msg);
	} else {
		if (!checkLength) {
			return 1;
		} else {
			if (val1.length < pwdLength ) {
				alert(msg2+'\nDebe tener un mínimo de  '+pwdLength+' caracteres.');
			} else {
				return 1;
			}
		}
	}
}

/**
 * Valida el formato de una hora, que debe ser hh:mm
 * @param String hora
 * @return int
 * 	0: correcto
 *  1: formato incorrecto
 *  2: hora no valida
 */
function validaHora (hora) {
	var reHora = /^([0-9]{1,2}):([0-9]{2})$/;
	if (!reHora.test(hora)) {
		return 1;
	} else {
		if ((RegExp.$1 > 24) || (RegExp.$2 > 59)) {
			return 2
		}
	}
	return 0;
}

/**
 * Valida el formato de una fecha, que debe ser dd:mm:aaaa
 * @param String fecha
 * @return int
 * 	0: correcto
 *  1: formato incorrecto
 *  2: fecha no valida
 */
function validaFecha (fecha) {
	var reFecha = /^([0-9]{1,2}).{1}([0-9]{1,2}).{1}([0-9]{4})$/;
	if (!reFecha.test(fecha)) {
		return 1;
	} else {
		if ((RegExp.$1 > 31) || (RegExp.$2 > 12)) {
			return 2
		}
	}
	return 0;
}