// ---------------------------------------------------------------------------
// Pnet and Picnic
// Copyright (c) Apricon AB 2006
// Original filename: browser_check.js
// @author        Erik Schölander
// @created       2006-01-31
// @version       1.0.4
// @desc  
// JavaScript function browser_check(version) with ASP support.
// This function determines what browser and version is used. It also decides
// if the used browser is OK to use with Pnet or Picnic.
// To handle differences between Caradoc versions, set argument version to 'Pnet', 'C3', 'Pnet3' or 'Picnic'
// 
// The BrowserDetect object structure is copied from QuirksMode.org. See details below.
//
// Information is stored in the following variables:
//   browserName
//   browserVersion
//   browserStatus
//   osName
//   screenSize

// browserStatus can have the following values:
//   ok      *service* supports your browser.
//   bad     *service* does not support your browser
//   tol     browser works with some problems
//   tol6    browser works with some problems, special for IE 6.
//   tol7    browser works with some problems, special for IE 7.
//   tol9    browser works with some problems, special for IE 9.
//   unknown *service* has not been evaluated with your browser

// @usage  Shall be included in the head section of index.asp or any page where browser version is required.
//         You may set a variable called fakeUserAgent BEFORE loading this file, in order to simulate a different browser
//
// @change  2006-12-08  ESR  Support for IE7. Handles OS and screen size
// @change  2007-01-11  ESR  Support for Windows Vista
// @change  2007-02-27  ESR  Support for Firefox 2.0.
// @change  2008-06-30  ESR  Support for Firefox 3.0.
// @change  2008-11-25  ESR  Rewritten. Using BrowserDetect from QuirksMode. 
//                           Does no longer need browser_sniffer.js.
//                           Added version argument to browser_check.
// @change  2009-06-15  ESR  Added IE8 as OK. 
// @change  2009-08-20  ESR  browserStatus for IE6 set to tol6. 
// @change  2009-12-13  ESR  Detecting Windows 7 and mobile phones. 
// @change  2010-01-21  ESR  Status set for Chrome. 
// @change  2010-02-04  ESR  Firefox 3.6 approved
// @change  2010-09-07  ESR  Safari on Mac approved for C3 (Firefox disapproved)
// @change  2010-10-17  ESR  New status tol7 for IE7 on Apricon C3
// @change  2010-11-10  ESR  New status ok for Chrome on Pnet
// @change  2011-02-16  ESR  Bug fix for IE newer then ver 8
// @change  2011-02-16  ESR  Status bad for IE 9 with C3 and Picnic
// @change  2011-03-10  ESR  Status tol9 for IE 9 with C3
// @change  2011-03-16  ESR  Possible to set fakeUserAgent variable before loading this file
// @change  2011-03-16  ESR  Identifying iPad. Firefox 4 approved.
// @change  2011-06-16  ESR  Status ok for IE 9 as default, tol9 with Picnic
// @change  2011-06-22  ESR  Status ok for Firefox 5
// @change  2011-08-22  ESR  Status ok for Firefox 6
// @change  2011-08-26  ESR  Status bad for IE 6 in C3
// @change  2011-10-05  ESR  Status ok for Firefox 7
// @change  2011-11-09  ESR  Status ok for Firefox, all versions
// @--------------------------------------------------------------------------
var browserName='';
var browserVersion='';
var browserStatus='unknown';
var osName='';
var screenSize=screen.width+'x'+screen.height;

function browser_check(sysapp) {
	BrowserDetect.init();
	osName = BrowserDetect.OS;
	if(String(osName).indexOf('unknown')>-1) {osName = '[unknown system]'}
	
	browserName = BrowserDetect.browser;
	if(browserName=='Explorer') browserName = 'MS Internet Explorer';
	if(browserName=='Firefox') browserName = 'Mozilla Firefox';

	browserVersion = BrowserDetect.version;
	if(String(browserVersion).indexOf('unknown')>-1) {browserVersion = ''}
	var browserMajorVersion = parseInt(BrowserDetect.version);

	//Status for different browsers
	if(browserName=='MS Internet Explorer') {
		if(browserMajorVersion==7 || browserMajorVersion==8 || browserMajorVersion==9) {
			browserStatus='ok';
		}
		else if(browserMajorVersion==6) {
			browserStatus = 'tol6';
			more = '<%=GetText("BrowserMoreIE6")';
		}
		else if(browserMajorVersion<6) {
			browserStatus='bad';
		}
		else {
			browserStatus='unknown';
		}
	}
	else if(browserName=='Mozilla Firefox') {
		browserStatus='ok';
		//if(browserVersion>7) browserStatus='unknown';
	}
	else if(browserName=='Opera') {
		if(browserMajorVersion==8) browserStatus = 'tol';
	}
	else if(browserName=='Netscape') {
		if(browserMajorVersion==7) browserStatus = 'ok';
		if(browserMajorVersion<7) browserStatus = 'bad'
	}
	
	//Status for mobiles is unknown
	if(osName=='WindowsMobile' || osName=='Symbian' || osName=='Android' ||  osName=='iPhone/iPod') {
		browserStatus='unknown';
	}
	
	//Product-specific status settings
	if(sysapp) {
		var lsysapp = sysapp.toLowerCase();
		if(lsysapp=='pnet') {
			if(browserName=='Safari'||osName=='Mac OS X') {browserStatus = 'tol'}
			if(browserName=='Chrome') {browserStatus = 'ok'}
		
		}
		else if(lsysapp=='picnic') {
			if(browserName=='Chrome') {browserStatus = 'bad'}
			if(browserName=='MS Internet Explorer' && browserMajorVersion==9) {browserStatus = 'tol9'}

		}
		else if(lsysapp=='c3' || lsysapp=='pnet3') {
			if(browserName=='Chrome'&&osName=='Mac OS X') {browserStatus = 'bad'}
			if(browserName=='Mozilla Firefox'&&osName=='Mac OS X') {browserStatus = 'bad'}
			if(browserName=='Safari'&&osName=='Mac OS X') {browserStatus = 'ok'}
			if(browserName=='Chrome') {browserStatus = 'ok'}
			if(browserName=='MS Internet Explorer' && browserMajorVersion==7) {browserStatus = 'tol7'}
			if(browserName=='MS Internet Explorer' && browserMajorVersion==6) {browserStatus = 'bad'}
		
		}
	}
}

// 
// The code for BrowserDetect was snagged from http://www.quirksmode.org/js/detect.html
// on 2008-11-24 and 2009-12-12.
// When new versions are snagged, store them in D:\Pnet2\Program\js\browserDetect 
// for comparison.
// http://www.zytrax.com/tech/web/mobile_ids.html
//
// It was edited regarding:
// 2008-11-24  ESR  Detailed definition for different Windows versions
// 2008-12-13  ESR  Windows 7, mobile units
// 2011-03-16  ESR  Introducing the myUserAgent and fakeUserAgent variables
//
// New browsers and operating systems can be added to the dataBrowser and dataOS arrays.
// Note that the order in the arrays can be important. The first found substring is 
// the one that is valid. 
// Read more in the page linked above.
//
var myUserAgent = navigator.userAgent;
var myPlatform = navigator.platform;
try {         //use navigator.userAgent unless the calling page has already set the userAgent variable
	if(fakeUserAgent!=undefined) {var myUserAgent=fakeUserAgent; myPlatform='';}  
} catch(e) {}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(myUserAgent)
			|| 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: myUserAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: myUserAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: myUserAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: myUserAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: myUserAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: myUserAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: myUserAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: myUserAgent,
			subString: "Android",
			identity: "Android"
		},
		{
			string: myUserAgent,
			subString: "Symbian",
			identity: "Symbian"
		},
		{
			string: myUserAgent,
			subString: "Windows CE",
			identity: "WindowsMobile"
		},
		
		{
			string: myUserAgent,
			subString: "Windows NT 6.1",
			identity: "Windows 7"
		},
		{
			string: myUserAgent,
			subString: "Windows NT 6.0",
			identity: "Windows Vista"
		},
		{
			string: myUserAgent,
			subString: "Windows NT 5.2",
			identity: "Windows XP"
		},
		{
			string: myUserAgent,
			subString: "Windows NT 5.1",
			identity: "Windows XP"
		},
		{
			string: myUserAgent,
			subString: "Windows NT 5.0",
			identity: "Windows 2000"
		},
		{
			string: myUserAgent,
			subString: "Windows NT 4",
			identity: "Windows 2000"
		},
		{
			string: myPlatform,
			subString: "Win",
			identity: "Windows"
		},

		{
			   string: myUserAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			   string: myUserAgent,
			   subString: "iPad",
			   identity: "iPad"
	    },
		{
			string: myUserAgent,
			subString: "Mac OS X",
			identity: "Mac OS X"
		},
		{
			string: myPlatform,
			subString: "Mac",
			identity: "Mac OS"
		},
		{
			string: myPlatform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
