// Author: Joseba Alonso
// Version: 1.0
// LastChange: 12-1-2005
function FrameServer(){
 this.inter = setInterval("FrameServer.__instance.__frame()",1000/30);
 this.listeners = new Array();
}
// Singleton implementation
FrameServer.__instance = null;
FrameServer.getInstance = function(){
 if(!FrameServer.__instance){
  FrameServer.__instance = new FrameServer();
 }
 return FrameServer.__instance;
}
// Private
FrameServer.prototype.__frame = function(){
 for(var i=0;i<this.listeners.length;i++){
  if(this.listeners[i])this.listeners[i].obj[this.listeners[i].func]();
 }
}
// Public interface
FrameServer.prototype.addListener = function(obj,func){
 this.removeListener(obj,func);
 this.listeners[this.listeners.length] = {obj:obj,func:func};
}
FrameServer.prototype.removeListener = function(obj,func){
 for(var i=0;i<this.listeners.length;i++){
  if(this.listeners[i] && this.listeners[i].obj==obj && this.listeners[i].func==func){
   this.listeners[i] = null;;
   return;
  }
 }
}