#require("message")
#require("title")
#produce("answer")
<!doctype html>
<html>
  <head>
      <meta charset="UTF-8" />
      <title></title>
      <style>
      </style>
  </head>
  <body>

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

       <script type="text/javascript">

         function reply() {
           pmrpc.call({
             destination : "publish",
             publicProcedureName : "reply",
             params : ["OK", {"answer" : "answer"}],
             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;
         }
         
         pmrpc.call({
           destination : "publish",
           publicProcedureName : "setTitle",
           params : ["$!title"]});

       </script>
  
  <h2>Warning: $!message</h2>
    <form name="myform" onSubmit="reply(); return false;">
      <input type="button" value="Cancel" onClick = "cancel()"/>
      <input type="button" value="OK" onClick = "reply()"/>
    </form> 
  </body>
</html>

