The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

// Using the magic of jquery, this is really easy. See jquery.com for details!

// This is the long-pull (aka "Comet"). We start this request, and then if it
// times out we start again. The server holds the connection open until there
// is an update in the message queue.
function poll_server() {
  $('#log').load(
    '/pushstream/',            // URL to load
    function(){poll_server();} // What to do upon success (recurse!)
  );
}

// We also send messages using AJAX
function send_message() {
  var username = $('#username').val();
  var message = $('#message').val();
  $('#status').load('/sendmessage/', {
    username: username,
    message:  message
  },function(){
    $('#message').val('');
    $('#message').focus();
  });
  return false;
}

// This stuff gets executed once the document is loaded
$(function(){
  // Start up the long-pull cycle
  poll_server();
  // Unobtrusively make submitting a message use send_message()
  $('#f').submit(send_message);
});