Use Angular's $timeout instead of setTimeout, cancel the timeout when us...

...er initiates an action, restart timeout when action is executed