function editMetaDataRow(MetaDataValue $value, MetaDataType $category, array $descendant_type_sets = array())
{
    $vid = $value->getID();
    ob_start();
    ?>
	<tr class="value_edit" id="value_edit_<?php 
    echo $vid;
    ?>
">
		<td class="control"><input type="checkbox" title="Delete record" class="delete_btn" id="delete_<?php 
    echo $vid;
    ?>
" name="value[<?php 
    echo $vid;
    ?>
][delete]" value="1" /></td>
		<td><?php 
    if ($descendant_type_sets) {
        ?>
			<select name="value[<?php 
        echo $vid;
        ?>
][type]">
				<?php 
        foreach ($descendant_type_sets as $type_set) {
            $type = end($type_set);
            $selected = $type === $value->getType();
            echo build_option($type->getID(), html_encode(implode(" > ", $type_set)), $selected);
        }
        ?>
			</select>
			<?php 
    } else {
        ?>
			<input type="hidden" name="value[<?php 
        echo $vid;
        ?>
][type]" value="<?php 
        echo $category->getID();
        ?>
" />
			<?php 
    }
    ?>
		</td>
		<td><input type="text" name="value[<?php 
    echo $vid;
    ?>
][value]" value="<?php 
    echo html_encode($value->getValue());
    ?>
" /></td>
		<td><input type="text" name="value[<?php 
    echo $vid;
    ?>
][notes]" value="<?php 
    echo nl2br(html_encode($value->getNotes()));
    ?>
" /></td>
		<td><input type="text" class="date" id="value_<?php 
    echo $vid;
    ?>
_effective_date" name="value[<?php 
    echo $vid;
    ?>
][effective_date]" value="<?php 
    echo ($eff_date = $value->getEffectiveDate()) ? date("Y-m-d", $eff_date) : "";
    ?>
" /></td>
		<td><input type="text" class="date" id="value_<?php 
    echo $vid;
    ?>
_expiry_date" name="value[<?php 
    echo $vid;
    ?>
][expiry_date]" value="<?php 
    echo ($exp_date = $value->getExpiryDate()) ? date("Y-m-d", $exp_date) : "";
    ?>
" /></td>
	</tr>
	<?php 
    return ob_get_clean();
}