/**
 * Manejador de tama�os de fuente.
 * @class FontSizer
 */
var FontSizer = {

  /* Propiedades **************************************************************/

  /**
   * Opciones por defecto.
   * @var array _
   */
  _: {
    altSheets: ['small', 'medium', 'large']
  },

  /**
   * Nombre de la cookie que guardar� el nombre del tama�o en uso.
   * @var cookieName
   */
  cookieName: 'font-size',

  /* Ejecutiva ****************************************************************/

  /**
   * Determina las opciones por defecto para el manejador de tama�os de fuente.
   * @param array opts - Opciones por defecto para el manejador.
   * @return void
   */
  setOptions: function(opts) {
    FontSizer._ = FontSizer._.merge(opts);
  },

  /**
   * Cambia al estilo de tama�o inmediatamente anterior.
   * @return void
   * @internal {El estilo anterior se refiere al estilo inmediatamente anterior que dispone del atributo "title".}
   * @internal {Se asigna la cookie "font-size" con el valor del atributo
   *   "title" de la hoja de estilos activa, pero la asignaci�n efectiva en
   *   carga debe efectuarla el layout de PHP.}
   */
  dec: function() {
    var curr = FontSizer.getCurrentSheet();
    for(var i = 0; i < FontSizer._.altSheets.length; i++) {
      if(FontSizer._.altSheets[i] == curr && i > 0) {
        var sizeName = FontSizer._.altSheets[i - 1];
        FontSizer.enableSheet(sizeName);
        document.cookie = FontSizer.cookieName + '=' + sizeName;
        break;
      }
    }
  },

  /**
   * Cambia al estilo de tama�o inmediatamente siguiente.
   * @return void
   * @internal {El estilo siguiente se refiere al estilo inmediatamente posterioridad que dispone del atributo "title".}
   * @internal {Se asigna la cookie "font-size" con el valor del atributo
   *   "title" de la hoja de estilos activa, pero la asignaci�n efectiva en
   *   carga debe efectuarla el layout de PHP.}
   */
  inc: function() {
    var curr = FontSizer.getCurrentSheet();
    for(var i = 0; i < FontSizer._.altSheets.length; i++) {
      if(FontSizer._.altSheets[i] == curr && i < FontSizer._.altSheets.length - 1) {
        var sizeName = FontSizer._.altSheets[i + 1];
        FontSizer.enableSheet(sizeName);
        document.cookie = FontSizer.cookieName + '=' + sizeName;
        break;
      }
    }
  },

  /**
   * Recupera el t�tulo de la hoja de estilos actualmente en uso.
   * @return string - Valor del atributo "title" para la hoja de estilos en uso.
   */
  getCurrentSheet: function() {

    var i, a, links = document.getElementsByTagName('link');
    for(i = 0; a = links[i]; i++)
      if(a.getAttribute('rel').indexOf('style')!= -1 && a.getAttribute('title') && !a.disabled) return a.getAttribute('title');
    return null;
  },

  /**
   * Determina la hoja de estilos a utilizar.
   * @param string title - T�tulo de la hoja de estilos a utilizar.
   * @return void
   * @internal {El resto de hojas de estilo en el layout que disponen del atributo "title" se desactivan autom�ticamente.}
   */
  enableSheet: function(title) {
    var i, a, links = document.getElementsByTagName('link');
    for(i = 0; a = links[i]; i++)
      if(a.getAttribute('rel').indexOf('style')!= -1 && a.getAttribute('title'))
	      a.disabled = a.getAttribute('title') == title? false : true;
  }
}
