##Debounce
Use this a lot to delay user/server interaction to keep requests low
var debounce = function (func, threshold, execAsap) {
var timeout;
return function debounced () { var obj = this, args = arguments; function delayed () { if (!execAsap) func.apply(obj, args); timeout = null; };
if (timeout) clearTimeout(timeout); else if (execAsap) func.apply(obj, args);
timeout = setTimeout(delayed, threshold || 100); }; }