/* mostrar_ocultar(div_id):
     Torna visible un elemento (código HTML entre etiquetas DIV) que está oculto, y viceversa. */
function mostrar_ocultar(div_id)
{
  vista = document.getElementById(div_id).style.display;
  if(vista == 'none')
    vista='block';
  else
    vista='none';
  document.getElementById(div_id).style.display = vista;
}

/* validarTextInput:
     entrada:   nombre del campo de entrada de texto (formulario.entrada).
     requerida: determina si el campo tiene que diligenciarse o puede dejarse vacío (true/false).
     opcion:    determina el formato con el que debe ser validada la entrada
                (null->sin formato especial, "num"->numérico, "email"->dirección de e-mail). */
function validarTextInput (entrada, requerida, opcion, error_requerida, error_opcion)
{
  if(requerida)
  {
    if(entrada.value == "")
    {
      alert(error_requerida);
      entrada.focus();
      return(false);
    }
  }
  if(entrada.value != "")
  {
    switch(opcion)
    {
      case "num":
        expReg = /^[1-9][0-9]*$/;
        if(!expReg.test(entrada.value))
        {
          alert(error_opcion);
          entrada.focus();
          return(false);
        }
        break;
      case "email":
        expReg1 = /^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/;
        expReg2 = /^.*@[^_]*$/;
        if(!expReg1.test(entrada.value) || !expReg2.test(entrada.value))
        {
          alert(error_opcion);
          entrada.focus();
          return(false);
        }
        break;
    }
  }
  return(true);
}

/* validarSelect:
     Valida que tenga que elegirse una de las opciones del menú desplegable.
     entrada:   nombre del menu desplegable (formulario.entrada). */
function validarSelect (entrada, error)
{
  if(entrada.value == "")
  {
    alert(error);
    entrada.focus();
    return(false);
  }
  return(true);
}

/* validarEntradasIdiomas:
     Valida que no deje los campos de idiomas incompletos, por ejemplo si el usuario llena la
     descripción de una categoría en Castellano y no en Inglés, esta función llena el campo de
     Inglés con lo escrito en Castellano o viceversa.
     f:         formulario a validar.
     campo:     nombre de los campos que se quieren 'autocompletar'.
     requerido: determina si el campo tiene que diligenciarse o puede dejarse vacío (true/false);
                si el campo no es requerido pero el usuario digitó la descripción en un idioma, aún
                así la función completa los demás campos de idiomas.
     error:     error que se muestra cuando los campos de idiomas son requeridos, si el parámetro
                anterior es false, entonces este puede ser nulo. */
function validarEntradasIdiomas (f, campo, requerido, error)
{
  // En las siguientes líneas se validan los nombres de los tipos de atractivos.
  var i;
  var muestra = -1;  // Almacena el subíndice del campo que tiene el texto que se va a copiar en los demás.
  // Se recorren todos los elementos del formulario, desde el primero hasta el último.
  for(i=0; i<f.elements.length && muestra == -1; i++)
  {
    // Entra en la decisión si el nombre de un elemento contiene la subcadena 'campo' y si el valor de este elemento no es vacío.
    if(f.elements[i].name.indexOf(campo) != -1 && f.elements[i].value != '')
    {
      muestra = i;  // Este es el que se va a copiar en los demás.
    }
  }
  if(muestra == -1)
  {
    if(requerido)
    {
      alert(error);
      return(false);
    }
  }
  else
  {
    // En este ciclo se buscan los campos del nombre de la categoría que estén vacíos y se llenan con el que se encontró arriba.
    for(i=0; i<f.elements.length; i++)
    {
      // Entra en la decisión si el nombre de un elemento contiene la subcadena 'campo'
      // y si el valor de este elemento es vacío.
      if(f.elements[i].name.indexOf(campo) != -1 && f.elements[i].value == '')
      {
        f.elements[i].value = f.elements[muestra].value;
      }
    }
  }
  return(true);
}