Hi cpjfox
It's far easier than you'r setting yourself up to.
To put things in some perspective: you probably know traditional event-driven programming. Something is clicked and the appropriate code is fired. If you hook a boolean variable up to the click-event and 'gives' the clicker a true/false .. you've got a state. Every time the event is fired the boolean variable change value .. and you now can choose code to fire depending on the 'state' and not just the click.
Say you've gota click that sets a future time (in milliseconds) .. the click should get a 'state' where it starts code in the loop that checks if millis() has reached the future time (if ( future < millis() ) then ... ). .. Or put another way: you've got the state-variable to use for choosing two different code-path.
How difficult can it be?
I know that I sound condescending, but that's not intended. I spent most yesterday on a somewhat similar problem ;o/
If you've got a 'state' you move from 'event' to a less detailed situation. The four states you've build is somewhat moving in the uppersit direction and doesnt really give you anything .. or it's misleading to 'think' of those four as 'states'