// 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).

// Everything yo always wanted to know about your Javascript client
// but were afraid to ask. Create "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) broser vendor AND major version nunber
//     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
//
// 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 wich 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);

    // 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_nav     = ((agt.indexOf('mozilla') != -1) && (agt.indexOf('spoofer') == -1)
                     && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera') == -1)
                     && (agt.indexOf('webtv') == -1))  && (agt.indexOf('firefox') == -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_navonly = (is_nav && ((agt.indexOf(";nav") != -1) || (agt.indexOf("; nav") != -1)));
    var is_nav5    = (is_nav && (is_major == 5));
    var is_nav5up  = (is_nav && (is_major >= 5));

    var is_ie    = (agt.indexOf("msie") != -1);
    var ie=is_ie;
    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));
    var is_ie5   = (is_ie && (is_major == 5) && (agt.indexOf("msie 5.0") != -1));
    var is_ie5up = (is_ie && !is_ie3 && !is_ie4);
// alert(agt)
    var is_ie7 = (agt.indexOf('msie 7')>-1)

    // KNOWN BUG: On AOL4, returns false if IE3 is embedded browser
    // or if this is the first browser window opened. Thus the
    // variables is_aol, is_aol3, and is_aol4 aren't 100% reliable.
    var is_aol  = (agt.indexOf("aol") != -1);
    var is_aol3 = (is_aol && is_ie3);
    var is_aol4 = (is_aol && is_ie4);

    var is_opera = (agt.indexOf("opera") != -1);
    var is_webtv = (agt.indexOf("webtv") != -1);

    // *** JAVASCRIPT VERSION CHECK *** 
    var is_js;

    if (is_nav2 || is_ie3) is_js = 1.0
    else if (is_nav3 || is_opera) 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_nav4 && (is_minor > 5)) is_js = 1.4
    else if (is_ie && (is_major > 5)) is_js = 1.3
    // HACK: no idea for the other browsers; always check for JS version with > or >=
    else is_js = 0.0

    // *** PALTFORM ***
    var is_win      = ((agt.indexOf("win") != -1) || (agt.indexOf("16bit") != -1));

    // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all
    //       Win 32, so you can't distinguish between Win95 and WinNT.
    var is_win95    = ((agt.indexOf("win95") != -1) || (agt.indexOf("windows 95") != -1));

    // is this a 16 bits compiled version?
    var is_win16    = ((agt.indexOf("win16") != -1)       || (agt.indexOf("16bit") != -1) ||
                       (agt.indexOf("windows 3.1") != -1) || (agt.indexOf("windows 16-bit") != -1));

    var 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 palin 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".
    var is_win98    = ((agt.indexOf("win98") != -1) || (agt.indexOf("windows 98") != -1));
    var is_winnt    = ((agt.indexOf("winnt") != -1) || (agt.indexOf("windows nt") != -1));
    var is_win32    = (is_win95 || is_winnt || is_win98 ||
                      ((is_major >= 4) && (navigator.platform == "Win32")) ||
                      (agt.indexOf("win32") != -1) || (agt.indexOf("32bit") != -1));

    var is_os2      = ((agt.indexOf("os/2") != -1) ||
                       (navigator.appVersion.indexOf("OS/2") != -1) ||
                       (agt.indexOf("ibm-webexplorer") != -1));

    var is_mac      = (agt.indexOf("mac") != -1);
    var is_mac68k   = (is_mac && ((agt.indexOf("68k") != -1) ||
                                  (agt.indexOf("68000") != -1))); 
    var is_macppc   = (is_mac && ((agt.indexOf("ppc") != -1) ||
                                  (agt.indexOf("powerpc") != -1))); 

    var is_sun      = (agt.indexOf("sunos") != -1);
    var is_sun4     = (agt.indexOf("sunos 4") != -1);
    var is_sun5     = (agt.indexOf("sunos 5") != -1);
    var is_suni86   = (is_sun && (agt.indexOf("i86") != -1));
    var is_irix     = (agt.indexOf("irix") != -1);              // SGI
    var is_irix5    = (agt.indexOf("irix 5") != -1);
    var is_irix5    = (agt.indexOf("irix 6") != -1);
    var is_hpux     = (agt.indexOf("hp-ux") != -1);             // HP
    var is_hpux9    = (is_hpux && (agt.indexOf("09.") != -1));
    var is_hpux10   = (is_hpux && (agt.indexOf("10.") != -1));
    var is_aix      = (agt.indexOf("aix") != -1);               // IBM
    var is_aix1     = (agt.indexOf("aix 1") != -1);
    var is_aix2     = (agt.indexOf("aix 2") != -1);
    var is_aix3     = (agt.indexOf("aix 3") != -1);
    var is_aix4     = (agt.indexOf("aix 4") != -1);
    var is_linux    = (agt.indexOf("inux") != -1);              // LINUX
    var is_sco      = (agt.indexOf("sco") != -1) ||
                      (agt.indexOf("unix_sv") != -1);           // SCO
    var is_unixware = (agt.indexOf("unix_system_v") != -1);     // UNIXWARE
    var is_mpras    = (agt.indexOf("ncr") != -1);               // NCR
    var is_reliant  = (agt.indexOf("reliantunix") != -1);       // RELIANT
    var 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));    // DIGITAL
    var is_sinix    = (agt.indexOf("sinix") != -1);             // SINIX
    var is_freebsd  = (agt.indexOf("freebsd") != -1);           // Free-BSD
    var is_bsd      = (agt.indexOf("bsd") != -1);               // BSD
    var is_unix     = ((agt.indexOf("x11") != -1) || is_sun ||
                       is_irix || is_hpux || is_aix ||
                       is_linux || is_sco || is_unixware ||
                       is_mpras || is_reliant || is_dec || 
                       is_sinix || is_freebsd || is_bsd);

    var is_vms      = (agt.indexOf("bsd") != -1);               // Digital VMS
    /*
    document.write(agt+"<br>");	
document.write(parseFloat(navigator.appVersion)+"/"+parseInt(navigator.appVersion)+"<br>");
document.write(is_nav+"<br>");	
document.write(is_nav5up+"<br>");	
*/