This is a heavily modified version of the original code by mithicher. The previous fork only worked one way so once the component was rendered the options list could not be changed.
If you have any improved versions or better approaches to this, please leave a comment and i'll add it up here. :)
Version 1 - Add code and descriptions.