MikeLittle:
Robin, I'm not following your logic here. There is no need to go to a state if there is nothing in the serial buffer to process. If Serial.available() is true, something is in the stack. Depending on the current state, it is read and dealt with. If nothing is left, it sits in the main loop waiting for the next string.
you are on the right track.
What is your program doing/not doing that you want to change?
there doesn't seem to be a question in your original post...