
PwVersion="3,0,1,2";       // this is the current version of the PrivateWire java
                           // installation for explorer only.

// This function should be called at Init to verify that the browser supports
// the necessary activities.


function isJavaAvailable()
{
	return (navigator.javaEnabled());
}

function PWstartDownloadJar(minVersion)
{
	var trigger = netscape.softupdate.Trigger;
	var vi = new netscape.softupdate.VersionInfo(3,0,1,2);

	installed_version = netscape.softupdate.Trigger.GetVersionInfo("java/download/arl/pw"); 

	if ((installed_version == null)|| (installed_version.compareTo(vi) < 0))
    {
        return trigger.ConditionalSoftwareUpdate(
                NonSecureSite+"/Ijpw.jar",
                "/java/download/arl/pw",
                vi,
                trigger.DEFAULT_MODE);
    }
	return true;
}

function PWLoadSmartUpdate()
{
	if ( netscape.softupdate.Trigger.UpdateEnabled() ) 
	{
		Lrc = PWstartDownloadJar(0);
		if (Lrc)
		{
			return PW_SUCCESS;
        }
        else
		{
			return PW_GENERAL_ERROR;
        }
    }
	else 
	{
        return PW_SMART_NOT_INIT;
	}
    return PW_GENERAL_ERROR;
}

function PWJInit()
{
	var rc;

	browsername=navigator.appName;
	browserversion=navigator.appVersion;
	browserPlatform=navigator.platform;

	if ((browserPlatform == "Win32")||(browserPlatform.indexOf("Linux") != -1))
	{
		if (browsername.indexOf("Netscape")!=-1)
		{
			if ((browserversion.indexOf("4.5") != -1) ||
				(browserversion.indexOf("4.6") != -1) ||
				(browserversion.indexOf("4.7") != -1) ||
				(browserversion.indexOf("5.") != -1) ||
				(browserversion.indexOf("6.") != -1) ||
				(browserversion.indexOf("7.") != -1) ||
				(browserversion.indexOf("8.") != -1))
				rc = PWBuildErrStr(PW_SUCCESS);
			else
			{
				rc = PWBuildErrStr(PW_NETSCAPE_BROWSER_VERSION);
			}
		}
		else
		{
			if (browsername.indexOf("Microsoft")!=-1)
			{
				if ((browserversion.indexOf("4.") != -1) ||
					(browserversion.indexOf("5.") != -1) ||
					(browserversion.indexOf("6.") != -1))
				{
					rc = PWBuildErrStr(PW_SUCCESS);
				}
				else
				{
					rc = PWBuildErrStr(PW_EXPLORER_BROWSER_VERSION);
				}
			}
			else
			{
				rc = PWBuildErrStr(PW_BROWSER_NOT_SUPPORTED);
			}
		}
	}
	else
	{
		rc = PWBuildErrStr(PW_BROWSER_NOT_SUPPORTED);
	}

    if (PWIsSuccess(rc))
    {
		if (isJavaAvailable())
		{
			//Load smart update for netscape browser.
            if (browsername.indexOf("Netscape")!=-1)
			{
				Lrc = PWLoadSmartUpdate();
				rc = PWBuildErrStr(Lrc);
			}
			else
			{
				rc = PWBuildErrStr(PW_SUCCESS);
			}			
		}
		else
		{
		   rc = PWBuildErrStr(PW_BROWSER_JAVA);
		}
	}
    return rc;
}

function IsAppletReady(a)
{
    return a.isActive()
}

// this routine change the password of the given media
function PWJChangePassword(
                Applet,
                MediaKind,
                MediaPath,
                Password1,
                Password2)
{
    var rc;

    if (!IsAppletReady(Applet))
    {
        rc = PWBuildErrStr(PW_APPLET_NOT_READY);
        return rc;
    }

    // calling the java applet for change password
    rc=Applet.changePassword(MediaKind,MediaPath,Password1,Password2);
    return rc;
}

// convenience function - no applet param
function PWJChangePassword1(
                MediaKind,
                MediaPath,
                Password1,
                Password2)
{

    return PWJChangePassword(document.SlimCli,MediaKind,MediaPath,Password1,Password2);

}

// this routine calls to perform authentication through PW Gateway
function PWJAuthenticate(
                   Applet,
                   MediaKind,
                   MediaPath,
                   Password)
{
	var rc;

	if (!IsAppletReady(Applet))
	{
	    rc = PWBuildErrStr(PW_APPLET_NOT_READY);
	    return rc;
	}

	// calling the java applet to change password
	rc=Applet.performKX(MediaKind,MediaPath,Password);
	return rc;
}

// get the name and id and the cerifier id.
function GetCertStr (Applet)
{
	var rc;
	rc = Applet.GetCerticateStr();
	return rc;
}

// convenience function - no applet param
function PWJAuthenticate1(
                   MediaKind,
                   MediaPath,
                   Password)
{

    return PWJAuthenticate(document.SlimCli,MediaKind,MediaPath,Password);

}

// this routine enables proxy connection through which a full authentication
// will be activated

function PWJAuthProxy(
                Applet,
                MediaKind,
                MediaPath,
                Password)
{

    var rc;

    if (!IsAppletReady(Applet))
    {
        rc = PWBuildErrStr(PW_APPLET_NOT_READY);
        return rc;
    }

    // this call might need to be changed if the name of the
    // frame including the java applet is different.
    rc=Applet.performProxy(MediaKind,MediaPath,Password);
    return rc;

}

// convenience function - no applet param
function PWJAuthProxy1(
                MediaKind,
                MediaPath,
                Password)
{
    return PWJAuthProxy(
            document.SlimCli,
            MediaKind,
            MediaPath,
            Password);

}

// this function calls to generate a key
function PWGenerate(
                Applet,
                UserId,
                UserName,
                MediaKind,
                MediaPath,
                Password,
                WithCert
                )
{
    var rc;


    if (!IsAppletReady(Applet))
    {
        rc = PWBuildErrStr(PW_APPLET_NOT_READY);
        return rc;
    }

    rc = Applet.generateKey(
                       1024,
                       UserId,
                       UserName,
                       MediaKind,
                       Password,
                       MediaPath,
                       WithCert
                    );
    return rc;

}

// convenience function - no applet param
function PWGenerate1(
                UserId,
                UserName,
                MediaKind,
                MediaPath,
                Password,
                WithCert
                )
{
    return PWGenerate(
            document.SlimCli,
            UserId,
            UserName,
            mediaKind,
            MediaPath,
            Password,
            WithCert);
}


// This function is a callback, which is called by the java applet in cases
// when there is an error during authentication while connecting from the
// browser.

function MyAlert(MessageText)
{
    alert(PWErrC2Str(1,MessageText));
}

function MyShowDoc(TheURL)
{

    width = screen.width;
    height = screen.height-120;
    // disabling the location bar
    features = 'toolbar=yes,location=yes,directories=no,status=yes,menubar=no,' +
               'scrollbars=yes,resizable=yes,top=0,left=0,width='
               +width+',height='+height;
    dlg = window.open (TheURL,"_blank",features)
}

// replace specific character(t) in the data (s) to another specific character(u)
function replace(s, t, u)
{
  /*
   **  Replace a token in a string
   **    s  string to be processed
   **    t  token to be found and removed
   **    u  token to be inserted
   **  returns new String
   */
   i = s.indexOf(t);
   r = "";
   if (i == -1) return s;
   r += s.substring(0,i) + u;
   if ( i + t.length < s.length)
      r += replace(s.substring(i + t.length, s.length), t, u);
   return r;
}


// return the data to be signed
function BuildTbs(form,field1,field2)
{
    var OutStr;
    InBound=false;
    OutStr="";
    if (field1=="")
    {
        InBound = true;
    }
    for (var i=0;i < form.length; i++)
    {
        if (form.elements[i].name==field2)
        {
            InBound =false;
        }

        if (InBound)
        {
            if (form.elements[i].type=="select-one")
            {
                TheValue=form.elements[i].options[form.elements[i].selectedIndex].value;
		    TheValue1 = replace(TheValue," ","+");
	 	    OutStr = OutStr + "&" + form.elements[i].name + "=" + escape(TheValue1);
            }
		else if (form.elements[i].type=="radio" || form.elements[i].type=="checkbox")
		{
		   if (form.elements[i].checked)
		   {
		  	 TheValue=form.elements[i].value;
			 TheValue1 = replace(TheValue," ","+");
		 	 OutStr = OutStr + "&" + form.elements[i].name + "=" + escape(TheValue1);			
		   }
		}
		else
            {
                TheValue=form.elements[i].value;
		    TheValue1 = replace(TheValue," ","+");
		    OutStr = OutStr + "&" + form.elements[i].name+ "=" + escape(TheValue1);
		}
	  }
        if (form.elements[i].name==field1)
        {
            InBound = true;
        }
    }
    OutStr = OutStr.substring(1,OutStr.length);
    return OutStr;
}

function SignData(form,Applet,MediaKind,MediaPath,Password,field1,field2)
{
    if (!IsAppletReady(Applet))
    {
        rc = PWBuildErrStr(PW_APPLET_NOT_READY);
        return rc;
    }
    TBSStr = BuildTbs(form,field1,field2);
    str=Applet.digitalSign(MediaKind,MediaPath,Password,TBSStr);

    if (PWIsSuccess(str))
    {
        return PWGetSuccessMsg(str);
    }
    else
    {
        return "! " + str;
    }
}

// this function calls to generate a key
function KeyInfo(
                Applet,
                MediaKind,
                MediaPath
                )
{
    var rc;


    if (!IsAppletReady(Applet))
    {
        rc = PWBuildErrStr(PW_APPLET_NOT_READY);
        return rc;
    }

    rc = Applet.performKeyInfo(
                       MediaKind,
                       MediaPath
                    );
    return rc;

}

// set if proxy server is enable or not.
function SetProxyEnable(Applet, Status)
{
	Applet.SetProxyStatus(Status);
}

// set the proxy's configuration
function ProxyConfiguration(Applet, ProxyAddr, ProxyPort)
{
	var rc;
	
	rc = Applet.SetProxyConfiguration(ProxyAddr, ProxyPort);
	
	return rc;
}

// start proxy authentication 
function ProxyAuth(Applet, MediaKind, MediaPath, Password, ProxyUserId, ProxyPass)
{
	var rc;

	SetProxyEnable(Applet, "1");
	rc = Applet.PerformProxyEx(MediaKind, MediaPath, Password, ProxyUserId, ProxyPass);	
	SetProxyEnable(Applet, "0");
	return rc;
}

// return the current proxy server's address as written in file.
function GetProxyAddr(Applet)
{
	var addr;
	addr = Applet.getProxyAddr();
	return addr;
}

// return the current proxy's port as written in file.
function GetProxyPort(Applet)
{
	var addr;
	addr = Applet.getProxyPort();
	return addr;
}

// activate another thread which listen to a port.
function StartProxy (Applet, ServerAddress, ServerPort, ListenPort, Url)
{
	var rc;
	rc = Applet.StartProxy (ServerAddress, ServerPort, ListenPort, Url);
	return rc;	
}

function ShowDocument (Applet)
{
	url = Applet.GetUrl();
	
	MyShowDoc(url);
}

// kill the session of the requested port.
function KillSession (Applet, Port)
{
	var rc;
	rc = Applet.KillSession (Port);
	return rc;
}

// enable or diable the automatically show document
// status can be "0" for false or "1" for true.
function SetShowDocumentStatus (Applet, Status)
{
	Applet.SetShowDocument (Status);
}
