/*      browser-detect.js

        Just include this file in your html like this

        <script type="text/JavaScript" src="path/browser-detect.js">

        OS test  if (os.isWindows) your code (see which_os for list of os flags)
        Also innerHTML = "Your OS is " +os.platform

        Browser test if(browser.isFirefox) your code (see which_browser for list of browser flags)
        and (browser.version >= 6) your code. (versions are numeric)
*/
/* Determine which OS */
function which_os(){
    /* Set default values */
    this.isWindows = false;
    this.isMac = false;
    this.isLinux = false;
    this.isUnix = false;
    this.isSun = false;
    this.isWinCE = false;
    this.isOS_Unk = false;
    this.platform = "Unknown";       //name of platform/os
    var re =  /(windows ce|windows|linux|macintosh|sunos|unix)/i;

    if (re.exec(navigator.userAgent))
		this.platform = RegExp.$1;

    switch (this.platform.toLowerCase() ){
    case "windows ce":
        this.isWinCE = true;
        break;
    case "windows":
        this.isWindows = true;
        break;
    case "macintosh":
        this.isMac = true;
        break;
    case "linux":
        this.isLinux = true;
        break;
    case "unix":
        this.isUnix = true;
        break;
    case "sunos":
        this.isSun = true;
        break;
    default:
        this.isOS_Unk = true;
        break;
    }//endcase

}//eof which_os

/* Now create an instance of which_os object an initial values*/
var os = new  which_os();

/* Deterimine which browser */
function which_browser(){

    /* Set default values */
    this.brand = "unk";     //e.g. IE, Mozilla
    this.isOpera = false;
    this.isMSIE = false;
    this.isMozilla = false;
    this.isFirefox = false;
    this.isNetscape = false;
    this.isSafari = false;
    this.isOmniWeb = false;
    this.isCamino = false;
    this.isChimera = false;
    this.isGaleon = false;
    this.isICab = false;
    this.isKonqueror = false;
    this.isKHTML  = false;
    this.isGecko = false;
    this.isUnk = false;
    this.subversion = 0;
    this.version = 0;
    this.cversion = "0";
	this.language = navigator.userLanguage || navigator.language;

    var subversion = 0;
    var version = 0;
    var cversion = "0";
    var agent = navigator.userAgent.toLowerCase();

    var format_version = function (str){
        cversion = str;
        var rvParts = str.match(/(\d+)/g);

        if (rvParts) {
            var ver = rvParts[0] || "0";
            var dec = /\d{2}$/.exec("00" + rvParts[1]) || "0";
            var sub = rvParts[2] || "0";
            ver = ver + "." + dec;    //assemble version
        }
        else {
            sub = ver = "0";
        }
        version = ver * 1;        //casts string to number
        subversion = sub * 1;     //casts string to number

        return version;
    };

    if (/opera/.test(agent)){

        this.brand = "Opera";
        this.isOpera = true;
        if (/opera[\/\s](\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/msie/.test(agent)){

        this.brand = "MSIE";
        this.isMSIE = true;

        if (/msie\s(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/firefox/.test(agent)){
        this.brand = "Firefox";
        this.isFirefox = true;
        this.isGecko = true;

        if (/firefox\/(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/netscape/.test(agent)){
        //Netscape/8.0 or Netscape6/6.2.2
        this.brand = "Netscape";
        this.isNetscape = true;

        if (/netscape.?\/(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            this.isGecko = format_version(RegExp.$1) > 4;
    }
    else if (/camino/.test(agent)){
        //camino/0.7+
        this.brand = "Camino";
        this.isCamino = true;

        if (/camino\/(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/chimera/.test(agent)){
        //Chimera/0.6
        this.brand = "Chimera";
        this.isChimera = true;

        if (/chimera\/(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/galeon/.test(agent)){
        //Galeon/1.3.18
        this.brand = "Galeon";
        this.isGaleon = true;

        if (/galeon\/(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/konqueror/.test(agent) ) {
        //KHTML/3.4.1 (  or Konqueror/3.4;
        this.isKHTML  = true;
        this.brand = "Konqueror";
        this.isKonqueror = true;

        if (/khtml\/(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent) )
            format_version(RegExp.$1);
        else if (/konqueror\/(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/omniweb/.test(agent)){
        //OmniWeb/v563.34
        this.isKHTML  = true;
        this.brand = "OmniWeb";
        this.isOmniWeb = true;

        if (/omniweb\/v(\d{1,3}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
	else if (/safari/.test(agent)) {
		this.brand = "Safari";
		this.isSafari = true;
		this.isKHTML = true;
		cversion = (agent.match(/version\/([\d.]+)/) ? RegExp.$1 : 
					agent.match(/safari\/([\d.]+)/) ? RegExp.$1 : 0);
		format_version(cversion);
	}
    else if (/icab/.test(agent)){
        //iCab/2.9.8 or iCab 2.9.8
        this.brand = "iCab";
        this.isICab = true;

        if (/icab[\/\s](\d{1,3}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/khtml/.test(agent)) {
        //KHTML/3.4.1 or KHTML,

        this.isKHTML  = true;
        this.brand = "unk-khtml";

        if (/khtml\/(\d{1,3}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else if (/mozilla/.test(agent)) {
        //rv:1.7.7 or rv:1.2a or rv:1.8a2

        //everyone claims mozilla in ua,
        //but only not any above
        //is mozilla
        this.brand = "Mozilla";
        this.isMozilla = true;
        this.isGecko = true;

        if (/rv:(\d{1,2}(\.\d{1,2}){0,3})/.exec(agent))
            format_version(RegExp.$1);
    }
    else {
        //There are too many others
        this.brand = "unknown";
        this.isUnk = true;
    }

    this.cversion = cversion;
    this.version = version;    //casts string to number
    this.subversion = subversion;
}//eof which_browser

var browser = new which_browser();