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