self-implemented MVC pattern with self-implemented observer pattern - no JS DOM libraries