$flag);
	$block = block_load('materio_flag', $block_name);
	$block_content = _block_render_blocks(array($block));
	$build = _block_get_renderable_array($block_content);
	$block_rendered = drupal_render($build);
  $rep['block'] = $block_rendered;
  if(isset($block_nav_name)){
    $block = block_load('materio_flag', $block_nav_name);
    $block_content = _block_render_blocks(array($block));
    $build = _block_get_renderable_array($block_content);
    $block_rendered = drupal_render($build);
    $rep['block_nav'] = $block_rendered;
  }
 	drupal_json_output($rep);
}
/**
 * materio_flag_createlist($type)
 *
 */
function materio_flag_createlist_form($type){
  $debug = false;
	$path = 'flag-lists/add/' . $type;
  // check if request is ajax, if not rediret
  if (!$debug && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) {
    drupal_goto('flag-lists/add/' . $type);
    exit ;
  }
  // menu_set_active_item($path);
  // $return = menu_execute_active_handler($path, FALSE);
  // if (is_int($return)) {
  //   switch ($return) {
  //     case MENU_NOT_FOUND :
  //       drupal_add_http_header('Status', '404 Not Found');
  //       break;
  //     case MENU_ACCESS_DENIED :
  //       drupal_add_http_header('Status', '403 Forbidden');
  //       break;
  //     case MENU_SITE_OFFLINE :
  //       drupal_add_http_header('Status', '503 Service unavailable');
  //       break;
  //   }
  // } elseif (isset($return)) {
  // $form_state['build_info']['args'] = array(NULL, 'breve');
  // $f = drupal_get_form('flag_lists_form', $form, $form_state, variable_get('flag_lists_name', 'list'), $type);
  // dsm($f);
	// flag_lists_form($form, $form_state, $name = NULL, $type = NULL)
	/*
  $form = array(
    '#type' => 'form',
    '#id' => 'materio-flag-create-list-form',
  );
  $form['type'] = array(
    '#type' => 'hidden',
    '#value' => $type,
    '#name' => 'type',
  );
  $form['listname'] = array(
    '#type' => 'textfield',
    '#title' => t('Create new @name', array('@name'=>variable_get('flag_lists_name', 'list'))),
    '#default_value' => '',
    // '#size' => 100,
    '#maxlength' => 255,
    '#name' => 'flag-lists-name',
    '#description' => t('A short, descriptive title for this Folder list. Limit to 255 characters.'),
  );
  $form['actions'] = array(
    '#prefix' => '
',
    '#suffix' => '
',
  );
  $form['actions']['create'] = array(
    '#type' => 'submit',
    '#value' => t('create'),
    '#name' => 'create',
  );
  $form['actions']['cancel'] = array(
    '#type' => 'button',
    '#value' => t('cancel'),
    '#name' => 'cancel',
  );
  // dsm($form, 'form');
*/
	module_load_include('inc', 'flag_lists', 'flag_lists.admin');
	$form = drupal_get_form('flag_lists_form', null, $type);
	$form['title']['#title'] = t('Create new @name', array('@name'=>variable_get('flag_lists_name', 'list')));
	$form['submit']['#value'] = 'create';
	$form['form_token']['#value'] = drupal_get_token(variable_get('flag_lists_name','list'));
	$form['cancel'] = array(
		'#type' => 'button',
		'#value' => t('cancel'),
		'#name' => 'cancel',
	);
	$rendered_form = drupal_render($form);
	$token = drupal_get_token(variable_get('flag_lists_name', 'list'));
  $rep = array(
		'form'=>$form,
    'rendered_form'=>$rendered_form,
		'token'=>$token
  );
  if ($debug) {
    dsm($rep, 'rep');
    return "debug display";
  }else{
    drupal_json_output($rep);
  }
}
/**
 * materio_flag_editlist_form()
 */
function materio_flag_editlist_form($type, $fid){
  $debug = false;
  $path = 'flags/lists/edit/' . $fid;
  // check if request is ajax, if not rediret
  if (!$debug && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) {
    drupal_goto($path);
    exit ;
  }
  // If name is numeric, then we have the fid, so get the name.
  if (is_numeric($fid)) {
    $name = db_select('flag_lists_flags', 'f')
      ->fields('f', array('name'))
      ->condition('fid', $fid)
      ->execute()
      ->fetchField();
  }
  if(flag_lists_is_owner('edit', $fid)){
    $flag = flag_lists_get_flag($name);
    $form = array(
      '#type' => 'form',
      '#id' => 'materio-flag-edit-list-form',
    );
    $form['type'] = array(
      '#type' => 'hidden',
      '#value' => $type,
      '#name' => 'type',
    );
    $form['fid'] = array(
      '#type' => 'hidden',
      '#value' => $fid,
      '#name' => 'fid',
    );
    $form['name'] = array(
      '#type' => 'hidden',
      '#value' => $name,
      '#name' => 'name',
    );
    $form['listtitle'] = array(
      '#type' => 'textfield',
      '#title' => t('Edit this '.variable_get('flag_lists_name', 'list')),
      '#value' => $flag->title,
      // '#size' => 100,
      '#maxlength' => 255,
      '#name' => 'flag-lists-title',
      '#description' => t('A short, descriptive title for this Folder list. Limit to 255 characters.'),
    );
    $form['actions'] = array(
      '#prefix' => '',
      '#suffix' => '
',
    );
    $form['actions']['save'] = array(
      '#type' => 'submit',
      '#value' => t('save'),
      '#name' => 'save',
    );
    $form['actions']['delete'] = array(
      '#type' => 'submit',
      '#value' => t('delete'),
      '#name' => 'delete',
    );
    $form['actions']['cancel'] = array(
      '#type' => 'button',
      '#value' => t('cancel'),
      '#name' => 'cancel',
    );
    // dsm($form, 'form');
    $return = drupal_render($form);
    $rep = array(
      'rendered_form'=>$return,
    );
  }else{
    $rep = array(
      'status' => 'error',
      'message' => t('you do not have rights to edit this '.variable_get('flag_lists_name', 'list')),
    );
  }
  if ($debug) {
    dsm($rep, 'rep');
    return "debug display";
  }else{
    drupal_json_output($rep);
  }
}
function materio_flag_edit_list($fid, $name, $title){
  $path = 'flags/lists/edit/' . $fid;
  // check if request is ajax, if not rediret
  if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    drupal_goto($path);
    exit ;
  }
  if(!flag_lists_is_owner('edit', $fid)){
    $rep = array(
      'error' => true,
      'message' => t('You have not enough rights to edit this @name.', array('@name' => variable_get('flag_lists_name', t('list'))))
    );
  }else if (flag_lists_title_exists($title, 'materiau') || flag_lists_title_exists($title, 'breve')){
    $rep = array(
      'error' => true,
      'message' => t('You already have a @name with this name.', array('@name' => variable_get('flag_lists_name', t('list'))))
    );
  }else{
    $flag = flag_lists_get_flag($name);
    $flag->title = $title;
    flag_lists_set_messages($flag);
    flag_lists_save($flag);
    _flag_lists_clear_cache();
    $rep = array(
      'status' => 'saved',
      'listname' => $name,
      'listtitle' => $title,
    );
  }
  drupal_json_output($rep);
}
function materio_flag_delete_list($fid){
  $path = 'flags/lists/delete/' . $fid;
  // check if request is ajax, if not rediret
  if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
    drupal_goto($path);
    exit ;
  }
  if(!flag_lists_is_owner('delete', $fid)){
    $rep = array(
      'error' => true,
      'message' => t('You have not enough rights to delete this @name.', array('@name' => variable_get('flag_lists_name', t('list'))))
    );
  }else{
    // If name is numeric, then we have the fid, so get the name.
    if (is_numeric($fid)) {
      $name = db_select('flag_lists_flags', 'f')
        ->fields('f', array('name'))
        ->condition('fid', $fid)
        ->execute()
        ->fetchField();
    }
    $flag = flag_lists_get_flag($name);
    flag_lists_fl_delete($flag);
    $rep = array(
			'fid' => $fid,
      'status' => 'deleted',
    );
  }
  drupal_json_output($rep);
}
function materio_flag_nodelinks(){
  $nids = explode(';', $_REQUEST['nids']);
  if(count($nids)){
    foreach ($nids as $nid) {
      $node = node_load($nid);
      $lks = render(materio_flag_get_entity_links($node, 'node'));
      $links[$nid] = $lks;
    }
    $rep = array(
      "status" => 1,
      "nids" => $nids,
      'links' => $links,
    );
  }else{
    $rep['status'] = 0;
  }
  drupal_json_output($rep);
}
function materio_flag_user_bookmarks(){
  global $user;
  drupal_set_title(t('My bookmarks'), PASS_THROUGH);
  $flaged = flag_get_user_flags('node');
  // dsm($flaged, 'flaged');
  $flag = flag_get_flag('bookmarks');
  $flaged_content = $flaged['bookmarks'];
  // dsm($flaged_content, 'flaged_content');
  $viewmode = isset($user->data['materiosearchapi_viewmode']) ? $user->data['materiosearchapi_viewmode'] : variable_get('defaultviewmode', 'full');
  $limit = variable_get($viewmode.'_limite', '10');
  $offset = pager_find_page() * $limit;
  $count = count($flaged_content);
  $max = $offset+$limit > $count ? $count : $offset+$limit;
  $i = 0;
  foreach ($flaged_content as $id => $item) {
    if($i >= $offset){
      if($i < $max){
        if($item->entity_type == 'node'){
          $items[] = node_load($id);
        }
      }else{
        break;
      }
    }
  }
  $ret['#items'] = $items;
  $ret['#theme'] = 'materio_flag_mylists_list';
  $ret['#view_mode'] = $viewmode;
  $ret['#fid'] = $flag->fid;
  $ret['#count'] = $count;
  $ret['#name'] = variable_get('flag_lists_name', 'list');
  $ret['#title'] = $flag->title;
  pager_default_initialize($count, $limit);
  $ret['#pager'] = theme('pager');
  drupal_add_js(drupal_get_path('module', 'materio_flag').'/js/materio_flag-ck.js');
  return $ret;
}
function materio_flag_user_lists($fid){
  global $user;
  $flag = flag_lists_get_flag($fid);
  // dsm($flag, 'flag');
  drupal_set_title(_materio_flag_get_listpagetitle($flag), PASS_THROUGH);
  $flaged_content = flag_lists_get_flagged_content($fid, $user->uid);
  // dsm($flaged_content, 'flaged_content');
  $viewmode = isset($user->data['materiosearchapi_viewmode']) ? $user->data['materiosearchapi_viewmode'] : variable_get('defaultviewmode', 'full');
  $limit = variable_get($viewmode.'_limite', '10');
  $offset = pager_find_page() * $limit;
  $count = count($flaged_content);
  $max = $offset+$limit > $count ? $count : $offset+$limit;
  for ($i=$offset; $i < $max; $i++) {
    if($flaged_content[$i]->entity_type == 'node'){
      $items[] = node_load($flaged_content[$i]->entity_id);
    }
  }
  $ret['#items'] = $items;
  $ret['#theme'] = 'materio_flag_mylists_list';
  $ret['#view_mode'] = $viewmode;
  $ret['#fid'] = $fid;
  $ret['#count'] = $count;
  $ret['#name'] = variable_get('flag_lists_name', 'list');
  $ret['#title'] = $flag->title;
  pager_default_initialize($count, $limit);
  $ret['#pager'] = theme('pager');
  return $ret;
}
function materio_flag_ajax_list($fid, $page = 0){
  $debug = false;
  $_GET['page'] = $page;
  if($fid == 1){
    $list_path = $path = 'bookmarks';
  }else{
    $list_path = 'lists';
    $path = $list_path.'/'.$fid;
  }
  // check if request is ajax, if not rediret to search_api_page page with right keys
  if (!$debug && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) {
    drupal_goto($path, array('query'=>array('page'=>$page)), 301);
    exit;
  }
  if(isset($_GET['current_path'])){
    // dsm($_GET['current_path'], '$_GET[current_path]');
    // url() generates the prefix using hook_url_outbound_alter(). Instead of
    // running the hook_url_outbound_alter() again here, extract the prefix
    // from url().
    url('', array('prefix' => &$prefix));
    $cur_path = str_replace($base_url.base_path().$prefix, '', $_GET['current_path']);
    // dsm($cur_path, 'cur_path');
    $cur_is_list_path = strpos($cur_path, $list_path);
    // dsm($matches, '$matches');
    if($cur_is_list_path === false){
      $rep = array(
        "redirect" => $base_url.base_path().$prefix.$path,
      );
      drupal_json_output($rep);
      exit;
    }
  }
  // get results
  menu_set_active_item($path);
  $return = menu_execute_active_handler($path, FALSE);
  dsm($return, '$return');
  if (is_int($return)) {
    switch ($return) {
      case MENU_NOT_FOUND :
        drupal_add_http_header('Status', '404 Not Found');
        break;
      case MENU_ACCESS_DENIED :
        drupal_add_http_header('Status', '403 Forbidden');
        break;
      case MENU_SITE_OFFLINE :
        drupal_add_http_header('Status', '503 Service unavailable');
        break;
    }
  } elseif (isset($return)) {
    if (is_array($return)) {
      $rendered = drupal_render($return);
    }
    $rep = array(
      'rendered' => $rendered,
      'path' => $path,
      'title' => drupal_get_title(),
    );
    if ($debug) {
      dsm($rep, 'rep');
      return "debug display";
    }else{
      drupal_json_output($rep);
    }
  }
}