Basic framework for the response handler--some implementation still needed. I couldn't sleep, so I did this instead.
IMPORTANT PROGRAMMING NOTES:
Most keyboard events will have to be handled by the active chat box AND ONLY the active chat box. This is important so that we don't type the same message into every box. Most keyboard presses will pass a character into Response.AddCharacter(), with the exception of Tab, Enter, Shift, and Caps Lock. Pressing Enter will be handled by the chat box, and will call Response.GetAccuracy() and Response.GetEnteredWords() before replacing the current response with a null reference (or javascript equivalent). Tab, Shift, and Caps Lock must be handled ABOVE the chat box in the hierarchy, most likely by the main game loop itself. Shift should toggle a globally-scoped variable called "Shifted" upon key press and key release events, while Caps Lock should toggle a DIFFERENT global called "CapsOn" on key press event only. The chat box will read both variables in an "or" statement before calling Response.AddCharacter() in order to allow for upper-case letters and special characters (special characters only happen when Shifted == true, not checking CapsOn == true, while upper-case letters check for either, but NOT both). Tab switches the active chat box to the next one on the right, or the first one if the last chat box is currently selected.
It's a long commit message, yes, but important. I'll copy paste on the Google Doc as well, so we have it in multiple places for reference.