var addrbooksession =Components.classes["@mozilla.org/addressbook/services/session;1"].getService().QueryInterface(Components.interfaces.nsIAddrBookSession);
function WaitUntilDocumentIsLoaded()
{
try {
addrbooksession.ensureDocumentIsLoaded(document);
}
catch (ex) {
dump("failed to flush pending notifications: " + ex + "\n");
}
}
function GetResultsTreeChildren()
{
if (resultsTree && resultsTree.childNodes) {
for (var index = resultsTree.childNodes.length - 1; index >= 0; index--) {
if (resultsTree.childNodes[index].localName == "treechildren")
return(resultsTree.childNodes[index]);
}
}
return null;
}
function GetResultsTreeItem(row)
{
var treechildren = GetResultsTreeChildren();
if (treechildren && row > 0) {
var treeitems = treechildren.getElementsByTagName("treeitem");
if (treeitems && treeitems.length >= row)
return treeitems[row-1];
}
return null;
}
function SortResultPane(column, sortKey)
{
var node = document.getElementById(column);
if (!node)
return false;
var sortDirection = "ascending";
var currentDirection = node.getAttribute("sortDirection");
if (currentDirection == "ascending")
sortDirection = "descending";
else
sortDirection = "ascending";
UpdateSortIndicator(column, sortDirection);
DoSort(column, sortKey, sortDirection);
SaveSortSetting(column, sortKey, sortDirection);
return true;
}
function DoSort(column, key, direction)
{
var isupports = Components.classes["@mozilla.org/xul/xul-sort-service;1"].getService();
if (!isupports)
return false;
var xulSortService = isupports.QueryInterface(Components.interfaces.nsIXULSortService);
if (!xulSortService)
return false;
var node = document.getElementById(column);
if (node) {
var selectionArray = RememberResultsTreeSelection();
if (selectionArray.length) {
xulSortService.Sort(node, key, direction);
ClearResultsTreeSelection();
WaitUntilDocumentIsLoaded();
RestoreResultsTreeSelection(selectionArray);
}
else {
try {
xulSortService.Sort(node, key, direction);
WaitUntilDocumentIsLoaded();
}
catch(ex) {
dump("failed to do sort\n");
}
}
}
return true;
}
function SortToPreviousSettings()
{
if (dirTree && resultsTree) {
var ref = resultsTree.getAttribute("ref");
var folder = document.getElementById(ref);
if (folder) {
var column = folder.getAttribute("sortColumn");
var key = folder.getAttribute("sortKey");
var direction = folder.getAttribute("sortDirection");