/*
OTF_NOTF_winLoaded.js v0.3.7  by Eric Gerds

- This script, together with PluginDetect and getJavaInfo.jar, is capable of doing
both OTF and NOTF Java detection.

- NOTF detection can only be performed by this script if the PluginDetect script is
generated with the "NOTF" checkbox enabled.

- Java Detection is performed AFTER the browser window has loaded.

- Feel free to change this script, remove comments, etc... to fit your own needs.


USAGE:
1) Insert the PluginDetect script in the <head> of your HTML page:
<script type="text/javascript" src="PluginDetect.js"></script>

2) Insert the output <div> in the <body> of your HTML page. This div will receive the
plugin detection results:
<div id="javaresult"></div>

3) If you wish to use the plugindetect <div>, then place it wherever you wish in the
<body>. For example:
<div id="plugindetect" style="right:0px; top:0px; position:absolute;"></div>

4) Insert the OTF_NOTF_winLoaded.js script anywhere after the PluginDetect script
It does not matter too much where you place this script because it waits until the window
has loaded before doing any detection.

5) Get a copy of the "getJavaInfo.jar" jarfile and put it in the same folder as your
HTML page.

If you put the jarfile in a different directory than the HTML page, then
you must adjust the path of the jarfile.
The jarfile path is always relative to the web page.

For example, say your web page is at http://www.mysite.com/webpage.htm
and you have the jarfile at         http://www.mysite.com/stuff/getJavaInfo.jar
then jarfile = "stuff/getJavaInfo.jar"

If your web page is at      http://www.mysite.com/webpage.htm
and you have the jarfile at http://www.mysite.com/getJavaInfo.jar
then jarfile = "getJavaInfo.jar"


 */

// GLOBAL VARIABLES
var g_debugCheckJava = false; // Allows to activate debug.
var g_checkJava = false; // Indicates if detection is done.

var PD = PluginDetect;
var outputNode = 'javaresult'; // Id of output <div>. Detection results are placed in this div.
var minVersion = '1,4,2'; // minimum version of Java we are trying to detect

var g_javaIsActive = false; // Tells if Java isActive function is enable.
var g_javaInstalled = false; // Tells if Java is installed or not
var g_javaEnabled = false; // Tells if Java is enabled or not
var g_javaVersion = -1; // Highest installed version
var g_javaVersionUnknown = false; // Unknowed installed version
var g_javaVersionUnder142 = false; // Installed version is under 1,4,2
var g_completedOTF = false; // Detection is completed OTF
var g_completedNOTF = false; // Detection is completed NOTF
var g_toolkitDeployementInstalled = false; // Deployement toolkit installed
var g_plugin2Installed = false; // Plugin v2 installed.
var g_plugin2Unknown = false; // Unknown Plugin v2 state.
var g_vendor = "Unknown"; // g_vendor.
var g_pluginJavaName = "Unknown"; // Name of Java plugin.
var g_pluginJavaDescription = "Empty"; // Description of Java plugin.
var g_useTagObject = false; // Uses 'object' tag.
var g_useTagObjectWithProblem = false; // Uses 'object' tag with problem.
var g_useTagApplet = false; // Uses 'applet' tag.
var g_useTagAppletWithProblem = false; // Uses 'applet' tag with problem.
var g_activeXEnabled = false; // ActiveX enabled state.
var g_useActiveX = false; // Uses active X.
var g_succesWindowOnLoad = false; // Window onload state.
var g_arrVersion; // Array of version.

/**
 * Prints all detected infos.
 */
function printInfo()
{
    // -------------------------- DECLARE --------------------------//
    
    if (g_debugCheckJava == false)
    {
        return;
    }
    
    alert("g_javaInstalled : " + g_javaInstalled + "\n" +
        "g_javaEnabled : " + g_javaEnabled + "\n" +
        "g_javaVersion : " + g_javaVersion + "\n" +
        "g_javaVersionUnknown : " + g_javaVersionUnknown + "\n" +
        "g_javaVersionUnder142 : " + g_javaVersionUnder142 + "\n" +
        "g_completedOTF : " + g_completedOTF + "\n" +
        "g_completedNOTF : " + g_completedNOTF + "\n" +
        "g_toolkitDeployementInstalled : " + g_toolkitDeployementInstalled + "\n" +
        "g_plugin2Installed : " + g_plugin2Installed + "\n" +
        "g_plugin2Unknown : " + g_plugin2Unknown + "\n" +
        "g_vendor : " + g_vendor + "\n" +
        "g_pluginJavaName : " + g_pluginJavaName + "\n" +
        "g_pluginJavaDescription : " + g_pluginJavaDescription + "\n" +
        "g_useTagObject : " + g_useTagObject + "\n" +
        "g_useTagObjectWithProblem : " + g_useTagObjectWithProblem + "\n" +
        "g_useTagApplet : " + g_useTagApplet + "\n" +
        "g_useTagAppletWithProblem : " + g_useTagAppletWithProblem + "\n" +
        "g_activeXEnabled : " + g_activeXEnabled + "\n" +
        "g_useActiveX : " + g_useActiveX + "\n" +
        "g_succesWindowOnLoad : " + g_succesWindowOnLoad + "\n" +
        "g_arrVersion : " + g_arrVersion);
}

// The path of the jarfile is relative to the web page ( NOT relative to this
// external javascript file!!! ). Only the very first Java PluginDetect command that is executed
// needs to have the jarfile input argument. You do not have to specify this input arg in
// any subsequent Java PluginDetect commands.
var jarfile = 'null';

// If the verifyTags input argument is not specified or is null, then PluginDetect assumes
// a default value of [2,2,2]. Only the very first Java PluginDetect command
// would need to have the verifyTags input argument, if at all. You do not have to specify
// this input arg in any subsequent Java PluginDetect commands.
var verifyTags = null;

// If we use the beforeInstantiate method, then use it BEFORE any other PluginDetect method.
var F = function ()  {};
if (PD.beforeInstantiate)
    PD.beforeInstantiate('Java', F);

// This event handler sets the GLOBAL JAVA VARIABLES, and prints the results to the screen
function displayResults($)
{
    var JavaStatus;
    // -------------------------- DECLARE --------------------------//
    
    JavaStatus = $.isMinVersion('Java');
    g_javaInstalled = JavaStatus >= 0 ? true : false;
    g_javaVersion = $.getVersion('Java');
    
    g_javaVersionUnknown = false;
    // Java 'minVersion' or higher (using <applet> and/or <object> tag) is installed & enabled
    if (JavaStatus == 1)
    {
        g_javaInstalled = true;
        g_javaEnabled = true;
    }
    // Java installed & enabled but version is unknown
    else if (JavaStatus == 0)
    {
        g_javaInstalled = true;
        g_javaEnabled = true;
        g_javaVersionUnknown = true;
    }
    // Java installed but not enabled
    else if (JavaStatus == -0.2)
    {
        g_javaInstalled = true;
        g_javaEnabled = false;
    }
    else if (JavaStatus == -1)
    {
        g_javaVersionUnder142 = true;
        g_javaInstalled = false;
    }
    
    // Get extra info on the Java plugin.
    var INFO = $.getInfo ? $.getInfo('Java') : null;
    
    // Verify that INFO object has information
    if (INFO && typeof INFO.g_vendor != 'undefined')
    {
        // Java detection: completed ON THE FLY (OTF)
        if (INFO.OTF == 0)
        {
            g_completedOTF = true;
        }
        // Java detection: completed NOT ON THE FLY (NOTF)
        else if (INFO.OTF == 2)
        {
            g_completedNOTF = true;
        }
        else
        {
            // Java detection: not completed yet, requires NOTF detection
        }
        
        // Deployment Toolkit browser plugin installed & enabled
        g_toolkitDeployementInstalled = (INFO.DeploymentToolkitPlugin ? 'true' : 'false');
        
        // Next-Generation Java Plugin2 installed & enabled
        if (INFO.isPlugin2 == 1)
        {
            g_plugin2Installed = true;
            g_plugin2Unknown = false;
        }
        else if (INFO.isPlugin2 == -1)
        {
            g_plugin2Installed = false;
            g_plugin2Unknown = false;
        }
        else
        {
            g_plugin2Installed = false;
            g_plugin2Unknown = true;
        }
        
        // INFO.All_versions array lists ALL Java versions found from all sources
        // Multiple Java versions detected
        if (INFO.All_versions.length > 1)
        {
            g_arrVersion = INFO.All_versions.join(" & ");
        }
        
        // g_vendor.
        if (INFO.g_vendor.length > 0)
        {
            g_vendor = INFO.g_vendor;
        }
        
        // Data from navigator.plugins array
        // Java plugin name
        if (INFO.name.length > 0)
        {
            g_pluginJavaName = INFO.name;
        }
        
        // Java plugin description
        if (INFO.description.length > 0)
        {
            g_pluginJavaDescription = INFO.description;
        }
        
        // Java (using <object> tag) installed & enabled
        if (INFO.objectTag !== null)
        {
            if (INFO.objectTag >= 0)
            {
                g_useTagObject = true;
            }
            else
            {
                g_useTagObject = false;
            }
            
            g_useTagObjectWithProblem = false;
            // Javascript/Java bridge is disabled for this tag OR your jarfile path/name is incorrect
            if (INFO.objectTag == 0)
            {
                g_useTagObjectWithProblem = true;
            }
        }
        
        // Java (using <applet> tag) installed & enabled
        if (INFO.appletTag !== null)
        {
            if (INFO.appletTag >= 0)
            {
                g_useTagApplet = true;
            }
            else
            {
                g_useTagApplet = false;
            }
            
            g_useTagAppletWithProblem = false;
            // Javascript/Java bridge is disabled for this tag OR your jarfile path/name is incorrect
            if (INFO.appletTag == 0)
            {
                g_useTagAppletWithProblem = true;
            }
        }
        
        // For IE, you can also use the
        //  <object> tag with classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
        // to display a Java applet.
        // Java (using <object> tag with Sun Java ActiveX) installed & enabled
        g_useActiveX = false;
        if ($.isIE && INFO.objectTagActiveX !== null)
        {
            g_useActiveX = true;
            if (INFO.objectTagActiveX >= 0)
            {
                g_useTagObject = true;
            }
            else
            {
                g_useTagObject = false;
            }
            
            g_useTagObject = false;
            // Javascript/Java bridge is disabled for this tag OR your jarfile path/name is incorrect
            if (INFO.objectTagActiveX == 0)
            {
                g_useTagObject = true;
            }
        }
    };
    
    // Navigator enabled state.
    g_javaEnabled = navigator.javaEnabled();
    
    // ActiveX enabled state.
    g_activeXEnabled = false;
    if ($.isIE)
    {
        g_activeXEnabled = PD.ActiveXEnabled;
    }
    
    // Uses for debug.
    printInfo();
    
    // Indicates end of detection.
    g_checkJava = true;
    
}; // end of displayResults()


// Execute some function after the window has loaded
PD.onWindowLoaded(
    function ()
{
    // window.onload event has fired successfully
    g_succesWindowOnLoad = true;
    
    // Start Java plugin detection, using the jarfile if needed.
    // When Java detection has been completed, then run the displayResults() method.
    // The onDetectionDone('Java') method can handle both OTF and NOTF.
    //
    // onDetectionDone() == 1 means detection has completed (OTF)
    // == 0 means detection not completed yet (and thus NOTF detection is being performed)
    // == -1 means detection unable to proceed due to error
    PD.onDetectionDone('Java', displayResults, jarfile, verifyTags);
}
);

