// $Header: //depot/main/luminis/webapps/default/js/clientsniffer.js#1 $
// Ultimate client-side JavaScript client sniff.
// (C) Netscape Communications 1999.  Permission granted to reuse and distribute. 
// Revised 17 May 99 to add is_nav5up and is_ie5up (see below). 
// 
// http://developer.netscape.com/docs/examples/index.html?content=javascript/browser_type.html

// Everything you always wanted to know about your JavaScript client 
// but were afraid to ask. Creates "is_" variables indicating: 
// (1) browser vendor: 
//     is_nav, is_ie, is_opera 
// (2) browser version number: 
//     is_major (integer indicating major version number: 2, 3, 4 ...) 
//     is_minor (float   indicating full  version number: 2.02, 3.01, 4.04 ...) 
// (3) browser vendor AND major version number 
//     is_nav2, is_nav3, is_nav4, is_nav4up, is_nav5, is_nav5up, is_ie3, is_ie4, is_ie4up 
// (4) JavaScript version number: 
//     is_js (float indicating full JavaScript version number: 1, 1.1, 1.2 ...) 
// (5) OS platform and version: 
//     is_win, is_win16, is_win32, is_win31, is_win95, is_winnt, is_win98 
//     is_os2 
//     is_mac, is_mac68k, is_macppc 
//     is_unix 
//        is_sun, is_sun4, is_sun5, is_suni86 
//        is_irix, is_irix5, is_irix6 
//        is_hpux, is_hpux9, is_hpux10 
//        is_aix, is_aix1, is_aix2, is_aix3, is_aix4 
//        is_linux, is_sco, is_unixware, is_mpras, is_reliant 
//        is_dec, is_sinix, is_freebsd, is_bsd 
//     is_vms 
//
// (6) Screen properties (in pixels)
//     is_640x480, is_800x600, is_1024x768
//     
//      - NON 'is' variables
//        	screen_width, screen_height
//
// See http://www.it97.de/JavaScript/JS_tutorial/bstat/navobj.html and 
// http://www.it97.de/JavaScript/JS_tutorial/bstat/Browseraol.html 
// for detailed lists of userAgent strings. 
// 
// Note: you don't want your Nav4 or IE4 code to "turn off" or 
// stop working when Nav5 and IE5 (or later) are released, so 
// in conditional code forks, use is_nav4up ("Nav4 or greater") 
// and is_ie4up ("IE4 or greater") instead of is_nav4 or is_ie4 
// to check version in code which you want to work on future 
// versions. 

  // convert all characters to lowercase to simplify testing 
  var agt=navigator.userAgent.toLowerCase();
  
  // *** BROWSER VERSION *** 
  // Note: On IE5, these return 4, so use is_ie5up to detect IE5.
  var is_major = parseInt(navigator.appVersion);
  
  var is_minor = parseFloat(navigator.appVersion); 
  
   // Search for Nav Versions
  // Note: Opera and WebTV spoof Navigator.  We do strict client detection. 
  // If you want to allow spoofing, take out the tests for opera and webtv. 
  var is_moz = false;
  var is_fox = false;
  var is_saf = false;
  var is_nav      = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) 
                     && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) 
                     && (agt.indexOf('webtv')==-1)); 
  var is_nav2     = (is_nav && (is_major == 2)); 
  var is_nav3     = (is_nav && (is_major == 3)); 
  var is_nav4     = (is_nav && (is_major == 4)); 
  var is_nav4up   = (is_nav && (is_major >= 4)); 
  var is_nav4_7up = (is_nav && ((is_minor >= 4.7) && (is_major != 5)));
  var is_navonly  = (is_nav && ((agt.indexOf(";nav") != -1) || (agt.indexOf("; nav") != -1)) ); 
  var is_nav5     = (is_nav && (is_major == 5));
  if (is_nav5 || agt.indexOf("rv:1.7.12") != -1 || agt.indexOf("rv:1.8") != -1)
  { 
      var undefined;
      var version;
      if ( agt.indexOf("netscape") == -1 && agt.indexOf("firefox") == -1 )
      {
          is_moz = true;
          version = agt.split("rv:");
      }
      if ( agt.indexOf("firefox") != -1 )
      {
          is_fox = true;
          version = agt.split("firefox/");
      }
      if ( agt.indexOf("safari") != -1 )
      {
          is_saf = true;
          version = agt.split("applewebkit/");
      }
      if ( agt.indexOf("netscape6/") != -1 )
      {
          version = agt.split("netscape6/"); 
      }
      if ( agt.indexOf("netscape/7") != -1 )
      {
          version = agt.split("netscape/");
      }
      if ( agt.indexOf("netscape/8") != -1 )
      {
          version = agt.split("netscape/");
      }
      if (version != undefined)
      {
          is_major = parseInt(version[1].slice(0,1));
          is_minor = parseFloat(version[1].slice(0,3));
      }
  }
  var is_nav6     = (is_nav && (is_major == 6));
  var is_nav6up   = (is_nav && (is_minor >= 6));
  var is_nav6_2up = (is_nav && (is_minor >= 6.2) && (is_major != 7));
  var is_nav7     = (is_nav && (is_major == 7));
  var is_nav8     = (is_nav && (is_major == 8));
  var is_moz1_5   = (is_moz && (is_minor == 1.5));
  var is_moz1_6   = (is_moz && (is_minor == 1.6));
  var is_moz1_7   = (is_moz && (is_minor == 1.7));
  var is_fox1     = (is_fox && (is_major == 1));
  var is_fox1_5   = (is_fox1 && (is_minor == 1.5));
  var is_fox2_0   = (is_fox && (is_minor == 2.0));
  var is_fox3_0   = (is_fox && (is_minor == 3.0));
  var is_saf1_1   = (is_saf && is_minor >= 103);
  var is_saf1_2   = (is_saf && is_minor >= 125);
  var is_saf1_3   = (is_saf && is_minor >= 312);
  var is_saf2_0   = (is_saf && is_minor >= 412);
  var is_gecko    = (agt.indexOf('gecko') != -1);
  
  // Search for Opera
  
  var is_opera = (agt.indexOf('opera')>=0);

  // Search for IE Versions
  var is_ie     = (agt.indexOf("msie") != -1); 
  var is_ie3    = (is_ie && (is_major < 4)); 
  var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")==-1) ); 
  var is_ie4up  = (is_ie  && (is_major >= 4));
  if (is_ie4up)
  {
      var version = navigator.appVersion;
      version = version.split(";");
      is_major = parseInt(version[1].slice(5,7));
      is_minor = parseFloat(version[1].slice(5));
  }
  var is_ie5       = (is_ie && (is_major == 5));
  var is_ie5up     = (is_ie && (is_minor >= 5));
  var is_ie5upMac  = (is_ie && ((is_minor >= 5) && (is_minor <= 5.2)));
  var is_ie51upMac  = (is_ie && (is_major == 5) &&
                      (agt.indexOf("msie 5.") != -1) && 
                      (agt.indexOf("msie 5.0") == -1));
  var is_ie5_5up   = (is_ie && ((is_minor >= 5.5) || (is_major > 5)));
  var is_ie6       = (is_ie && (is_major == 6));
  var is_ie7       = (is_ie && (is_major == 7));


  // *** JAVASCRIPT VERSION CHECK *** 
  var is_js; 
  if (is_nav2 || is_ie3) is_js = 1.0; 
  else if (is_nav3) is_js = 1.1; 
  else if ((is_nav4 && (is_minor <= 4.05)) || is_ie4) is_js = 1.2; 
  else if ((is_nav4 && (is_minor > 4.05)) || is_ie5) is_js = 1.3; 
  else if (is_nav5) is_js = 1.4; 
  // NOTE: In the future, update this code when newer versions of JS 
  // are released. For now, we try to provide some upward compatibility 
  // so that future versions of Nav and IE will show they are at 
  // *least* JS 1.x capable. Always check for JS version compatibility 
  // with > or >=. 
  else if (is_nav && (is_major > 5)) is_js = 1.4; 
  else if (is_ie && (is_major > 5)) is_js = 1.3; 
  // HACK: no idea for other browsers; always check for JS version with > or >= 
  else is_js = 0.0; 

  // *** PLATFORM ***
  var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
  var is_mac    = (agt.indexOf("mac")!=-1);
  var is_macppc = (is_mac && ((agt.indexOf("ppc")!=-1) || 
                                (agt.indexOf("powerpc")!=-1)));
  var is_macosx = (is_mac && (agt.indexOf("os x")!=-1));

  // This is JavaScript 1.2 specific, so if we don't support 1.2, we
  // don't know how big the screen is.
  //***SCREEN PROPERTIES***
  var is_640x480 = false;
  var is_800x600 = false;
  var is_1024x768 = false;

  if ( is_nav4up || is_ie4up )
  {
      if ( screen.width==640 && screen.height==480 )
          is_640x480 = true;
      else if ( screen.width==800 && screen.height==600 )
          is_800x600 = true;
      else if ( screen.width==1024 && screen.height==768 )
          is_1024x768 = true;
  }
