Как тормознуть почти все бровзеры

На модерации Отложенный

Вот уже который раз натыкаюсь на то, что не умею использовать таймеры на веб-странице.

Простенькая страничка стабильно вешает большую тройку MSIE/FireFox/Chrome (остальные не проверял):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>canvas + img</title>
<style type="text/css">
canvas#viewport { border: 1px solid white; width: 900px; }
</style>
</head>
<body onload="onBodyLoad();">
<canvas id="viewport"></canvas>
<img id="img2change" src="philip_fry.jpg" alt="click to continue" onclick="newImg();" onload="imgLoaded();">
<script type="text/javascript">
var n;
var tmr;
var t;
function make_base()
{
base_image = new Image();
base_image.src = 'philip_fry.jpg';
context.drawImage(base_image, 100, 100);
}
function imgLoaded()
{
var img = document.getElementById('img2change');
console.log("entering imgLoaded("+img.src+")");
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < 1000);
if(n==0)
{
img.src='philip_fry_c.jpg';
n = 1;
}
else
{
img.src = 'philip_fry.jpg';
n = 0;
}
img.refresh();
tmr = setTimeout(newImg(), 1000);
console.log("leaving imgLoaded()");
}
function newImg()
{
var img = document.getElementById('img2change');
var t1 = Math.round(new Date().getTime()/1000);
if(t1!=t)
{
console.log("t=" + n);
if(n==0)
{
img.src='philip_fry_c.jpg';
n = 1;
}
else
{
img.src = 'philip_fry.jpg';
n = 0;
}
t = t1;
clearTimeout(tmr);
tmr = null;
}
}
function onBodyLoad()
{
var canvas = document.getElementById('viewport');
context = canvas.getContext('2d');
make_base();
n = 0;
t = Math.round(new Date().getTime()/1000);
//tmr = setTimeout(newImg(), 1000);
}
</script>
</body>
</html>

Примечание: вместо моих картинок (philip_fry_c.jpg,philip_fry.jpg) можно использовать любые другие.