Still needs an introduction and there are some questions to be answered. Probably ought to demonstrate the code in an event handling function.