mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-24 23:59:39 +01:00
1054 lines
29 KiB
JavaScript
1054 lines
29 KiB
JavaScript
//var tab = new Tabs(3,'activetab','inactivetab','tab','tabcontent','','','tabpage');
|
|
var selectedSuggestion;
|
|
var maxSuggestions=5;
|
|
var currentInputField;
|
|
var currentFolderSelectField;
|
|
var currentKeyCode;
|
|
var resultRows;
|
|
var results;
|
|
var keyDownCallback;
|
|
var searchesPending=0;
|
|
var resultboxVisible=false;
|
|
var searchActive=false;
|
|
|
|
// timer variables
|
|
var liveSearchTimer;
|
|
var keyboardTimeout=500;
|
|
|
|
var fileSelectorWindowTimer;
|
|
var fileSelectorWindowTimeout=500;
|
|
|
|
// windows
|
|
var fileSelectorWindow;
|
|
|
|
// special keys needed for navigation
|
|
var KEYCODE_TAB=9;
|
|
var KEYCODE_ENTER=13;
|
|
var KEYCODE_SHIFT=16;
|
|
var KEYCODE_ALT=18;
|
|
var KEYCODE_ESC=27;
|
|
var KEYCODE_LEFT=37;
|
|
var KEYCODE_UP=38;
|
|
var KEYCODE_RIGHT=39;
|
|
var KEYCODE_DOWN=40;
|
|
|
|
// disabled Keycodes
|
|
// quickserach input field
|
|
var disabledKeys1 = new Array(KEYCODE_TAB, KEYCODE_ENTER, KEYCODE_UP, KEYCODE_DOWN);
|
|
//var disabledKeys1 = new Array(KEYCODE_ENTER, KEYCODE_UP, KEYCODE_DOWN);
|
|
var browserSupportsOnUnloadConfirm = true;
|
|
var do_onunload=false;
|
|
var draftsMayExist=false;
|
|
var justSavedAsDraftManually; // no value yet, as it should indicate that the message was just saved, before another autosave kicked in
|
|
var justClickedSend=false;
|
|
var decodedFolder;
|
|
|
|
function initAll()
|
|
{
|
|
if (egw_getWindowOuterHeight()<750)
|
|
{
|
|
var fm_height = screen.availHeight/100*75;
|
|
var resizeHeight = fm_height-egw_getWindowOuterHeight();
|
|
//alert(fm_height+' resize By:0,'+resizeHeight);
|
|
if (fm_height >= 750) window.resizeBy(0,resizeHeight);
|
|
}
|
|
if (egw_getWindowOuterHeight()>screen.availHeight) window.resizeBy(0,screen.availHeight-egw_getWindowOuterHeight());
|
|
if (screen.height>screen.availHeight) window.moveBy(0,screen.availHeight-screen.height);
|
|
//tab.init();
|
|
//alert(document.onkeydown);
|
|
var titletext = document.getElementById('fm_compose_subject').value;
|
|
if (titletext.length>0) updateTitle(titletext);
|
|
if (window.location.search.search(/&uid=/))
|
|
{
|
|
for (var i = 0; i < window.location.search.split("&").length; i++) {
|
|
if (window.location.search.split("&")[i].search(/uid=/)!= -1)
|
|
{
|
|
var a = window.location.search.split("&")[i].replace(/uid=/,'');
|
|
if (a.length >0) { draftsMayExist = true; /*alert(a+' found');*/}
|
|
}
|
|
if (window.location.search.split("&")[i].search(/method=/)!= -1)
|
|
{
|
|
var b = window.location.search.split("&")[i].replace(/method=/,'');
|
|
if (b.length >0 && b=='importMessageToMergeAndSend')
|
|
{
|
|
justSavedAsDraftManually = false; /*alert(b+' found');*/
|
|
do_onunload = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ($j.browser.webkit) browserSupportsOnUnloadConfirm = false; // chrome blocks alert/confirm boxes, but displays (custom) messages on demand before leaving/closing a page
|
|
if ($j.browser.opera) browserSupportsOnUnloadConfirm = false; // opera does not support unload or onbeforeunload for security reasons
|
|
}
|
|
|
|
function checkunload(checkBrowser)
|
|
{
|
|
if (typeof checkBrowser != 'undefined' && justSavedAsDraftManually == false)
|
|
{
|
|
if (browserSupportsOnUnloadConfirm && do_onunload && justClickedSend==false) do_onunload=!confirm(checkBrowser);
|
|
if (!browserSupportsOnUnloadConfirm)
|
|
{
|
|
// window.setTimeout('checkunload();',1000);
|
|
// do_onunload = false;
|
|
return checkBrowser;
|
|
}
|
|
}
|
|
if (do_onunload)
|
|
{
|
|
xajax_doXMLHTTPsync('felamimail.ajaxfelamimail.removeLastDraftedVersion',composeID);
|
|
// try triggering refresh of draftFolder
|
|
if (typeof window.opener.refreshDraftFolderIfActive =='function') window.opener.refreshDraftFolderIfActive();
|
|
}
|
|
}
|
|
|
|
function fm_startTimerSaveAsDraft(_refreshTimeOut) {
|
|
if(aktiv) {
|
|
window.clearTimeout(aktiv);
|
|
}
|
|
if(_refreshTimeOut > 5000) {
|
|
aktiv = window.setInterval("fm_compose_saveAsDraftBG()", _refreshTimeOut);
|
|
}
|
|
}
|
|
|
|
function fm_compose_saveAsDraftBG(autoSave)
|
|
{
|
|
//alert('composing in progress->'+composeID);
|
|
if (typeof autoSave == 'undefined') autoSave = true;
|
|
var htmlFlag = document.getElementsByName('_is_html')[0];
|
|
var mimeType = document.getElementById('mimeType');
|
|
var sendButton = document.getElementById('send');
|
|
if (autoSave) {sendButton.disabled=sendButton.hidden=true;}
|
|
var currentEditor = htmlFlag.value;
|
|
var currentMode ='';
|
|
var data = {};
|
|
if (currentEditor == 1)
|
|
{
|
|
data['mimeType']=currentMode='html';
|
|
}
|
|
else
|
|
{
|
|
data['mimeType']=currentMode='plain';
|
|
}
|
|
|
|
var ckeditor = CKEDITOR.instances['body'];
|
|
var plaineditor = document.getElementsByName('body')[0];
|
|
var editorArea = document.getElementById('editorArea');
|
|
data = window.xajax.getFormValues('doit');
|
|
data['body'] ='';
|
|
// body
|
|
if (currentMode == 'html')
|
|
{
|
|
//Copy the current HTML data and recode it via a XAJAX request
|
|
data['body'] = ckeditor.getData();
|
|
}
|
|
else
|
|
{
|
|
data['body'] = plaineditor.value;
|
|
}
|
|
|
|
//call saveasdraft with xajax_doXMLHTTP, or something equivalent
|
|
xajax_doXMLHTTP("felamimail.ajaxfelamimail.saveAsDraft", composeID, data, autoSave);
|
|
fm_startTimerSaveAsDraft(_refreshTimeOut);
|
|
if (autoSave)
|
|
{
|
|
sendButton.disabled=sendButton.hidden=false;
|
|
draftsMayExist = true;
|
|
do_onunload=true;
|
|
justSavedAsDraftManually = false;
|
|
}
|
|
// try triggering refresh of draftFolder
|
|
if (typeof window.opener.refreshDraftFolderIfActive =='function') window.opener.refreshDraftFolderIfActive();
|
|
}
|
|
|
|
function addEmail(to,email)
|
|
{
|
|
//alert(to+': '+email);
|
|
|
|
var tableBody = document.getElementById('addressRows');
|
|
var tableRows = tableBody.getElementsByTagName('tr');
|
|
|
|
var lastRow = tableRows[tableRows.length-1];
|
|
var inputElements = lastRow.getElementsByTagName('input');
|
|
|
|
// look for empty fields above to fill in
|
|
for(rowCounter = tableRows.length-1; rowCounter > 0; rowCounter--)
|
|
{
|
|
var rowBefore = tableRows[rowCounter-1];
|
|
var inputBefore = rowBefore.getElementsByTagName('input');
|
|
if(inputBefore[0].value == '')
|
|
{
|
|
lastRow = rowBefore;
|
|
inputElements = inputBefore;
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
|
|
}
|
|
|
|
if (inputElements[0].value != '') // last row not empty --> create new
|
|
{
|
|
addAddressRow(lastRow);
|
|
lastRow = tableRows[tableRows.length-1];
|
|
inputElements = lastRow.getElementsByTagName('input');
|
|
}
|
|
// fill with email and set selectbox
|
|
inputElements[0].value = email;
|
|
var selectElements = lastRow.getElementsByTagName('select');
|
|
selectElements[0].selectedIndex = to == 'cc' ? 1 : (to == 'bcc' ? 2 : 0);
|
|
|
|
// add a new empty last row if there is no empty one at all
|
|
lastRow = tableRows[tableRows.length-1];
|
|
inputElements = lastRow.getElementsByTagName('input');
|
|
if (inputElements[0].value != '')
|
|
{
|
|
addAddressRow(lastRow);
|
|
}
|
|
}
|
|
|
|
function addAddressRow(_tableRow)
|
|
{
|
|
// the table body
|
|
var tableBody = _tableRow.parentNode;
|
|
|
|
// all table rows
|
|
var tableRows = tableBody.getElementsByTagName('tr');
|
|
|
|
|
|
var newTableRow = _tableRow.cloneNode(true);
|
|
var inputElements = newTableRow.getElementsByTagName('input');
|
|
var spanElements = newTableRow.getElementsByTagName('span');
|
|
var tdElements = newTableRow.getElementsByTagName('td');
|
|
|
|
//alert(inputElements.length);
|
|
inputElements[0].value = '';
|
|
inputElements[0].disabled = false;
|
|
inputElements[0].style.width = '99%';
|
|
for(i=0; i<spanElements.length; i++) {
|
|
if(spanElements[i].className == 'selectFolder') {
|
|
spanElements[i].style.display = 'none';
|
|
}
|
|
}
|
|
|
|
tableBody.appendChild(newTableRow);
|
|
|
|
// inputElements[0].focus();
|
|
|
|
singleRowHeight = _tableRow.clientHeight;
|
|
|
|
if (singleRowHeight == 0) singleRowHeight = 20;
|
|
if(tableRows.length > 4) {
|
|
neededHeight = singleRowHeight*4;
|
|
} else {
|
|
neededHeight = singleRowHeight*tableRows.length;
|
|
}
|
|
|
|
document.getElementById('addressDIV').style.height = neededHeight+'px';
|
|
document.getElementById('addressDIV').scrollTop = document.getElementById('addressTable').clientHeight;
|
|
}
|
|
|
|
function fm_compose_addAttachmentRow(_tableRow)
|
|
{
|
|
// the table body
|
|
var tableBody = _tableRow.parentNode;
|
|
|
|
// all table rows
|
|
var tableRows = tableBody.getElementsByTagName('tr');
|
|
|
|
|
|
var newTableRow = _tableRow.cloneNode(true);
|
|
var inputElements = newTableRow.getElementsByTagName('input');
|
|
|
|
//alert(inputElements.length);
|
|
// inputElements[0].value = '';
|
|
|
|
if(tableRows.length < 5) {
|
|
tableBody.appendChild(newTableRow);
|
|
}
|
|
|
|
// inputElements[0].focus();
|
|
|
|
singleRowHeight = _tableRow.clientHeight;
|
|
if (singleRowHeight == 0) singleRowHeight = 20;
|
|
if(tableRows.length > 4) {
|
|
neededHeight = singleRowHeight*4;
|
|
} else {
|
|
neededHeight = singleRowHeight*tableRows.length;
|
|
}
|
|
|
|
//document.getElementById('addressDIV').style.height = neededHeight+'px';
|
|
//document.getElementById('addressDIV').scrollTop = document.getElementById('addressTable').clientHeight;
|
|
}
|
|
|
|
function deleteTableRow(_imageObject)
|
|
{
|
|
// the table body
|
|
tableBody = document.getElementById('addressRows');
|
|
|
|
// all table rows
|
|
tableRows = tableBody.getElementsByTagName('tr');
|
|
|
|
if(tableRows.length > 4) {
|
|
|
|
// the row where the clicked image is located
|
|
tableRow = _imageObject.parentNode.parentNode;
|
|
|
|
// the table body
|
|
tableBody = document.getElementById('addressRows');
|
|
tableBody.removeChild(tableRow);
|
|
|
|
singleRowHeight = tableRows[0].clientHeight;
|
|
if (singleRowHeight == 0) singleRowHeight = 20;
|
|
if(tableRows.length > 4) {
|
|
neededHeight = singleRowHeight*4;
|
|
} else {
|
|
neededHeight = singleRowHeight*tableRows.length;
|
|
}
|
|
|
|
document.getElementById('addressDIV').style.height = neededHeight+'px';
|
|
} else {
|
|
// the row where the clicked image is located
|
|
tableRow = _imageObject.parentNode.parentNode;
|
|
|
|
var inputElements = tableRow.getElementsByTagName('input');
|
|
inputElements[0].value = '';
|
|
|
|
}
|
|
}
|
|
|
|
function getPosLeft(_node) {
|
|
var left=0;
|
|
|
|
if(_node.offsetParent) {
|
|
while (_node.offsetParent)
|
|
{
|
|
left += _node.offsetLeft;
|
|
_node = _node.offsetParent;
|
|
}
|
|
} else if (_node.x) {
|
|
left += _node.x;
|
|
}
|
|
|
|
return left;
|
|
}
|
|
|
|
function getPosTop(_node) {
|
|
var top=0;
|
|
|
|
if(_node.offsetParent) {
|
|
while (_node.offsetParent) {
|
|
top += _node.offsetTop;
|
|
if(_node.parentNode.scrollTop) {
|
|
top -= _node.parentNode.scrollTop
|
|
}
|
|
_node = _node.offsetParent;
|
|
}
|
|
} else if (_node.y) {
|
|
left += _node.y;
|
|
}
|
|
|
|
return top;
|
|
}
|
|
|
|
function hideResultBox() {
|
|
var resultBox;
|
|
|
|
resultBox = document.getElementById('resultBox');
|
|
resultBox.className = 'resultBoxHidden';
|
|
|
|
//document.title='Search finnished';
|
|
|
|
resultboxVisible=false;
|
|
}
|
|
|
|
function initResultBox(_inputField) {
|
|
//var resultBox;
|
|
|
|
currentInputField = _inputField;
|
|
//document.title = resultRows.length;
|
|
//document.title = "TEST";
|
|
//resultBox = document.getElementById("resultBox");
|
|
|
|
startCapturingEvents(keypressed);
|
|
}
|
|
|
|
function displayResultBox() {
|
|
var top=0;
|
|
var left=0;
|
|
var width=0;
|
|
|
|
var resultBox;
|
|
|
|
//document.title='Search finnished';
|
|
selectedSuggestion = -1;
|
|
|
|
|
|
resultBox = document.getElementById('resultBox');
|
|
if(searchActive) {
|
|
top = getPosTop(currentInputField) + currentInputField.offsetHeight;
|
|
left = getPosLeft(currentInputField);
|
|
width = currentInputField.clientWidth;
|
|
|
|
resultBox.style.top=top + 'px';
|
|
resultBox.style.left=left + 'px';
|
|
resultBox.style.width=width + 'px';
|
|
resultBox.scrollTop=0;
|
|
resultBox.style.zIndex=100000;
|
|
|
|
resultBox.className = 'resultBoxVisible';
|
|
}
|
|
|
|
resultRows = resultBox.getElementsByTagName('div');
|
|
|
|
resultboxVisible=true;
|
|
}
|
|
|
|
function startCapturingEvents(_callback) {
|
|
document.onkeydown = keyDown;
|
|
|
|
keyDownCallback=_callback;
|
|
// nur fuer NS4
|
|
//if (document.layers) {
|
|
// document.captureEvents(Event.KEYPRESS);
|
|
//}
|
|
}
|
|
|
|
function stopCapturingEvents() {
|
|
document.onkeydown = null;
|
|
delete currentKeyCode;
|
|
hideResultBox();
|
|
}
|
|
|
|
function scrollIntoPosition(pos)
|
|
{
|
|
if (typeof pos =='undefined') pos =0;
|
|
if (pos>0) pos = pos -1;
|
|
var resultBox = document.getElementById('resultBox');
|
|
if (typeof resultBox.childNodes[pos] == 'undefined') return;
|
|
if (typeof(resultBox.childNodes[pos].scrollIntoViewIfNeeded)=='function')
|
|
{
|
|
resultBox.childNodes[selectedSuggestion].scrollIntoViewIfNeeded(true);
|
|
} else {
|
|
resultBox.childNodes[pos].scrollIntoView(true);
|
|
}
|
|
}
|
|
|
|
function keypressed(keycode, keyvalue) {
|
|
if(liveSearchTimer) {
|
|
window.clearTimeout(liveSearchTimer);
|
|
}
|
|
|
|
//_pressed = new Date().getTime();
|
|
|
|
switch (keycode) {
|
|
// case KEYCODE_LEFT:
|
|
case KEYCODE_UP:
|
|
if(selectedSuggestion > 0) {
|
|
selectSuggestion(selectedSuggestion-1);
|
|
scrollIntoPosition(selectedSuggestion-1);
|
|
} else {
|
|
selectSuggestion(resultRows.length-1);
|
|
scrollIntoPosition(resultRows.length-1);
|
|
}
|
|
break;
|
|
|
|
// case KEYCODE_RIGHT:
|
|
case KEYCODE_DOWN:
|
|
//document.title='down '+selectedSuggestion;
|
|
//if(selectedSuggestion) {
|
|
if(resultboxVisible) {
|
|
//document.title='is selected';
|
|
if(selectedSuggestion < resultRows.length-1) {
|
|
selectSuggestion(selectedSuggestion+1);
|
|
scrollIntoPosition(selectedSuggestion+1);
|
|
} else {
|
|
selectSuggestion(0);
|
|
scrollIntoPosition(0);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case KEYCODE_ENTER:
|
|
if(resultboxVisible) {
|
|
currentInputField.value = results[selectedSuggestion];
|
|
hideResultBox();
|
|
}
|
|
focusToNextInputField();
|
|
searchActive=false;
|
|
break;
|
|
|
|
case KEYCODE_ESC:
|
|
hideResultBox();
|
|
break;
|
|
|
|
case KEYCODE_TAB:
|
|
if(resultboxVisible) {
|
|
if( selectedSuggestion < resultRows.length-1) {
|
|
selectSuggestion(selectedSuggestion+1);
|
|
} else {
|
|
selectSuggestion(0);
|
|
}
|
|
} else {
|
|
rv = focusToNextInputField();
|
|
if (rv == 'fm_compose_subject')
|
|
{
|
|
currentKeyCode = 13;
|
|
//alert(currentKeyCode);
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case KEYCODE_ALT:
|
|
case KEYCODE_SHIFT:
|
|
break;
|
|
|
|
default:
|
|
//_setValue(-1);
|
|
liveSearchTimer = window.setTimeout('startLiveSearch()', keyboardTimeout);
|
|
if(!currentInputField.parentNode.parentNode.nextSibling) {
|
|
addAddressRow(currentInputField.parentNode.parentNode);
|
|
}
|
|
hideResultBox();
|
|
}
|
|
}
|
|
|
|
function keyDown(e) {
|
|
var pressedKeyID = document.all ? window.event.keyCode : e.which;
|
|
var pressedKey = String.fromCharCode(pressedKeyID).toLowerCase();
|
|
|
|
currentKeyCode=pressedKeyID;
|
|
if(keyDownCallback!=null) {
|
|
keyDownCallback(pressedKeyID, pressedKey);
|
|
}
|
|
}
|
|
|
|
function startLiveSearch() {
|
|
if(currentInputField.value.length > 2) {
|
|
fm_blink_currentInputField();
|
|
searchActive=true;
|
|
//document.title='Search started';
|
|
xajax_doXMLHTTP("felamimail.ajax_contacts.searchAddress",currentInputField.value);
|
|
}
|
|
}
|
|
|
|
function selectSuggestion(_selectedSuggestion) {
|
|
selectedSuggestion = _selectedSuggestion;
|
|
for(i=0; i<resultRows.length; i++) {
|
|
if(i == _selectedSuggestion) {
|
|
resultRows[i].className = 'activeResultRow';
|
|
} else {
|
|
resultRows[i].className = 'inactiveResultRow';
|
|
}
|
|
}
|
|
}
|
|
|
|
function keycodePressed(_keyCode) {
|
|
//alert(currentKeyCode +'=='+ _keyCode);
|
|
if(currentKeyCode == _keyCode) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
function disabledKeyCodes(_keyCodes) {
|
|
for (var i = 0; i < _keyCodes.length; ++i) {
|
|
if(currentKeyCode == _keyCodes[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function updateTitle(_text) {
|
|
if(_text.length>30) {
|
|
_text = _text.substring(0,30) + '...';
|
|
}
|
|
|
|
document.title = _text;
|
|
}
|
|
|
|
function focusToNextInputField() {
|
|
var nextRow;
|
|
|
|
if(nextRow = currentInputField.parentNode.parentNode.nextSibling) {
|
|
if(nextRow.nodeType == 3) {
|
|
inputElements = nextRow.nextSibling.getElementsByTagName('input');
|
|
inputElements[0].focus();
|
|
} else {
|
|
inputElements = nextRow.getElementsByTagName('input');
|
|
inputElements[0].focus();
|
|
}
|
|
return 'addressinput';
|
|
} else {
|
|
document.getElementById('fm_compose_subject').focus();
|
|
//document.doit.fm_compose_subject.focus();
|
|
return 'fm_compose_subject';
|
|
}
|
|
}
|
|
|
|
function focusToPrevInputField() {
|
|
var prevRow;
|
|
|
|
if(prevRow = currentInputField.parentNode.parentNode.previousSibling) {
|
|
if(prevRow.nodeType == 3) {
|
|
inputElements = prevRow.previousSibling.getElementsByTagName('input');
|
|
inputElements[0].focus();
|
|
} else {
|
|
inputElements = prevRow.getElementsByTagName('input');
|
|
inputElements[0].focus();
|
|
}
|
|
} else {
|
|
document.getElementById('fm_compose_subject').focus();
|
|
//document.doit.fm_compose_subject.focus();
|
|
}
|
|
}
|
|
|
|
function keyDownSubject(keycode, keyvalue) {
|
|
}
|
|
|
|
function startCaptureEventSubjects(_inputField) {
|
|
_inputField.onkeydown = keyDown;
|
|
|
|
keyDownCallback = keyDownSubject;
|
|
}
|
|
|
|
function fm_compose_selectFolder() {
|
|
egw_openWindowCentered(folderSelectURL,'fm_compose_selectFolder','350','500',window.outerWidth/2,window.outerHeight/2);
|
|
}
|
|
|
|
function OnLoadingStart(_nodeID) {
|
|
return true;
|
|
}
|
|
|
|
function onNodeSelect(_folderName) {
|
|
opener.fm_compose_setFolderSelectValue(_folderName);
|
|
self.close();
|
|
}
|
|
|
|
function fm_compose_changeInputType(_selectBox) {
|
|
var selectBoxRow = _selectBox.parentNode.parentNode;
|
|
var inputElements = selectBoxRow.getElementsByTagName('input');
|
|
var spanElements = selectBoxRow.getElementsByTagName('span');
|
|
var tdElements = selectBoxRow.getElementsByTagName('td');
|
|
|
|
if(_selectBox.value == 'folder') {
|
|
inputElements[0].value = '';
|
|
for(i=0; i<spanElements.length; i++) {
|
|
if(spanElements[i].className == 'selectFolder') {
|
|
spanElements[i].style.display = 'inline';
|
|
}
|
|
}
|
|
currentFolderSelectField = inputElements[0];
|
|
} else {
|
|
for(i=0; i<spanElements.length; i++) {
|
|
if(spanElements[i].className == 'selectFolder') {
|
|
spanElements[i].style.display = 'none';
|
|
}
|
|
}
|
|
delete currentFolderSelectField;
|
|
}
|
|
|
|
var tdElements = selectBoxRow.getElementsByTagName('td');
|
|
if (_selectBox.name == 'signatureID') {
|
|
var sigBox = document.getElementById('signatureID');
|
|
//alert(sigBox);
|
|
// if we find the id, signature is inserted at the top of the message on compose start.
|
|
if (sigBox == null)
|
|
{
|
|
//alert ("could not find sigBox");
|
|
}
|
|
else
|
|
{
|
|
var currSig = document.getElementById('mySigID');
|
|
currentSig = currSig.value;
|
|
// we try to change the signature
|
|
fm_compose_changeSignature(currentSig,_selectBox.value);
|
|
}
|
|
}
|
|
}
|
|
|
|
function fm_compose_changeSignature(_oldSig,_signatureID) {
|
|
//alert ("found sigBox");
|
|
var htmlFlag = document.getElementsByName('_is_html')[0];
|
|
var currentEditor = htmlFlag.value;
|
|
var content = '';
|
|
var currentMode ='';
|
|
if (_oldSig != _signatureID)
|
|
{
|
|
if (currentEditor == 1)
|
|
{
|
|
currentMode='html';
|
|
var ckeditor = CKEDITOR.instances['body'];
|
|
var content = ckeditor.getData();
|
|
}
|
|
else
|
|
{
|
|
currentMode='plain';
|
|
var plaineditor = document.getElementsByName('body')[0];
|
|
content = plaineditor.value;
|
|
}
|
|
|
|
xajax_doXMLHTTP("felamimail.ajaxfelamimail.changeComposeSignature",composeID,_oldSig,_signatureID,currentMode,content);
|
|
document.getElementById('mySigID').value = _signatureID;
|
|
}
|
|
}
|
|
|
|
function fm_compose_setFolderSelectValue(_folderName) {
|
|
if(currentFolderSelectField) {
|
|
xajax_doXMLHTTPsync("felamimail.ajax_contacts.decodeFolderName",_folderName);
|
|
|
|
currentFolderSelectField.value = (decodedFolder?decodedFolder:_folderName);
|
|
if(!currentFolderSelectField.parentNode.parentNode.nextSibling) {
|
|
addAddressRow(currentFolderSelectField.parentNode.parentNode);
|
|
}
|
|
var nextSibling = currentFolderSelectField.parentNode.parentNode.nextSibling;
|
|
if(nextSibling.nodeType == '3') {
|
|
nextSibling = nextSibling.nextSibling;
|
|
}
|
|
nextSibling.getElementsByTagName('input')[0].focus();
|
|
}
|
|
}
|
|
|
|
function fm_compose_displayFileSelector() {
|
|
fileSelectorWindow = egw_openWindowCentered(displayFileSelectorURL,'fm_compose_fileSelector','550','100',window.outerWidth/2,window.outerHeight/2);
|
|
if(fileSelectorWindowTimer) {
|
|
window.clearTimeout(fileSelectorWindowTimer);
|
|
}
|
|
fileSelectorWindowTimer = window.setInterval('fm_compose_reloadAttachments()', fileSelectorWindowTimeout);
|
|
}
|
|
|
|
function fm_compose_displayVfsSelector() {
|
|
fileSelectorWindow = egw_openWindowCentered(displayVfsSelectorURL,'fm_compose_vfsSelector','640','580',window.outerWidth/2,window.outerHeight/2);
|
|
if(fileSelectorWindowTimer) {
|
|
window.clearTimeout(fileSelectorWindowTimer);
|
|
}
|
|
fileSelectorWindowTimer = window.setInterval('fm_compose_reloadAttachments()', fileSelectorWindowTimeout);
|
|
}
|
|
|
|
function fm_compose_addFile() {
|
|
document.getElementById('statusMessage').innerHTML = 'Sending file to server ...';
|
|
document.getElementById('fileSelectorDIV1').style.display = 'none';
|
|
document.getElementById('fileSelectorDIV2').style.display = 'inline';
|
|
document.fileUploadForm.submit();
|
|
}
|
|
|
|
function fm_compose_reloadAttachments() {
|
|
//searchesPending++;
|
|
//document.title=searchesPending;
|
|
if(fileSelectorWindow.closed == true) {
|
|
window.clearTimeout(fileSelectorWindowTimer);
|
|
xajax_doXMLHTTP("felamimail.ajaxfelamimail.reloadAttachments", composeID);
|
|
}
|
|
}
|
|
|
|
function fm_compose_deleteAttachmentRow(_imageNode, _composeID, _attachmentID) {
|
|
_imageNode.parentNode.parentNode.parentNode.parentNode.deleteRow(_imageNode.parentNode.parentNode.rowIndex);
|
|
xajax_doXMLHTTP("felamimail.ajaxfelamimail.deleteAttachment", _composeID, _attachmentID);
|
|
}
|
|
|
|
function fm_compose_selectSuggestionOnClick(_selectedSuggestion) {
|
|
if(resultboxVisible) {
|
|
currentInputField.value = results[_selectedSuggestion];
|
|
hideResultBox();
|
|
}
|
|
focusToNextInputField();
|
|
searchActive=false;
|
|
}
|
|
|
|
function fm_compose_saveAsDraft() {
|
|
document.getElementById('saveAsDraft').value=1;
|
|
/*
|
|
// if we submit the form, we do not want to execute the onunload stuff
|
|
do_onunload=false;
|
|
document.doit.submit();
|
|
*/
|
|
// we use our new Background function now
|
|
fm_compose_saveAsDraftBG(false);
|
|
justSavedAsDraftManually = true;
|
|
}
|
|
|
|
function fm_compose_printit() {
|
|
document.getElementById('printit').value=1;
|
|
// if we submit the form, we do not want to execute the onunload stuff
|
|
do_onunload=false;
|
|
// ToDo: could be done as fm_compose_saveAsDraftBG() and then reopen it in/as printview
|
|
document.doit.submit();
|
|
|
|
}
|
|
|
|
function fm_blink_currentInputField() {
|
|
currentInputField.style.border = "1px solid #666666";
|
|
window.setTimeout("currentInputField.style.border = ''", 100);
|
|
window.setTimeout("currentInputField.style.border = '1px solid #666666'", 200);
|
|
window.setTimeout("currentInputField.style.border = ''", 450);
|
|
}
|
|
|
|
function fm_compose_sendEMail() {
|
|
var addressTable = document.getElementById('addressRows').rows;
|
|
var addressSet = false;
|
|
var subjectSet = true;
|
|
var doubleCheck = false;
|
|
justClickedSend = true;
|
|
for (i=0; i<addressTable.length; i++) {
|
|
if(addressTable.item(i).cells[2].firstChild.value != '') {
|
|
addressSet = true;
|
|
}
|
|
}
|
|
// check subject
|
|
var subject = document.getElementById('fm_compose_subject');
|
|
if(subject.value == '') {
|
|
subjectSet = false;
|
|
}
|
|
// check to infolog/ to tracker. Only one can be checked.
|
|
var toinfolog = document.getElementById('to_infolog');
|
|
var totracker = document.getElementById('to_tracker');
|
|
if (toinfolog.checked==true && totracker.checked==true)
|
|
{
|
|
doubleCheck = true;
|
|
}
|
|
|
|
if(addressSet == true && subjectSet == true && doubleCheck == false) {
|
|
// if we submit the form, we do not want to execute the onunload stuff
|
|
justSavedAsDraftManually = false;
|
|
document.getElementById('saveAsDraft').value=0;
|
|
do_onunload=false;
|
|
document.doit.submit();
|
|
return true;
|
|
} else {
|
|
justClickedSend = false; // since we did not send at all,....
|
|
}
|
|
}
|
|
|
|
// Set the state of the HTML/Plain toggles based on the _is_html field value
|
|
function fm_set_editor_toggle_states()
|
|
{
|
|
// set the editor toggle based on the state of the editor
|
|
|
|
var htmlFlag = document.getElementsByName('_is_html')[0];
|
|
var toggles = document.getElementsByName('_editorSelect');
|
|
for(var t=0; t<toggles.length; t++)
|
|
{
|
|
if (toggles[t].value == 'html')
|
|
{
|
|
toggles[t].checked = (htmlFlag.value == "1");
|
|
}
|
|
else
|
|
{
|
|
toggles[t].checked = (htmlFlag.value == "0");
|
|
}
|
|
}
|
|
}
|
|
|
|
var scaytStartup;
|
|
// Toggle between the HTML and Plain Text editors
|
|
function fm_toggle_editor(toggler)
|
|
{
|
|
var selectedEditor = toggler.value;
|
|
|
|
// determine the currently displayed editor
|
|
|
|
var htmlFlag = document.getElementsByName('_is_html')[0];
|
|
var mimeType = document.getElementById('mimeType');
|
|
var currentEditor = htmlFlag.value;
|
|
var currentMode ='';
|
|
if (currentEditor == 1)
|
|
{
|
|
currentMode='html';
|
|
}
|
|
else
|
|
{
|
|
currentMode='plain';
|
|
}
|
|
|
|
if (selectedEditor == currentMode)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// do the appropriate conversion
|
|
|
|
var ckeditor = CKEDITOR.instances['body'];
|
|
var plaineditor = document.getElementsByName('body')[0];
|
|
var editorArea = document.getElementById('editorArea');
|
|
|
|
plaineditor.id = "body"; //This has to be added in order to allow XAJAX to write its content into body
|
|
|
|
if (selectedEditor == 'html')
|
|
{
|
|
//Hide the old editor
|
|
plaineditor.style.display = "none";
|
|
if (ckeditor)
|
|
{
|
|
scaytStartup = ckeditor.config.scayt_autoStartup;
|
|
if (ckeditor.env.ie) ckeditor.config.scayt_autoStartup = false;
|
|
ckeditor.config.height = '338px'; // seems to fit the area
|
|
//ckeditor.config.resize_enabled = true;
|
|
}
|
|
else
|
|
{
|
|
scaytStartup = ckeditorConfig.scayt_autoStartup;
|
|
if (CKEDITOR.env.ie) ckeditorConfig.scayt_autoStartup = false;
|
|
ckeditorConfig.height = "338px"; // seems to fit the area
|
|
//ckeditorConfig.resize_enabled = true;
|
|
ckeditor = CKEDITOR.replace('body',ckeditorConfig);
|
|
}
|
|
|
|
//Copy the current ASCII data and recode it via a XAJAX request
|
|
var existingAscii = "<pre>" + plaineditor.value + "</pre>";
|
|
plaineditor.value= '';
|
|
xajax_doXMLHTTP("felamimail.ajaxfelamimail.toggleEditor", composeID, existingAscii, 'simple');
|
|
|
|
htmlFlag.value = "1";
|
|
mimeType.value = "html";
|
|
}
|
|
else
|
|
{
|
|
//Copy the current HTML data and recode it via a XAJAX request
|
|
var existingHtml = ckeditor.getData();
|
|
var ckeditor_span = document.getElementById('cke_body');
|
|
//ckeditor.config.scayt_autoStartup = false;
|
|
ckeditor.setData(' ',function(){this.checkDirty();},true);
|
|
//Hide the old editor
|
|
ckeditor_span.style.display = "none";
|
|
// we need to destroy the ckeditor, as the/a submit is using the content of the ckeditor instance for content of body
|
|
ckeditor.destroy();
|
|
|
|
xajax_doXMLHTTP("felamimail.ajaxfelamimail.toggleEditor", composeID, existingHtml, 'ascii');
|
|
|
|
htmlFlag.value = "0";
|
|
mimeType.value = "text";
|
|
|
|
setupPlainEditor(plaineditor, editorArea.style.height);
|
|
}
|
|
|
|
showAjaxLoader(editorArea);
|
|
}
|
|
|
|
function setupPlainEditor(plaineditor, height)
|
|
{
|
|
if (plaineditor)
|
|
{
|
|
//Do some presets on the new editor
|
|
plaineditor.style.width = "99%";
|
|
plaineditor.style.height = height;
|
|
plaineditor.style.borderWidth = "1px";
|
|
plaineditor.style.borderStyle = "solid";
|
|
plaineditor.style.borderColor = "gray";
|
|
plaineditor.style.margin = "1px";
|
|
plaineditor.value = '';
|
|
}
|
|
}
|
|
|
|
function showAjaxLoader(elem)
|
|
{
|
|
if (elem)
|
|
{
|
|
elem.style.display = "block";
|
|
elem.style.backgroundImage = "url(phpgwapi/templates/default/images/ajax-loader.gif)";
|
|
elem.style.backgroundRepeat = "no-repeat";
|
|
elem.style.backgroundPosition = "center";
|
|
}
|
|
}
|
|
|
|
function hideAjaxLoader(elem)
|
|
{
|
|
if (elem)
|
|
{
|
|
elem.style.display = "inline";
|
|
elem.style.backgroundImage = "";
|
|
}
|
|
}
|
|
|
|
function showPlainEditor(_content)
|
|
{
|
|
var plaineditor = document.getElementsByName('body')[0];
|
|
|
|
//Toggle the plain editor visiblity
|
|
plaineditor.style.visibility = "visible";
|
|
plaineditor.style.display = "block";
|
|
|
|
plaineditor.value = _content;
|
|
plaineditor.focus();
|
|
hideAjaxLoader(document.getElementById('editorArea'));
|
|
}
|
|
|
|
function showHTMLEditor(_content)
|
|
{
|
|
var ckeditor = CKEDITOR.instances['body'];
|
|
var ckeditor_span = document.getElementById('cke_body');
|
|
|
|
//Set the new content
|
|
ckeditor.setData(_content);
|
|
//alert((typeof scaytStartup)+'->'+ scaytStartup);
|
|
ckeditor.focus();
|
|
if ( typeof scaytStartup == boolean ) ckeditor.config.scayt_autoStartup = scaytStartup;
|
|
|
|
//Toggle the plain editor visiblity
|
|
ckeditor_span.style.display = 'block';
|
|
|
|
hideAjaxLoader(document.getElementById('editorArea'));
|
|
}
|
|
|
|
|
|
function removeFCK(fieldId)
|
|
{
|
|
/* var configElement = document.getElementById(fieldId+'___Config');
|
|
var frameElement = document.getElementById(fieldId+'___Frame');*/
|
|
//var textarea = document.forms[this].elements[fieldId];
|
|
var editor = CKEDITOR.instances[fieldId];
|
|
|
|
//if (editor!=null && configElement && frameElement && configElement.parentNode==textarea.parentNode && frameElement.parentNode==textarea.parentNode && document.removeChild)
|
|
if (editor!=null/* && configElement && frameElement && document.removeChild*/)
|
|
{
|
|
/* editor.UpdateLinkedField();
|
|
configElement.parentNode.removeChild(configElement);
|
|
frameElement.parentNode.removeChild(frameElement);
|
|
//textarea.style.display = '';
|
|
delete FCKeditorAPI.Instances[fieldId];
|
|
delete editor;*/
|
|
editor.destroy(false);
|
|
// delete editor;
|
|
}
|
|
|
|
}
|
|
|
|
function changeIdentity(SelectedId)
|
|
{
|
|
// we do the old style (just changing the id, (to be inserted after compose before sending))
|
|
// but setSignature may try to initiate a switch of the signature within the email body if conditions match
|
|
xajax_doXMLHTTP("felamimail.ajaxfelamimail.setComposeSignature", SelectedId.value);
|
|
}
|
|
function setSignature(SelectedId)
|
|
{
|
|
//alert("IS:"+document.getElementById('mySigID').value);
|
|
var sigBox = document.getElementById('mySigID');
|
|
currentSig = sigBox.value;
|
|
|
|
for (i = 0; i < document.doit.signatureID.length; ++i)
|
|
if (document.doit.signatureID.options[i].value == SelectedId)
|
|
{
|
|
document.doit.signatureID.options[i].selected = true;
|
|
document.getElementById('mySigID').value = SelectedId;
|
|
}
|
|
//else
|
|
// document.doit.signatureID.options[i].selected = false;
|
|
|
|
//alert("Now:"+document.getElementById('mySigID').value);
|
|
var sigBox = document.getElementById('signatureID');
|
|
//alert(sigBox);
|
|
// if we find the id, signature is inserted at the top of the message on compose start.
|
|
// so we try toi switch, ...
|
|
if (sigBox == null)
|
|
{
|
|
}
|
|
else
|
|
{
|
|
// we try to change the signature
|
|
if (currentSig != SelectedId) fm_compose_changeSignature(currentSig,SelectedId);
|
|
}
|
|
}
|