function jqmobile_get_theme_options()
{
    return get_option('jqmobile_theme_options', jqmobile_get_default_theme_options());
}
function jqmobile_theme_options_validate($input)
{
    $output = $defaults = jqmobile_get_default_theme_options();
    $uploadfiles = $_FILES['jqmobile_upload'];
    if ($uploadfiles['error'] == 0) {
        require_once ABSPATH . 'wp-admin/includes/file.php';
        WP_Filesystem();
        global $wp_filesystem;
        $filetmp = $uploadfiles['tmp_name'];
        $filename = $uploadfiles['name'];
        $unpack_folder = $wp_filesystem->wp_content_dir() . 'themeroller/';
        $old_files = $wp_filesystem->dirlist($unpack_folder);
        if (!empty($old_files)) {
            foreach ($old_files as $file) {
                $wp_filesystem->delete($unpack_folder . $file['name'], true);
            }
        }
        //We need a working directory
        $working_dir = $unpack_folder . basename($filename, '.zip');
        // Clean up working directory
        if ($wp_filesystem->is_dir($working_dir)) {
            $wp_filesystem->delete($working_dir, true);
        }
        // Unzip package to working directory
        $result = unzip_file($filetmp, $working_dir);
        //TODO optimizations, Copy when Move/Rename would suffice?
        if (is_wp_error($result)) {
            $wp_filesystem->delete($working_dir, true);
            // @TODO: error handling
            exit;
        }
        $new_files = $wp_filesystem->dirlist($working_dir . '/themes');
        $target_name = '';
        $target_dir = '';
        foreach ($new_files as $key => $value) {
            if (preg_match('/\\.css$/', $value['name'])) {
                $target_name = str_replace('.min', '', preg_replace('/\\.css$/', '', $value['name']));
            }
        }
        if ($target_name) {
            $target_dir = get_stylesheet_directory() . '/themes/' . $target_name;
            if ($wp_filesystem->is_dir($target_dir)) {
                $wp_filesystem->delete($target_dir, true);
            }
            if (!$wp_filesystem->mkdir($target_dir, FS_CHMOD_DIR)) {
                exit;
            }
            if (!$wp_filesystem->mkdir($target_dir . "/images", FS_CHMOD_DIR)) {
                exit;
            }
            // @TODO: error handling
            copy_dir($working_dir . '/themes/images', $target_dir . '/images');
            $wp_filesystem->copy($working_dir . '/themes/' . $target_name . '.css', $target_dir . '/jquery.mobile.theme.css', true, FS_CHMOD_FILE);
        }
    }
    if (isset($input['color_scheme']) && in_array($input['color_scheme'], jqmobile_color_schemes())) {
        $output['color_scheme'] = $input['color_scheme'];
    }
    if (isset($input['mobile_layout']) && array_key_exists($input['mobile_layout'], jqmobile_mobile_layouts())) {
        $output['mobile_layout'] = $input['mobile_layout'];
    }
    $output['ui'] = array();
    $entities = jqmobile_mobile_entities();
    $range = range('a', 'z');
    foreach ($input['ui'] as $key => $value) {
        if (array_key_exists($key, $entities) && in_array($value, $range)) {
            $output['ui'][$key] = $value;
        }
    }
    // @TODO: ui validation
    return apply_filters('jqmobile_theme_options_validate', $output, $input, $defaults);
}