May 17

I separated the js into different logic modules so it will be easier to
update the js in tandem.