var browser = {
  releaseDates: {
    "Google Chrome": {
      1: 'released September 2008',
      2: 'released May 2009',
      3: 'released September 2009',
      4: 'released January 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 February 2009'
    },
    "Opera": {
      6: 'released December 2001',
      7: 'released January 2003',
      8: 'released April 2005',
      9: 'released June 2006',
      10: 'released September 2009'
    }
  },
  set: {
    ie8: {
      name: "Internet Explorer",
      match: /MSIE ([8])\..*;|MSIE ([7])\.[0-9.]*;.*Trident.*/,
      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-9])?)/,
      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})\..*?/,
      instruction: 'opera'
    },
    opera_legacy: {
      name: "Opera",
      match: /Opera\/([0-9]{1,2})\..*?/,
      instruction: 'opera'
    }
  },

  platform: navigator.userAgent.match(/Macintosh/) ? 'Mac' : 'PC',
  possibilities: ['ie8', 'ie7', 'ie_legacy', 'ff', 'safari', 'safari_legacy', 'chrome', 'opera', 'opera_legacy'],

  detect: function() {
    len = this.possibilities.length;
    for (i = 0; i < len; i++) {
      var k = this.possibilities[i];
      if (this.set.hasOwnProperty(k) && (this.set[k].version = navigator.userAgent.match(this.set[k].match))) {
        var matching = this.set[k];

        // hack for ie8 ACTING LIKE ie7
        if (k == 'ie8' && !matching.version[1]) {
          matching.version[1] = '8';
        }

	    matching.releaseDate = this.releaseDates[matching.name][matching.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 (matching.releaseDate && typeof matching.releaseDate != 'string') {
	      matching.version = ['',matching.releaseDate.version];
	      matching.releaseDate = matching.releaseDate.date;
	    }
	    return matching;
      }
    }
    return null;
  }
};

