(function($)
{
	$.fn.browserDetection = function(options)
	{
		var defaultOptions = { 
			detectBrowser: true,
			detectOS: true,
			detectVersion: false 
		};
		
		options = $.extend(defaultOptions, options);
		
		var fn = {
			init: function () 
			{
				if (options.detectBrowser == true)
				{
					this.browser = this.searchString(this.dataBrowser) || "";
				}
				if (options.detectOS == true)
				{
					this.OS = this.searchString(this.dataOS) || "";
				}
				if (options.detectVersion == true)
				{
					this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "";
				}
			},
			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 'ver' + parseFloat(dataString.substring(index+this.versionSearchString.length+1)).toString();
			},
			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"
				},
				{		// for newer Netscapes (6+)
					string: navigator.userAgent,
					subString: "Netscape",
					identity: "Netscape"
				},
				{
					string: navigator.userAgent,
					subString: "MSIE",
					identity: "MSIE",
					versionSearch: "MSIE"
				},
				{
					string: navigator.userAgent,
					subString: "Gecko",
					identity: "Mozilla",
					versionSearch: "rv"
				},
				{ 		// for older Netscapes (4-)
					string: navigator.userAgent,
					subString: "Mozilla",
					identity: "Netscape",
					versionSearch: "Mozilla"
				}
			],
			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"
				}
			]
		}
		
		var $this = $(this);
		
		fn.init();
		
		if (options.detectBrowser == true)
		{
			$this.addClass(fn.browser.toLowerCase())
		}
		if (options.detectOS == true)
		{
			$this.addClass(fn.OS.toLowerCase());
		}
		if (options.detectVersion == true)
		{
			$this.addClass(fn.version.toLowerCase());
		}
	}
})(jQuery);
