Hola:
onsubmit se ejecuta antes del submit, y no ejecuta ese submit hasta que termina la función o hasta que encuentra una instrucción return (false cancela, true confirma)
Yo tengo algo similar (no recuerdo donde) y me parece que el submit lo hace a un popup (ahora recuerdo... lo tengo cuando firman mi libro de visitas...)... y ese mismo popup se cierra solo, pero antes ejecuta el cierre de la página abridora...
No es tan complrjo, y funciona...
Saludos