/* *******************************************************************
** EVEREST.JS - User Info Detection Library
** ========================================
** Please report any errors you discover to rachmiel@hotmail.com.
**
** documentation and download at http://www.zdnet.com/devhead/stories/articles/0,4413,2310175,00.html
**
** Copyright 1999, Rick Scott, all rights reserved.
******************************************************************* */

function isMacIE3()  // is browser Mac IE 3.x?
  {
  if ((navigator.platform != null) && 
      (navigator.appName != null) && 
      (navigator.appVersion != null))
    {
    var version = navigator.appVersion;
    var index = version.indexOf(" ");
    version = version.substring(0,index);
    version = parseFloat(version);
    if ((navigator.platform.indexOf("Mac") != -1) &&  
        (navigator.appName.indexOf("Internet") != -1) && 
        (version >= 3.0 && version < 4.0))
      return true;
    }
  return false;
  }

/* **************************************************************** */
/* UserInfo object constructor function                             */
/* **************************************************************** */

var NA = null;  // Not Available value

function UserInfo()  // new UserInfo() instantiates a UserInfo object
  {
  this.appCodeName = NA;     // set all these to NA (Not Available)
  this.appName = NA;         // so that the client browser will not
  this.appVersion = NA;      // display an error message (or crash!)
  this.platform = NA;        // if it doesn't support them


  /* Navigator object properties ************************************/

  if (navigator.appCodeName != null)  // get browser code name
    this.appCodeName = navigator.appCodeName;

  if (navigator.appName != null)  // get browser app name
    {
    if (navigator.userAgent.indexOf("Opera") != -1)
      this.appName = "Opera";
    else
      this.appName = navigator.appName;
    }

  if (navigator.appVersion != null)  // get browser version number
    {
    this.appVersion = navigator.appVersion;
    var index = this.appVersion.indexOf(" ");
    this.appVersion = this.appVersion.substring(0,index);
    if (this.appName.indexOf("Internet") != -1) // fix for IE 5.0 appVersion bug
      {                                         // (returns 4.0 version number)
      if (navigator.userAgent.indexOf("5.0") != -1)
        this.appVersion = "5.0";
      }
    }

  if (navigator.platform != null)  // get browser platform
    {
    this.platform = navigator.platform;
    }
  else  // get platform for browsers that don't support navigator.platform
    {
    var startindex = navigator.appVersion.indexOf("(") + 1;
    var endindex = navigator.appVersion.indexOf(";");
    this.platform = navigator.appVersion.substring(startindex,endindex);
    }
  }

/* **************************************************************** */
/* instantiate UserInfo object for current user (non-Mac-IE3!)      */
/* **************************************************************** */

// create user (a UserInfo object) if browser is *not* Mac IE3
// the UserInfo obj causes Mac IE3 browsers to crash on reload
if (isMacIE3())
  ;  // do nothing! replace eventually with non-OOP Mac IE3 detect code
else
  var user = new UserInfo();

/* **************************************************************** */
/* set a ton of global IS_ Everest variables                        */
/* **************************************************************** */

var IS_MOZILLA = NA;  // begin by setting all IS_ vars to NA
var IS_OTHER_CODENAME = NA;
var IS_NA_CODENAME = NA;
var IS_NETSCAPE = NA;
var IS_IE = NA;
var IS_OPERA = NA;
var IS_OTHER_APPNAME = NA;
var IS_NA_APPNAME = NA;
var IS_V1 = NA;
var IS_V1UP = NA;
var IS_V2 = NA;
var IS_V2UP = NA;
var IS_V3 = NA;
var IS_V3UP = NA;
var IS_V4 = NA;
var IS_V4UP = NA;
var IS_V5 = NA;
var IS_V5UP = NA;
var IS_OTHER_APPVERSION = NA;
var IS_NA_APPVERSION = NA;
var IS_WIN = NA;
var IS_WIN16 = NA;
var IS_WIN32 = NA;
var IS_WIN31 = NA;
var IS_WIN95 = NA;
var IS_WINNT = NA;
var IS_WIN98  = NA;
var IS_OS2  = NA;
var IS_MAC = NA;
var IS_MAC68K = NA;
var IS_MACPPC  = NA;
var IS_UNIX  = NA;
var IS_SUN = NA;
var IS_SUN4 = NA;
var IS_SUN5 = NA;
var IS_SUNI86  = NA;
var IS_IRIX = NA;
var IS_IRIX5 = NA;
var IS_IRIX6  = NA;
var IS_HPUX = NA;
var IS_HPUX9 = NA;
var IS_HPUX10  = NA;
var IS_AIX = NA;
var IS_AIX1 = NA;
var IS_AIX2 = NA;
var IS_AIX3 = NA;
var IS_AIX4  = NA;
var IS_LINUX = NA;
var IS_SCO = NA;
var IS_UNIXWARE = NA;
var IS_MPRAS = NA;
var IS_RELIANT  = NA;
var IS_DEC = NA;
var IS_SINIX = NA;
var IS_FREEBSD = NA;
var IS_BSD = NA;
var IS_VMS = NA;
var IS_OTHER_PLATFORM = NA;
var IS_NA_PLATFORM = NA;
var IS_JS11 = NA;
var IS_JS12 = NA;
var IS_JS13 = NA;
var IS_JS14 = NA;
var IS_JS15 = NA;
var IS_OTHER_JSVERSION = NA;
var IS_NA_JSVERSION = NA;

// browser code name
IS_MOZILLA = (user.appCodeName.toLowerCase().indexOf("mozilla") != -1);
IS_NA_CODENAME = (user.appCodeName == NA);
IS_OTHER_CODENAME = (!IS_MOZILLA && !IS_NA_CODENAME);

// browser app (vendor)
IS_NETSCAPE = (user.appName.toLowerCase().indexOf("netscape") != -1);
IS_IE = (user.appName.toLowerCase().indexOf("internet") != -1);
IS_OPERA = (user.appName.toLowerCase() == "opera");
IS_NA_APPNAME = (user.appName == NA);
IS_OTHER_APPNAME = (!IS_NETSCAPE && !IS_IE && !IS_OPERA && !IS_NA_APPNAME);

// browser version
if (user.appVersion != NA)  // don't try to parseInt a string (NA = "")
  {
  IS_V1   = (parseInt(user.appVersion) == 1)
  IS_V1UP = (parseInt(user.appVersion) >= 1)
  IS_V2   = (parseInt(user.appVersion) == 2)
  IS_V2UP = (parseInt(user.appVersion) >= 2)
  IS_V3   = (parseInt(user.appVersion) == 3)
  IS_V3UP = (parseInt(user.appVersion) >= 3)
  IS_V4   = (parseInt(user.appVersion) == 4)
  IS_V4UP = (parseInt(user.appVersion) >= 4)
  IS_V5   = (parseInt(user.appVersion) == 5)
  IS_V5UP = (parseInt(user.appVersion) >= 5)
  if (IS_IE)  // fix for IE 5.0 appVersion bug (returns 4.0 version number)
    {
    if (navigator.userAgent.indexOf("5.0") != -1)
      {
      IS_V4 = false;
      IS_V4UP = true;
      IS_V5 = true;
      IS_V5UP = true;
      }
    }
  }

IS_NA_APPVERSION = (user.appVersion == NA);
IS_OTHER_APPVERSION = (!IS_V1 && !IS_V2 && !IS_V3 && !IS_V4 && !IS_V5 &&
                           !IS_NA_APPVERSION);

// user OS/platform
if (navigator.userAgent && navigator.appVersion)
  {
  agt = navigator.userAgent.toLowerCase();  // abbreviation
  IS_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.
  IS_WIN95 = ((agt.indexOf("win95") != -1) || (agt.indexOf("windows 95") != -1) ||
              (user.platform.toLowerCase() == "win95"));
  // is this a 16 bit compiled version?
  IS_WIN16 = ((agt.indexOf("win16") != -1) || (agt.indexOf("16bit") != -1) || 
                  (agt.indexOf("windows 3.1") != -1) || (agt.indexOf("windows 16-bit") != -1));  
  IS_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".
  IS_WIN98 = ((agt.indexOf("win98") != -1) || (agt.indexOf("windows 98") != -1));
  IS_WINNT = ((agt.indexOf("winnt") != -1) || (agt.indexOf("windows nt") != -1));
  IS_WIN32 = (IS_WIN95 || IS_WINNT || IS_WIN98 || 
                  ((user.appVersion >= 4) && (navigator.platform == "Win32")) ||
                  (agt.indexOf("win32") != -1) || (agt.indexOf("32bit") != -1));
  IS_OS2 = ((agt.indexOf("os/2") != -1) || 
                (navigator.appVersion.indexOf("OS/2") != -1) ||   
                (agt.indexOf("ibm-webexplorer") != -1));
  IS_MAC    = (agt.indexOf("mac") != -1);
  IS_MAC68K = (IS_MAC && ((agt.indexOf("68k") != -1) || 
                              (agt.indexOf("68000") != -1)));
  IS_MACPPC = (IS_MAC && ((agt.indexOf("ppc") != -1) || 
                              (agt.indexOf("powerpc") != -1)));
  IS_SUN    = (agt.indexOf("sunos") != -1);
  IS_SUN4   = (agt.indexOf("sunos 4") != -1);
  IS_SUN5   = (agt.indexOf("sunos 5") != -1);
  IS_SUNI86 = (IS_SUN && (agt.indexOf("i86") != -1));
  IS_IRIX   = (agt.indexOf("irix") !=-1);    // SGI
  IS_IRIX5  = (agt.indexOf("irix 5") !=-1);
  IS_IRIX6  = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1));
  IS_HPUX   = (agt.indexOf("hp-ux") != -1);
  IS_HPUX9  = (IS_HPUX && (agt.indexOf("09.") != -1));
  IS_HPUX10 = (IS_HPUX && (agt.indexOf("10.") != -1));
  IS_AIX    = (agt.indexOf("aix") !=-1);      // IBM
  IS_AIX1   = (agt.indexOf("aix 1") !=-1);    
  IS_AIX2   = (agt.indexOf("aix 2") !=-1);    
  IS_AIX3   = (agt.indexOf("aix 3") !=-1);    
  IS_AIX4   = (agt.indexOf("aix 4") !=-1);    
  IS_LINUX  = (agt.indexOf("inux") != -1);
  IS_SCO    = (agt.indexOf("sco") != -1) || (agt.indexOf("unix_sv") != -1);
  IS_UNIXWARE = (agt.indexOf("unix_system_v") != -1); 
  IS_MPRAS    = (agt.indexOf("ncr") != -1); 
  IS_RELIANT  = (agt.indexOf("reliantunix") != -1);
  IS_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)); 
  IS_SINIX = (agt.indexOf("sinix") != -1);
  IS_FREEBSD = (agt.indexOf("freebsd") != -1);
  IS_BSD = (agt.indexOf("bsd") != -1);
  IS_UNIX  = ((agt.indexOf("x11") != -1) || IS_SUN || IS_IRIX || IS_HPUX || 
      IS_SCO || IS_UNIXWARE || IS_MPRAS || IS_RELIANT || IS_DEC || IS_SINIX || 
      IS_AIX || IS_LINUX || IS_BSD || IS_FREEBSD);
  IS_VMS   = ((agt.indexOf("vax") != -1) || (agt.indexOf("openvms") != -1));
  IS_NA_PLATFORM = (agt == "" || agt == null); 
  IS_OTHER_PLATFORM = (!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 && !IS_NA_PLATFORM)
  }


/* **************************************************************** */
/* now that we've assigned values to all the above global vars,     */
/* we can add jsVersion to our set of UserObject properties         */
/* **************************************************************** */

user.jsVersion = get_jsVersion();  // JS version

function get_jsVersion()  // get the user's JS version
  {
  if ((IS_NETSCAPE && IS_V2) || (IS_IE && IS_V3))
    return 1.0;
  else if ((IS_NETSCAPE && IS_V3) || (IS_OPERA)) 
    return 1.1;
  else if (((IS_NETSCAPE && IS_V4) && (user.appVersion <= 4.05)) 
             || (IS_IE && IS_V4)) 
    return 1.2;
  else if (((IS_NETSCAPE && IS_V4) && (user.appVersion > 4.05))
             || (IS_IE && IS_V5))
    return 1.3;
  else if (IS_NETSCAPE && IS_V5)
    return 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_NETSCAPE && (user.appVersion > 5))
    return 1.4;
  else if (IS_IE && (user.appVersion > 5))
    return 1.3;
  // HACK: no idea for other browsers; always check for JS version with > or >= 
  else 
    return NA;   
  }

/* **************************************************************** */
/* now we can finish up the Everest props and global vars ********* */
/* **************************************************************** */

// JS version
IS_JS11   = (user.jsVersion == 1.1);
IS_JS11UP = (user.jsVersion >= 1.1);
IS_JS12   = (user.jsVersion == 1.2);
IS_JS12UP = (user.jsVersion >= 1.2);
IS_JS13   = (user.jsVersion == 1.3);
IS_JS13UP = (user.jsVersion >= 1.3);
IS_JS14   = (user.jsVersion == 1.4);
IS_JS14UP = (user.jsVersion >= 1.4);
IS_JS15   = (user.jsVersion == 1.5);
IS_JS15UP = (user.jsVersion >= 1.5);
IS_NA_JSVERSION = (user.jsVersion == NA);
IS_OTHER_JSVERSION = (!IS_JS11 && !IS_JS12 && !IS_JS13 && !IS_JS14 &&
                      !IS_JS15 && !IS_NA_JSVERSION);


// set to true to fail gracefully for JS-library-file-incapable browsers
supportsJSLibraryFiles = true;


// }	

if (IS_WIN || IS_WIN16 || IS_WIN32 || IS_WIN31 || IS_WIN95 || IS_WINNT || IS_WIN98) {
	if (IS_NETSCAPE) {
        document.write("<LINK Rel = 'stylesheet' Type = 'text/css' HREF = '../common/ns_win.css'>");
           }
  	else if (IS_IE) {
        document.write("<LINK Rel = 'stylesheet' Type = 'text/css' HREF = '../common/ms_win.css'>");
           }
  	else {
        document.write("<LINK Rel = 'stylesheet' Type = 'text/css' HREF = '../common/else.css'>");
           }
  }
else if (IS_MAC || IS_MAC68K || IS_MACPPC) {
	if (IS_NETSCAPE) {
        document.write("<LINK Rel = 'stylesheet' Type = 'text/css' HREF = '../common/ns_mac.css'>");
           }
  	else if (IS_IE) {
        document.write("<LINK Rel = 'stylesheet' Type = 'text/css' HREF = '../common/ms_mac.css'>");
           }
  	else {
        document.write("<LINK Rel = 'stylesheet' Type = 'text/css' HREF = '../common/else.css'>");
           }
  }
else {
        document.write("<LINK Rel = 'stylesheet' Type = 'text/css' HREF = '../common/else.css'>");

  }

