statemachine-as3 is lightweight state machine based on closures. The library comes with two state machine flavours: StateMachine (where transitions are triggered directly) and EventStateMachine (where transitions are triggered by Event and EventDispatcher).

Sample

//StateMachine
var sm : StateMachine = new StateMachine("process.step1");

//EventStateMachine
var esm : EventStateMachine = new EventStateMachine("process.step1");

//StateMachine
sm.add(
    //From state...
    "process.step1",
    //To state...
    "process.step2",
    //Action-Filter which is triggered on transition
    function() : Boolean {
        //If true is not returned, the transition will not complete
        return true;
    }
);

//EventStateMachine
esm.add(
    //From state...
    "process.step1",
    //To state...
    "process.step2",
    //When the following flash.events.EventDispatcher...
    processDispatcher,
    //Dispatches the flash.events.Event...
    Step2Event,
    //Action-Filter which is triggered on transition
    function( ... Arguments ) : Boolean {
        //Arguments are received from the EventDispatcher
        for each( var argument : * in Arguments ) {
            //...
        }

        //If true is not returned, the transition will not complete
        return true;
    }
);

//StateMachine
sm.state = "process.step2";

//EventStateMachine
processDispatcher.dispatch(Step2Event);

//StateMachine
trace(sm.state);

//EventStateMachine
trace(esm.state);
State machine . URL.