]> err.no Git - scalable-opengroupware.org/blob - UI/WebServerResources/UIxMailToSelection.js
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1209 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / WebServerResources / UIxMailToSelection.js
1 /*
2  Copyright (C) 2005 SKYRIX Software AG
3  
4  This file is part of OpenGroupware.org.
5  
6  OGo is free software; you can redistribute it and/or modify it under
7  the terms of the GNU Lesser General Public License as published by the
8  Free Software Foundation; either version 2, or (at your option) any
9  later version.
10  
11  OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12  WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14  License for more details.
15  
16  You should have received a copy of the GNU Lesser General Public
17  License along with OGo; see the file COPYING.  If not, write to the
18  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19  02111-1307, USA.
20 */
21
22 /* Dependencies:
23  * It's required that "currentIndex" is defined in a top level context.
24  *
25  * Exports:
26  * defines UIxRecipientSelectorHasRecipients() returning a bool for the
27  * surrounding context to check.
28  */
29
30 var lastIndex = currentIndex;
31
32 function sanitizedCn(cn) {
33   var parts;
34   parts = cn.split(', ');
35   if(parts.length == 1)
36     return cn;
37   return parts[0];
38 }
39
40 function hasAddress(email) {
41   var e = $(email);
42   if(e)
43     return true;
44   return false;
45 }
46
47 function rememberAddress(email) {
48   var list, span, idx;
49   
50   list    = $('addr_addresses');
51   span    = document.createElement('span');
52   span.id = email;
53   idx     = document.createTextNode(currentIndex);
54   span.appendChild(idx);
55   list.appendChild(span);
56 }
57
58 function checkAddresses() {
59   alert("addressCount: " + this.getAddressCount() + " currentIndex: " + currentIndex + " lastIndex: " + lastIndex);
60 }
61
62 function addAddress(type, email, uid, sn, cn, dn) {
63   var shouldAddRow, s, e;
64   
65   shouldAddRow = true;
66   if (cn)
67     s = this.sanitizedCn(cn) + ' <' + email + '>';
68   else
69     s = email;
70
71   if(this.hasAddress(email))
72     return;
73   
74   e = $('addr_0');
75   if(e.value == '') {
76     e.value = s;
77     shouldAddRow = false;
78   }
79   if(shouldAddRow) {
80     this.fancyAddRow(false, s);
81   }
82   this.rememberAddress(email);
83 }
84
85 function fancyAddRow(shouldEdit, text) {
86   var addr, addressList, lastChild, proto, row, select, input;
87   
88   addr = $('addr_' + lastIndex);
89   if (addr && addr.value == '') {
90     input = $('subjectField');
91     if (input && input.value != '') {
92       input.focus();
93       input.select();
94       return;
95     }
96   }
97   addressList = $("addressList");
98   lastChild = $("lastRow");
99   
100   currentIndex++;
101
102   proto = $('row_' + lastIndex);
103   row = proto.cloneNode(true);
104   row.id = 'row_' + currentIndex;
105
106   // select popup
107   var rowNodes = row.childNodesWithTag("span");
108   select = $(rowNodes[0]).childNodesWithTag("select")[0];
109   select.name = 'popup_' + currentIndex;
110 //   select.value = row.childNodesWithTag("span")[0].childNodesWithTag("select")[0].value;
111   input = $(rowNodes[1]).childNodesWithTag("input")[0];
112   input.name  = 'addr_' + currentIndex;
113   input.id = 'addr_' + currentIndex;
114   input.value = text;
115
116   addressList.insertBefore(row, lastChild);
117
118   if (shouldEdit) {
119     input.setAttribute('autocomplete', 'off');
120     input.focus();
121     input.select();
122     input.setAttribute('autocomplete', 'on');
123   }
124 }
125
126 function addressFieldGotFocus(sender) {
127   var idx;
128   
129   idx = this.getIndexFromIdentifier(sender.id);
130   if (lastIndex == idx) return;
131   this.removeLastEditedRowIfEmpty();
132   onWindowResize(null);
133
134   return false;
135 }
136
137 function addressFieldLostFocus(sender) {
138   lastIndex = this.getIndexFromIdentifier(sender.id);
139
140   return false;
141 }
142
143 function removeLastEditedRowIfEmpty() {
144   var idx, addr, addressList, senderRow;
145   
146   idx = lastIndex;
147   if (idx == 0) return;
148   addr = $('addr_' + idx);
149   if (!addr) return;
150   if (addr.value != '') return;
151   addr = this.findAddressWithIndex(idx);
152   if(addr) {
153     var addresses = $('addr_addresses');
154     addresses.removeChild(addr);
155   }
156   addressList = $("addressList");
157   senderRow = $("row_" + idx);
158   addressList.removeChild(senderRow);
159 }
160
161 function findAddressWithIndex(idx) {
162   var list, i, count, addr, idx
163   list = $('addr_addresses').childNodes;
164   count = list.length;
165   for(i = 0; i < count; i++) {
166     addr = list[i];
167     if(addr.innerHTML == idx)
168       return addr;
169   }
170   return null;
171 }
172
173 function getIndexFromIdentifier(id) {
174   return id.split('_')[1];
175 }
176
177 function getAddressIDs() {
178   var addressList, rows, i, count, addressIDs;
179
180   addressIDs = new Array();
181
182   addressList = $("addressList");
183   rows  = addressList.childNodes;
184   count = rows.length;
185
186   for (i = 0; i < count; i++) {
187     var row, rowId;
188     
189     row = addressList.childNodes[i];
190     rowId = row.id;
191     if (rowId && rowId != 'row_last') {
192       var idx;
193
194       idx = this.getIndexFromIdentifier(rowId);
195       addressIDs.push(idx);
196     }
197   }
198   return addressIDs;
199 }
200
201 function getAddressCount() {
202   var addressCount, addressIDs, i, count;
203   
204   addressCount = 0;
205   addressIDs   = this.getAddressIDs();
206   count        = addressIDs.length;
207   for (i = 0; i < count; i++) {
208     var idx, input;
209
210     idx   = addressIDs[i];
211     input = $('addr_' + idx);
212     if (input && input.value != '')
213       addressCount++;
214   }
215   return addressCount;
216 }
217
218 function UIxRecipientSelectorHasRecipients() {
219   var count;
220   
221   count = this.getAddressCount();
222   if (count > 0)
223     return true;
224   return false;
225 }
226
227 /* addressbook helpers */
228