// Devuelve la posición que ocupa un formulario dado por su name en una página html.
// Recorro el array de formularios de la página web comprobando todos los formularios
//      que puedan existir hasta encontrar el formulario con el mismo nombre, y 
//      devuelvo su índice dentro del array de formularios.
// Parámetros :
// - nombre_form : nombre a buscar en la página html generada.

function averiguarIndiceForm(nombre_form) {
    var num_forms = document.forms.length;
    var indice_form = -1;
    for (i=0; i < num_forms; i++) {
        if (document.forms[i].name == nombre_form)
            indice_form = i;
    }
    return indice_form;
}


// Comprueba si se han rellenado los campos obligatorios del formulario, y si no se han rellenado 
//      no se valida el formulario, mostrando un mensaje informativo al usuario.
// Parámetros :
// - nombre_form : nombre del formulario a chequear.
// - string_obligatorios : string con los "name" de los campos del formulario que son obligatorios,
//         separados por el caracter separador definido en el settings.
// - string_amostrar_obligatorios : string con el mismo formato que el parámetro anterior que contiene
//         el texto adecuado para mostrar al usuario, en vez del nombre del campo html
// - separador : caracter separador definido en el settings para acotar los campos dentro de un string.

// La cadena que obtengo en el parámetro string_obligatorios es del estilo :
// - si sólo hay un campo obligatorio que comprobar :
//          'campo1##'
// - si hay varios campos obligatorios que comprobar :
//          'campo1##campo2##campo3##campo4'

function checkFormNewTest(nombre_form, string_obligatorios, string_amostrar_obligatorios, separador) {
    var num_form_buscado = averiguarIndiceForm(nombre_form);
    if (num_form_buscado != -1) {
      	msg = "";
    
        arr_obligatorios = string_obligatorios.split(separador);
        arr_amostrar_obligatorios = string_amostrar_obligatorios.split(separador);
        
        // Creo el array de los campos obligatorios que tendrá el formulario
      	var num_obligatorios = arr_obligatorios.length;
      	var num_elems = document.forms[num_form_buscado].elements.length;
    
      	for (i=0; i < num_elems; i++) {
            for (j=0; j < num_obligatorios; j++) {
                if ((document.forms[num_form_buscado].elements[i].name == arr_obligatorios[j]) && (document.forms[num_form_buscado].elements[i].value == ""))
                    msg += "- " + arr_amostrar_obligatorios[j] + "\n";
            }
        }
        var msgtotal = "";
        if (msg != "") {
            msgtotal = "Error al rellenar el formulario.\n\nSe requieren los siguientes campos :\n" + msg;
            alert(msgtotal);
            return false;
        }
        else
            return true;
    }
}

// Función que compara los valores de varios campos de un formulario para comprobar que sean iguales, 
//        y sólo deja validar el formulario si la condición de igualdad en todos los campos requeridos 
//        se cumple.
// Función muy práctica para comprobar, por ejemplo, la igualdad de :
// - los campos "Contraseña" y "Confirmar contraseña".
// - los campos "Email" y "Confirmar email".

// Posibles valores retornados :
// - Si todos los campos requeridos son iguales, se ejecuta el action con normalidad.
// - Si al menos uno de los valores introducidos en los input que se especifican es distinto, 
//        no se valida el formulario y se muestra un mensaje de error para informar de todos los 
//        campos que se requiere que sean iguales.

// La cadena que obtengo en el parámetro string_iguales es del estilo :
// - en este caso, siempre tengo que comprobar al menos 2 campos :
//          'campo1##campo2##campo3##campo4'

function checkEqualValues(nombre_form, string_iguales, string_amostrar_iguales, separador) {
    var num_form_buscado = averiguarIndiceForm(nombre_form);
    if (num_form_buscado != -1) {
      	msg = "";
    
        arr_iguales = string_iguales.split(separador);
        arr_amostrar_iguales = string_amostrar_iguales.split(separador);
        
        // Creo el array de los campos obligatorios que tendrá el formulario
      	var num_iguales = arr_iguales.length;
      	var num_elems = document.forms[num_form_buscado].elements.length;
      	var todos_los_campos_iguales = "";
      	
      	// Cojo el valor del primer campo a comparar, y todos serán iguales a él
      	for (i=0; i < num_elems; i++) {
      	   if (document.forms[num_form_buscado].elements[i].name == arr_iguales[0])
      	       contenido_clave_iguales = document.forms[num_form_buscado].elements[i].value; 
        }
        
        // Comparo el resto de valores que deben ser iguales en el formulario con el valor obtenido en contenido_clave_iguales
      	for (i=0; i < num_elems; i++) {
          	var todos_los_campos_iguales = "";
            for (j=0; j < num_iguales; j++) {
                if ((document.forms[num_form_buscado].elements[i].name == arr_iguales[j]) && (document.forms[num_form_buscado].elements[i].value != contenido_clave_iguales) )
                    msg += "- " + arr_amostrar_iguales[j] + "\n";
                todos_los_campos_iguales += "- " + arr_amostrar_iguales[j] + "\n";
            }
        }
        var msgtotal = "";
        if (msg != "") {
            msgtotal = "Error al rellenar el formulario.\n\nLos siguientes campos no coinciden :\n" + todos_los_campos_iguales;
            alert(msgtotal);
            return false;
        }
        else
            return true;
    }
}

// Función que pide la confirmación de una acción al usuario. En caso afirmativo, se redirigirá a otra página
// Parámetros :
// - message : texto indicativo que se mostrará
// - url : ruta destino de la redirección
function confirma(message,url) {
    var respuesta = confirm(message);
    if (respuesta) {
        location.href = url;
        if ((getBrowserName() == 'ie') && (getBrowserVersion() == '6'))
            location.reload();
    }
}


// Función que comprueba la extensión de un archivo seleccionado por el usuario en un campo de tipo "File".
// La extensión del archivo seleccionado por el usuario tendrá que ser igual a una de las extensiones pasadas por parámetro.
// Parámetros
// - nombre_form : nombre del formulario sobre el que actuamos
// - extensiones : cadena de caracteres con todas extensiones posibles admitidas por el formulario,
//        separadas por el caracter separador definido en el settings.
// - separador : caracter separador definido en el settings para acotar los campos dentro de un string.

// La cadena que obtengo en el parámetro extensiones es del estilo :
// - si sólo hay una extension que comprobar :
//          'ext1##'
// - si hay varias extensiones que comprobar :
//          'ext1##ext2##ext3##ext4'

function comprueba_extension(nombre_form, extensiones, separador) {
    var num_form_buscado = averiguarIndiceForm(nombre_form);
    if (num_form_buscado != -1) {
        var extension_elegida = document.forms[num_form_buscado].userfile.value.substring(document.forms[num_form_buscado].userfile.value.length - 4, document.forms[num_form_buscado].userfile.value.length);
      	msg = "";
    
        arr_extensiones = extensiones.split(separador);

        // Creo el array de los campos obligatorios que tendrá el formulario
      	var num_extensiones = arr_extensiones.length;
      	var encontrada = false;

        // Compruebo si la extensión elegida en el formulario es una de las permitidas
        for (j=0; j < num_extensiones; j++) {
            if (extension_elegida == arr_extensiones[j])
                encontrada = true;
        }
        
        if (!encontrada) {
            var msgtotal = "Error al rellenar el formulario.\n\nLista de extensiones de archivo permitidas :\n";
            for (j=0; j < num_extensiones-1; j++) {
                msgtotal += "- " + arr_extensiones[j] + "\n";
            }
            
            alert(msgtotal);
            return false;
        }
        else
            return true;
    }
}

// Comprueba si en un formulario se ha rellenado al menos un checkbox.
// Devolverá cierto si al menos uno de los checkbox pasados por sus nombres
//      en el parámetro string_obligatorio ha sido señalado, y devolverá falso
//      en el caso de que ninguno de ellos haya sido señalado por el usuario.
// De esta manera, esta función permite distinguir entre algún grupo de checkbox
//      en el que es obligatorio señalar alguno, y otros grupos en los que no es
//      obligatorio señalar alguno dentro de un mismo formulario.

function checkFormsFillCheckBox(nombre_form, string_obligatorios, separador) {
    var num_form_buscado = averiguarIndiceForm(nombre_form);
    if (num_form_buscado != -1) {
      	msg = "";

        arr_obligatorios = string_obligatorios.split(separador);
        // Creo el array de los campos obligatorios que tendrá el formulario
      	var num_obligatorios = arr_obligatorios.length;
      	var num_elems = document.forms[num_form_buscado].elements.length;

      	for (i=0; i < num_elems; i++) {
            for (j=0; j < num_obligatorios; j++) {
                if ((document.forms[num_form_buscado].elements[i].name == arr_obligatorios[j]) && (document.forms[num_form_buscado].elements[i].checked))
                    msg += "- " + arr_amostrar_obligatorios[j] + "\n";
            }
        }
    }
    if (msg == "")
        alert('Por favor, selecciona al menos un mensaje para borrar.');
    return (msg != "");
}
