/** Validacion del formulario **/

var listaCampos= new Array();
var listaEtiquetas = new Array();

var requiredClassname = 'required';

var validateEvents = function () {
	listaEtiquetas = new Array();
	listaCampos = new Array();
	// etiquetas
	var labels = document.getElementsByTagName("label");
	for (i=0; i<labels.length; i++) {
		if (labels[i].className == requiredClassname) {
			listaEtiquetas.push(labels[i].firstChild.data);
			// parchecito para IE (como siempre!)
			var targetname=labels[i].getAttribute('for')?labels[i].getAttribute('for'):labels[i].getAttribute('htmlFor');
			var targetfield = document.getElementById(targetname);
			if (targetfield != null) {
				listaCampos.push(targetfield.name);
			}
		}
	}
}


/** Extiende el objeto Array **/
Array.prototype.in_array = in_array;
function in_array (param) {
	for (var i=0; i<this.length; i++) {
		if (this[i] == param) return true;
	}
	return false;
}

Array.prototype.remove = remove;
function remove (param) {
	var temp = Array();
	for (var i=0; i<this.length; i++) {
		if (this[i] != param) {
			temp.push(this[i]);
		}
	}
	return temp;
}

/** Validacion de formulario **/

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 = ', ';
	}
	
	/*for ( var i = 0; i < campos.length; i++){
		alert("Eti: " + etiquetas[i]);
		alert("campo: " + campos[i]);
	}*/
	
	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 = 'Los siguiente campos deben ser numÃ©ricos:\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 + ", "+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;
	}
}