/*
 * Copyright (c) 2010 Macrofocus GmbH. All Rights Reserved.
 */
var deployJava = {debug: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',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.8.0')) {
                list[0] = '1.8.0';
            } else 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') {
            if (deployJava.testUsingMimeTypes('1.8')) {
                list[0] = '1.8.0';
            } 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 (browser == 'Safari') {
            if (deployJava.testUsingPluginsArray('1.8.0')) {
                list[0] = '1.8.0';
            } else if (deployJava.testUsingPluginsArray('1.7.0')) {
                list[0] = '1.7.0';
            } else if (deployJava.testUsingPluginsArray('1.6.0')) {
                list[0] = '1.6.0';
            } else if (deployJava.testUsingPluginsArray('1.5.0')) {
                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 != '?') && (browser != 'Safari')) {
            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 ';
    for (var attribute in attributes) {
        s += (' ' + attribute + '="' + attributes[attribute] + '"');
    }
    s += '>';
    document.write(s);
    if (parameters != 'undefined' && parameters != null) {
        var codebaseParam = false;
        for (var parameter in parameters) {
            if (parameter == 'codebase_lookup') {
                codebaseParam = true;
            }
            s = '<param name="' + parameter + '" value="' +
                parameters[parameter] + '">';
            document.write(s);
        }
        if (!codebaseParam) {
            document.write('<param name="codebase_lookup" value="false">');
        }
    }
    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 == '?') || (browser == 'Safari')) {
        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;
},createWebStartLaunchButton:function(jnlp, minimumVersion) {
    if (deployJava.returnPage == null) {
        deployJava.returnPage = jnlp;
    }
    var url = 'javascript:' + 'if (!deployJava.isWebStartInstalled(&quot;' +
              minimumVersion + '&quot;)) {' + 'if (deployJava.installLatestJRE()) {' + 'if (deployJava.launch(&quot;' + jnlp + '&quot;)) {}' + '}' + '} else {' + 'if (deployJava.launch(&quot;' + jnlp + '&quot;)) {}' + '}';
    document.write('<' + 'a href="' + url + '" onMouseOver="window.status=\'\'; ' + 'return true;"><' + 'img ' + 'src="' + deployJava.launchButtonPNG + '" ' + 'border="0" /><' + '/' + 'a' + '>');
},launch:function(jnlp) {
    if (deployJava.isPluginInstalled()) {
        return deployJava.getPlugin().launch(jnlp);
    } else {
        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;
},getPlugin:function() {
    deployJava.refresh();
    var 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() {
    var browser = navigator.userAgent.toLowerCase();
    if (deployJava.debug) {
        alert('userAgent -> ' + browser);
    }
    if ((navigator.vendor) && (navigator.vendor.toLowerCase().indexOf('apple') != -1) && (browser.indexOf('safari') != -1)) {
        if (deployJava.debug) {
            alert('We claim to have detected "Safari".');
        }
        return'Safari';
    } else if (browser.indexOf('msie') != -1) {
        if (deployJava.debug) {
            alert('We claim to have detected "IE".');
        }
        return'MSIE';
    } else if ((browser.indexOf('mozilla') != -1) || (browser.indexOf('firefox') != -1)) {
        if (deployJava.debug) {
            alert('We claim to have detected a Netscape family browser.');
        }
        return'Netscape Family';
    } else {
        if (deployJava.debug) {
            alert('We claim to have failed to detect a browser.');
        }
        return'?';
    }
},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.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.writeEmbedTag();
    }
},refresh:function() {
    navigator.plugins.refresh(false);
    var browser = deployJava.getBrowser();
    if (browser == 'Netscape Family') {
        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();

