safariにおけるonkeydownの発動時間

こんなスクリプトがあったとします。(都合上onsubmitは使えない状況で。)

<script type="text/javascript">
//require prototype.js 1.5 //
function safeenter(){
	Event.observe($('text'), 'focus', function(){
		Element.observe(window.document, 'keydown', kd = function(event){
			if(event.keyCode==13){
				Event.stop(event);
			}
		});
	});
	Event.observe($('text'), 'blur', function(){
		Element.stopObserving(window.document, 'keydown', kd);
	});
}
Element.observe(window, 'load', function(){
	safeenter();
});
</script>
<form>
<input id="text" type="text">
<input type="submit">
</form>

このスクリプトの意味は、フォームの中のテキストボックスにフォーカスがあるときは、
Enterキーによってフォームが発動されるのを防ぎ、
フォーカスが外れれば、Enterキーでもフォームが発動する、という事です。

しかし、safariでは、上記スクリプトは上手く動作しません。
何故ならsafariの場合、

←遅い       早い→
onkeydown form onkeypress

という順番だからです。

IEとかであれば

←遅い       早い→
form onkeydown onkeypress

なんですが・・・。

なので、
Element.observe(window.document, 'keypress', kd = function(event){
とすればいいのか、と言うとそうでもありません。
prototype.jsの2264行目あたりを見て下さい。
prototype.jsは勝手にsafariの場合にonkeypressをonkeydownに変更しています。

謎です。(汗

非常に困ってしまった為、この部分を取り除きました。

誰か、何故safariでonkeypressをonkeydownに変更しているのか
解る人教えて下さい・・・・。