function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++) {
      elements.push($(arguments[i]));
  	}
    return elements;
  }
  if (typeof element == 'string') {
    element = document.getElementById(element);
  }
  return element;
}

function djs_BrowserChecker() {}

var vbFlashVersion='',vbAcroReadVersions='';

djs_BrowserChecker.prototype = {
	Version : '1.0.0',
	
	INTERNETEXPLORER : 'ie',
	IE : 'ie',
	FIREFOX : 'ff',
	FF : 'ff',
	SAFARI : 'sa',
	KONQUEROR : 'ko',
	OPERA : 'op',
	GECKO : 'gk',
	
	OS_WINDOWS : 'ms',
	OS_LINUX : 'li',
	OS_UNIX : 'ux',
	OS_MAC : 'ap',
	OS_APPLE : 'ap',
	
	checkOptions : {},
	initialized : false,
	
	downloadFieldText : '',
	downloadFieldState : '',
	downloadImageSize : 0,
	downloadStart : 0,
	imageDownload : null,
	clientIpFields : [],
	localeFields : [],
	
	init : function(opt) {
		this.checkOptions = opt;
	},
	run : function() {
		this.initialized = true;
		if (!this.checkLocation()) {
			window.setTimeout("BrowserCheck.run()", 1000);
		} else {
			if (this.checkOptions && this.checkOptions.ContentTags) {
				var cur, iTag, cTag, cFnc, checkState;
				for (var i = 0; i < this.checkOptions.ContentTags.length; i++) {
					cur = this.checkOptions.ContentTags[i];
					iTag = cur[0];
					cTag = cur[2];
					cFnc = cur[1];
					
					if (cFnc == 'getLocaleInfo') {
						var ajax1 = new Ajax();
						ajax1.request('BrowserChecker.php?type=loc', 'getLocaleInfo');
						this.localeFields = [iTag, cTag];
						
					} else if (cFnc == 'getClientIpInfo') {
						var ajax2 = new Ajax();
						ajax2.request('BrowserChecker.php?type=ip', 'getClientIpInfo');
						this.clientIpFields = [iTag, cTag];
					
					} else if (cFnc == 'checkDownloadRate') {
						args = null;
						if (cur.length >= 4) { args = cur[3]; }
						this.downloadFieldText = iTag;
						this.downloadFieldState = cTag;
						this.checkDownloadRate(args);
					
					} else if (this[cFnc] && this[cFnc + 'Check']) {
						args = null;
						if (cur.length >= 4) { args = cur[3]; }
						checkState = this[cFnc + 'Check'](args);
						if ($(iTag)) {
							$(iTag).innerHTML = this[cFnc](args);
						}
						if (checkState && $(cTag)) {
							$(cTag).innerHTML = '<span class="checkSuccess">OK</span>';
						} else if ($(cTag)) {
							$(cTag).innerHTML = '<span class="checkFailed">failed</span>';
						}
					}
				}
			}
		}
		this.appendSignature();
	},
	
	checkLocation : function() {
		if (is_win && is_ie) {
			if (window.location.search.indexOf('jre_version') > -1) {
				return true;
			} return false;
		}
		return true;
	},
	
	getCookieState : function() {
		return navigator.cookieEnabled;
	},
	getLanguage : function() {
		return navigator.language;
	},
	
	
	getOperatingSystem : function() {
		return navigator.platform;
	},
	getOperatingSystemCheck : function() {
		return true;
	},
	
	javaAvailable : function() {
		return navigator.javaEnabled();
	},
	
	getBrowserStringCheck : function() {
		return true;
	},
	getBrowserString : function() {
		return navigator.userAgent;
	},
	
	getBrowserVersionCheck : function() {
		return true;
	},
	getBrowserVersion : function() {
		return is_major;
	},
	
	checkJavascript : function() {
		return 'Enabled (ver. ' + is_js + ')';
	},
	checkJavascriptCheck : function() {
		return true;
	},
	
	checkPopupBlocker : function() {
		if (is_opera) {
			return 'We can\'t check on Opera';
		}
		return 'Popups allowed';
	},
	checkPopupBlockerCheck : function() {
		if (!is_opera) {
			var popupBlockerWindows = window.open('about:blank', 'popupCheck', 'top=0,left=0,width=0,height=0');
			if (popupBlockerWindows) {
				popupBlockerWindows.close();
				return true;
			}
		}
		return false;
	},
	
	
	getLocaleInfo : function(info) {
		var iTag = this.localeFields[0];
		var cTag = this.localeFields[1];
		if ( (info.length > 0) && $(iTag)) {
			$(iTag).innerHTML = info;
		}
		if ( (info.length > 0) && $(cTag)) {
			$(cTag).innerHTML = '<span class="checkSuccess">OK</span>';
		}
	},
	
	getClientIpInfo : function(info) {
		var iTag = this.clientIpFields[0];
		var cTag = this.clientIpFields[1];
		if ( (info.length > 0) && $(iTag)) {
			$(iTag).innerHTML = 'Client-IP: ' + info;
		}
		if ( (info.length > 0) && $(cTag)) {
			$(cTag).innerHTML = '<span class="checkSuccess">OK</span>';
		}
	},
	
	checkAdobePDFPlugin : function(ver) {
		if (typeof ver == 'undefined' || ver == null || parseInt(ver) <= 0) {
			if (is_ie && is_win) {
				var info = this.getIEPDFInformations();
			} else {
				var info = this.getPDFInformations();
			}
			if (info && (info.length == 2)) {
				return info[0] + ' ' + info[1];
			} else {
				return 'failed';
			}
		} else {
			return "Adobe Acrobat " + parseInt(ver) + ".0";
		}
	},
	checkAdobePDFPluginCheck : function(ver) {
		if (is_ie && is_win) {
			var info = this.getIEPDFInformations();
		} else {
			var info = this.getPDFInformations();
		}
		if (typeof ver == 'undefined' || ver == null || parseInt(ver) <= 0) {
			if (info && (info.length == 2)) {
				return true;
			}
		} else {
			if (info && (info.length == 2)) {
				var chk = parseInt(info[1].toLowerCase().replace(/adobe acrobat /, ""));
				ver = parseInt(ver);
				if (isNaN(chk)) chk = ver;
				if (ver <= chk) {
					return true;
				}
			}
		}
		return false;
	},
	getPDFInformations : function() {
		var name, descr, ver, back = [];
		var plg = navigator.plugins;
		for (var i = 0; i < plg.length; i++) {
			if (plg[i].name.toLowerCase().indexOf('acrobat') >= 0) { back[0] = plg[i].name; back[1] = plg[i].description; break; }
		}
		return back;
	},
	getIEPDFInformations : function() {
		var back = [], obj = null;
		try { obj = new ActiveXObject('AcroPDF.PDF.1'); vbAcroReadVersions = obj.getVersions(); obj = null; } catch(e) { }
		if (vbAcroReadVersions.indexOf('Accessibility=') >= 0) {
			var pos = vbAcroReadVersions.indexOf('Accessibility=');
			back[0] = 'Adobe Acrobat';
			back[1] = vbAcroReadVersions.substring(pos + 14, vbAcroReadVersions.indexOf(',', pos));
		}
		return back;
	},
	
	checkJavaVersion : function(ver) {
		if (typeof ver == 'undefined' || ver == null) {
			var version='', vendor='';
			if ((is_ie || is_opera) && is_win) {
				var p = location.search.substring(1).replace(/\+/g, ' ');
				var match = p.match(/(\w+)=([^&]+)/gi);
				var cur, name, value;
				for (var i = 0; i < match.length; i++) {
					cur = match[i];
					name = cur.substring(0, cur.indexOf('='));
					value = cur.substring(name.length + 1);
					if (name == 'jre_version') {
						version = value;
					} else if (name == 'vendor') {
						vendor = value;
					}
					if (version != '' && vendor != '') {
						break;
					}
				}
				return vendor + ' JRE-' + version;
			} else {
				var plg;
				for (var i = 0; i < navigator.plugins.length; i++) {
					plg = navigator.plugins[i];
					if (plg.name.toLowerCase().indexOf('java') >= 0) {
						return plg.name;
						break;
					}
				}
			}
		} else {
			return "Sun Microsystems Inc. JRE-" + ver;
		}
	},
	checkJavaVersionCheck : function(ver) {
		var version='', vendor='';
		if ((is_ie || is_opera) && is_win) {
			var p = location.search.substring(1).replace(/\+/g, ' ');
			var match = p.match(/(\w+)=([^&]+)/gi);
			var cur, name, value;
			for (var i = 0; i < match.length; i++) {
				cur = match[i];
				name = cur.substring(0, cur.indexOf('='));
				value = cur.substring(name.length + 1);
				if (name == 'jre_version') {
					version = value;
				} else if (name == 'vendor') {
					vendor = value;
				}
				if ((version != '') && (vendor != '')) {
					break;
				}
			}
		} else {
			var plg;
			for (var i = 0; i < navigator.plugins.length; i++) {
				plg = navigator.plugins[i];
				if (plg.name.toLowerCase().indexOf('java') >= 0) {
					version = plg.description;
					vendor = plg.name;
					break;
				}
			}
		}
		if ( (typeof ver != 'undefined' && ver != null) && (version != '' && vendor != '') ) {
			/(\d+\.\d+)/.exec(version);
			version = RegExp.$1;
			return (ver <= version);
		}
		return ((version != '') && (vendor != ''));
	},
	
	checkFlashPlugin : function(ver) {
		if (typeof ver == 'undefined' || ver == null || parseInt(ver) <= 0) {
			if (is_ie && is_win) {
				var info = this.getIEFlashInformations();
			} else {
				var info = this.getFlashInformations();
			}
			if (info && (info.length == 2)) {
				return info[0] + ' ' + info[1];
			} else {
				return 'failed';
			}
		} else {
			return "Shockwave Flash " + parseInt(ver) + ".0";
		}
	},
	checkFlashPluginCheck : function(ver) {
		if (is_ie && is_win) {
			var info = this.getIEFlashInformations();
		} else {
			var info = this.getFlashInformations();
		}
		if (typeof ver == 'undefined' || ver == null || parseInt(ver) <= 0) {
			if (info && (info.length == 2)) {
				return true;
			}
		} else {
			if (info && (info.length == 2)) {
				var chk = parseInt(info[1].toLowerCase().replace(/shockwave flash /, ""));
				ver = parseInt(ver);
				if (ver <= chk) {
					return true;
				}
			}
		}
		return false;
	},
	getFlashInformations : function() {
		var name, descr, ver, back = [];
		var plg = navigator.plugins;
		for (var i = 0; i < plg.length; i++) {
			if (plg[i].name.toLowerCase().indexOf('shockwave flash') >= 0) { back[0] = plg[i].name; back[1] = plg[i].description; break; }
		}
		return back;
	},
	getIEFlashInformations : function() {
		var back = [], obj = null;
		try { obj = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); vbFlashVersion = obj.GetVariable('$version'); obj = null; } catch(e) {alert(e.message);}
		if (vbFlashVersion.length > 0) {
			vbFlashVersion = vbFlashVersion.replace(/WIN /, '').replace(/,/g, '.');
			back[0] = 'Shockwave Flash';
			back[1] = vbFlashVersion;
		}
		return back;
	},
	
	checkOperatingSystem : function() {
		var back = '';
		if (this.checkOptions.OperatingSystem) {
			var oslist = this.checkOptions.OperatingSystem;
			for (var i = 0; i < oslist.length; i++) {
				if (back.length > 0) {
					back += '<br/>';
				}
				back += this.getRealOSName(oslist[i][0]) + ' ';
				switch (oslist[i][2].toLowerCase()) {
					case 'le': back += '<='; break;
					case '<=': back += '<='; break;
					case 'lt': back += '<'; break;
					case '<':  back += '<'; break;
					case 'ge': back += '>='; break;
					case '>=': back += '>='; break;
					case 'gt': back += '>'; break;
					case '<':  back += '>'; break;
					case 'eq': back += '='; break;
					case '=':  back += '='; break;
					case 'ne': back += '<>'; break;
					case '!=': back += '<>'; break;
					case '<>': back += '<>'; break;
				}
				back += ' ' + oslist[i][1];
			}
		}
		return back;
	},
	getRealOSName : function(s) {
		if (typeof s == 'undefined') return 'unknown';
		switch (s.toLowerCase()) {
			case 'ms': return 'Microsoft Windows'; break;
			case 'li': return 'Linux'; break;
			case 'ux': return 'Unix'; break;
			case 'ap': return 'Apple Macintosh'; break;
		}
	},
	checkOperatingSystemCheck : function() {
		if (this.checkOptions.OperatingSystem) {
			var oslist = this.checkOptions.OperatingSystem;
			for (var i = 0; i < oslist.length; i++) {
				if (this.doCheckOperatingSystem(oslist[i][0], oslist[i][1], oslist[i][2]) ) {
					return true;
				}
			}
		}
		return false;
	},
	
	checkBrowser : function() {
		var back = '';
		if (this.checkOptions.Browser) {
			var browsers = this.checkOptions.Browser;
			for (var i = 0; i < browsers.length; i++) {
				if (back.length > 0) {
					back += '<br/>';
				}
				back += this.getRealBrowserName(browsers[i][0]) + ' ';
				switch (browsers[i][2].toLowerCase()) {
					case 'le': back += '<='; break;
					case '<=': back += '<='; break;
					case 'lt': back += '<';  break;
					case '<':  back += '<';  break;
					case 'ge': back += '>='; break;
					case '>=': back += '>='; break;
					case 'gt': back += '>';  break;
					case '<':  back += '>';  break;
					case 'eq': back += '=';  break;
					case '=':  back += '=';  break;
					case 'ne': back += '<>'; break;
					case '!=': back += '<>'; break;
					case '<>': back += '<>'; break;
				}
				back += ' ' + browsers[i][1];
			}
		}
		return back;
	},
	checkBrowserCheck : function() {
		if (this.checkOptions.Browser) {
			var browsers = this.checkOptions.Browser;
			for (var i = 0; i < browsers.length; i++) {
				if (this.doCheckBrowser(browsers[i][0], browsers[i][1], browsers[i][2]) ) {
					return true;
				}
			}
		}
		return false;
	},
	getRealBrowserName : function(s) {
		switch (s.toLowerCase()) {
			case 'ff': return 'Firefox'; break;
			case 'ie': return 'Internet Explorer'; break;
			case 'sa': return 'Safari'; break;
			case 'ko': return 'Konqueror'; break;
			case 'op': return 'Opera'; break;
			case 'gk': return 'Gecko'; break;
		}
	},
	
	doCheckBrowser : function(browser, version, expr) {
		var valid = false;
		if (version.indexOf('.') > 0) {
			/(\d+\.\d+)/.exec(version);
		} else {
			/(\d+)/.exec(version);
		}
		version = RegExp.$1;
		switch(browser) {
			case this.IE:
				valid = (is_ie && this.browserVersionMatch(version, expr));
				break;
			
			case this.FF:
				valid = (is_firefox && this.browserVersionMatch(version, expr));
				break;
			
			case this.SAFARI:
				valid = (is_safari && this.browserVersionMatch(version, expr));
				break;
			
			case this.KONQUEROR:
				valid = (is_konqueror && this.browserVersionMatch(version, expr));
				break;
			
			case this.OPERA:
				valid = (is_opera && this.browserVersionMatch(version, expr));
				break;
			
			case this.GECKO:
				valid = (is_geko && this.browserVersionMatch(version, expr));
				break;
		}
		return valid;
	},
	
	doCheckOperatingSystem : function(os, version, expr) {
		var valid = false;
		switch (os) {
			case this.OS_WINDOWS:
				valid = (is_win && this.windowsVersionMatch(version, expr));
				break;
			
			case this.OS_LINUX:
				valid = (is_linux && this.linuxVersionMatch(version, expr));
				break;
			
			case this.OS_MAC:
				/(\d+\.\d+)/.exec(version);
				version = RegExp.$1;
				valid = (is_mac && this.appleVersionMatch(version, expr));
				break;
		}
		return valid;
	},
	
	browserVersionMatch : function(version, expr) {
		var valid = false;
		switch (expr.toLowerCase()) {
			case 'le': if (is_version <= version) valid = true; break;
			case '<=': if (is_version <= version) valid = true; break;
			case 'lt': if (is_version <  version) valid = true; break;
			case '<':  if (is_version <  version) valid = true; break;
			case 'ge': if (is_version >= version) valid = true; break;
			case '>=': if (is_version >= version) valid = true; break;
			case 'gt': if (is_version >  version) valid = true; break;
			case '<':  if (is_version >  version) valid = true; break;
			case 'eq': if (is_version == version) valid = true; break;
			case '=':  if (is_version == version) valid = true; break;
			case 'ne': if (is_version != version) valid = true; break;
			case '!=': if (is_version != version) valid = true; break;
			case '<>': if (is_version != version) valid = true; break;
		}
		return valid;
	},
	
	linuxVersionMatch : function(version, expr) {
		var osver = this.getOperatingSystem().replace(/Linux i/, '');
		version = version.substring(1);
		var valid = false;
		switch (expr.toLowerCase()) {
			case 'le': if (osver <= version) valid = true; break;
			case '<=': if (osver <= version) valid = true; break;
			case 'lt': if (osver <  version) valid = true; break;
			case '<':  if (osver <  version) valid = true; break;
			case 'ge': if (osver >= version) valid = true; break;
			case '>=': if (osver >= version) valid = true; break;
			case 'gt': if (osver >  version) valid = true; break;
			case '<':  if (osver >  version) valid = true; break;
			case 'eq': if (osver == version) valid = true; break;
			case '=':  if (osver == version) valid = true; break;
			case 'ne': if (osver != version) valid = true; break;
			case '!=': if (osver != version) valid = true; break;
			case '<>': if (osver != version) valid = true; break;
		}
		return valid;
	},
	windowsVersionMatch : function(version, expr) {
		var osver;
		if (is_winvista) osver = 6;
		else if (is_winxp) osver = 5;
		else if (is_win2k) osver = 4;
		else if (is_winme) osver = 3;
		else if (is_winnt) osver = 2;
		else if (is_win98) osver = 1;
		else if (is_win95) osver = 0;
		else oxver = -1;
		
		switch (version) {
			case 'vista': version = 6; break;
			case 'xp': version = 5; break;
			case '2k': version = 4; break;
			case 'me': version = 3; break;
			case 'nt': version = 2; break;
			case '98': version = 1; break;
			case '95': version = 0; break;
		}
		
		var valid = false;
		switch (expr.toLowerCase()) {
			case 'le': if (osver <= version) valid = true; break;
			case '<=': if (osver <= version) valid = true; break;
			case 'lt': if (osver <  version) valid = true; break;
			case '<':  if (osver <  version) valid = true; break;
			case 'ge': if (osver >= version) valid = true; break;
			case '>=': if (osver >= version) valid = true; break;
			case 'gt': if (osver >  version) valid = true; break;
			case '<':  if (osver >  version) valid = true; break;
			case 'eq': if (osver == version) valid = true; break;
			case '=':  if (osver == version) valid = true; break;
			case 'ne': if (osver != version) valid = true; break;
			case '!=': if (osver != version) valid = true; break;
			case '<>': if (osver != version) valid = true; break;
		}
		return valid;
	},
	appleVersionMatch : function(version, expr) {
		var osver = this.getOperatingSystem().toLowerCase().replace(/win/, '');
		version = version.toLowerCase().replace(/win/, '');
		var valid = false;
		switch (expr.toLowerCase()) {
			case 'le': if (osver <= version) valid = true; break;
			case '<=': if (osver <= version) valid = true; break;
			case 'lt': if (osver <  version) valid = true; break;
			case '<':  if (osver <  version) valid = true; break;
			case 'ge': if (osver >= version) valid = true; break;
			case '>=': if (osver >= version) valid = true; break;
			case 'gt': if (osver >  version) valid = true; break;
			case '<':  if (osver >  version) valid = true; break;
			case 'eq': if (osver == version) valid = true; break;
			case '=':  if (osver == version) valid = true; break;
			case 'ne': if (osver != version) valid = true; break;
			case '!=': if (osver != version) valid = true; break;
			case '<>': if (osver != version) valid = true; break;
		}
		return valid;
	},
	
	checkDownloadRate : function(size) {
		if ($(this.downloadFieldText)) {
			$(this.downloadFieldText).innerHTML = 'loading...';
		}
		if ($(this.downloadFieldState)) {
			$(this.downloadFieldState).innerHTML = '<span class="checkFailed">CALC</span>';
		}
		this.downloadImageSize = size;
		this.loadImage();
	},
	
	loadImage : function() {
		this.downloadStart = new Date();
		this.imageDownload = new Image();
		this.imageDownload.onload = function() {BrowserCheck.appendDownloadRate();};
		this.imageDownload.src = 'images/DownloadSpeedCheck.jpg?time=' + this.downloadStart.getTime();
	},
	
	appendDownloadRate : function() {
		var date = new Date();
		var duration = date.getTime() - this.downloadStart;
		var rate = Math.round(this.downloadImageSize * 1000 / duration);
		var rateDescr = 'Byte/s';
		if (rate > 1024) {
			rate = Math.round(rate/1024);
			rateDescr = 'KByte/s';
		}
		if ($(this.downloadFieldText)) {
			$(this.downloadFieldText).innerHTML = 'Calculated Downloadrate: ' + rate + ' ' + rateDescr;
		}
		if ($(this.downloadFieldState)) {
			$(this.downloadFieldState).innerHTML = '<span class="checkSuccess">OK</span>';
		}
	},
	
	sendMail : function(subject, text, to) {
		var args = this.checkOptions.NotifyInformations;
		var tags = this.checkOptions.ContentTags;
		var textBody = '', tDescr, tState;
		var to = '';
		var subject = 'BrowserChecker-Notification';
		var params = [], pos, i;
		
		if (args[0] && (args[0].length > 0)) to = args[0];
		if (args[1] && (args[1].length > 0)) subject = args[1];
		if (args[2] && (args[2].length > 0)) params = args[2].split(',');
		
		if (0) {
		        textBody += 'Submitted Userfields:'; 
			for (i = 0; i < params.length; i++) {
				textBody += "\n    " + params[i] + ": ";
				if (location.search.indexOf(params[i] + '=') > 0) {
					pos = location.search.indexOf(params[i] + '=');
					textBody += location.search.substring(pos + params[i].length + 1, (location.search.indexOf('&', pos)>-1?location.search.indexOf('&', pos):location.search.length));
				} 
			} 
			textBody += "";
		}
		
		for (i = 0; i < tags.length; i++) {
			
			tDescr = 'failed';
			if ($(tags[i][0])) {
				tDescr = $(tags[i][0]).innerHTML.replace(/\<br\>/gi, "\n    ").replace(/\&lt;/gi, '<').replace(/\&gt;/gi, '>');
				if (i==1 || i==5 || i==6 || i == 11) { tDescr = '';  }			
			}
			tState = '';
			if ($(tags[i][2])) {
				tState = $(tags[i][2]).firstChild.innerHTML;
			}
			switch (tags[i][1]) {
				case 'getBrowserString':     textBody += 'Client-Browser'; break;
				case 'getLocaleInfo':        textBody += 'Charset/Language'; break;
				case 'getClientIpInfo':      textBody += 'IP/Hostname'; break;
				case 'getOperatingSystem':   textBody += 'Client-Operating-System'; break;
				
				case 'checkFlashPlugin':     if (tags[i][3]){textBody += 'Flash-Plugin installed';}  break;  // incl. version
				case 'checkJavaVersion':     if (tags[i][3]){textBody += 'Java Runtime installed';}   break;  // incl. version
				case 'checkJavascript':      textBody += 'Javascript'; break;
				case 'checkDownloadRate':    textBody += 'DownloadRate'; break;
				case 'checkAdobePDFPlugin':  if (tags[i][3]){textBody += 'Adobe PDF Reader installed';} break;  // incl. version
				case 'checkPopupBlocker':    textBody += 'Popups allowed'; break;
				default: textBody += ''; break;
			}
			
			if (!(tDescr == "")) { textBody += ": " +  tDescr + "\n\n" }
		}
		window.location.href = 'mailto:' + to + '?Subject=' + subject + '&Body=' + escape(textBody);
	},
	
	appendSignature : function() {
		var div = document.createElement('div');
		var col = 'rgb(220,220,220)';
		div.style.padding = '10px 5px 0px 0px';
		div.style.textAlign = 'right';
		div.style.color = col;
		div.innerHTML = ' ';
		div = document.getElementsByTagName('body')[0].appendChild(div);
	},

	last: null
};

function Ajax() {}
Ajax.prototype = {
	transporter : false,
	callAfterFunction : '',
	
	getTransport: function() {
		var trans = false;
		try { trans = new XMLHttpRequest(); } catch(e) {
			try { trans = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {
				try { trans = new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {
					trans = false;
				}
			}
		}
		return trans;
	},
	
	request : function(url, func) {
		var obj = this;
		this.callAfterFunction = func;
		this.transporter = this.getTransport();
		this.transporter.onreadystatechange = function(){obj.stateChange()};
		this.transporter.open('GET', url, true);
		this.transporter.send(null);
	},
	
	stateChange : function() {
		if (this.transporter.readyState == 4) {
			if (this.transporter.status == 200) {
				try {BrowserCheck[this.callAfterFunction](this.transporter.responseText);}catch(e){};
			} else {
				try {BrowserCheck[this.callAfterFunction]('Failure while check');}catch(e){};
			}
		}
	}
}


var BrowserCheck = new djs_BrowserChecker();

if ( (window.location.search.indexOf('jre_version') == -1) && (is_ie || is_opera) && is_win ) {
	if (BrowserCheck.javaAvailable()) {
		function javaChecker() {
			if (BrowserCheck.initialized) {
				var javaCheck = '<object id="JavaJRECheck" alt="Test JRE Applet" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="250" height="75">' +
				                '<param name="type" value="application/x-java-applet" />' +
				                '<param name="codebase" value="data/" />' +
				                '<param name="code" value="jreCheck.class" />' +
				                '<param name="jumpto" value="index.html' + (location.search.length > 0 ? location.search+'&' : '?') + '" />' +
				                '<param name="pause" value="2000" />' +
				                '<embed type="application/x-java-applet" code="jreCheck.class" codebase="data/" width="1" height="2" jumpto="index.html' + (location.search.length > 0 ? location.search+'&' : '?') + '" pause="2000" />' +
				                '</object>';
				var test = document.createElement('div');
				test.setAttribute('id', 'javaCheckApplet');
				test.innerHTML = javaCheck
				document.getElementsByTagName('body')[0].appendChild(test);
				window.setTimeout('location.href = "index.html' + (location.search.length > 0 ? location.search+'&' : '?') + 'jre_version=none"', 5000);
			} else {
				window.setTimeout('javaChecker()', 10);
			}
		}
		javaChecker();
	} else {
		location.href = "index.html?jre_version=none";
	}
}
