Switch cases are more organized, so I prefer them.
One suggestion I have is to use dynamic state detection to make your script more robust. Right now, you cycle from ALCH 1 to ALCH 3 and back. Imagine what might happen if the game lags after ALCH2, causing the spell to get deselected, however. Your script expects to be in ALCH3, but the spell will never get selected, causing your script to get stuck.
What I mean is:
onLoop() {
state = // code to figure out what state you should be in
switch (state) {
// blah blah
}
}