function guifi_node_distances_form($form_state, $node)
{
    global $base_url;
    guifi_log(GUIFILOG_TRACE, 'function guifi_node_distances_form()', $form_state);
    $form = array();
    $form_state['#redirect'] = FALSE;
    // default values
    $filters = array('dmin' => 0, 'sn' => 1, 'dmax' => 30, 'search' => NULL, 'max' => 25, 'skip' => 0, 'status' => "All", 'from_node' => $node->id, 'azimuth' => "0,360");
    // initialize filters using default values or passed by form
    if (!empty($form_state['values']['filters'])) {
        $form_state['values']['filters'] = array_merge($filters, $form_state['values']['filters']);
    } else {
        $form_state['values']['filters'] = $filters;
    }
    $form['filters_region'] = guifi_devices_select_filter($form_state, 'guifi_node_distances');
    $form['list-devices'] = guifi_node_distances_list($form_state['values']['filters'], $node);
    return $form;
}
/**
 * Select device
 *
 * URL: http://guifi.net/guifi/js/select-device/%
 */
function guifi_ahah_select_device()
{
    $cid = 'form_' . $_POST['form_build_id'];
    $cache = cache_get($cid, 'cache_form');
    $action = arg(3);
    if ($cache) {
        $form = $cache->data;
        if ($action == 'guifi_node_distances') {
            $node = guifi_node_load($_POST['filters']['from_node']);
            $form['list-devices'] = guifi_node_distances_list($_POST['filters'], $node);
        } else {
            $form['list-devices'] = guifi_devices_select($_POST['filters'], $action);
        }
        cache_set($cid, $form, 'cache_form', $cache->expire);
        // Build and render the new select element, then return it in JSON format.
        $form_state = array();
        $form['#post'] = array();
        $form = form_builder($form['form_id']['#value'], $form, $form_state);
        $output = drupal_render($form['list-devices']);
        drupal_json(array('status' => TRUE, 'data' => $output));
    } else {
        drupal_json(array('status' => FALSE, 'data' => ''));
    }
    exit;
}