// JavaScript Browser Sniffer
// Eric Krok, Andy King, Michel Plungjan Jan. 31, 2002
// see http://www.webreference.com/ for more information
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// send improvements to aking@internet.com and we'll roll the best ones in

// convert chars to lowercase to simplify testing
    var agt=navigator.userAgent.toLowerCase();
    var appVer=navigator.appVersion.toLowerCase();

    var is_minor=parseFloat(appVer);
    var is_major=parseInt(is_minor);
    var iePos=appVer.indexOf('msie');
    if (iePos !=-1) {
       is_minor=parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)))
       is_major=parseInt(is_minor);
    }

    var is_gecko=((navigator.product)&&(navigator.product.toLowerCase()=="gecko"))?true:false;
    var is_moz=((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                    (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                    (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                    (is_gecko) && ((navigator.vendor=="")||(navigator.vendor=="Mozilla")));
    if (is_moz) {
       var is_moz_ver=(navigator.vendorSub)?navigator.vendorSub:0;
       if(!(is_moz_ver)) {
           is_moz_ver=agt.indexOf('rv:');
           is_moz_ver=agt.substring(is_moz_ver+3);
           is_paren=is_moz_ver.indexOf(')');
           is_moz_ver=is_moz_ver.substring(0,is_paren);
       }
       is_minor=is_moz_ver;
       is_major=parseInt(is_moz_ver);
    }

    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('hotjava')==-1)
                && (!(is_moz)));

    if ((navigator.vendor)&&
        ((navigator.vendor=="Netscape6")||(navigator.vendor=="Netscape"))&&
        (is_nav)) {
       is_major=parseInt(navigator.vendorSub);
       is_minor=parseFloat(navigator.vendorSub);
    }

    var is_opera=(agt.indexOf("opera") !=-1);
    var is_nav4=(is_nav && (is_major==4));
    var is_nav4up=(is_nav && is_minor >=4);  

    var is_navonly=(is_nav && ((agt.indexOf(";nav") !=-1) || (agt.indexOf("; nav") !=-1)) );

    var is_nav6=(is_nav && is_major==6); 
    var is_nav6up=(is_nav && is_minor >=6);

    var is_nav5=(is_nav && is_major==5 && !is_nav6); 
    var is_nav5up=(is_nav && is_minor >=5);

    var is_nav7=(is_nav && is_major==7);
    var is_nav7up=(is_nav && is_minor >=7);

    var is_ie =((iePos!=-1) && (!is_opera));
    var is_ie4=(is_ie && is_major==4);
    var is_ie4up=(is_ie && is_minor >=4);
    var is_ie5=(is_ie && is_major==5);
    var is_ie5up=(is_ie && is_minor >=5);

    var is_ie5_5=(is_ie && (agt.indexOf("msie 5.5") !=-1)); 
    var is_ie5_5up=(is_ie && is_minor >=5.5);

    var is_ie6=(is_ie && is_major==6);
    var is_ie6up=(is_ie && is_minor >=6);             

    // Done with is_minor testing; revert to real for N6/7
    if (is_nav6up) {
       is_minor=navigator.vendorSub;
    }

    var is_mac=(agt.indexOf("mac")!=-1);
