var browser = {
    releaseDates: {
        "Google Chrome": {
            1: 'released September 2008',
            2: 'released May 2009',
            3: 'released September 2009',
            4: 'released January 2010',
            5: 'released February 2010'
        },
        "Internet Explorer": {
            5: 'released March 1999',
            6: 'released August 2001',
            7: 'released October 2006',
            8: 'released March 2009'
        },
        "Firefox": {
            1: 'released November 2004',
            2: 'released October 2006',
            3: 'released June 2008',
            3.5: 'released July 2009',
            3.6: 'released January 2010'
        },
        "Safari": {
            31: {date: 'released June 2003', version: 1}, // version 1
            41: {date: 'released April 2005', version: 2}, // version 2
            3: 'released June 2007',
            4: 'released June 2009'
        },
        "Opera": {
            6: 'released December 2001',
            7: 'released January 2003',
            8: 'released April 2005',
            9: 'released June 2006',
            "10.00": 'released September 2009',
            "10.10": 'released November 2009',
            "10.50": 'released March 2010'
        }
    },
    set: {
        ie8: {
            name: "Internet Explorer",
            match: /MSIE ([8])\..*;/,
            instruction: 'ie8'
        },
        ie7: {
            name: "Internet Explorer",
            match: /MSIE ([7])\..*;/,
            instruction: 'ie7'
        },
        ie_legacy: {
            name: "Internet Explorer",
            match: /MSIE ([0-6])\..*;/,
            instruction: 'ie_legacy'
        },
        ff: {
            name: "Firefox",
            match: /Firefox\/([123](?:\.[5])?)/,
            instruction: 'firefox'
        },
        safari: {
            name: "Safari",
            match: /Version\/([0-9])\..*? Safari/,
            instruction: 'safari'
        },
        safari_legacy: {
            name: "Safari",
            match: /Safari\/([34]1)/,
            instruction: 'safari'
        },
        chrome: {
            name: "Google Chrome",
            match: /Chrome\/([0-9])?\..*? Safari/,
            instruction: 'chrome'
        },
        opera: {
            name: "Opera",
            match: /Opera\/[0-9]{1,2}\..*?Version\/([0-9]{1,2}\.[0-9]{1,2}).*?/,
            instruction: 'opera'
        },
        opera_legacy: {
            name: "Opera",
            match: /Opera\/([0-9]{1,2})\..*?/,
            instruction: 'opera'
        }
    },
    platform: navigator.userAgent.match(/Macintosh/) ? 'Mac' : 'PC',
    detect: function() {
        for (k in this.set) {
            if (this.set.hasOwnProperty(k) && (this.set[k].version = navigator.userAgent.match(this.set[k].match))) {
	        this.set[k].releaseDate = this.releaseDates[this.set[k].name][this.set[k].version[1]];
	        // If an object returned, look into it for version and date
	        // This is because older versions of Safari have different versioning numbers than the rest :-P
	        if (this.set[k].releaseDate && typeof this.set[k].releaseDate != 'string') {
	            this.set[k].version = ['',this.set[k].releaseDate.version];
	            this.set[k].releaseDate = this.set[k].releaseDate.date;
	        }
	        return this.set[k];
            }
        }
        return null;
    }
};

