var BrowserObj = Class.create();
BrowserObj.prototype =
{
  initialize: function()
  {
    BrowserDetect.init();
    
    this.BrowserName = BrowserDetect.browser;
    this.BrowserVersion = BrowserDetect.version;
    this.BrowserOS = BrowserDetect.OS;
		
    if(this.BrowserName == 'MSIE' || this.BrowserName == 'Explorer')
      this.IsIe = true;
    else
      this.IsIe = false;
      
    this._ActiveXProgIds = [];
  },
  
  GetEvent: function(oSource)
  {
    if (!this.isGecko) {
      if (oSource && oSource.ownerDocument && oSource.ownerDocument.parentWindow)
        return oSource.ownerDocument.parentWindow.event;
      else
        return window.event;
    }
    else {
      var oCaller = arguments.callee.caller;
      while (oCaller.arguments.length == 0 || (String(oCaller.arguments[0]) != "[object Event]" && String(oCaller.arguments[0]) != "[object MouseEvent]" && String(oCaller.arguments[0]) != "[object KeyboardEvent]"))
        oCaller = oCaller.caller;
     
      var oEvent = oCaller.arguments[0];
      //append any IE only properties/methods to the NS event object for compatibility - only if doesn't exist (Firefox)
      if (!oEvent.srcElement)
        oEvent.srcElement = oEvent.target;
      return oEvent;
    }
  },
  
  GetActiveXObject: function (activeXArray)
  {
    activeXArray = typeof(activeXArray) == "string" ? activeXArray.split(",") : activeXArray;
    
    //Cache up the correct progId
    if(this._ActiveXProgIds[activeXArray])
      return new ActiveXObject(this._ActiveXProgIds[activeXArray]);
      
    //Find the first valid progId by trying to create
    var activeXObject;
    if (this._ActiveXProgIds[activeXArray] = activeXArray.detect(function(progId) {
      try 
      { 
        activeXObject = new ActiveXObject(progId);
        return true;
      } catch (e){}
    }))
      return activeXObject;
    else
      throw "Required ActiveXObject not found on your computer."
  }
  
//  Wheel: function(event)
//  {
//    var delta = 0;
//	  if (!event) event = window.event;
//	  if (event.wheelDelta) {
//		  delta = event.wheelDelta/120; 
//		  if (window.opera) delta = -delta;
//	  } else if (event.detail) {
//		  delta = -event.detail/3;
//	  }
//	  if (delta)
//		  $Browser.HandleWheelScroll(delta);
//    if (event.preventDefault)
//      event.preventDefault();
//    event.returnValue = false;
//  },
//  
//  HandleWheelScroll: function(delta)
//  {
//    if(delta > 0)
//      this.WheelScrolledUp();
//    else
//      this.WheelScrolledDown();
//      
//    return true;
//  },
//  
//  WheelScrolledUp: function() {},
//  WheelScrolledDown: function() {}
}

var BrowserDetect = 
{
	init: 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";
	},
	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));
	},
	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.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"
		}
	]

};