More progress with the JS wrapper
I now have the wrapper reading both zones and categories from JSON or from an object, and I have styles being created appropriately. I've also revisited previous approaches to having zones show up when you mouse over them, and come up with a better system which causes much less activity on mousemoves and doesn't cause flickering. This is a big step forward. Clicking now also appropriately selects a zone. Next I think I'll elaborate the style system so that instead of creating styles, it uses functions, so I can handle text size and line widths based on resolution (if necessary); and after that we have to approach the issue of constructing a category/zone navigation box.
A couple of lessons learned: it's important to pass the correct "this" into callback functions; even if they're being called from the context of a method in your object, they're not going to know their context unless you pass "this" as the (optional) "this" parameter to the callback.