
Object.extend(Ajax, { 
	CacheUpdater: function(container, url, opt){ 
		if(!document.cachedRequests) document.cachedRequests = function(){};
		if(document.cachedRequests[url]){
			Element.update(container, document.cachedRequests[url]);
         if(opt.onComplete)
               opt.onComplete.call(this, {responseText: document.cachedRequests[url]});
		} else {
         opt.oldOnComplete = opt.onComplete
			opt.onComplete = function(t) {
            Element.update(container, t.responseText);
				document.cachedRequests[url] = t.responseText;
            if(opt.oldOnComplete)
               opt.oldOnComplete.call(this, t);
			}
			new Ajax.Request(url, opt);
		}
   },
   ClearCache: function(url) {
      document.cachedRequests[url] = null;
   },
   CacheRequest: function(url, opt){ 
		if(!document.cachedRequests) document.cachedRequests = {};
		if(!document.awatingCachedRequest) document.awatingCachedRequest = {};
      
		if(document.cachedRequests[url]){
         if(document.cachedRequests[url] === true) {
            if(!document.awatingCachedRequest[url])
               document.awatingCachedRequest[url] = [];
            document.awatingCachedRequest[url].push(opt.onComplete);
         } else if (opt.onComplete)
            opt.onComplete(document.cachedRequests[url][0], document.cachedRequests[url][1]);
            
		} else {
         opt.onOldComplete = opt.onComplete;
         opt.onComplete = function(t, obj){
            document.cachedRequests[url] = [t, obj];
            if(opt.onOldComplete) opt.onOldComplete(t, obj);
            
            if(document.awatingCachedRequest[url])
               document.awatingCachedRequest[url].each(function(onComplete) {
                  onComplete(t, obj);
               });
         }
         
         document.cachedRequests[url] = true;
			new Ajax.Request(url, opt);
         
		}
   }
}); 