  ///
  /// NetForce Tecnologia
  /// Biblioteca de funções de Browser de JavaScript
  ///

  /**
   * Carrega informações do Browser
   *
   * @return Array
   */
  function nf_browser_info()
  {
    var res_browser   = -1;
    var res_name      = '';
    var res_version   = 0;
    var res_agent     = navigator.userAgent;
    var res_hasCookie = navigator.cookieEnabled;
    var res_langs     = 'none';

    var name        = nf_strUpper(navigator.appName);
    var agent       = nf_strUpper(navigator.userAgent);

    // Browser IE
    if (name == 'MICROSOFT INTERNET EXPLORER')
    {
      res_browser = BROWSER_IE;
      res_name    = BROWSER_IE_DESC;
      res_langs   = nf_strLower(navigator.browserLanguage);
    }

    // Browser Mozilla Firefox
    if ((name == 'NETSCAPE') && (nf_strIndex('MOZILLA', agent) > -1) && (nf_strIndex('FIREFOX', agent) > -1) && (nf_strIndex('GECKO', agent) > -1))
    {
      res_browser = BROWSER_FIREFOX;
      res_name    = BROWSER_FIREFOX_DESC;
      res_langs   = nf_strLower(navigator.language);
    }

    // Browser Netscape
    if ((name == 'NETSCAPE') && (nf_strIndex('NAVIGATOR', agent) > -1) && (nf_strIndex('MOZILLA', agent) > -1) && (nf_strIndex('GECKO', agent) > -1))
    {
      res_browser = BROWSER_NETSCAPE;
      res_name    = BROWSER_NETSCAPE_DESC;
      res_langs   = nf_strLower(navigator.language);
    }

    // Browser Opera
    if (name == 'OPERA')
    {
      res_browser = BROWSER_OPERA;
      res_name    = BROWSER_OPERA_DESC;
      res_langs   = nf_strLower(navigator.language);
    }

    // Browser Safari
    if ((name == 'NETSCAPE') && (nf_strIndex('MOZILLA', agent) > -1) && (nf_strIndex('SAFARI', agent) > -1))
    {
      res_browser = BROWSER_SAFARI;
      res_name    = BROWSER_SAFARI_DESC;
      res_langs   = nf_strLower(navigator.language);
    }

    // Descobrir versão do browser
    res_version = nf_browser_version(res_browser);

    // Retorno
    var res = { browser   : res_browser,
                name      : res_name,
                version   : res_version,
                agent     : res_agent,
                hasCookie : res_hasCookie,
                langs     : res_langs
              };

    return res;
  }

  /**
   * Carregar versão do browser
   *
   * @param integer browser
   * @return Array
   */
  function nf_browser_version(browser)
  {
    var res     = {version : 0, release: 0, build: 0, rebuild: 0, all: '0.0.0,0'};

    switch (browser)
    {
      case BROWSER_IE:
        var version = nf_strUpper(navigator.appVersion);
        var i = nf_strIndex('MSIE ', version);
        i += nf_strLen('MSIE ');
        var f = nf_strIndex(';', version, i);
        version = nf_strSub(version, i, (f-i));
        break;

      case BROWSER_FIREFOX:
        var version = nf_strUpper(navigator.userAgent);
        var i = nf_strIndex('FIREFOX/', version);
        i += nf_strLen('FIREFOX/');
        var f = nf_strLen(version);
        version = nf_strSub(version, i, (f-i));
        break;

      case BROWSER_OPERA:
        var version = nf_strUpper(navigator.appVersion);
        var i = nf_strIndex(' (', version);
        version = nf_strSub(version, 0, i);
        break;

      case BROWSER_NETSCAPE:
        var version = nf_strUpper(navigator.userAgent);
        var i = nf_strIndex('NAVIGATOR/', version);
        i += nf_strLen('NAVIGATOR/');
        var f = nf_strLen(version);
        version = nf_strSub(version, i, (f-i));
        break;

      case BROWSER_SAFARI:
        var version = nf_strUpper(navigator.appVersion);
        var i = nf_strIndex('VERSION/', version);
        i += nf_strLen('VERSION/');
        var f = nf_strIndex(' SAFARI/', version, i);
        version = nf_strSub(version, i, (f - i));
        break;

      default:
        return res;
        break;
    }

    // Tratar string de versão
    ver     = nf_strSplit(version, '.');
    res.version = nf_intVal(ver[0]);
    if (ver.length > 1)
      res.release = nf_intVal(ver[1]);
    if (ver.length > 2)
      res.build   = nf_intVal(ver[2]);
    if (ver.length > 3)
      res.rebuild = nf_intVal(ver[3]);

    // Montar String All
    res.all = res.version + '.' + res.release + '.' + res.build + '.' + res.rebuild;

    return res;
  }
