<!DOCTYPE HTML>
<html>
  <head>
    <title>rhimportd Websocket Testclient</title>
    <meta charset="utf-8">
    <style type="text/css">
      body {
        background-color: #555;
      }

      div.data {
        background-color: white;
        border: 1px solid;
        padding: 1em;
        font-family: monospace;
        margin-top: 1em;
        margin-bottom: 1em;
      }

      td {
        text-align: right;
      }
    </style>
    <script src="jquery.min.js"></script>
    <script type="text/javascript">
      function SessionList(req) {
        this.req = req
        this.sock = new WebSocket("ws://localhost:4080/public/socket");
        this.sock_onmessage = function (event) {
          $('#listmsg').text(event.data);
          this.sock.close();
        }
        this.sock.onmessage = this.sock_onmessage.bind(this);

        this.sock_onopen = function() {
          this.sock.send(JSON.stringify(this.req));
        }
        this.sock.onopen = this.sock_onopen.bind(this);
      }

      var sl;

      function list() {
        req = { COMMAND: "list",
                LOGIN_NAME: $('#username').val(),
	              PASSWORD: $('#token').val()};
        sl = new SessionList(req);
      }


      function Session(req) {
        this.req = req
        $('#rawmsg').text("");
        this.sock = new WebSocket("ws://localhost:4080/public/socket");
        this.sock_onmessage = function (event) {
          $('#rawmsg').append(event.data + "\n");
          msg = $.parseJSON(event.data)
          switch (msg.TYPE) {
            case "ack":
               $('#sessionid').val(msg.ID);
               buttonsRunning();
               break;
            case "done":
            case "error":
               this.sock.close();
               init();
               break;
          }
        }
        this.sock.onmessage = this.sock_onmessage.bind(this);

        this.sock_onopen = function() {
          this.sock.send(JSON.stringify(this.req));
        }
        this.sock.onopen = this.sock_onopen.bind(this);

        this.sendbinmsg = function(data) {
          this.sock.send(data);
        }

        this.cancel = function() {
          this.sock.send(JSON.stringify({COMMAND: "cancel"}));
        }
      }

      var s;

      function run() {
        req = { COMMAND: "new",
                TIMEOUT: 7200,
                REFERENCE_ID: $('#refid').val(),
                LOGIN_NAME: $('#username').val(),
	              PASSWORD: $('#token').val(),
	              SHOW_ID: 10002,
	              CLEAR_SHOW_CARTS: true,
	              SOURCE_URI: $('#source').val() };
        s = new Session(req);
      }

      function reconnect() {
        req = { COMMAND: "reconnect",
                LOGIN_NAME: $('#username').val(),
	              ID: $('#sessionid').val() };
        s = new Session(req);
      }

      function sendbinmsg() {
        var byteArray = new Uint8Array(40*1024);
        for (var x = 0; x < byteArray.length; x++){
          byteArray[x] = x
        }
        s.sendbinmsg(new Blob([byteArray], {type: "application/octet-stream"}));
      }

      function cancel() {
        s.cancel();
      }

      function detach() {
        s.sock.close();
        buttonsIdle();
      }

      function buttonsIdle() {
        $('#buttonrun').removeAttr('disabled')
        $('#buttonreconnect').removeAttr('disabled')
        $('#buttonbinmsg').attr('disabled','disabled')
        $('#buttondetach').attr('disabled','disabled')
        $('#buttoncancel').attr('disabled','disabled')
      }

      function buttonsRunning() {
        $('#buttonrun').attr('disabled','disabled')
        $('#buttonreconnect').attr('disabled','disabled')
        $('#buttonbinmsg').removeAttr('disabled')
        $('#buttondetach').removeAttr('disabled')
        $('#buttoncancel').removeAttr('disabled')
      }

      function init() {
        $('#sessionid').val("");
        buttonsIdle();
      }
    </script>
  </head>
  <body onload="init()">

    <h1>rhimportd Websocket Testclient</h1>

    <div>
      <table>
        <tr><td>Username</td><td><input id="username" type="text" size="20" value="heslinki" /></td></tr>
        <tr><td>Token</td><td><input id="token" type="text" size="20" /></td></tr>
      </table>
    </div>

    <div>
      <button id="buttonlist" onclick="list()">list</button>
      <div id="listmsg" class="data"></div>
    </div>

    <div>
      <input id="source" type="text" size="30" value="fake://10000">
      <input id="refid" type="text" size="15" value="test-reference-id">
      <button id="buttonrun" onclick="run()">start</button>
      <button id="buttonbinmsg" onclick="sendbinmsg()">send binary message</button>
      <button id="buttondetach" onclick="detach()">detach</button>
      <input id="sessionid" type="text" size="45">
      <button id="buttonreconnect" onclick="reconnect()">reconnect</button>
      <button id="buttoncancel" onclick="cancel()">cancel</button>
      <div id="rawmsg" class="data"></div>
    </div>
  </body>
</html>