/**
  * Save product category relations
  *
  * @param   Mage_Catalog_Model_Product $product
  * @return  Mage_Catalog_Model_Resource_Eav_Mysql4_Product
  */
 protected function _saveCategories(Varien_Object $object)
 {
     $categoryIds = $object->getCategoryIds();
     $oldCategoryIds = $object->getOrigData('category_ids');
     $oldCategoryIds = !empty($oldCategoryIds) ? explode(',', $oldCategoryIds) : array();
     $object->setIsChangedCategories(false);
     $insert = array_diff($categoryIds, $oldCategoryIds);
     $delete = array_diff($oldCategoryIds, $categoryIds);
     $write = $this->_getWriteAdapter();
     if (!empty($insert)) {
         $insertSql = array();
         foreach ($insert as $v) {
             if (!empty($v)) {
                 $insertSql[] = '(' . (int) $v . ',' . $object->getId() . ',0)';
             }
         }
         if ($insertSql) {
             $write->query("insert into {$this->_productCategoryTable}\n                    (category_id, product_id, position) values " . join(',', $insertSql));
         }
     }
     if (!empty($delete)) {
         $write->delete($this->_productCategoryTable, $write->quoteInto('product_id=?', $object->getId()) . ' and ' . $write->quoteInto('category_id in (?)', $delete));
     }
     if (!empty($insert) || !empty($delete)) {
         $object->setIsChangedCategories(true);
     }
     return $this;
 }