wrapped all functions in iife, passing window.angular object, to prevent global scope pollution; in many cases not necessary, but I want my team to use this iife wrap consistently to avoid problems such as memory leaks and name collision