Szczerze mówiąc to trochę zagmatwany ten Twój JS.
if($($(this).parents('li')).children('ul').css("display") == 'block'){
Ja się w takich rzeczach nie łapię

Generalnie poszedłbym w tym kierunku:
http://jsfiddle.net/RKb2b/1/Z tym że musisz sobie usystematyzować pewne rzeczy. Chociażby fakt, że teraz tytuł nadrzędnej kategorii siedzi w div.clear, ale elementy tej podkategorii siedzą poza tym divem. Trochę dziwne rozwiązanie, nie mówię że złe, bo każdy sobie robi po swojemu, ja robię inaczej, ale dopóki Ty się w tym łapiesz to ok

Tylko generalnie musisz założyć (ja założyłem w powyższym skrypcie), że ta konwencja się nie zmieni. To samo jeśli chodzi o podkategorie - bo tutaj już sprawa wygląda inaczej niż w przypadku top kategorii - tzn. zarówno tytuł jak i elementy podkategorii siedzą w tym samym li.