Salut
Il y a un probleme dans ton JS au niveua de la logique.
Si je sélectionne cat1, cat2 et cat3 ne sont pas sélectionnés donc tu masques cat2 et cat3. Mais un cat1 peut être un cat2 ou un cat3 aussi.
De plus, c'est pas très évolutif, tu peux faire un truc du genre:
(Pas testé mais ça devrait pouvoir remplacer la quasi-totalité de ta fonction.
Dis moi si ça colle avec ta demande ;)