Код у вас не рабочий.
Так работать не будет setInterval(timer(), 1000); Напишите хоть так setInterval(timer, 1000);
Учитывая функционал, то особо заморачиваться архитектурой тут не нужно) Разве что событие click вешать через bind, затем снимать при помощи unbind
Интервал нужно будет очистить в нужный момент. Ну и результат таких выборок $(".timeout") нужно присваивать переменным, чтобы на каждой итерации у вас не происходил поиск по дереву DOM
По идее, утечек тут не будет :)
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.