This seems to be working 
function OnBeforeFolderChange(beforeFolderChangeData) {
if (beforeFolderChangeData.action == "refresh") return;
var tab = beforeFolderChangeData.tab;
var selected = tab.selected;
var path = "SavedSelection:" + tab.path;
if (selected.count == 0) {
DOpus.Vars.Delete(path);
} else {
var file = selected(0).realpath.filepart;
if (file.indexOf("|") >= 0) file = file.split("|")[1];
DOpus.Vars.Set(path, file);
DOpus.Vars(path).persist = true;
}
}
function OnAfterFolderChange(afterFolderChangeData) {
var ignoreActions = DOpus.Create.StringSetI("parent", "back", "forward", "refresh");
if (ignoreActions.exists(afterFolderChangeData.action)) return;
var tab = afterFolderChangeData.tab;
var path = "SavedSelection:" + tab.path;
var cmd = DOpus.Create.Command();
cmd.SetSourceTab(tab);
if (DOpus.Vars.Exists(path))
cmd.RunCommand("Select \"" + DOpus.Vars.Get(path) + "\" EXACT DESELECTNOMATCH MAKEVISIBLE");
else
cmd.RunCommand("Select First");
}