У вас несколько timeout'ов, значит очищать нужно все (когда вы в цикле присваиваете id = setTimeut(...), у вас просто некой переменной возвращается очередной номер, а процесс запусается сам по себе, и если так несколько раз, то по этому номеру вы сможете очистить только последний вызванный).
См.
http://www.flasher.ru/forum/showthread.php?t=133536, насколько я понимаю, к setTimeout все сказанное также относится.
Т.е. попробуйте именовать timeout'ы индивидуально, то есть присваивать номера каждый раз новой номерной переменной, а потом по этим переменным их очищайте.