/**
 * Detects the user client information, such as Operating System and web browser is being used
 */
var UserClient = jinj.Class();
	UserClient.prototype = {
		dataBrowser: [ { string: navigator.userAgent,
						 subString: "OmniWeb",
						 versionSearch: "OmniWeb/",
						 identity: "OmniWeb" },
						
					   { string: navigator.vendor,
						 subString: "Apple",
						 identity: "Safari" },
						
					   { 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.userAgent,
						 subString: "Iceweasel",
						 identity: "Iceweasel" },
						
					   { string: navigator.vendor,
						 subString: "Camino",
						 identity: "Camino" },
						
					   { // for newer Netscapes (6+)
						 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" },
						
					   { // 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.platform,
					subString: "Linux",
					identity: "Linux" } ],
		
		construct: 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";
			
			if (this.browser == "Explorer") {
				this.ie  = true;
			} else if (this.browser == "Firefox" || this.browser == "Iceweasel") {
				this.ff  = true;
			} else if (this.browser == "Opera") {
				this.op  = true;
			}
		},
		
		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));
		}
	}
