1 var contactSelectorAction = 'mailer-contacts';
3 function onContactAdd() {
5 var selectorURL = '?popup=YES&selectorId=mailer-contacts';
7 urlstr = ApplicationBaseURL;
8 if (urlstr[urlstr.length-1] != '/')
10 urlstr += ("../../" + UserLogin + "/Contacts/"
11 + contactSelectorAction + selectorURL);
12 var w = window.open(urlstr, "Addressbook",
13 "width=640,height=400,resizable=1,scrollbars=0");
14 w.selector = selector;
21 function addContact(tag, fullContactName, contactId, contactName, contactEmail) {
22 if (!mailIsRecipient(contactEmail)) {
23 var neededOptionValue = 0;
25 neededOptionValue = 1;
26 else if (tag == "bcc")
27 neededOptionValue = 2;
31 var currentRow = $('row_' + counter);
32 while (currentRow && !stop) {
33 var currentValue = $(currentRow.childNodesWithTag("span")[1]).childNodesWithTag("input")[0].value;
34 if (currentValue == neededOptionValue) {
36 insertContact($("addr_" + counter), contactName, contactEmail);
39 currentRow = $('row_' + counter);
43 fancyAddRow(false, "");
44 $("row_" + counter).childNodesWithTag("span")[0].childNodesWithTag("select")[0].value
46 insertContact($("addr_" + counter), contactName, contactEmail);
51 function mailIsRecipient(mailto) {
52 var isRecipient = false;
55 var currentRow = $('row_' + counter);
57 var email = extractEmailAddress(mailto).toUpperCase();
59 while (currentRow && !isRecipient) {
60 var currentValue = $("addr_"+counter).value.toUpperCase();
61 if (currentValue.indexOf(email) > -1)
66 currentRow = $('row_' + counter);
73 function insertContact(inputNode, contactName, contactEmail) {
74 var value = '' + inputNode.value;
76 var newContact = contactName;
77 if (newContact.length > 0)
78 newContact += ' <' + contactEmail + '>';
80 newContact = contactEmail;
86 inputNode.value = value;
89 function toggleAttachments() {
90 var div = $("attachmentsArea");
91 if (div.style.display)
92 div.style.display = "";
94 div.style.display = "block;";
99 function updateInlineAttachmentList(sender, attachments) {
102 var div = $("attachmentsArea");
104 count = attachments.length;
108 for (var i = 0; i < count; i++) {
109 text = text + attachments[i];
110 text = text + '<br />';
113 var e = $('compose_attachments_list');
115 if (!div.style.display)
116 div.style.display = "block;";
119 div.style.display = "";
123 function validateEditorInput(sender) {
127 field = document.pageform.subject;
128 if (field.value == "")
129 errortext = errortext + labels.error_missingsubject + "\n";
131 if (!UIxRecipientSelectorHasRecipients())
132 errortext = errortext + labels.error_missingrecipients + "\n";
134 if (errortext.length > 0) {
135 alert(labels.error_validationfailed + ":\n" + errortext);
141 function clickedEditorSend(sender) {
142 if (!validateEditorInput(sender))
145 window.shouldPreserve = true;
146 document.pageform.action = "send";
147 document.pageform.submit();
152 function clickedEditorAttach(sender) {
153 var area = $("attachmentsArea");
155 if (!area.style.display) {
156 area.setStyle({ display: "block" });
157 onWindowResize(null);
160 var inputs = area.getElementsByTagName("input");
162 // Verify if there's already a visible file input field
163 for (var i = 0; i < inputs.length; i++)
164 if ($(inputs[i]).hasClassName("currentAttachment"))
167 // Add new file input field
168 var attachmentName = "attachment" + inputs.length;
169 var newAttachment = createElement("input", attachmentName,
170 "currentAttachment", null,
172 name: attachmentName },
174 Event.observe(newAttachment, "change",
175 onAttachmentChange.bindAsEventListener(newAttachment));
180 function onAddAttachment() {
181 return clickedEditorAttach(null);
184 function onAttachmentChange(event) {
185 if (this.value == "")
186 this.parentNode.removeChild(this);
188 this.addClassName("attachment");
189 this.removeClassName("currentAttachment");
190 var list = $("attachments");
191 createAttachment(this, list);
195 function createAttachment(node, list) {
196 var attachment = createElement("li", null, null, { node: node }, null, list);
197 createElement("img", null, null, { src: ResourcesURL + "/attachment.gif" },
199 Event.observe(attachment, "click", onRowClick);
201 var filename = node.value;
203 if (navigator.appVersion.indexOf("Windows") > -1)
207 var fileArray = filename.split(separator);
208 var attachmentName = document.createTextNode(fileArray[fileArray.length-1]);
209 attachment.appendChild(attachmentName);
212 function clickedEditorSave(sender) {
213 window.shouldPreserve = true;
214 document.pageform.action = "save";
215 document.pageform.submit();
221 function initMailEditor() {
222 var list = $("attachments");
223 $(list).attachMenu("attachmentsMenu");
224 var elements = list.childNodesWithTag("li");
225 for (var i = 0; i < elements.length; i++) {
226 Event.observe(elements[i], "click",
227 onRowClick.bindAsEventListener(elements[i]));
230 var listContent = $("attachments").childNodesWithTag("li");
231 if (listContent.length > 0)
232 $("attachmentsArea").setStyle({ display: "block" });
234 onWindowResize(null);
235 Event.observe(window, "resize", onWindowResize);
236 Event.observe(window, "beforeunload", onMailEditorClose);
239 function getMenus() {
240 return { "attachmentsMenu": new Array(null, onRemoveAttachments,
241 onSelectAllAttachments,
243 onAddAttachment, null) };
246 function onRemoveAttachments() {
247 var list = $("attachments");
248 var nodes = list.getSelectedNodes();
249 for (var i = nodes.length-1; i > -1; i--) {
250 var input = $(nodes[i]).node;
252 input.parentNode.removeChild(input);
253 list.removeChild(nodes[i]);
257 var childNodes = nodes[i].childNodes;
258 for (var j = 0; j < childNodes.length; j++) {
259 if (childNodes[j].nodeType == 3)
260 filename += childNodes[j].nodeValue;
262 var url = "" + window.location;
263 var parts = url.split("/");
264 parts[parts.length-1] = "deleteAttachment?filename=" + encodeURIComponent(filename);
265 url = parts.join("/");
266 triggerAjaxRequest(url, attachmentDeleteCallback,
272 function attachmentDeleteCallback(http) {
273 if (http.readyState == 4) {
274 if (http.status == 204) {
275 var node = http.callbackData;
276 node.parentNode.removeChild(node);
279 log("attachmentDeleteCallback: an error occured: " + http.responseText);
283 function onSelectAllAttachments() {
284 var list = $("attachments");
285 var nodes = list.childNodesWithTag("li");
286 for (var i = 0; i < nodes.length; i++)
290 function onWindowResize(event) {
291 var textarea = document.pageform.text;
292 var windowheight = (typeof self.innerHeight == "number" ? self.innerHeight : document.body.clientHeight);
293 var rowheight = (Element.getHeight(textarea) / textarea.rows);
294 var headerarea = $("headerArea");
296 // Set textarea position
297 textarea.setStyle({ 'top': (headerarea.getHeight() + headerarea.offsetTop) + 'px' });
299 var textareaoffset = textarea.offsetTop;
301 // Resize the textarea (message content)
302 textarea.rows = Math.round((windowheight - textareaoffset) / rowheight);
304 var attachmentsarea = $("attachmentsArea");
305 var attachmentswidth = 0;
306 if (attachmentsarea.style.display)
307 attachmentswidth = attachmentsarea.getWidth();
308 var windowwidth = (typeof self.innerWidth == "number" ? self.innerWidth : document.body.clientWidth);
309 var subjectfield = $(document).getElementsByClassName('headerField', $('subjectRow'))[0];
310 var subjectinput = $(document).getElementsByClassName('textField', $('subjectRow'))[0];
312 // Resize subject field
313 subjectinput.setStyle({ width: (windowwidth
314 - $(subjectfield).getWidth()
319 // Resize address fields
320 var addresslist = $('addressList');
321 var firstselect = document.getElementsByClassName('headerField', addresslist)[0];
322 var inputwidth = windowwidth - $(firstselect).getWidth() - attachmentswidth - 24 - 30;
323 var addresses = document.getElementsByClassName('textField', addresslist);
324 for (var i = 0; i < addresses.length; i++) {
325 addresses[i].setStyle({ width: inputwidth + 'px' });
329 function onMailEditorClose(event) {
330 if (window.shouldPreserve)
331 window.shouldPreserve = false;
333 var url = "" + window.location;
334 var parts = url.split("/");
335 parts[parts.length-1] = "delete";
336 url = parts.join("/");
337 http = createHTTPClient();
338 http.open("POST", url, false /* not async */);
342 Event.stopObserving(window, "beforeunload", onMailEditorClose);
345 addEvent(window, 'load', initMailEditor);