// CBrowserToolkit

// Sniffing code is based on:
// Ultimate client-side JavaScript client sniff. 
// (C) Netscape Communications 1999.

var _cbaNetscapeEvents = new Array(
	"",
	"click",
	"dblclick",
	"mouseover",
	"mouseout",
	"mousemove",
	"keypress",
	"keydown",
	"keyup",
	"resize",
	"load",
	"unload");

var _cbaMicrosoftEvents = new Array(
	"",
	"onclick",
	"ondblclick",
	"onmouseover",
	"onmouseout",
	"onmousemove",
	"onkeypress",
	"onkeydown",
	"onkeyup",
	"onresize",
	"onload",
	"onunload");

var _cbNETSCAPE		= 1;
var _cbMICROSOFT	= 2;
var _cbAOL				= 3;
var _cbOPERA			= 4;
var _cbWEB_TV			= 5;
var _cbMACINTOSH	= 6;
var _cbLINUX			= 7;
var _cbUNIX				= 8;

var _cbOS_WIN95		= 1;
var _cbOS_WIN98		= 2;
var _cbOS_WINNT		= 3;
var _cbOS_OS2			= 4;
var _cbOS_68K			= 5;
var _cbOS_PPC			= 6;

var _cbCLICK			= 1;
var _cbDBL_CLICK	= 2;
var _cbMOUSE_OVER	= 3;
var _cbMOUSE_OUT	= 4;
var _cbMOUSE_MOVE	= 5;
var _cbKEY_PRESS	= 6;
var _cbKEY_DOWN		= 7;
var _cbKEY_UP			= 8;
var _cbRESIZE			= 9;
var _cbLOAD				= 10;
var _cbUNLOAD			= 11;

function CBrowserToolkit() 
	{   
	var sUserAgent		= navigator.userAgent.toLowerCase();								// convert all characters to lowercase to simplify testing
	this.BrowserName	= -1;
	if(	(sUserAgent.indexOf('mozilla')		!= -1) && 
			(sUserAgent.indexOf('spoofer')		== -1) && 
			(sUserAgent.indexOf('compatible') == -1) && 
			(sUserAgent.indexOf('opera')			== -1) && 
			(sUserAgent.indexOf('webtv')			== -1))
		this.BrowserName	= _cbNETSCAPE;
	else if(sUserAgent.indexOf("msie") != -1)
		this.BrowserName	= _cbMICROSOFT;
	else if(sUserAgent.indexOf("aol") != -1)															// KNOWN BUG: On AOL4, returns false if IE3 is embedded browser 
		this.BrowserName	= _cbAOL;																					// or if this is the first browser window opened.  Thus the 
	else if(sUserAgent.indexOf("opera") != -1)														// properties is.aol, is.aol3, and is.aol4 aren't 100% reliable.
		this.BrowserName	= _cbOPERA;
	else if(sUserAgent.indexOf("webtv") != -1)
		this.BrowserName	= _cbWEB_TV;
	this.Major					= -1;
	this.Minor					= -1;
	if(this.BrowserName == _cbMICROSOFT)
		{
		navigator.appVersion.search(/MSIE\s+([^\s]+)/);
		var sVersion = RegExp.$1;
		var aPieces = sVersion.split(/\./);
		this.Major = aPieces[0];
		this.Minor = aPieces[1];
		}
	else
		{
		this.Major				= parseInt(navigator.appVersion);
		this.Minor				= parseFloat(navigator.appVersion);
		}
	this.Platform				= "";
	if( (sUserAgent.indexOf("win")		!= -1) ||														// NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all 
			(sUserAgent.indexOf("16bit")	!= -1) )														// Win32, so you can't distinguish between Win95 and WinNT. 
		this.Platform			= _cbMICROSOFT;
	if(sUserAgent.indexOf("mac") != -1)
		this.Platform			= _cbMACINTOSH;
	if(sUserAgent.indexOf("inux") != -1)
		this.Platform			= _cbLINUX;
	if(	(sUserAgent.indexOf("sco")						!= -1) || 
			(sUserAgent.indexOf("unix_sv")				!= -1) || 
			(sUserAgent.indexOf("unix_system_v")	!= -1) ||
			(sUserAgent.indexOf("ncr")						!= -1) || 
			(sUserAgent.indexOf("reliantunix")		!= -1) ||
			(sUserAgent.indexOf("dec")						!= -1) || 
			(sUserAgent.indexOf("osf1")						!= -1) ||
			(sUserAgent.indexOf("dec_alpha")			!= -1) ||
			(sUserAgent.indexOf("alphaserver")		!= -1) ||
			(sUserAgent.indexOf("ultrix")					!= -1) || 
			(sUserAgent.indexOf("alphastation")		!= -1) || 
			(sUserAgent.indexOf("sinix")					!= -1) || 
			(sUserAgent.indexOf("freebsd")				!= -1) || 
			(sUserAgent.indexOf("bsd")						!= -1) ||
			(sUserAgent.indexOf("x11")						!= -1))
		this.Platform			= _cbUNIX; 
	this.OS							= "";
	if( (sUserAgent.indexOf("win95")			!= -1) || 
			(sUserAgent.indexOf("windows 95")	!= -1))
		this.OS						= _cbOS_WIN95;
	if( (sUserAgent.indexOf("win98")			!= -1) ||												// NOTE: Reliable detection of Win98 may not be possible. It appears that: 
			(sUserAgent.indexOf("windows 98")	!= -1))													//       - On Nav 4.x and before you'll get plain "Windows" in userAgent. 
		this.OS						= _cbOS_WIN98;																		//       - On Mercury client, the 32-bit version will return "Win98", but 
	if( (sUserAgent.indexOf("winnt")			!= -1) ||												//         the 16-bit version running on Win98 will still return "Win95". 
			(sUserAgent.indexOf("windows nt")	!= -1))
		this.OS						= _cbOS_WINNT;
	if( (sUserAgent.indexOf("os/2")							!= -1) || 
			(navigator.appVersion.indexOf("OS/2")		!= -1) || 
			(sUserAgent.indexOf("ibm-webexplorer")	!= -1))
		this.OS						= _cbOS_OS2;
	if(this.Platform == _cbMACINTOSH && 
			( (sUserAgent.indexOf("68k")		!= -1) ||
				(sUserAgent.indexOf("68000")	!= -1)))
		this.OS						= _cbOS_68K;
	if(this.Platform == _cbMACINTOSH &&
			( (sUserAgent.indexOf("ppc")			!= -1) ||
				(sUserAgent.indexOf("powerpc")	!= -1)))
		this.OS						= _cbOS_PPC;
	this.AddEventTrap		= AddEventTrap;
	function AddEventTrap(lEvent, sTarget, rFunction)
		{
		switch(this.BrowserName)
			{
			case _cbNETSCAPE:
				{
				try
					{
					eval(sTarget + ".addEventListener(\"" + _cbaNetscapeEvents[lEvent] + "\", " + rFunction + ", true);");
					}
				catch(e)
					{
					var wnDebug = open("", "Debug", "scrollbars=yes, resizable=yes");
					for(i in e)
						wnDebug.document.writeln(i + ": " + e[i] + "<br/>");
					}
				break;
				}
			case _cbMICROSOFT:
				{
				try
					{
					eval(sTarget + "." + _cbaMicrosoftEvents[lEvent] + " = " + rFunction);
					}
				catch(e)
					{
					var wnDebug = open("", "Debug", "scrollbars=yes, resizable=yes");
					for(i in e)
						wnDebug.document.writeln(i + ": " + e[i] + "<br/>");
					}
				break;
				}
			default:
				{
				alert("CBrowserToolkit does not know how to an event to this browser");
				return;
				}
			}
		}
	} 

