the problem is that focus tried to be set before oncomplete. so panel hidden and js failed.
3) You could pass id of the first failed input to client and return focus on oncomplete in the same way.
4) Not a problem at all - showing modal panel - client side operation. Or use ajaxSingle if using ajax control for cancel.