/**
     * Display the user edit fields
     * 
     * @param unknown_type $user
     */
    function display_custom_user_fields($user = null, $fields = null)
    {
        //initializing variables
        if (!is_null($user)) {
            $user = get_userdata($user->ID);
        }
        $is_administration = false;
        if (is_null($fields)) {
            $is_administration = true;
        }
        if ($is_administration) {
            echo "<style>", ".field_wrapper label {display:block;position:relative;float:left;width:220px;}", ".typetext input {width: 25em;}", ".typecheckbox input {margin-right:200px;position:relative;float:left;}", ".field_wrapper span {display:block;padding-left:220px;}", ".field_wrapper {padding: 10px;}", ".typetextarea textarea {width: 500px;}", ".field_wrapper .profile_description{font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;font-size: 12px;font-style: italic;color: #666;}", "</style>", "<h3>Additional Details</h3>";
            //initializing variables
            $currentUser = new WP_User($user->ID);
            $fields = array();
            foreach ($currentUser->roles as $role) {
                $fields = wp_parse_args($fields, get_custom_user_fields($role));
            }
        }
        //reasons to fail
        if (empty($fields)) {
            return false;
        }
        // Use nonce for verification
        echo '<div class="nonce_wrapper"><input type="hidden" name="user_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" /></div>', '<input type="hidden" name="user_type" value="', BRequest::getVar('user_type'), '" />';
        foreach ($fields as $field) {
            if (!current_user_can('edit_users') && $field['id'] == 'role') {
                continue;
            }
            // get current post meta data
            $unique = md5(microtime());
            if (!is_null($user) && isset($user->{$field['id']})) {
                $meta = $user->{$field['id']};
            } elseif (!is_null($user)) {
                $meta = get_user_meta($user->ID, $field['id'], true);
            } else {
                $meta = BRequest::getVar($field['id'], '');
            }
            echo '<div class="field_wrapper div', $field['id'], ' type', $field['type'], '">';
            if ($field['type'] != 'password') {
                echo '<label for="', $field['id'], '">', $field['name'], '</label>';
            }
            switch ($field['type']) {
                case 'password':
                    echo '<label for="', $field['id'], '">', $field['name'], '</label>', '<input type="password" name="pass1" id="pass1" size="16" value="" autocomplete="off">', '<span class="description">If you would like to change the password type a new one. Otherwise leave this blank.</span><br>', '<input type="password" name="pass2" id="pass2" size="16" value="" autocomplete="off">', '<span class="description">Type your new password again.</span><br>', '<div id="pass-strength-result">Strength indicator</div>', '<p class="description indicator-hint">Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).</p>', '<script type="text/javascript"> /* <![CDATA[ */
					var pwsL10n = {
						empty: "Strength indicator",
						short: "Very weak",
						bad: "Weak",
						good: "Medium",
						strong: "Strong",
						mismatch: "Mismatch"
					};
					try{convertEntities(pwsL10n);}catch(e){};
					/* ]]> */
					</script>', '<script type="text/javascript" src="', get_bloginfo('url'), '/wp-admin/load-scripts.php?c=1&load=jquery,hoverIntent,common,jquery-color,user-profile,password-strength-meter"></script>';
                    break;
                case 'address':
                    echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>', "\n", '<span class="profile_description">', $field['desc'], '</span>';
                    break;
                case 'email':
                    echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" class="regular-text" />', "\n";
                    echo '<input type="text" name="', $field['id'], '1" id="', $field['id'], '" value="', $default = "Please confirm your email", '" class="regular-text" onBlur="if (this.value == \'\') this.value = \'', $default, '\';"  onFocus="if (this.value == \'', $default, '\') this.value = \'\';" />', "\n", '<span class="profile_description">', $field['desc'], '</span>';
                    break;
                case 'text':
                    $disabled = '';
                    if (is_user_logged_in() && $field['id'] == 'user_login') {
                        $disabled = 'readonly="true"';
                    }
                    echo '<input ', $disabled, ' type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" class="regular-text" />', "\n", '<span class="profile_description">', $field['desc'], '</span>';
                    break;
                case 'textarea':
                    echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="30" rows="5">', $meta ? $meta : $field['std'], '</textarea>', "\n", '<span class="profile_description">', $field['desc'], '</span>';
                    break;
                case 'select':
                    echo '<select name="', $field['id'], '" id="', $field['id'], '">';
                    if (!is_array($field['options'])) {
                        $field['options'] = $field['options']();
                    }
                    foreach ($field['options'] as $key => $option) {
                        if (is_int($key)) {
                            $key = $option;
                        }
                        echo '<option ', $meta == $option ? ' selected="selected"' : '', ' value="', $key, '">', $option, '</option>';
                    }
                    echo '</select>';
                    break;
                case 'radio':
                    foreach ($field['options'] as $option) {
                        echo '<input type="radio" name="', $field['id'], '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />', $option['name'];
                    }
                    echo '<br/>', $field['desc'];
                    break;
                case 'checkbox':
                    echo '<input type="hidden" name="', $field['id'], '" value="" /> ';
                    echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta && $meta != 'false' ? ' checked="checked"' : '', ' />', '<span class="profile_description">', $field['desc'], '</span>';
                    break;
                case 'editor':
                    echo '<div style="border:1px solid #DFDFDF;border-collapse: separate;border-top-left-radius: 6px 6px;border-top-right-radius: 6px 6px;">', '<textarea rows="10" class="theEditor" cols="40" name="', $field['id'], '" id="' . $unique . '"></textarea>', '</div>', '<script type="text/javascript">edCanvas = document.getElementById(\'' . $unique . '\');</script>', "\n", $field['desc'];
                    break;
            }
            echo '</div>';
        }
    }
/**
 * Displays all of the user profile fields.
 * 
 * @param unknown_type $userid
 */
function display_profile_fields()
{
    //initializing variables
    $user =& get_user();
    $fields = get_custom_user_fields($user->roles[0]);
    $defaults = bum_get_default_profile_fields();
    $fields = wp_parse_args($fields, $defaults);
    bum_display_custom_user_fields($user, $fields);
}
/**
 * Save user meta data
 * 
 * @param $user_id
 */
function bum_save_user_meta_data($user_id, $role = false)
{
    //initializing variables
    $user = new WP_User($user_id);
    $fields = array();
    $role = $role === false ? $user->roles[0] : $role;
    $fields = get_custom_user_fields($role);
    //reasons to fail
    /*if (!isset($_REQUEST['user_meta_box_nonce']) || empty($fields)) return false;
    	
    	// verify nonce
    	if (!wp_verify_nonce($_REQUEST['user_meta_box_nonce'], basename(__FILE__))) {
    		return $user_id;
    	}*/
    // check autosave
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return $user_id;
    }
    //update metas
    if (is_array($fields)) {
        foreach ($fields as $field) {
            $info = bum_get_field_info($field);
            $fid = 'bum_' . $info['id'];
            if (!isset($_POST[$fid]) && !isset($_POST[$fid . '[]'])) {
                continue;
            }
            $old = $info['meta_value'];
            $new = $_REQUEST[$fid];
            if ($new && $new != $old) {
                if (is_array($new)) {
                    $new = implode('|', $new);
                }
                update_user_meta($user_id, $fid, $new);
            } elseif ('' == $new && $old) {
                delete_user_meta($user_id, $fid, $old);
            }
        }
    }
    return true;
}