private function _onPageChanged($event, Kwf_Component_Data $data, Kwf_Component_Data $parentData)
 {
     $menuLevel = $this->_level;
     if (!$event instanceof Kwf_Component_Event_Page_ShowInMenuChanged && !$data->isShownInMenu()) {
         //ignore pages not shown in menu
         return;
     }
     //find category + level the changed page is in
     $level = 0;
     $categoryData = $parentData;
     if ($data->isPage) {
         $level++;
     }
     while ($categoryData && !Kwc_Abstract::getFlag($categoryData->componentClass, 'menuCategory')) {
         if ($categoryData->isPage) {
             $level++;
         }
         $categoryData = $categoryData->parent;
     }
     if (is_int($menuLevel)) {
         //numeric menu level
         if ($level + 1 >= $menuLevel && $level + 1 <= $menuLevel + $this->_numLevels) {
             $l = $level + 1;
             if ($l != $menuLevel) {
                 if ($data->isPage) {
                     $l--;
                 }
                 $data = $parentData;
                 while ($data) {
                     if ($l == $menuLevel) {
                         break;
                     }
                     if ($data->isPage) {
                         $l--;
                     }
                     $data = $data->parent;
                 }
             } else {
                 $data = $parentData;
             }
             $data = $data->getPageOrRoot();
             $menus = $data->getRecursiveChildComponents(array('componentClass' => $this->_class));
             foreach ($menus as $m) {
                 $this->_onMenuChanged($event, $m);
             }
         }
     } else {
         //category menu level
         if (!$categoryData) {
             return;
         }
         //$cat is the category id of changed page
         $cat = Kwc_Abstract::getFlag($categoryData->componentClass, 'menuCategory');
         if ($cat) {
             if ($cat === true) {
                 $cat = $categoryData->id;
             }
         }
         if ($cat === $menuLevel && $level >= 1 && $level <= $this->_numLevels) {
             //this menu shows this changed and not in a lower level
             $s = array('subroot' => $data);
             foreach (Kwc_Abstract::getComponentClasses() as $cls) {
                 //get all categories
                 $c = Kwc_Abstract::getFlag($cls, 'menuCategory');
                 $cmps = array();
                 //get category that changed
                 if ($c === true) {
                     $cmps = Kwf_Component_Data_Root::getInstance()->getComponentsByClass($cls, array('id' => $cat, 'subRoot' => $data));
                 } else {
                     if ($c == $cat) {
                         $cmps = Kwf_Component_Data_Root::getInstance()->getComponentsByClass($cls, array('subRoot' => $data));
                     } else {
                         continue;
                     }
                 }
                 foreach ($cmps as $i) {
                     //get menu that changed
                     foreach ($i->getRecursiveChildComponents(array('componentClass' => $this->_class)) as $m) {
                         //do what needs to be done if menu item changed
                         $this->_onMenuChanged($event, $m);
                     }
                 }
             }
         }
     }
 }