function BrowserEnvironment_extractFollowingFloat(inputStr, keyStr, linkChars, returnIfKeyNotFound)
    {
    var followingFloat = returnIfKeyNotFound;
    var cursor = inputStr.indexOf(keyStr);
    if (cursor != -1)
        {
        var len = inputStr.length;
        cursor += keyStr.length;
        while (cursor < len && linkChars.indexOf(inputStr.charAt(cursor)) != -1) cursor++;
        if (cursor < len)
            {
            var start = cursor;
            while (cursor < len && "0123456789".indexOf(inputStr.charAt(cursor)) != -1) cursor++;
            if (cursor < len && inputStr.charAt(cursor) == '.') cursor++;
            while (cursor < len && "0123456789".indexOf(inputStr.charAt(cursor)) != -1) cursor++;
            followingFloat = parseFloat(inputStr.substring(start, cursor));
            }
        }
    return followingFloat;
    }

function BrowserEnvironment_getBrowserName()
    {
    if (this.browser == this.IE)
        return "Internet Explorer";
    else if (this.browser == this.NETSCAPE)
        return "Netscape Navigator";
    else if (this.browser == this.MOZILLA)
        return "Mozilla";
    else if (this.browser == this.SAFARI)
        return "Safari";
    else if (this.browser == this.FIREFOX)
        return "Firefox";
    else if (this.browser == this.OMNIWEB)
        return "OmniWeb";
    else if (this.browser == this.OPERA)
        return "Opera";
    else if (this.browser == this.WEBTV)
        return "Web TV";
    else if (this.browser == this.ICAB)
        return "iCab";
    else if (this.browser == this.CHROME)
        return "Chrome";
    else if (this.browser == this.KONQUEROR)
        return "Konqueror";
    else
        return "Unknown";
    }

function BrowserEnvironment_getOSName()
    {
    if (this.os == this.OS_UNIX)
        return "Unix";
    else if (this.os == this.OS_LINUX)
        return "Linux";
    else if (this.os == this.OS_MAC)
        return "Macintosh";
    else if (this.os == this.OS_WINDOWS)
        return "Windows";
    else
        return "Unknown";
    }

function BrowserEnvironment_getDescription()
    {
    if (this.browserVersion == this.UNKNOWN_VERSION)
        return this.getBrowserName() + " browser (version unknown), running on the " + this.getOSName() + " OS.";
    else
        return this.getBrowserName() + " browser (version " + this.browserVersion + "), running on the " + this.getOSName() + " OS.";
    }

function BrowserEnvironment_toAlert()
    {
    alert(this.getDescription());
    }

function BrowserEnvironment()
    {
    this.UNKNOWN_VERSION = -1.0;
    this.OTHER           = 1;
    this.IE              = 2;
    this.NETSCAPE        = 3;
    this.MOZILLA         = 4;
    this.SAFARI          = 5;
    this.FIREFOX         = 6;
    this.OMNIWEB         = 7;
    this.OPERA           = 8;
    this.WEBTV           = 9;
    this.ICAB            = 10;
    this.CHROME          = 11;
    this.KONQUEROR       = 12;
    this.OS_LINUX        = 2;
    this.OS_UNIX         = 3;
    this.OS_MAC          = 4;
    this.OS_WINDOWS      = 5;

    this.os              = this.OTHER;
    this.browser         = this.OTHER;
    this.browserVersion  = this.UNKNOWN_VERSION;

    this.getBrowserName  = BrowserEnvironment_getBrowserName;
    this.getOSName       = BrowserEnvironment_getOSName;
    this.getDescription  = BrowserEnvironment_getDescription;
    this.toAlert         = BrowserEnvironment_toAlert;

    var agent = navigator.userAgent.toLowerCase();
    var name  = navigator.appName.toLowerCase();

    if (agent.indexOf("win") != -1)
        this.os = this.OS_WINDOWS;
    else if (agent.indexOf("mac") != -1)
        this.os = this.OS_MAC;
    else if (agent.indexOf("linux") != -1)
        this.os = this.OS_LINUX;
    else if (agent.indexOf("x11") != -1)
        this.os = this.OS_UNIX;

    if (name.indexOf("microsoft") != -1)
        this.browser = this.IE;
    else if (agent.indexOf("chrome") != -1)
        this.browser = this.CHROME;
    else if (agent.indexOf("safari") != -1)
        this.browser = this.SAFARI;
    else if (agent.indexOf("firefox") != -1)
        this.browser = this.FIREFOX;
    else if (agent.indexOf("mozilla") != -1)
        this.browser = this.MOZILLA;
    else if (agent.indexOf("konqueror") != -1)
        this.browser = this.KONQUEROR;
    else if (agent.indexOf("omniweb") != -1)
        this.browser = this.OMNIWEB;
    else if (agent.indexOf("opera") != -1)
        this.browser = this.OPERA;
    else if (agent.indexOf("opera") != -1)
        this.browser = this.OPERA;
    else if (agent.indexOf("icab") != -1)
        this.browser = this.ICAB;
    else if (agent.indexOf("netscape") != -1 && name.indexOf("netscape") != -1)
        this.browser = this.NETSCAPE;

    if (this.browser == this.IE)
        this.browserVersion = BrowserEnvironment_extractFollowingFloat(agent, "msie", "/\r\n\t ", this.UNKNOWN_VERSION);
    else if (this.browser == this.NETSCAPE)
        {
        this.browserVersion = BrowserEnvironment_extractFollowingFloat(agent, "netscape", "/\r\n\t ", this.UNKNOWN_VERSION);
        if (this.browserVersion != this.UNKNOWN_VERSION)
            {
            var betterVersion = BrowserEnvironment_extractFollowingFloat(agent, "netscape" + Math.floor(this.browserVersion), "/\r\n\t ", this.UNKNOWN_VERSION);
            if (betterVersion != this.UNKNOWN_VERSION) this.browserVersion = betterVersion;
            }
        else
            this.browserVersion = BrowserEnvironment_extractFollowingFloat(agent, "mozilla", "/\r\n\t ", this.UNKNOWN_VERSION);
        }
    else if (this.browser == this.MOZILLA)
        this.browserVersion = BrowserEnvironment_extractFollowingFloat(agent, "rv:", "/\r\n\t ", this.UNKNOWN_VERSION);
    else if (this.browser == this.SAFARI)
        this.browserVersion = BrowserEnvironment_extractFollowingFloat(agent, "safari", "/\r\n\t ", this.UNKNOWN_VERSION);
    else if (this.browser == this.FIREFOX)
        this.browserVersion = BrowserEnvironment_extractFollowingFloat(agent, "firefox", "/\r\n\t ", this.UNKNOWN_VERSION);
    else if (this.browser == this.CHROME)
        this.browserVersion = BrowserEnvironment_extractFollowingFloat(agent, "chrome", "/\r\n\t ", this.UNKNOWN_VERSION);
    }

var BrowserEnvironment_currentEnv = 0;

function getBrowserEnvironment()
    {
    if (BrowserEnvironment_currentEnv == 0) BrowserEnvironment_currentEnv = new BrowserEnvironment();
    return BrowserEnvironment_currentEnv;
    }

var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

if (checkIt('konqueror')) {
    browser = "Konqueror";
    OS = "Linux";
} else if (checkIt('safari')) browser = "Safari"
else if (checkIt('omniweb')) browser = "OmniWeb"
else if (checkIt('chrome')) browser = "Chrome"
else if (checkIt('opera')) browser = "Opera"
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab"
else if (checkIt('firefox')) browser = "FireFox"
else if (checkIt('msie')) browser = "Internet Explorer"
else if (!checkIt('compatible')) {
    browser = "Netscape Navigator"
    version = detect.charAt(8);
} else if (checkIt('mozilla')) browser = "Mozilla"
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS) {
    if (checkIt('linux')) OS = "Linux";
    else if (checkIt('x11')) OS = "Unix";
    else if (checkIt('mac')) OS = "Mac"
    else if (checkIt('win')) OS = "Windows"
    else OS = "an unknown operating system";
}

function browserIsOK()
    {
        var benv = getBrowserEnvironment();

        if (browser == "Opera")
            return false;
        else if (benv.os == benv.OS_WINDOWS)
            {
            if (benv.browser == benv.IE)
                return benv.browserVersion >= 5.1;
            else if (benv.browser == benv.NETSCAPE)
                return benv.browserVersion >= 7.0;
            else if (benv.browser == benv.MOZILLA)
                return benv.browserVersion >= 1.2;
            else if (benv.browser == benv.FIREFOX)
                return benv.browserVersion >= 1.0;
            else if (benv.browser == benv.CHROME)
                return true;
            }
        else if (benv.os == benv.OS_MAC)
            {
            if (benv.browser == benv.IE)
                return benv.browserVersion >= 5.1;
            else if (benv.browser == benv.NETSCAPE)
                return benv.browserVersion >= 7.0;
            else if (benv.browser == benv.MOZILLA)
                return benv.browserVersion >= 1.2;
            else if (benv.browser == benv.FIREFOX)
                return benv.browserVersion >= 1.0;
            else if (benv.browser == benv.SAFARI)
               return benv.browserVersion >= 412;
            else if (benv.browser == benv.CHROME)
                return true;
            }
        else if (benv.os == benv.OS_LINUX || benv.os == benv.OS_UNIX)
            {
            if (benv.browser == benv.NETSCAPE)
                return benv.browserVersion >= 7.0;
            else if (benv.browser == benv.MOZILLA)
                return benv.browserVersion >= 1.2;
            else if (benv.browser == benv.FIREFOX)
                return benv.browserVersion >= 1.0;
            else if (benv.browser == benv.CHROME)
                return true;
            }
        return false;
/*
    if (OS == "Windows")
        {
        if (browser == "Internet Explorer")
            return version >= 5.1;
        else if (browser == "Netscape Navigator")
            return version >= 7.0;
        else if (browser == "Mozilla")
            return version >= 1.2;
        else if (browser == "FireFox")
            return version >= 1.0;
        }
    else if (OS == "Mac")
        {
        if (browser == "Internet Explorer")
            return version >= 5.1;
        else if (browser == "Netscape Navigator")
            return version >= 7.0;
        else if (browser == "Mozilla")
            return version >= 1.2;
        else if (browser == "FireFox")
            return version >= 1.0;
        else if (browser == "Safari")
            return version >= 412;
        }
    else if (OS == "Linux" || OS == "Unix")
        {
        if (browser == "Netscape Navigator")
            return version >= 7.0;
        else if (browser == "Mozilla")
            return version >= 1.2;
        else if (browser == "FireFox")
            return version >= 1.0;
        }
    return false;
*/
    }

function checkLoginSubmit(usernameAndPasswordForm)
    {
    if (!browserIsOK())
        {
        usernameAndPasswordForm.username.value = "";
        usernameAndPasswordForm.password.value = "";
        usernameAndPasswordForm.action = "/UnsupportedBrowser.html";
        }
    return true;
    }

function checkIt(string) {
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}
