Потому что код
<script type="text/javascript">
//hidden_groups();
document.write(hidden_groups());
</script>
У вас выполняется один раз, при выводе страницы, а в тот момент str - пуст. Когда вы отображаете div на экране скрипт внутри <script></script> не выполняется заново.
Вам нужно как минимум вставить этот str в элемент, например переписать функцию:
function toggle(obj) {
hidden_groups();
var el = document.getElementById(obj);
el.style.display = (el.style.display != 'none' ? 'none' : '' );
el.innerHTML = str;
}
Так он просто вставит внутрь div'a, как я понимаю вам нужно внутрь таблицы вставить, но принцип и суть ошибки думаю ясна.