#produce("password")
<!doctype html>
<html>
  <head>
      <meta charset="utf-8" />
      <title></title>
   </head>
  <body>

       <script type="text/javascript" src="$pmrpcUrl"></script>

       <script type="text/javascript">

         function reply() {
           pmrpc.call({
             destination : "publish",
             publicProcedureName : "reply",
             params : ["OK", {"password" : document.myform.password.value}],
             onSuccess : function() {document.getElementsByTagName('body')[0].innerHTML='<h1>Data submitted</h1>';},
             onFailure: function() {document.getElementsByTagName('body')[0].innerHTML='<h1>Data submission failed</h1>';}
           });
	       return true;
         }
         
         function cancel() {
           pmrpc.call({
             destination : "publish",
             publicProcedureName : "reply",
             params : ["Cancelled", {}],
             onSuccess : function() {document.getElementsByTagName('body')[0].innerHTML='<h1>Cancelled</h1>';},
             onFailure: function() {document.getElementsByTagName('body')[0].innerHTML='<h1>Cancellation failed</h1>';}
           });
	       return true;
         }

       </script>
  
  <h2>Credential Manager request</h2>
    <p>Please enter the master password for the Credential Manager</p>
    <form name="myform" onSubmit="reply(); return false;">
      <label>Password<input type="password" name="password"/></label><br />
      <input type="button" value="Cancel" onClick = "cancel()"/>
      <input type="button" value="Submit" onClick = "reply()"/>
    </form> 
  </body>
</html>

