function nattywp_validate_options($input)
{
    $valid_input = array();
    $settings_output = nattywp_get_settings();
    $options = $settings_output['nattywp_page_fields'];
    $nattywp_option_name = $settings_output['nattywp_option_name'];
    $settings_group = $settings_output['page_option_name'];
    $input = $input[$settings_group];
    $valid_input[$settings_group] = $valid_input;
    $merged_options = get_option($nattywp_option_name);
    foreach ($options as $option) {
        if (isset($option['filter'])) {
            switch ($option['filter']) {
                case 'multi':
                    if (isset($input[$option['name']])) {
                        $valid_input[$settings_group][$option['name']] = $input[$option['name']];
                    } else {
                        $valid_input[$settings_group][$option['name']] = $option['default'];
                    }
                    break;
                case 'nohtml':
                    $valid_input[$settings_group][$option['name']] = sanitize_text_field($input[$option['name']]);
                    $valid_input[$settings_group][$option['name']] = strip_html_tags($valid_input[$settings_group][$option['name']]);
                    $valid_input[$settings_group][$option['name']] = addslashes($valid_input[$settings_group][$option['name']]);
                    break;
                case 'url':
                    $input[$option['name']] = trim($input[$option['name']]);
                    // trim whitespace
                    $valid_input[$settings_group][$option['name']] = esc_url_raw($input[$option['name']]);
                    break;
                case 'num':
                    $input[$option['name']] = trim($input[$option['name']]);
                    // trim whitespace
                    $valid_input[$settings_group][$option['name']] = is_numeric($input[$option['name']]) ? $input[$option['name']] : $option['default'];
                    // register error
                    if (is_numeric($input[$option['name']]) == FALSE) {
                        add_settings_error($option['name'], 'nattywp_txt_numeric_error', __('Expecting a Numeric value! Please fix.', 'silesia'), 'error');
                    }
                    break;
                default:
                    $valid_input[$settings_group][$option['name']] = $input[$option['name']];
                    break;
            }
        } else {
            $valid_input[$settings_group][$option['name']] = $input[$option['name']];
        }
    }
    if (!is_array($merged_options)) {
        $merged_options = array();
    }
    return array_merge($merged_options, $valid_input);
}
function nattywp_form_color_field_fn($args = array())
{
    extract($args);
    $settings_output = nattywp_get_settings();
    $nattywp_option_name = $settings_output['nattywp_option_name'];
    $settings_group = $settings_output['page_option_name'];
    $options = get_option($nattywp_option_name);
    if (isset($options[$settings_group])) {
        $options = $options[$settings_group];
    }
    // pass the default value
    if (!isset($options[$name])) {
        $options[$name] = $default;
    }
    // render form elements
    switch ($type) {
        case 'color':
        case 'color:hover':
        case 'background-color':
            $options[$name] = stripslashes($options[$name]);
            $options[$name] = esc_attr($options[$name]);
            echo "<input class='picker-input' type='text' size=\"7\" maxlenght=\"7\" id='{$name}' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]' value='{$options[$name]}' onchange=\"get_option('{$name}')\" />";
            echo "<div class='picker' id='myRainbow_" . $name . "_input'><div class='overlay'></div></div>\n";
            break;
        case 'font-size':
            echo "<select id='{$name}' class='select' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]'>";
            foreach ($sizes as $title => $item) {
                $value = esc_attr($item, 'silesia');
                $item = esc_html($title, 'silesia');
                echo "<option value='{$value}'" . selected($options[$name], $value) . ">{$item}</option>";
            }
            echo "</select>";
            break;
        case 'background-image':
            echo "<input class='background-input' type='text' id='{$name}' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]' value='{$options[$name]}' />";
            break;
        case 'select-custom':
            echo "<select id='{$name}' class='select' onchange=\"kDefaults()\" name='" . $nattywp_option_name . "[{$settings_group}][{$name}]'>";
            foreach ($associated as $title => $item) {
                $value = esc_attr($item, 'silesia');
                $item = esc_html($title, 'silesia');
                echo "<option value='{$value}'" . selected($options[$name], $value) . ">{$item}</option>";
            }
            echo "</select>";
            break;
    }
}
function nattywp_register_settings()
{
    $settings_output = nattywp_get_settings();
    $nattywp_option_name = $settings_output['nattywp_option_name'];
    // validate
    register_setting($nattywp_option_name, $nattywp_option_name, 'nattywp_validate_options');
    // sections settings
    if (!empty($settings_output['nattywp_page_sections'])) {
        foreach ($settings_output['nattywp_page_sections'] as $id => $title) {
            add_settings_section($title[0], $title['title'], 'nattywp_section_fn', __FILE__);
        }
    }
    //fields
    if (!empty($settings_output['nattywp_page_fields'])) {
        foreach ($settings_output['nattywp_page_fields'] as $option) {
            add_settings_field($option['name'], $option['title'], $settings_output['nattywp_form_field'], __FILE__, $option['section'][0], $option);
        }
    }
}
function nattywp_form_field_fn($args = array())
{
    extract($args);
    $settings_output = nattywp_get_settings();
    $nattywp_option_name = $settings_output['nattywp_option_name'];
    $settings_group = $settings_output['page_option_name'];
    $options = get_option($nattywp_option_name);
    if (isset($options[$settings_group])) {
        $options = $options[$settings_group];
    }
    // pass the default value
    if (!isset($options[$name])) {
        $options[$name] = $default;
    }
    // render form elements
    switch ($type) {
        case 'input':
            $options[$name] = stripslashes($options[$name]);
            $options[$name] = esc_attr($options[$name]);
            echo "<input class='regular-text' type='text' id='{$name}' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]' value='{$options[$name]}' />";
            echo $desc != '' ? "<div class='description'>{$desc}</div>" : "";
            break;
        case 'textarea':
            $options[$name] = stripslashes($options[$name]);
            $options[$name] = esc_html($options[$name]);
            echo "<textarea class='textarea' type='text' id='{$name}' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]' rows='5' cols='30'>{$options[$name]}</textarea>";
            echo $desc != '' ? "<div class='description'>{$desc}</div>" : "";
            break;
        case 'select':
            echo "<select id='{$name}' class='select' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]'>";
            foreach ($associated as $title => $item) {
                $value = esc_attr($item, 'silesia');
                $item = esc_html($title, 'silesia');
                echo "<option value='{$value}'" . selected($options[$name], $value) . ">{$item}</option>";
            }
            echo "</select>";
            echo $desc != '' ? "<div class='description'>{$desc}</div>" : "";
            break;
        case 'select-bool':
            $boolean_var = array(__('Yes', 'silesia') => 'yes', __('No', 'silesia') => 'no');
            echo "<select id='{$name}' class='select' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]'>";
            foreach ($boolean_var as $title => $item) {
                $value = esc_attr($item, 'silesia');
                $item = esc_html($title, 'silesia');
                echo "<option value='{$value}'" . selected($options[$name], $value) . ">{$item}</option>";
            }
            echo "</select>";
            echo $desc != '' ? "<div class='description'>{$desc}</div>" : "";
            break;
        case 'upload':
            if (!isset($btn_name)) {
                $btn_name = __('Upload Image', 'silesia');
            }
            echo "<div class='form-uploader'><input class='upl-inp' name='" . $nattywp_option_name . "[{$settings_group}][{$name}]' id='" . $name . "_upload' type='text' value='{$options[$name]}' />";
            echo '<div class="upload_button_div"><span class="button image_upload_button" id="' . $name . '">' . $btn_name . '</span>';
            if (!empty($options[$name])) {
                $hide = '';
            } else {
                $hide = 'hide';
            }
            echo '<span class="button image_reset_button ' . $hide . '" id="reset_' . $name . '" title="' . $name . '">' . __('Remove', 'silesia') . '</span></div>' . "\n";
            if (!empty($options[$name])) {
                echo '<div class="clear"></div>' . "\n";
                echo '<img class="custom-logo-image" id="image_' . $name . '" src="' . $options[$name] . '" alt="" />';
            }
            echo '<div class="clear"></div> </div>' . "\n";
            echo $desc != '' ? "<div class='description'>{$desc}</div>" : "";
            break;
        case 'multi-select':
            echo "<select multiple=\"true\" size=\"7\" style=\"height:150px;\" id='{$name}' class='multi-select' name='" . $nattywp_option_name . "[{$settings_group}][{$name}][]'>";
            foreach ($associated as $title => $item) {
                $value = esc_attr($item, 'silesia');
                $item = esc_html($title, 'silesia');
                echo "<option value='{$value}'" . selected($options[$name], $value) . ">{$item}</option>";
            }
            echo "</select>";
            echo $desc != '' ? "<div class='description'>{$desc}</div>" : "";
            break;
        case 'sort-item':
            $pn_pages = get_pages('');
            foreach ($pn_pages as $pag) {
                $pn_pag[] = array($pag->ID, $pag->post_title);
            }
            echo "<select id='{$name}' class=\"multiselect\" multiple=\"multiple\" name='" . $nattywp_option_name . "[{$settings_group}][{$name}][]'>";
            foreach ($pn_pag as $key => $arr) {
                if (is_array($options[$name])) {
                    echo "<option value=\"" . $arr[0] . "\"" . selected(in_array($arr[0], $options[$name]), true) . ">" . $arr[1] . "</option>\n";
                } else {
                    echo "<option value=\"" . $arr[0] . "\"" . selected($arr[0], 'no') . ">" . $arr[1] . "</option>\n";
                }
            }
            echo "</select><div id=\"switcher\"></div>";
            echo $desc != '' ? "<div class='description inline'>{$desc}</div>" : "";
            break;
    }
}