function validar_formulario(form,e_oblig, e_tipo, e_numerico, e_alfanum, e_valor, e_dia, e_entero, e_telf, e_mail, e_letras)
/*---------------------------------------------------------------------------------------------------------------------
	Valida que un formulario tenga "rellenados" todos los campos 
	obligatorios y que estos tengan el formato correcto.
	Si "rellena" campos no obligatorios verifica tb que el formato sea el
	correcto.
	La validación la hace en dos partes, primero que los campos obligatorios
	tengan valor y luego que el formato sea correcto.
	Devuelve cierto si la validación ha sido correcta, falso en caso 
	contrario.
	
	Comprobará los campos que tengan el siguiente formato: XY_nombre del campo
		   Donde X indica si es un campo obligatorio (o) o no (v).
		   Y indica el tipo del campo:
		   	n --> numérico (admite decimales separados por punto)
		   	c --> alfanumérico (qualquier carácter)
		   	v --> cualquier valor (letras,números...) mientras no haya un blanco al principio
		   	f --> fecha (dd/mm/yyyy)
		   	e --> campo entero
		   	t --> campo telefònico (9 dígitos)
		   	m --> correo electrónico
		   	l --> sólo admite letras
	
	Parámetro de entrada:
		form --> document.nombreDelFormulario
		e_xxx --> Mensajes de error
	
	SCM 25/11/2005
----------------------------------------------------------------------------------------------------------------------*/
{
	var ok = true;
	var mirar = true; //Valor que controla si miramos el formato o no
	var msg = ""; //Mensaje de error
	var primer = 0;

	//Comprueba los campos obligatorios
	for (var i=0; i<form.length; i++)
	{
		//La etiqueta <fieldset> la trata como undefined y peta
		if (form.elements[i].type != undefined) 
		{
			//Sólo se validan los campos con el formato correcto 
			if (form.elements[i].name.charAt(2) == "_") 
			{
				//Comprobamos que todos los campos obligatorios tengan algun valor
				if (form.elements[i].name.charAt(0) == "o") 
				{
					if ((form.elements[i].value == "") && (ok == true)) //Vacío
					{
						ok = false;
						msg += form.elements[i].name+" "+e_oblig+"\n";
						if (primer == 0) //Poner foco al primer elemento erróneo
						{
							primer = 1;
							//form.elements[i].focus();
							mirar= false; //Para validar el formato
						}
					}
				}
			}
		}
	}
	//Comprobamos el tipo formato
	if (mirar == true)
	{
		for (var i=0; i<form.length; i++)
		{
			if ((form.elements[i].type != undefined) && (form.elements[i].name.charAt(2) == "_") && (form.elements[i].value != ""))
			{
				//Campo exclusivamente numérico
				if ((form.elements[i].name.charAt(1) == "n") && (!es_numero(form.elements[i].value)))
				{
					if (primer == 0) //Seleccionar el primer elemento erróneo
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_numerico+"\n";
				}
				//Campo alfanumérico
				if ((form.elements[i].name.charAt(1) == "c") && (!es_caracter(form.elements[i].value))) 
				{
					if (primer == 0) 
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_alfanum+"\n";
				}
				//Campo alfanumérico
				if ((form.elements[i].name.charAt(1) == "v") && (!es_valor(form.elements[i].value))) 
				{
					if (primer == 0) 
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_valor+"\n";
				}
				//Campo fecha
				if ((form.elements[i].name.charAt(1) == "f") && (!es_fecha(form.elements[i].value))) 
				{
					if (primer == 0)
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_dia+"\n";
				}
				//Campo de enteros
				if ((form.elements[i].name.charAt(1) == "e") && (!es_entero(form.elements[i].value))) 
				{
					if (primer == 0)
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_entero+"\n";
				}
				//Campo telefónico
				if ((form.elements[i].name.charAt(1) == "t") && (!es_telefono(form.elements[i].value))) 
				{
					if (primer == 0)
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_telf+"\n";
				}
				//Campo de e-mail
				if ((form.elements[i].name.charAt(1) == "m") && (!es_mail(form.elements[i].value)))
				{
					if (primer == 0) 
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_mail+"\n";
				}
				//Campo exclusivamente letras
				if ((form.elements[i].name.charAt(1) == "l") && (!es_letra(form.elements[i].value)))
				{
					if (primer == 0) 
					{
						primer = 1;
						form.elements[i].select();
						msg += "- "+e_tipo+"\n\n";
					}
					ok = false;
					msg +=  "     "+form.elements[i].value+": "+e_letras+"\n";
				}
			}
		}
	}
	if (ok == false)
	{
		alert(msg);
	}
	return ((msg.length) == 0);
}

function validar_formulario_vacio(formulario,error)
/*---------------------------------------------------------------------------
	Valida de un formulario de los campos que no son del tipo:
	submit, button y image que tengan algun valor.
	Parámetro de entrada --> document.nombreDelFormulario
	
	SCM 9/11/2005
----------------------------------------------------------------------------*/
{
	var validado=false;
	var i=1;

	while ((i<formulario.length) && !validado)
	{ 
		if((formulario.elements[i].type != "submit") && (formulario.elements[i].type != "image") && (formulario.elements[i].type != "button") && (formulario.elements[i].value != ""))
		{
			validado = true;
		}
		i++;
	}
	if (!validado) 
		alert (error); //Introduce alguno de los campos
	return validado;
}

function reset(formulario)
/*---------------------------------------------------------------------------
	Borra el valor de todos los campos de texto de un formulario
	
	formulario --> El formulario entero de esa página
	
	SCM 4/5/2006
----------------------------------------------------------------------------*/
{
	var i;
	
	for (i=0; i<formulario.length; i++)
	{ 
		if (formulario.elements[i].type == "text") 
			formulario.elements[i].value = "";
	}
}

function validar_cuadros_texto_vacio(formulario,error)
/*----------------------------------------------------------------------------
	Valida como mínimo un elemeno de tipo cuadro de texto perteneciente a
	un formulario tenga algún valor
	Parámetro de entrada --> document.nombreDelFormulario
	
	SCM 9/11/2005
----------------------------------------------------------------------------*/
{
	var validado=false;
	var i=1;

	while ((i<formulario.length) && !validado)
	{ 
	
		if((formulario.elements[i].type == "text") && (formulario.elements[i].value != ""))
		{
			validado = true;
		}
		i++;
	}
	if (!validado) 
		alert (error); //Introduce alguno de los campos
	return validado;
}

function ValidarText(valor1,valor2,error)
/*--------------------------------------------------------------
	Validación del formulario de identificación de usuario 
	(dos cuadros de texto)
	
	SCM 2005
--------------------------------------------------------------*/
{
	if (valor1 == "" || valor2 == "")
	{
		alert (error); //Introduce los datos necesarios.
		return false;
	}
	else
		return true;
}


function ValidarCuadroTexto(valor,msn)
/*---------------------------------------------------------------------
	Función que valida que un cuadro de texto tenga valor.
	
	SCM 2005
-----------------------------------------------------------------------*/
{
	if (valor == "")
	{
		alert (msn); //Introduce el valor
		return false;
	}
	else
		return true;
}

function ValidarRadio(valor,msn)
/*---------------------------------------------------------------------
	Valida si se ha seleccionado algun radio button del formulario
	
	SCM 2005
-----------------------------------------------------------------------*/
{
	var i;

	i=0;
	while ((valor[i].checked == false) && (i<valor.length-1))
	{
		i++;
	}
	if (valor[i].checked == true)
	{
		return true;
	}
	else
	{
		alert(msn); //Debes seleccionar un valor
		return false;
	}
}

function ValidarSeleccion(valor,msn)
/*---------------------------------------------------------------------
	Valida que se haya seleccionada el valor sobre el que 
	se quiere hacer la acción (desplegable)
	
	SCM 2005
-----------------------------------------------------------------------*/
{
	if (valor == "")
	{
		alert(msn); //Debes seleccionar un valor
		return false;
	}
	else
	{
		return true;
	}
}


function PreguntarBorrar(msn)
/*---------------------------------------------------------------------
	Pregunta al usuario si está seguro de continuar con 
	la eliminiación de registros
	
	SCM 10/2005
-----------------------------------------------------------------------*/
{
	var esborrar;

	esborrar = confirm(msn); //Eliminar el registro y todo lo relacionado con él
	
	return esborrar;
}


function ValidarBorrar(valor, error, confirmacion)
/*---------------------------------------------------------------------
	Función que valida que se haya seleccionado el registro a 
	borrar y pregunta si se quiere realizar
	
	SCM 10/2005
-----------------------------------------------------------------------*/
{
	var esborrar=false;
	
	if (valor == "")
	{
		alert(error);
		return false;
	}
	else
	{
		esborrar = confirm(confirmacion);
		return esborrar;
	}
}

function BorrarRadio(valor,msn,borrar)
/*---------------------------------------------------------------------
	Función que valida que se haya seleccionado el registro a 
	borrar mediante redio button y pregunta si se quiere realizar
	
	SCM 25/10/2005
-----------------------------------------------------------------------*/
{
	var esborrar=false;
	
	if (ValidarRadio(valor,msn))
	{
		esborrar = PreguntarBorrar(borrar); 
	
	}
	return esborrar;
}

/****************************** ESPECÍFICAS **********************************/

// WEB INCIDENCIAS

function ValidarAltaUsuario(usuario,pass1,pass2,e_vacio,e_pass)
/*---------------------------------------------------------------------
	Función que valida el formulario de alta de usuario 
	de la web de incidencias
	
	SCM 2005
-----------------------------------------------------------------------*/
{
	var msg="";

	if (usuario == "" || pass1 == "" || pass2 == "")
	{
		msg += "- "+e_vacio+"\n"; //Introduce los datos necesarios
	}
	if (pass1 != pass2)
	{
		msg += "- "+e_pass+"\n";
	}
	if (msg.length >0)
	{
		alert(msg);
	}
	return ((msg.length) == 0);
}

function ValidarPreincidencia(descripcion,msn)
/*---------------------------------------------------------------------
	Función que valida el formulario de añadir una preincidencia
	
	SCM 2005
-----------------------------------------------------------------------*/
{
	var msg="";

	if (descripcion == "")
	{
		msg += msn; //Introduce los datos en los campos obligatorios
	}
	if (msg.length >0)
	{
		alert(msg);
	}
	return ((msg.length) == 0);
}

function ValidarBusquedaRapida(estado,usuario,e_estado,e_usuario)
/*---------------------------------------------------------------------------
	Valida el formulario de la consulta rápida de la web de incidencias
	
	SCM 2005
----------------------------------------------------------------------------*/
{
	var msg="";
	
	if ((estado[0].checked == false) && (estado[1].checked == false) && (estado[2].checked == false))
	{
		msg += "- "+e_estado+"\n";
	}
	if ((usuario[0].checked == false) && (usuario[1].checked == false))
	{
		msg += "- "+e_usuario+"\n";
	}
	if (msg.length >0)
	{
		alert(msg);
	}
	return ((msg.length) == 0);
}


/********************************* LIBRETÓN **************************************/

function borrar_usuario(formulario)
/*---------------------------------------------------------------------------
	Borra todos los campos del formulario de dar de alta a un usuario 
	(/g_usuarios/usuarios/agregar.php)
	
	formulario --> El formulario entero de esa página
	
	SCM 24/11/2005
----------------------------------------------------------------------------*/
{
	var i;
	
	for (i=0; i<formulario.length; i++)
	{ 
		if (formulario.elements[i].type != "submit" && formulario.elements[i].type != "button") 
			formulario.elements[i].value = "";
	}
}

function validar_usuario(form,e_oblig, e_tipo, e_numerico, e_alfanum, e_valor, e_dia, e_entero, e_telf, e_mail, e_letras, e_grupos,e_pass,max)
/*---------------------------------------------------------------------------------
	Valida que la contraseña 1 y su confirmación sean correctas y que el 
	usuario tenga un grupo como mínimo asignado.
	Esta validación se hace después de validar los campos obligatorios y el
	formato de los campos.
	
	Parámetros de entrada:
		pass1 --> contraseña 1
		pass2 --> verificación de la contraseña 1
		grupos --> grupos asigandos
		e_password --> mensaje de error en el caso que las contraseñas no coincidan
		e_grupos --> mensaje de error en caso que no se hayan asignado grupos
		
	Devuevle true si la validación ha sido correcta y false en caso contrario
		
	SCM 12/12/2005
------------------------------------------------------------------------------------*/
{
	var msg = "";

	if (validar_formulario(form,e_oblig, e_tipo, e_numerico, e_alfanum, e_valor, e_dia, e_entero, e_telf, e_mail,max, e_letras))
	{
		if (form.departamento2.length == 0)
		{
			msg += "- "+e_grupos;
		}
		if (msg.length >0)
		{
			alert(msg);
		}
		if ((msg.length == 0) && (e_pass != 'NULL'))
			obtenerPassword(max,e_pass);
		return ((msg.length) == 0);
	}
	else
	{
		return false;
	}
}

//function validar_password (pass1, pass2,externo, codigo, min, max, cadena, e_password, e_long, e_codigo, e_alfanumerico)
function validar_password (externo, codigo, min, max, e_introduce_datos, e_contener_pass, e_long, e_codigo, e_alfanumerico, e_repetir_pass, e_password)
/*---------------------------------------------------------------------------------
	Valida que el password de configurar preferencias del usuario esté 
	introducido y bien verificado

	Parámetros de entrada:
		pass1 --> contraseña 1
		pass2 --> verificación de la contraseña 1

	SCM 16/12/2005
------------------------------------------------------------------------------------*/
{
	var msg = "";
	var letras = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	var num = "0123456789";
	var encontrado1 = false, encontrado2 = false; //Si ha encontrado letras (1) y números (2)
	var fin = false; //Búsqueda de password repetido
	var i=0; //Contador del array del password

	//Si un campo password tiene valor los otros dos tb
	if (((document.form1.vc_pass_actual.value != "") && ((document.form1.vc_pass1.value == "") || (document.form1.vc_pass2.value == "")))
	     || ((document.form1.vc_pass1.value != "") && ((document.form1.vc_pass_actual.value == "") || (document.form1.vc_pass2.value == "")))
	     || ((document.form1.vc_pass2.value != "") && ((document.form1.vc_pass_actual.value == "") || (document.form1.vc_pass1.value == ""))))
	{
			msg += "- "+e_introduce_datos+"\n";
	}
	if ((document.form1.vc_pass_actual.value != "") && (document.form1.vc_pass1.value != "") && (document.form1.vc_pass2.value != ""))
	{
		if ((document.form1.vc_pass1.value != document.form1.vc_pass2.value) && (document.form1.vc_pass1.value != "") && (document.form1.vc_pass2.value != ""))
		{
			msg += "- "+e_contener_pass+"\n";
		}
		//Si los usuarios son externos tienen más restricciones
		if (externo == 1)
		{
			//Lontitud del password
			if ((document.form1.vc_pass1.value.length < min) || (document.form1.vc_pass2.value.length < min) || (document.form1.vc_pass1.value.length > max) || (document.form1.vc_pass2.value.length > max))
			{
				msg += "- "+e_long+" ("+min+"-"+max+")\n";
			}
			//El código del usuario no puede estar contenido en el password
			if (document.form1.vc_pass1.value.indexOf(codigo) != -1)
			{
				msg += "- "+e_codigo+"\n";
			}
			//Números y letras
			while ((i < document.form1.vc_pass1.value.length) && (!encontrado1 || !encontrado2))
			{
				if (letras.indexOf(document.form1.vc_pass1.value.charAt(i)) != -1)
					encontrado1 = true;
				if (num.indexOf(document.form1.vc_pass1.value.charAt(i)) != -1)
					encontrado2 = true;
				i++;
			}
			if ((encontrado1 == false) || (encontrado2 == false))
				msg += "- "+e_alfanumerico+"\n";
		}
	}
	if (msg.length >0)
	{
		alert(msg);
	}
	return (msg.length==0);
}