2009-07-19 18:41:42 +02:00
|
|
|
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2009-06-13 01:39:02 +02:00
|
|
|
|
|
|
|
var d;
|
2008-08-28 16:48:45 +02:00
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
function onSearchFormSubmit() {
|
|
|
|
var searchValue = $("searchValue");
|
2009-06-01 19:29:31 +02:00
|
|
|
var encodedValue = encodeURI(searchValue.value);
|
2009-06-15 16:13:39 +02:00
|
|
|
|
2009-06-15 17:58:47 +02:00
|
|
|
if (encodedValue.blank()) {
|
|
|
|
checkAjaxRequestsState();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
var url = (UserFolderURL
|
2009-09-10 23:00:38 +02:00
|
|
|
+ "usersSearch?search=" + encodedValue);
|
2009-06-15 17:58:47 +02:00
|
|
|
if (document.userFoldersRequest) {
|
|
|
|
document.userFoldersRequest.aborted = true;
|
|
|
|
document.userFoldersRequest.abort();
|
|
|
|
}
|
|
|
|
document.userFoldersRequest
|
|
|
|
= triggerAjaxRequest(url, usersSearchCallback);
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
2009-06-15 16:13:39 +02:00
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2008-11-24 05:10:38 +01:00
|
|
|
function usersSearchCallback(http) {
|
2009-09-04 23:32:53 +02:00
|
|
|
document.userFoldersRequest = null;
|
|
|
|
var div = $("folders");
|
|
|
|
if (http.status == 200) {
|
|
|
|
var response = http.responseText;
|
|
|
|
buildUsersTree(div, http.responseText);
|
|
|
|
}
|
|
|
|
else if (http.status == 404)
|
|
|
|
div.update();
|
2008-11-24 05:10:38 +01:00
|
|
|
}
|
2008-08-28 16:48:45 +02:00
|
|
|
|
2008-11-24 05:10:38 +01:00
|
|
|
function addUserLineToTree(tree, parent, line) {
|
|
|
|
var icon = ResourcesURL + '/busy.gif';
|
|
|
|
|
|
|
|
var userInfos = line.split(":");
|
|
|
|
var email = userInfos[1] + " <" + userInfos[2] + ">";
|
2009-03-19 21:58:53 +01:00
|
|
|
if (userInfos[3] && !userInfos[3].empty())
|
2008-11-24 05:10:38 +01:00
|
|
|
email += ", " + userInfos[3]; // extra contact info
|
|
|
|
tree.add(parent, 0, email, 0, '#', userInfos[0], 'person',
|
|
|
|
'', '',
|
|
|
|
ResourcesURL + '/abcard.gif',
|
|
|
|
ResourcesURL + '/abcard.gif');
|
|
|
|
if (window.opener.userFolderType != "user") {
|
2009-09-11 22:25:06 +02:00
|
|
|
tree.add(parent + 1, parent, label ("Please wait..."), 0, '#', null,
|
2008-11-24 05:10:38 +01:00
|
|
|
null, '', '', icon, icon);
|
|
|
|
}
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
2009-06-13 01:39:02 +02:00
|
|
|
function buildUsersTree(treeDiv, response) {
|
2008-08-28 16:48:45 +02:00
|
|
|
d = new dTree("d");
|
|
|
|
d.config.hideRoot = true;
|
|
|
|
d.icon.root = ResourcesURL + '/tbtv_account_17x17.gif';
|
|
|
|
d.icon.folder = ResourcesURL + '/tbtv_leaf_corner_17x17.png';
|
|
|
|
d.icon.folderOpen = ResourcesURL + '/tbtv_leaf_corner_17x17.png';
|
|
|
|
d.icon.node = ResourcesURL + '/tbtv_leaf_corner_17x17.png';
|
|
|
|
d.icon.line = ResourcesURL + '/tbtv_line_17x17.gif';
|
|
|
|
d.icon.join = ResourcesURL + '/tbtv_junction_17x17.gif';
|
|
|
|
d.icon.joinBottom = ResourcesURL + '/tbtv_corner_17x17.gif';
|
|
|
|
d.icon.plus = ResourcesURL + '/tbtv_plus_17x17.gif';
|
|
|
|
d.icon.plusBottom = ResourcesURL + '/tbtv_corner_plus_17x17.gif';
|
|
|
|
d.icon.minus = ResourcesURL + '/tbtv_minus_17x17.gif';
|
|
|
|
d.icon.minusBottom = ResourcesURL + '/tbtv_corner_minus_17x17.gif';
|
|
|
|
d.icon.nlPlus = ResourcesURL + '/tbtv_corner_plus_17x17.gif';
|
|
|
|
d.icon.nlMinus = ResourcesURL + '/tbtv_corner_minus_17x17.gif';
|
|
|
|
d.icon.empty = ResourcesURL + '/empty.gif';
|
2009-08-31 21:52:47 +02:00
|
|
|
d.preload ();
|
2008-08-28 16:48:45 +02:00
|
|
|
d.add(0, -1, '');
|
|
|
|
|
2008-11-24 15:53:48 +01:00
|
|
|
var isUserDialog = (window.opener.userFolderType == "user");
|
|
|
|
var multiplier = ((isUserDialog) ? 1 : 2);
|
2008-11-24 05:10:38 +01:00
|
|
|
|
|
|
|
if (response.length) {
|
|
|
|
var lines = response.split("\n");
|
|
|
|
for (var i = 0; i < lines.length; i++) {
|
|
|
|
if (lines[i].length > 0)
|
|
|
|
addUserLineToTree(d, 1 + i * multiplier, lines[i]);
|
|
|
|
}
|
2009-08-31 21:52:47 +02:00
|
|
|
treeDiv.appendChild(d.domObject ());
|
2008-11-24 05:10:38 +01:00
|
|
|
treeDiv.clean = false;
|
2008-11-24 15:53:48 +01:00
|
|
|
for (var i = 0; i < lines.length - 1; i++) {
|
|
|
|
if (lines[i].length > 0) {
|
|
|
|
if (!isUserDialog) {
|
2008-11-24 05:10:38 +01:00
|
|
|
var toggle = $("tgd" + (1 + i * 2));
|
2009-06-15 16:13:39 +02:00
|
|
|
toggle.observe ("click", onUserNodeToggle);
|
2008-11-24 05:10:38 +01:00
|
|
|
}
|
2008-11-24 15:53:48 +01:00
|
|
|
var sd = $("sd" + (1 + i * multiplier));
|
2009-06-15 16:13:39 +02:00
|
|
|
sd.observe("click", onTreeItemClick);
|
2008-11-24 05:10:38 +01:00
|
|
|
}
|
|
|
|
}
|
2008-08-28 16:48:45 +02:00
|
|
|
}
|
2008-11-24 05:10:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function onUserNodeToggle(event) {
|
|
|
|
this.stopObserving("click", onUserNodeToggle);
|
2008-08-28 16:48:45 +02:00
|
|
|
|
2008-11-24 05:10:38 +01:00
|
|
|
var person = this.parentNode.getAttribute("dataname");
|
2009-06-11 21:55:13 +02:00
|
|
|
|
|
|
|
var url = (UserFolderURLForUser(person) + "foldersSearch"
|
|
|
|
+ "?type=" + window.opener.userFolderType);
|
2008-11-24 05:10:38 +01:00
|
|
|
var nodeId = this.getAttribute("id").substr(3);
|
|
|
|
triggerAjaxRequest(url, foldersSearchCallback,
|
|
|
|
{ nodeId: nodeId, user: person });
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
2008-11-24 15:53:48 +01:00
|
|
|
function onTreeItemClick(event) {
|
2008-08-28 16:48:45 +02:00
|
|
|
preventDefault(event);
|
|
|
|
|
|
|
|
var topNode = $("d");
|
|
|
|
if (topNode.selectedEntry)
|
|
|
|
topNode.selectedEntry.deselect();
|
|
|
|
this.selectElement();
|
|
|
|
topNode.selectedEntry = this;
|
|
|
|
|
|
|
|
if (window.opener.userFolderType == "user")
|
|
|
|
$("addButton").disabled = false;
|
|
|
|
else {
|
|
|
|
var dataname = this.parentNode.getAttribute("dataname");
|
2008-11-24 05:10:38 +01:00
|
|
|
if (!dataname)
|
|
|
|
dataname = "";
|
2008-08-28 16:48:45 +02:00
|
|
|
$("addButton").disabled = (dataname.indexOf(":") == -1);
|
|
|
|
};
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
2008-11-24 05:10:38 +01:00
|
|
|
function foldersSearchCallback(http) {
|
2008-02-07 22:51:20 +01:00
|
|
|
if (http.status == 200) {
|
|
|
|
var response = http.responseText;
|
2008-11-24 05:10:38 +01:00
|
|
|
var nodeId = parseInt(http.callbackData["nodeId"]);
|
|
|
|
|
|
|
|
var dd = $("dd" + (nodeId + 2));
|
|
|
|
var indentValue = (dd ? 1 : 0);
|
|
|
|
d.aIndent.push(indentValue);
|
|
|
|
|
|
|
|
var dd = $("dd" + nodeId);
|
|
|
|
if (response.length) {
|
|
|
|
var folders = response.split(";");
|
|
|
|
var user = http.callbackData["user"];
|
|
|
|
|
2009-08-31 21:52:47 +02:00
|
|
|
dd.innerHTML = '';
|
2008-11-24 05:10:38 +01:00
|
|
|
for (var i = 1; i < folders.length - 1; i++)
|
2009-08-31 21:52:47 +02:00
|
|
|
dd.appendChild (addFolderBranchToTree (d, user, folders[i], nodeId, i, false));
|
|
|
|
dd.appendChild (addFolderBranchToTree (d, user, folders[folders.length-1], nodeId,
|
|
|
|
(folders.length - 1), true));
|
|
|
|
//dd.update(str);
|
2008-11-24 05:10:38 +01:00
|
|
|
for (var i = 1; i < folders.length; i++) {
|
|
|
|
var sd = $("sd" + (nodeId + i));
|
2008-11-24 15:53:48 +01:00
|
|
|
sd.observe("click", onTreeItemClick);
|
2008-11-24 05:10:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
2009-09-04 21:31:38 +02:00
|
|
|
dd.innerHTML = '';
|
2009-08-31 21:52:47 +02:00
|
|
|
dd.appendChild(addFolderNotFoundNode (d, nodeId, null));
|
2008-11-24 05:10:38 +01:00
|
|
|
var sd = $("sd" + (nodeId + 1));
|
2008-11-24 15:53:48 +01:00
|
|
|
sd.observe("click", onTreeItemClick);
|
2008-11-24 05:10:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
d.aIndent.pop();
|
2008-02-07 22:51:20 +01:00
|
|
|
}
|
2008-11-24 05:10:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function addFolderBranchToTree(tree, user, folder, nodeId, subId, isLast) {
|
|
|
|
var folderInfos = folder.split(":");
|
|
|
|
var icon = ResourcesURL + '/';
|
|
|
|
if (folderInfos[2] == 'Contact')
|
|
|
|
icon += 'tb-mail-addressbook-flat-16x16.png';
|
|
|
|
else
|
|
|
|
icon += 'calendar-folder-16x16.png';
|
|
|
|
var folderId = user + ":" + folderInfos[1];
|
|
|
|
var name = folderInfos[0]; // name has the format "Folername (Firstname Lastname <email>)"
|
|
|
|
var pos = name.lastIndexOf(' (');
|
|
|
|
if (pos > -1)
|
|
|
|
name = name.substring(0, pos); // strip the part with fullname and email
|
|
|
|
var node = new Node(subId, nodeId, name, 0, '#', folderId,
|
|
|
|
folderInfos[2] + '-folder', '', '', icon, icon);
|
|
|
|
node._ls = isLast;
|
2009-08-31 21:52:47 +02:00
|
|
|
var content = tree.node(node, (nodeId + subId), null);
|
2008-11-24 05:10:38 +01:00
|
|
|
|
|
|
|
return content;
|
|
|
|
}
|
|
|
|
|
|
|
|
function addFolderNotFoundNode (tree, nodeId) {
|
|
|
|
var icon = ResourcesURL + '/icon_unread.gif';
|
2009-09-11 22:25:06 +02:00
|
|
|
var node = new Node(1, nodeId, label ("No possible subscription"), 0, '#',
|
2008-11-24 05:10:38 +01:00
|
|
|
null, null, '', '', icon, icon);
|
|
|
|
node._ls = true;
|
|
|
|
return tree.node(node, (nodeId + 1));
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function onConfirmFolderSelection(event) {
|
2007-07-31 23:14:14 +02:00
|
|
|
var topNode = $("d");
|
2007-08-07 20:14:39 +02:00
|
|
|
if (topNode && topNode.selectedEntry) {
|
2008-02-07 22:51:20 +01:00
|
|
|
var node = topNode.selectedEntry.parentNode;
|
|
|
|
var folder = node.getAttribute("dataname");
|
|
|
|
|
|
|
|
var folderName;
|
|
|
|
if (window.opener.userFolderType == "user") {
|
2008-09-11 20:15:01 +02:00
|
|
|
var span = $(topNode.selectedEntry).down("SPAN.nodeName");
|
|
|
|
var email = (span.innerHTML
|
2008-08-28 16:48:45 +02:00
|
|
|
.replace("<", "<", "g")
|
|
|
|
.replace(">", ">", "g"));
|
2008-02-07 22:51:20 +01:00
|
|
|
folderName = email;
|
|
|
|
}
|
|
|
|
else {
|
2008-09-11 20:15:01 +02:00
|
|
|
var resource = $(topNode.selectedEntry).down("SPAN.nodeName");
|
|
|
|
var user = $(node.parentNode.previousSibling).down("SPAN.nodeName");
|
|
|
|
var email = (user.innerHTML
|
2008-08-28 16:48:45 +02:00
|
|
|
.replace("<", "<", "g")
|
|
|
|
.replace(">", ">", "g"));
|
2008-09-11 20:15:01 +02:00
|
|
|
folderName = resource.innerHTML + ' (' + email + ')';
|
2009-06-02 21:45:07 +02:00
|
|
|
}
|
2008-11-24 15:53:48 +01:00
|
|
|
folderName = folderName.replace(/>,.*(\))?$/, ">)$1", "g");
|
2008-09-11 20:15:01 +02:00
|
|
|
|
2008-02-07 22:51:20 +01:00
|
|
|
var data = { folderName: folderName, folder: folder, window: window };
|
|
|
|
if (parent$(accessToSubscribedFolder(folder)))
|
2009-09-11 22:25:06 +02:00
|
|
|
window.alert(label ("You have already subscribed to that folder!"));
|
2008-02-07 22:51:20 +01:00
|
|
|
else
|
|
|
|
window.opener.subscribeToFolder(window.opener.userFolderCallback, data);
|
|
|
|
}
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
2007-12-05 22:05:04 +01:00
|
|
|
function onFolderSearchKeyDown(event) {
|
2009-09-04 23:32:53 +02:00
|
|
|
if (event.ctrlKey
|
|
|
|
|| event.metaKey
|
|
|
|
|| event.keyCode == Event.KEY_TAB)
|
|
|
|
return;
|
|
|
|
|
2007-12-05 22:05:04 +01:00
|
|
|
var div = $("folders");
|
2009-09-04 23:32:53 +02:00
|
|
|
|
2009-06-15 17:58:47 +02:00
|
|
|
if (!div.clean) {
|
2009-09-04 23:32:53 +02:00
|
|
|
var oldD = $("d"); // the folders tree
|
|
|
|
if (oldD) {
|
|
|
|
oldD.remove();
|
|
|
|
delete d;
|
|
|
|
}
|
|
|
|
div.clean = true;
|
|
|
|
$("addButton").disabled = true;
|
2007-12-05 22:05:04 +01:00
|
|
|
}
|
2009-06-15 17:58:47 +02:00
|
|
|
|
|
|
|
if (this.timer)
|
2009-09-04 23:32:53 +02:00
|
|
|
startAnimation($("pageContent"), $("filterPanel"));
|
2007-12-05 22:05:04 +01:00
|
|
|
}
|
|
|
|
|
2007-03-29 20:05:23 +02:00
|
|
|
function initUserFoldersWindow() {
|
2008-06-23 22:44:54 +02:00
|
|
|
var searchValue = $("searchValue");
|
|
|
|
searchValue.observe("keydown", onFolderSearchKeyDown);
|
2008-02-07 22:51:20 +01:00
|
|
|
var addButton = $("addButton");
|
|
|
|
addButton.observe("click", onConfirmFolderSelection);
|
2008-06-23 22:44:54 +02:00
|
|
|
searchValue.focus();
|
2007-03-29 20:05:23 +02:00
|
|
|
}
|
|
|
|
|
2009-03-12 22:09:14 +01:00
|
|
|
document.observe("dom:loaded", initUserFoldersWindow);
|