/*  Browserdetect, version 0.1
 *  (c) 2008 upstruct berlin oslo
 *
 *  For details, see the upstruct garage web site: http://garage.upstruct.com/
 *
 *--------------------------------------------------------------------------*/

/*
Based on BrowserDetect from http://www.quirksmode.org/js/detect.html written by Peter-Paul Koch.
Flash Player Version Detection based on Adobe Macromedia Softwares Flash Player Version Detection - Rev 1.6
Quicktime detection by Geoff Stearns at www.deconcept.com
*/

var Browserdetect = {
	init: function () {
		this.browser = this.browserCheck();
		this.os = this.searchString(this.dataOS) || "Unknown";
		this.screen = this.screenCheck();
		this.cookie = this.cookieCheck();
		this.acrobat = this.acrobatCheck();
		this.flash = this.flashCheck();
		this.quicktime = this.quicktimeCheck();
		this.language = (navigator["language"])?navigator["language"]:navigator["userLanguage"];
	},
	
	check: function(params){
		var result = true;

		if(params.browser != undefined){
			var tmp_result = false;
			var browsers = params.browser.split(',');
			for(var i=0; i<browsers.length; i++){
				var tmp = browsers[i].strip().split(' ');
				if(tmp[0] == this.browser.name){
					if(tmp[1] != undefined){
						if(tmp[1].indexOf('+') > 0){
							if(parseFloat(tmp[1].sub(/\+/,'')) < parseFloat(this.browser.version))
								tmp_result = true;
						} else {
							if(parseFloat(tmp[1]) == parseFloat(this.browser.version))
								tmp_result = true;
						}
					} else {
						tmp_result = true;
					}
				}
			}
			if(!tmp_result)
				result = false;
		}

		if(params.os != undefined){
			os = params.os.split(',');
			if(os.indexOf(this.os) == -1)
				result = false;
		}
		
		if(params.flash != undefined){
			if(params.flash.installed != undefined){
				if(params.flash.installed == true && this.flash.installed != true)
					return false;
				if(params.flash.installed == false && this.flash.installed == true)
					return false;
			}
		
			if(params.flash.version != undefined){			
				if(params.flash.version.indexOf('+') > 0){
					if(parseFloat(this.flash.version) < params.flash.version.sub(/\+/,''))
						result = false;
				} else {
					if(parseFloat(this.flash.version) != params.flash.version)
						result = false;
				}
			}
		}
		
		if(params.acrobat != undefined){
			if(params.acrobat.installed != undefined){
				if(params.acrobat.installed == true && this.acrobat.installed != true)
					return false;
				if(params.acrobat.installed == false && this.acrobat.installed == true)
					return false;
			}

			if(params.acrobat.version != undefined){			
				if(params.acrobat.version.indexOf('+') > 0){
					if(parseFloat(this.acrobat.version) < params.acrobat.version.sub(/\+/,''))
						result = false;
				} else {
					if(parseFloat(this.acrobat.version) < params.acrobat.version)
						result = false;
				}
			}
		}
		
		if(params.cookie != undefined){
			if(params.cookie == true && this.cookie != true)
				return false;
			if(params.cookie == false && this.cookie == true)
				return false;
		}
		
		if(params.screen != undefined){
			if(params.screen.width != undefined){
				if(params.screen.width > this.screen.width)
					return false;
			}
			if(params.screen.height != undefined){
				if(params.screen.height > this.screen.height)
					return false;
			}					
		}
		
		return result;
	},
	
	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));
		
	},
	
	browserCheck: function(){
		
		var browser = new Object();
		browser.name = this.searchString(this.dataBrowser) || "Unknown";
		browser.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		return browser;
	},
	
	screenCheck: function(){
		
		var monitor = new Object();
		monitor.width = (screen.width) ? screen.width:false;
		monitor.height = (screen.height) ? screen.height:false;
		return monitor;
		
	},
	
	cookieCheck: function(){
	
		expires ='';
		this.cookieSet('cobweb_browserdetect','true', expires,'','','' );
		if (this.cookieGet('cobweb_browserdetect' ) ) {
			this.cookieDelete('cobweb_browserdetect','','');
			return true;
		} else {
			return false;
		}
		
	},
	cookieSet: function(name, value, expires, path, domain, secure){
		
		var today = new Date();
		today.setTime( today.getTime() );
		if ( expires ){
			expires = expires * 1000 * 60 * 60 * 24;
		}
		var expires_date = new Date( today.getTime() + (expires) );
		document.cookie = name + "=" +escape( value ) +
			( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
			( ( path ) ? ";path=" + path : "" ) + 
			( ( domain ) ? ";domain=" + domain : "" ) +
			( ( secure ) ? ";secure" : "" );
			
	},
	cookieGet: function(name){
		
		var start = document.cookie.indexOf( name + "=" );
		var len = start + name.length + 1;
		if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ){
			return null;
		}
		if ( start == -1 ) return null;
		var end = document.cookie.indexOf( ";", len );
		if ( end == -1 ) end = document.cookie.length;
		return unescape( document.cookie.substring( len, end ) );
		
	},
	cookieDelete: function(name, path, domain){
		
		if ( this.cookieGet( name ) ) document.cookie = name + "=" +
				( ( path ) ? ";path=" + path : "") +
				( ( domain ) ? ";domain=" + domain : "" ) +
				";expires=Thu, 01-Jan-1970 00:00:01 GMT";
				
	},
	
	flashCheck: function(){
				
		var flash = new Object();
		flash.installed = false;
		flash.version = false;
		if(this.flashVersion()){
			flash.installed = true;
			flash.version = this.flashVersion();			
		}
		
		return flash;
		
	},
	
	flashVersion: function(){

		var flashVer = false;

		var isIE    = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
		var isWin   = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
		var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

		if (navigator.plugins != null && navigator.plugins.length > 0) {
			if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
				var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
				var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
				var descArray = flashDescription.split(" ");
				var tempArrayMajor = descArray[2].split(".");
				var versionMajor = tempArrayMajor[0];
				var versionMinor = tempArrayMajor[1];
				var versionRevision = descArray[3];
				if (versionRevision == "") {
					versionRevision = descArray[4];
				}
				if (versionRevision[0] == "d") {
					versionRevision = versionRevision.substring(1);
				} else if (versionRevision[0] == "r") {
					versionRevision = versionRevision.substring(1);
					if (versionRevision.indexOf("d") > 0) {
						versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
					}
				}
				var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
			}
		}
		else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
		else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
		else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
		/* Make sure WIN  */
		else if ( isIE && isWin && !isOpera ) {			
			var version;
			var axo;
			var e;
			try {
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
				version = axo.GetVariable("$version");
			} catch (e) { }
			if (!version){
				try {
					axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
					version = "WIN 6,0,21,0";
					axo.AllowScriptAccess = "always";
					version = axo.GetVariable("$version");
				} catch (e) { }
			}
			if (!version){
				try {
					axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
					version = axo.GetVariable("$version");
				} catch (e) { }
			}
			if (!version){
				try {
					axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
					version = "WIN 3,0,18,0";
				} catch (e) { }
			}
			if (!version){
				try {
					axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
					version = "WIN 2,0,0,11";
				} catch (e) {
					version = false;
				}
			}
			version = version.sub('WIN','');
			flashVer = version;
		}
		return flashVer;
		
	},
	
	quicktimeCheck: function(){
		
		var quicktime = new Object();
	
		quicktime.installed = false;
		qtObj = false;
		if (navigator.plugins && navigator.plugins.length) {
			for (var i=0; i < navigator.plugins.length; i++ ) {
	        	var plugin = navigator.plugins[i];
	        	if (plugin.name.indexOf("QuickTime") > -1) {
					quicktime.installed = true;
	         	}
	    	}
		} else {
			execScript('on error resume next: qtObj = IsObject(CreateObject("QuickTimeCheckObject.QuickTimeCheck.1"))','VBScript');
			quicktime.installed = qtObj;
		}
		return quicktime;
		
	},
		
	acrobatCheck: function(){

		var acrobat = new Object();
		acrobat.installed = false;
		acrobat.version = false;
		if (navigator.plugins && navigator.plugins.length){
			for ( var x = 0, l = navigator.plugins.length; x < l; ++x ){
				if (navigator.plugins[x].description.indexOf('Adobe Acrobat') != -1) {
					acrobat.version=parseFloat(navigator.plugins[x].description.split('Version ')[1]);
					if (acrobat.version.toString().length == 1) acrobat.version+='.0';
					acrobat.installed=true;
					break;
				}
			}
		}else if (window.ActiveXObject) {
			for (x=2; x<10; x++){
				try{
					oAcro=eval("new ActiveXObject('PDF.PdfCtrl."+x+"');");
					if (oAcro) {
						acrobat.installed=true;
						acrobat.version=x+'.0';
					}
				}catch(e) {}
			}
			try {
				oAcro4=new ActiveXObject('PDF.PdfCtrl.1');
				if (oAcro4){
					acrobat.installed=true;
					acrobat.version='4.0';
				}
			}catch(e) {}
			try{
				oAcro7=new ActiveXObject('AcroPDF.PDF.1');
				if (oAcro7){
					acrobat.installed=true;
					acrobat.version='7.0';
				}
			}catch(e) {}
		};
		return acrobat;
		
	},
	
	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: "iPhone",
			identity: "iPhone"
		},
		{
			string: navigator.platform,
			subString: "iPod",
			identity: "iPod"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

Browserdetect.init();