function smarty_function_input($params, $template)
{
    $class = isset($params['class']) ? ' ' . trim(htmlentities($params['class'])) : '';
    $idAndName = SmartyUtils::getIdAndNameAttributes($params);
    $attributes = SmartyUtils::getAttributes('style', $params);
    $name = isset($params['name']) && trim($params['name']) ? trim($params['name']) : '';
    if (isset($_POST) && count($_POST) > 0 && $name && isset($_POST[$name])) {
        if (!isset($params['type']) || $params['type'] != 'password') {
            $value = ' value="' . trim(htmlentities($_POST[$name])) . '" ';
        } else {
            $value = '';
        }
    } else {
        $value = SmartyUtils::getAttrFromParam('value', $params);
    }
    $val = isset($params[$name]) && trim($params[$name]) ? trim($name) : '';
    $errors = array();
    if ($name) {
        // add validation conditions
        foreach (FormValidator::getTypes() as $condition) {
            if (isset($params[$condition]) && $params[$condition]) {
                FormValidator::addCondition($name, $condition, $params[$condition]);
            }
        }
        $errors = FormValidator::getErrors($name);
        if (count($errors) > 0) {
            $class .= ' error';
        }
    }
    $type = isset($params['type']) ? ' type="' . $params['type'] . '" ' : ' type="text" ';
    $title = isset($params['title']) ? ' title="' . $params['title'] . '" ' : '';
    return '<input ' . $idAndName . ' class="bcTextInput' . $class . '" ' . $type . $title . $value . $attributes . '
		onkeyup="this.className = this.className.replace(/\\berror\\b/, \'\');"/>';
}
function smarty_function_html_password_input($params, $template)
{
    $class = isset($params['class']) ? ' ' . trim(htmlentities($params['class'])) : '';
    $idAndName = SmartyUtils::getIdAndNameAttributes($params);
    $attributes = SmartyUtils::getAttributes('style', $params);
    return '<input ' . $idAndName . ' class="bcTextInput' . $class . '" type="password" ' . $attributes . '/>';
}
function smarty_function_submit($params, $template)
{
    $rawName = isset($params['name']) ? trim(htmlentities($params['name'])) : '';
    $name = $rawName ? 'name="' . $rawName . '" ' : '';
    $id = isset($params['id']) ? 'id="' . trim(htmlentities($params['id'])) . '" ' : $rawName ? 'id="' . $rawName . '" ' : '';
    $class = isset($params['class']) ? ' ' . trim(htmlentities($params['class'])) : '';
    $attributes = SmartyUtils::getAttributes(array('value' => 'Submit', 'style'), $params);
    return '<input class="bcSubmit' . $class . '" type="submit" ' . $name . $id . $attributes . '/>';
}
function smarty_block_html_form($params, $content, $template, &$repeat)
{
    if ($content) {
        $rawName = isset($params['name']) ? trim(htmlentities($params['name'])) : '';
        $name = $rawName ? 'name="' . $rawName . '" ' : '';
        $id = isset($params['id']) ? 'id="' . trim(htmlentities($params['id'])) . '" ' : $rawName ? 'id="' . $rawName . '" ' : '';
        $attributes = SmartyUtils::getAttributes(array('action', 'method' => 'post', 'style', 'enctype'), $params);
        return '<form ' . $id . $name . $attributes . '>' . $content . '</form>';
    }
}
function smarty_function_html_text_input($params, $template)
{
    $class = isset($params['class']) ? ' ' . trim(htmlentities($params['class'])) : '';
    $idAndName = SmartyUtils::getIdAndNameAttributes($params);
    $attributes = SmartyUtils::getAttributes('style', $params);
    $name = isset($params['name']) && trim($params['name']) ? trim($params['name']) : '';
    if (isset($_POST) && count($_POST) > 0 && $name && isset($_POST[$name])) {
        $value = ' value="' . trim(htmlentities($_POST[$name])) . '" ';
    } else {
        $value = SmartyUtils::getAttrFromParam('value', $params);
    }
    $val = isset($params[$name]) && trim($params[$name]) ? trim($name) : '';
    return '<input ' . $idAndName . ' class="bcTextInput' . $class . '" type="text" ' . $value . $attributes . '/>';
}
function smarty_block_html_editor($params, $content, $template, &$repeat)
{
    if ($content) {
        $class = isset($params['class']) ? ' ' . trim(htmlentities($params['class'])) : '';
        $idAndName = SmartyUtils::getIdAndNameAttributes($params);
        $attributes = SmartyUtils::getAttributes('style', $params);
        $name = isset($params['name']) && trim($params['name']) ? trim($params['name']) : '';
        if (isset($_POST) && count($_POST) > 0 && $name && isset($_POST[$name])) {
            $content = trim(htmlentities($_POST[$name]));
        }
        $val = isset($params[$name]) && trim($params[$name]) ? trim($name) : '';
        return '<textarea ' . $idAndName . ' class="bcTextArea' . $class . '" ' . $attributes . '>' . $content . '</textarea>';
    }
}
function smarty_function_partial_view($params, $template)
{
    $controller = \BlankCanvas\App::getController($params['context'], $params['controller']);
    return $controller->{$params}['action']($params);
    return 'ok';
    $class = isset($params['class']) ? ' ' . trim(htmlentities($params['class'])) : '';
    $idAndName = SmartyUtils::getIdAndNameAttributes($params);
    $attributes = SmartyUtils::getAttributes('style', $params);
    $name = isset($params['name']) && trim($params['name']) ? trim($params['name']) : '';
    if (isset($_POST) && count($_POST) > 0 && $name && isset($_POST[$name])) {
        $value = ' value="' . trim(htmlentities($_POST[$name])) . '" ';
    } else {
        $value = SmartyUtils::getAttrFromParam('value', $params);
    }
    $val = isset($params[$name]) && trim($params[$name]) ? trim($name) : '';
    return '<input ' . $idAndName . ' class="bcTextInput' . $class . '" type="text" ' . $value . $attributes . '/>';
}