<!-- you need this javascript -->
<%= javascript_include_tag "jamServer" %>
<!-- gon is required -->
<%= include_gon %>
<!-- you need these templates -->
<%= render "clients/banner" %>
<%= render "clients/banners/disconnected" %>
<%= render "clients/jamServer" %>

<!-- you need these stylesheets -->
<%= stylesheet_link_tag    "client/banner", media: "all" %>
<%= stylesheet_link_tag    "client/jamServer", media: "all" %>

<script type="text/javascript">

  // you can probably do nothing with this in your own code
  function signalActiveElement(event_type) {
    // event can be one of:
    // * beforeDisconnect
    // * afterDisconnect
    // * afterConnect
    // the purpose of this method is to signal to the active element in the UI that websocket state changed
    // and in beforeDisconnect in particular, you can return a 'vote' that let's you affect how a reconnect is handled
    // you can safely return null, though

    console.log("websocket event:" + event_type);

    if(event_type == 'beforeDisconnect') {
      return null; // causes a in-place websocket reconnect (as opposed to a full page refresh when connection re-established)
    }
    // no other event cares about return
  }

  $(function() {

    JK = JK || {};

    JK.app = JK.JamKazam();
    var jamServer = new JK.JamServer(JK.app, signalActiveElement);
    jamServer.initialize();

    // now you can register for messages somewhere in your code safely... (not necessarily inline here--just somewhere)
    // i.e., you can call: context.JK.JamServer.registerMessageCallback

    // JamServer.connect needs the jamClient to be initialized
    JK.initJamClient();

    JK.JamServer.connect() // singleton here defined in JamServer.js
        .done(function() {
          console.log("websocket connected") // this is used in /client to signal hide of curtain, and initializing the bulk of logic. maybe not useful...
        })
        .fail(function() {
          console.log("websocket failed to connect") // this is used in /client
        });

  })
  </script>