/*
 * jsBrwSniff v0.4.0a
 *
 * A browser sniffer library
 * http://jsbrwsniff.sf.net
 *
 * Released under the GNU LGPL license
 * Autor: Pau Garcia i Quiles <paugq AT users DOT sourceforge DOT net>
 *
 */

var brs = navigator.userAgent.toLowerCase();
	
function getBrowser() {
    var i; // Where to start looking for the version number
    var j; // Where to stop looking for the version number
    var len; // length of the version string
    var browser=new Array("unknown", "unknown", "unknown", "unknown");
    
    if ((i=brs.indexOf("omniweb", 0))!= -1) {
    // Omniweb
        browser[0]="omniweb";
        i+="omniweb/".length;
        (j=brs.indexOf("-",i)!=-1 ? j : j=brs.indexOf(";",i))
        browser[1]=brs.substr(i,j-i);
        browser[2]="omniweb";
        i=j;
        j=brs.indexOf(";", i);
        browser[3]=brs.substr(i, j-i);
        return browser;
    } else if ((i=brs.indexOf("konqueror/",0))!=-1) {
    // Konqueror
        i+="konqueror/".length;
        ((j=brs.indexOf(";", i))!= -1 ? j : j=brs.indexOf("-", i));
        browser[0]="konqueror";
        browser[1]=brs.substr(i, j-i);
        browser[2]="khtml";
        return browser;
    } else if ((i=brs.indexOf("safari", 0))!=-1) {
    // Safari
        browser[0]="safari";        
        i+="safari/".length;
        (j=brs.indexOf(" ", i) != -1 ? j : j=brs.length);	    
        browser[1]=brs.substr(i, j-i);			
        browser[2]="khtml";
        return browser;
    } else if ((i=brs.indexOf("netscape6",0))!=-1) { 
    // Netscape 6.x
        browser[0]="netscape";			
        i+="netscape6/".length;
        ( (j=brs.indexOf(" ", i)) != -1 ? j : (j=brs.indexOf("/", i)) != -1 ? j : j=brs.length );
        browser[1]=brs.substr(i, j-i);			
        browser[2]="gecko";    
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("netscape/7",0)) != -1) {
    // Netscape 7.x	
        browser[0]="netscape";			
        i+="netscape/".length;
        ( (j=brs.indexOf(" ", i)) != -1 ? j : (j=brs.indexOf("/", i)) != -1 ? j : j=brs.length );
        browser[1]=brs.substr(i, j-i);			
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("galeon",0)) !=-1) {
    // Galeon
        browser[0]="galeon";                   
        i+="galeon/".length;
        j=brs.indexOf("(",i);			
        browser[1]=brs.substr(i, j-i);			
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if (brs.indexOf("nautilus",0) !=-1) {
    // Nautilus
        browser[0]="nautilus";
        browser[1]=0;                        
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("firefox",0)) !=-1) {
    // Mozilla Firefox
        browser[0]="firefox";							
        i+="firefox/".length;
        j=brs.length;                        
        browser[1]=brs.substr(i, j-i);			
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("firebird",0)) !=-1) {
    // Mozilla Firebird
        browser[0]="firebird";							
        i+="firebird/".length;
        j=brs.length;                        
        browser[1]=brs.substr(i,j-i);			
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("phoenix",0)) !=-1) {
    // Mozilla Phoenix
        browser[0]="phoenix";
        i+="phoenix/".length+1;
        j=brs.length;                        
        browser[1]=brs.substr(i, j-i);		
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("epiphany",0)) !=-1) {
    // Mozilla Epiphany
        browser[0]="epiphany";
        i+="epiphany/".length;
        j=brs.length;                        
        browser[1]=brs.substr(i, j-i);
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("chimera",0)) !=-1) {
    // Mozilla Chimera
	browser[0]="chimera";							
        i+="chimera/".length;
        j=brs.length;			
        browser[1]=brs.substr(i, j-i);			
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ( (brs.indexOf("mozilla/5.0",0)!=-1) && (brs.indexOf("gecko",0)!=-1) ) {
    // Mozilla Seamonkey
	browser[0]="mozsea";			
        i=brs.indexOf("rv:",0) + "rv:".length;			
        j=brs.indexOf(")", i);			
        browser[1]=brs.substr(i, j-i);			
        browser[2]="gecko";
        browser[3]=getGeckoVersion();
        return browser;
    } else if ((i=brs.indexOf("msie",0)) !=-1) {
    // Microsoft Internet Explorer
        browser[0]="msie";
        i+="msie".length +1;
        j=brs.indexOf(";",i);        			
        browser[1]=brs.substr(i, j-i);                                
        browser[2]="msie";
        return browser;
    } else if ((i=brs.indexOf("netscape4",0)) !=-1) { 
    // Netscape4      
        browser[0]="netscape";
        i+="netscape4/".length;
        j=brs.length
        browser[1]=brs.substr(i, j-i);
        browser[2]="mozold";                        
        return browser;
    } else if ((i=brs.indexOf("mozilla/4",0))!=-1) {
        i+="mozilla/".length;
        browser[0]="netscape";                
        ((j=brs.indexOf("[",i))!=-1 ? j-- : j=(brs.indexOf("(",i)));
        browser[1]=brs.substr(i, j-i);
        browser[2]="mozold";                        
        return browser;
    } else if ((i=brs.indexOf("opera/",0)) !=-1) {								
    // Opera
        i+="opera/".length;
        ((j=brs.indexOf("(", i)) != -1 ? j : ( (j=brs.indexOf(";", i)) != -1 ? j : j--) );
        browser[0]="opera";	
        browser[1]=brs.substr(i, j-i);
        browser[2]="opera";
        return browser;
    } else if ((i=brs.indexOf("opera",0))!=-1) {
        i+="opera".length +1;
        j=brs.indexOf("[",i)-1;					
        browser[0]="opera";
        browser[1]=brs.substr(i, j-i);
        browser[2]="opera";
        return browser;
    } else if ((i=brs.indexOf("elinks/", 0)) != -1) {
    // ELinks
        i+="elinks/".length;
        j=brs.indexOf(" ", i);
        browser[0]="elinks";
        browser[1]=brs.substr(i, j-i);
        browser[2]="elinks";
        return browser;
    } else if ((i=brs.indexOf("elinks", 0)) != -1) {
        i+=2;
        j=brs.indexOf(";", i);
        browser[0]="elinks";
        browser[1]=brs.substr(i, j-i);
        browser[2]="elinks";
        return browser;
    } else if ((i=brs.indexOf("w3m/0.", 0)) != -1) {
    // w3m
        i+="w3m/".length;
        ( (j=brs.indexOf("-", i) != -1) ? j : ( (j=brs.indexOf("+", i) ) != -1 ? j : j=brs.length) );
        browser[0]="w3m";
        browser[1]=brs.substr(i, j-i);
        browser[2]="w3m";
        return browser;
    } else if ((i=brs.indexOf("links/", 0)) != -1) {
    // Links
        i+="links/".length;
        j=brs.length;
        browser[0]="links";
        browser[1]=brs.substr(i, j-i);
        browser[2]="links";
        return browser;
    } else if (brs.indexOf("links", 0) != -1) {
        i=brs.indexOf("(", 0) + 1;
        j=brs.indexOf(";", i);
        browser[0]="links";
        browser[1]=brs.substr(i, j-i);
        browser[2]="links";
        return browser;
    }
}

// Is input empty?
function isEmpty(input) {
    return (input==null || input =="")
}


// Return browser's (actual) major version or -1 if bad version entered
function getMajorVersion(version) {        
    return (!isEmpty(version) ? ( version.indexOf(".",0)!=-1 ? version.substr(0,version.indexOf(".",0)) : version ) : -1)
}


// Return browser's (actual) minor version or -1 if bad version entered
function getMinorVersion(version) {	
    return (!isEmpty(version) ? ( (dotPos=version.indexOf(".",0))!=-1 ? version.substr(dotPos+1,version.length-dotPos) : 0 ) : -1)
}


// Return operating system we are running on top of
function getOS() {  
    var os=new Array("unknown", "unknown");
    if (brs.indexOf("windows") !=-1) {
        os[0]="win";
        if (brs.indexOf("nt 5.1") != -1) {
            os[1]="xp";
        } else if (brs.indexOf("nt 5.0") != -1) {
            os[1]="2000";
        } else if ( (brs.indexOf("win98") != -1) || (brs.indexOf("windows 98")!= -1 ) ) {
            os[1]="98";
        } else if (brs.indexOf("windows me") != -1) {
            os[1]="me";
        } else if (brs.indexOf("nt 5.2") != -1) {
            os[1]="longhorn";        
        } else if ( (brs.indexOf("windows 95") != -1) || (brs.indexOf("win95")!= -1 ) ) {
            os[1]="95";        
        } else if ( (brs.indexOf("nt 4.0") != -1) || (brs.indexOf("nt4.0") ) ){
            os[1]="nt4";
        }
        return os;
    } else if (brs.indexOf("linux") !=-1) {        
        os[0]="linux";        
        try {
            os[1] = brs.match(/linux\s(\d+(\.\d){1,2})/)[1];
        } catch (e) { }
        return os;
    } else if (brs.indexOf("mac os x") !=-1) {
        os[0]="macosx";        
        return os;
    } else if ((i=brs.indexOf("freebsd")) !=-1) {
        os[0]="freebsd";
        os[1]="unknown";
        try {
            os[1] = brs.match(/freebsd\s(\d(\.\d)*)*/)[1];
        } catch (e) { }
        return os;
    } else if ( (brs.indexOf("unix") !=-1) || (brs.indexOf("x11") != -1 ) ) {
        os[0]="unix";
        return os;
    } else if (brs.indexOf("sunos") !=-1) {
        os[0]="sunos";
        return os;
    } else if (brs.indexOf("openbsd") !=-1) {
        os[0]="openbsd";
        try {
            os[1] = brs.match(/openbsd\s(\d+(\.\d){1,2})/)[1];
        } catch (e) { }
        return os;
    } else if ( (brs.indexOf("macintosh") !=-1) || (brs.indexOf("mac_powerpc")) ) {
        os[0]="macclassic";    
        return os;
    } else if (brs.indexOf("os/2") !=-1) {
        os[0]="os2";
        return os;
    } else if (brs.indexOf("openvms") !=-1) {
        os[0]="openvms";    
        return os;
    } else if ( (brs.indexOf("amigaos") !=-1) || (brs.indexOf("amiga")) ) {
        os[0]="amigaos";
        return os;
    } else if (brs.indexOf("hurd") !=-1) {
        os[0]="hurd";    
        return os;
    } else if (brs.indexOf("cygwin") !=-1) {
        os[0]="cygwin";
        return os;
    }
}


// Return Gecko version
function getGeckoVersion() {       
    return gVer=brs.match(/gecko\/([0-9]+)/)[1];
}

// Return full browser UA string
function getFullUAString() {
    return brs;
}
