(function($) {

  if (typeof $.timeout != "undefined") return; 

  $.extend({
    timeout : function (func,delay,obj) {
      // init
      if (typeof $.timeout.count == "undefined") $.timeout.count = 0;   
      if (typeof $.timeout.funcs == "undefined") $.timeout.funcs = new Array(); 
      // set timeout
      if (typeof func =='string') return setTimeout(func, delay); 
      if (typeof func =='function') {
        $.timeout.count++;
        $.timeout.funcs[$.timeout.count] = new Array(func,obj);
        return setTimeout("$.timeout.funcs['"+$.timeout.count+"'][0]($.timeout.funcs['"+$.timeout.count+"'][1]);", delay);
      }
    },
    interval : function (func,delay) {
      // init
      if (typeof $.interval.count == "undefined") $.interval.count = 0;   
      if (typeof $.interval.funcs == "undefined") $.interval.funcs = new Array(); 
      // set interval
      if (typeof func =='string') return setInterval(func, delay); 
      if (typeof func =='function') {
        $.interval.count++;
        $.interval.funcs[$.interval.count] = func;
        return setInterval("$.interval.funcs['"+$.interval.count+"']();", delay);
      }
    },
    idle : function (func,delay) {
      // init
      if (typeof $.idle.lasttimeout == "undefined") $.idle.lasttimeout = null;
      if (typeof $.idle.lastfunc == "undefined") $.idle.lastfunc = null;
      // set idle timeout
      if ($.idle.timeout) { clearTimeout($.idle.timeout); $.idle.timeout = null; $.idle.lastfunc = null; }
      if (typeof(func)=='string') { 
        $.idle.timeout = setTimeout(func, delay); 
        return $.idle.timeout;
      }    
      if (typeof(func)=='function') { 
        $.idle.lastfunc = func;
        $.idle.timeout = setTimeout("$.idle.lastfunc();", delay);
        return $.idle.timeout;
      }
    },
    clear : function (countdown) {
    clearInterval(countdown);
    clearTimeout(countdown);
    }  
    
  });
  
  
})(jQuery);
