    // showBody should be overriden by derived viewers
function showBody(record, rowIndex, p, ds){
    return 'x-grid3-row-collapsed';
}

function hideField (field){
    field.disable(); // for validation
    field.setVisible(false);
        // hide container and children (including label if applicable)
    field.getEl().up('.x-form-item').setDisplayed(false);
}
function showField (field){
    field.setVisible(true);
    field.enable();
        // show entire container and children (including label if applicable)
    field.getEl().up('.x-form-item').setDisplayed(true);
}
function toggleDetails(btn, pressed){
    var view = grid.getView();
    view.showPreview = pressed;
    view.refresh();
}
function doJSON(stringData) {
    try {
        var jsonData = Ext.util.JSON.decode(stringData);
        return jsonData;
    }
    catch (err) {
        Ext.Msg.show({title:'Failed ',msg:stringData,
                              minWidth:600,buttons: Ext.Msg.OK,icon:Ext.MessageBox.ERROR});
    }
}
