// Use like a standard jquery event.
// jQuery("#whatever").live('hashchange', function(event) { });

(function(jQuery) {
  var last_hash, start, stop, timeout_id;
  last_hash = location.hash;
  timeout_id = 0;
  jQuery.event.special.hashchange = {
    setup: function() {
      if ('onhashchange' in window) {
        return false;
      }
      return start();
    },
    teardown: function() {
      if ('onhashchange' in window) {
        return false;
      }
      return stop();
    },
    add: function(handleObj) {
      var old_handler;
      old_handler = handleObj.handler;
      return handleObj.handler = function(event) {
        event.fragment = location.hash.replace(/^#/, '');
        return old_handler.apply(this, arguments);
      };
    }
  };
  start = function() {
    var hash;
    stop();
    hash = location.hash;
    if (hash !== last_hash) {
      jQuery(window).trigger('hashchange');
      last_hash = hash;
    }
    return timeout_id = setTimeout(start, 100);
  };
  return stop = function() {
    return clearTimeout(timeout_id);
  };
})(jQuery);

