function Browser(){

    var browser = {
        searchString : function(data){
            for (var i=0;i<data.length;i++)	{
                var dataString = data[i].string;
                var dataProp = data[i].prop;
                this.versionSearchString = data[i].versionSearch || data[i].identity;
                if (dataString) {
                        if (dataString.indexOf(data[i].subString) != -1){
                                return data[i].identity;
                        }
                }
                else if (dataProp){
                        return data[i].identity;
                }
            }
        },

        searchVersion : function(dataString){
            var index = dataString.indexOf(this.versionSearchString);
            if (index == -1){
                return null;
            }
            index = index + this.versionSearchString.length + 1;
            var version = dataString.substring(index);
            return parseFloat(version);
        },

        dataOS : [  { string: navigator.platform, subString: "Win", identity: "Windows" },
                    { string: navigator.platform, subString: "Mac", identity: "Mac" },
                    { string: navigator.userAgent, subString: "iPhone", identity: "iPhone/iPod" },
                    { string: navigator.platform, subString: "Linux", identity: "Linux" }
        ],

        dataBrowser : [
                    { string: navigator.userAgent, subString: "Chrome", identity: "Chrome" },
                    { string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb" },
                    { string: navigator.vendor, subString: "Apple", identity: "Safari", versionSearch: "Version" },
                    { prop: window.opera, identity: "Opera" },
                    { string: navigator.vendor, subString: "iCab", identity: "iCab" },
                    { string: navigator.vendor, subString: "KDE", identity: "Konqueror" },
                    { string: navigator.userAgent, subString: "Firefox", identity: "Firefox" },
                    { string: navigator.vendor, subString: "Camino", identity: "Camino" },
                    { string: navigator.userAgent, subString: "Netscape", identity: "Netscape" },
                    { string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE" },
                    { string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv" },
                    { string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla" }
        ],

        isIE : function(){
            return (this.name == "Explorer");
        },

        isFF : function(){
            return (this.name == "Firefox");
        },

        isQuirks : function(){
            return document.compatMode !== "CSS1Compat";
        },

        isIEStrict : function(){
            return (this.isIE() && !this.isQuirks());
        }

    };

    browser.name = browser.searchString(browser.dataBrowser) || "An unknown browser";
    browser.version = browser.searchVersion(navigator.userAgent) || browser.searchVersion(navigator.appVersion) || "an unknown version";
    browser.OS = browser.searchString(browser.dataOS) || "an unknown OS";

    System.browser = browser;

}
