]> err.no Git - scalable-opengroupware.org/blob - UI/WebServerResources/UIxContactsUserFolders.js
fe55efc34c929ae4018f6a5e24eaeb7370f88d4d
[scalable-opengroupware.org] / UI / WebServerResources / UIxContactsUserFolders.js
1 function onSearchFormSubmit() {
2   var searchValue = $("searchValue");
3
4   var url = (UserFolderURL
5              + "foldersSearch?search=" + escape(searchValue.value)
6              + "&type=" + window.opener.userFolderType);
7   if (document.userFoldersRequest) {
8      document.userFoldersRequest.aborted = true;
9      document.userFoldersRequest.abort();
10   }
11   document.userFoldersRequest
12      = triggerAjaxRequest(url, userFoldersCallback);
13
14   return false;
15 }
16
17 function addLineToTree(tree, parent, line) {
18    var offset = 0;
19
20    var nodes = line.split(";");
21    if (window.opener.userFolderType == "user"
22        || nodes.length > 1) {
23       var parentNode = nodes[0];
24       var userInfos = parentNode.split(":");
25       var email = userInfos[1] + " <" + userInfos[2] + ">";
26       tree.add(parent, 0, email, 0, '#', userInfos[0], 'person',
27                '', '',
28                ResourcesURL + '/abcard.gif',
29                ResourcesURL + '/abcard.gif');
30       for (var i = 1; i < nodes.length; i++) {
31          var folderInfos = nodes[i].split(":");
32          var icon = ResourcesURL + '/';
33          if (folderInfos[2] == 'Contact')
34             icon += 'tb-mail-addressbook-flat-16x16.png';
35          else
36             icon += 'calendar-folder-16x16.png';
37          var folderId = userInfos[0] + ":" + folderInfos[1];
38          var name = folderInfos[0]; // name has the format "Folername (Firstname Lastname <email>)"
39          var pos = name.lastIndexOf(' (')
40          if (pos != -1)
41            name = name.substring(0, pos); // strip the part with fullname and email
42          tree.add(parent + i, parent, name, 0, '#', folderId,
43                   folderInfos[2] + '-folder', '', '', icon, icon);
44       }
45       offset = nodes.length - 1;
46    }
47 //    else
48 //       window.alert("nope:" + window.opener.userFolderType);
49
50    return offset;
51 }
52
53 function buildTree(response) { 
54    d = new dTree("d");
55    d.config.folderLlinks = true;
56    d.config.hideRoot = true;
57    d.icon.root = ResourcesURL + '/tbtv_account_17x17.gif';
58    d.icon.folder = ResourcesURL + '/tbtv_leaf_corner_17x17.gif';
59    d.icon.folderOpen = ResourcesURL + '/tbtv_leaf_corner_17x17.gif';
60    d.icon.node = ResourcesURL + '/tbtv_leaf_corner_17x17.gif';
61    d.icon.line = ResourcesURL + '/tbtv_line_17x17.gif';
62    d.icon.join = ResourcesURL + '/tbtv_junction_17x17.gif';
63    d.icon.joinBottom = ResourcesURL + '/tbtv_corner_17x17.gif';
64    d.icon.plus = ResourcesURL + '/tbtv_plus_17x17.gif';
65    d.icon.plusBottom = ResourcesURL + '/tbtv_corner_plus_17x17.gif';
66    d.icon.minus = ResourcesURL + '/tbtv_minus_17x17.gif';
67    d.icon.minusBottom = ResourcesURL + '/tbtv_corner_minus_17x17.gif';
68    d.icon.nlPlus = ResourcesURL + '/tbtv_corner_plus_17x17.gif';
69    d.icon.nlMinus = ResourcesURL + '/tbtv_corner_minus_17x17.gif';
70    d.icon.empty = ResourcesURL + '/empty.gif';
71    d.add(0, -1, '');
72
73    var lines = response.split("\n");
74    var offset = 0;
75    for (var i = 0; i < lines.length; i++) {
76       if (lines[i].length > 0)
77          offset += addLineToTree(d, i + 1 + offset, lines[i]);
78    }
79
80    return d;
81 }
82
83 function onFolderTreeItemClick(event) {
84    preventDefault(event);
85
86    var topNode = $("d");
87    if (topNode.selectedEntry)
88       topNode.selectedEntry.deselect();
89    this.select();
90    topNode.selectedEntry = this;
91 }
92
93 function userFoldersCallback(http) {
94    if (http.readyState == 4) {
95       document.userFoldersRequest = null;
96       var div = $("folders");
97       if (http.status == 200) {
98          var response = http.responseText;
99          div.innerHTML = buildTree(http.responseText);
100          div.clean = false;
101          var nodes = document.getElementsByClassName("node", $("d"));
102          for (i = 0; i < nodes.length; i++)
103            Event.observe(nodes[i], "click", onFolderTreeItemClick.bindAsEventListener(nodes[i]));
104       }
105       else if (http.status == 404) {
106          div.innerHTML = "";
107       }
108    }
109 }
110
111 function onConfirmFolderSelection(event) {
112   var topNode = $("d");
113   if (topNode && topNode.selectedEntry) {
114       var node = topNode.selectedEntry.parentNode;
115       var folder = node.getAttribute("dataname");
116       var folderName;
117       if (window.opener.userFolderType == "user") {
118          var spans = document.getElementsByClassName("nodeName",
119                                                      topNode.selectedEntry);
120          var email = spans[0].innerHTML;
121          email = email.replace("&lt;", "<");
122          email = email.replace("&gt;", ">");
123          folderName = email;
124       }
125       else {
126          var spans1 = document.getElementsByClassName("nodeName",
127                                                    node);
128          var spans2 = document.getElementsByClassName("nodeName",
129                                                       node.parentNode.previousSibling);
130          var email = spans2[0].innerHTML;
131          email = email.replace("&lt;", "<");
132          email = email.replace("&gt;", ">");
133          folderName = spans1[0].innerHTML + ' (' + email + ')';
134       }
135       var data = { folderName: folderName, folder: folder, window: window };
136       window.opener.subscribeToFolder(window.opener.userFolderCallback, data);
137    }
138 }
139
140 function onFolderSearchKeyDown(event) {
141   var div = $("folders");
142   if (!div.clean) {
143     div.innerHTML = "";
144     div.clean = true;
145   }
146 }
147
148 function initUserFoldersWindow() {
149   $("searchValue").observe("keydown", onFolderSearchKeyDown);
150   $("addButton").observe("click",  onConfirmFolderSelection);
151 }
152
153 FastInit.addOnLoad(initUserFoldersWindow);