// requires list.js

var timerID=null;

// Timer event notification
var timerListenerList = new LinkedList();

function Callback(obj, method) {
  return function() { obj[method](); };
}

function Event() {
  this.listeners = new LinkedList();
  this.fire = function() {
    this.listeners.foreach(function(listener) { listener(); });
  }
  this.add = function(listener) { this.listeners.add(listener); };
  this.remove = function(listener) { this.listeners.remove(listener); };
}

function registerTimerListener(listener) {
  timerListenerList.add(listener);
  if (!timerID) { timerID = setInterval("callTimerListeners()", 20); }
}

function unregisterTimerListener(listener) {
  timerListenerList.remove(listener);
  if (timerListenerList.count==0) { clearInterval(timerID); timerID=null; }
}

function callTimerListeners() {
   timerListenerList.foreach(function(listener) { listener(); });
}

//file:///c:/eclipse/workspace/website/wwwroot/half_cocks/fade.html