function isDriverLoaded( mimeType )
{
    var sbExists = false;
    var minVersion = 1;
    var maxVersion = 20; // Needs to be changed if we ever get past 20 versions.
    var currentVersion = 1;
    var itsMimeType = "";

    if( arguments.length > 1 )
	    minVersion = arguments[1];

    if( typeof navigator.mimeTypes != "undefined" && navigator.mimeTypes && typeof navigator.mimeTypes[mimeType] != "undefined" && navigator.mimeTypes[mimeType] )
    {
        if( minVersion > 1 )
        {
            for( var i = minVersion; i < maxVersion; i++ )
            {
                itsMimeType = mimeType + "-" + i.toString(10);
                if( typeof navigator.mimeTypes[itsMimeType] != "undefined" && navigator.mimeTypes[itsMimeType] )
                {
                    sbExists = true;
                    break;
                }
            }
        }
        else
            sbExists = true;
    }

    if( !sbExists )
    {
		var detectObject = null;
		try
		{
		    var mimeTypeCheck = mimeType.toLowerCase();
		    
		    if( mimeTypeCheck == "application/x-its-audio" )  
			    detectObject = new ActiveXObject("ITSAB.ABDetectInstall");
		    else if( mimeTypeCheck == "application/x-its-music" )  
			    detectObject = new ActiveXObject("ITSMB.MBDetectInstall");
		    else if( mimeTypeCheck == "application/x-its-inventor-10" || mimeTypeCheck == "application/x-its-autodesk")  
			    detectObject = new ActiveXObject("AutodeskApps.ADDetectInstall");
		    else if( mimeTypeCheck == "application/x-its-autodesk07")  
			    detectObject = new ActiveXObject("Autodesk2007Apps.ADDetectInstall");
		    else if( mimeTypeCheck == "application/x-its-abd" )  
			    detectObject = new ActiveXObject("ABDITE.DetectInstall");
		    else if( mimeTypeCheck == "application/x-its-mcatcomm" )  
			    detectObject = new ActiveXObject("MCATCOMM.DetectInstall");
		    else // The default security engine
			    detectObject = new ActiveXObject("ITSSB.SBDetectInstall");
			
			if( (typeof detectObject != "undefined") && (detectObject != null) && (typeof detectObject.Installed != "undefined") && detectObject.Installed )
			{
			    if( (typeof detectObject.Version != "undefined") && detectObject.Version )
                    currentVersion = detectObject.Version;
			    
                if( currentVersion >= minVersion )
                    sbExists = true;
			}
			
			detectObject = null;
		}
		catch(ex) {}
	}
    return sbExists;
}


function installDriver( installServer, mimeType )
{
    var installName = '';
    var confirmMessage = '';

    // Get optional variables    
    if( arguments.length > 2 )
	    installName = arguments[2];
    if( arguments.length > 3 )
	    confirmMessage = arguments[3];
    
    if( installName == null || installName.length == 0 )
        installName = 'secure browser';    

    if( confirmMessage == null || confirmMessage.length == 0 )
        confirmMessage = 'The ' + installName + ' is currently not installed on your system\n or does not meet the minimum version required.\r\n\r\nClick OK to install the ' + installName + ' now, or click cancel.';

	if( confirm( confirmMessage ) )
	{
	    if( installServer.substring( (installServer.length - 1), 1 ) == '/' )
		    window.location.assign( (installServer + 'Drivers/InstallDriver.aspx?mime=' + mimeType) );
        else
            window.location.assign( (installServer + '/Drivers/InstallDriver.aspx?mime=' + mimeType) );
	}
}

function runTest( testUrl, installServer, mimeType )
{
    var minVersion = 1;
    var installName = '';
    var confirmMessage = '';

    // Get optional variables    
    if( arguments.length > 3 )
	    minVersion = arguments[3];
    if( arguments.length > 4 )
	    installName = arguments[4];
    if( arguments.length > 5 )
	    confirmMessage = arguments[5];

	if( !isDriverLoaded( mimeType, minVersion ) )
	{
		installDriver( installServer, mimeType, installName, confirmMessage );
	}
	else 
	{
		window.location.replace( testUrl );
		return true;
	}
    
    return false;
}
