function AdminConfigAdd()
{
    global $cl_plugins, $cs_plugins;
    if (isset($_GET['id'])) {
        // Редактирование
        $id = SafeEnv($_GET['id'], 11, int);
        System::database()->Select(AdminConfigConfigTable(), "`id`='{$id}'");
        $ret = System::database()->FetchRow();
        $group = SafeDB($ret['group_id'], 11, int);
        $name = SafeDB($ret['name'], 255, str);
        $hname = SafeDB($ret['hname'], 255, str);
        $description = SafeDB($ret['description'], 255, str);
        $value = SafeDB($ret['value'], 0, str, false);
        $control = explode(':', $ret['kind']);
        $control[0] = trim(strtolower($control[0]));
        $control = FormsParseParams($control);
        $values = SafeDB($ret['values'], 0, str);
        $vals = explode(':', $values);
        if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) {
            $valuesfunc = trim($vals[1]);
            $values = '';
        } else {
            $valuesfunc = '';
        }
        $savefunc = SafeDB($ret['savefunc'], 250, str);
        $type = SafeDB($ret['type'], 60, str);
        if ($type != '') {
            $type = explode(',', $type);
            settype($type[0], int);
            //maxlength
            settype($type[1], str);
            //type
            if ($type[2] == 'false') {
                $type[2] = false;
            } else {
                $type[2] = true;
            }
        } else {
            $type = array(255, str, false);
        }
        $visible = SafeDB($ret['visible'], 1, int);
        $autoload = SafeDB($ret['autoload'], 1, int);
    } else {
        // Добавление
        $group = 0;
        if (isset($_GET['group'])) {
            $group = SafeEnv($_GET['group'], 11, int);
        }
        $name = '';
        $hname = '';
        $description = '';
        $value = '';
        $control = array('cols' => 1, 'style' => '', 'control' => '', 'width' => '', 'height' => '');
        $values = '';
        $valuesfunc = '';
        $savefunc = '';
        $type = array(255, str, false);
        $visible = 1;
        $autoload = 1;
    }
    // Элемент управления
    $controls_array = array('edit', 'password', 'text', 'combo', 'list', 'check', 'radio');
    $controls_array2 = array('Текстовое поле', 'Пароль', 'Область редактирования', 'Раскрывающийся список', 'Список (мультивыделение)', 'Флажки', 'Радиокнопки');
    $controls = array();
    foreach ($controls_array as $c => $contol_name) {
        System::site()->DataAdd($controls, $contol_name, $controls_array2[$c], $contol_name == $control['control']);
    }
    // Количество колонок
    $collsd = array();
    for ($i = 1; $i < 11; $i++) {
        System::site()->DataAdd($collsd, $i, $i, $i == $control['cols']);
    }
    // Функция заполнения значений
    $getfuncdata = array();
    System::site()->DataAdd($getfuncdata, '', '');
    foreach ($cl_plugins as $pl) {
        System::site()->DataAdd($getfuncdata, $pl[0], $pl[0], $pl[0] == $valuesfunc);
    }
    // Функция обработки
    $savefuncdata = array();
    System::site()->DataAdd($savefuncdata, '', '');
    foreach ($cs_plugins as $pl) {
        System::site()->DataAdd($savefuncdata, $pl[0], $pl[0], $pl[0] == $savefunc);
    }
    // Тип данных
    $types_array = array('int', 'float', 'string', 'bool');
    $types_array2 = array('Целочисленный', 'Вещественный', 'Текстовый', 'Логический');
    $datatypes = array();
    foreach ($types_array as $c => $type_name) {
        System::site()->DataAdd($datatypes, $type_name, $types_array2[$c], $type_name == $type[1]);
    }
    AddCenterBox('Добавить настройку');
    FormRow('Группа', System::site()->Select('group', AdminConfigGetGroupsFormData($group), false, 'class="autofocus"'));
    FormRow('Имя', System::site()->Edit('name', $name, false, 'style="width:400px;" maxlength="255"'));
    FormRow('Заголовок', System::site()->Edit('hname', $hname, false, 'style="width:400px;" maxlength="255"'));
    FormRow('Описание', System::site()->Edit('description', $description, false, 'style="width:400px;" maxlength="255"'));
    FormRow('Значение', System::site()->TextArea('value', $value, 'style="width:400px;height:200px;"'));
    FormRow('Элемент управления<br /><small>Укажите единицу измерения<br />после ширины и высоты</small>', System::site()->Select('control', $controls) . '<table cellspacing="3" cellpadding="0" border="0">' . '<tr><td style="border:none">Ширина:</td><td style="border:none">' . System::site()->Edit('cwidth', $control['width'], false, 'style="width:200px;"') . '</td></tr>' . '<tr><td style="border:none">Высота:</td><td style="border:none">' . System::site()->Edit('cheight', $control['height'], false, 'style="width:200px;"') . '</td></tr>' . '<tr><td style="border:none">Колонок:</td><td style="border:none">' . System::site()->Select('ccols', $collsd) . '</td></tr>' . '</table>');
    FormRow('Возможные значения<br /><small>Например:<br />name:имя, name:имя, ...<br />Только для элементов выбора.</small>', System::site()->TextArea('values', $values, 'style="width:400px;height:100px;"'));
    FormRow('Функция заполнения значений', System::site()->Select('valuesfunc', $getfuncdata));
    FormRow('Функция обработчик', System::site()->Select('savefunc', $savefuncdata));
    FormRow('Тип данных', System::site()->Select('datatype', $datatypes));
    FormRow('Длина поля<br /><small>0 - не ограничено</small>', System::site()->Edit('maxlength', $type[0], false, 'style="width:200px;" maxlength="11"'));
    FormRow('Вырезать html-теги и<br />заменять спецсимволы<br />html-эквивалентами', System::site()->Check('striptags', '1', $type[2]));
    FormRow('Видимая', System::site()->Check('visible', '1', $visible));
    FormRow('Автозагрузка', System::site()->Check('autoload', '1', $autoload));
    $back = '';
    if (isset($_REQUEST['back'])) {
        $back = '&back=' . SafeDB($_REQUEST['back'], 255, str);
    }
    AddForm(System::site()->FormOpen(ADMIN_FILE . '?exe=config_admin&a=save' . (AdminConfigPlugins() ? '&plugins=1' : '') . (isset($_GET['id']) ? '&id=' . $id : '') . $back), System::site()->Button('Отмена', 'onclick="history.go(-1)"') . System::site()->Submit(isset($_GET['id']) ? 'Сохранить' : 'Добавить'));
}
/**
 * Сохраняет конфигурацию в базе данных
 * @param $Exe
 * @param string $Group
 * @param bool $ShowHidden
 * @return void
 */
function AdminConfigurationSave($Exe, $Group = '', $ShowHidden = false)
{
    global $config, $conf_config_table, $conf_config_groups_table;
    // Вытаскиваем настройки и отсортировываем по группам
    $temp = System::database()->Select($conf_config_table, '');
    for ($i = 0, $cnt = count($temp); $i < $cnt; $i++) {
        $configs[$temp[$i]['group_id']][] = $temp[$i];
    }
    unset($temp);
    // Вытаскиваем группы настроек
    if ($Group == '') {
        $q = '';
    } else {
        $q = "`name`='" . $Group . "'";
    }
    $cfg_grps = System::database()->Select($conf_config_groups_table, $q);
    for ($i = 0, $cnt = count($cfg_grps); $i < $cnt; $i++) {
        // Если эта группа невидима то пропускаем её
        if ($Group == '') {
            if ($cfg_grps[$i]['visible'] == 0) {
                continue;
            }
        }
        // Или если в ней нет настроек
        if (!isset($configs[$cfg_grps[$i]['id']])) {
            continue;
        }
        for ($j = 0, $jcnt = count($configs[$cfg_grps[$i]['id']]); $j < $jcnt; $j++) {
            // Если настройка невидима то пропускаем её
            if ($configs[$cfg_grps[$i]['id']][$j]['visible'] == 0 && !$ShowHidden) {
                continue;
            }
            $name = $configs[$cfg_grps[$i]['id']][$j]['name'];
            $kind = explode(':', $configs[$cfg_grps[$i]['id']][$j]['kind']);
            $kind = trim(strtolower($kind[0]));
            $savefunc = trim($configs[$cfg_grps[$i]['id']][$j]['savefunc']);
            $type = trim($configs[$cfg_grps[$i]['id']][$j]['type']);
            if ($type != '') {
                $type = explode(',', $type);
            } else {
                $type = array(255, str, false);
            }
            $where = "`name`='{$name}' and `group_id`='" . $cfg_grps[$i]['id'] . "'";
            if (isset($_POST[$name])) {
                switch ($kind) {
                    case 'edit':
                    case 'radio':
                    case 'combo':
                        if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                            $savefunc = CONF_SAVE_PREFIX . $savefunc;
                            $value = $savefunc(FormsCheckType($_POST[$name], $type));
                        } else {
                            $value = FormsCheckType($_POST[$name], $type);
                        }
                        break;
                    case 'text':
                        if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                            $savefunc = CONF_SAVE_PREFIX . $savefunc;
                            $value = $savefunc(FormsCheckType($_POST[$name], $type));
                        } else {
                            $value = FormsCheckType($_POST[$name], $type);
                        }
                        break;
                    case 'check':
                    case 'list':
                        if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                            $savefunc = CONF_SAVE_PREFIX . $savefunc;
                            $value = $savefunc(FormsCheckType($_POST[$name], $type));
                        } else {
                            if (isset($_POST[$name])) {
                                $c = count($_POST[$name]);
                            } else {
                                $c = 0;
                            }
                            $value = '';
                            for ($k = 0; $k < $c; $k++) {
                                $value .= ',';
                                $value .= FormsCheckType($_POST[$name][$k], $type);
                            }
                            $value = substr($value, 1);
                        }
                        break;
                    default:
                        if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                            $savefunc = CONF_SAVE_PREFIX . $savefunc;
                            $value = $savefunc(FormsCheckType($_POST[$name], $type));
                        } else {
                            $value = FormsCheckType($_POST[$name], $type);
                        }
                }
                System::database()->Update($conf_config_table, 'value=\'' . $value . '\'', $where);
                // FIXME: Использовать транзакцию
            }
        }
    }
    // Очищаем кэш настроек
    System::cache()->Clear('config');
    GO(ADMIN_FILE . '?exe=' . $Exe);
}
function AdminFormsFieldEditor($action)
{
    global $cl_plugins, $cs_plugins;
    if (!isset($_GET['id'])) {
        GO(ADMIN_FILE . '?exe=forms');
    }
    $id = SafeEnv($_GET['id'], 11, int);
    $collsd = array();
    for ($i = 1; $i < 11; $i++) {
        System::site()->DataAdd($collsd, $i, $i);
    }
    $getfuncdata = array();
    System::site()->DataAdd($getfuncdata, '', '');
    foreach ($cl_plugins as $pl) {
        System::site()->DataAdd($getfuncdata, $pl[0], $pl[0]);
    }
    $savefuncdata = array();
    System::site()->DataAdd($savefuncdata, '', '');
    foreach ($cs_plugins as $pl) {
        System::site()->DataAdd($savefuncdata, $pl[0], $pl[0]);
    }
    $controls = array();
    System::site()->DataAdd($controls, 'edit', 'Текстовое поле');
    System::site()->DataAdd($controls, 'text', 'Область редактирования');
    System::site()->DataAdd($controls, 'combo', 'Раскрывающийся список');
    System::site()->DataAdd($controls, 'list', 'Список (мультивыделение)');
    System::site()->DataAdd($controls, 'check', 'Флажки');
    System::site()->DataAdd($controls, 'radio', 'Радиокнопки');
    System::site()->DataAdd($controls, 'file', 'Файл');
    $datatypes = array();
    System::site()->DataAdd($datatypes, 'int', 'Целочисленный');
    System::site()->DataAdd($datatypes, 'float', 'Вещественный');
    System::site()->DataAdd($datatypes, 'string', 'Текстовый');
    System::site()->DataAdd($datatypes, 'bool', 'Логический');
    System::site()->DataAdd($datatypes, 'file', 'Файл');
    $required = false;
    if ($action == 'add') {
        $hname = '';
        $name = '';
        $width = '';
        $height = '';
        $length = '0';
        $values = '';
        $cp = 'Добавить';
        $edit = false;
        System::admin()->FormTitleRow('Добавить поле');
    } else {
        $index = SafeEnv($_GET['index'], 11, int);
        System::database()->Select('forms', "`id`='{$id}'");
        $form = System::database()->FetchRow();
        $fields = unserialize($form['form_data']);
        $field = $fields[$index];
        $hname = $field['hname'];
        $name = $field['name'];
        $stype = FormsParseParams(explode(':', $field['kind']));
        $width = $stype['width'];
        $height = $stype['height'];
        $cols = $stype['cols'];
        $required = $stype['required'];
        $controls['selected'] = $stype['control'];
        $collsd['selected'] = $cols;
        $vv = explode(':', $field['values']);
        if (count($vv) == 2 && FormsConfigCheck2Func($vv[0], $vv[1])) {
            $getfuncdata['selected'] = $vv[1];
            $values = '';
        } else {
            $values = $field['values'];
        }
        if (function_exists($field['savefunc'])) {
            $savefuncdata['selected'] = $field['savefunc'];
        }
        $type = explode(',', $field['type']);
        $datatypes['selected'] = $type[1];
        $length = $type[0];
        $cp = 'Сохранить изменения';
        $edit = true;
    }
    FormRow('Название', System::site()->Edit('hname', $hname, false, 'maxlength="250" style="width:400px;" class="autofocus"'));
    FormRow('Имя HTML (уникальное для всех полей)', System::site()->Edit('name', $name, false, 'maxlength="250" style="width:400px;"'));
    FormRow('Элемент управления (укажите единицу измерения после ширины и высоты: %, px)', '<table>' . '<tr><td colspan="2" style="border:none; padding: 2px;">' . System::site()->Select('control', $controls) . '<td></tr>' . '<tr><td style="border:none; padding: 2px;">Ширина:</td>' . '<td style="border:none; padding: 2px;">' . System::site()->Edit('cwidth', $width, false, 'style="width:100px;"') . '</td></tr>' . '<tr><td style="border:none; padding: 2px;">Высота:</td>' . '<td style="border:none; padding: 2px;">' . System::site()->Edit('cheight', $height, false, 'style="width:100px;"') . '</td></tr>' . '<tr><td style="border:none; padding: 2px;">Колонок:</td>' . '<td style="border:none; padding: 2px;">' . System::site()->Select('ccols', $collsd) . '</td></tr>' . '</table>');
    FormTextRow('Возможные значения (Например: name:имя,name:имя, .... Только для элементов выбора.)', System::site()->TextArea('values', $values, 'style="width:600px;height:100px;"'));
    FormRow('Функция заполнения значений', System::site()->Select('valuesfunc', $getfuncdata));
    FormRow('Функция обработчик', System::site()->Select('savefunc', $savefuncdata));
    FormRow('Тип данных', System::site()->Select('datatype', $datatypes));
    FormRow('Длина поля (Размер файла Кб., 0 - неограниченно)', System::site()->Edit('maxlength', $length, false, 'style="width:60px;" maxlength="11"'));
    FormRow('Обязательное для заполнения', System::site()->Select('required', GetEnData($required, 'Да', 'Нет')));
    AddForm(System::site()->FormOpen(ADMIN_FILE . '?exe=forms&a=addfield&id=' . $id . ($edit ? '&index=' . $index : '')), ($edit ? System::site()->Button('Отмена', 'onclick="history.go(-1);"') : '') . System::site()->Submit($cp));
}
function IndexFormSave($form)
{
    // Проверяем капчу
    if (!System::user()->Auth || !System::user()->isAdmin() && System::config('forms/show_captcha')) {
        if (!isset($_POST['keystr']) || !System::user()->isDef('captcha_keystring') || System::user()->Get('captcha_keystring') != $_POST['keystr']) {
            $text = '<p align="center">Вы ошиблись при вводе кода с картинки. Форма не отправлена.</p>';
            $text .= '<p align="center"><input type="button" value="Назад" onclick="history.back();"></p>';
            System::site()->AddTextBox('', $text);
            return;
        }
    }
    $errors = array();
    $controls = unserialize($form['form_data']);
    $post_data = array();
    foreach ($controls as $control) {
        $error = '';
        $name = $control['name'];
        $hname = $control['hname'];
        $kind = FormsParseParams($control['kind']);
        $savefunc = trim($control['savefunc']);
        $type = trim($control['type']);
        if ($type != '') {
            $type = explode(',', $type);
        } else {
            $type = array(255, str, false);
        }
        switch ($kind['control']) {
            case 'edit':
                if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                    $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type));
                } else {
                    $value = FormsCheckType($_POST[$name], $type);
                }
                if ($kind['required'] && $value == '') {
                    $errors[] = 'Обязательное поле "' . SafeDB($hname, 255, str) . '" не заполнено.';
                }
                break;
                //case 'radio' :
            //case 'radio' :
            case 'combo':
                $vals = IndexFormGetValues($name, $control['values']);
                if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                    $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type));
                } else {
                    $value = $vals[$_POST[$name]];
                }
                if ($kind['required'] && $value == '') {
                    $errors[] = 'Значение в поле "' . SafeDB($hname, 255, str) . '" не выбрано.';
                }
                break;
            case 'text':
                if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                    $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type));
                } else {
                    $value = FormsCheckType($_POST[$name], $type);
                }
                if ($kind['required'] && $value == '') {
                    $errors[] = 'Обязательное поле "' . SafeDB($hname, 255, str) . '" не заполнено.';
                }
                break;
            case 'check':
            case 'list':
                $vals = IndexFormGetValues($name, $control['values']);
                if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                    $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type));
                } else {
                    if (isset($_POST[$name])) {
                        $c = count($_POST[$name]);
                    } else {
                        $c = 0;
                    }
                    $value = '';
                    for ($k = 0; $k < $c; $k++) {
                        $value .= ',';
                        $value .= $vals[$_POST[$name][$k]];
                    }
                    $value = substr($value, 1);
                }
                if ($kind['required'] && $value == '') {
                    $errors[] = 'Значение в поле "' . SafeDB($hname, 255, str) . '" не выбрано.';
                }
                break;
            case 'file':
                if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                    $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type));
                } else {
                    $value = FormsCheckType($_FILES[$name], $type, $error, $filename);
                }
                if ($error != '') {
                    $errors[] = $error;
                } elseif ($kind['required'] && $value == '') {
                    $errors[] = 'Файл в поле "' . SafeDB($hname, 255, str) . '" не выбран.';
                }
                break;
            default:
                if (FormsConfigCheck2Func('function', $savefunc, 'save')) {
                    $value = CONF_SAVE_PREFIX . $savefunc(FormsCheckType($_POST[$name], $type));
                } else {
                    $value = FormsCheckType($_POST[$name], $type);
                }
        }
        if ($type[1] == 'file') {
            $post_data[] = array($hname, $value, $type[1], $filename);
        } else {
            $post_data[] = array($hname, $value, $type[1]);
        }
    }
    /*
     * Вывод ошибок.
     */
    if (count($errors) > 0) {
        $text = '<p>Произошли ошибки при потправке формы:</p><ul>';
        foreach ($errors as $error) {
            $text .= '<li>' . $error . '</li>';
        }
        $text .= '</ul>';
        $text .= '<p align="center"><input type="button" value="Назад" onclick="history.back();"></p>';
        System::site()->AddTextBox('', $text);
        return;
    }
    $form_id = SafeEnv($form['id'], 11, int);
    if (System::user()->Auth) {
        $user_id = System::user()->Get('u_id');
    } else {
        $user_id = 0;
    }
    $time = time();
    $ip = getip();
    if ($form['email'] != '') {
        IndexFormSendMail($form['email'], $form['hname'], $time, $user_id, $ip, $post_data);
    }
    $data = serialize($post_data);
    $data = SafeEnv($data, 0, str);
    System::database()->Insert('forms_data', "'','{$form_id}','{$user_id}','{$time}','{$data}','0','{$ip}'");
    $new = $form['new_answ'] + 1;
    $cnt = $form['answ'] + 1;
    System::database()->Update('forms', "`answ`='{$cnt}',`new_answ`='{$new}'", "`id`='{$form_id}'");
    if ($form['send_ok_msg'] != '') {
        $msg = SafeDB($form['send_ok_msg'], 0, str, false, false);
    } else {
        $msg = 'Ваша форма отправлена успешно.';
    }
    System::site()->AddTextBox('', '<p align="center">' . $msg . '</p>');
}
function FormsGetControl($name, $value, $kind, $type, $values, $other = '')
{
    //values = array(val1,val2,val3,...)
    //kind = (Edit,Password,Text,Check,Radio,List,Combo)
    $kind = explode(':', $kind);
    $control = '';
    $kind[0] = trim(strtolower($kind[0]));
    if ($type != '') {
        $type = explode(',', $type);
        settype($type[0], int);
        //maxlength
        settype($type[1], str);
        //type
        settype($type[2], bool);
        //strip tags/special chars
    } else {
        $type = array(255, str, false);
    }
    $params = FormsParseParams($kind);
    switch ($kind[0]) {
        case 'edit':
            $otherParams = ($type[0] != 0 ? 'maxlength="' . $type[0] . '" ' : '') . $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other;
            $control = System::site()->Edit($name, HtmlChars($value), false, $otherParams);
            break;
        case 'password':
            $otherParams = ($type[0] != 0 ? 'maxlength="' . $type[0] . '" ' : '') . $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other;
            $control = System::site()->Edit($name, HtmlChars($value), true, $otherParams);
            break;
        case 'text':
            $control = System::site()->TextArea($name, HtmlChars($value), $params['style'] . ' ' . ($params['required'] ? 'required ' : '') . $other);
            break;
        case 'check':
            $vals = explode(':', $values);
            if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) {
                $func = CONF_GET_PREFIX . trim($vals[1]);
                $vals = $func($name);
                $usefunc = true;
            } else {
                $vals = explode(',', $values);
                $usefunc = false;
            }
            $value = explode(',', $value);
            $control = '<table cellspacing="0" cellpadding="0" align="center">';
            $col = 0;
            $cols = $params['cols'];
            for ($i = 0; $i < count($vals); $i++) {
                if (!$usefunc) {
                    $s = explode(':', $vals[$i]);
                } else {
                    $s = $vals[$i];
                }
                if ($col == 0) {
                    $control .= '<tr>';
                }
                $col++;
                $control .= '<td nowrap class="rightc">' . System::site()->Check($name . '[]', $s[0], in_array($s[0], $value)) . $s[1] . '</td>';
                if ($col == $cols) {
                    $control .= '</tr>';
                    $col = 0;
                }
            }
            if ($col < $cols) {
                $control .= '</tr>';
            }
            $control .= '</table>';
            break;
        case 'radio':
            $vals = explode(':', $values);
            if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) {
                $func = CONF_GET_PREFIX . trim($vals[1]);
                $vals = $func($name);
                $usefunc = true;
            } else {
                $vals = explode(',', $values);
                $usefunc = false;
            }
            $control = '<table cellspacing="0" cellpadding="0" align="center">';
            $col = 0;
            $cols = $params['cols'];
            for ($i = 0; $i < count($vals); $i++) {
                if (!$usefunc) {
                    $s = explode(':', $vals[$i]);
                } else {
                    $s = $vals[$i];
                }
                if ($col == 0) {
                    $control .= '<tr>';
                }
                $col++;
                $control .= '<td nowrap class="rightc">' . System::site()->Radio($name, $s[0], $value == $s[0]) . $s[1] . '</td>';
                if ($col == $cols) {
                    $control .= '</tr>';
                    $col = 0;
                }
            }
            if ($col < $cols) {
                $control .= '</tr>';
            }
            $control .= '</table>';
            break;
        case 'list':
        case 'combo':
            $vals = explode(':', $values);
            if (count($vals) == 2 && FormsConfigCheck2Func($vals[0], $vals[1])) {
                $func = CONF_GET_PREFIX . trim($vals[1]);
                $vals = $func($name);
                $usefunc = true;
            } else {
                $vals = explode(',', $values);
                $usefunc = false;
            }
            $cdata = array();
            for ($i = 0; $i < count($vals); $i++) {
                if (!$usefunc) {
                    $s = explode(':', $vals[$i]);
                } else {
                    $s = $vals[$i];
                }
                if (count($s) == 2) {
                    System::site()->DataAdd($cdata, $s[0], $s[1], $value == $s[0]);
                }
            }
            $control = System::site()->Select($name . ($kind[0] == 'list' ? '[]' : ''), $cdata, $kind[0] == 'list', $params['style'] . ' ' . $other);
            break;
        case 'file':
            //////////////////////////////////////////////////////////////////
            $control = System::site()->FFile($name, ($params['required'] ? 'required ' : '') . $other);
            break;
        default:
            $control = $value;
    }
    return $control;
}