﻿/*************************************************
jQuery Browser Plugin
************************************************/
/*jslint eqeqeq: true */
/*global $, jQuery, document, navigator, window, ActiveXObject */

$(document).ready(function(){
	// navigator properties
	var pl = navigator.platform;
	var ua = navigator.userAgent;

	// browser properties
	var ob = {
		// define the rendering client
		gecko: /Gecko/.test(ua) && !/like Gecko/.test(ua),
		webkit: /WebKit/.test(ua),

		// define the browser
		aol: /AOL/.test(ua),
		camino: /Camino/.test(ua),
		chrome: /Chrome/.test(ua),
		firefox: /Firefox/.test(ua),
		flock: /Flock/.test(ua),
		icab: /iCab/.test(ua),
		konqueror: /Konqueror/.test(ua),
		mozilla: /Mozilla/.test(ua) && /rv:/.test(ua),
		msie: /MSIE/.test(ua),
		netscape: /Netscape/.test(ua),
		opera: /Opera/.test(ua),
		safari: /Safari/.test(ua),

		// define the operating system
		win: /Win/.test(pl),
		mac: /Mac/.test(pl),
		linux: /Linux/.test(pl),
		iphone: /iPhone/.test(pl),

		// define the classic navigator properties
		platform: pl,
		agent: ua,
		
		// always true :)
		javascript: true
	};
	
	// descriptions of browser
	try {
		ob.browser = (ob.aol) ? 'AOL' : 
			(ob.msie) ? 'Internet Explorer' : 
			/(Firefox|Flock|iCab|Konqueror|Opera|Chrome|Safari)/.exec(ua)[0];
	} catch(errBrowser) {
		ob.browser = (ob.mozilla) ? 'Mozilla' : 'Other';
	}
	
	// descriptions of OS
	try {
		ob.OS = (/Windows NT 6\.1/.test(ua)) ? 'Windows 7' : 
			(/Windows NT 6\.0/.test(ua)) ? 'Windows Vista' : 
			(/Windows NT 5\.2/.test(ua)) ? 'Windows Server 2003' : 
			(/Windows NT 5\.1/.test(ua)) ? 'Windows XP' : 
			(/Windows NT 5\.0/.test(ua)) ? 'Windows 2000' : 
			(/Windows NT 4\.0/.test(ua)) ? 'Windows NT 4.0' : 
			(/Windows 98/.test(ua)) ? 'Windows 98' : 
			(/Windows 95/.test(ua)) ? 'Windows 95' : 
			(/Windows CE/.test(ua)) ? 'Windows CE' : 
			(ob.win) ? 'Windows' : 
			(ob.mac) ? 'Apple Mac' : 
			/(Linux|iPhone)/.exec(ua)[0];
	} catch(errOS) {
		ob.OS = 'Other';
	}

	// redefine the rendering client
	ob.renderer = (ob.gecko) ? 'gecko' : (ob.webkit) ? 'webkit' : '';

	// define the version
	ob.version = {};
	ob.version.string = (ob.aol) ? /AOL ([^;]+)/.exec(ua)[1] : 
		(ob.camino) ? /Camino\/(.+)/.exec(ua)[1] : 
		(ob.chrome) ? /Chrome\/([^\s]+)/.exec(ua)[1] : 
		(ob.firefox) ? /Firefox\/(.+)/.exec(ua)[1] : 
		(ob.opera) ? /Opera\/([^\s]+)/.exec(ua)[1] : 
		(ob.safari) ? /Version\/([^\s]+)/.exec(ua)[1] : 
		(ob.netscape) ? /Netscape\/(.+)/.exec(ua)[1] : 
		(ob.msie) ? /MSIE ([^;]+)/.exec(ua)[1] : 
		(ob.mozilla) ? /rv\:([^\)]+)/.exec(ua)[1] : 
		'';
	ob.version.number = parseFloat(ob.version.string);
	ob.version.major = /([^\.]+)/.exec(ob.version.string)[1];
	
	// cookies
	ob.cookies = function(){
		var d = new Date();
		var c = (d.getTime() + '');
		document.cookie = 'c=' + c + '; path=/';
		
		return (document.cookie.indexOf(c) > 0);
	};
	
	// activex
	ob.activex = (window.ActiveXObject) ? true : false;
	
	// plugins
	var _plugins = [];
	jQuery.each(navigator.plugins, function(){
		_plugins.push({ name: this.name, filename: this.filename });
	});
	ob.plugins = _plugins;
	
	// windows media player
	ob.wmp = {};
	ob.wmp.plugin = false;
	jQuery.each(navigator.plugins, function(){
		if (this.filename.toLowerCase().indexOf('np-mswmp') >= 0) {
			ob.wmp.plugin = true;
			return false;
		}
	});
	
	var oWMP = (ob.activex) ? new ActiveXObject('WMPlayer.OCX') : $('object[id=wmpBrowserCheck]')[0];

	ob.wmp.enabled = (oWMP) ? true : false;
	ob.wmp.string = (oWMP) ? 'Windows Media Player' : 'Not found';
	ob.wmp.version = {};
	ob.wmp.version.string = (oWMP && oWMP.versionInfo) ? oWMP.versionInfo : '0';
	ob.wmp.version.number = parseFloat(ob.wmp.version.string);
	ob.wmp.version.major = /([^\.]+)/.exec(ob.wmp.version.string)[1];

	// extend jquery browser object with new identifiers	
	jQuery.extend(jQuery.browser, ob);
	
	// callback function?
	if (typeof window.onBrowserCallback === 'function') {
		window.onBrowserCallback();
	}
});
