Spent some time playing with jquery validation, I'm not happy with the state it's in, so I'll leave it for the moment and come back to it after I've read some more.