Даже не вдаваясь особо в подробности, на минус приходится жать дважды, потому что тот уже раскрыт и получает, как и картинки-плюс одну и ту же функцию slideshow(this). В таком случае надо, чтобы была дополнительная проверка, какая картинка актуально загружена и по ней присваивать функции..
добавлено через 20 минут
Вот, самое простое решение.
Код:
<script type="text/javascript">
//<![CDATA[
function getElementsByClassName(id,cls){
var o=document.getElementById(id);
var aelem=[];
oaelem=o.getElementsByTagName("*");
for(var i=0;i<oaelem.length;i++){
if (oaelem[i].className==cls ){
aelem[aelem.length]=oaelem[i];
}
}
return aelem;
}
function slideshow(obj){
obj.parentNode.parentNode.getElementsByTagName("ul")[0].style.display = "";
obj.innerHTML = "<img src='icon_list_down.gif' alt='-' />";
obj.onclick = new Function("slidehidden(this)");
}
function slidehidden(obj){
obj.parentNode.parentNode.getElementsByTagName("ul")[0].style.display = "none";
obj.innerHTML = "<img src='icon_list_up.gif' alt='+' />";
obj.onclick = new Function("slideshow(this)");
}
function test(testvar) {
if(testvar.parentNode.parentNode.getElementsByTagName("ul")[0].style.display=="none") { slideshow(testvar); }
else { slidehidden(testvar); }
}
var a=getElementsByClassName("categoryTree","toggleblock");
for(var n=0;n<a.length;n++){
var olink=a[n].getElementsByTagName("h4")[0].firstChild;
olink.onclick = new Function("test(this)");
}
//]]>
</script>