var deployJava = { debug: null, firefoxJavaVersion: null, myInterval: null, preInstallJREList: null, returnPage: null, brand: null, locale: null, installType: null, EAInstallEnabled: false, EarlyAccessURL: null, getJavaURL: 'http://java.sun.com/webapps/getjava/BrowserRedirect?host=java.com', appleRedirectPage: 'http://www.apple.com/support/downloads/', oldMimeType: 'application/npruntime-scriptable-plugin;DeploymentToolkit', mimeType: 'application/java-deployment-toolkit', launchButtonPNG: 'http://java.sun.com/products/jfc/tsc/articles/swing2d/webstart.png', browserName: null, browserName2: null, getJREs: function() { var list = new Array(); if (deployJava.isPluginInstalled()) { var plugin = deployJava.getPlugin(); var VMs = plugin.jvms; for (var i = 0; i < VMs.getLength(); i++) { list[i] = VMs.get(i).version; } } else { var browser = deployJava.getBrowser(); if (browser == 'MSIE') { if (deployJava.testUsingActiveX('1.7.0')) { list[0] = '1.7.0'; } else if (deployJava.testUsingActiveX('1.6.0')) { list[0] = '1.6.0'; } else if (deployJava.testUsingActiveX('1.5.0')) { list[0] = '1.5.0'; } else if (deployJava.testUsingActiveX('1.4.2')) { list[0] = '1.4.2'; } else if (deployJava.testForMSVM()) { list[0] = '1.1'; } } else if (browser == 'Netscape Family') { deployJava.getJPIVersionUsingMimeType(); if (deployJava.firefoxJavaVersion != null) { list[0] = deployJava.firefoxJavaVersion; } else if (deployJava.testUsingMimeTypes('1.7')) { list[0] = '1.7.0'; } else if (deployJava.testUsingMimeTypes('1.6')) { list[0] = '1.6.0'; } else if (deployJava.testUsingMimeTypes('1.5')) { list[0] = '1.5.0'; } else if (deployJava.testUsingMimeTypes('1.4.2')) { list[0] = '1.4.2'; } else if (deployJava.browserName2 == 'Safari') { if (deployJava.testUsingPluginsArray('1.7.0')) { list[0] = '1.7.0'; } else if (deployJava.testUsingPluginsArray('1.6')) { list[0] = '1.6.0'; } else if (deployJava.testUsingPluginsArray('1.5')) { list[0] = '1.5.0'; } else if (deployJava.testUsingPluginsArray('1.4.2')) { list[0] = '1.4.2'; } } } } if (deployJava.debug) { for (var i = 0; i < list.length; ++i) { alert('We claim to have detected Java SE ' + list[i]); } } return list; }, installJRE: function(requestVersion) { var ret = false; if (deployJava.isPluginInstalled()) { if (deployJava.getPlugin().installJRE(requestVersion)) { deployJava.refresh(); if (deployJava.returnPage != null) { document.location = deployJava.returnPage; } return true; } else { return false; } } else { return deployJava.installLatestJRE(); } }, installLatestJRE: function() { if (deployJava.isPluginInstalled()) { if (deployJava.getPlugin().installLatestJRE()) { deployJava.refresh(); if (deployJava.returnPage != null) { document.location = deployJava.returnPage; } return true; } else { return false; } } else { var browser = deployJava.getBrowser(); var platform = navigator.platform.toLowerCase(); if ((deployJava.EAInstallEnabled == 'true') && (platform.indexOf('win') != -1) && (deployJava.EarlyAccessURL != null)) { deployJava.preInstallJREList = deployJava.getJREs(); if (deployJava.returnPage != null) { deployJava.myInterval = setInterval("deployJava.poll()", 3000); } location.href = deployJava.EarlyAccessURL; return false; } else { if (browser == 'MSIE') { return deployJava.IEInstall(); } else if ((browser == 'Netscape Family') && (platform.indexOf('win32') != -1)) { return deployJava.FFInstall(); } else { location.href = deployJava.getJavaURL + ((deployJava.returnPage != null) ? ('&returnPage=' + deployJava.returnPage) : '') + ((deployJava.locale != null) ? ('&locale=' + deployJava.locale) : '') + ((deployJava.brand != null) ? ('&brand=' + deployJava.brand) : ''); } return false; } } }, runApplet: function(attributes, parameters, minimumVersion) { if (minimumVersion == 'undefined' || minimumVersion == null) { minimumVersion = '1.1'; } var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$"; var matchData = minimumVersion.match(regex); if (deployJava.returnPage == null) { deployJava.returnPage = document.location; } if (matchData != null) { var browser = deployJava.getBrowser(); if ((browser != '?') && ('Safari' != deployJava.browserName2)) { if (deployJava.versionCheck(minimumVersion + '+')) { deployJava.writeAppletTag(attributes, parameters); } else if (deployJava.installJRE(minimumVersion + '+')) { deployJava.refresh(); location.href = document.location; deployJava.writeAppletTag(attributes, parameters); } } else { deployJava.writeAppletTag(attributes, parameters); } } else { if (deployJava.debug) { alert('Invalid minimumVersion argument to runApplet():' + minimumVersion); } } }, writeAppletTag: function(attributes, parameters) { var s = '<' + 'applet '; var codeAttribute = false; for (var attribute in attributes) { s += (' ' + attribute + '="' + attributes[attribute] + '"'); if (attribute == 'code') { codeAttribute = true; } } if (!codeAttribute) { s += (' code="dummy"'); } s += '>'; document.write(s); if (parameters != 'undefined' && parameters != null) { var codebaseParam = false; for (var parameter in parameters) { if (parameter == 'codebase_lookup') { codebaseParam = true; } s = ''; document.write(s); } if (!codebaseParam) { document.write(''); } } document.write('<' + '/' + 'applet' + '>'); }, versionCheck: function(versionPattern) { var index = 0; var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$"; var matchData = versionPattern.match(regex); if (matchData != null) { var familyMatch = true; var patternArray = new Array(); for (var i = 1; i < matchData.length; ++i) { if ((typeof matchData[i] == 'string') && (matchData[i] != '')) { patternArray[index] = matchData[i]; index++; } } if (patternArray[patternArray.length - 1] == '+') { familyMatch = false; patternArray.length--; } else { if (patternArray[patternArray.length - 1] == '*') { patternArray.length--; } } var list = deployJava.getJREs(); for (var i = 0; i < list.length; ++i) { if (deployJava.compareVersionToPattern(list[i], patternArray, familyMatch)) { return true; } } return false; } else { alert('Invalid versionPattern passed to versionCheck: ' + versionPattern); return false; } }, isWebStartInstalled: function(minimumVersion) { var browser = deployJava.getBrowser(); if ((browser == '?') || ('Safari' == deployJava.browserName2)) { return true; } if (minimumVersion == 'undefined' || minimumVersion == null) { minimumVersion = '1.4.2'; } var retval = false; var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$"; var matchData = minimumVersion.match(regex); if (matchData != null) { retval = deployJava.versionCheck(minimumVersion + '+'); } else { if (deployJava.debug) { alert('Invalid minimumVersion argument to isWebStartInstalled(): ' + minimumVersion); } retval = deployJava.versionCheck('1.4.2+'); } return retval; }, getJPIVersionUsingMimeType: function() { for (var i = 0; i < navigator.mimeTypes.length; ++i) { var s = navigator.mimeTypes[i].type; var m = s.match(/^application\/x-java-applet;jpi-version=(.*)$/); if (m != null) { deployJava.firefoxJavaVersion = m[1]; if ('Opera' != deployJava.browserName2) { break; } } } }, launchWebStartApplication: function(jnlp) { return false; }, createWebStartLaunchButtonEx: function(jnlp, minimumVersion) { if (deployJava.returnPage == null) { deployJava.returnPage = jnlp; } var url = 'javascript:deployJava.launchWebStartApplication(\'' + jnlp + '\');'; document.write('<' + 'a href="' + url + '" onMouseOver="window.status=\'\'; ' + 'return true;"><' + 'img ' + 'src="' + deployJava.launchButtonPNG + '" ' + 'border="0" /><' + '/' + 'a' + '>'); }, createWebStartLaunchButton: function(jnlp, minimumVersion) { if (deployJava.returnPage == null) { deployJava.returnPage = jnlp; } var url = 'javascript:' + 'if (!deployJava.isWebStartInstalled("' + minimumVersion + '")) {' + 'if (deployJava.installLatestJRE()) {' + 'if (deployJava.launch("' + jnlp + '")) {}' + '}' + '} else {' + 'if (deployJava.launch("' + jnlp + '")) {}' + '}'; document.write('<' + 'a href="' + url + '" onMouseOver="window.status=\'\'; ' + 'return true;"><' + 'img ' + 'src="' + deployJava.launchButtonPNG + '" ' + 'border="0" /><' + '/' + 'a' + '>'); }, launch: function(jnlp) { document.location = jnlp; return true; }, isPluginInstalled: function() { var plugin = deployJava.getPlugin(); if (plugin && plugin.jvms) { return true; } else { return false; } }, isAutoUpdateEnabled: function() { if (deployJava.isPluginInstalled()) { return deployJava.getPlugin().isAutoUpdateEnabled(); } return false; }, setAutoUpdateEnabled: function() { if (deployJava.isPluginInstalled()) { return deployJava.getPlugin().setAutoUpdateEnabled(); } return false; }, setInstallerType: function(type) { deployJava.installType = type; if (deployJava.isPluginInstalled()) { return deployJava.getPlugin().setInstallerType(type); } return false; }, setAdditionalPackages: function(packageList) { if (deployJava.isPluginInstalled()) { return deployJava.getPlugin().setAdditionalPackages(packageList); } return false; }, setEarlyAccess: function(enabled) { deployJava.EAInstallEnabled = enabled; }, isPlugin2: function() { if (deployJava.isPluginInstalled()) { if (deployJava.versionCheck('1.6.0_10+')) { try { return deployJava.getPlugin().isPlugin2(); } catch (err) {} } } return false; }, allowPlugin: function() { deployJava.getBrowser(); var ret = ('Safari' != deployJava.browserName2 && 'Opera' != deployJava.browserName2); return ret; }, getPlugin: function() { deployJava.refresh(); var ret = null; if (deployJava.allowPlugin()) { ret = document.getElementById('deployJavaPlugin'); } return ret; }, compareVersionToPattern: function(version, patternArray, familyMatch) { var regex = "^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$"; var matchData = version.match(regex); if (matchData != null) { var index = 0; var result = new Array(); for (var i = 1; i < matchData.length; ++i) { if ((typeof matchData[i] == 'string') && (matchData[i] != '')) { result[index] = matchData[i]; index++; } } var l = Math.min(result.length, patternArray.length); if (familyMatch) { for (var i = 0; i < l; ++i) { if (result[i] != patternArray[i]) return false; } return true; } else { for (var i = 0; i < l; ++i) { if (result[i] < patternArray[i]) { return false; } else if (result[i] > patternArray[i]) { return true; } } return true; } } else { return false; } }, getBrowser: function() { if (deployJava.browserName == null) { var browser = navigator.userAgent.toLowerCase(); if (deployJava.debug) { alert('userAgent -> ' + browser); } if (browser.indexOf('msie') != -1) { deployJava.browserName = 'MSIE'; deployJava.browserName2 = 'MSIE'; } else if (browser.indexOf('firefox') != -1) { deployJava.browserName = 'Netscape Family'; deployJava.browserName2 = 'Firefox'; } else if (browser.indexOf('chrome') != -1) { deployJava.browserName = 'Netscape Family'; deployJava.browserName2 = 'Chrome'; } else if (browser.indexOf('safari') != -1) { deployJava.browserName = 'Netscape Family'; deployJava.browserName2 = 'Safari'; } else if (browser.indexOf('mozilla') != -1) { deployJava.browserName = 'Netscape Family'; deployJava.browserName2 = 'Other'; } else if (browser.indexOf('opera') != -1) { deployJava.browserName = 'Netscape Family'; deployJava.browserName2 = 'Opera'; } else { deployJava.browserName = '?'; deployJava.browserName2 = 'unknown'; } if (deployJava.debug) { alert('Detected browser name:' + deployJava.browserName + ', ' + deployJava.browserName2); } } return deployJava.browserName; }, testUsingActiveX: function(version) { var objectName = 'JavaWebStart.isInstalled.' + version + '.0'; if (!ActiveXObject) { if (deployJava.debug) { alert('Browser claims to be IE, but no ActiveXObject object?'); } return false; } try { return (new ActiveXObject(objectName) != null); } catch (exception) { return false; } }, testForMSVM: function() { var clsid = '{08B0E5C0-4FCB-11CF-AAA5-00401C608500}'; if (typeof oClientCaps != 'undefined') { var v = oClientCaps.getComponentVersion(clsid, "ComponentID"); if ((v == '') || (v == '5,0,5000,0')) { return false; } else { return true; } } else { return false; } }, testUsingMimeTypes: function(version) { if (!navigator.mimeTypes) { if (deployJava.debug) { alert('Browser claims to be Netscape family, but no mimeTypes[] array?'); } return false; } for (var i = 0; i < navigator.mimeTypes.length; ++i) { s = navigator.mimeTypes[i].type; var m = s.match(/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/); if (m != null) { if (deployJava.compareVersions(m[1], version)) { return true; } } } return false; }, testUsingPluginsArray: function(version) { if ((!navigator.plugins) || (!navigator.plugins.length)) { return false; } var platform = navigator.platform.toLowerCase(); for (var i = 0; i < navigator.plugins.length; ++i) { s = navigator.plugins[i].description; if (s.search(/^Java Switchable Plug-in (Cocoa)/) != -1) { if (deployJava.compareVersions("1.5.0", version)) { return true; } } else if (s.search(/^Java/) != -1) { if (platform.indexOf('win') != -1) { if (deployJava.compareVersions("1.5.0", version) || deployJava.compareVersions("1.6.0", version)) { return true; } } } } if (deployJava.compareVersions("1.5.0", version)) { return true; } return false; }, IEInstall: function() { location.href = deployJava.getJavaURL + ((deployJava.returnPage != null) ? ('&returnPage=' + deployJava.returnPage) : '') + ((deployJava.locale != null) ? ('&locale=' + deployJava.locale) : '') + ((deployJava.brand != null) ? ('&brand=' + deployJava.brand) : '') + ((deployJava.installType != null) ? ('&type=' + deployJava.installType) : ''); return false; }, done: function(name, result) {}, FFInstall: function() { location.href = deployJava.getJavaURL + ((deployJava.returnPage != null) ? ('&returnPage=' + deployJava.returnPage) : '') + ((deployJava.locale != null) ? ('&locale=' + deployJava.locale) : '') + ((deployJava.brand != null) ? ('&brand=' + deployJava.brand) : '') + ((deployJava.installType != null) ? ('&type=' + deployJava.installType) : ''); return false; }, compareVersions: function(installed, required) { var a = installed.split('.'); var b = required.split('.'); for (var i = 0; i < a.length; ++i) { a[i] = Number(a[i]); } for (var i = 0; i < b.length; ++i) { b[i] = Number(b[i]); } if (a.length == 2) { a[2] = 0; } if (a[0] > b[0]) return true; if (a[0] < b[0]) return false; if (a[1] > b[1]) return true; if (a[1] < b[1]) return false; if (a[2] > b[2]) return true; if (a[2] < b[2]) return false; return true; }, enableAlerts: function() { deployJava.browserName = null; deployJava.debug = true; }, poll: function() { deployJava.refresh(); var postInstallJREList = deployJava.getJREs(); if ((deployJava.preInstallJREList.length == 0) && (postInstallJREList.length != 0)) { clearInterval(deployJava.myInterval); if (deployJava.returnPage != null) { location.href = deployJava.returnPage; }; } if ((deployJava.preInstallJREList.length != 0) && (postInstallJREList.length != 0) && (deployJava.preInstallJREList[0] != postInstallJREList[0])) { clearInterval(deployJava.myInterval); if (deployJava.returnPage != null) { location.href = deployJava.returnPage; } } }, writePluginTag: function() { var browser = deployJava.getBrowser(); if (browser == 'MSIE') { document.write('<' + 'object classid="clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA" ' + 'id="deployJavaPlugin" width="0" height="0">' + '<' + '/' + 'object' + '>'); } else if (browser == 'Netscape Family' && deployJava.allowPlugin()) { deployJava.writeEmbedTag(); } }, refresh: function() { navigator.plugins.refresh(false); var browser = deployJava.getBrowser(); if (browser == 'Netscape Family' && deployJava.allowPlugin()) { var plugin = document.getElementById('deployJavaPlugin'); if (plugin == null) { deployJava.writeEmbedTag(); } } }, writeEmbedTag: function() { var written = false; if (navigator.mimeTypes != null) { for (var i = 0; i < navigator.mimeTypes.length; i++) { if (navigator.mimeTypes[i].type == deployJava.mimeType) { if (navigator.mimeTypes[i].enabledPlugin) { document.write('<' + 'embed id="deployJavaPlugin" type="' + deployJava.mimeType + '" hidden="true" />'); written = true; } } } if (!written) for (var i = 0; i < navigator.mimeTypes.length; i++) { if (navigator.mimeTypes[i].type == deployJava.oldMimeType) { if (navigator.mimeTypes[i].enabledPlugin) { document.write('<' + 'embed id="deployJavaPlugin" type="' + deployJava.oldMimeType + '" hidden="true" />'); } } } } }, do_initialize: function() { deployJava.writePluginTag(); if (deployJava.locale == null) { var loc = null; if (loc == null) try { loc = navigator.userLanguage; } catch (err) {} if (loc == null) try { loc = navigator.systemLanguage; } catch (err) {} if (loc == null) try { loc = navigator.language; } catch (err) {} if (loc != null) { loc.replace("-", "_") deployJava.locale = loc; } } } }; deployJava.do_initialize();