Макс,
В функции showAndHide() замените второе условие на:
if(elem.offsetHeight >= 80 || elem.offsetWidth >= 170) {
elem.style.visibility = "hidden";
elem.style.width = 0;
elem.style.height = 0;
}
Должно помочь. Вкратце, была нарушена логика скрипта - сначала вы проверяете скрыт ли элемент, если скрыт, то показываете его и увеличиваете до нужных размеров. Но второе условие проверяло, что если элемент уже нужных размеров, то скрыть его. Это условие выполняется при каждом нажатии, так как размеры нигде не сбрасывались.