I've tried most of them and can agree on ejabberd. The only problem is that in order to change it, you need to program in Erlang. Openfire looks great, but I could not get the certificate to load properly: there is a bug with the implementation, so TLS will not work. I couldn't get Soapbox to access a local MySQL database, so that was out too.
As for client-side, you can use Miranda.