The browser should already be caching static resources based on the cache headers in the HTTP responses for those resources (cache-control, expires, etc) provided the headers are present. They should look something like this:
cache-control:private, max-age=31536000
date:Thu, 02 Aug 2012 14:22:25 GMT
expires:Thu, 02 Aug 2012 14:22:25 GMT
You should be able to see these headers using the browser's built-in developer tools, plugins or extensions like FireBug, or a debugging proxy like Fiddler or Charles. If they're absent, many HTTP servers can be configured to automatically include these headers based on rules you specify. Failing that, you can implement your own "handlers" that will serve the resources and tack on the headers necessary to trigger browser caching.
Using an HTML5 cache manifest will signal capable browsers that the page/application should be available offline. The browser will store the page, as well as the items referenced in the manifest so that they can be displayed sans network connection.