function renderSLBEntityCell($cell, $highlighted = FALSE)
{
    $class = "slbcell realm-{$cell['realm']} id-{$cell['id']}";
    $a_class = $highlighted ? 'highlight' : '';
    echo "<table class='{$class}'>";
    switch ($cell['realm']) {
        case 'object':
            echo "<tr><td><a class='{$a_class}' href='index.php?page=object&object_id={$cell['id']}'>{$cell['dname']}</a>";
            echo "</td></tr><tr><td>";
            printImageHREF('LB');
            echo "</td></tr>";
            break;
        case 'ipv4vs':
            echo "<tr><td rowspan=3 width='5%'>";
            printImageHREF('VS');
            echo "</td><td>";
            echo "<a class='{$a_class}' href='index.php?page=ipv4vs&vs_id={$cell['id']}'>";
            echo $cell['dname'] . "</a></td></tr><tr><td>";
            echo $cell['name'] . '</td></tr>';
            break;
        case 'ipvs':
            echo "<tr><td rowspan=3 width='5%'>";
            printImageHREF('VS');
            echo "</td><td>";
            echo "<a class='{$a_class}' href='index.php?page=ipvs&vs_id={$cell['id']}'>";
            echo $cell['name'] . "</a></td></tr>";
            break;
        case 'ipv4rspool':
            echo "<tr><td>";
            echo "<a class='{$a_class}' href='index.php?page=ipv4rspool&pool_id={$cell['id']}'>";
            echo !strlen($cell['name']) ? "ANONYMOUS pool [{$cell['id']}]" : stringForTD($cell['name']);
            echo "</a></td></tr><tr><td>";
            printImageHREF('RS pool');
            if ($cell['rscount']) {
                echo ' <small>(' . $cell['rscount'] . ')</small>';
            }
            echo "</td></tr>";
            break;
    }
    echo "<tr><td>";
    echo count($cell['etags']) ? "<small>" . serializeTags($cell['etags']) . "</small>" : '&nbsp;';
    echo "</td></tr></table>";
}
function renderSimpleTableWithOriginEditor($rows, $column)
{
    function printNewitemTR($column)
    {
        printOpFormIntro('add');
        echo '<tr>';
        echo '<td>&nbsp;</td>';
        echo '<td class=tdleft>' . getImageHREF('create', 'create new', TRUE) . '</td>';
        echo "<td><input type=text size={$column['width']} name={$column['value']}></td>";
        echo '<td class=tdleft>' . getImageHREF('create', 'create new', TRUE) . '</td>';
        echo '</tr></form>';
    }
    echo '<table class=widetable border=0 cellpadding=5 cellspacing=0 align=center>';
    echo "<tr><th>Origin</th><th>&nbsp;</th><th>{$column['header']}</th><th>&nbsp;</th></tr>";
    if (getConfigVar('ADDNEW_AT_TOP') == 'yes') {
        printNewitemTR($column);
    }
    foreach ($rows as $row) {
        echo '<tr>';
        if ($row['origin'] == 'default') {
            echo '<td>' . getImageHREF('computer', 'default') . '</td>';
            echo '<td>&nbsp;</td>';
            echo '<td>' . stringForTD($row[$column['value']], $column['width']) . '</td>';
            echo '<td>&nbsp;</td>';
        } else {
            printOpFormIntro('upd', array($column['key'] => $row[$column['key']]));
            echo '<td>' . getImageHREF('favorite', 'custom') . '</td>';
            echo '<td>';
            if (array_key_exists('refc', $row) && $row['refc'] > 0) {
                echo getImageHREF('nodestroy', "referenced {$row['refc']} times");
            } else {
                echo getOpLink(array('op' => 'del', $column['key'] => $row[$column['key']]), '', 'destroy', 'remove');
            }
            echo '</td>';
            echo "<td><input type=text size={$column['width']} name={$column['value']} value='" . stringForTextInputValue($row[$column['value']], $column['width']) . "'></td>";
            echo '<td>' . getImageHREF('save', 'Save changes', TRUE) . '</td>';
            echo '</form>';
        }
        echo '</tr>';
    }
    if (getConfigVar('ADDNEW_AT_TOP') != 'yes') {
        printNewitemTR($column);
    }
    echo '</table>';
}
function renderPatchCableHeapAmount()
{
    echo '<table class=widetable border=0 cellpadding=5 cellspacing=0 align=center>';
    echo '<tr><th colspan=3>Amount</th><th>End 1</th><th>Cable type</th><th>End 2</th><th>Length</th><th>Description</th><th>&nbsp;</th></tr>';
    foreach (getPatchCableHeapSummary() as $heap) {
        printOpFormIntro('set', array('id' => $heap['id']));
        echo '<tr>';
        echo '<td>';
        if ($heap['amount'] > 0) {
            echo getOpLink(array('op' => 'dec', 'id' => $heap['id']), '', 'delete', 'consume');
        } else {
            echo getImageHREF('nodelete');
        }
        echo '</td>';
        echo "<td><input type=text size=7 name=amount value='{$heap['amount']}'></td>";
        echo '<td>' . getOpLink(array('op' => 'inc', 'id' => $heap['id']), '', 'add', 'replenish') . '</td>';
        echo '<td>' . stringForTD($heap['end1_connector'], 32) . '</td>';
        echo '<td>' . stringForTD($heap['pctype'], 255) . '</td>';
        echo '<td>' . stringForTD($heap['end2_connector'], 32) . '</td>';
        echo "<td class=tdright>{$heap['length']}</td>";
        echo '<td>' . stringForTD($heap['description'], 255) . '</td>';
        echo '<td>' . getImageHREF('save', 'Save changes', TRUE) . '</td>';
        echo '</tr></form>';
    }
    echo '</table>';
}
function dumpArray($arr)
{
    echo '<table class="exceptionParametersDump">';
    foreach ($arr as $key => $value) {
        echo '<tr><th>' . stringForTD($key) . '</th><td>' . stringForTD($value, 100) . '</td></tr>';
    }
    echo '</table>';
}
function renderMuninConfig()
{
    $servers = getMuninServers();
    startPortlet('Munin servers (' . count($servers) . ')');
    echo '<table cellspacing=0 cellpadding=5 align=center class=widetable>';
    echo '<tr><th>base URL</th><th>graph(s)</th></tr>';
    foreach ($servers as $server) {
        echo '<tr align=left valign=top><td>' . stringForTD($server['base_url']) . '</td>';
        echo "<td class=tdright>{$server['num_graphs']}</td></tr>";
    }
    echo '</table>';
    finishPortlet();
}