text: function heriter(destination, source) { 
      function initClassIfNecessary(obj) { 
          if( typeof obj["_super"] == "undefined" ) { 
              obj["_super"] = function() { 
                  var methodName = arguments[0]; 
                  var parameters = arguments[1]; 
                  this["__parent_methods"][methodName].apply(this, parameters); 
              } 
          } 
       
          if( typeof obj["__parent_methods"] == "undefined" ) { 
              obj["__parent_methods"] = {} 
          } 
      } 
   
      for (var element in source) { 
          if( typeof destination[element] != "undefined" ) { 
              initClassIfNecessary(destination); 
              destination["__parent_methods"][element] = source[element]; 
          } else { 
              destination[element] = source[element]; 
          } 
      } 
  }
  
  
  /** PausableTimer **/
  
  function PausableTimer(func, millisec) {
  	this.func = func;
  	this.stTime = new Date().valueOf();
  	this.timeout = setTimeout(func, millisec);
  	this.timeLeft = millisec;
  }
  
  PausableTimer.prototype.stop = function() {
  	clearTimeout(this.timeout);
  };
  
  PausableTimer.prototype.pause = function() {
  	clearTimeout(this.timeout);
  	var timeRan = new Date().valueOf()-this.stTime;
  	this.timeLeft -= timeRan;
  };
  
  PausableTimer.prototype.resume = function() {
  	this.timeout = setTimeout(this.func, this.timeLeft);
  	this.stTime = new Date().valueOf();
  };
  
  //Usage:
  //var myTimer = new PausableTimer(function(){alert("It works!");}, 2000);
  //myTimer.pause();
  //myTimer.unpause();
  
  