var is_read = true;
is_jsVersion = 1.0;

function 
Is ()
{			

  // convert all characters to lowercase to simplify testing
  var agt = navigator.userAgent.toLowerCase ()	// *** BROWSER VERSION ***

  /* Hack: IceStorm Browser identifies itself as Internet Explorer, so
     *  we have to look at document.all and see if it has the string 
     *  'ice.pilots' in it
   */
  this.konqueror = (agt.indexOf ('konqueror') != -1)

  if (!this.konqueror && document.all &&
      document.all != '[object Collection]')
      {
        this.icestorm = (document.all.toString ().indexOf ('ice.pilots') != -1);
      } else {
        this.icestorm = false;
      }
      this.opera = (agt.indexOf ("opera") != -1)
      this.webtv = (agt.indexOf ('webtv') != -1)


      this.major = parseInt (navigator.appVersion)
      this.minor = parseFloat (navigator.appVersion)
      this.nav = ((agt.indexOf ('mozilla') != -1)
		  && (agt.indexOf ('spoofer') == -1)
		  && (agt.indexOf ('compatible') == -1)
		  && (agt.indexOf ('opera') == -1)
		  && (agt.indexOf ('webtv') == -1)
		  && (agt.indexOf ('khtml') == -1)
		  && !this.konqueror);
      this.nav2 = (this.nav && (this.major == 2))
      this.nav3 = (this.nav && (this.major == 3))
      this.nav4 = (this.nav && (this.major == 4))
      this.nav4up = this.nav && (this.major >= 4)
      this.nav5 = this.nav && (this.major == 5)
      this.nav5up = this.nav && (this.major >= 5)
      this.navonly = (this.nav && (agt.indexOf (";nav") != -1))


      this.ie = ((agt.indexOf ("msie") != -1) &&
		 !this.opera &&
		 !this.icestorm)
      this.ie3 = (this.ie && (this.major == 2))
      this.ie4 = (this.ie && (this.major == 4))
      this.ie4up = this.ie && (this.major >= 4)

    /* HACK: IE 4 and 5 show browser versions differently that Netscape ...
       *                so we can fix.
     */
      if (this.ie4up)
      {
      var jnk = navigator.appVersion.indexOf ("MSIE");
      jnk = navigator.appVersion.substring (jnk + 4, navigator.appVersion.length - 1);
      this.major = parseInt (jnk);
      this.minor = parseFloat (jnk);
      this.ie4 = (this.ie && (this.major == 4))
      this.ie4up = this.ie && (this.major >= 4)
      }



      this.ie5 = (this.ie && (this.major == 5))
      this.ie5up = this.ie && (this.major >= 5)

      /* Added Mon Jan 13 14:36:31 EST 2003: is .NET installed? */
      this.net = this.ie && agt.indexOf(".net") != -1;

      

    /**************************************************************************
    * Grrrr!!!! Opera's major and minor numbers aren't in the navigator object. 
    * Must Fix!!!
    **************************************************************************/
      if (this.opera)
      {
      var ptr = agt.indexOf ("opera") + 6;
      this.major = parseInt (agt.substring (ptr, agt.length));
      this.minor = parseFloat (agt.substring (ptr, agt.length));
      }




    // *** JAVASCRIPT VERSION CHECK *** 
    // Useful to workaround Nav3 bug in which Nav3 
    // loads <SCRIPT LANGUAGE="JavaScript1.2">.
      if (this.nav2 || this.ie3) this.js = 1.0
      else
      if (this.nav3 || this.opera) this.js = 1.1
      else
      if (this.nav4 || this.ie4) this.js = 1.2
    // 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.2 capable. Always check for JS version compatibility 
    // with > or >=.
      else
      if ((this.nav && (this.minor > 4.05)) || (this.ie && (this.major > 4)))
      this.js = 1.2
      else
      this.js = 0.0		// HACK: always check for JS version with > or >=
    // *** PLATFORM ***
   this.win = ((agt.indexOf ("win") != -1) || (agt.indexOf ("16bit") != -1))
    // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all
    //        Win32, so you can't distinguish between Win95 and WinNT.
      this.win95 = ((agt.indexOf ("win95") != -1) || (agt.indexOf ("windows 95") != -1))
    // is this a 16 bit compiled version?
      this.win16 = ((agt.indexOf ("win16") != -1)
     || (agt.indexOf ("16bit") != -1) || (agt.indexOf ("windows 3.1") != -1)
		    || (agt.indexOf ("windows 16-bit") != -1))
      this.win31 = (agt.indexOf ("windows 3.1") != -1) || (agt.indexOf ("win16") != -1) ||
      (agt.indexOf ("windows 16-bit") != -1)
    // NOTE: Reliable detection of Win98 may not be possible. It appears that:
    //       - On Nav 4.x and before you'll get plain "Windows" in userAgent.
    //       - On Mercury client, the 32-bit version will return "Win98", but
    //         the 16-bit version running on Win98 will still return "Win95".
      this.win98 = ((agt.indexOf ("win98") != -1) || (agt.indexOf ("windows 98") != -1))
      this.winnt = ((agt.indexOf ("winnt") != -1) || (agt.indexOf ("windows nt") != -1))
      this.win32 = this.win95 || this.winnt || this.win98 ||
      ((this.major >= 4) && (navigator.platform == "Win32")) ||
      (agt.indexOf ("win32") != -1) || (agt.indexOf ("32bit") != -1)
      this.os2 = (agt.indexOf ("os/2") != -1)
      || (navigator.appVersion.indexOf ("OS/2") != -1)
      || (agt.indexOf ("ibm-webexplorer") != -1)
      this.mac = (agt.indexOf ("mac") != -1)
      this.mac68k = this.mac && ((agt.indexOf ("68k") != -1) ||
				 (agt.indexOf ("68000") != -1))
      this.macppc = this.mac && ((agt.indexOf ("ppc") != -1) ||
				 (agt.indexOf ("powerpc") != -1))
      this.sun = (agt.indexOf ("sunos") != -1)
      this.sun4 = (agt.indexOf ("sunos 4") != -1)
      this.sun5 = (agt.indexOf ("sunos 5") != -1)
      this.suni86 = this.sun && (agt.indexOf ("i86") != -1)
      this.irix = (agt.indexOf ("irix") != -1)	// SGI
       this.irix5 = (agt.indexOf ("irix 5") != -1)
      this.irix6 = ((agt.indexOf ("irix 6") != -1) || (agt.indexOf ("irix6") != -1))
      this.hpux = (agt.indexOf ("hp-ux") != -1)
      this.hpux9 = this.hpux && (agt.indexOf ("09.") != -1)
      this.hpux10 = this.hpux && (agt.indexOf ("10.") != -1)
      this.aix = (agt.indexOf ("aix") != -1)	// IBM
       this.aix1 = (agt.indexOf ("aix 1") != -1)
      this.aix2 = (agt.indexOf ("aix 2") != -1)
      this.aix3 = (agt.indexOf ("aix 3") != -1)
      this.aix4 = (agt.indexOf ("aix 4") != -1)
      this.linux = (agt.indexOf ("inux") != -1)
   this.sco = (agt.indexOf ("sco") != -1) || (agt.indexOf ("unix_sv") != -1)
      this.unixware = (agt.indexOf ("unix_system_v") != -1)
      this.mpras = (agt.indexOf ("ncr") != -1)
      this.reliant = (agt.indexOf ("reliantunix") != -1)
      this.dec = (agt.indexOf ("dec") != -1) || (agt.indexOf ("osf1") != -1)
 || (agt.indexOf ("dec_alpha") != -1) || (agt.indexOf ("alphaserver") != -1)
   || (agt.indexOf ("ultrix") != -1) || (agt.indexOf ("alphastation") != -1)
      this.sinix = (agt.indexOf ("sinix") != -1)
      this.freebsd = (agt.indexOf ("freebsd") != -1)
      this.bsd = (agt.indexOf ("bsd") != -1)
      this.unix = (agt.indexOf ("x11") != -1) || this.sun || this.irix || this.hpux ||
      this.sco || this.unixware || this.mpras || this.reliant ||
      this.dec || this.sinix || this.aix || this.linux || this.freebsd
   this.vms = (agt.indexOf ("vax") != -1) || (agt.indexOf ("openvms") != -1)

/*************************************************************************/
    /* these are properties that don't browser sniff, but check for features */
    /* They are stonglt recommended to be used in general.                   */
/*************************************************************************/
      this.dynamic = (!(!document.all) || !(!document.layers) ||
	 (!(!document.getElementById) && !(!document.getElementsByTagName)))
      && !this.webtv;

    // can print from print.js
      this.printable = (this.ie4up || this.nav4up);
      this.implemented_css_overflow = (this.ie4up || this.nav5up ||
				       this.icestorm);


    // gecko info: borrowed from http://www.mozilla.org/start/
    // Added Mon Jan 13 14:41:03 EST 2003: code to make sure that we are
    // not sniffing Apple's Safari browser incorrectly.
      if (agt.indexOf ("gecko") != -1 && agt.indexOf("safari") == -1)
      {
      this.gecko = new Array ();

      var todayDate = new Date ();
      var today = (todayDate.getFullYear () * 365) +
      ((todayDate.getMonth () + 1) * 31) +
      todayDate.getDate ();

      var ua = navigator.userAgent
      var re = /Gecko\/(\d+)/;
      var builddate = ua.match(re);
      builddate = builddate[1];
      this.gecko.builddate = builddate;
      if (builddate == "0000000000") {
		this.gecko.selfbuilt = true;
      } else { 
		this.gecko.selfbuilt = false;
      } 

  // Search for the Mozilla revision in the User Agent string
  var re2 = /rv:(.+)\)/;
  var revision = ua.match (re2);
  this.gecko.revision = revision[1];
  this.gecko.major = parseInt (revision[1]);
  this.gecko.minor = parseFloat (revision[1]);

  // If the Mozilla revision ends with a '+' then this is a nightly build
  var re3 =  /.+(\+)/;
  var nightly = revision[1].match (re3);

  this.gecko.nightly = nightly;

  // find the platform - these may be needed to be changed (gecko specific)
  this.macosx = ua.match (/(PPC Mac OS X) /);
  this.macos9 = ua.match (/(Macintosh; [IUN]; PPC)/);
  var isx86Linux = ua.match(/(X11; [IUN]; Linux i686;)/); 

} else {
  this.gecko = false;
}


// Added Mon Jan 13 14:42:36 EST 2003: Apple's Safari Web Browser
this.safari = (agt.indexOf ("gecko") != -1 && agt.indexOf("safari") != -1);
this.khtml = this.safari || this.konqueror;

this.dom = (document.all || document.layers || document.getElementById && 
	!this.webtv);

}



var is = new Is ();

