/** wrap call to click handler to filter out middle clicks */
handleLeftClick = function (evt, func, context) {
// normalize event. Still messy for evt.which in IE though
evt = $.event.fix(evt);
// Only show overlay on left click so middle click can open new tab
if (evt.which !== 2 && !evt.metaKey) {
evt.preventDefault();
func.call(context);
}
};

function ratelimit(fn, ms) {
var last = (new Date()).getTime();
return (function() {
var now = (new Date()).getTime();
if (now - last > ms) {
last = now;
fn.apply(null, arguments);
}
});
}