1 
  2 /**
  3  * @private
  4  * @description Get detailed information about
  5  * @constructor
  6  * @class
  7  * @version 0.1a
  8  */ 
  9 function browserInfo(){
 10 	this.browserEngine = {
 11 		FIREFOX : 1,
 12 		OPERA	: 2,
 13 		IE		: 3,
 14 		WEBKIT	: 4,
 15 		SAFARI 	: 5,
 16 		UNKNOWN	: 6
 17 	};
 18 	
 19 	this.browser = {
 20 		FIREFOX_2		: 1,
 21 		FIREFOX_3 		: 2,
 22 		SAFARI_2 		: 3,
 23 		SAFARI_3 		: 4,
 24 		SAFARI_4		: 5,
 25 		OPERA_9			: 6,
 26 		IE_6			: 7,
 27 		IE_7			: 8,
 28 		IE_8			: 9,
 29 		WEBKIT			: 10,
 30 		NETSCAPE		: 11,
 31 		UNKNOWN			: 12,
 32 		OPERA			: 13,
 33 		SAFARI			: 14,
 34 		IE				: 15
 35 	};
 36 	
 37 	this.platform = {
 38 		WINDOWS			: 1,
 39 		MACINTEL		: 2,
 40 		MACPPC			: 9,
 41 		LINUX			: 3,
 42 		SOLARIS			: 4,
 43 		BSD				: 5,
 44 		MOBILE			: 6,
 45 		IPHONE			: 7,
 46 		UNKNOWN			: 8
 47 	};
 48 	this.current = null;
 49 	return this;
 50 }
 51 
 52 browserInfo.prototype = {
 53 	isBrowser : function(b){
 54 		if(this.browser[b] && this.browser[b] == this.current.BROWSER)return true;
 55 		return false;
 56 	},
 57 	/**
 58 	 * Method to get browser engine
 59 	 * @param e Engine name (possible FIREFOX, OPERA, IE, WEBKIT, SAFARI)
 60 	 * @return boolean
 61 	 */	
 62 	isEngine : function(e){
 63 		if(this.browserEngine[e] && this.browserEngine[e] == this.current.BROWSER_ENGINE)return true;
 64 		return false;
 65 	},
 66 	/**
 67 	 * @function
 68 	 * @description Method to parse array with browser version to associative array
 69 	 * @param v array with browser version in format: array(major, minor, build)
 70 	 * @return associative array ( MAJOR : major, MINOR : minor, BUILD : build)
 71 	 */
 72 	_setBrowserVersion : function(v){	
 73 		return {
 74 			MAJOR : parseInt(v[0]),
 75 			MINOR : parseInt(v[1]),
 76 			BUILD : parseInt(v[2])
 77 		};
 78 	},
 79 	/** 
 80 	 * get an browser engine, browser version and platform
 81 	 * @return browser num 
 82 	 */
 83 	process : function(){
 84 		var RV = {
 85 			PLATFORM : 0,
 86 			BROWSER : 0,
 87 			BROWSER_ENGINE : 0,
 88 			BROWSER_VERSION : {
 89 				MAJOR : 0,
 90 				MINOR : 0,
 91 				BUILD : 0
 92 			}
 93 		};
 94 		
 95 		var s = navigator.userAgent;
 96 		var p = navigator.platform;
 97 
 98 		// platforms
 99 		var is_macintel = p.indexOf('MacIntel') != -1 ? true : false;
100 		var is_macppc = p.indexOf('MacPPC') != -1 ? true : false;
101 		var is_windows = s.indexOf('Windows') > 0 ? true : false;
102 		var is_linux = p.indexOf('Linux') > 0 ? true : false;
103 		var is_bsd = p.indexOf('BSD') > 0 ? true : false;
104 		var is_solaris = p.indexOf('Solaris') > 0 ? true : false;
105 		
106 		// browser engine
107 		var is_webkit = s.indexOf('KHTML/') > 0 ? true : false;
108 		var is_safari = s.indexOf('Safari/') > 0 ? true : false;
109 		var is_firefox = s.indexOf('Firefox/') > 0 ? true : false;
110 		var is_netstapce = s.indexOf('Netscape/') > 0 ? true : false;
111 		var is_opera = s.indexOf('Opera/') > -1 ? true : false;	
112 		var is_ie = s.indexOf('MSIE ') > -1 ? true : false;
113 		
114 		
115 		// set platform
116 		if(is_macintel){
117 			RV.PLATFORM = this.platform.MACINTEL;
118 		}else
119 		if(is_macppc){
120 			RV.PLATFORM = this.platform.MACPPC;		
121 		}else
122 		if(is_windows){
123 			RV.PLATFORM = this.platform.WINDOWS;
124 		}else{
125 			RV.PLATFORM = this.platform.UNKNOWN;
126 		}
127 		
128 		// set browser engine
129 		if(is_firefox){
130 			RV.BROWSER_ENGINE = this.browserEngine.FIREFOX;
131 			//FF
132 			var re = new RegExp("Firefox\\\/(\\d+)\\.(\\d+)\\.(\\d+)");
133 			var v = re.exec(s);
134 			if(v != null){
135 				RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1));
136 			}
137 			
138 			// set concrete browser version
139 			if(RV.BROWSER_VERSION.MAJOR == 2){
140 				RV.BROWSER = this.browser.FIREFOX_2;
141 			}else
142 			if(RV.BROWSER_VERSION.MAJOR == 3){
143 				RV.BROWSER = this.browser.FIREFOX_3;			
144 			}
145 		}else
146 		if(is_opera){
147 			var re = new RegExp("Opera\\\/(\\d+)\\.(\\d+)");
148 			var v = re.exec(s);
149 			if(v != null){
150 				// add build because it's undefined in Opera
151 				v[v.length] = 0;
152 				RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1));
153 			}
154 
155 			RV.BROWSER_ENGINE = this.browserEngine.OPERA;
156 
157 			// set concrete browser version
158 			if(RV.BROWSER_VERSION.MAJOR == 9){
159 				RV.BROWSER = this.browser.OPERA_9;
160 			}else{
161 				RV.BROWSER = this.browser.OPERA;
162 			}			
163 		}else
164 		if(is_safari){
165 			var re = new RegExp("Version\\\/(\\d+)\\.(\\d+)");
166 			var v = re.exec(s);
167 			if(v != null){
168 				// add build for Safari
169 				v[v.length] = 0;
170 				RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1));
171 			}		
172 			
173 			RV.BROWSER_ENGINE = this.browserEngine.SAFARI;
174 
175 			// set concrete browser version
176 			if(RV.BROWSER_VERSION.MAJOR == 2){
177 				RV.BROWSER = this.browser.SAFARI_2;
178 			}else			
179 			if(RV.BROWSER_VERSION.MAJOR == 3){
180 				RV.BROWSER = this.browser.SAFARI_3;
181 			}else
182 			if(RV.BROWSER_VERSION.MAJOR == 4){
183 				RV.BROWSER = this.browser.SAFARI_4;
184 			}else{
185 				RV.BROWSER = this.browser.SAFARI;
186 			}			
187 		}else
188 		if(is_webkit){
189 			RV.BROWSER_ENGINE = this.browserEngine.WEBKIT;
190 		}else
191 		if(is_ie){
192 			//IE
193 			var re = new RegExp("MSIE\\s(\\d+)\\.(\\d+);");
194 			var v = re.exec(s);
195 			if(v != null){
196 				// add build for IE
197 				v[v.length] = 0;
198 				RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1));
199 			}
200 
201 			RV.BROWSER_ENGINE = this.browserEngine.IE;
202 			
203 			// set concrete browser version
204 			if(RV.BROWSER_VERSION.MAJOR == 6){
205 				RV.BROWSER = this.browser.IE_6;
206 			}else
207 			if(RV.BROWSER_VERSION.MAJOR == 7){
208 				RV.BROWSER = this.browser.IE_7;
209 			}else
210 			if(RV.BROWSER_VERSION.MAJOR == 8){
211 				RV.BROWSER = this.browser.IE_8;
212 			}else{
213 				RV.BROWSER = this.browser.IE;
214 			}			
215 		}else{
216 			RV.BROWSER_ENGINE = this.browserEngine.UNKNOWN;
217 			RV.BROWSER = this.browser.UNKNOWN;
218 		}
219 
220 		this.current = RV;	
221 		return this;
222 	}
223 }
224