All those calls to delay() are your enemy. Learn to flash the LEDs without delay(). See the BlinkWithoutDelay example that comes with the Arduino IDE. Also search the forum, there are probably literally hundred of posts about BlinkWithoutDelay.
I'd probably implement it as a state machine, where each button push advances to the next state. Each flashing pattern could be implemented as a separate function.