/** Load JVM and get java version */

CheckJVM = {
	logger: log4js.getLogger("CheckJVM"),
	noJavaCallback: null,
	
	check: function() {
	
		// check if java is here
		var javaVersion = null;
		
		// TODO upgrade detection on PluginDectect unsupported OS / Browser
		
		if (navigator.userAgent.indexOf('Safari') >=0 ) {
			// Can't detect java version on Safari
			// We suppose we have a minimum java version of 1.5.0
			// True on Macosx (1.5 is installed by default), but not on Windows
			javaVersion = '1,5,0,01';
		} else {

			javaVersion = PluginDetect.getVersion("Java");

			// Old version : display a warning panel explainning that a better version of java is recommended
			if(javaVersion != null && PluginDetect.isMinVersion('Java','1,5,0')<0) {
				CheckJVM.checkJavaScript();
				
				// Java plugin detected
				logger.info("JVM version : "+javaVersion);
			
				CheckJVM.onOldJavaVersion(javaVersion);
				
				return null;
			}
		}

		if (javaVersion == null) {
			// No java plugin detected
			
			CheckJVM.checkJavaScript();
			
			
			if (navigator.javaEnabled()) {
				// Display an error panel explaining that java is needed
				logger.warn("No Java plugin detected.");
				CheckJVM.onNoJava();
			} else {
				// Display an error panel explaining that java has to be activated
				logger.warn("Java plugin not enabled.");
				CheckJVM.onJavaNotEnabled();
			}
			
			return null;
		} 
			
		// Java plugin detected
		logger.info("JVM version : "+javaVersion);
		
		// TODO add unsupported version
		CheckJVM.checkJavaScript();
		
		return javaVersion;
	},
	
	checkJavaScript: function() {
		var systemInfo = "javaEnabled()="+navigator.javaEnabled();
		for (prop in navigator) {
			var newProp = null;
			
			if (typeof(navigator[prop]) == "function") {
				if (prop != "javaEnabled") {
					try {
						newProp = prop+"()="+navigator[prop].call(navigator);
					} catch (e) {}
				}
			} else if (typeof(navigator[prop]) != "object") {
				newProp = prop + "=" + navigator[prop];
			}
			
			if (newProp!=null) {
				systemInfo += ","+newProp;
			}
		}
		CheckJVM.logger.info("Javascript system info : {"+systemInfo+"}");
	},
	
	javaVersionWarning: function(version) {
		var oldJavaContainer = $('oldJavaWarningContainer');
		
		if(!oldJavaContainer) {
			CheckJVM.logger.error('Cannot find oldJavaWarningContainer');
		} else {
			oldJavaContainer.show();
		}
	},

	onNoJava: function () {
	},

	onJavaNotEnabled: function () {
	},
	
	onOldJavaVersion: function() {
	}
}

