Почему происходит задержка анимации?
Почему происходит задержка анимации?По тому, что у блока который Вы сворачиваете не фиксированная высота (точнее по тому, что вы меняете её на height: auto). И в Вашем случае, он сворачивается так, буд-то он имел высоту 500px, а не ту, которую он имел фактически (если вы зададите ему фактическую высоту в 500px или растянете его с помощью содержимого до 500px - задержки не будет).
"Хорошего" решения - нет. Единственное решение в данном случае - не используйте height: auto.
Что то совсем сложно! Можно сделать иначе! создайте класс .active и сделайте стили для него! в Jquery напиши обработку клика. 
Например у нас есть вот такой вот код:.myblock{
    height:50px; // это будет наша фиксированная высота! 
}
.myblock.active{
    height:auto; // это будет наша неизвестная высота! она выставляется сама. То-есть блок раскроется полностью.
}$('.myblock').click(function(){ // обработка клика
if ($(".myblock").hasClass("active")) { // проверяем есть ли у нас такой класс active
        $(".myblock").removeClass("active"); // если есть то удаляем его
       //сюда можно вставить ваш код которые будет менять текст
    }
esle{
    $(".myblock").addClass("active");// если нету то добавляем
    //сюда можно вставить ваш код которые будет менять текст
}
});
То-есть когда есть у нас класс active то срабатывают другие стили а когда его нет то другие стили!