//======================================
//Nome: GenJsBrowserInfo
//Linguagem: JavaScript
//Descrição: classe que armazena informações 
//sobre o browser a partir do HTTP_USER_AGENT
//
//Variáveis públicas:
//   lStrBrowserFamily: vazio se não foi identificado; Ou [NS|MSIE|Opera|WebTV|AOL]
//   lStrBrowserVersion: Versão detalhada (como string)
//   lDblBrowserVersion: Versão simplificada (como long)
//
//Métodos públicos:
//   VerifyMinimum: retorna 0/1 se o browser é >= versão mínima, para n famílias
//
//Autor: Equipe Biblioteca Marlin
//
//Data: 22/08/2002
//
//Parâmetros de entrada:
//	- 
//Retorno: 
//      -
//Informações adicionais:
//	+ Funções:
//		-
//	+ Includes:
//		-
//	+ Objetos:
//		-
//	+ Stored Procedures:
//		-
//Historico Alteracao:
//	- 22/08/2002 Vladimir Vieira
//	-
//======================================
function GenJsBrowserInfo() {
 var lStrUserAgent;
 var lObjRegExp;
 var lArrMatch;

   //**** VerifyMinimum: verifica se a versão do browser é >= mínimo,
   //                    para n famílias.
   //     Entradas:
   //               arrBrowsers - array com nro par de elementos onde
   //                             arrBrowsers [n] = nome da família (String)      
   //                             arrBrowsers [n+1] = versão mínima requerida(Double)      
   //     Retorno:
   //               0 - não é >= que o(s) mínimo(s)
   //               1 - é >= que o(s) mínimo(s)
   //             < 0 - erro
   this.VerifyMinimum = function (arrBrowsers) 
   {
      var lIntPos;
      var lDblVrs; 


      if (arrBrowsers == null || arrBrowsers.length == null || arrBrowsers.length % 2 == 1) {
          return -11;
      }

      for (lIntPos=0;lIntPos<arrBrowsers.length;lIntPos=lIntPos+2) { 
         lDblVrs = parseFloat(arrBrowsers[lIntPos+1]);
         if (isNaN(lDblVrs)) {
            return -11;
         } 
      
         if (arrBrowsers[lIntPos] == this.lStrBrowserFamily && arrBrowsers[lIntPos+1] <= this.lDblBrowserVersion) {
            return 1;
         }
      }

      return 0;
   }


  this.lStrBrowserFamily = "(none)";
  this.lStrBrowserVersion = "0.0";
  this.lDblBrowserVersion = 0;

  lStrUserAgent = navigator.userAgent;
  if (lStrUserAgent.length == 0) {
      return;
  }

  // **** WebTV
  lObjRegExp = /WebTV\/((\d+)\.\S*) \(/;
  lArrMatch = lObjRegExp.exec(lStrUserAgent);
  if (lArrMatch != null) {
      this.lStrBrowserFamily = "WebTV";
      this.lStrBrowserVersion = lArrMatch[1];
      this.lDblBrowserVersion = parseFloat(lArrMatch[2]);
      return;
   }

   // **** MSIE 
   lObjRegExp = /\(.*MSIE ((\d+)\.\S*);.*\)/;
   lArrMatch = lObjRegExp.exec(lStrUserAgent);
   if (lArrMatch != null) {
      this.lStrBrowserFamily = "MSIE";  
      this.lStrBrowserVersion = lArrMatch[1];
      this.lDblBrowserVersion = parseFloat(lArrMatch[2]);

      // * Distingue iE 5.5
      if (lStrUserAgent.indexOf("MSIE 5.5") > -1) {
         this.lStrBrowserVersion = "5.5"
         this.lDblBrowserVersion = 5.5
      }
      
      return;
   }

   lObjRegExp = /Microsoft Internet Explorer\/4.40.(\d+)\S* (Windows 95)/; 
   lArrMatch = lObjRegExp.exec (lStrUserAgent);
   if (lArrMatch != null) {
      this.lStrBrowserFamily = "MSIE";
      this.lStrBrowserVersion = "1.0";
      this.lDblBrowserVersion = 1;

      // * Distingue iE 1.5
      if (parseFloat(lArrMatch[1]) >= 308) {
           this.lStrBrowserVersion = "1.5";
           this.lDblBrowserVersion = 1.5;
      }

      return;
   }

   // **** Opera
   lObjRegExp = /Opera[\/ ]((\d+)\.?\S*)/;
   lArrMatch = lObjRegExp.exec (lStrUserAgent);
   if (lArrMatch != null) {
      this.lStrBrowserFamily = "Opera";  
      this.lStrBrowserVersion = lArrMatch[1];
      this.lDblBrowserVersion = parseFloat(lArrMatch[2]);
      return;
   }

   // **** Netscape
   lObjRegExp = /Netscape\/(\S+)/ 
   lArrMatch = lObjRegExp.exec (lStrUserAgent);
   if (lArrMatch != null) {
      this.lStrBrowserFamily = "NS";  
      this.lStrBrowserVersion = lArrMatch[1];
      this.lDblBrowserVersion = 7;
      return;
   }

   lObjRegExp = /Netscape6\/(\S+)/ 
   lArrMatch = lObjRegExp.exec (lStrUserAgent);
   if (lArrMatch != null) {
      this.lStrBrowserFamily = "NS";  
      this.lStrBrowserVersion = lArrMatch[1];
      this.lDblBrowserVersion = 6;
      return;
   }

   if (lStrUserAgent.indexOf("(compatible;") == -1) {
      lObjRegExp = /Mozilla\/((\d+)\.?\S*)/; 
      lArrMatch = lObjRegExp.exec (lStrUserAgent);
      if (lArrMatch != null) {
         this.lStrBrowserFamily = "NS";  
         this.lStrBrowserVersion = lArrMatch[1];
         this.lDblBrowserVersion = parseFloat(lArrMatch[2]);
      return;
      }
   }
}

function Verifica () {
  var obj;
  var t = new Array();

  t[0] = "MSIE";
  t[1] = "4";
  obj = new GenJsBrowserInfo();
  alert (obj.lStrBrowserFamily);
  alert (obj.lStrBrowserVersion);
  alert (obj.lDblBrowserVersion); 
  alert (obj.VerifyMinimum(t)); 

}


