// ############################################
// # BROWSER DETECT                           #
// #                                          #
// # http://www.quirksmode.org/js/detect.html #
// ############################################

var browserDetect = {
  init: function () {
    this.browser = this.searchString(this.dataBrowser) || 'An unknown browser';
    this.version = this.searchVersion(navigator.userAgent)
      || this.searchVersion(navigator.appVersion)
      || 'An unknown version';
    this.OS = this.searchString(this.dataOS) || 'An unknown OS';
  },
  
  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;
    
    return parseFloat(dataString.substring(index+this.versionSearchString.length + 1));
  },
  
  dataBrowser: [
    {
      string: navigator.userAgent,
      subString: 'Firefox',
      identity: 'firefox'
    },
    
    {
      string: navigator.userAgent,
      subString: 'Gecko',
      identity: 'mozilla',
      versionSearch: 'rv'
    },
    
    {
      string: navigator.userAgent,
      subString: 'MSIE',
      identity: 'ie',
      versionSearch: 'MSIE'
    },
    
    {
      string: navigator.vendor,
      subString: 'Apple',
      identity: 'safari',
      versionSearch: 'Version'
    },
    
    {
      prop: window.opera,
      identity: 'opera'
    },
    
    {
      string: navigator.userAgent,
      subString: 'Chrome',
      identity: 'chrome'
    },
    
    {
      string: navigator.vendor,
      subString: 'KDE',
      identity: 'konqueror'
    },
    
    {
      string: navigator.vendor,
      subString: 'Camino',
      identity: 'camino'
    },
    
    {
      string: navigator.userAgent,
      subString: 'OmniWeb',
      versionSearch: 'OmniWeb/',
      identity: 'omniWeb'
    },
    
    {
      string: navigator.vendor,
      subString: 'iCab',
      identity: 'iCab'
    },
    
    {
      // For older Netscapes (4-)
      string: navigator.userAgent,
      subString: 'Mozilla',
      identity: 'netscape',
      versionSearch: 'Mozilla'
    },
    
    {
      // For newer Netscapes (6+)
      string: navigator.userAgent,
      subString: 'Netscape',
      identity: 'netscape'
    }
  ],
  
  dataOS: [
    {
      string: navigator.platform,
      subString: 'Win',
      identity: 'windows'
    },
    
    {
      string: navigator.platform,
      subString: 'Mac',
      identity: 'mac'
    },
    
    {
      string: navigator.platform,
      subString: 'Linux',
      identity: 'linux'
    },
    
    {
      string: navigator.userAgent,
      subString: 'iPhone',
      identity: 'iPhone/iPod'
    }
  ]
};

browserDetect.init();