///////////////////////////////////////////////////////////////////////////////
// ESTÀNDARD LINGÜÍSTIC (C) 2002-2006
//
// langpairs.js -> funciones para facilitar operaciones con los pares de
//                 idiomas traducibles.
//
//  Programado por Gerardo García Peña
//
///////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// var langinfo
//
// DESCRIPCIÓN: tabla global de información de traducción entre idiomas. Está
//              rellena de objetos 'srcLangInfoObject' que a su vez contienen
//              objetos 'trgLangInfoObject'.
//
//////////////////////////////////////////////////////////////////////////////

var langinfo = new Array ( );

//////////////////////////////////////////////////////////////////////////////
// function srcLangInfoObject(id_lang_src, name)
// function trgLangInfoObject(id_lang_trg, name,
//                            lexpress, no_prices,
//                            preciobase, precio1k, precio1m,
//                            preciopcor, precioprvs, precioprev)
//
// DESCRIPCIÓN: funciones constructoras de los objetos 'srcLangInfoObject' y
//              'trgLangInfoObject'.
// PARÁMETROS: Atributos de los objetos.
// DEVUELVE:   Nada
//
//////////////////////////////////////////////////////////////////////////////

function srcLangInfoObject(id_lang_src, name)
{
  this.id_lang_src  = id_lang_src;
  this.name         = name;
  this.target_langs = new Array ( );
}

function trgLangInfoObject(id_lang_trg, name,
                           lexpress, no_prices,
                           preciobase, precio1k, precio1m,
                           preciopcor, precioprvs, precioprev)
{
  this.id_lang_trg = id_lang_trg;
  this.name        = name;
  this.lexpress    = lexpress;
  this.no_prices   = no_prices;
  this.preciobase  = preciobase;
  this.precio1k    = precio1k;
  this.precio1m    = precio1m;
  this.preciopcor  = preciopcor;
  this.precioprvs  = precioprvs;
  this.precioprev  = precioprev;
}

//////////////////////////////////////////////////////////////////////////////
// function resetLangInfo()
//
// DESCRIPCIÓN: Borra la tabla global de idiomas.
// PARÁMETROS: Ninguno
// DEVUELVE: Nada
//
//////////////////////////////////////////////////////////////////////////////

function resetLangInfo()
{
  langinfo = new Array ( );
}

//////////////////////////////////////////////////////////////////////////////
// function addLangInfo(id_lang_src, src_name,
//                      id_lang_trg, trg_name,
//                      lexpress, no_prices,
//                      preciobase, precio1k, precio1m,
//                      preciopcor, precioprvs, precioprev)
//
// DESCRIPCIÓN: Añade información de un idioma a la tabla global de idiomas.
// PARÁMETROS: Información del nuevo par de idiomas.
// DEVUELVE: Nada
//
//////////////////////////////////////////////////////////////////////////////

function addLangInfo(id_lang_src, src_name,
                     id_lang_trg, trg_name,
                     lexpress, no_prices,
                     preciobase, precio1k, precio1m,
                     preciopcor, precioprvs, precioprev)
{
  var i, j;

  // Nos aseguramos que no exista ya
  for(i = 0;
      i < langinfo.length && langinfo[i].id_lang_src != id_lang_src;
      i++)
    ;

  // Añadimos la info del idioma si este no existe
  if(i == langinfo.length)
    langinfo[i] = new srcLangInfoObject(id_lang_src, src_name);

  // Nos aseguramos que el idioma trg no existe
  for(j = 0; j < langinfo[i].target_langs.length; j++)
    if(langinfo[i].target_langs[j].id_lang_trg == id_lang_trg)
      return;

  // Añadimos la info del idioma al que se traduce
  langinfo[i].target_langs[j] =
    new trgLangInfoObject(id_lang_trg, trg_name,
                          lexpress, no_prices,
                          preciobase, precio1k, precio1m,
                          preciopcor, precioprvs, precioprev);
}

//////////////////////////////////////////////////////////////////////////////
// function getLangInfo(id_lang_src, id_lang_trg)
//
// DESCRIPCIÓN: Busca la información del par de idiomas dado por los
//              identificadores 'id_lang_src' y 'id_lang_trg'.
// PARÁMETROS: Identificadores numéricos de los idiomas
// DEVUELVE: Un objeto 'trgLangInfoObject'
//
//////////////////////////////////////////////////////////////////////////////

function getLangInfo(id_lang_src, id_lang_trg)
{
  var i, j;

  for(i = 0; i < langinfo.length; i++)
    if(langinfo[i].id_lang_src == id_lang_src)
      for(j = 0; j < langinfo[i].target_langs.length; j++)
        if(langinfo[i].target_langs[j].id_lang_trg == id_lang_trg)
          return langinfo[i].target_langs[j];

  return null;
}

//////////////////////////////////////////////////////////////////////////////
// function langInfoCalcPrecio(desgl,      li,        recconver, purgent,
//                             iva,        nbytes,    npalabras, conversion,
//                             correccion, lexpress,  tipotrad,  urgente,
//                             ptas)
//
// DESCRIPCIÓN: Calcula el presupuesto de un encargo según la información del
//              encargo y la información suministrada por la estructura 'li'
//              que es un objeto 'trgLangInfoObject'
// PARÁMETROS: Mogollón
// DEVUELVE: Un número real
//
//////////////////////////////////////////////////////////////////////////////

function langInfoCalcPrecio(desgl,      li,        recconver, purgent,
                            iva,        nbytes,    npalabras, conversion,
                            correccion, lexpress,  tipotrad,  urgente,
                            ptas)
{
  if(li.no_prices)
    return -1;

  return desglosacalcprecio(desgl, recconver,
                            li.preciobase, li.precio1k, li.precio1m,
                            li.preciopcor, li.precioprvs, li.precioprev,
                            purgent, iva, nbytes, npalabras, conversion,
                            correccion, lexpress, tipotrad, urgente, ptas);
}

//////////////////////////////////////////////////////////////////////////////
// function rebuildSourceLangInfoList(src_sel, current_lang_src,
//                                    default_lang_src)
//
// DESCRIPCIÓN: Reconstruye la lista de idiomas origen (src_sel) y selecciona
//              de nuevo el idioma 'current_lang_src' si puede, o en caso
//              contrario intenta seleccionar el idioma 'default_lang_src', y
//              si tampoco puede selecciona el primero que aparezca por el
//              camino.
// PARÁMETROS: src_sel          -> objeto 'select' sobre el que trabajaremos
//             current_lang_src -> idioma origen seleccionado actualmente
//             default_lang_src -> idioma origen por defecto de la web
// DEVUELVE: El identificador del idioma origen seleccionado.
//
//////////////////////////////////////////////////////////////////////////////

function rebuildSourceLangInfoList(src_sel, current_lang_src, default_lang_src)
{
  var i, selected;

  // Decimos que el 'current' es el default si este no está definido
  if(current_lang_src == null || current_lang_src < 0)
    current_lang_src = default_lang_src;

  // Vaciamos el contenido del combo
  for(i = src_sel.options.length-1; i >= 0; i--)
    src_sel.options[i] = null;

  // Rellenamos el select con los nuevos valores y seleccionamos el current
  // si este apareciese por el camino
  selected = 0;
  for(i = 0; i < langinfo.length; i++)
  {
    src_sel.options[i] =
      new Option(langinfo[i].name,
                 langinfo[i].id_lang_src,
                 i == 0,
                 langinfo[i].id_lang_src == current_lang_src);
    if(langinfo[i].id_lang_src == current_lang_src)
      selected = i;
  }

  // Seleccionamos el idioma que toque (si hay más de 0 idiomas!)
  if(src_sel.options.length > 0)
  {
    src_sel.selectedIndex = selected;
    return src_sel.options[selected].value;
  } else
    return -1;
}

//////////////////////////////////////////////////////////////////////////////
// function rebuildTargetLangInfoList(trg_sel, id_lang_src,
//                                    current_lang_trg, default_lang_trg)
//
// DESCRIPCIÓN: Reconstruye la lista de idiomas destino (trg_sel) según el
//              idioma origen seleccionado (id_lang_src). Se asume que
//              actualmente está seleccionado el idioma 'current_lang_trg', y
//              que el idioma destino por defecto es 'default_lang_trg'.
// PARÁMETROS: trg_sel          -> objeto 'select' sobre el que trabajaremos
//             id_lang_src      -> idioma origen seleccionado actualmente
//             current_lang_trg -> idioma destino seleccionado actualmente
//             default_lang_trg -> idioma destino por defecto de la web
// DEVUELVE: El identificador del idioma destino seleccionado.
//
//////////////////////////////////////////////////////////////////////////////

function rebuildTargetLangInfoList(trg_sel, id_lang_src, current_lang_trg, default_lang_trg)
{
  var i, j, selected;

  // Decimos que el 'current' es el default si este no está definido
  if(current_lang_trg == null || current_lang_trg < 0)
    current_lang_trg = default_lang_trg;

  // Vaciamos el contenido del combo
  for(i = trg_sel.options.length-1; i >= 0; i--)
    trg_sel.options[i] = null;

  // Rellenamos el combo con los nuevos valores y seleccionamos el current
  // si este apareciese por el camino
  selected = 0;
  for(i = 0; i < langinfo.length; i++)
    if(langinfo[i].id_lang_src == id_lang_src)
      for(j = 0; j < langinfo[i].target_langs.length; j++)
      {
        trg_sel.options[j] =
          new Option(
            langinfo[i].target_langs[j].name,
            langinfo[i].target_langs[j].id_lang_trg,
            j == 0,
            langinfo[i].target_langs[j].id_lang_trg == current_lang_trg);
        if(langinfo[i].target_langs[j].id_lang_trg == current_lang_trg)
          selected = j;
      }

  // Seleccionamos el idioma que toque (si hay más de 0 idiomas!)
  if(trg_sel.options.length > 0)
  {
    trg_sel.selectedIndex = selected;
    return trg_sel.options[selected].value;
  } else
    return -1;
}


