Вы хотите использовать setInterval, а не setTimeout, поскольку это будет запускать метод периодически в соответствии с указанной вами задержкой.
Это перезапустит таймер, когда счет достигнет 0:
function timedCount() {
document.getElementById('txt').value = c;
c = c - 1;
if (c == 0)
c = 40;
}
function doTimer() {
if (!timer_is_on) {
timer_is_on = true;
t = setInterval(function () {
timedCount();
}, 1000);
}
}
Если вы хотите остановить таймер, когда счетчик достигнет 0, используйте это:
function timedCount() {
document.getElementById('txt').value = c;
c = c - 1;
if (c == 0) {
c = 40;
clearInterval(t); // Stops the interval
}
}