function self($params)
{
    global $pages, $page_name;
    $url = '/' . $page_name;
    $required_params = $pages[$page_name]['params'];
    foreach ($required_params as $k => $v) {
        if (array_key_exists($k, $params)) {
            $url .= '/' . urlencode($params[$k]);
        } else {
            $url .= '/' . urlencode($GLOBALS[$k]);
        }
    }
    $qs = array();
    foreach ($_GET as $k => $v) {
        if (should_persist_param($k)) {
            $qs[$k] = $v;
        }
    }
    foreach ($params as $k => $v) {
        if (!array_key_exists($k, $required_params)) {
            $qs[$k] = $v;
        }
    }
    if (count($qs) > 0) {
        $url .= '?' . http_build_query($qs);
    }
    return $url;
}
function form_display($f)
{
    global $forms;
    $form = $forms[$f];
    $params = array();
    if ($form['method'] == 'get') {
        foreach ($_GET as $k => $v) {
            if (should_persist_param($k)) {
                $params[$k] = urlencode($v);
            }
        }
    }
    output_form_start($f, $form['action'] != null, $form['method'] == 'post', $form['errors'], $form['method'], $form['fileupload'], $params, $form['style']);
    foreach ($form['params'] as $k => $v) {
        if (isset($_REQUEST[$k])) {
            $v['value'] = htmlspecialchars($_REQUEST[$k]);
        }
        output_form_field($k, $v, $form['style']);
    }
    output_form_end($form['submit'], $form['style']);
}