1) You can use some tools in your package that wait for the event. Ex : "Odi File Wait" (the event is a file) ; "Odi Wait for Data" (the event is an satisfied SQL Statement ) ; ODI Wait for Child Session (the event is another ODI Session)
Your ODI scenario will be always in "run state", but it will just wait the event before executing the data flow.
2) I assume you can do this with LOAD PLAN (available in ODI 11g)
2) If you don't want to use load plan, you can also store the last execution in DB at the end of you first scenario if everything is ok. When launching the second, add a first that check that the date stored is the same as TRUNC(sysdate). You can also retrieve the last execution in the work repository.