// Browser version check - Copyright (C) 1998-2011 Charles A Upsdell, All Rights Reserved; www.upsdell.com


function cBrowserInfo ( UA, V, OS, cookies )
{
if ( arguments.length < 1 )
	UA = navigator.userAgent;
if ( arguments.length < 2 )
	V = navigator.appVersion;
if ( arguments.length < 3 )
	OS = navigator.platform;
if ( arguments.length < 4 )
	cookies = navigator.cookieEnabled;
this.nav_ua = UA;
this.nav_version = V;
this.nav_platform = OS;
this.nav_cookies = cookies;
var ua = this.UA = UA.toLowerCase();
this.OS = OS.toLowerCase();

this.browser = '';
this.verEngine = new cVersion( '0' );
this.isDanger = false;
this.isOld = false;
this.isDead = false;
this.newer = '0';

// Platform?
this.osMac = (ua.indexOf('mac')!=-1);
this.osWin = (this.OS == 'win32') || (ua.indexOf('windows')!=-1) || (ua.indexOf('win32')!=-1) || (ua.indexOf('win 9')!=-1)
	|| (ua.indexOf('winnt')!=-1) || (ua.indexOf('winme')!=-1) || (ua.indexOf('win9')!=-1) || (ua.indexOf('win16')!=-1);
this.osWin = this.osWin && !this.osMac && (ua.indexOf('windows ce')==-1);

// Engine?
if ( typeof(isTrulyIE) != 'undefined' )
  {
	this.isIE = true;
	this.osWin = true;
	for ( var prop in [ 'osMac', 'isKhtml', 'isChrome', 'isSafari', 'isOpera', 'isGecko', 'isNetscape', 'isWebtv' ] )
		this[prop] = false;
  }
else
  {
	this.isA = (ua.indexOf('applewebkit/') != -1);
	this.isK = (ua.indexOf('khtml') != -1);
	this.isOpera = this.isO = (ua.indexOf('opera') != -1);
	this.isGecko = this.isG = !this.isK && !this.isO && (ua.indexOf('gecko/') != -1);
	this.isWebtv = this.isW = (ua.indexOf('webtv') != -1);
	this.isIE = !this.isO && !this.isW && (ua.indexOf('msie') != -1);
	this.isT = this.osWin && this.isIE;
  }

// Browser name?
if ( this.isOpera )
	this.browser = 'Opera';
this.isNetscape = !this.isA && !this.isG && !this.isK && !this.isO && ((ua.indexOf('mozilla')!=-1) && ((ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1)));
if ( this.isNetscape )
	this.browser = 'Netscape';
if ( this.isIE )
	this.browser = 'Internet Explorer';
if ( this.isGecko && !this.isNetscape )
	this.browser = 'Gecko';

// Version and generation number?
this.verBrowser = new cVersion( V );
if ( this.isGecko )
  {
	var i = ua.indexOf('rv:');
	if ( i >= 0 )
		this.verEngine = new cVersion( ua.substring(3+i) );
	i = ua.indexOf(' gecko/') + 7;
	var s1 = ua.substring( i );
	var j = s1.lastIndexOf( '/' );
	if ( j == -1 )
	  {
		this.browser = 'Mozilla';
		this.verBrowser = new cVersion( this.verEngine );
	  }
	else
	  {
		var s2 = s1.substring( 0, j+1 );
		var k = s2.lastIndexOf( ' ' );
		if ( k != -1 )
		  {
			this.browser = this.nav_ua.substring( i + k + 1, i + j );
			this.verBrowser = new cVersion( ua.substring( i + j + 1 ) );
		  }
	  }
	switch ( this.browser )
	  {
	  case 'Camino':
			this.setNewer( true, '1.6.10', '2.0' );
			break;
	  case 'Firefox':
			this.setNewer( true, '10.0' );
			break;
	  case 'Mozilla':
			this.isOld = true;
			this.isDanger = true;
			this.newer = 'SeaMonkey';
			break;
	  case 'Netscape':
	  case 'Netscape6':
			this.setNewer( this.osWin, '9.0.0.6' );
			this.isDead = true;
			break;
	  case 'SeaMonkey':
			this.setNewer( true, '2.7' );
			break;
	  }
  }
else if ( this.isNetscape )
  {
	if ( !this.isG )
		this.verBrowser = new cVersion( ua.substring(8+ua.indexOf('mozilla/')) );
	this.setNewer( this.osWin, '9.0.0.6' );
	this.isDead = true;
  }
else if ( this.isIE )
  {
	this.verBrowser = new cVersion( ua.substring(5+ua.indexOf('msie')) );
	if ( this.osWin )
	  {
		if ( this.verBrowser.comp('5.0') <= 0 )
			this.setNewer( true, '5.01', '6.0' );
		else if ( this.verBrowser.comp('5.5') == 0 )
			this.setNewer( true, '6.0' );
		else if ( this.verBrowser.comp('6') < 0 )
			this.setNewer( true, '5.01', '6.0' );
		else if ( ua.indexOf('sv1') != -1 )
			this.setNewer( true, '6.0', '7.0' );
		if ( this.verBrowser.comp('7.0') == 0 )
			this.setNewer( true, '7.0', '8.0' );
	  }
  }
else if ( this.isOpera )
  {
	if ( ua.indexOf('version/') != -1 )
		this.verBrowser = new cVersion( ua.substring(8+ua.indexOf('version/')) );
	else if ( ua.indexOf('opera/') == 0 )
		this.verBrowser = new cVersion( ua.substring(1+ua.indexOf('/')) );
	else if ( ua.indexOf('opera/') != -1 )
		this.verBrowser = new cVersion( ua.substring(2+ua.indexOf(')')) );
	else
		this.verBrowser = new cVersion( ua.substring(6+ua.indexOf('opera')) );
	if ( (ua.indexOf('opera mini') == -1) && (ua.indexOf('opera mobile')) )
		this.setNewer( this.osWin, '11.61' );
	else
		this.browser = 'Opera Mini';
	this.verEngine = this.verBrowser;
	var ix = ua.indexOf( 'presto/' );
	if ( ix >= 0 )
		this.verEngine = new cVersion( ua.substring(7+ix) );
  }
return;
}

cBrowserInfo.prototype.setNewer = function ( isOS, sSafest, sLatest )
{
var compare = 0;
if ( isOS ) for ( var i = 1; i < arguments.length; ++i )
  {
	var safest, latest;
	safest = arguments[i];
	if ( (i+1) == arguments.length )
		latest = arguments[i];
	else if ( this.comp( arguments[i], arguments[i+1] ) > 0 )
		latest = arguments[i];
	else
		latest = arguments[++i];
	compare = this.verBrowser.comp( latest );
	if ( compare > 0 )
		break;
	else if ( compare == 0 )
		this.isDanger = false;
	else
	  {
		this.isOld = true;
		this.newer = new cVersion( latest );
		this.isDanger = this.verBrowser.comp(safest) < 0;
	  }
  }
return( compare );
}

cBrowserInfo.prototype.comp = function ( v1, v2 )
{
var ver1 = new cVersion( v1 );
return( ver1.comp(v2) );
}

function myReportAnyBrowserUpdate ( sBrowserNews, oID )
{
var o = oID;
if ( typeof(oID) == 'string' )
	o = getElement( oID );
if ( o != null )
	o.innerHTML = myBrowserInfo.updateHTML( sBrowserNews );
}

cBrowserInfo.prototype.updateHTML = function ( sBrowserNews )
{
if ( typeof(this.dump) != 'undefined' )
	this.dump('ins_browserupdatedump');

var text = '';
var sHTML = '';
if ( this.browser != '?' )
	text = this.browser + ' ' + this.verBrowser.toString();
if ( this.isDanger || (this.newer != '0') || this.isOld )
  {
	sHTML += '<p class="sniffer">';
	if ( this.isDanger || this.isDead )
		sHTML += '<img src="' + sBrowserNews + 'img/ico_danger.png" width="31" height="31" alt="Danger" /><br />';
	else if ( this.isOld )
		sHTML += '<img src="' + sBrowserNews + 'img/ico_warn.png" width="31" height="31" alt="Warning" /><br />';
	else
		sHTML += '<img src="' + sBrowserNews + 'img/ico_info.png" width="31" height="31" alt="Note" /><br />';
	sHTML += 'Your browser';
	if ( text != '' )
		sHTML += ', ' + text + ',';
	if ( this.isDead )
	  {
		sHTML += ' is no longer supported. <a href="' + sBrowserNews + 'find.htm">You should use another browser.</a></small></p>\n';
	  }
	else
	  {
		sHTML += ' has bugs';
		if ( this.isDanger )
			sHTML += ' and is unsafe';
		else if ( this.isOld )
			sHTML += ' and may lack useful features';
		if ( this.newer instanceof cVersion )
			sHTML += '. You can get ' + this.newer.toString() + '. ';
		else if ( this.newer != '' )
			sHTML += '. It was replaced' + ( (this.newer == '0') ? '' :  ' by ' + this.newer ) + '. ';
		sHTML += '<br /><a href="' + sBrowserNews + 'find.htm">Find your new browser!</a></p>\n';
	  }
  }
return( sHTML );
}

var myBrowserInfo = new cBrowserInfo();



