function waitForEvent(event, elem) {
        suspend {
          var rv;
          var listener_func = function(e) {
            rv = e;
            resume();
          };
          if (elem.addEventListener) 
            elem.addEventListener(event, listener_func, false);
          else // IE special case
            elem.attachEvent("on"+event, listener_func);
        }
        finally {
          if (elem.removeEventListener)
            elem.removeEventListener(event, listener_func, false);
          else // IE special case
            elem.detachEvent("on"+event, listener_func);
        }
        return rv;
      }

      function dump(message) {
        document.getElementById("output").innerHTML = message;
      }

      while (true) {
        var e = waitForEvent("click", document.getElementById('button1')) @
                waitForEvent("click", document.getElementById('button2')) @
                hold(5000);
        if (e) {
          var target = e.target;
          if (!target) // IE specific
            target = e.srcElement;
          dump("You clicked button '"+target.id+"'");
        }
        else
          dump("Click a button already!");
      }