__SEND_MESG_DEBUG("entering insertCatalogItem");
@co_call(par_area,par_class,"insertChild",par_area=>par_area,par_class=>par_class,par_id=>par_id,child_class=>par_class,child_prop=>'"id_parent"',foreign_prop=>'"id"');
__GET_RETURNED_INTEGER(id_new)

@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>id_new,par_prop=>'"name"',new_value=>name,version=>0);
@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>id_new,par_prop=>'"description"',new_value=>description,version=>1);

__SEND_MESG_DEBUG("decription added")

str_id_type = ap_psprintf(p, "%d",id_type);
__SEND_MESG_DEBUG("id_type prepared")
@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>id_new,par_prop=>'"id_catalog_type"',new_value=>str_id_type,version=>2);

__SEND_MESG_DEBUG("catalog_type added")

str_id_user = ap_psprintf(p, "%d",cnx->id_user);
@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>id_new,par_prop=>'"id_user"',new_value=>str_id_user,version=>3);

__SEND_MESG_DEBUG("id_user added")

@co_getProp(par_area, '"catalog_type"', id_type, '"class_name"');

__SEND_MESG_DEBUG("catalog_type received")

type_class_name = get_str;

__SEND_MESG_DEBUG("substitution made")

/*
for(i=0; create_params[i] != NULL; i++)
{
cou_sendMessageX(cnx, create_params[i], CO_MSG_DEBUG);
};
*/

// we do not ask to create object if this is current catalog object -- par_class
// we get id_item from function create and put into
if(strcmp(type_class_name,par_class)!=0)
{
@co_call(par_area, type_class_name, "create", par_area=>par_area, par_class=>type_class_name, par_id=>-1, create_params => create_params);
__GET_RETURNED_INTEGER( id_item )
str_id_item = ap_psprintf(p, "%d",id_item);
@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>id_new,par_prop=>'"id_item"',new_value=>str_id_item,version=>4);
@co_call(par_area,type_class_name,"cloneACL",par_area=>par_area,par_class=>type_class_name,par_id=>id_item,area_parent=>par_area,class_parent=>par_class,id_parent=>id_new);
}
else
{
int NParams, i;
str_id_item = ap_psprintf(p, "%d",id_new);
@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>id_new,par_prop=>'"id_item"',new_value=>str_id_item,version=>4);
NParams = coa_GetElementCount(cnx, create_params);
for(i=0; i<NParams; i+=2)
{
char * prop_name = (char *) coa_GetElement(cnx, create_params, i);
char * prop_val = (char *) coa_GetElement(cnx, create_params, i+1);
@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>par_class,par_id=>id_new,par_prop=>prop_name,new_value=>prop_val,version=>-1);
}

}
__RETURN_INTEGER(id_new)