Hola:
La web está plagada de códigos mal implementados, y el tuyo tiene algunas cosas mal, pero lo bueno es que parece de fácil arreglo...
Verás, el evento submit es el que debería usarse para las validaciones de los formularios, y otros eventos deberían reservarse para otras cosas como validación de controles y efectos varios, así que un esquema de validación correcto sería:
<form onsubmit="return valida(this)" ...
y un botón del tipo submit sin más
<button type="submit" >enviar</button>
Con esta estructura basta con que la función validadora devuelva el valor lógico false para que se cancele, así que en tu función validadora las últimas líneas:
Código:
if(a==0)
{
formulario.submit();
}
deberían ser
Me parece que bastaría ese par de cambios para que sea accesible, usable y correcto (tampoco revisé el código con lupa)
Saludos