# Source: XHRCache.js

    (function(window)
    {
        var cache = {};
        var expirationTimes = {};

        /**
         * Simple memory XHR Cache
         *
         * @return {Function}
         */
        Gitana.MemoryXHRCache = function(timeToLiveMilliseconds)
        {
            return function(descriptor, responseObject)
            {
                var key = descriptor.method + "/" + descriptor.url;
                if (descriptor.headers)
                {
                    for (var headerName in descriptor.headers)
                    {
                        key += "/" + headerName + "=" + descriptor.headers[headerName];
                    }
                }

                var now = new Date().getTime();

                if (responseObject)
                {
                    cache[key] = responseObject;
                    expirationTimes[key] = now + timeToLiveMilliseconds;
                }

                responseObject = cache[key];

                if (!expirationTimes[key] || expirationTimes[key] < now)
                {
                    delete cache[key];
                    delete expirationTimes[key];

                    responseObject = null;
                }

                return responseObject;
            };
        };

    })(window);