http://obscurejavascript.tumblr.com/post/115595038489/debounce-in-javascript
var debounce = function(callback, delay) { var timeout = null; return function() { var args = arguments, context = this; clearTimeout(timeout); timeout = setTimeout(function() { callback.apply(context, args); }, delay); }; };