mirror of
https://github.com/YunoHost-Apps/radicale_ynh.git
synced 2024-09-03 20:16:14 +02:00
7197 lines
298 KiB
JavaScript
7197 lines
298 KiB
JavaScript
|
/*
|
||
|
InfCloud - the open source CalDAV/CardDAV Web Client
|
||
|
Copyright (C) 2011-2015
|
||
|
Jan Mate <jan.mate@inf-it.com>
|
||
|
Andrej Lezo <andrej.lezo@inf-it.com>
|
||
|
Matej Mihalik <matej.mihalik@inf-it.com>
|
||
|
|
||
|
This program is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU Affero General Public License as
|
||
|
published by the Free Software Foundation, either version 3 of the
|
||
|
License, or (at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU Affero General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Affero General Public License
|
||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
function checkTimezone(timezone)
|
||
|
{
|
||
|
if(timezone in timezones)
|
||
|
return timezone;
|
||
|
else if(timezone in timezones_alt)
|
||
|
return checkTimezone(timezones_alt[timezone]);
|
||
|
return null;
|
||
|
}
|
||
|
function CalDAVeditor_cleanup(repeatHash)
|
||
|
{
|
||
|
if(typeof repeatHash!='undefined')
|
||
|
CalDAVcleanupRegexEnvironment(repeatHash);
|
||
|
else
|
||
|
CalDAVcleanupRegexEnvironment();
|
||
|
|
||
|
if(typeof repeatHash==='undefined' || repeatHash==='form')
|
||
|
{
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
/* IE or FF */
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
// ADD empty SVG to interface (we will replace it later)
|
||
|
$('<svg data-type="select_icon"></svg>').css('display', 'none').insertAfter($('#event_details_template, #todo_details_template').find('select'));
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var newSVG=$(SVG_select).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
$('#event_details_template, #todo_details_template').find('svg[data-type="select_icon"]').replaceWith($('<div>').append($(newSVG).clone()).html());
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function animate_messageCalendar(messageSelector, messageTextSelector, duration, operation)
|
||
|
{
|
||
|
if(operation==undefined)
|
||
|
operation='+=';
|
||
|
var height=$(messageTextSelector).height()+14;
|
||
|
var animation=500;
|
||
|
|
||
|
$(messageSelector).animate({
|
||
|
'max-height': height+'px',
|
||
|
height: (operation==undefined ? '+=' : operation)+height+'px'
|
||
|
},
|
||
|
animation,
|
||
|
function(){
|
||
|
if(operation=='+=')
|
||
|
setTimeout(function(){animate_messageCalendar(messageSelector, messageTextSelector, 0, '-=');}, duration);
|
||
|
}
|
||
|
);
|
||
|
return duration+2*animation;
|
||
|
}
|
||
|
|
||
|
function show_editor_messageCalendar(inputPosition, inputSetClass, inputMessage, inputDuration, callback)
|
||
|
{
|
||
|
var formShown='';
|
||
|
|
||
|
if($('#todo_details_template').css('display')!='none')
|
||
|
formShown='Todo';
|
||
|
else
|
||
|
formShown='Event';
|
||
|
|
||
|
if(inputPosition==undefined || inputPosition=='in')
|
||
|
{
|
||
|
messageSelector='#'+formShown+'InMessage';
|
||
|
messageTextSelector='#'+formShown+'InMessageText';
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
messageSelector='#'+formShown+'Message';
|
||
|
messageTextSelector='#'+formShown+'MessageText';
|
||
|
}
|
||
|
|
||
|
$(messageTextSelector).attr('class', inputSetClass);
|
||
|
$(messageTextSelector).text(inputMessage);
|
||
|
|
||
|
var a=animate_messageCalendar(messageSelector, messageTextSelector, inputDuration);
|
||
|
|
||
|
if(callback!=undefined)
|
||
|
callback(a);
|
||
|
}
|
||
|
|
||
|
function show_editor_loader_messageCalendar(inputForm, inputSetClass, inputMessage, callback)
|
||
|
{
|
||
|
var formShown='';
|
||
|
|
||
|
if(inputForm=='vtodo')
|
||
|
formShown='#todoLoader';
|
||
|
else
|
||
|
formShown='#CAEvent';
|
||
|
|
||
|
messageSelector=formShown+' .saveLoader';
|
||
|
messageTextSelector=formShown+' .saveLoaderInfo';
|
||
|
|
||
|
$(messageTextSelector).addClass(inputSetClass);
|
||
|
$(messageTextSelector).text(inputMessage);
|
||
|
setTimeout(function(){
|
||
|
if(inputForm=='vtodo')
|
||
|
$(formShown).hide();
|
||
|
else
|
||
|
$(messageSelector).hide();
|
||
|
$(messageTextSelector).text('');
|
||
|
$(messageTextSelector).removeClass(inputSetClass);
|
||
|
if(callback!=undefined)
|
||
|
callback(globalHideInfoMessageAfter);
|
||
|
}, globalHideInfoMessageAfter);
|
||
|
|
||
|
}
|
||
|
|
||
|
function items(etag, from, end, title, isall, uid, rid, ev_id, note, displayValue, alertTime, alertNote, untilDate, type, interval, after, repeatStart, repeatEnd, byMonthDay, repeatCount, realRepeatCount, vcalendar, location, alertTimeOut, timeZone, realStart ,realEnd, byDay, rec_id, wkst, classType, avail, hrefUrl,compareString,priority,status,ruleString)
|
||
|
{
|
||
|
this.etag=etag;
|
||
|
this.id=uid;
|
||
|
this.start=from;
|
||
|
this.end=end;
|
||
|
this.title=title;
|
||
|
this.allDay=isall;
|
||
|
this.res_id=rid;
|
||
|
this.ev_id=ev_id;
|
||
|
this.note=note;
|
||
|
this.displayValue=displayValue;
|
||
|
this.alertTime=alertTime;
|
||
|
this.alertNote=alertNote;
|
||
|
this.untilDate=untilDate;
|
||
|
this.repeatStart=repeatStart;
|
||
|
this.repeatEnd=repeatEnd;
|
||
|
this.type=type;
|
||
|
this.interval=interval;
|
||
|
this.after=after;
|
||
|
this.byMonthDay=byMonthDay;
|
||
|
this.repeatCount=repeatCount;
|
||
|
this.realRepeatCount=realRepeatCount;
|
||
|
this.vcalendar=vcalendar;
|
||
|
this.location=location;
|
||
|
this.alertTimeOut=alertTimeOut;
|
||
|
this.timeZone=timeZone;
|
||
|
this.realStart=realStart;
|
||
|
this.realEnd=realEnd;
|
||
|
this.byDay=byDay;
|
||
|
this.rec_id=rec_id;
|
||
|
this.wkst=wkst;
|
||
|
this.classType=classType;
|
||
|
this.avail=avail;
|
||
|
this.hrefUrl=hrefUrl;
|
||
|
this.compareString=compareString;
|
||
|
this.priority=priority;
|
||
|
this.status=status;
|
||
|
this.searchvalue=title.toLowerCase().replace(vCalendar.pre['compressNewLineRex']).multiReplace(globalSearchTransformAlphabet);
|
||
|
this.ruleString=ruleString;
|
||
|
}
|
||
|
|
||
|
function todoItems(from, to, untilDate, type, interval, after, wkst, repeatStart, repeatEnd, repeatCount, realRepeatCount, byDay, location, note, title, uid, vcalendar, etag, alertTime, alertNote, status, filterStatus, rec_id, repeatHash, percent, displayValue, res_id, compareString, timeZone, realStart, realEnd, alertTimeOut,classType, url, completedOn, sequence,priority,renderPriority, finalString,ruleString)
|
||
|
{
|
||
|
this.start=from;
|
||
|
this.end=to;
|
||
|
this.untilDate=untilDate;
|
||
|
this.type=type;
|
||
|
this.interval=interval;
|
||
|
this.after=after;
|
||
|
this.wkst=wkst;
|
||
|
this.repeatStart=repeatStart;
|
||
|
this.repeatEnd=repeatEnd;
|
||
|
this.repeatCount=repeatCount;
|
||
|
this.realRepeatCount=realRepeatCount;
|
||
|
this.byDay=byDay;
|
||
|
this.location=location;
|
||
|
this.note=note;
|
||
|
this.title=title;
|
||
|
this.id=uid;
|
||
|
this.vcalendar=vcalendar;
|
||
|
this.etag=etag;
|
||
|
this.alertTime=alertTime;
|
||
|
this.alertNote=alertNote;
|
||
|
this.status=status;
|
||
|
this.filterStatus=filterStatus;
|
||
|
this.percent=percent;
|
||
|
this.displayValue=displayValue;
|
||
|
this.res_id=res_id;
|
||
|
this.compareString=compareString;
|
||
|
this.alertTimeOut=alertTimeOut;
|
||
|
this.timeZone=timeZone;
|
||
|
this.realStart=realStart;
|
||
|
this.realEnd=realEnd;
|
||
|
this.classType=classType;
|
||
|
this.url=url;
|
||
|
this.rec_id= rec_id;
|
||
|
this.repeatHash= repeatHash;
|
||
|
this.completedOn=completedOn;
|
||
|
this.sequence=sequence;
|
||
|
this.priority=priority;
|
||
|
this.renderPriority=renderPriority;
|
||
|
this.finalString=finalString;
|
||
|
this.searchvalue=title.toLowerCase().replace(vCalendar.pre['compressNewLineRex']).multiReplace(globalSearchTransformAlphabet);
|
||
|
this.ruleString=ruleString;
|
||
|
}
|
||
|
|
||
|
function setLoadingLimit(forceLoad, allSyncMode)
|
||
|
{
|
||
|
if(forceLoad)
|
||
|
{
|
||
|
if(globalSettings.eventstartpastlimit.value!=null && (allSyncMode || globalLimitLoading=='past'))
|
||
|
{
|
||
|
var pastDate = new Date(globalLoadedLimit.getTime());
|
||
|
pastDate.setDate(pastDate.getDate()-7);
|
||
|
globalBeginPast = new Date(pastDate.getTime());
|
||
|
}
|
||
|
if(globalSettings.eventstartfuturelimit.value!=null && (allSyncMode || globalLimitLoading=='future'))
|
||
|
{
|
||
|
var futureDate = new Date(globalToLoadedLimit.getTime());
|
||
|
futureDate.setDate(futureDate.getDate()+14);
|
||
|
globalBeginFuture = new Date(futureDate.getTime());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function initSearchEngine() {
|
||
|
globalCalDAVQs=$('input[data-type="PH_CalDAVsearch"]').quicksearch(globalEventList.displayEventsArray,{
|
||
|
delay: 500,
|
||
|
hide: function() {
|
||
|
this.hidden=true;
|
||
|
$('#SystemCalDavZAP').find('.event_item[data-id="'+this.id+'"]').each(function(){
|
||
|
$(this).addClass('searchCalDAV_hide');
|
||
|
if(this.tagName.toLowerCase()=='tr' && !$(this).siblings().addBack().not('.searchCalDAV_hide').length)
|
||
|
$(this).parent().prev().find('tr').addClass('searchCalDAV_hide');
|
||
|
});
|
||
|
},
|
||
|
show: function() {
|
||
|
this.hidden=false;
|
||
|
$('#SystemCalDavZAP').find('.event_item[data-id="'+this.id+'"]').each(function(){
|
||
|
$(this).removeClass('searchCalDAV_hide');
|
||
|
if(this.tagName.toLowerCase()=='tr')
|
||
|
$(this).parent().prev().find('tr').removeClass('searchCalDAV_hide');
|
||
|
});
|
||
|
},
|
||
|
prepareQuery: function(val) {
|
||
|
return val.multiReplace(globalSearchTransformAlphabet).toLowerCase().split(' ');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
globalCalDAVTODOQs=$('input[data-type="PH_CalDAVTODOsearch"]').quicksearch(globalEventList.displayTodosArray,{
|
||
|
delay: 500,
|
||
|
onAfter: function () {
|
||
|
if(!$('#TodoDisabler').is(':visible'))
|
||
|
$('#todoList').fullCalendar('selectEvent');
|
||
|
},
|
||
|
hide: function() {
|
||
|
this.hidden=true;
|
||
|
$('#SystemCalDavTODO').find('.event_item[data-id="'+this.id+'"]').addClass('searchCalDAV_hide');
|
||
|
},
|
||
|
show: function() {
|
||
|
this.hidden=false;
|
||
|
$('#SystemCalDavTODO').find('.event_item[data-id="'+this.id+'"]').removeClass('searchCalDAV_hide');
|
||
|
},
|
||
|
prepareQuery: function(val) {
|
||
|
return val.multiReplace(globalSearchTransformAlphabet).toLowerCase().split(' ');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
//SORRY FOR THAT-----------------------------------------------------------------------------------------------------
|
||
|
function checkEventLoader(inputCounter, needRefresh)
|
||
|
{
|
||
|
inputCounter.counter++;
|
||
|
if(inputCounter.counter==inputCounter.collectionLength)
|
||
|
{
|
||
|
if(inputCounter.listType=='vevent')
|
||
|
$('#ResourceCalDAVList [data-id="'+inputCounter.uid+'"]').removeClass('r_operate');
|
||
|
else
|
||
|
$('#ResourceCalDAVTODOList [data-id="'+inputCounter.uid+'"]').removeClass('r_operate');
|
||
|
|
||
|
if((globalLimitTodoLoading=='' && globalLimitLoading=='') || ((inputCounter.listType=='vtodo' && globalSettings.todopastlimit.value==null) || (inputCounter.listType=='vevent' && globalSettings.eventstartpastlimit.value==null && globalSettings.eventstartfuturelimit.value==null)))
|
||
|
{
|
||
|
if(inputCounter.listType=='vevent')
|
||
|
globalAccountSettings[inputCounter.resourceIndex].calendarNo--;
|
||
|
else if(inputCounter.listType=='vtodo')
|
||
|
globalAccountSettings[inputCounter.resourceIndex].todoNo--;
|
||
|
|
||
|
if(((globalAccountSettings[inputCounter.resourceIndex].calendarNo==0) && (globalAccountSettings[inputCounter.resourceIndex].todoNo==0) && globalCalDAVInitLoad) || (!globalCalDAVInitLoad))
|
||
|
{
|
||
|
if(!globalCalDAVInitLoad&&inputCounter.typeList.indexOf('vevent')!=-1&&inputCounter.typeList.indexOf('vtodo')!=-1)
|
||
|
updateMainLoader(needRefresh,null,inputCounter.uid);
|
||
|
else
|
||
|
updateMainLoader(needRefresh,inputCounter.listType,inputCounter.uid);
|
||
|
}
|
||
|
}
|
||
|
else if((globalOnlyCalendarNumber>0 && globalOnlyCalendarNumberCount==globalOnlyCalendarNumber) || (globalTodoCalendarNumber>0 && globalOnlyTodoCalendarNumberCount==globalTodoCalendarNumber))
|
||
|
updateMainLoader(needRefresh,inputCounter.listType,inputCounter.uid);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getResourceByCollection(calendarUID)
|
||
|
{
|
||
|
var coll = globalResourceCalDAVList.getCollectionByUID(calendarUID);
|
||
|
var tmp=coll.accountUID.match(vCalendar.pre['accountUidParts']);
|
||
|
var resourceSettings=null;
|
||
|
|
||
|
var resourceCalDAV_href=tmp[1]+tmp[3]+tmp[4];
|
||
|
var resourceCalDAV_user=tmp[2];
|
||
|
|
||
|
for(var i=0;i<globalAccountSettings.length;i++)
|
||
|
if(globalAccountSettings[i].href==resourceCalDAV_href && globalAccountSettings[i].userAuth.userName==resourceCalDAV_user)
|
||
|
resourceSettings=globalAccountSettings[i];
|
||
|
|
||
|
return resourceSettings;
|
||
|
}
|
||
|
|
||
|
function updateMainLoaderText(type)
|
||
|
{
|
||
|
if(globalCalDAVInitLoad)
|
||
|
{
|
||
|
globalCalendarNumberCount++;
|
||
|
$('#MainLoaderInner').html(localization[globalInterfaceLanguage].loadingCalendars.replace('%act%', globalCalendarNumberCount).replace('%total%', globalCalendarNumber));
|
||
|
}
|
||
|
else if((globalLimitTodoLoading!='' || globalLimitLoading!='') && ((type=='vtodo' && globalSettings.todopastlimit.value!=null) || (type=='vevent' && (globalSettings.eventstartpastlimit.value!=null || globalSettings.eventstartfuturelimit.value!=null))))
|
||
|
{
|
||
|
if(type=='vevent' && (globalLimitLoading=='past' || globalLimitLoading=='future'))
|
||
|
{
|
||
|
globalOnlyCalendarNumberCount++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].loadingCalendars.replace('%act%', globalOnlyCalendarNumberCount).replace('%total%', globalOnlyCalendarNumber));
|
||
|
}
|
||
|
else if(type=='vtodo' && (globalLimitTodoLoading=='pastTodo' || globalLimitTodoLoading=='futureTodo'))
|
||
|
{
|
||
|
globalOnlyTodoCalendarNumberCount++;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].loadingCalendars.replace('%act%', globalOnlyTodoCalendarNumberCount).replace('%total%', globalTodoCalendarNumber));
|
||
|
}
|
||
|
}
|
||
|
else if(globalSettingsSaving!='' && globalFirstHideLoader)
|
||
|
{
|
||
|
globalLoadedCollectionsCount++;
|
||
|
if(globalSettingsSaving=='event')
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].loadingCalendars.replace('%act%', globalLoadedCollectionsCount).replace('%total%', globalLoadedCollectionsNumber));
|
||
|
else if(globalSettingsSaving=='todo')
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].loadingCalendars.replace('%act%', globalLoadedCollectionsCount).replace('%total%', globalLoadedCollectionsNumber));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function updateMainLoaderTextFinal()
|
||
|
{
|
||
|
$('#MainLoaderInner').html(localization[globalInterfaceLanguage].renderingE);
|
||
|
}
|
||
|
|
||
|
function updateMainLoaderTextTimezone()
|
||
|
{
|
||
|
$('#MainLoaderInner').html(localization[globalInterfaceLanguage].timezoneChange);
|
||
|
}
|
||
|
|
||
|
function updateMainLoader(needRefresh,type,collUID)
|
||
|
{
|
||
|
if((type==null && $('.r_operate').length==0) || (type=='vtodo' && $('#ResourceCalDAVTODOList .r_operate').length==0) || (type=='vevent' && $('#ResourceCalDAVList .r_operate').length==0))
|
||
|
{
|
||
|
var rex = vCalendar.pre['accountUidParts'];
|
||
|
if(globalCalDAVInitLoad && $('.r_operate').length==0)
|
||
|
{
|
||
|
updateMainLoaderTextFinal();
|
||
|
var counter = 0;
|
||
|
for(calendarUID in globalEventList.displayEventsArray)
|
||
|
counter++;
|
||
|
for(calendarUID in globalEventList.displayTodosArray)
|
||
|
counter++;
|
||
|
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
var beforeScrollTodo = $('#mainTODO').width()-$('#todoList').width();
|
||
|
for(calendarUID in globalEventList.displayEventsArray)
|
||
|
setTimeout(function(calendarUID){
|
||
|
if(globalSettings.displayhiddenevents.value || globalVisibleCalDAVCollections.indexOf(calendarUID)!=-1)
|
||
|
{
|
||
|
var bg = false;
|
||
|
var tmpUID = calendarUID.match(rex);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
|
||
|
var resource = getResourceByCollection(calendarUID);
|
||
|
var collection = globalResourceCalDAVList.getEventCollectionByUID(calendarUID);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
if(collection.makeLoaded)
|
||
|
collection.fcSource = $('#calendar').fullCalendar('addEventSource', {events:globalEventList.displayEventsArray[calendarUID],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor,textColor:checkFontColor(collection.ecolor),background:bg});
|
||
|
}
|
||
|
counter--;
|
||
|
if(counter == 0)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
globalCalDAVQs.cache();
|
||
|
var afterScrollTodo = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScrollTodo!=afterScrollTodo);
|
||
|
globalCalDAVTODOQs.cache();
|
||
|
$('#calendar').fullCalendar('findToday');
|
||
|
globalCalDAVInitLoad=false;
|
||
|
$('#todoList').fullCalendar('allowSelectEvent',true);
|
||
|
$('#todoList').fullCalendar('selectEvent', $('.fc-view-todo .fc-list-day').find('.fc-event:visible:first'));
|
||
|
globalCalWidth=$('#main').width();
|
||
|
$('#SystemCalDavZAP .fc-header-center ').removeClass('r_operate_all');
|
||
|
showTimezones(globalSessionTimeZone, 'Picker');
|
||
|
showTimezones(globalSessionTimeZone, 'PickerTODO');
|
||
|
loadNextApplication(true);
|
||
|
}
|
||
|
},10,calendarUID);
|
||
|
|
||
|
for(calendarUID in globalEventList.displayTodosArray)
|
||
|
setTimeout(function(calendarUID){
|
||
|
if(globalSettings.displayhiddenevents.value || globalVisibleCalDAVTODOCollections.indexOf(calendarUID)!=-1)
|
||
|
{
|
||
|
var collection = globalResourceCalDAVList.getTodoCollectionByUID(calendarUID);
|
||
|
if(collection.makeLoaded)
|
||
|
collection.fcSource = $('#todoList').fullCalendar('addEventSource', {events:globalEventList.displayTodosArray[calendarUID],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor});
|
||
|
}
|
||
|
counter--;
|
||
|
if(counter == 0)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
globalCalDAVQs.cache();
|
||
|
var afterScrollTodo = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScrollTodo!=afterScrollTodo);
|
||
|
globalCalDAVTODOQs.cache();
|
||
|
$('#calendar').fullCalendar('findToday');
|
||
|
globalCalDAVInitLoad=false;
|
||
|
$('#todoList').fullCalendar('allowSelectEvent',true);
|
||
|
$('#todoList').fullCalendar('selectEvent', $('.fc-view-todo .fc-list-day').find('.fc-event:visible:first'));
|
||
|
globalCalWidth=$('#main').width();
|
||
|
$('#SystemCalDavZAP .fc-header-center ').removeClass('r_operate_all');
|
||
|
showTimezones(globalSessionTimeZone, 'Picker');
|
||
|
showTimezones(globalSessionTimeZone, 'PickerTODO');
|
||
|
loadNextApplication(true);
|
||
|
}
|
||
|
},10,calendarUID);
|
||
|
}
|
||
|
else if(!globalCalDAVInitLoad)
|
||
|
{
|
||
|
if(type==null || type=='vevent')
|
||
|
{
|
||
|
var collection = globalResourceCalDAVList.getEventCollectionByUID(collUID);
|
||
|
if((globalSettings.displayhiddenevents.value || globalVisibleCalDAVCollections.indexOf(collUID)!=-1) && globalLimitLoading=='' && needRefresh && typeof collUID!= 'undefined' && collection!=null && collection.fcSource==null)
|
||
|
{
|
||
|
var bg = false;
|
||
|
var tmpUID = collUID.match(rex);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
|
||
|
var resource = getResourceByCollection(collUID);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
collection.fcSource = $('#calendar').fullCalendar('addEventSource', {events:globalEventList.displayEventsArray[collUID],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor,textColor:checkFontColor(collection.ecolor),background:bg});
|
||
|
}
|
||
|
if(needRefresh)
|
||
|
refetchCalendarEvents();
|
||
|
setTimeout(function(){
|
||
|
if(globalLimitLoading!='' && (globalSettings.eventstartpastlimit.value!=null || globalSettings.eventstartfuturelimit.value!=null))
|
||
|
{
|
||
|
$('#CalendarLoader').css('display', 'none');
|
||
|
globalLimitLoading = '';
|
||
|
globalOnlyCalendarNumberCount = 0;
|
||
|
}
|
||
|
$('#SystemCalDavZAP .fc-header-center ').removeClass('r_operate_all');
|
||
|
},10);
|
||
|
}
|
||
|
if(type==null || type=='vtodo')
|
||
|
{
|
||
|
var collection = globalResourceCalDAVList.getTodoCollectionByUID(collUID);
|
||
|
if((globalSettings.displayhiddenevents.value || globalVisibleCalDAVTODOCollections.indexOf(collUID)!=-1) && globalLimitTodoLoading=='' && needRefresh && typeof collUID!= 'undefined' && collection!=null && collection.fcSource==null)
|
||
|
{
|
||
|
collection.fcSource = $('#todoList').fullCalendar('addEventSource', {events:globalEventList.displayTodosArray[collUID],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor});
|
||
|
}
|
||
|
if(needRefresh)
|
||
|
refetchTodoEvents();
|
||
|
setTimeout(function(){
|
||
|
if(globalLimitTodoLoading!='' && globalSettings.todopastlimit.value!=null)
|
||
|
{
|
||
|
$('#CalendarLoaderTODO').css('display', 'none');
|
||
|
globalLimitTodoLoading = '';
|
||
|
globalOnlyTodoCalendarNumberCount = 0;
|
||
|
}
|
||
|
},10);
|
||
|
}
|
||
|
showTimezones(globalSessionTimeZone, 'Picker');
|
||
|
showTimezones(globalSessionTimeZone, 'PickerTODO');
|
||
|
if(globalSettingsSaving!='' && globalLoadedCollectionsCount == globalLoadedCollectionsNumber)
|
||
|
setTimeout(function(){hideUnloadCollectionCallback(globalSettingsSaving);},300);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function checkFontColor(hexColor)
|
||
|
{
|
||
|
if((hexColor!='') && (hexColor!=undefined))
|
||
|
{
|
||
|
var color=hexColor;
|
||
|
var cutHex=((color.charAt(0)=="#") ? color.substring(1, 7) : color);
|
||
|
|
||
|
var resultColor;
|
||
|
/*
|
||
|
var R=parseInt(cutHex.substring(0, 2), 16);
|
||
|
var G=parseInt(cutHex.substring(2, 4), 16);
|
||
|
var B=parseInt(cutHex.substring(4, 6), 16);
|
||
|
|
||
|
var a=1-(0.299*R+0.587*G+0.114*B)/255;
|
||
|
*/
|
||
|
var a=checkColorBrightness(cutHex);
|
||
|
if(a<140)
|
||
|
resultColor='#ffffff'; // dark colors - white font
|
||
|
else
|
||
|
resultColor='#404040'; // bright colors - black font
|
||
|
|
||
|
return resultColor;
|
||
|
}
|
||
|
|
||
|
return '#000';
|
||
|
}
|
||
|
|
||
|
function checkFor(data_id)
|
||
|
{
|
||
|
if(typeof vCalendar.tplM['contentline_TRIGGER']!='undefined' && vCalendar.tplM['contentline_TRIGGER']!='' &&
|
||
|
vCalendar.tplM['contentline_TRIGGER']!=null && vCalendar.tplM['contentline_TRIGGER'].length>0)
|
||
|
vCalendar.tplM['contentline_TRIGGER'].splice(data_id-1, 1);
|
||
|
|
||
|
if(typeof vCalendar.tplM['contentline_VANOTE']!='undefined' && vCalendar.tplM['contentline_VANOTE']!='' &&
|
||
|
vCalendar.tplM['contentline_VANOTE']!=null && vCalendar.tplM['contentline_VANOTE'].length>0)
|
||
|
vCalendar.tplM['contentline_VANOTE'].splice(data_id-1, 1);
|
||
|
|
||
|
if(typeof vCalendar.tplM['contentline_ACTION']!='undefined' && vCalendar.tplM['contentline_ACTION']!='' &&
|
||
|
vCalendar.tplM['contentline_ACTION']!=null && vCalendar.tplM['contentline_ACTION'].length>0)
|
||
|
vCalendar.tplM['contentline_ACTION'].splice(data_id-1, 1);
|
||
|
|
||
|
if(typeof vCalendar.tplM['unprocessedVALARM']!='undefined' && vCalendar.tplM['unprocessedVALARM']!='' &&
|
||
|
vCalendar.tplM['unprocessedVALARM']!=null && vCalendar.tplM['unprocessedVALARM'].length>0)
|
||
|
vCalendar.tplM['unprocessedVALARM'].splice(data_id-1, 1);
|
||
|
}
|
||
|
|
||
|
function checkForTodo(data_id)
|
||
|
{
|
||
|
var rh='form';
|
||
|
if(typeof vCalendar.tplM['VTcontentline_TRIGGER'][rh]!='undefined' && vCalendar.tplM['VTcontentline_TRIGGER'][rh]!='' &&
|
||
|
vCalendar.tplM['VTcontentline_TRIGGER'][rh]!=null && vCalendar.tplM['VTcontentline_TRIGGER'][rh].length>0)
|
||
|
vCalendar.tplM['VTcontentline_TRIGGER'][rh].splice(data_id-1, 1);
|
||
|
|
||
|
if(typeof vCalendar.tplM['VTcontentline_VANOTE'][rh]!='undefined' && vCalendar.tplM['VTcontentline_VANOTE'][rh]!='' &&
|
||
|
vCalendar.tplM['VTcontentline_VANOTE'][rh]!=null && vCalendar.tplM['VTcontentline_VANOTE'][rh].length>0)
|
||
|
vCalendar.tplM['VTcontentline_VANOTE'][rh].splice(data_id-1, 1);
|
||
|
|
||
|
if(typeof vCalendar.tplM['VTcontentline_ACTION'][rh]!='undefined' && vCalendar.tplM['VTcontentline_ACTION'][rh]!='' &&
|
||
|
vCalendar.tplM['VTcontentline_ACTION'][rh]!=null && vCalendar.tplM['VTcontentline_ACTION'][rh].length>0)
|
||
|
vCalendar.tplM['VTcontentline_ACTION'][rh].splice(data_id-1, 1);
|
||
|
|
||
|
if(typeof vCalendar.tplM['VTunprocessedVALARM'[rh]]!='undefined' && vCalendar.tplM['VTunprocessedVALARM'][rh]!='' &&
|
||
|
vCalendar.tplM['VTunprocessedVALARM'][rh] != null && vCalendar.tplM['VTunprocessedVALARM'][rh].length>0)
|
||
|
vCalendar.tplM['VTunprocessedVALARM'][rh].splice(data_id-1, 1);
|
||
|
}
|
||
|
|
||
|
function div(op1, op2)
|
||
|
{
|
||
|
var a=(op1/op2);
|
||
|
|
||
|
var b=(op1%op2)/op2;
|
||
|
return a-b;
|
||
|
}
|
||
|
|
||
|
function binarySearch(array, first, last, value)
|
||
|
{
|
||
|
var mid=0;
|
||
|
value=value.getTime();
|
||
|
while(first<=last)
|
||
|
{
|
||
|
mid=div((first+last), 2);
|
||
|
var date3=$.fullCalendar.parseDate(array[mid].sortStart);
|
||
|
date3=date3.getTime();
|
||
|
|
||
|
if(date3<value)
|
||
|
first=mid+1;
|
||
|
else if(date3>value)
|
||
|
last=mid-1;
|
||
|
else
|
||
|
break;
|
||
|
}
|
||
|
return mid;
|
||
|
}
|
||
|
|
||
|
function parseISO8601(str)
|
||
|
{
|
||
|
// we assume str is a UTC date ending in 'Z'
|
||
|
var err=0;
|
||
|
if(str.indexOf('T')!=-1)
|
||
|
{
|
||
|
var parts=str.split('T');
|
||
|
|
||
|
if(parts.length>1)
|
||
|
var dateParts=parts[0].split('-');
|
||
|
else
|
||
|
return null;
|
||
|
|
||
|
if(dateParts.length>1)
|
||
|
var timeParts=parts[1].split('Z');
|
||
|
else
|
||
|
return null;
|
||
|
|
||
|
var timeSubParts=timeParts[0].split(':');
|
||
|
if(timeSubParts.length>1)
|
||
|
var timeSecParts=timeSubParts[2].split('.');
|
||
|
else
|
||
|
return null;
|
||
|
|
||
|
var timeHours=Number(timeSubParts[0]);
|
||
|
_date=new Date;
|
||
|
_date.setFullYear(Number(dateParts[0]));
|
||
|
_date.setMonth(Number(dateParts[1])-1);
|
||
|
_date.setDate(Number(dateParts[2]));
|
||
|
_date.setHours(Number(timeHours));
|
||
|
_date.setMinutes(Number(timeSubParts[1]));
|
||
|
_date.setSeconds(Number(timeSecParts[0]));
|
||
|
if(timeSecParts[1])
|
||
|
_date.setUTCMilliseconds(Number(timeSecParts[1]));
|
||
|
|
||
|
// by using setUTC methods the date has already been converted to local time(?)
|
||
|
return _date;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var dateParts=str.split('-');
|
||
|
|
||
|
if(dateParts.length!=3)
|
||
|
return null;
|
||
|
|
||
|
_date=new Date;
|
||
|
_date.setFullYear(Number(dateParts[0]));
|
||
|
_date.setMonth(Number(dateParts[1])-1);
|
||
|
_date.setDate(Number(dateParts[2]));
|
||
|
|
||
|
return _date;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getValidRepeatDay(inputDate, RepeatDay)
|
||
|
{
|
||
|
var newDate='';
|
||
|
if(typeof RepeatDay=='string')
|
||
|
newDate=$.fullCalendar.parseDate(RepeatDay);
|
||
|
else
|
||
|
newDate = new Date(RepeatDay.getTime());
|
||
|
|
||
|
var monthNumber=inputDate.getMonth()+2;
|
||
|
var dayOfMonth=newDate.getDate();
|
||
|
|
||
|
if(monthNumber>12)
|
||
|
monthNumber=1;
|
||
|
|
||
|
var lastDayInMonth=new Date(inputDate.getFullYear(), monthNumber, 0);
|
||
|
lastDayInMonth=lastDayInMonth.getDate();
|
||
|
|
||
|
if(lastDayInMonth<dayOfMonth)
|
||
|
return lastDayInMonth;
|
||
|
else
|
||
|
return dayOfMonth;
|
||
|
}
|
||
|
|
||
|
function generateRepeatInstances(inputObj)
|
||
|
{
|
||
|
var dayDifference=inputObj.items.end.getTime()-inputObj.items.start.getTime();
|
||
|
var alertTimeOut=new Array();
|
||
|
var lastGenDate= inputObj.repeatStart;
|
||
|
var rule=null;
|
||
|
if(typeof inputObj.rule == 'undefined')
|
||
|
{
|
||
|
var options = RRule.parseString(inputObj.items.ruleString);
|
||
|
options.dtstart = new Date(inputObj.items.start.getTime());
|
||
|
if(inputObj.untilDate!=='')
|
||
|
options.until = inputObj.untilDate;
|
||
|
rule = new RRule(options);
|
||
|
}
|
||
|
else
|
||
|
rule=inputObj.rule;
|
||
|
|
||
|
rule.between(inputObj.repeatStart, inputObj.futureRLimit, true, function(date,i){
|
||
|
var varDate=new Date(date.getTime());
|
||
|
|
||
|
var varEndDate=new Date(date.getTime()+dayDifference);
|
||
|
var checkRec=false, valOffsetFrom='', intOffset='';
|
||
|
|
||
|
inputObj.items.realRepeatCount++;
|
||
|
|
||
|
if(inputObj.recurrence_id_array.length>0)
|
||
|
checkRec=isInRecurrenceArray(varDate,inputObj.stringUID,inputObj.recurrence_id_array, inputObj.tzName);
|
||
|
if(!inputObj.items.allDay)
|
||
|
{
|
||
|
var dateStart,dateEnd;
|
||
|
if(globalSettings.timezonesupport.value && inputObj.items.timeZone in timezones)
|
||
|
valOffsetFrom=getOffsetByTZ(inputObj.items.timeZone, varDate);
|
||
|
var realStart=new Date(varDate.getTime());
|
||
|
dateStart=new Date(realStart.getTime());
|
||
|
if(valOffsetFrom)
|
||
|
{
|
||
|
intOffset=(getLocalOffset(dateStart)*-1*1000)-valOffsetFrom.getSecondsFromOffset()*1000;
|
||
|
dateStart.setTime(dateStart.getTime()+intOffset);
|
||
|
}
|
||
|
if(inputObj.exDates.length>0)
|
||
|
if(inputObj.exDates.indexOf(dateStart.toString())!=-1)
|
||
|
checkRec=true;
|
||
|
|
||
|
var realEnd=new Date(varEndDate.getTime());
|
||
|
dateEnd=new Date(realEnd.getTime());
|
||
|
if(intOffset)
|
||
|
dateEnd.setTime(dateEnd.getTime()+intOffset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
realStart=new Date(varDate.getTime());
|
||
|
if(inputObj.exDates.length>0)
|
||
|
if(inputObj.exDates.indexOf(realStart.toString())!=-1)
|
||
|
checkRec=true;
|
||
|
dateStart=$.fullCalendar.formatDate(realStart,"yyyy-MM-dd'T'HH:mm:ss");
|
||
|
realEnd=new Date(varEndDate.getTime());
|
||
|
dateEnd =$.fullCalendar.formatDate(realEnd,"yyyy-MM-dd'T'HH:mm:ss");
|
||
|
}
|
||
|
|
||
|
var checkDateTime = new Date(inputObj.repeatStart.getTime());
|
||
|
if(typeof dateStart=='string')
|
||
|
checkDateTime=$.fullCalendar.formatDate(inputObj.repeatStart,"yyyy-MM-dd'T'HH:mm:ss");
|
||
|
if((inputObj.items.after!=='' && inputObj.items.realRepeatCount>(parseInt(inputObj.items.after,10))) || (typeof dateStart=='object' && (checkDateTime-dateStart)==0) || (typeof dateStart=='string' && checkDateTime==dateStart))
|
||
|
{
|
||
|
checkRec=true;
|
||
|
inputObj.items.realRepeatCount--;
|
||
|
}
|
||
|
|
||
|
if(!checkRec)
|
||
|
{
|
||
|
if(!inputObj.ignoreAlarms)
|
||
|
alertTimeOut=setAlertTimeouts(false,inputObj.alertTime, dateStart, dateEnd, {allDay:inputObj.items.allDay, title:inputObj.items.title},false, inputObj.items.id);
|
||
|
inputObj.items.repeatCount++;
|
||
|
var tmpObj=$.extend({},inputObj.items,{
|
||
|
start:dateStart,
|
||
|
end:dateEnd,
|
||
|
realStart:realStart,
|
||
|
realEnd:realEnd,
|
||
|
repeatCount:inputObj.items.repeatCount,
|
||
|
realRepeatCount:inputObj.items.realRepeatCount,
|
||
|
alertTimeOut:alertTimeOut
|
||
|
});
|
||
|
globalEventList.displayEventsArray[inputObj.items.res_id].splice(globalEventList.displayEventsArray[inputObj.items.res_id].length, 0, tmpObj);
|
||
|
lastGenDate = new Date(varDate.getTime());
|
||
|
}
|
||
|
return true;
|
||
|
});
|
||
|
|
||
|
|
||
|
if(typeof globalEventList.repeatable[inputObj.items.id] == 'undefined')
|
||
|
globalEventList.repeatable[inputObj.items.id]={
|
||
|
lastGenDate:lastGenDate,
|
||
|
recurrence_id_array:inputObj.recurrence_id_array,
|
||
|
stringUID:inputObj.stringUID,
|
||
|
exDates:inputObj.exDates,
|
||
|
alertTime:inputObj.alertTime,
|
||
|
ignoreAlarms:inputObj.ignoreAlarms,
|
||
|
rule:rule,
|
||
|
items:inputObj.items
|
||
|
};
|
||
|
else
|
||
|
globalEventList.repeatable[inputObj.items.id].lastGenDate=lastGenDate;
|
||
|
}
|
||
|
|
||
|
function generateTodoRepeatInstances(inputObj)
|
||
|
{
|
||
|
var rule=null;
|
||
|
var alertTimeOut=new Array();
|
||
|
var firstDateSaved=false;
|
||
|
if(inputObj.repeatStart)
|
||
|
var resStart=new Date($.fullCalendar.parseDate(inputObj.items.realStart).getTime());
|
||
|
else if(inputObj.repeatEnd)
|
||
|
var resStart=new Date($.fullCalendar.parseDate(inputObj.items.realEnd).getTime());
|
||
|
|
||
|
if(typeof inputObj.lastGenDate!='undefined')
|
||
|
var resStart=new Date(inputObj.lastGenDate.getTime());
|
||
|
|
||
|
var lastGenDate=new Date(resStart.getTime());
|
||
|
if(typeof inputObj.rule == 'undefined')
|
||
|
{
|
||
|
var options = RRule.parseString(inputObj.items.ruleString);
|
||
|
options.dtstart = new Date(resStart.getTime());
|
||
|
if(inputObj.untilDate!=='')
|
||
|
options.until = inputObj.untilDate;
|
||
|
rule = new RRule(options);
|
||
|
}
|
||
|
else
|
||
|
rule=inputObj.rule;
|
||
|
|
||
|
var dates = new Array();
|
||
|
dates = rule.between(resStart, new Date(inputObj.futureRLimit.getTime()), true);
|
||
|
|
||
|
if(dates.length>0 && (dates[0]-resStart)!=0 || dates.length==0)
|
||
|
dates.splice(0,0,resStart);
|
||
|
|
||
|
var futureLimitDate = new Date(inputObj.futureRLimit.getTime());
|
||
|
futureLimitDate.setHours(resStart.getHours());
|
||
|
futureLimitDate.setMinutes(resStart.getMinutes());
|
||
|
futureLimitDate.setSeconds(resStart.getSeconds());
|
||
|
|
||
|
|
||
|
var startCheck = new Date(dates[dates.length-1].getTime());
|
||
|
|
||
|
|
||
|
var iterationEnd = dates.length;
|
||
|
if(globalSettings.appleremindersmode.value || (inputObj.repeatEnd=='' && inputObj.repeatStart!=''))
|
||
|
for(var i=0; i<globalMaxNextInstanesTodoCheckingNumber;i++)
|
||
|
{
|
||
|
var endCheck = new Date(startCheck.getTime()+ 30 * 24 * 3600 * 1000 + (24*3600*1000));
|
||
|
var tmpArray = new Array();
|
||
|
tmpArray = rule.between(startCheck, endCheck , true);
|
||
|
if(tmpArray.length>0)
|
||
|
{
|
||
|
var isBreak=false;
|
||
|
for(var j=0;j<tmpArray.length;j++)
|
||
|
if(dates[dates.length-1]-tmpArray[j]!=0)
|
||
|
{
|
||
|
dates.push(tmpArray[j]);
|
||
|
iterationEnd=dates.length-1;
|
||
|
isBreak=true;
|
||
|
break;
|
||
|
}
|
||
|
if(isBreak)
|
||
|
break;
|
||
|
}
|
||
|
startCheck=new Date(endCheck.getTime());
|
||
|
}
|
||
|
|
||
|
|
||
|
var realRepeatCount=inputObj.realRepeatCount;
|
||
|
var repeatCount=inputObj.repeatCount;
|
||
|
for(var i=0;i<iterationEnd;i++)
|
||
|
{
|
||
|
var varDate='', varEndDate='', valOffsetFrom='',intOffset=0;
|
||
|
var checkCont=false, dateStart='', dateEnd='';
|
||
|
|
||
|
realRepeatCount++;
|
||
|
if(inputObj.repeatEnd!='' && inputObj.repeatStart!='')
|
||
|
{
|
||
|
|
||
|
varDate=new Date(dates[i].getTime());
|
||
|
varEndDate=new Date(varDate.getTime()+inputObj.dayDifference);
|
||
|
}
|
||
|
else if(inputObj.repeatEnd=='' && inputObj.repeatStart!='')
|
||
|
{
|
||
|
varDate=new Date(dates[i].getTime());
|
||
|
if(i<=(dates.length-2))
|
||
|
{
|
||
|
varEndDate=new Date(dates[i+1].getTime());
|
||
|
varEndDate.setMinutes(varEndDate.getMinutes()-1);
|
||
|
}
|
||
|
}
|
||
|
else if(inputObj.repeatEnd!='' && inputObj.repeatStart=='')
|
||
|
{
|
||
|
varEndDate=new Date(dates[i].getTime());
|
||
|
if(i>0)
|
||
|
{
|
||
|
varDate=new Date(dates[i-1].getTime());
|
||
|
varDate.setMinutes(varDate.getMinutes()+1);
|
||
|
}
|
||
|
else if(typeof inputObj.previousRepeatStart!='undefined'&&inputObj.previousRepeatStart!=='')
|
||
|
varDate=new Date(inputObj.previousRepeatStart);
|
||
|
}
|
||
|
|
||
|
if(varDate!=='')
|
||
|
{
|
||
|
if(globalSettings.timezonesupport.value && inputObj.items.timeZone in timezones)
|
||
|
valOffsetFrom=getOffsetByTZ(inputObj.items.timeZone, varDate);
|
||
|
var realStart=new Date(varDate.getTime());
|
||
|
dateStart=new Date(varDate.getTime());
|
||
|
if(valOffsetFrom && (typeof inputObj.previousRepeatStart=='undefined' || inputObj.previousRepeatStart==''))
|
||
|
{
|
||
|
intOffset=(getLocalOffset(dateStart)*-1*1000)-valOffsetFrom.getSecondsFromOffset()*1000;
|
||
|
dateStart.setTime(dateStart.getTime()+intOffset);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if(varEndDate!=='')
|
||
|
{
|
||
|
|
||
|
var realEnd=new Date(varEndDate.getTime());
|
||
|
var dateEnd=new Date(varEndDate.getTime());
|
||
|
if(intOffset)
|
||
|
dateEnd.setTime(dateEnd.getTime()+intOffset);
|
||
|
}
|
||
|
|
||
|
if(inputObj.repeatStart!='')
|
||
|
{
|
||
|
checkCont=isInRecurrenceArray(realStart,inputObj.stringUID,inputObj.recurrence_id_array, inputObj.items.timeZone);
|
||
|
if(inputObj.exDates.length>0)
|
||
|
if(inputObj.exDates.indexOf(dateStart.toString())!=-1)
|
||
|
checkCont=true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
checkCont=isInRecurrenceArray(realEnd,inputObj.stringUID,inputObj.recurrence_id_array, inputObj.items.timeZone);
|
||
|
if(inputObj.exDates.length>0)
|
||
|
if(inputObj.exDates.indexOf(dateEnd.toString())!=-1)
|
||
|
checkCont=true;
|
||
|
}
|
||
|
|
||
|
if(inputObj.items.after!=='' && !globalSettings.appleremindersmode.value && realRepeatCount>(parseInt(inputObj.items.after,10)))
|
||
|
{
|
||
|
checkCont=true;
|
||
|
realRepeatCount--;
|
||
|
}
|
||
|
|
||
|
if(globalSettings.appleremindersmode.value && firstDateSaved && inputObj.todoArray.length==1)
|
||
|
{
|
||
|
globalAppleSupport.nextDates[inputObj.items.id] = new Date(dateEnd.getTime());
|
||
|
break;
|
||
|
}
|
||
|
if(!checkCont)
|
||
|
{
|
||
|
if(!inputObj.ignoreAlarms)
|
||
|
alertTimeOut=setAlertTimeouts(true, inputObj.alertTime, (inputObj.repeatStart=='' ? dateEnd : dateStart), (inputObj.repeatEnd=='' ? dateStart : dateEnd), {title:inputObj.items.title, status:inputObj.items.status},!firstDateSaved,inputObj.items.id);
|
||
|
firstDateSaved = true;
|
||
|
repeatCount++;
|
||
|
var tmpObj=$.extend({},inputObj.items,{
|
||
|
start:dateStart,
|
||
|
end:(inputObj.repeatEnd=='' && i==(dates.length-1) ? '' : dateEnd),
|
||
|
realStart:realStart,
|
||
|
realEnd:realEnd,
|
||
|
repeatCount:repeatCount,
|
||
|
realRepeatCount:realRepeatCount,
|
||
|
alertTimeOut:alertTimeOut
|
||
|
});
|
||
|
|
||
|
inputObj.preTodoArray.splice(inputObj.preTodoArray.length, 0, tmpObj);
|
||
|
if(inputObj.repeatStart!='')
|
||
|
lastGenDate = new Date(dateStart.getTime());
|
||
|
else
|
||
|
lastGenDate = new Date(dateEnd.getTime());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(typeof globalEventList.repeatableTodo[inputObj.items.id] == 'undefined')
|
||
|
globalEventList.repeatableTodo[inputObj.items.id]={
|
||
|
todoArray:inputObj.todoArray,
|
||
|
lastGenDate:lastGenDate,
|
||
|
dayDifference:inputObj.dayDifference,
|
||
|
recurrence_id_array:inputObj.recurrence_id_array,
|
||
|
stringUID:inputObj.stringUID,
|
||
|
exDates:inputObj.exDates,
|
||
|
realRepeatCount:realRepeatCount,
|
||
|
repeatCount:repeatCount,
|
||
|
alertTime:inputObj.alertTime,
|
||
|
ignoreAlarms:inputObj.ignoreAlarms,
|
||
|
rule:rule,
|
||
|
items:inputObj.items
|
||
|
};
|
||
|
else
|
||
|
{
|
||
|
globalEventList.repeatableTodo[inputObj.items.id].lastGenDate=lastGenDate;
|
||
|
globalEventList.repeatableTodo[inputObj.items.id].realRepeatCount=realRepeatCount;
|
||
|
globalEventList.repeatableTodo[inputObj.items.id].repeatCount=repeatCount;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function loadRepeatEvents(inputRepeatEvent,prevLimit,toLimit)
|
||
|
{
|
||
|
var repeatFromLine=new Date(prevLimit.getFullYear(), prevLimit.getMonth(), prevLimit.getDate(), 0, 0, 0);
|
||
|
generateRepeatInstances({
|
||
|
untilDate:inputRepeatEvent.items.untilDate,
|
||
|
repeatStart:inputRepeatEvent.lastGenDate,
|
||
|
futureRLimit:toLimit,
|
||
|
stringUID:inputRepeatEvent.stringUID,
|
||
|
recurrence_id_array:inputRepeatEvent.recurrence_id_array,
|
||
|
exDates:inputRepeatEvent.exDates,
|
||
|
alertTime:inputRepeatEvent.alertTime,
|
||
|
ignoreAlarms:inputRepeatEvent.ignoreAlarms,
|
||
|
rule:inputRepeatEvent.rule,
|
||
|
items:inputRepeatEvent.items
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function loadRepeatTodo(inputRepeatTodo,prevLimit)
|
||
|
{
|
||
|
var preTodoArray=new Array();
|
||
|
var previousRepeatStart = '';
|
||
|
var repeatInstances = globalEventList.displayTodosArray[inputRepeatTodo.items.res_id].filter(function(elm){return elm.id==inputRepeatTodo.items.id && elm.type!=''});
|
||
|
if(repeatInstances.length>0)
|
||
|
{
|
||
|
var index = globalEventList.displayTodosArray[inputRepeatTodo.items.res_id].indexOf(repeatInstances[repeatInstances.length-1]);
|
||
|
previousRepeatStart = repeatInstances[repeatInstances.length-1].start;
|
||
|
globalEventList.displayTodosArray[inputRepeatTodo.items.res_id].splice(index,1);
|
||
|
}
|
||
|
generateTodoRepeatInstances({
|
||
|
loadRepeatTodo:true,
|
||
|
rule:inputRepeatTodo.rule,
|
||
|
realRepeatCount:--inputRepeatTodo.realRepeatCount,
|
||
|
repeatCount:--inputRepeatTodo.repeatCount,
|
||
|
dayDifference:inputRepeatTodo.dayDifference,
|
||
|
untilDate:inputRepeatTodo.items.untilDate,
|
||
|
repeatStart:inputRepeatTodo.items.repeatStart,
|
||
|
repeatEnd:inputRepeatTodo.items.repeatEnd,
|
||
|
futureRLimit:globalToLoadedLimitTodo,
|
||
|
stringUID:inputRepeatTodo.stringUID,
|
||
|
recurrence_id_array:inputRepeatTodo.recurrence_id_array,
|
||
|
exDates:inputRepeatTodo.exDates,
|
||
|
alertTime:inputRepeatTodo.alertTime,
|
||
|
ignoreAlarms:inputRepeatTodo.ignoreAlarms,
|
||
|
isChange:false,
|
||
|
lastGenDate:inputRepeatTodo.lastGenDate,
|
||
|
todoArray:inputRepeatTodo.todoArray,
|
||
|
preTodoArray:preTodoArray,
|
||
|
previousRepeatStart:previousRepeatStart,
|
||
|
items:inputRepeatTodo.items
|
||
|
});
|
||
|
|
||
|
$.merge(globalEventList.displayTodosArray[inputRepeatTodo.items.res_id],preTodoArray);
|
||
|
}
|
||
|
|
||
|
function getPrevMonths(viewStart)
|
||
|
{
|
||
|
|
||
|
if(globalLimitLoading!='future' && globalLimitLoading!='past' && globalSettings.eventstartpastlimit.value!=null && viewStart < globalLoadedLimit)
|
||
|
{
|
||
|
globalLoadedLimit.setMonth(globalLoadedLimit.getMonth()-globalSettings.eventstartpastlimit.value-1);
|
||
|
globalOnlyCalendarNumberCount = 0
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
globalLimitLoading='past';
|
||
|
setCalendarNumber(false);
|
||
|
CalDAVnetLoadCollection(globalResourceCalDAVList.collections[0], true, false, 0, globalResourceCalDAVList.collections);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getNextMonths(viewEnd)
|
||
|
{
|
||
|
if(globalLimitLoading!='future' && globalLimitLoading!='past' && viewEnd > globalToLoadedLimit)
|
||
|
{
|
||
|
var limitSet = (globalSettings.eventstartfuturelimit.value!=null);
|
||
|
var futureLimit = limitSet ? globalSettings.eventstartfuturelimit.value : 2;
|
||
|
var prevLimit = new Date(globalBeginFuture.getTime());
|
||
|
globalToLoadedLimit.setMonth(globalToLoadedLimit.getMonth()+futureLimit+1);
|
||
|
var futureDate = new Date(globalToLoadedLimit.getTime());
|
||
|
futureDate.setDate(futureDate.getDate()+14);
|
||
|
|
||
|
if(limitSet)
|
||
|
{
|
||
|
globalOnlyCalendarNumberCount = 0;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
globalLimitLoading='future';
|
||
|
}
|
||
|
|
||
|
for (var repeat in globalEventList.repeatable)
|
||
|
loadRepeatEvents(globalEventList.repeatable[repeat],prevLimit,futureDate);
|
||
|
|
||
|
if(limitSet)
|
||
|
{
|
||
|
setCalendarNumber(false);
|
||
|
CalDAVnetLoadCollection(globalResourceCalDAVList.collections[0], true, false, 0, globalResourceCalDAVList.collections);
|
||
|
}
|
||
|
else
|
||
|
globalBeginFuture = new Date(futureDate.getTime());
|
||
|
|
||
|
refetchCalendarEvents();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getPrevMonthsTodo(fromCalendar)
|
||
|
{
|
||
|
if(globalLimitTodoLoading=='futureTODO' && globalLimitTodoLoading=='pastTODO')
|
||
|
return false;
|
||
|
var actualTodoMonth = new Date($('#todoList').fullCalendar('getView').start.getTime());
|
||
|
actualTodoMonth.setDate(1);
|
||
|
|
||
|
if(globalSettings.todopastlimit.value!=null && actualTodoMonth < globalLoadedLimitTodo)
|
||
|
{
|
||
|
if(typeof fromCalendar!='undefined' && fromCalendar!=null && fromCalendar)
|
||
|
globalLoadedLimitTodo = new Date(actualTodoMonth.getTime());
|
||
|
else
|
||
|
globalLoadedLimitTodo.setMonth(globalLoadedLimitTodo.getMonth()-globalSettings.todopastlimit.value-1);
|
||
|
globalOnlyTodoCalendarNumberCount = 0;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
globalLimitTodoLoading='pastTodo';
|
||
|
setCalendarNumber(false);
|
||
|
CalDAVnetLoadCollection(globalResourceCalDAVList.TodoCollections[0], true, false, 0, globalResourceCalDAVList.TodoCollections);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getNextMonthsTodo(fromCalendar)
|
||
|
{
|
||
|
if(globalLimitTodoLoading=='futureTODO' && globalLimitTodoLoading=='pastTODO')
|
||
|
return false;
|
||
|
//var limitSet = (!globalSettings.appleremindersmode.value && globalSettings.eventstartfuturelimit.value!=null)
|
||
|
var limitSet=false;
|
||
|
var futureLimit = limitSet ? globalSettings.eventstartfuturelimit.value : 2;
|
||
|
var actualTodoMonth = new Date($('#todoList').fullCalendar('getView').end.getTime());
|
||
|
actualTodoMonth.setMonth(actualTodoMonth.getMonth()+1);
|
||
|
actualTodoMonth.setDate(1);
|
||
|
|
||
|
if(actualTodoMonth > globalToLoadedLimitTodo)
|
||
|
{
|
||
|
var prevLimit = new Date(globalToLoadedLimitTodo.getTime());
|
||
|
if(typeof fromCalendar!='undefined' && fromCalendar!=null && fromCalendar)
|
||
|
{
|
||
|
globalToLoadedLimitTodo = new Date(actualTodoMonth.getTime())
|
||
|
globalToLoadedLimitTodo.setMonth(globalToLoadedLimitTodo.getMonth()+1);
|
||
|
}
|
||
|
else
|
||
|
globalToLoadedLimitTodo.setMonth(globalToLoadedLimitTodo.getMonth()+futureLimit+1);
|
||
|
|
||
|
if(limitSet)
|
||
|
{
|
||
|
globalOnlyTodoCalendarNumberCount = 0;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
globalLimitTodoLoading='futureTodo';
|
||
|
}
|
||
|
|
||
|
for(var repeat in globalEventList.repeatableTodo)
|
||
|
loadRepeatTodo(globalEventList.repeatableTodo[repeat],prevLimit);
|
||
|
|
||
|
if(limitSet)
|
||
|
{
|
||
|
setCalendarNumber(false);
|
||
|
CalDAVnetLoadCollection(globalResourceCalDAVList.TodoCollections[0], true, false, 0, globalResourceCalDAVList.TodoCollections);
|
||
|
}
|
||
|
|
||
|
refetchTodoEvents();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function showAlertEvents(inputUID, realDelay, alarmObject)
|
||
|
{
|
||
|
if(maxAlarmValue<realDelay)
|
||
|
{
|
||
|
var delay=realDelay-maxAlarmValue;
|
||
|
if(maxAlarmValue<delay)
|
||
|
setTimeout(function(){showAlertEvents(inputUID, delay,alarmObject);}, maxAlarmValue);
|
||
|
else
|
||
|
setTimeout(function(){showAlertEvents(inputUID, delay,alarmObject);}, delay);
|
||
|
return false;
|
||
|
}
|
||
|
var rid=inputUID.substring(0, inputUID.lastIndexOf('/')+1);
|
||
|
|
||
|
if(globalSettings.showhiddenalarms.value)
|
||
|
hiddenCheck = true;
|
||
|
else
|
||
|
hiddenCheck = false;
|
||
|
|
||
|
if((alarmObject!=undefined && hiddenCheck) || (alarmObject!=undefined && !hiddenCheck && globalVisibleCalDAVCollections.indexOf(rid)!=-1))
|
||
|
{
|
||
|
$('#alertBox').css('visibility', 'visible');
|
||
|
$('#AlertDisabler').fadeIn(globalEditorFadeAnimation)
|
||
|
|
||
|
var date=$.fullCalendar.parseDate(alarmObject.start);
|
||
|
var dateString='';
|
||
|
var formattedDate = $.datepicker.formatDate(globalSettings.datepickerformat.value,date);
|
||
|
if(formattedDate!='')
|
||
|
dateString+=' : '+formattedDate;
|
||
|
|
||
|
var timeString='';
|
||
|
if(!alarmObject.allDay)
|
||
|
{
|
||
|
var timeS = $.fullCalendar.formatDate(date, globalSettings.ampmformat.value?'h:mm TT{ - h:mm TT}':'H:mm{ - H:mm}')
|
||
|
if(timeS!='')
|
||
|
timeString=' - '+timeS;
|
||
|
}
|
||
|
|
||
|
$('#alertBoxContent').append("<div class='alert_item'><img src='images/calendarB.svg' alt='Calendar'/><label>"+alarmObject.title+dateString+timeString+"</label></div>");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function showAlertTODO(inputUID, realDelay, alarmObject)
|
||
|
{
|
||
|
if(globalSettings.ignorecompletedorcancelledalarms.value && (alarmObject.status=='COMPLETED' || alarmObject.status== 'CANCELLED'))
|
||
|
return false;
|
||
|
if(maxAlarmValue<realDelay)
|
||
|
{
|
||
|
var delay=realDelay-maxAlarmValue;
|
||
|
|
||
|
if(maxAlarmValue<delay)
|
||
|
setTimeout(function(){showAlertTODO(inputUID, delay, alarmObject);}, maxAlarmValue);
|
||
|
else
|
||
|
setTimeout(function(){showAlertTODO(inputUID, delay, alarmObject);}, delay);
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
resDate='';
|
||
|
var rid=inputUID.substring(0, inputUID.lastIndexOf('/')+1);
|
||
|
|
||
|
if(globalSettings.showhiddenalarms.value)
|
||
|
hiddenCheck = true;
|
||
|
else
|
||
|
hiddenCheck = false;
|
||
|
|
||
|
if(hiddenCheck || (!hiddenCheck && globalVisibleCalDAVTODOCollections.indexOf(rid)!=-1))
|
||
|
{
|
||
|
$('#alertBox').css('visibility', 'visible');
|
||
|
$('#AlertDisabler').fadeIn(globalEditorFadeAnimation);
|
||
|
|
||
|
var dateString='';
|
||
|
var date=$.fullCalendar.parseDate(alarmObject.start);
|
||
|
var formattedDate=$.datepicker.formatDate(globalSettings.datepickerformat.value,date);
|
||
|
if(formattedDate!='')
|
||
|
dateString=' : '+formattedDate;
|
||
|
|
||
|
var timeString=''
|
||
|
var timeS = $.fullCalendar.formatDate(date,globalSettings.ampmformat.value?'h:mm TT{ - h:mm TT}':'H:mm{ - H:mm}');
|
||
|
if(timeS!='')
|
||
|
timeString=' - '+timeS;
|
||
|
$('#alertBoxContent').append("<div class='alert_item'><img src='images/todoB.svg' alt='Todo'/><label>"+alarmObject.title+dateString+timeString+"</label></div>");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function clearAlertEvents()
|
||
|
{
|
||
|
$('#alertBoxContent').html('');
|
||
|
$('#alertBox').css('visibility', 'hidden');
|
||
|
$('#AlertDisabler').fadeOut(globalEditorFadeAnimation);
|
||
|
}
|
||
|
|
||
|
function addAndEdit(isFormHidden, deleteMode)
|
||
|
{
|
||
|
var inputUID='';
|
||
|
if($('#uid').val()!='')
|
||
|
var coll = globalResourceCalDAVList.getEventCollectionByUID($('#uid').val().substring(0, $('#uid').val().lastIndexOf('/')+1));
|
||
|
else
|
||
|
var coll = globalResourceCalDAVList.getEventCollectionByUID($('#event_calendar').val());
|
||
|
var res = getAccount(coll.accountUID);
|
||
|
var tmp=res.href.match(vCalendar.pre['hrefRex']);
|
||
|
var origUID=tmp[1]+res.userAuth.userName+'@'+tmp[2];
|
||
|
|
||
|
if($('#etag').val()!='')
|
||
|
inputUID=$('#uid').val();
|
||
|
else if($('#event_calendar').val()!='choose')
|
||
|
inputUID = $('#event_calendar').val()+'';
|
||
|
else
|
||
|
return false;
|
||
|
dataToVcalendar('EDIT',origUID, inputUID, $('#etag').val(), '', isFormHidden, deleteMode);
|
||
|
}
|
||
|
|
||
|
function interResourceEdit(op, delUID,isFormHidden)
|
||
|
{
|
||
|
var inputUID='';
|
||
|
if($('#uid').val()!='')
|
||
|
var coll = globalResourceCalDAVList.getEventCollectionByUID($('#uid').val().substring(0, $('#uid').val().lastIndexOf('/')+1));
|
||
|
else
|
||
|
var coll = globalResourceCalDAVList.getEventCollectionByUID($('#event_calendar').val());
|
||
|
var res = getAccount(coll.accountUID);
|
||
|
var tmp=res.href.match(vCalendar.pre['hrefRex']);
|
||
|
var origUID=tmp[1]+res.userAuth.userName+'@'+tmp[2];
|
||
|
|
||
|
if(op != 'MOVE_IN')
|
||
|
$('#etag').val('');
|
||
|
var srcUID=$('#uid').val().substring($('#uid').val().lastIndexOf('/')+1, $('#uid').val().length);
|
||
|
|
||
|
inputUID=$('#event_calendar').val()+srcUID;
|
||
|
dataToVcalendar(op, origUID, inputUID, '', delUID,isFormHidden);
|
||
|
}
|
||
|
|
||
|
function save(isFormHidden, deleteMode)
|
||
|
{
|
||
|
$('#event_details_template').scrollTop(0);
|
||
|
if(!deleteMode)
|
||
|
{
|
||
|
if($('#event_details_template').find('img[data-type=invalidSmall]').filter(function(){return this.style.display != 'none'}).length>0)
|
||
|
{
|
||
|
show_editor_loader_messageCalendar('vevent', 'message_error', localization[globalInterfaceLanguage].txtErorInput);
|
||
|
return false;
|
||
|
}
|
||
|
var a=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_from').val());
|
||
|
var a2=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_to').val());
|
||
|
|
||
|
var datetime_from=$.fullCalendar.formatDate(a, 'yyyy-MM-dd');
|
||
|
var datetime_to=$.fullCalendar.formatDate(a2, 'yyyy-MM-dd');
|
||
|
var time_from='00:00';
|
||
|
var time_to='00:00';
|
||
|
if(!$('#allday').prop('checked'))
|
||
|
{
|
||
|
if($('#time_from').val()!='' && $('#time_to').val()!='')
|
||
|
{
|
||
|
time_from=new Date(Date.parse("01/02/1990, "+$('#time_from').val()));
|
||
|
time_from=$.fullCalendar.formatDate(time_from, 'HH:mm');
|
||
|
time_to=new Date(Date.parse("01/02/1990, "+$('#time_to').val()));
|
||
|
time_to=$.fullCalendar.formatDate(time_to, 'HH:mm');
|
||
|
}
|
||
|
}
|
||
|
if($.fullCalendar.parseDate(datetime_from+'T'+time_from+'Z')>$.fullCalendar.parseDate(datetime_to+'T'+time_to+'Z'))
|
||
|
{
|
||
|
show_editor_loader_messageCalendar('vevent', 'message_error', localization[globalInterfaceLanguage].txtErrorDates);
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var calUID=$('#uid').val().substring(0, $('#uid').val().lastIndexOf('/'));
|
||
|
|
||
|
var newUID=$('#event_calendar').val().substring(0, $('#event_calendar').val().length-1);
|
||
|
if($('#event_calendar').val()!='choose')
|
||
|
{
|
||
|
if($('#name').val()=='')
|
||
|
$('#name').val(localization[globalInterfaceLanguage].pholderNewEvent);
|
||
|
|
||
|
if(newUID==calUID || ($('#etag').val()=='' && $('#event_calendar').val()!='choose'))
|
||
|
addAndEdit(isFormHidden, deleteMode);
|
||
|
// else if(calUID.substring(0, calUID.lastIndexOf('/'))==newUID.substring(0, newUID.lastIndexOf('/')))
|
||
|
// {
|
||
|
// var delUID=$('#uid').val();
|
||
|
// interResourceEdit('MOVE_IN',delUID, isFormHidden);
|
||
|
// }
|
||
|
else if(/*calUID.substring(0, calUID.lastIndexOf('/'))!=newUID.substring(0, newUID.lastIndexOf('/')) &&*/ $('#etag').val()!='')
|
||
|
{
|
||
|
var delUID=$('#uid').val();
|
||
|
interResourceEdit('MOVE_OTHER',delUID, isFormHidden);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
show_editor_loader_messageCalendar('vevent', 'message_error', localization[globalInterfaceLanguage].txtNotChoose);
|
||
|
}
|
||
|
|
||
|
function deleteEvent()
|
||
|
{
|
||
|
var delUID=$('#uid').val();
|
||
|
|
||
|
if(delUID!='')
|
||
|
deleteVcalendarFromCollection(delUID,'vevent');
|
||
|
}
|
||
|
|
||
|
function loadAdditionalCollections(collectionType)
|
||
|
{
|
||
|
if(globalSettingsSaving!='')
|
||
|
return false;
|
||
|
globalSettingsSaving=collectionType;
|
||
|
var inSettings = $.extend({},globalSettings);
|
||
|
var rex = new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)');
|
||
|
var sel = '';
|
||
|
var key = '';
|
||
|
if(collectionType=='event')
|
||
|
{
|
||
|
key='loadedcalendarcollections';
|
||
|
inSettings.loadedcalendarcollections = {value:new Array(), locked: globalSettings[key].locked};
|
||
|
$('#ResourceCalDAVList').find('.unloadCheck').each(function(cin,cel)
|
||
|
{
|
||
|
if($(cel).prop('checked'))
|
||
|
{
|
||
|
var uidParts=$(cel).attr('data-id').match(rex);
|
||
|
inSettings.loadedcalendarcollections.value.splice(inSettings.loadedcalendarcollections.value.length , 0, uidParts[1]+uidParts[3]);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
}
|
||
|
else if(collectionType=='todo')
|
||
|
{
|
||
|
sel='TODO';
|
||
|
key='loadedtodocollections';
|
||
|
inSettings.loadedtodocollections = {value : new Array(), locked: globalSettings[key].locked};
|
||
|
$('#ResourceCalDAVTODOList').find('.unloadCheck').each(function(cin,cel)
|
||
|
{
|
||
|
if($(cel).prop('checked'))
|
||
|
{
|
||
|
var uidParts=$(cel).attr('data-id').match(rex);
|
||
|
inSettings.loadedtodocollections.value.splice(inSettings.loadedtodocollections.value.length , 0, uidParts[1]+uidParts[3]);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if($(inSettings[key].value).not(globalSettings[key].value).length > 0 || $(globalSettings[key].value).not(inSettings[key].value).length > 0)
|
||
|
{
|
||
|
$('#CalendarLoader'+sel).removeClass('loader_hidden');
|
||
|
$('#ResourceCalDAV'+sel+'List').find('input[type="checkbox"]').prop('disabled',true);
|
||
|
var setC=0;
|
||
|
for(var i=0;i<globalAccountSettings.length;i++)
|
||
|
if(globalAccountSettings[i].href.indexOf(globalLoginUsername)!=-1 && globalAccountSettings[i].settingsAccount)
|
||
|
{
|
||
|
setC++;
|
||
|
netSaveSettings(globalAccountSettings[i], inSettings, false, true);
|
||
|
break;
|
||
|
}
|
||
|
if(setC==0)
|
||
|
cancelUnloadedCollections(collectionType);
|
||
|
}
|
||
|
else
|
||
|
hideUnloadedCollections(collectionType,true);
|
||
|
}
|
||
|
|
||
|
function showUnloadedCollections(collectionType)
|
||
|
{
|
||
|
if((collectionType=='event'&&globalEventCollectionsLoading) || (collectionType=='todo'&&globalTodoCollectionsLoading))
|
||
|
return false;
|
||
|
var sel=null;
|
||
|
var locString='';
|
||
|
if(collectionType=='event')
|
||
|
{
|
||
|
globalEventCollectionsLoading=true;
|
||
|
sel='';
|
||
|
locString='txtEnabledCalendars';
|
||
|
}
|
||
|
else if(collectionType=='todo')
|
||
|
{
|
||
|
globalTodoCollectionsLoading=true;
|
||
|
sel='TODO';
|
||
|
locString='txtEnabledTodoLists';
|
||
|
}
|
||
|
if(isAvaible('CardDavMATE'))
|
||
|
$('#showUnloadedAddressbooks').css('display','none');
|
||
|
if(sel=='TODO')
|
||
|
$('#showUnloadedCalendars').css('display','none');
|
||
|
else
|
||
|
$('#showUnloadedCalendarsTODO').css('display','none');
|
||
|
$('#ResourceCalDAV'+sel+'List').find('input[type="checkbox"]').prop('disabled',true);
|
||
|
$('#CalendarLoader'+sel).children('.loaderInfo').text(localization[globalInterfaceLanguage].loadingCollectionList).parent().fadeIn(300);
|
||
|
var resList = $('#ResourceCalDAV'+sel+'List');
|
||
|
var resHeader = '.resourceCalDAV'+sel+'_header';
|
||
|
var resItem = '.resourceCalDAV'+sel+'_item';
|
||
|
$('#ResourceCalDAV'+sel+'List').find('input[type="checkbox"]').prop('disabled',false);
|
||
|
$('#CalendarLoader'+sel).children('.loaderInfo').text('').parent().addClass('loader_hidden');
|
||
|
resList.find('.resourceCalDAV_item_selected').removeClass('resourceCalDAV_item_selected');
|
||
|
resList.find('input').css('display','none');
|
||
|
// header display
|
||
|
resList.children('.resourceCalDAV'+sel+'_header').each(function(){
|
||
|
if($(this).css('display')=='none')
|
||
|
$(this).addClass('unloaded').css('display','');
|
||
|
var headerClickElm = $('<input type="checkbox" class="unloadCheckHeader" style="position:absolute;top:3px;right:0px;margin-right:6px;"/>');
|
||
|
headerClickElm.change(function(){
|
||
|
loadResourceChBoxClick(this, '#ResourceCalDAV'+sel+'List', resHeader, resItem, resItem);
|
||
|
});
|
||
|
$(this).addClass('load_mode').append(headerClickElm);
|
||
|
});
|
||
|
// caldav_item display
|
||
|
resList.find('.resourceCalDAV'+sel+'_item').each(function(){
|
||
|
if(typeof $(this).attr('data-id') != 'undefined')
|
||
|
{
|
||
|
var newInputElm = $('<input type="checkbox" class="unloadCheck" data-id="'+$(this).attr('data-id')+'" style="position:absolute;top:8px;right:0px;margin-right:6px;"/>');
|
||
|
newInputElm.change(function(){
|
||
|
loadCollectionChBoxClick(this, '#ResourceCalDAV'+sel+'List', resHeader, resItem, resItem);
|
||
|
});
|
||
|
$(this).addClass('load_mode').append(newInputElm);
|
||
|
if($(this).css('display')=='none')
|
||
|
$(this).addClass('unloaded');
|
||
|
else
|
||
|
newInputElm.prop('checked',true);
|
||
|
newInputElm.trigger('change');
|
||
|
}
|
||
|
});
|
||
|
$('#showUnloadedCalendars'+sel).css('display','none');
|
||
|
$('#resourceCalDAV'+sel+'_h').find('.resourceCalDAV'+sel+'_text').text(localization[globalInterfaceLanguage][locString]);
|
||
|
var origH = resList.find('.resourceCalDAV'+sel+'_header.unloaded').eq(0).css('height');
|
||
|
var origC = resList.find('.resourceCalDAV'+sel+'_item.unloaded').eq(0).css('height');
|
||
|
resList.find('.resourceCalDAV'+sel+'_header.unloaded').css({height:0,display:''}).animate({height:origH},300);
|
||
|
resList.find('.resourceCalDAV'+sel+'_item.unloaded').css({height:0,display:''}).animate({height:origC},300);
|
||
|
resList.animate({'top':49},300);
|
||
|
}
|
||
|
|
||
|
function cancelUnloadedCollections(collectionType)
|
||
|
{
|
||
|
var sel=null;
|
||
|
var loadedCollections=null;
|
||
|
if(collectionType=='event')
|
||
|
{
|
||
|
sel='';
|
||
|
loadedCollections=globalSettings.loadedcalendarcollections.value;
|
||
|
}
|
||
|
else if(collectionType=='todo')
|
||
|
{
|
||
|
sel='TODO';
|
||
|
loadedCollections=globalSettings.loadedtodocollections.value;
|
||
|
}
|
||
|
|
||
|
$('#ResourceCalDAV'+sel+'List').children('.resourceCalDAV'+sel+'_item').each(function(){
|
||
|
var isLoaded=false;
|
||
|
if(typeof globalCrossServerSettingsURL!='undefined'&&globalCrossServerSettingsURL!=null&globalCrossServerSettingsURL)
|
||
|
{
|
||
|
var uidParts=$(this).attr('data-id').match(RegExp('/([^/]+/[^/]+/)$'));
|
||
|
var tmpParts = uidParts[1].match('^(.*/)([^/]+)/$');
|
||
|
var checkHref=decodeURIComponent(tmpParts[1])+tmpParts[2]+'/';
|
||
|
var found=false;
|
||
|
for(var l=0;l<loadedCollections.length;l++)
|
||
|
{
|
||
|
var tmpParts2 = loadedCollections[l].match('^(.*/)([^/]+)/([^/]+)/$');
|
||
|
var checkHref2=decodeURIComponent(tmpParts2[2])+'/'+tmpParts2[3]+'/';
|
||
|
if(checkHref==checkHref2)
|
||
|
{
|
||
|
found=true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
isLoaded=found;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var uidParts=$(this).attr('data-id').match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)'));
|
||
|
var checkHref=uidParts[1]+uidParts[3];
|
||
|
isLoaded=(loadedCollections.indexOf(checkHref)!=-1);
|
||
|
}
|
||
|
|
||
|
var unloadCh=$(this).find('.unloadCheck');
|
||
|
var checked=unloadCh.prop('checked');
|
||
|
|
||
|
if((isLoaded && !checked) || (!isLoaded && checked))
|
||
|
unloadCh.prop('checked',!checked).trigger('change');
|
||
|
});
|
||
|
hideUnloadedCollections(collectionType,true);
|
||
|
}
|
||
|
|
||
|
function hideUnloadedCollections(collectionType, withCallback)
|
||
|
{
|
||
|
var sel=null;
|
||
|
var locString='';
|
||
|
if(collectionType=='event') {
|
||
|
sel='';
|
||
|
locString='txtCalendars';
|
||
|
}
|
||
|
else if(collectionType=='todo') {
|
||
|
sel='TODO';
|
||
|
locString='txtTodoLists';
|
||
|
}
|
||
|
|
||
|
var resList=$('#ResourceCalDAV'+sel+'List');
|
||
|
resList.find(':input.unloadCheck').remove();
|
||
|
resList.find(':input.unloadCheckHeader').remove();
|
||
|
resList.find('.load_mode').removeClass('load_mode');
|
||
|
resList.find(':input').css('display','');
|
||
|
|
||
|
$('#resourceCalDAV'+sel+'_h').find('.resourceCalDAV'+sel+'_text').text(localization[globalInterfaceLanguage][locString]);
|
||
|
resList.find('.resourceCalDAV'+sel+'_header.unloaded').animate({height:0},300).promise().done(function(){
|
||
|
resList.find('.resourceCalDAV'+sel+'_header.unloaded').css({display:'none',height:''});
|
||
|
});
|
||
|
resList.find('.resourceCalDAV'+sel+'_item.unloaded').animate({height:0},300).promise().done(function(){
|
||
|
resList.find('.resourceCalDAV'+sel+'_item.unloaded').css({display:'none',height:''});
|
||
|
resList.find('.resourceCalDAV'+sel+'_header').not('.unloaded').each(function(){
|
||
|
var triggerInput=$(this).nextUntil('.resourceCalDAV'+sel+'_header').filter(':visible').first().find('input[type="checkbox"]');
|
||
|
collectionChBoxClick(triggerInput.get(0), '#ResourceCalDAV'+sel+'List', '.resourceCalDAV'+sel+'_header', '.resourceCalDAV'+sel+'_item', null, false);
|
||
|
});
|
||
|
resList.find('.unloaded').removeClass('unloaded');
|
||
|
if(collectionType=='event')
|
||
|
globalEventCollectionsLoading=false;
|
||
|
else if(collectionType=='todo')
|
||
|
globalTodoCollectionsLoading=false;
|
||
|
if(withCallback)
|
||
|
hideUnloadCollectionCallback(collectionType);
|
||
|
});
|
||
|
resList.animate({'top':24},300);
|
||
|
if(withCallback)
|
||
|
$('#CalendarLoader'+sel).fadeOut(300,function(){
|
||
|
$(this).removeClass('loader_hidden');
|
||
|
});
|
||
|
if(isAvaible('CardDavMATE'))
|
||
|
$('#showUnloadedAddressbooks').css('display','block');
|
||
|
if(sel=='TODO')
|
||
|
$('#showUnloadedCalendars').css('display','block');
|
||
|
else
|
||
|
$('#showUnloadedCalendarsTODO').css('display','block');
|
||
|
}
|
||
|
|
||
|
function hideUnloadCollectionCallback(collectionType)
|
||
|
{
|
||
|
var sel=null;
|
||
|
if(collectionType=='event')
|
||
|
sel='';
|
||
|
else if(collectionType=='todo')
|
||
|
sel='TODO';
|
||
|
|
||
|
$('#showUnloadedCalendars'+sel).css('display','');
|
||
|
globalFirstHideLoader=true;
|
||
|
globalSettingsSaving='';
|
||
|
selectActiveCalendar();
|
||
|
if(collectionType=='event')
|
||
|
{
|
||
|
|
||
|
if($('#ResourceCalDAVList .resourceCalDAV_item:visible').not('.resourceCalDAV_item_ro').length==0)
|
||
|
{
|
||
|
$('#eventFormShower').css('display','none');
|
||
|
$('#calendar').fullCalendar('setOptions',{'selectable':false});
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$('#eventFormShower').css('display','block');
|
||
|
$('#calendar').fullCalendar('setOptions',{'selectable':true});
|
||
|
}
|
||
|
}
|
||
|
else if(collectionType=='todo')
|
||
|
{
|
||
|
if($('#ResourceCalDAVTODOList .resourceCalDAVTODO_item:visible').not('.resourceCalDAV_item_ro').length==0)
|
||
|
$('#eventFormShowerTODO').css('display','none');
|
||
|
else
|
||
|
$('#eventFormShowerTODO').css('display','block');
|
||
|
}
|
||
|
$('#CalendarLoader'+sel).css('display','none');
|
||
|
$('#ResourceCalDAV'+sel+'List').find('input[type="checkbox"]').prop('disabled',false);
|
||
|
}
|
||
|
|
||
|
function disableAll()
|
||
|
{
|
||
|
var counter=0;
|
||
|
$('#ResourceCalDAVList').children(':visible').each(function(i, e){
|
||
|
if($(e).hasClass('resourceCalDAV_item') && $(e).find('input').prop('checked'))
|
||
|
counter++;
|
||
|
});
|
||
|
if(!counter)
|
||
|
return false;
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
globalResourceRefreshNumber++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
$('#calendar').fullCalendar('removeEvents');
|
||
|
$('#calendar').fullCalendar('removeEventSources');
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
}
|
||
|
|
||
|
for(var j=0;j<globalResourceCalDAVList.collections.length;j++)
|
||
|
{
|
||
|
if(globalResourceCalDAVList.collections[j].href!=undefined)
|
||
|
{
|
||
|
var uid=globalResourceCalDAVList.collections[j].uid;
|
||
|
var check=$('#ResourceCalDAVList').find('[name^="'+uid+'"]');
|
||
|
if(check.prop('checked'))
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(uid);
|
||
|
if(pos!=-1)
|
||
|
globalVisibleCalDAVCollections.splice(pos, 1);
|
||
|
check.prop('checked', false);
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideCalendarEvents(uid);
|
||
|
}
|
||
|
collectionChBoxClick(check.get(0), '#'+check.parent().parent().attr('id'), '.resourceCalDAV_header', '.resourceCalDAV_item', null, false)
|
||
|
}
|
||
|
/*else
|
||
|
{
|
||
|
var check=$('#ResourceCalDAVList').children().eq(globalResourceCalDAVList.collections[j].index+1).find('input');
|
||
|
if(check.prop('checked'))
|
||
|
check.prop('checked', false);
|
||
|
}*/
|
||
|
}
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
globalResourceRefreshNumber--;
|
||
|
if(!globalResourceRefreshNumber)
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableAll()
|
||
|
{
|
||
|
var counter=0;
|
||
|
$('#ResourceCalDAVList').children(':visible').each(function(i, e){
|
||
|
if($(e).hasClass('resourceCalDAV_item') && !$(e).find('input').prop('checked'))
|
||
|
counter++;
|
||
|
});
|
||
|
if(!counter)
|
||
|
return false;
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
globalResourceRefreshNumber++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
}
|
||
|
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
var rex = vCalendar.pre['accountUidParts'];
|
||
|
for(var j=0;j<globalResourceCalDAVList.collections.length;j++)
|
||
|
{
|
||
|
if(globalResourceCalDAVList.collections[j].href!=undefined)
|
||
|
{
|
||
|
var uid=globalResourceCalDAVList.collections[j].uid;
|
||
|
var check=$('#ResourceCalDAVList').find('[name^="'+uid+'"]');
|
||
|
if(!check.prop('checked'))
|
||
|
{
|
||
|
check.prop('checked', true);
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(uid);
|
||
|
if(pos==-1)
|
||
|
{
|
||
|
globalVisibleCalDAVCollections[globalVisibleCalDAVCollections.length]=uid;
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
showCalendarEvents(uid);
|
||
|
else
|
||
|
{
|
||
|
var bg = false;
|
||
|
var tmpUID = uid.match(rex);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
var resource = getResourceByCollection(uid);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var k=0; k<rbCalendars.length;k++)
|
||
|
{
|
||
|
if (typeof rbCalendars[k]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[k]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[k].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[k]=='object' && hrefUID.match(rbCalendars[k])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
var collection = globalResourceCalDAVList.collections[j];
|
||
|
collection.fcSource = $('#calendar').fullCalendar('addEventSource', {events:globalEventList.displayEventsArray[uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor,textColor:checkFontColor(collection.ecolor),background:bg});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
collectionChBoxClick(check.get(0), '#'+check.parent().parent().attr('id'), '.resourceCalDAV_header', '.resourceCalDAV_item', null, false)
|
||
|
}
|
||
|
/*else
|
||
|
{
|
||
|
var check=$('#ResourceCalDAVList').children().eq(globalResourceCalDAVList.collections[j].index+1).find('input');
|
||
|
if(!check.prop('checked'))
|
||
|
check.prop('checked', true);
|
||
|
}*/
|
||
|
}
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
globalResourceRefreshNumber--;
|
||
|
if(!globalResourceRefreshNumber)
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function disableAllTodo()
|
||
|
{
|
||
|
disableAll();
|
||
|
|
||
|
// var counter=0;
|
||
|
// $('#ResourceCalDAVTODOList').children(':visible').each(function(i, e){
|
||
|
// if($(e).hasClass('resourceCalDAVTODO_item') && $(e).find('input').prop('checked'))
|
||
|
// counter++;
|
||
|
// });
|
||
|
// if(!counter)
|
||
|
// return false;
|
||
|
|
||
|
// if(!globalSettings.displayhiddenevents.value)
|
||
|
// {
|
||
|
// globalResourceRefreshNumberTodo++;
|
||
|
// $('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
// var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
// $('#todoList').fullCalendar( 'removeEvents');
|
||
|
// $('#todoList').fullCalendar( 'removeEventSources');
|
||
|
// var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
// rerenderTodo(beforeScroll!=afterScroll);
|
||
|
// }
|
||
|
|
||
|
// for(var j=0;j<globalResourceCalDAVList.TodoCollections.length;j++)
|
||
|
// {
|
||
|
// if(globalResourceCalDAVList.TodoCollections[j].href!=undefined)
|
||
|
// {
|
||
|
// var uid=globalResourceCalDAVList.TodoCollections[j].uid;
|
||
|
// var check=$('#ResourceCalDAVTODOList').find('[name^="'+uid+'"]');
|
||
|
// if(check.prop('checked'))
|
||
|
// {
|
||
|
// var pos=globalVisibleCalDAVTODOCollections.indexOf(uid);
|
||
|
// if(pos!=-1)
|
||
|
// globalVisibleCalDAVTODOCollections.splice(pos, 1);
|
||
|
// check.prop('checked', false);
|
||
|
// if(globalSettings.displayhiddenevents.value)
|
||
|
// hideCalendarTodos(uid);
|
||
|
// }
|
||
|
// collectionChBoxClick(check.get(0), '#'+check.parent().parent().attr('id'), '.resourceCalDAVTODO_header', '.resourceCalDAVTODO_item', null, false);
|
||
|
// }
|
||
|
// /*else
|
||
|
// {
|
||
|
// var check=$('#ResourceCalDAVTODOList').children().eq(globalResourceCalDAVList.TodoCollections[j].index+1).find('input');
|
||
|
// if(check.prop('checked'))
|
||
|
// check.prop('checked', false);
|
||
|
// }*/
|
||
|
// }
|
||
|
|
||
|
// if(!globalSettings.displayhiddenevents.value)
|
||
|
// {
|
||
|
// globalResourceRefreshNumberTodo--;
|
||
|
// if(!globalResourceRefreshNumberTodo)
|
||
|
// $('#CalendarLoaderTODO').css('display','none');
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
function enableAllTodo()
|
||
|
{
|
||
|
enableAll();
|
||
|
|
||
|
// var counter=0;
|
||
|
// $('#ResourceCalDAVTODOList').children(':visible').each(function(i, e){
|
||
|
// if($(e).hasClass('resourceCalDAVTODO_item') && !$(e).find('input').prop('checked'))
|
||
|
// counter++;
|
||
|
// });
|
||
|
// if(!counter)
|
||
|
// return false;
|
||
|
|
||
|
// if(!globalSettings.displayhiddenevents.value)
|
||
|
// {
|
||
|
// globalResourceRefreshNumberTodo++;
|
||
|
// $('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
// }
|
||
|
|
||
|
// var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
// var rex = vCalendar.pre['accountUidParts'];
|
||
|
// for(var j=0;j<globalResourceCalDAVList.TodoCollections.length;j++)
|
||
|
// {
|
||
|
// if(globalResourceCalDAVList.TodoCollections[j].href!=undefined)
|
||
|
// {
|
||
|
// var uid=globalResourceCalDAVList.TodoCollections[j].uid;
|
||
|
// var check=$('#ResourceCalDAVTODOList').find('[name^="'+uid+'"]');
|
||
|
// if(!check.prop('checked'))
|
||
|
// {
|
||
|
// check.prop('checked', true);
|
||
|
// var pos=globalVisibleCalDAVTODOCollections.indexOf(uid);
|
||
|
// if(pos==-1)
|
||
|
// {
|
||
|
// globalVisibleCalDAVTODOCollections[globalVisibleCalDAVTODOCollections.length]=uid;
|
||
|
// if(globalSettings.displayhiddenevents.value)
|
||
|
// showCalendarTodos(uid);
|
||
|
// else
|
||
|
// {
|
||
|
// var bg = false;
|
||
|
// var tmpUID = uid.match(rex);
|
||
|
// var hrefUID='';
|
||
|
// if(tmpUID!=null)
|
||
|
// hrefUID = tmpUID[4];
|
||
|
// var resource = getResourceByCollection(uid);
|
||
|
// if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
// {
|
||
|
// var rbCalendars = '';
|
||
|
// if(resource.backgroundCalendars instanceof Array)
|
||
|
// rbCalendars=resource.backgroundCalendars;
|
||
|
// else
|
||
|
// rbCalendars = [resource.backgroundCalendars];
|
||
|
// for(var k=0; k<rbCalendars.length;k++)
|
||
|
// {
|
||
|
// if (typeof rbCalendars[k]=='string')
|
||
|
// {
|
||
|
// var index = hrefUID.indexOf(rbCalendars[k]);
|
||
|
// if(index!=-1)
|
||
|
// if(hrefUID.length == (index+rbCalendars[k].length))
|
||
|
// bg=true;
|
||
|
// }
|
||
|
// else if (typeof rbCalendars[k]=='object' && hrefUID.match(rbCalendars[k])!=null)
|
||
|
// bg = true;
|
||
|
// }
|
||
|
// }
|
||
|
// var collection = globalResourceCalDAVList.TodoCollections[j];
|
||
|
// collection.fcSource = $('#todoList').fullCalendar('addEventSource', {events:globalEventList.displayTodosArray[collection.uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor});
|
||
|
// }
|
||
|
// }
|
||
|
// }
|
||
|
// collectionChBoxClick(check.get(0), '#'+check.parent().parent().attr('id'), '.resourceCalDAVTODO_header', '.resourceCalDAVTODO_item', null, false);
|
||
|
// }
|
||
|
// /*else
|
||
|
// {
|
||
|
// var check=$('#ResourceCalDAVTODOList').children().eq(globalResourceCalDAVList.TodoCollections[j].index+1).find('input');
|
||
|
// if(!check.prop('checked'))
|
||
|
// check.prop('checked', true);
|
||
|
// }*/
|
||
|
// }
|
||
|
|
||
|
// if(!globalSettings.displayhiddenevents.value)
|
||
|
// {
|
||
|
// var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
// rerenderTodo(beforeScroll!=afterScroll);
|
||
|
// globalResourceRefreshNumberTodo--;
|
||
|
// if(!globalResourceRefreshNumberTodo)
|
||
|
// $('#CalendarLoaderTODO').css('display','none');
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
function disableResource(header)
|
||
|
{
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
globalResourceRefreshNumber++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
}
|
||
|
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
$(header).nextUntil('.resourceCalDAV_header').each(function(i, e){
|
||
|
var uid=$(e).attr('data-id');
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(uid);
|
||
|
if(pos!=-1)
|
||
|
{
|
||
|
globalVisibleCalDAVCollections.splice(pos, 1);
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideCalendarEvents(uid);
|
||
|
else
|
||
|
$('#calendar').fullCalendar('removeEventSource', globalResourceCalDAVList.getCollectionByUID(uid).fcSource);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
globalResourceRefreshNumber--;
|
||
|
if(!globalResourceRefreshNumber)
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableResource(header)
|
||
|
{
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
globalResourceRefreshNumber++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
}
|
||
|
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
$(header).nextUntil('.resourceCalDAV_header').each(function(i, e){
|
||
|
var uid=$(e).attr('data-id');
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(uid);
|
||
|
if(pos==-1)
|
||
|
{
|
||
|
globalVisibleCalDAVCollections[globalVisibleCalDAVCollections.length]=uid;
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
showCalendarEvents(uid);
|
||
|
else
|
||
|
{
|
||
|
var bg = false;
|
||
|
var tmpUID = uid.match(vCalendar.pre['accountUidParts']);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
var resource = getResourceByCollection(uid);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
var collection = globalResourceCalDAVList.getCollectionByUID(uid)
|
||
|
collection.fcSource = $('#calendar').fullCalendar('addEventSource', {events:globalEventList.displayEventsArray[uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor,textColor:checkFontColor(collection.ecolor),background:bg});
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
globalResourceRefreshNumber--;
|
||
|
if(!globalResourceRefreshNumber)
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function disableResourceTodo(header)
|
||
|
{
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
globalResourceRefreshNumberTodo++;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
}
|
||
|
|
||
|
var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
$(header).nextUntil('.resourceCalDAVTODO_header').each(function(i, e){
|
||
|
var uid=$(e).attr('data-id');
|
||
|
var pos=globalVisibleCalDAVTODOCollections.indexOf(uid);
|
||
|
if(pos!=-1)
|
||
|
{
|
||
|
globalVisibleCalDAVTODOCollections.splice(pos, 1);
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideCalendarTodos(uid);
|
||
|
else
|
||
|
$('#todoList').fullCalendar('removeEventSource', globalResourceCalDAVList.getTodoCollectionByUID(uid).fcSource);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScroll!=afterScroll);
|
||
|
globalResourceRefreshNumberTodo--;
|
||
|
if(!globalResourceRefreshNumberTodo)
|
||
|
$('#CalendarLoaderTODO').css('display','none');
|
||
|
}
|
||
|
else
|
||
|
$('#todoList').fullCalendar('selectEvent');
|
||
|
}
|
||
|
|
||
|
function enableResourceTodo(header)
|
||
|
{
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
globalResourceRefreshNumberTodo++;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
}
|
||
|
|
||
|
var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
$(header).nextUntil('.resourceCalDAVTODO_header').each(function(i, e){
|
||
|
var uid=$(e).attr('data-id');
|
||
|
var pos=globalVisibleCalDAVTODOCollections.indexOf(uid);
|
||
|
if(pos==-1)
|
||
|
{
|
||
|
globalVisibleCalDAVTODOCollections[globalVisibleCalDAVTODOCollections.length]=uid;
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
showCalendarTodos(uid);
|
||
|
else
|
||
|
{
|
||
|
var bg = false;
|
||
|
var tmpUID = uid.match(vCalendar.pre['accountUidParts']);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
var resource = getResourceByCollection(uid);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
var collection = globalResourceCalDAVList.getTodoCollectionByUID(uid);
|
||
|
collection.fcSource = $('#todoList').fullCalendar('addEventSource', {events:globalEventList.displayTodosArray[uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor});
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if(!globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScroll!=afterScroll);
|
||
|
globalResourceRefreshNumberTodo--;
|
||
|
if(!globalResourceRefreshNumberTodo)
|
||
|
$('#CalendarLoaderTODO').css('display','none');
|
||
|
}
|
||
|
else
|
||
|
$('#todoList').fullCalendar('selectEvent');
|
||
|
}
|
||
|
|
||
|
function disableCalendar(uid)
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(uid);
|
||
|
if(pos!=-1)
|
||
|
{
|
||
|
globalVisibleCalDAVCollections.splice(pos, 1);
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideCalendarEvents(uid);
|
||
|
else
|
||
|
{
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
globalResourceRefreshNumber++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
$('#calendar').fullCalendar( 'removeEventSource', globalResourceCalDAVList.getCollectionByUID(uid).fcSource);
|
||
|
globalResourceRefreshNumber--;
|
||
|
|
||
|
if(!globalResourceRefreshNumber)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableCalendar(uid)
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(uid);
|
||
|
if(pos==-1)
|
||
|
{
|
||
|
globalVisibleCalDAVCollections[globalVisibleCalDAVCollections.length]=uid;
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
showCalendarEvents(uid);
|
||
|
else
|
||
|
{
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
globalResourceRefreshNumber++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
var bg = false;
|
||
|
var tmpUID = uid.match(vCalendar.pre['accountUidParts']);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
var resource = getResourceByCollection(uid);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
var collection = globalResourceCalDAVList.getCollectionByUID(uid);
|
||
|
collection.fcSource = $('#calendar').fullCalendar('addEventSource', {events:globalEventList.displayEventsArray[uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor,textColor:checkFontColor(collection.ecolor),background:bg});
|
||
|
globalResourceRefreshNumber--;
|
||
|
|
||
|
if(!globalResourceRefreshNumber)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function disableCalendarTodo(uid)
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVTODOCollections.indexOf(uid);
|
||
|
if(pos!=-1)
|
||
|
{
|
||
|
globalVisibleCalDAVTODOCollections.splice(pos, 1);
|
||
|
if(globalSettings.displayhiddenevents.value) {
|
||
|
hideCalendarTodos(uid);
|
||
|
$('#todoList').fullCalendar('selectEvent');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
globalResourceRefreshNumberTodo++;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
$('#todoList').fullCalendar( 'removeEventSource', globalResourceCalDAVList.getTodoCollectionByUID(uid).fcSource);
|
||
|
globalResourceRefreshNumberTodo--;
|
||
|
|
||
|
if(!globalResourceRefreshNumberTodo)
|
||
|
{
|
||
|
var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScroll!=afterScroll);
|
||
|
$('#CalendarLoaderTODO').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableCalendarTodo(uid)
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVTODOCollections.indexOf(uid);
|
||
|
if(pos==-1)
|
||
|
{
|
||
|
globalVisibleCalDAVTODOCollections[globalVisibleCalDAVTODOCollections.length]=uid;
|
||
|
if(globalSettings.displayhiddenevents.value) {
|
||
|
showCalendarTodos(uid);
|
||
|
$('#todoList').fullCalendar('selectEvent');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
globalResourceRefreshNumberTodo++;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
var bg = false;
|
||
|
var tmpUID = uid.match(vCalendar.pre['accountUidParts']);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
var resource = getResourceByCollection(uid);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
var collection = globalResourceCalDAVList.getTodoCollectionByUID(uid);
|
||
|
collection.fcSource = $('#todoList').fullCalendar('addEventSource', {events:globalEventList.displayTodosArray[uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor});
|
||
|
globalResourceRefreshNumberTodo--;
|
||
|
|
||
|
if(!globalResourceRefreshNumberTodo)
|
||
|
{
|
||
|
var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScroll!=afterScroll);
|
||
|
$('#CalendarLoaderTODO').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableOne(uid)
|
||
|
{
|
||
|
for(var i=0;i<globalResourceCalDAVList.collections.length;i++)
|
||
|
{
|
||
|
if(globalResourceCalDAVList.collections[i].href!=undefined)
|
||
|
{
|
||
|
var currentUid=globalResourceCalDAVList.collections[i].uid;
|
||
|
var check=$('#ResourceCalDAVList').find('[name^="'+currentUid+'"]');
|
||
|
if(currentUid===uid && !check.prop('checked'))
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(currentUid);
|
||
|
if(pos===-1)
|
||
|
globalVisibleCalDAVCollections[globalVisibleCalDAVCollections.length]=uid;
|
||
|
check.prop('checked', true);
|
||
|
}
|
||
|
else if(currentUid!==uid && check.prop('checked'))
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVCollections.indexOf(currentUid);
|
||
|
if(pos!==-1)
|
||
|
globalVisibleCalDAVCollections.splice(pos, 1);
|
||
|
check.prop('checked', false);
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideCalendarEvents(currentUid);
|
||
|
}
|
||
|
collectionChBoxClick(check.get(0), '#'+check.parent().parent().attr('id'), '.resourceCalDAV_header', '.resourceCalDAV_item', null, false)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
showCalendarEvents(uid);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
globalResourceRefreshNumber++;
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
$('#calendar').fullCalendar('removeEvents');
|
||
|
$('#calendar').fullCalendar('removeEventSources');
|
||
|
|
||
|
var bg = false;
|
||
|
var tmpUID = uid.match(vCalendar.pre['accountUidParts']);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
var resource = getResourceByCollection(uid);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
var collection = globalResourceCalDAVList.getCollectionByUID(uid);
|
||
|
collection.fcSource = $('#calendar').fullCalendar('addEventSource', {events:globalEventList.displayEventsArray[uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor,textColor:checkFontColor(collection.ecolor),background:bg});
|
||
|
|
||
|
globalResourceRefreshNumber--;
|
||
|
if(!globalResourceRefreshNumber)
|
||
|
{
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableOneTodo(uid)
|
||
|
{
|
||
|
for(var i=0;i<globalResourceCalDAVList.TodoCollections.length;i++)
|
||
|
{
|
||
|
if(globalResourceCalDAVList.TodoCollections[i].href!=undefined)
|
||
|
{
|
||
|
var currentUid=globalResourceCalDAVList.TodoCollections[i].uid;
|
||
|
var check=$('#ResourceCalDAVTODOList').find('[name^="'+currentUid+'"]');
|
||
|
if(currentUid===uid && !check.prop('checked'))
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVTODOCollections.indexOf(currentUid);
|
||
|
if(pos===-1)
|
||
|
globalVisibleCalDAVTODOCollections[globalVisibleCalDAVTODOCollections.length]=uid;
|
||
|
check.prop('checked', true);
|
||
|
}
|
||
|
else if(currentUid!==uid && check.prop('checked'))
|
||
|
{
|
||
|
var pos=globalVisibleCalDAVTODOCollections.indexOf(currentUid);
|
||
|
if(pos!==-1)
|
||
|
globalVisibleCalDAVTODOCollections.splice(pos, 1);
|
||
|
check.prop('checked', false);
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideCalendarTodos(currentUid);
|
||
|
}
|
||
|
collectionChBoxClick(check.get(0), '#'+check.parent().parent().attr('id'), '.resourceCalDAVTODO_header', '.resourceCalDAVTODO_item', null, false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
{
|
||
|
showCalendarTodos(uid);
|
||
|
$('#todoList').fullCalendar('selectEvent');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
globalResourceRefreshNumberTodo++;
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader).parent().css('display','block');
|
||
|
var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
$('#todoList').fullCalendar( 'removeEvents');
|
||
|
$('#todoList').fullCalendar( 'removeEventSources');
|
||
|
|
||
|
var bg = false;
|
||
|
var tmpUID = uid.match(vCalendar.pre['accountUidParts']);
|
||
|
var hrefUID='';
|
||
|
if(tmpUID!=null)
|
||
|
hrefUID = tmpUID[4];
|
||
|
var resource = getResourceByCollection(uid);
|
||
|
if(resource!=null && typeof resource.backgroundCalendars!='undefined' && resource.backgroundCalendars!=null && resource.backgroundCalendars!='')
|
||
|
{
|
||
|
var rbCalendars = '';
|
||
|
if(resource.backgroundCalendars instanceof Array)
|
||
|
rbCalendars=resource.backgroundCalendars;
|
||
|
else
|
||
|
rbCalendars = [resource.backgroundCalendars];
|
||
|
for(var j=0; j<rbCalendars.length;j++)
|
||
|
{
|
||
|
if (typeof rbCalendars[j]=='string')
|
||
|
{
|
||
|
var index = hrefUID.indexOf(rbCalendars[j]);
|
||
|
if(index!=-1)
|
||
|
if(hrefUID.length == (index+rbCalendars[j].length))
|
||
|
bg=true;
|
||
|
}
|
||
|
else if (typeof rbCalendars[j]=='object' && hrefUID.match(rbCalendars[j])!=null)
|
||
|
bg = true;
|
||
|
}
|
||
|
}
|
||
|
var collection = globalResourceCalDAVList.getTodoCollectionByUID(uid);
|
||
|
collection.fcSource = $('#todoList').fullCalendar('addEventSource', {events:globalEventList.displayTodosArray[uid],backgroundColor:hexToRgba(collection.ecolor,0.9),borderColor:collection.ecolor});
|
||
|
|
||
|
globalResourceRefreshNumberTodo--;
|
||
|
if(!globalResourceRefreshNumberTodo)
|
||
|
{
|
||
|
var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScroll!=afterScroll);
|
||
|
$('#CalendarLoaderTODO').css('display','none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getoffsetString(offset)
|
||
|
{
|
||
|
if(offset<0)
|
||
|
{
|
||
|
offset*=-1;
|
||
|
offset='-'+(offset<10 ? '0' : '')+offset.toString().split('.')[0]+(offset.toString().split('.').length>1 ? '30' : '00')
|
||
|
}
|
||
|
else
|
||
|
offset='+'+(offset<10 ? '0' : '')+offset.toString().split('.')[0]+(offset.toString().split('.').length>1 ? '30' : '00')
|
||
|
|
||
|
return offset;
|
||
|
}
|
||
|
|
||
|
Date.prototype.stdTimezoneOffset=function()
|
||
|
{
|
||
|
var jan=new Date(this.getFullYear(), 0, 1);
|
||
|
var jul=new Date(this.getFullYear(), 6, 1);
|
||
|
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
|
||
|
}
|
||
|
|
||
|
Date.prototype.dst=function()
|
||
|
{
|
||
|
return this.getTimezoneOffset()<this.stdTimezoneOffset();
|
||
|
}
|
||
|
|
||
|
function setGlobalDateFunction()
|
||
|
{
|
||
|
var date=new Date();
|
||
|
var offset=date.getTimezoneOffset()*(-1)*60*1000;
|
||
|
}
|
||
|
|
||
|
function initFullCalendar()
|
||
|
{
|
||
|
$('#calendar').fullCalendar({
|
||
|
eventMode: true,
|
||
|
contentHeight: $('#main').height() - 14, // -14px for 7px padding on top and bottom
|
||
|
windowResize: function(view){
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideEventCalendars();
|
||
|
globalCalWidth = $('#main').width();
|
||
|
if(typeof globalCalDAVInitLoad!='undefined' && !globalCalDAVInitLoad && !globalResourceRefreshNumber)
|
||
|
$('#CalendarLoader').css('display','none');
|
||
|
},
|
||
|
bindingMode: globalSettings.openformmode.value,
|
||
|
startOfBusiness: globalSettings.calendarstartofbusiness.value,
|
||
|
endOfBusiness: globalSettings.calendarendofbusiness.value,
|
||
|
multiWeekSize: globalMultiWeekSize,
|
||
|
showWeekNumbers: true,
|
||
|
showDatepicker: true,
|
||
|
//ignoreTimezone: !globalSettings.timezonesupport.value,
|
||
|
titleFormat: {
|
||
|
month: globalSettings.titleformatmonth.value,
|
||
|
multiWeek: globalSettings.titleformatweek.value,
|
||
|
week: globalSettings.titleformatweek.value,
|
||
|
day: globalSettings.titleformatday.value,
|
||
|
table: globalSettings.titleformattable.value,
|
||
|
},
|
||
|
columnFormat: {
|
||
|
month: 'ddd',
|
||
|
multiWeek: 'ddd',
|
||
|
week: globalSettings.columnformatagenda.value,
|
||
|
day: globalSettings.columnformatagenda.value,
|
||
|
table: globalSettings.columnformatagenda.value,
|
||
|
},
|
||
|
timeFormat: {
|
||
|
agenda: globalSettings.timeformatagenda.value,
|
||
|
list: globalSettings.ampmformat.value ? 'hh:mm TT{ - hh:mm TT}' : 'HH:mm{ - HH:mm}',
|
||
|
listFull: dateFormatJqToFc(globalSettings.datepickerformat.value) + (globalSettings.ampmformat.value ? ' hh:mm TT{ - ' : ' HH:mm{ - ') + dateFormatJqToFc(globalSettings.datepickerformat.value) + (globalSettings.ampmformat.value ? ' hh:mm TT}' : ' HH:mm}'),
|
||
|
listFullAllDay: dateFormatJqToFc(globalSettings.datepickerformat.value) + '{ - ' + dateFormatJqToFc(globalSettings.datepickerformat.value) + '}',
|
||
|
'': globalSettings.timeformatbasic.value
|
||
|
},
|
||
|
axisFormat: globalSettings.ampmformat.value ? 'h:mm TT' : 'H:mm',
|
||
|
buttonText: {
|
||
|
month: localization[globalInterfaceLanguage].fullCalendarMonth,
|
||
|
multiWeek: localization[globalInterfaceLanguage].fullCalendarMultiWeek,
|
||
|
week: localization[globalInterfaceLanguage].fullCalendarAgendaWeek,
|
||
|
day: localization[globalInterfaceLanguage].fullCalendarAgendaDay,
|
||
|
table: localization[globalInterfaceLanguage].fullCalendarTable,
|
||
|
today: localization[globalInterfaceLanguage].fullCalendarTodayButton,
|
||
|
prevMonth: localization[globalInterfaceLanguage].loadPrevMonth,
|
||
|
nextMonth: localization[globalInterfaceLanguage].loadNextMonth,
|
||
|
},
|
||
|
allDayText: localization[globalInterfaceLanguage].fullCalendarAllDay,
|
||
|
monthNames: localization[globalInterfaceLanguage].monthNames,
|
||
|
monthNamesShort: localization[globalInterfaceLanguage].monthNamesShort,
|
||
|
dayNames: localization[globalInterfaceLanguage].dayNames,
|
||
|
dayNamesShort: localization[globalInterfaceLanguage].dayNamesShort,
|
||
|
dayEventSizeStrict: true,
|
||
|
dayClick: function(date, allDay, jsEvent, view){
|
||
|
if($('#ResourceCalDAVList .resourceCalDAV_item:visible').not('.resourceCalDAV_item_ro').length==0)
|
||
|
return false;
|
||
|
$('#show').val('');
|
||
|
$('#CAEvent').hide();
|
||
|
$('#timezonePicker').prop('disabled', true);
|
||
|
$('#EventDisabler').fadeIn(globalEditorFadeAnimation, function(){
|
||
|
showEventForm(date, allDay, null, jsEvent, 'new','');
|
||
|
$('#name').focus();
|
||
|
});
|
||
|
},
|
||
|
beforeViewDisplay: function(view){
|
||
|
// Hide scrollbar to force view rendering on full width
|
||
|
if(globalAllowFcRerender)
|
||
|
$('#main').css('overflow','hidden');
|
||
|
},
|
||
|
viewDisplay: function(view){
|
||
|
// Allow scrollbar if previosly hidden
|
||
|
if(globalAllowFcRerender)
|
||
|
$('#main').css('overflow','');
|
||
|
// If scrollbar present, force view rendering on reduced width
|
||
|
if(globalAllowFcRerender && $('#main').width() - $('#calendar').width())
|
||
|
{
|
||
|
globalAllowFcRerender=false;
|
||
|
$('#calendar').fullCalendar('render');
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
globalCalWidth=$('#main').width();
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideEventCalendars();
|
||
|
globalAllowFcRerender=true;
|
||
|
},
|
||
|
firstDay: globalSettings.datepickerfirstdayofweek.value,
|
||
|
weekendDays: globalSettings.weekenddays.value,
|
||
|
header: {
|
||
|
left: 'prev,next today',
|
||
|
center: 'title',
|
||
|
right: 'month,multiWeek,agendaWeek,agendaDay'
|
||
|
},
|
||
|
listSections: 'day',
|
||
|
headerContainer: $('#main_h_placeholder'),
|
||
|
defaultView: globalSettings.activeview.value,
|
||
|
editable: true,
|
||
|
currentTimeIndicator: true,
|
||
|
unselectAuto: false,
|
||
|
eventClick: function(calEvent, jsEvent, view){
|
||
|
globalCalEvent=calEvent;
|
||
|
globalJsEvent=jsEvent;
|
||
|
if(calEvent.type=='')
|
||
|
showEventForm(null, calEvent.allDay, calEvent, jsEvent, 'show', '');
|
||
|
else
|
||
|
showEventForm(null, calEvent.allDay, calEvent, jsEvent, 'show', 'editOnly');
|
||
|
},
|
||
|
eventDragStart: function(calEvent, jsEvent, ui, view){
|
||
|
globalPrevDragEventAllDay=calEvent.allDay;
|
||
|
},
|
||
|
eventDrop: function(calEvent, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view){
|
||
|
if(calEvent.rid!='')
|
||
|
{
|
||
|
var coll = globalResourceCalDAVList.getCollectionByUID(calEvent.res_id);
|
||
|
if(coll!=null && coll.permissions.read_only)
|
||
|
{
|
||
|
revertFunc();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if(calEvent.realStart && calEvent.realEnd)
|
||
|
{
|
||
|
var checkDate=new Date(calEvent.realStart.getFullYear(), calEvent.realStart.getMonth(), calEvent.realStart.getDate()+dayDelta, calEvent.realStart.getHours(), calEvent.realStart.getMinutes()+minuteDelta,0);
|
||
|
var checkDateEnd=new Date(calEvent.realEnd.getFullYear(), calEvent.realEnd.getMonth(), calEvent.realEnd.getDate()+dayDelta, calEvent.realEnd.getHours(), calEvent.realEnd.getMinutes()+minuteDelta,0);
|
||
|
if(calEvent.type!='')
|
||
|
{
|
||
|
calEvent.start=checkDate;
|
||
|
calEvent.end=checkDateEnd;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
calEvent.realStart=checkDate;
|
||
|
calEvent.realEnd=checkDateEnd;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
calEvent.realStart=calEvent.start;
|
||
|
calEvent.realEnd=calEvent.end;
|
||
|
}
|
||
|
|
||
|
globalRevertFunction=revertFunc;
|
||
|
if(calEvent.type!='')
|
||
|
showEventForm(null, calEvent.allDay, calEvent, jsEvent, 'drop', 'editOnly');
|
||
|
else
|
||
|
showEventForm(null, calEvent.allDay, calEvent, jsEvent, 'drop', '');
|
||
|
|
||
|
save(true);
|
||
|
globalPrevDragEvent = null;
|
||
|
},
|
||
|
eventResize: function(calEvent, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view){
|
||
|
globalPrevDragEventAllDay=calEvent.allDay;
|
||
|
if(calEvent.rid!='')
|
||
|
{
|
||
|
var coll = globalResourceCalDAVList.getCollectionByUID(calEvent.res_id);
|
||
|
if(coll!=null && coll.permissions.read_only)
|
||
|
{
|
||
|
revertFunc();
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(calEvent.realStart && calEvent.realEnd)
|
||
|
{
|
||
|
var checkDateEnd = new Date(calEvent.realEnd.getFullYear(),calEvent.realEnd.getMonth(), calEvent.realEnd.getDate()+dayDelta, calEvent.realEnd.getHours(),calEvent.realEnd.getMinutes()+minuteDelta,0);
|
||
|
if(calEvent.type!='')
|
||
|
calEvent.end=checkDateEnd;
|
||
|
else
|
||
|
calEvent.realEnd=checkDateEnd;
|
||
|
}
|
||
|
else
|
||
|
calEvent.realEnd=calEvent.end;
|
||
|
globalRevertFunction=revertFunc;
|
||
|
|
||
|
if(calEvent.type!='')
|
||
|
showEventForm(null, calEvent.allDay, calEvent, jsEvent, 'drop', 'editOnly');
|
||
|
else
|
||
|
showEventForm(null, calEvent.allDay, calEvent, jsEvent, 'drop', '');
|
||
|
|
||
|
save(true);
|
||
|
},
|
||
|
eventResizeHelperCreated: function(calEvent, jsEvent, element, helper, view){
|
||
|
if(element.hasClass('searchCalDAV_hide'))
|
||
|
helper.addClass('searchCalDAV_hide');
|
||
|
if(element.hasClass('checkCalDAV_hide'))
|
||
|
helper.addClass('checkCalDAV_hide');
|
||
|
},
|
||
|
selectable: true,
|
||
|
selectHelper: false,
|
||
|
select: function(startDate, endDate, allDay, jsEvent, view){
|
||
|
$('#show').val('');
|
||
|
$('#CAEvent').hide();
|
||
|
$('#timezonePicker').prop('disabled', true);
|
||
|
$('#EventDisabler').fadeIn(globalEditorFadeAnimation, function(){
|
||
|
var calEvent=new Object();
|
||
|
calEvent.start=startDate;
|
||
|
calEvent.end=endDate;
|
||
|
showEventForm(null, allDay, calEvent, jsEvent, 'new', '');
|
||
|
$('#name').focus();
|
||
|
});
|
||
|
},
|
||
|
eventAfterRender: function(event, element, view){
|
||
|
element.attr('data-res-id',event.res_id);
|
||
|
element.attr('data-id',event.id);
|
||
|
element.addClass('event_item');
|
||
|
|
||
|
if(event.status == 'CANCELLED')
|
||
|
$(element).find('.fc-event-title').css('text-decoration', 'line-through');
|
||
|
|
||
|
if(typeof event.hidden!='undefined' && event.hidden) {
|
||
|
element.addClass('searchCalDAV_hide');
|
||
|
if(view.name=='table' && !$(element).siblings().addBack().not('.searchCalDAV_hide').length)
|
||
|
$(element).parent().prev().find('tr').addClass('searchCalDAV_hide');
|
||
|
}
|
||
|
|
||
|
element.mouseenter(function(e){
|
||
|
clearTimeout(globalEventTimeoutID);
|
||
|
globalEventTimeoutID = setTimeout(function(){
|
||
|
showEventPopup(e, event);
|
||
|
}, 500);
|
||
|
});
|
||
|
element.mousemove(function(e){
|
||
|
if($('#CalDavZAPPopup').is(':visible'))
|
||
|
moveEventPopup(e);
|
||
|
});
|
||
|
element.mouseout(function(e){
|
||
|
if(!$.contains(element.get(0),e.relatedTarget)) {
|
||
|
clearTimeout(globalEventTimeoutID);
|
||
|
hideEventPopup();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
viewChanged: function(view) {
|
||
|
$('#CAEvent').hide();
|
||
|
},
|
||
|
todayClick: function() {
|
||
|
$('#CAEvent').hide();
|
||
|
},
|
||
|
prevClick: function() {
|
||
|
$('#CAEvent').hide();
|
||
|
getPrevMonths($('#calendar').fullCalendar('getView').start);
|
||
|
},
|
||
|
nextClick: function() {
|
||
|
$('#CAEvent').hide();
|
||
|
getNextMonths($('#calendar').fullCalendar('getView').end);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function todoCheckClick(status, percent, calTodo)
|
||
|
{
|
||
|
var id=calTodo.repeatHash;
|
||
|
if(typeof globalTodolistStatusArray[id]!='undefined' && typeof globalTodolistStatusArray[id].timeout!='undefined')
|
||
|
clearTimeout(globalTodolistStatusArray[id].timeout);
|
||
|
else if(typeof globalTodolistStatusArray[id]=='undefined')
|
||
|
globalTodolistStatusArray[id]={};
|
||
|
|
||
|
globalTodolistStatusArray[id].timeout = setTimeout(function(){
|
||
|
if(typeof globalTodolistStatusArray[id]!='undefined')
|
||
|
{
|
||
|
$('#todoList').fullCalendar('allowSelectEvent',false);
|
||
|
fullVcalendarToTodoData(calTodo,false);
|
||
|
if(percent=='50' && typeof globalTodolistStatusArray[id].percent!='undefined')
|
||
|
percent=globalTodolistStatusArray[id].percent;
|
||
|
|
||
|
var vCalendarText='',
|
||
|
groupCounter=0;
|
||
|
// vCalendar BEGIN (required by RFC)
|
||
|
if(vCalendar.tplM['VTbegin'][id]!=null && (process_elem=vCalendar.tplM['VTbegin'][id][0])!=undefined)
|
||
|
vCalendarText+=vCalendar.tplM['VTbegin'][id][0];
|
||
|
else
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTbegin'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
vCalendarText+=process_elem;
|
||
|
}
|
||
|
|
||
|
// VERSION (required by RFC)
|
||
|
if(vCalendar.tplM['VTcontentline_VERSION'][id]!=null && (process_elem=vCalendar.tplM['VTcontentline_VERSION'][id][0])!=undefined)
|
||
|
{
|
||
|
// replace the object and related objects' group names (+ append the related objects after the processed)
|
||
|
parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm'));
|
||
|
if(parsed[1]!='') // if group is present, replace the object and related objects' group names
|
||
|
process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_VERSION'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
}
|
||
|
process_elem=process_elem.replace('##:::##version##:::##', '2.0');
|
||
|
vCalendarText+=process_elem;
|
||
|
|
||
|
// CALSCALE
|
||
|
if(vCalendar.tplM['VTcontentline_CALSCALE'][id]!=null && (process_elem=vCalendar.tplM['VTcontentline_CALSCALE'][id][0])!=undefined)
|
||
|
{
|
||
|
// replace the object and related objects' group names (+ append the related objects after the processed)
|
||
|
parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm'));
|
||
|
if(parsed[1]!='') // if group is present, replace the object and related objects' group names
|
||
|
process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_CALSCALE'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
}
|
||
|
process_elem=process_elem.replace('##:::##calscale##:::##', 'GREGORIAN');
|
||
|
vCalendarText+=process_elem;
|
||
|
var stringUIDcurrent=calTodo.vcalendar.match(vCalendar.pre['contentline_UID']);
|
||
|
if(stringUIDcurrent!=null)
|
||
|
stringUIDcurrent=stringUIDcurrent[0].match(vCalendar.pre['contentline_parse'])[4];
|
||
|
var rec_id='';
|
||
|
if(calTodo.type!='' && calTodo.rec_id=='' && (!globalSettings.appleremindersmode.value || typeof globalAppleSupport.nextDates[calTodo.id]!='undefined'))
|
||
|
{
|
||
|
if(calTodo.repeatStart!='' && calTodo.start)
|
||
|
{
|
||
|
if(typeof calTodo.realStart=='object')
|
||
|
rec_id=$.fullCalendar.formatDate(calTodo.realStart, "yyyyMMdd'T'HHmmss");
|
||
|
else if(typeof calTodo.realStart =='string')
|
||
|
rec_id=$.fullCalendar.formatDate($.fullCalendar.parseDate(calTodo.realStart), "yyyyMMdd'T'HHmmss");
|
||
|
}
|
||
|
else if(calTodo.repeatEnd!='' && calTodo.end)
|
||
|
{
|
||
|
if(typeof calTodo.realEnd =='object')
|
||
|
rec_id=$.fullCalendar.formatDate(calTodo.realEnd, "yyyyMMdd'T'HHmmss");
|
||
|
else if(typeof calTodo.realEnd =='string')
|
||
|
rec_id=$.fullCalendar.formatDate($.fullCalendar.parseDate(calTodo.realEnd), "yyyyMMdd'T'HHmmss");
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
rec_id=calTodo.rec_id;
|
||
|
var resultTodoObj = getRepeatTodoObject({
|
||
|
rid:calTodo.res_id,
|
||
|
uidTodo:calTodo.id,
|
||
|
vcalendarHash: hex_sha256(calTodo.vcalendar),
|
||
|
vcalendarUID: stringUIDcurrent,
|
||
|
recurrenceId: rec_id,
|
||
|
timezoneTODO: calTodo.timeZone,
|
||
|
futureStart: '',
|
||
|
deleteMode: false,
|
||
|
vCalendarText:vCalendarText
|
||
|
});
|
||
|
vCalendarText = resultTodoObj.vCalendarText;
|
||
|
var tzArray=resultTodoObj.tzArray;
|
||
|
var tzString=resultTodoObj.tzString;
|
||
|
var isTimeZone=resultTodoObj.isTimeZone;
|
||
|
var origTimezone =resultTodoObj.origTimezone;
|
||
|
var appleTodoMode=resultTodoObj.appleTodoMode;
|
||
|
var realTodo = calTodo;
|
||
|
var newFirst = resultTodoObj.newFirst;
|
||
|
var sel_option = resultTodoObj.sel_option;
|
||
|
var isUTC=false, timeZoneAttr='';
|
||
|
var origFirst=vCalendarText;
|
||
|
|
||
|
if(appleTodoMode)
|
||
|
vCalendarText='';
|
||
|
|
||
|
if(realTodo.start!=null || realTodo.end!=null)
|
||
|
{
|
||
|
if(globalSettings.timezonesupport.value)
|
||
|
sel_option=realTodo.timeZone;
|
||
|
if(sel_option=='UTC')
|
||
|
{
|
||
|
isUTC=true;
|
||
|
timeZoneAttr='';
|
||
|
}
|
||
|
else if(sel_option=='local')
|
||
|
timeZoneAttr='';
|
||
|
else if(sel_option=='custom')
|
||
|
timeZoneAttr=';'+vcalendarEscapeValue('TZID='+realTodo.timeZone);
|
||
|
else
|
||
|
timeZoneAttr=';'+vcalendarEscapeValue('TZID='+sel_option);
|
||
|
|
||
|
if(vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2))
|
||
|
vCalendarText+='\r\n';
|
||
|
if(globalSettings.rewritetimezonecomponent.value || !vCalendar.tplM['unprocessedVTIMEZONE'][id])
|
||
|
{
|
||
|
if(tzArray.indexOf(sel_option)==-1)
|
||
|
vCalendarText+=buildTimezoneComponent(sel_option);
|
||
|
}
|
||
|
else
|
||
|
vCalendarText+=vCalendar.tplM['VTunprocessedVTIMEZONE'][id];
|
||
|
}
|
||
|
origFirst+=vCalendarText;
|
||
|
|
||
|
var todoVc = calTodo.vcalendar;
|
||
|
if(todoVc.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2))
|
||
|
todoVc=todoVc.substring(2);
|
||
|
if(todoVc.lastIndexOf('\r\n')!=(todoVc.length-2))
|
||
|
todoVc+='\r\n';
|
||
|
var additionalVCalendar = '';
|
||
|
|
||
|
var d=new Date(), utc;
|
||
|
utc=d.getUTCFullYear()+(d.getUTCMonth()+1<10 ? '0': '')+(d.getUTCMonth()+1)+(d.getUTCDate()<10 ? '0': '')+d.getUTCDate()+'T'+(d.getUTCHours()<10 ? '0': '')+d.getUTCHours()+(d.getUTCMinutes()<10 ? '0': '')+d.getUTCMinutes()+(d.getUTCSeconds()<10 ? '0': '')+d.getUTCSeconds()+'Z';
|
||
|
if(rec_id=='')
|
||
|
var checkVal='orig';
|
||
|
else
|
||
|
var checkVal=rec_id;
|
||
|
var created='';
|
||
|
for(var vev in vCalendar.tplM['VTcontentline_CREATED'][id])
|
||
|
{
|
||
|
if(vev==checkVal)
|
||
|
created=vCalendar.tplM['VTcontentline_CREATED'][id][vev];
|
||
|
}
|
||
|
var v_element=null;
|
||
|
if(created=='')
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_CREATED'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc));
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_CREATED']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
}
|
||
|
|
||
|
process_elem=vCalendar.tplC['VTcontentline_LM'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc));
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_LM']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
|
||
|
process_elem=vCalendar.tplC['VTcontentline_DTSTAMP'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc));
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_DTSTAMP']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
|
||
|
// UID (required by RFC)
|
||
|
if(appleTodoMode)
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_UID'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
var newUID=globalEventList.getNewUID();
|
||
|
process_elem=process_elem.replace('##:::##uid##:::##', newUID);
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_UID']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
}
|
||
|
|
||
|
|
||
|
process_elem=vCalendar.tplC['VTcontentline_STATUS'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(status));
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_STATUS']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
|
||
|
process_elem=vCalendar.tplC['VTcontentline_PERCENT-COMPLETE'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(percent));
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_PERCENT-COMPLETE']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
|
||
|
//RECURRENCE-ID
|
||
|
if(rec_id!='')
|
||
|
{
|
||
|
if(!appleTodoMode)
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_REC_ID'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
if(rec_id.indexOf('T')==-1)
|
||
|
{
|
||
|
process_elem=process_elem.replace('##:::##AllDay##:::##', ';'+vcalendarEscapeValue('VALUE=DATE'));
|
||
|
process_elem=process_elem.replace('##:::##TZID##:::##', vcalendarEscapeValue(''));
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(rec_id));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
|
||
|
process_elem=process_elem.replace('##:::##TZID##:::##',timeZoneAttr);
|
||
|
if(isUTC && rec_id.charAt(rec_id.length-1)!='Z')
|
||
|
rec_id+='Z';
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(rec_id));
|
||
|
}
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_RECURRENCE_ID']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
}
|
||
|
var vcalendar_rule_element=todoVc.match(vCalendar.pre['contentline_RRULE2']);
|
||
|
if(vcalendar_rule_element!=null)
|
||
|
todoVc=todoVc.replace(vcalendar_rule_element[0], '\r\n');
|
||
|
while(todoVc.match(vCalendar.pre['contentline_EXDATE'])!= null)
|
||
|
{
|
||
|
var vcalendar_ex_element=todoVc.match(vCalendar.pre['contentline_EXDATE']);
|
||
|
if(vcalendar_ex_element!=null)
|
||
|
{
|
||
|
todoVc=todoVc.replace(vcalendar_ex_element[0], '\r\n');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(realTodo.realStart!='' || realTodo.realEnd!='')
|
||
|
{
|
||
|
if(realTodo.realStart!='' && !appleTodoMode)
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_E_DTSTART'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
|
||
|
if(typeof realTodo.realStart=='object')
|
||
|
var datetime_from=$.fullCalendar.formatDate(realTodo.realStart, "yyyyMMdd'T'HHmmss");
|
||
|
else if(typeof realTodo.realStart =='string')
|
||
|
var datetime_from=$.fullCalendar.formatDate($.fullCalendar.parseDate(realTodo.realStart), "yyyyMMdd'T'HHmmss");
|
||
|
|
||
|
process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
|
||
|
process_elem=process_elem.replace('##:::##TZID##:::##', timeZoneAttr);
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_from+(isUTC ? 'Z' : '')));
|
||
|
|
||
|
if(appleTodoMode)
|
||
|
{
|
||
|
var process_elem2 = '';
|
||
|
process_elem2=vCalendar.tplC['VTcontentline_DUE'];
|
||
|
process_elem2=process_elem2.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem2=process_elem2.replace('##:::##params_wsc##:::##', '');
|
||
|
process_elem2=process_elem2.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
|
||
|
process_elem2=process_elem2.replace('##:::##TZID##:::##',timeZoneAttr);
|
||
|
process_elem2=process_elem2.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_from+(isUTC ? 'Z' : '')));
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_DUE']);
|
||
|
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem2);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem2;
|
||
|
}
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_DTSTART']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
}
|
||
|
|
||
|
if(realTodo.realEnd!='')
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_DUE'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
|
||
|
if(typeof realTodo.realEnd=='object')
|
||
|
var datetime_to=$.fullCalendar.formatDate(realTodo.realEnd, "yyyyMMdd'T'HHmmss");
|
||
|
else if(typeof realTodo.realEnd =='string')
|
||
|
var datetime_to=$.fullCalendar.formatDate($.fullCalendar.parseDate(realTodo.realEnd), "yyyyMMdd'T'HHmmss");
|
||
|
|
||
|
process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
|
||
|
process_elem=process_elem.replace('##:::##TZID##:::##',timeZoneAttr);
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_to+(isUTC ? 'Z' : '')));
|
||
|
|
||
|
if(globalSettings.appleremindersmode.value)
|
||
|
{
|
||
|
var process_elem2 = '';
|
||
|
process_elem2=vCalendar.tplC['VTcontentline_E_DTSTART'];
|
||
|
process_elem2=process_elem2.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem2=process_elem2.replace('##:::##params_wsc##:::##', '');
|
||
|
|
||
|
process_elem2=process_elem2.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
|
||
|
process_elem2=process_elem2.replace('##:::##TZID##:::##',timeZoneAttr);
|
||
|
process_elem2=process_elem2.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_to+(isUTC ? 'Z' : '')));
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_DTSTART']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem2);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem2;
|
||
|
}
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_DUE']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(status=='COMPLETED'&&percent=='100')
|
||
|
{
|
||
|
var datetime_completed=new Date();
|
||
|
|
||
|
sel_option='local';
|
||
|
if(globalSettings.timezonesupport.value && realTodo.timeZone!='' && realTodo.timeZone!='local')
|
||
|
sel_option=realTodo.timeZone;
|
||
|
|
||
|
if(sel_option!='local')
|
||
|
{
|
||
|
var valOffsetFrom=getOffsetByTZ(sel_option, datetime_completed);
|
||
|
var intOffset = valOffsetFrom.getSecondsFromOffset()*-1;
|
||
|
datetime_completed = new Date(datetime_completed.setSeconds(intOffset));
|
||
|
}
|
||
|
var newValue=$.fullCalendar.formatDate(datetime_completed, "yyyyMMdd'T'HHmmss")+'Z';
|
||
|
|
||
|
process_elem=vCalendar.tplC['VTcontentline_COMPLETED'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', newValue);
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_COMPLETED']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n'+process_elem);
|
||
|
else
|
||
|
additionalVCalendar+=process_elem;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v_element=todoVc.match(vCalendar.pre['contentline_COMPLETED']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], '\r\n');
|
||
|
}
|
||
|
|
||
|
if(typeof vCalendar.tplM['VTalarm_STRING'][id]!='undefined'&&vCalendar.tplM['VTalarm_STRING'][id]!='')
|
||
|
additionalVCalendar+=vCalendar.tplM['VTalarm_STRING'][id];
|
||
|
if(additionalVCalendar!='')
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTendVTODO'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
v_element=todoVc.match(vCalendar.re['endVTODO']);
|
||
|
if(v_element!=null)
|
||
|
todoVc=todoVc.replace(v_element[0], additionalVCalendar+process_elem);
|
||
|
}
|
||
|
vCalendarText+=todoVc;
|
||
|
if(appleTodoMode)
|
||
|
{
|
||
|
if(vCalendarText.indexOf('\r\n')==0 && newFirst.lastIndexOf('\r\n')==(newFirst.length-2))
|
||
|
newFirst+=vCalendarText.substring(2,vCalendarText.length);
|
||
|
else if((vCalendarText.indexOf('\r\n')==0 && newFirst.lastIndexOf('\r\n')!=(newFirst.length-2)) || (vCalendarText.indexOf('\r\n')!=0 && newFirst.lastIndexOf('\r\n')==(newFirst.length-2)) )
|
||
|
newFirst+=vCalendarText;
|
||
|
else
|
||
|
newFirst+='\r\n'+vCalendarText;
|
||
|
}
|
||
|
if(appleTodoMode)
|
||
|
vCalendarText = '';
|
||
|
// PRODID
|
||
|
if(vCalendar.tplM['VTcontentline_PRODID'][id]!=null && (process_elem=vCalendar.tplM['VTcontentline_PRODID'][id][0])!=undefined)
|
||
|
{
|
||
|
// replace the object and related objects' group names (+ append the related objects after the processed)
|
||
|
parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm'));
|
||
|
if(parsed[1]!='') // if group is present, replace the object and related objects' group names
|
||
|
process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTcontentline_PRODID'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
|
||
|
}
|
||
|
process_elem=process_elem.replace('##:::##value##:::##', '-//Inf-IT//'+globalAppName+' '+globalVersion+'//EN');
|
||
|
vCalendarText+=process_elem;
|
||
|
|
||
|
if(typeof vCalendar.tplM['VTunprocessed'][id]!='undefined' && vCalendar.tplM['VTunprocessed'][id]!='' && vCalendar.tplM['VTunprocessed'][id]!=null)
|
||
|
{
|
||
|
if(!appleTodoMode)
|
||
|
vCalendarText+=vCalendar.tplM['VTunprocessed'][id].replace(RegExp('^\r\n'), '');
|
||
|
else
|
||
|
origFirst+=vCalendar.tplM['VTunprocessed'][id].replace(RegExp('^\r\n'), '');;
|
||
|
}
|
||
|
|
||
|
vCalendar.tplM['VTunprocessed'][id]=new Array();
|
||
|
|
||
|
// vCalendar END (required by RFC)
|
||
|
if(vCalendar.tplM['VTend'][id]!=null && (process_elem=vCalendar.tplM['VTend'][id][0])!=undefined)
|
||
|
vCalendarText+=vCalendar.tplM['VTend'][id][0];
|
||
|
else
|
||
|
{
|
||
|
process_elem=vCalendar.tplC['VTend'];
|
||
|
process_elem=process_elem.replace('##:::##group_wd##:::##', '');
|
||
|
vCalendarText+=process_elem;
|
||
|
}
|
||
|
|
||
|
var textArray = new Array();
|
||
|
if(appleTodoMode)
|
||
|
{
|
||
|
newFirst += vCalendarText;
|
||
|
if(origFirst.lastIndexOf('\r\n')!=(origFirst.length-2))
|
||
|
origFirst += '\r\n';
|
||
|
origFirst += vCalendarText;
|
||
|
var fixed = checkAndFixMultipleUID(newFirst,false);
|
||
|
if(fixed.length==1)
|
||
|
textArray[textArray.length]=origFirst;
|
||
|
else
|
||
|
textArray=fixed;
|
||
|
vCalendarText = newFirst;
|
||
|
}
|
||
|
var fixedArr = checkAndFixMultipleUID(vCalendarText,false);
|
||
|
fixedArr = $.merge(textArray,fixedArr);
|
||
|
var inputS = fixedArr[0];
|
||
|
fixedArr.splice(0,1);
|
||
|
|
||
|
var inputUID='';
|
||
|
var coll = globalResourceCalDAVList.getTodoCollectionByUID(calTodo.id.substring(0, calTodo.id.lastIndexOf('/')+1));
|
||
|
var res = getAccount(coll.accountUID);
|
||
|
var tmp=res.href.match(vCalendar.pre['hrefRex']);
|
||
|
var accountUID=tmp[1]+res.userAuth.userName+'@'+tmp[2];
|
||
|
CalDAVeditor_cleanup(id);
|
||
|
|
||
|
return putVcalendarToCollection(accountUID, calTodo.id, calTodo.etag, inputS, '','vtodo',true,false,fixedArr);
|
||
|
}
|
||
|
},globalTodoCheckTimeoutDelay);
|
||
|
}
|
||
|
|
||
|
function initTodoList()
|
||
|
{
|
||
|
$('#todoList').fullCalendar({
|
||
|
eventMode: false,
|
||
|
showUnstartedEvents: globalSettings.appleremindersmode.value,
|
||
|
simpleFilters: globalSettings.appleremindersmode.value,
|
||
|
contentHeight: $('#mainTODO').height() - 14, //-14px for 7px padding on top and bottom
|
||
|
windowResize: function(view){
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideTodoCalendars();
|
||
|
},
|
||
|
showDatepicker: true,
|
||
|
titleFormat: {
|
||
|
todo: globalSettings.titleformattable.value
|
||
|
},
|
||
|
columnFormat: {
|
||
|
todo: globalSettings.columnformatagenda.value
|
||
|
},
|
||
|
timeFormat: {
|
||
|
list: dateFormatJqToFc(globalSettings.datepickerformat.value) + (globalSettings.ampmformat.value ? ' hh:mm TT' : ' HH:mm')
|
||
|
},
|
||
|
axisFormat: globalSettings.ampmformat.value ? 'h:mm TT' : 'H:mm',
|
||
|
buttonText: {
|
||
|
today: localization[globalInterfaceLanguage].fullCalendarTodayButton,
|
||
|
filtersHeader: localization[globalInterfaceLanguage].txtStatusFiltersHeaderTODO,
|
||
|
filtersFooter: localization[globalInterfaceLanguage].txtStatusFiltersFooterTODO,
|
||
|
filterAction: localization[globalInterfaceLanguage].txtStatusNeedsActionTODO,
|
||
|
filterProgress: localization[globalInterfaceLanguage].txtStatusInProcessTODO,
|
||
|
filterCompleted: localization[globalInterfaceLanguage].txtStatusCompletedTODO,
|
||
|
filterCanceled: localization[globalInterfaceLanguage].txtStatusCancelledTODO,
|
||
|
},
|
||
|
allDayText: localization[globalInterfaceLanguage].fullCalendarAllDay,
|
||
|
monthNames: localization[globalInterfaceLanguage].monthNames,
|
||
|
monthNamesShort: localization[globalInterfaceLanguage].monthNamesShort,
|
||
|
dayNames: localization[globalInterfaceLanguage].dayNames,
|
||
|
dayNamesShort: localization[globalInterfaceLanguage].dayNamesShort,
|
||
|
defaultFilters: globalSettings.todolistfilterselected.value,
|
||
|
viewDisplay: function(view){
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideTodoCalendars();
|
||
|
$('.fc-view-todo').removeClass('fc-view-trans');
|
||
|
},
|
||
|
firstDay: globalSettings.datepickerfirstdayofweek.value,
|
||
|
weekendDays: globalSettings.weekenddays.value,
|
||
|
header: {
|
||
|
left: 'prev,next today',
|
||
|
center: '',
|
||
|
right: ''
|
||
|
},
|
||
|
listSections: 'day',
|
||
|
headerContainer: $('#mainTODO_h_placeholder'),
|
||
|
defaultView: 'todo',
|
||
|
editable: true,
|
||
|
todoColThresholds: [
|
||
|
{'col':'priority', 'width':552},
|
||
|
{'col':'location', 'width':702}
|
||
|
],
|
||
|
todoOptionalCols: [
|
||
|
{'col':'time', 'width':142},
|
||
|
{'col':'priority', 'width':18},
|
||
|
{'col':'location', 'width':150}
|
||
|
],
|
||
|
selectEmpty: function(){
|
||
|
if($('#todoInEdit').val()!=='true') {
|
||
|
$('#CATodo').attr('style','display:none');
|
||
|
$('#todoColor').css('background-color','');
|
||
|
}
|
||
|
},
|
||
|
eventClick: function(calTodo, jsEvent, view){
|
||
|
if($('#todoInEdit').val()=='true')
|
||
|
return false;
|
||
|
|
||
|
globalCalTodo=calTodo;
|
||
|
if(calTodo.type=='')
|
||
|
showTodoForm(calTodo, 'show', '');
|
||
|
else
|
||
|
{
|
||
|
if(globalSettings.appleremindersmode.value && (calTodo.status=='COMPLETED' || calTodo.status== 'CANCELLED'))
|
||
|
showTodoForm(calTodo, 'show', '');
|
||
|
else if(!globalSettings.appleremindersmode.value || typeof globalAppleSupport.nextDates[calTodo.id] != 'undefined')
|
||
|
showTodoForm(calTodo, 'show', 'editOnly');
|
||
|
else
|
||
|
showTodoForm(calTodo, 'show', '');
|
||
|
}
|
||
|
},
|
||
|
eventCheckDefault: function(event, checkbox, view) {
|
||
|
var percent = parseInt(event.percent, 10);
|
||
|
if(globalSettings.appleremindersmode.value)
|
||
|
checkbox.prop('checked', percent>99);
|
||
|
else {
|
||
|
checkbox.prop({'checked':percent>0, 'indeterminate':percent>0 && percent<100});
|
||
|
checkbox.attr('data-ind', percent>0 && percent<100 ? 'true' : 'false');
|
||
|
}
|
||
|
|
||
|
checkbox.prop('disabled', globalResourceCalDAVList.getTodoCollectionByUID(event.res_id).permissions.read_only);
|
||
|
},
|
||
|
eventCheckClicked: function(checkbox, calTodo, jsEvent, view) {
|
||
|
// [] -> [-] ---> false, false -> true, false -> true, true
|
||
|
// [-] -> [x] ---> true, true -> false, false -> true, false
|
||
|
// [x] -> [-x-] ---> true, false -> false, false -> true, false
|
||
|
// [-x-] -> [] ---> true, false -> false, false -> false, false
|
||
|
|
||
|
jsEvent.stopPropagation();
|
||
|
|
||
|
var eventElement = checkbox.parent().parent();
|
||
|
var checked = checkbox.prop('checked');
|
||
|
var ind = checkbox.attr('data-ind')==='true';
|
||
|
var cancelled = eventElement.hasClass('fc-event-cancelled');
|
||
|
|
||
|
if(!globalSettings.appleremindersmode.value) {
|
||
|
checkbox.prop({'checked':ind || !checked && !cancelled ? !checked : checked, 'indeterminate':checked});
|
||
|
checkbox.attr('data-ind', checked ? 'true' : 'false');
|
||
|
eventElement.toggleClass('fc-event-cancelled', !ind && !checked && !cancelled);
|
||
|
}
|
||
|
|
||
|
var percent = '';
|
||
|
var status = '';
|
||
|
|
||
|
if(!checkbox.prop('checked')) {
|
||
|
percent = '0';
|
||
|
status = 'NEEDS-ACTION';
|
||
|
}
|
||
|
else if(checkbox.prop('indeterminate')) {
|
||
|
percent = '50';
|
||
|
status = 'IN-PROCESS';
|
||
|
}
|
||
|
else if(eventElement.hasClass('fc-event-cancelled')) {
|
||
|
percent = '100';
|
||
|
status = 'CANCELLED';
|
||
|
}
|
||
|
else {
|
||
|
percent = '100';
|
||
|
status = 'COMPLETED';
|
||
|
}
|
||
|
|
||
|
todoCheckClick(status, percent, calTodo);
|
||
|
},
|
||
|
eventAfterRender: function(event, element, view){
|
||
|
element.attr("data-res-id",event.res_id);
|
||
|
element.attr("data-repeat-hash",event.repeatHash);
|
||
|
if(event.start)
|
||
|
element.attr("data-start", $.fullCalendar.formatDate(event.start, "yyyyMMdd'T'HHmmss'Z'"));
|
||
|
else
|
||
|
element.attr("data-start", '');
|
||
|
element.attr("data-id",event.id);
|
||
|
element.addClass("event_item");
|
||
|
var title = event.title.replace(vCalendar.pre['compressNewLineRex']," ");
|
||
|
if(event.status == 'CANCELLED')
|
||
|
$(element).addClass('fc-event-cancelled');
|
||
|
switch(event.filterStatus)
|
||
|
{
|
||
|
case 'filterAction':
|
||
|
title+=' ('+localization[globalInterfaceLanguage].txtStatusNeedsActionTODO+')';
|
||
|
break;
|
||
|
case 'filterProgress':
|
||
|
title+=' ('+localization[globalInterfaceLanguage].txtStatusInProcessTODO+')';
|
||
|
break;
|
||
|
case 'filterCompleted':
|
||
|
if(event.completedOn)
|
||
|
title+=' ('+localization[globalInterfaceLanguage].txtCompletedOn+' '+$.fullCalendar.formatDate(event.completedOn, dateFormatJqToFc(globalSettings.datepickerformat.value)+' '+(globalSettings.ampmformat.value ? 'h:mm TT' : 'H:mm'))+')';
|
||
|
else
|
||
|
title+=' ('+localization[globalInterfaceLanguage].txtStatusCompletedTODO+')';
|
||
|
break;
|
||
|
case 'filterCanceled':
|
||
|
title+=' ('+localization[globalInterfaceLanguage].txtStatusCancelledTODO+')';
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
element.attr("title",title);
|
||
|
if(typeof event.hidden!='undefined' && event.hidden)
|
||
|
element.addClass('searchCalDAV_hide');
|
||
|
},
|
||
|
prevClick: function() {
|
||
|
getPrevMonthsTodo();
|
||
|
},
|
||
|
nextClick: function() {
|
||
|
getNextMonthsTodo();
|
||
|
},
|
||
|
datepickerClick: function(date) {
|
||
|
if(date>globalToLoadedLimitTodo)
|
||
|
getNextMonthsTodo(true);
|
||
|
else if(date<globalLoadedLimitTodo)
|
||
|
getPrevMonthsTodo(true);
|
||
|
}
|
||
|
});
|
||
|
$('#todoList').fullCalendar('allowSelectEvent',false);
|
||
|
}
|
||
|
|
||
|
function setFirstDayEvent(setDay)
|
||
|
{
|
||
|
var firstDay=typeof setDay!='undefined'?setDay:globalSettings.datepickerfirstdayofweek.value;
|
||
|
var eventWeekDayCells = $('#week_custom .customTable td');
|
||
|
var eventWeekDayContainer = eventWeekDayCells.parent();
|
||
|
var eventMonthDayOptions = $('#repeat_month_custom_select2 option');
|
||
|
var eventYearDayOptions = $('#repeat_year_custom_select2 option');
|
||
|
|
||
|
for(i=firstDay; i<7; i++)
|
||
|
{
|
||
|
eventWeekDayContainer.append(eventWeekDayCells.filter('[data-type="'+i+'"]').detach());
|
||
|
eventMonthDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(eventMonthDayOptions.filter('[data-type="month_custom_month"]'));
|
||
|
eventYearDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(eventYearDayOptions.filter('[data-type="year_custom_month"]'));
|
||
|
}
|
||
|
|
||
|
for(i=0; i<firstDay; i++)
|
||
|
{
|
||
|
eventWeekDayContainer.append(eventWeekDayCells.filter('[data-type="'+i+'"]').detach());
|
||
|
eventMonthDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(eventMonthDayOptions.filter('[data-type="month_custom_month"]'));
|
||
|
eventYearDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(eventYearDayOptions.filter('[data-type="year_custom_month"]'));
|
||
|
}
|
||
|
|
||
|
eventWeekDayCells.removeClass('firstCol lastCol');
|
||
|
eventWeekDayCells.filter('[data-type="'+firstDay+'"]').addClass('firstCol');
|
||
|
eventWeekDayCells.filter('[data-type="'+(firstDay+6)%7+'"]').addClass('lastCol');
|
||
|
}
|
||
|
|
||
|
function setFirstDayTodo(setDay)
|
||
|
{
|
||
|
var firstDay=typeof setDay!='undefined'?setDay:globalSettings.datepickerfirstdayofweek.value;
|
||
|
var todoWeekDayCells = $('#week_custom_TODO .customTable td');
|
||
|
var todoWeekDayContainer = todoWeekDayCells.parent();
|
||
|
var todoMonthDayOptions = $('#repeat_month_custom_select2_TODO option');
|
||
|
var todoYearDayOptions = $('#repeat_year_custom_select2_TODO option');
|
||
|
|
||
|
for(i=firstDay; i<7; i++)
|
||
|
{
|
||
|
todoWeekDayContainer.append(todoWeekDayCells.filter('[data-type="'+i+'"]').detach());
|
||
|
todoMonthDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(todoMonthDayOptions.filter('[data-type="month_custom_month"]'));
|
||
|
todoYearDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(todoYearDayOptions.filter('[data-type="year_custom_month"]'));
|
||
|
}
|
||
|
|
||
|
for(i=0; i<firstDay; i++)
|
||
|
{
|
||
|
todoWeekDayContainer.append(todoWeekDayCells.filter('[data-type="'+i+'"]').detach());
|
||
|
todoMonthDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(todoMonthDayOptions.filter('[data-type="month_custom_month"]'));
|
||
|
todoYearDayOptions.filter('[data-type="'+i+'"]').detach().insertBefore(todoYearDayOptions.filter('[data-type="year_custom_month"]'));
|
||
|
}
|
||
|
|
||
|
todoWeekDayCells.removeClass('firstCol lastCol');
|
||
|
todoWeekDayCells.filter('[data-type="'+firstDay+'"]').addClass('firstCol');
|
||
|
todoWeekDayCells.filter('[data-type="'+(firstDay+6)%7+'"]').addClass('lastCol');
|
||
|
}
|
||
|
|
||
|
function checkEventFormScrollBar()
|
||
|
{
|
||
|
if($('#eventDetailsContainer').is(':hidden'))
|
||
|
return false;
|
||
|
|
||
|
var baseWidth = 413;
|
||
|
var scrollWidth = ($('#event_details_template').width() - $('#eventDetailsContainer').width());
|
||
|
$('#event_details_template').width(baseWidth+scrollWidth);
|
||
|
$('#eventColor').height($('#eventDetailsContainer').height()+12);
|
||
|
}
|
||
|
|
||
|
function checkTodoFormScrollBar()
|
||
|
{
|
||
|
var baseWidth=413;
|
||
|
var scrollWidth=$('#todo_details_template').width() - $('#todoDetailsContainer').width();
|
||
|
var previousWidth = parseInt($('#mainTODO').css('right'), 10);
|
||
|
var newWidth = baseWidth+scrollWidth;
|
||
|
|
||
|
if(previousWidth===newWidth)
|
||
|
return true;
|
||
|
|
||
|
$('#main_h_TODO, #searchFormTODO, #mainTODO').css('right', newWidth);
|
||
|
$('#TodoDisabler').css('right', newWidth+1);
|
||
|
$('#todoForm_h, #todoLoader').width(newWidth);
|
||
|
$('#todoColor').css('right', newWidth-3);
|
||
|
$('#todoForm').width(newWidth-3);
|
||
|
$(window).resize();
|
||
|
}
|
||
|
|
||
|
function initTimepicker(ampm)
|
||
|
{
|
||
|
timelist=new Array();
|
||
|
if(!ampm)
|
||
|
{
|
||
|
globalTimePre=new RegExp('^ *((([0-1]?[0-9]|2[0-3]):[0-5]?[0-9])|(([0-1][0-9]|2[0-3])[0-5][0-9])) *$','i');
|
||
|
// 24 hour format time strings for the autocomplete functionality
|
||
|
for(var i=0;i<24;i++)
|
||
|
for(var j=0;j<minelems.length;j++)
|
||
|
timelist.push(i.pad(2)+':'+minelems[j].pad(2));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
globalTimePre=new RegExp('^ *((((0?[1-9]|1[0-2]):[0-5]?[0-9])|((0[1-9]|1[0-2])[0-5][0-9])) *AM|(((0?[1-9]|1[0-2]):[0-5]?[0-9])|((0[1-9]|1[0-2])[0-5][0-9])) *PM) *$','i');
|
||
|
// 12 hour format time strings for the autocomplete functionality
|
||
|
for(var i=0;i<24;i++)
|
||
|
for(var j=0;j<minelems.length;j++)
|
||
|
timelist.push((i==0 ? 12 : (i<13 ? i : i-12)).pad(2)+':'+minelems[j].pad(2)+(i<12 ? ' AM' : ' PM'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function showEventPrevNav()
|
||
|
{
|
||
|
$('#CAEvent .formNav.prev').click(function(){
|
||
|
eventPrevNavClick();
|
||
|
});
|
||
|
|
||
|
$('#CAEvent .header').addClass('leftspace');
|
||
|
$('#CAEvent .formNav.prev').css('display', 'block');
|
||
|
}
|
||
|
|
||
|
function showEventNextNav()
|
||
|
{
|
||
|
$('#CAEvent .formNav.next').click(function(){
|
||
|
eventNextNavClick();
|
||
|
});
|
||
|
$('#CAEvent .header').addClass('rightspace');
|
||
|
$('#CAEvent .formNav.next').css('display', 'block');
|
||
|
}
|
||
|
|
||
|
function showTodoPrevNav(uncompletedOnly)
|
||
|
{
|
||
|
var type='top';
|
||
|
if(uncompletedOnly)
|
||
|
type='bottom';
|
||
|
|
||
|
$('#CATodo .formNav.prev.'+type).click(function(){
|
||
|
todoPrevNavClick(uncompletedOnly);
|
||
|
});
|
||
|
|
||
|
$('#CATodo .header').addClass('leftspace');
|
||
|
$('#CATodo .formNav.prev.'+type).css('display', 'block');
|
||
|
}
|
||
|
|
||
|
function showTodoNextNav(uncompletedOnly)
|
||
|
{
|
||
|
var type='top';
|
||
|
if(uncompletedOnly)
|
||
|
type='bottom';
|
||
|
|
||
|
$('#CATodo .formNav.next.'+type).click(function(){
|
||
|
todoNextNavClick(uncompletedOnly);
|
||
|
});
|
||
|
|
||
|
$('#CATodo .header').addClass('rightspace');
|
||
|
$('#CATodo .formNav.next.'+type).css('display', 'block');
|
||
|
}
|
||
|
|
||
|
function eventPrevNavClick()
|
||
|
{
|
||
|
var eventsSorted=jQuery.grep(globalEventList.displayEventsArray[globalCalEvent.res_id],function(e){if(e.id==globalCalEvent.id)return true}).sort(repeatStartCompare);
|
||
|
|
||
|
if(eventsSorted.indexOf(globalCalEvent)!=-1)
|
||
|
{
|
||
|
if(eventsSorted.indexOf(globalCalEvent)>0)
|
||
|
{
|
||
|
globalCalEvent=eventsSorted[eventsSorted.indexOf(globalCalEvent)-1];
|
||
|
showEventForm(null, globalCalEvent.allDay, globalCalEvent, globalJsEvent, 'show', 'editOnly');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function eventNextNavClick()
|
||
|
{
|
||
|
var eventsSorted=jQuery.grep(globalEventList.displayEventsArray[globalCalEvent.res_id],function(e){if(e.id==globalCalEvent.id)return true}).sort(repeatStartCompare);
|
||
|
|
||
|
if(eventsSorted.indexOf(globalCalEvent)!=-1)
|
||
|
{
|
||
|
if(eventsSorted.indexOf(globalCalEvent)<(eventsSorted.length-1))
|
||
|
{
|
||
|
globalCalEvent=eventsSorted[eventsSorted.indexOf(globalCalEvent)+1];
|
||
|
showEventForm(null, globalCalEvent.allDay, globalCalEvent, globalJsEvent, 'show', 'editOnly');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function todoPrevNavClick(uncompletedOnly)
|
||
|
{
|
||
|
var eventsSorted=jQuery.grep(globalEventList.displayTodosArray[globalCalTodo.res_id],function(e){if(e.id==globalCalTodo.id)return true}).sort(repeatStartCompare);
|
||
|
|
||
|
if(eventsSorted.indexOf(globalCalTodo)!=-1)
|
||
|
{
|
||
|
if(eventsSorted.indexOf(globalCalTodo)>0)
|
||
|
{
|
||
|
if(uncompletedOnly)
|
||
|
{
|
||
|
for(var ij=eventsSorted.indexOf(globalCalTodo)-1; ij>=0; ij--)
|
||
|
if(eventsSorted[ij].status!='COMPLETED')
|
||
|
{
|
||
|
globalCalTodo=eventsSorted[ij];
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
globalCalTodo=eventsSorted[eventsSorted.indexOf(globalCalTodo)-1];
|
||
|
showTodoForm(globalCalTodo, 'show', 'editOnly');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function todoNextNavClick(uncompletedOnly)
|
||
|
{
|
||
|
var eventsSorted=jQuery.grep(globalEventList.displayTodosArray[globalCalTodo.res_id],function(e){if(e.id==globalCalTodo.id)return true}).sort(repeatStartCompare);
|
||
|
if(eventsSorted.indexOf(globalCalTodo)!=-1)
|
||
|
{
|
||
|
if(eventsSorted.indexOf(globalCalTodo)<(eventsSorted.length-1))
|
||
|
{
|
||
|
if(uncompletedOnly)
|
||
|
{
|
||
|
for(var ij=eventsSorted.indexOf(globalCalTodo)+1; ij<eventsSorted.length; ij++)
|
||
|
if(eventsSorted[ij].status!='COMPLETED')
|
||
|
{
|
||
|
globalCalTodo=eventsSorted[ij];
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
globalCalTodo=eventsSorted[eventsSorted.indexOf(globalCalTodo)+1];
|
||
|
showTodoForm(globalCalTodo, 'show', 'editOnly');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function todoStatusChanged(status)
|
||
|
{
|
||
|
if(status=='COMPLETED')
|
||
|
{
|
||
|
var today = new Date();
|
||
|
$('.completedOnTr').show();
|
||
|
if($('#completedOnDate').val()=='')
|
||
|
$('#completedOnDate').val($.datepicker.formatDate(globalSettings.datepickerformat.value, today));
|
||
|
if($('#completedOnTime').val()=='')
|
||
|
$('#completedOnTime').val($.fullCalendar.formatDate(today, (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm')));
|
||
|
$('#completedOnDate, #completedOnTime').change();
|
||
|
}
|
||
|
else {
|
||
|
$('#completedOnDate, #completedOnTime').parent().find('img').css('display','none');
|
||
|
$('.completedOnTr').hide();
|
||
|
}
|
||
|
checkTodoFormScrollBar();
|
||
|
}
|
||
|
|
||
|
function initKbTodoNavigation()
|
||
|
{
|
||
|
$(document.documentElement).keyup(function(event)
|
||
|
{
|
||
|
if(typeof globalActiveApp=='undefined' || globalActiveApp!='CalDavTODO' || typeof globalObjectLoading=='undefined' || globalObjectLoading==true)
|
||
|
return true;
|
||
|
if($('#SystemCalDavTODO').css('visibility')!='hidden' && isCalDAVLoaded && $('#TodoDisabler').css('display')=='none' && !$('#searchInputTODO').is(':focus'))
|
||
|
{
|
||
|
// 37 = left, 38 = up, 39 = right, 40 = down
|
||
|
var selected_todo=null, next_todo=null;
|
||
|
if((selected_todo=$('#SystemCalDavTODO').find('.fc-event-selected').parent()).length==1)
|
||
|
{
|
||
|
if(event.keyCode == 38 && (next_todo=selected_todo.prevAll('.fc-list-section').find('.fc-event').filter(':visible').last()).length || event.keyCode == 40 && (next_todo=selected_todo.nextAll('.fc-list-section').find('.fc-event').filter(':visible').first()).length)
|
||
|
$('#todoList').fullCalendar('selectEvent', next_todo);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$(document.documentElement).keydown(function(event)
|
||
|
{
|
||
|
if(typeof globalActiveApp=='undefined' || globalActiveApp!='CalDavTODO' || typeof globalObjectLoading=='undefined' || globalObjectLoading==true)
|
||
|
return true;
|
||
|
|
||
|
if($('#SystemCalDavTODO').css('visibility')!='hidden' && isCalDAVLoaded && $('#TodoDisabler').css('display')=='none' && !$('#searchInputTODO').is(':focus'))
|
||
|
{
|
||
|
// 37 = left, 38 = up, 39 = right, 40 = down
|
||
|
var selected_todo=null, next_todo=null;
|
||
|
if((selected_todo=$('#SystemCalDavTODO').find('.fc-event-selected').parent()).length==1)
|
||
|
{
|
||
|
var list=$('#todoList').find('.fc-list-content');
|
||
|
if(event.keyCode == 38 && (next_todo=selected_todo.prevAll('.fc-list-section').find('.fc-event').filter(':visible').last()).length || event.keyCode == 40 && (next_todo=selected_todo.nextAll('.fc-list-section').find('.fc-event').filter(':visible').first()).length)
|
||
|
{
|
||
|
switch(event.keyCode)
|
||
|
{
|
||
|
case 38:
|
||
|
event.preventDefault();
|
||
|
if(list.scrollTop()>list.scrollTop()+next_todo.offset().top-list.offset().top-list.height()*globalKBNavigationPaddingRate)
|
||
|
list.scrollTop(list.scrollTop()+next_todo.offset().top-list.offset().top-list.height()*globalKBNavigationPaddingRate);
|
||
|
else if(list.scrollTop()<list.scrollTop()+next_todo.offset().top+next_todo.height()-list.offset().top-list.height()*(1-globalKBNavigationPaddingRate)) // todo invisible (scrollbar moved)
|
||
|
list.scrollTop(list.scrollTop()+next_todo.offset().top+next_todo.height()-list.offset().top-list.height()*(1-globalKBNavigationPaddingRate));
|
||
|
else
|
||
|
return false;
|
||
|
break;
|
||
|
case 40:
|
||
|
event.preventDefault();
|
||
|
if(list.scrollTop()<list.scrollTop()+next_todo.offset().top+next_todo.height()-list.offset().top-list.height()*(1-globalKBNavigationPaddingRate)) // todo invisible (scrollbar moved)
|
||
|
list.scrollTop(list.scrollTop()+next_todo.offset().top+next_todo.height()-list.offset().top-list.height()*(1-globalKBNavigationPaddingRate));
|
||
|
else if(list.scrollTop()>list.scrollTop()+next_todo.offset().top-list.offset().top-list.height()*globalKBNavigationPaddingRate)
|
||
|
list.scrollTop(list.scrollTop()+next_todo.offset().top-list.offset().top-list.height()*globalKBNavigationPaddingRate);
|
||
|
else
|
||
|
return false;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else // no previous todo and up pressed || no next todo and down pressed
|
||
|
{
|
||
|
switch(event.keyCode)
|
||
|
{
|
||
|
case 38:
|
||
|
list.scrollTop(0);
|
||
|
break;
|
||
|
case 40:
|
||
|
list.scrollTop(list.prop('scrollHeight'));
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function translateEventAlerts()
|
||
|
{
|
||
|
$('[data-type="alert"]').text(localization[globalInterfaceLanguage].txtAlert);
|
||
|
$('.alert').find('[data-type="alert_none"]').text(localization[globalInterfaceLanguage].txtAlertNone);
|
||
|
$('.alert').find('[data-type="alert_message"]').text(localization[globalInterfaceLanguage].txtAlertMessage);
|
||
|
$('[data-type="PH_before_after_alert"]').attr('placeholder',localization[globalInterfaceLanguage].pholderAfterBeforeVal);
|
||
|
$('[data-type="PH_alarm_date"]').attr('placeholder',localization[globalInterfaceLanguage].pholderAlarmDate);
|
||
|
$('[data-type="PH_alarm_time"]').attr('placeholder',localization[globalInterfaceLanguage].pholderAlarmTime);
|
||
|
$('.alert_details').find('[data-type="on_date"]').text(localization[globalInterfaceLanguage].txtAlertOnDate);
|
||
|
$('.alert_details').find('[data-type="weeks_before"]').text(localization[globalInterfaceLanguage].txtAlertWeeksBefore);
|
||
|
$('.alert_details').find('[data-type="days_before"]').text(localization[globalInterfaceLanguage].txtAlertDaysBefore);
|
||
|
$('.alert_details').find('[data-type="hours_before"]').text(localization[globalInterfaceLanguage].txtAlertHoursBefore);
|
||
|
$('.alert_details').find('[data-type="minutes_before"]').text(localization[globalInterfaceLanguage].txtAlertMinutesBefore);
|
||
|
$('.alert_details').find('[data-type="seconds_before"]').text(localization[globalInterfaceLanguage].txtAlertSecondsBefore);
|
||
|
$('.alert_details').find('[data-type="weeks_after"]').text(localization[globalInterfaceLanguage].txtAlertWeeksAfter);
|
||
|
$('.alert_details').find('[data-type="days_after"]').text(localization[globalInterfaceLanguage].txtAlertDaysAfter);
|
||
|
$('.alert_details').find('[data-type="hours_after"]').text(localization[globalInterfaceLanguage].txtAlertHoursAfter);
|
||
|
$('.alert_details').find('[data-type="minutes_after"]').text(localization[globalInterfaceLanguage].txtAlertMinutesAfter);
|
||
|
$('.alert_details').find('[data-type="seconds_after"]').text(localization[globalInterfaceLanguage].txtAlertSecondsAfter);
|
||
|
}
|
||
|
|
||
|
function translateTodoAlerts()
|
||
|
{
|
||
|
$('[data-type="alert_TODO"]').text(localization[globalInterfaceLanguage].txtAlertTODO);
|
||
|
$('.alertTODO').find('[data-type="alert_none_TODO"]').text(localization[globalInterfaceLanguage].txtAlertNone);
|
||
|
$('.alertTODO').find('[data-type="alert_message_TODO"]').text(localization[globalInterfaceLanguage].txtAlertMessage);
|
||
|
$('[data-type="PH_before_after_alert_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderAfterBeforeValTODO);
|
||
|
$('[data-type="PH_alarm_date_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderAlarmDateTODO);
|
||
|
$('[data-type="PH_alarm_time_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderAlarmTimeTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="on_dateTODO"]').text(localization[globalInterfaceLanguage].txtAlertOnDateTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="weeks_beforeTODO"]').text(localization[globalInterfaceLanguage].txtAlertWeeksBeforeTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="days_beforeTODO"]').text(localization[globalInterfaceLanguage].txtAlertDaysBeforeTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="hours_beforeTODO"]').text(localization[globalInterfaceLanguage].txtAlertHoursBeforeTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="minutes_beforeTODO"]').text(localization[globalInterfaceLanguage].txtAlertMinutesBeforeTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="seconds_beforeTODO"]').text(localization[globalInterfaceLanguage].txtAlertSecondsBeforeTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="weeks_afterTODO"]').text(localization[globalInterfaceLanguage].txtAlertWeeksAfterTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="days_afterTODO"]').text(localization[globalInterfaceLanguage].txtAlertDaysAfterTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="hours_afterTODO"]').text(localization[globalInterfaceLanguage].txtAlertHoursAfterTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="minutes_afterTODO"]').text(localization[globalInterfaceLanguage].txtAlertMinutesAfterTODO);
|
||
|
$('.alert_detailsTODO').find('[data-type="seconds_afterTODO"]').text(localization[globalInterfaceLanguage].txtAlertSecondsAfterTODO);
|
||
|
}
|
||
|
|
||
|
function translate()
|
||
|
{
|
||
|
// DATEPICKER
|
||
|
$.datepicker.regional[globalInterfaceLanguage] = {
|
||
|
monthNames: localization[globalInterfaceLanguage].monthNames,
|
||
|
monthNamesShort: localization[globalInterfaceLanguage].monthNamesShort,
|
||
|
dayNames: localization[globalInterfaceLanguage].dayNames,
|
||
|
dayNamesShort: localization[globalInterfaceLanguage].dayNamesShort,
|
||
|
dayNamesMin: localization[globalInterfaceLanguage].dayNamesMin};
|
||
|
$.datepicker.setDefaults($.datepicker.regional[globalInterfaceLanguage]);
|
||
|
// INTERFACE
|
||
|
//$('[data-type="system_logo"]').attr('alt',localization[globalInterfaceLanguage].altLogo);
|
||
|
$('[data-type="system_username"]').attr('placeholder',localization[globalInterfaceLanguage].pholderUsername);
|
||
|
$('[data-type="system_password"]').attr('placeholder',localization[globalInterfaceLanguage].pholderPassword);
|
||
|
$('[data-type="system_login"]').attr({'title':localization[globalInterfaceLanguage].buttonLogin,'alt':localization[globalInterfaceLanguage].buttonLogin});
|
||
|
$('.resourceCalDAV_text[data-type="resourcesCalDAV_txt"]').text(localization[globalInterfaceLanguage].txtCalendars);
|
||
|
$('[data-type="choose_calendar_TODO"]').text(localization[globalInterfaceLanguage].txtSelectCalendarTODO);
|
||
|
$('[data-type="todo_txt"]').text(localization[globalInterfaceLanguage].txtTodo);
|
||
|
$('#eventFormShower').attr('alt',localization[globalInterfaceLanguage].altAddEvent);
|
||
|
$('#showUnloadedCalendars').attr({title:capitalize(localization[globalInterfaceLanguage].txtEnabledCalendars),alt:capitalize(localization[globalInterfaceLanguage].txtEnabledCalendars)});
|
||
|
$('#showUnloadedCalendarsTODO').attr({title:capitalize(localization[globalInterfaceLanguage].txtEnabledTodoLists),alt:capitalize(localization[globalInterfaceLanguage].txtEnabledTodoLists)});
|
||
|
$('#loadUnloadedCalendars, #loadUnloadedCalendarsTODO').val(localization[globalInterfaceLanguage].buttonSave);
|
||
|
$('#loadUnloadedCalendarsCancel, #loadUnloadedCalendarsTODOCancel').val(localization[globalInterfaceLanguage].buttonCancel);
|
||
|
// TODOS
|
||
|
$('.resourceCalDAVTODO_text[data-type="resourcesCalDAV_txt"]').text(localization[globalInterfaceLanguage].txtTodoLists);
|
||
|
$('[data-type="name_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderNameTODO);
|
||
|
$('[data-type="type_TODO"]').text(localization[globalInterfaceLanguage].txtTypeTODO);
|
||
|
$('[data-type="todo_type_none"]').text(localization[globalInterfaceLanguage].txtTypeTODONone);
|
||
|
$('[data-type="todo_type_start"]').text(localization[globalInterfaceLanguage].txtTypeTODOStart);
|
||
|
$('[data-type="todo_type_due"]').text(localization[globalInterfaceLanguage].txtTypeTODODue);
|
||
|
$('[data-type="todo_type_both"]').text(localization[globalInterfaceLanguage].txtTypeTODOBoth);
|
||
|
$('[data-type="date_from_TODO"]').text(localization[globalInterfaceLanguage].txtDateFromTODO);
|
||
|
$('[data-type="date_to_TODO"]').text(localization[globalInterfaceLanguage].txtDateToTODO);
|
||
|
$('[data-type="PH_completedOn"]').text(localization[globalInterfaceLanguage].txtCompletedOn);
|
||
|
$('[data-type="PH_date_from_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderDateFromTODO);
|
||
|
$('[data-type="PH_time_from_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderTimeFromTODO);
|
||
|
$('[data-type="PH_date_to_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderDateToTODO);
|
||
|
$('[data-type="PH_time_to_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderTimeToTODO);
|
||
|
$('[data-type="PH_completedOnDate"]').attr('placeholder',localization[globalInterfaceLanguage].pholderCompletedOnDate);
|
||
|
$('[data-type="PH_completedOnTime"]').attr('placeholder',localization[globalInterfaceLanguage].pholderCompletedOnTime);
|
||
|
$('[data-type="status_TODO"]').text(localization[globalInterfaceLanguage].txtStatus);
|
||
|
$('[data-type="STATUS_NEEDS-ACTION_TODO"]').text(localization[globalInterfaceLanguage].txtStatusNeedsActionTODO);
|
||
|
$('[data-type="STATUS_COMPLETED_TODO"]').text(localization[globalInterfaceLanguage].txtStatusCompletedTODO);
|
||
|
$('[data-type="STATUS_IN-PROCESS_TODO"]').text(localization[globalInterfaceLanguage].txtStatusInProcessTODO);
|
||
|
$('[data-type="STATUS_CANCELLED_TODO"]').text(localization[globalInterfaceLanguage].txtStatusCancelledTODO);
|
||
|
$('[data-type="percent_complete_TODO"]').text(localization[globalInterfaceLanguage].txtPercentCompletedTODO);
|
||
|
$('[data-type="priority_TODO"]').text(localization[globalInterfaceLanguage].txtPriority);
|
||
|
$('[data-type="priority_TODO_none"]').text(localization[globalInterfaceLanguage].txtPriorityNone);
|
||
|
$('[data-type="priority_TODO_low"]').text(localization[globalInterfaceLanguage].txtPriorityLow);
|
||
|
$('[data-type="priority_TODO_medium"]').text(localization[globalInterfaceLanguage].txtPriorityMedium);
|
||
|
$('[data-type="priority_TODO_high"]').text(localization[globalInterfaceLanguage].txtPriorityHigh);
|
||
|
$('[data-type="calendar_TODO"]').text(localization[globalInterfaceLanguage].txtTodoList);
|
||
|
$('[data-type="note_TODO"]').text(localization[globalInterfaceLanguage].txtNoteTODO);
|
||
|
$('[data-type="PH_note_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].pholderNoteTODO);
|
||
|
$('[data-type="txt_availTODO"]').text(localization[globalInterfaceLanguage].eventAvailability);
|
||
|
$('[data-type="BUSY_AVAIL_TODO"]').text(localization[globalInterfaceLanguage].eventAvailabilityBusy);
|
||
|
$('[data-type="FREE_AVAIL_TODO"]').text(localization[globalInterfaceLanguage].eventAvailabilityFree);
|
||
|
$('[data-type="txt_typeTODO"]').text(localization[globalInterfaceLanguage].eventType);
|
||
|
$('[data-type="PUBLIC_TYPE_TODO"]').text(localization[globalInterfaceLanguage].eventTypePublic);
|
||
|
$('[data-type="PRIVATE_TYPE_TODO"]').text(localization[globalInterfaceLanguage].eventTypePrivate);
|
||
|
$('[data-type="CONFIDENTIAL_TYPE_TODO"]').text(localization[globalInterfaceLanguage].eventTypeConfidential);
|
||
|
$('[data-type="txt_url_TODO"]').text(localization[globalInterfaceLanguage].eventURL);
|
||
|
$('[data-type="url_TODO"]').attr('placeholder',localization[globalInterfaceLanguage].eventURL);
|
||
|
$('[data-type="todo_prev_nav"]').attr('title',localization[globalInterfaceLanguage].todoPrevNav);
|
||
|
$('[data-type="todo_next_nav"]').attr('title',localization[globalInterfaceLanguage].todoNextNav);
|
||
|
$('[data-type="todo_prev_uncompleted_nav"]').attr('title',localization[globalInterfaceLanguage].todoUncompletedPrevNav);
|
||
|
$('[data-type="todo_next_uncompleted_nav"]').attr('title',localization[globalInterfaceLanguage].todoUncompletedNextNav);
|
||
|
$("#saveTODO").val(localization[globalInterfaceLanguage].buttonSaveTODO);
|
||
|
$("#editTODO").val(localization[globalInterfaceLanguage].buttonEditTODO);
|
||
|
$("#duplicateTODO").val(localization[globalInterfaceLanguage].buttonDuplicate);
|
||
|
$("#resetTODO").val(localization[globalInterfaceLanguage].buttonResetTODO);
|
||
|
$("#closeTODO").val(localization[globalInterfaceLanguage].buttonCloseTODO);
|
||
|
$("#deleteTODO").val(localization[globalInterfaceLanguage].buttonDeleteTODO);
|
||
|
// EVENTS
|
||
|
$('[data-type="name"]').attr('placeholder',localization[globalInterfaceLanguage].pholderName);
|
||
|
$('[data-type="location"]').text(localization[globalInterfaceLanguage].txtLocation);
|
||
|
$('[data-type="PH_location"]').attr('placeholder',localization[globalInterfaceLanguage].pholderLocation);
|
||
|
$('[data-type="all_day"]').text(localization[globalInterfaceLanguage].txtAllDay);
|
||
|
$('[data-type="from"]').text(localization[globalInterfaceLanguage].from);
|
||
|
$('[data-type="to"]').text(localization[globalInterfaceLanguage].to);
|
||
|
$('[data-type="PH_date_from"]').attr('placeholder',localization[globalInterfaceLanguage].pholderDateFrom);
|
||
|
$('[data-type="PH_time_from"]').attr('placeholder',localization[globalInterfaceLanguage].pholderTimeFrom);
|
||
|
$('[data-type="PH_date_to"]').attr('placeholder',localization[globalInterfaceLanguage].pholderDateTo);
|
||
|
$('[data-type="PH_time_to"]').attr('placeholder',localization[globalInterfaceLanguage].pholderTimeTo);
|
||
|
$('[data-type="repeat"]').text(localization[globalInterfaceLanguage].txtRepeat);
|
||
|
$('[data-type="PH_until_date"]').attr('placeholder',localization[globalInterfaceLanguage].pholderUntilDate);
|
||
|
$('[data-type="PH_repeat_count"]').attr('placeholder',localization[globalInterfaceLanguage].pholderRepeatCount);
|
||
|
$('[data-type="repeat_end"]').text(localization[globalInterfaceLanguage].txtRepeatEnd);
|
||
|
$('[data-type="show_as"]').text(localization[globalInterfaceLanguage].txtShowAs);
|
||
|
$('[data-type="priority"]').text(localization[globalInterfaceLanguage].txtPriority);
|
||
|
$('[data-type="priority_none"]').text(localization[globalInterfaceLanguage].txtPriorityNone);
|
||
|
$('[data-type="priority_low"]').text(localization[globalInterfaceLanguage].txtPriorityLow);
|
||
|
$('[data-type="priority_medium"]').text(localization[globalInterfaceLanguage].txtPriorityMedium);
|
||
|
$('[data-type="priority_high"]').text(localization[globalInterfaceLanguage].txtPriorityHigh);
|
||
|
$('[data-type="event_calendar"]').text(localization[globalInterfaceLanguage].txtEventCalendar);
|
||
|
$('[data-type="choose_calendar"]').text(localization[globalInterfaceLanguage].txtSelectCalendar);
|
||
|
$('[data-type="note"]').text(localization[globalInterfaceLanguage].txtNote);
|
||
|
$('[data-type="PH_note"]').attr('placeholder',localization[globalInterfaceLanguage].pholderNote);
|
||
|
$('[data-type="status"]').text(localization[globalInterfaceLanguage].txtStatus);
|
||
|
$('[data-type="STATUS_NONE"]').text(localization[globalInterfaceLanguage].txtStatusNone);
|
||
|
$('[data-type="STATUS_TENTATIVE"]').text(localization[globalInterfaceLanguage].txtStatusTentative);
|
||
|
$('[data-type="STATUS_CONFIRMED"]').text(localization[globalInterfaceLanguage].txtStatusConfirmed);
|
||
|
$('[data-type="STATUS_CANCELLED"]').text(localization[globalInterfaceLanguage].txtStatusCancelled);
|
||
|
$('[data-type="txt_avail"]').text(localization[globalInterfaceLanguage].eventAvailability);
|
||
|
$('[data-type="BUSY_AVAIL"]').text(localization[globalInterfaceLanguage].eventAvailabilityBusy);
|
||
|
$('[data-type="FREE_AVAIL"]').text(localization[globalInterfaceLanguage].eventAvailabilityFree);
|
||
|
$('[data-type="txt_type"]').text(localization[globalInterfaceLanguage].eventType);
|
||
|
$('[data-type="PUBLIC_TYPE"]').text(localization[globalInterfaceLanguage].eventTypePublic);
|
||
|
$('[data-type="PRIVATE_TYPE"]').text(localization[globalInterfaceLanguage].eventTypePrivate);
|
||
|
$('[data-type="CONFIDENTIAL_TYPE"]').text(localization[globalInterfaceLanguage].eventTypeConfidential);
|
||
|
$('[data-type="txt_url_EVENT"]').text(localization[globalInterfaceLanguage].eventURL);
|
||
|
$('[data-type="url_EVENT"]').attr('placeholder',localization[globalInterfaceLanguage].eventURL);
|
||
|
$('[data-type="repeat_no-repeat"]').text(localization[globalInterfaceLanguage].txtNoRepeat);
|
||
|
$('[data-type="repeat_DAILY"]').text(localization[globalInterfaceLanguage].txtRepeatDay);
|
||
|
$('[data-type="repeat_WEEKLY"]').text(localization[globalInterfaceLanguage].txtRepeatWeek);
|
||
|
$('[data-type="repeat_WEEKEND"]').text(localization[globalInterfaceLanguage].txtRepeatWeekend);
|
||
|
$('[data-type="repeat_MONTHLY"]').text(localization[globalInterfaceLanguage].txtRepeatMonth);
|
||
|
$('[data-type="repeat_TWO_WEEKLY"]').text(localization[globalInterfaceLanguage].txtRepeatTwoWeek);
|
||
|
$('[data-type="repeat_YEARLY"]').text(localization[globalInterfaceLanguage].txtRepeatYear);
|
||
|
$('[data-type="repeat_CUSTOM_WEEKLY"]').text(localization[globalInterfaceLanguage].txtRepeatCustomWeek);
|
||
|
$('[data-type="repeat_CUSTOM_MONTHLY"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonth);
|
||
|
$('[data-type="repeat_CUSTOM_YEARLY"]').text(localization[globalInterfaceLanguage].txtRepeatCustomYear);
|
||
|
$('[data-type="repeat_BUSINESS"]').text(localization[globalInterfaceLanguage].txtRepeatWork);
|
||
|
$('[data-type="week_custom_txt"]').text(localization[globalInterfaceLanguage].txtRepeatCustomWeekLabel);
|
||
|
$('[data-type="month_custom2_txt"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthLabel);
|
||
|
$('[data-type="month_custom_every"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthEvery);
|
||
|
$('[data-type="month_custom_first"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthFirst);
|
||
|
$('[data-type="month_custom_second"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthSecond);
|
||
|
$('[data-type="month_custom_third"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthThird);
|
||
|
$('[data-type="month_custom_fourth"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthFourth);
|
||
|
$('[data-type="month_custom_fifth"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthFifth);
|
||
|
$('[data-type="month_custom_last"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthLast);
|
||
|
$('[data-type="month_custom_custom"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthCustom);
|
||
|
$('[data-type="month_custom_month"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthMonth);
|
||
|
|
||
|
$('[data-type="year_custom1"]').text(localization[globalInterfaceLanguage].txtRepeatCustomYearLabel1);
|
||
|
$('[data-type="year_custom3"]').text(localization[globalInterfaceLanguage].txtRepeatCustomYearLabel2);
|
||
|
$('[data-type="year_custom_every"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthEvery);
|
||
|
$('[data-type="year_custom_first"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthFirst);
|
||
|
$('[data-type="year_custom_second"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthSecond);
|
||
|
$('[data-type="year_custom_third"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthThird);
|
||
|
$('[data-type="year_custom_fourth"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthFourth);
|
||
|
$('[data-type="year_custom_fifth"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthFifth);
|
||
|
$('[data-type="year_custom_last"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthLast);
|
||
|
$('[data-type="year_custom_custom"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthCustom);
|
||
|
$('[data-type="year_custom_month"]').text(localization[globalInterfaceLanguage].txtRepeatCustomMonthMonth);
|
||
|
|
||
|
for(i=0; i<12; i++)
|
||
|
{
|
||
|
$('#year_custom3 .customTable td[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].monthNamesShort[i]);
|
||
|
$('#year_custom3_TODO .customTable td[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].monthNamesShort[i]);
|
||
|
}
|
||
|
|
||
|
for(i=0; i<7; i++)
|
||
|
{
|
||
|
$('#repeat_month_custom_select2 option[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].dayNames[i]);
|
||
|
$('#repeat_month_custom_select2_TODO option[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].dayNames[i]);
|
||
|
$('#repeat_year_custom_select2 option[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].dayNames[i]);
|
||
|
$('#repeat_year_custom_select2_TODO option[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].dayNames[i]);
|
||
|
}
|
||
|
|
||
|
for(i=0; i<7; i++)
|
||
|
{
|
||
|
$('#week_custom .customTable td[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].dayNamesMin[i]);
|
||
|
$('#week_custom_TODO .customTable td[data-type="'+i+'"]').text(localization[globalInterfaceLanguage].dayNamesMin[i]);
|
||
|
}
|
||
|
|
||
|
$('[data-type="repeat_details_on_date"]').text(localization[globalInterfaceLanguage].txtRepeatOnDate);
|
||
|
$('[data-type="repeat_details_after"]').text(localization[globalInterfaceLanguage].txtRepeatAfter);
|
||
|
$('[data-type="repeat_details_never"]').text(localization[globalInterfaceLanguage].txtRepeatNever);
|
||
|
$('[data-type="event_prev_nav"]').attr('title',localization[globalInterfaceLanguage].eventPrevNav);
|
||
|
$('[data-type="event_next_nav"]').attr('title',localization[globalInterfaceLanguage].eventNextNav);
|
||
|
$("#saveButton").val(localization[globalInterfaceLanguage].buttonSave);
|
||
|
$("#editButton").val(localization[globalInterfaceLanguage].buttonEdit);
|
||
|
$("#duplicateButton").val(localization[globalInterfaceLanguage].buttonDuplicate);
|
||
|
$("#resetButton").val(localization[globalInterfaceLanguage].buttonReset);
|
||
|
$("#closeButton").val(localization[globalInterfaceLanguage].buttonClose);
|
||
|
$("#deleteButton").val(localization[globalInterfaceLanguage].buttonDelete);
|
||
|
$('#alertsH').text(localization[globalInterfaceLanguage].txtAlertsH);
|
||
|
$("#alertButton").val(localization[globalInterfaceLanguage].buttonAlert);
|
||
|
$('[data-type="PH_CalDAVsearch"]').attr('placeholder',localization[globalInterfaceLanguage].CalDAVsearch);
|
||
|
|
||
|
$('[data-type="addAll"]').attr('title',localization[globalInterfaceLanguage].allEnable);
|
||
|
$('[data-type="addAll"]').attr('alt',localization[globalInterfaceLanguage].allEnable);
|
||
|
$('[data-type="removeAll"]').attr('title',localization[globalInterfaceLanguage].allDisable);
|
||
|
$('[data-type="removeAll"]').attr('alt',localization[globalInterfaceLanguage].allDisable);
|
||
|
$('[data-type="txt_timezone"]').text(localization[globalInterfaceLanguage].timezone);
|
||
|
$('[data-type="txt_timezonePicker"]').text(localization[globalInterfaceLanguage].txtTimezonePicker);
|
||
|
$('[data-type="txt_timezoneTODO"]').text(localization[globalInterfaceLanguage].timezone);
|
||
|
$('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader);
|
||
|
$('#CalendarLoaderTODO').children('.loaderInfo').text(localization[globalInterfaceLanguage].calendarLoader);
|
||
|
$('[data-type="repeat_event"]').text(localization[globalInterfaceLanguage].repeatBoxButton);
|
||
|
$('[data-type="editOptions"]').attr('value',localization[globalInterfaceLanguage].repeatBoxButton);
|
||
|
$('[data-type="editOptionsTODO"]').attr('value',localization[globalInterfaceLanguage].repeatBoxButton);
|
||
|
$('#editAll').val(localization[globalInterfaceLanguage].allEvsButton);
|
||
|
$('#editFuture').val(localization[globalInterfaceLanguage].allFutureButton);
|
||
|
$('#editOnlyOne').val(localization[globalInterfaceLanguage].eventOnlyButton);
|
||
|
$('#editAllTODO').val(localization[globalInterfaceLanguage].allEvsButtonTODO);
|
||
|
$('#editFutureTODO').val(localization[globalInterfaceLanguage].allFutureButtonTODO);
|
||
|
$('#editOnlyOneTODO').val(localization[globalInterfaceLanguage].eventOnlyButtonTODO);
|
||
|
$('[data-type="closeRepeat"]').val(localization[globalInterfaceLanguage].buttonClose);
|
||
|
$('[data-type="repeat_type"]').text(localization[globalInterfaceLanguage].repeatInterval);
|
||
|
|
||
|
$('#CalDavZAPPopup').find('[data-type="location_txt"]').text(localization[globalInterfaceLanguage].txtLocation);
|
||
|
$('#CalDavZAPPopup').find('[data-type="from_txt"]').text(localization[globalInterfaceLanguage].from);
|
||
|
$('#CalDavZAPPopup').find('[data-type="to_txt"]').text(localization[globalInterfaceLanguage].to);
|
||
|
$('#CalDavZAPPopup').find('[data-type="status_txt"]').text(localization[globalInterfaceLanguage].txtStatus);
|
||
|
$('#CalDavZAPPopup').find('[data-type="avail_txt"]').text(localization[globalInterfaceLanguage].eventAvailability);
|
||
|
$('#CalDavZAPPopup').find('[data-type="type_txt"]').text(localization[globalInterfaceLanguage].eventType);
|
||
|
$('#CalDavZAPPopup').find('[data-type="priority_txt"]').text(localization[globalInterfaceLanguage].txtPriority);
|
||
|
$('#CalDavZAPPopup').find('[data-type="calendar_txt"]').text(localization[globalInterfaceLanguage].txtEventCalendar);
|
||
|
$('#CalDavZAPPopup').find('[data-type="url_txt"]').text(localization[globalInterfaceLanguage].eventURL);
|
||
|
$('#CalDavZAPPopup').find('[data-type="note_txt"]').text(localization[globalInterfaceLanguage].txtNote);
|
||
|
|
||
|
translateEventAlerts();
|
||
|
translateTodoAlerts();
|
||
|
}
|
||
|
|
||
|
function selectActiveCalendar()
|
||
|
{
|
||
|
var todoString = "";
|
||
|
if(!globalEventCollectionsLoading && globalSettingsSaving!='event')
|
||
|
{
|
||
|
$('#ResourceCalDAVList').find('.resourceCalDAV_item_selected').removeClass('resourceCalDAV_item_selected');
|
||
|
for(var i=0; i<globalResourceCalDAVList.collections.length;i++)
|
||
|
if(globalResourceCalDAVList.collections[i].uid!=undefined)
|
||
|
{
|
||
|
var inputResource = globalResourceCalDAVList.collections[i];
|
||
|
var par=inputResource.uid.split('/');
|
||
|
// set todo calendar as selected
|
||
|
if(globalSettings.calendarselected.value!='')
|
||
|
{
|
||
|
if((par[par.length-3]+'/'+par[par.length-2]+'/')==globalSettings.calendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if(inputResource.uid==globalSettings.calendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if (typeof globalSettings.calendarselected.value=='object' && inputResource.uid.match(globalSettings.calendarselected.value)!=null)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
for(var i=0; i<globalResourceCalDAVList.collections.length;i++)
|
||
|
if(globalResourceCalDAVList.collections[i].uid!=undefined)
|
||
|
{
|
||
|
var inputResource = globalResourceCalDAVList.collections[i];
|
||
|
var par=inputResource.uid.split('/');
|
||
|
if(typeof globalCalendarSelected!='undefined' && globalCalendarSelected!=null && globalCalendarSelected!='')
|
||
|
{
|
||
|
globalSettings.calendarselected.value=globalCalendarSelected;
|
||
|
if((par[par.length-3]+'/'+par[par.length-2]+'/')==globalSettings.calendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if(inputResource.uid==globalSettings.calendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if (typeof globalSettings.calendarselected.value=='object' && inputResource.uid.match(globalSettings.calendarselected.value)!=null)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0 && $('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item[data-id]:visible').length > 0)
|
||
|
{
|
||
|
var ui_d = $('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item[data-id]:visible').eq(0).attr('data-id');
|
||
|
var part_u = ui_d.split('/');
|
||
|
globalSettings.calendarselected.value=part_u[part_u.length-3]+'/'+part_u[part_u.length-2]+'/';
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item[data-id]:visible').eq(0).addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
todoString = "TODO";
|
||
|
if(!globalTodoCollectionsLoading && globalSettingsSaving!='todo')
|
||
|
{
|
||
|
$('#ResourceCalDAVTODOList').find('.resourceCalDAV_item_selected').removeClass('resourceCalDAV_item_selected');
|
||
|
for(var i=0; i<globalResourceCalDAVList.TodoCollections.length;i++)
|
||
|
if(globalResourceCalDAVList.TodoCollections[i].uid!=undefined)
|
||
|
{
|
||
|
var inputResource = globalResourceCalDAVList.TodoCollections[i];
|
||
|
var par=inputResource.uid.split('/');
|
||
|
// set todo calendar as selected
|
||
|
if(globalSettings.todocalendarselected.value!='')
|
||
|
{
|
||
|
|
||
|
if((par[par.length-3]+'/'+par[par.length-2]+'/')==globalSettings.todocalendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if(inputResource.uid==globalSettings.todocalendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if (typeof globalSettings.todocalendarselected.value=='object' && inputResource.uid.match(globalSettings.todocalendarselected.value)!=null)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
for(var i=0; i<globalResourceCalDAVList.TodoCollections.length;i++)
|
||
|
if(globalResourceCalDAVList.TodoCollections[i].uid!=undefined)
|
||
|
{
|
||
|
var inputResource = globalResourceCalDAVList.TodoCollections[i];
|
||
|
var par=inputResource.uid.split('/');
|
||
|
if(typeof globalTodoCalendarSelected!='undefined' && globalTodoCalendarSelected!=null && globalTodoCalendarSelected!='')
|
||
|
{
|
||
|
globalSettings.todocalendarselected.value=globalTodoCalendarSelected;
|
||
|
if((par[par.length-3]+'/'+par[par.length-2]+'/')==globalSettings.todocalendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if(inputResource.uid==globalSettings.todocalendarselected.value)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
else if (typeof globalSettings.todocalendarselected.value=='object' && inputResource.uid.match(globalSettings.todocalendarselected.value)!=null)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0)
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item:visible[data-id^="'+inputResource.uid+'"]').addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAV_item_selected:visible').length == 0 && $('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item[data-id]:visible').length > 0)
|
||
|
{
|
||
|
var ui_d = $('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item[data-id]:visible').eq(0).attr('data-id');
|
||
|
var part_u = ui_d.split('/');
|
||
|
globalSettings.todocalendarselected.value=part_u[part_u.length-3]+'/'+part_u[part_u.length-2]+'/';
|
||
|
$('#ResourceCalDAV'+todoString+'List').find('.resourceCalDAVTODO_item[data-id]:visible').eq(0).addClass('resourceCalDAV_item_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hideCalendarEvents(uid)
|
||
|
{
|
||
|
$('#SystemCalDavZAP').find('.event_item[data-res-id="'+uid+'"]').each(function(){
|
||
|
$(this).addClass('checkCalDAV_hide');
|
||
|
if(this.tagName.toLowerCase()=='tr')
|
||
|
{
|
||
|
if($(this).siblings().addBack().not('.checkCalDAV_hide').length>0)
|
||
|
$(this).parent().prev().find('tr').removeClass('checkCalDAV_hide');
|
||
|
else
|
||
|
$(this).parent().prev().find('tr').addClass('checkCalDAV_hide');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function hideCalendarTodos(uid)
|
||
|
{
|
||
|
$('#SystemCalDavTODO').find('.event_item[data-res-id="'+uid+'"]').addClass('checkCalDAV_hide');
|
||
|
}
|
||
|
|
||
|
function showCalendarEvents(uid)
|
||
|
{
|
||
|
$('#SystemCalDavZAP').find('.event_item[data-res-id="'+uid+'"]').each(function(){
|
||
|
$(this).removeClass('checkCalDAV_hide');
|
||
|
if(this.tagName.toLowerCase() == 'tr')
|
||
|
$(this).parent().prev().find('tr').removeClass('checkCalDAV_hide');
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function showCalendarTodos(uid)
|
||
|
{
|
||
|
$('#SystemCalDavTODO').find('.event_item[data-res-id="'+uid+'"]').removeClass('checkCalDAV_hide');
|
||
|
}
|
||
|
|
||
|
function hideEventCalendars()
|
||
|
{
|
||
|
for(var k=1;k<globalResourceCalDAVList.collections.length;k++)
|
||
|
{
|
||
|
var uid=globalResourceCalDAVList.collections[k].uid;
|
||
|
if(uid!=undefined && globalVisibleCalDAVCollections.indexOf(uid)==-1)
|
||
|
hideCalendarEvents(uid);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hideTodoCalendars()
|
||
|
{
|
||
|
for(var k=1;k<globalResourceCalDAVList.TodoCollections.length;k++)
|
||
|
{
|
||
|
var uid=globalResourceCalDAVList.TodoCollections[k].uid;
|
||
|
if(uid!=undefined && globalVisibleCalDAVTODOCollections.indexOf(uid)==-1)
|
||
|
hideCalendarTodos(uid);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function rerenderCalendar(scrollChanged)
|
||
|
{
|
||
|
if(scrollChanged)
|
||
|
$('#calendar').fullCalendar('render');
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideEventCalendars();
|
||
|
}
|
||
|
|
||
|
function rerenderTodo(scrollChanged)
|
||
|
{
|
||
|
if(scrollChanged)
|
||
|
$('#todoList').fullCalendar('render');
|
||
|
if(globalSettings.displayhiddenevents.value)
|
||
|
hideTodoCalendars();
|
||
|
}
|
||
|
|
||
|
function refetchCalendarEvents()
|
||
|
{
|
||
|
var beforeScroll = $('#main').width()-$('#calendar').width();
|
||
|
$('#calendar').fullCalendar('refetchEvents');
|
||
|
var afterScroll = $('#main').width()-$('#calendar').width();
|
||
|
rerenderCalendar(beforeScroll!=afterScroll);
|
||
|
globalCalDAVQs.cache();
|
||
|
}
|
||
|
|
||
|
function refetchTodoEvents()
|
||
|
{
|
||
|
var beforeScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
$('#todoList').fullCalendar('refetchEvents');
|
||
|
var afterScroll = $('#mainTODO').width()-$('#todoList').width();
|
||
|
rerenderTodo(beforeScroll!=afterScroll);
|
||
|
globalCalDAVTODOQs.cache();
|
||
|
}
|
||
|
|
||
|
function initCalDavDatepicker(element)
|
||
|
{
|
||
|
var datepickers = element.find('.date');
|
||
|
datepickers.focus(function(){
|
||
|
if(!$(this).hasClass('hasDatepicker'))
|
||
|
{
|
||
|
$(this).datepicker({
|
||
|
disabled: $(this).prop('readonly') || $(this).prop('disabled'),
|
||
|
showMonthAfterYear: false,
|
||
|
prevText: '',
|
||
|
nextText: '',
|
||
|
monthNamesShort: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
|
||
|
dateFormat: globalSettings.datepickerformat.value, defaultDate: null, minDate: '-120y', maxDate: '+120y', yearRange: 'c-120:c+120', showAnim: '',
|
||
|
firstDay: globalSettings.datepickerfirstdayofweek.value,
|
||
|
weekendDays: globalSettings.weekenddays.value,
|
||
|
beforeShow: function(input, inst) // set the datepicker value if the date is out of range (min/max)
|
||
|
{
|
||
|
inst.dpDiv.addClass('ui-datepicker-simple');
|
||
|
|
||
|
var valid=true;
|
||
|
try {var currentDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, $(this).val())}
|
||
|
catch (e){valid=false}
|
||
|
if(valid==true && currentDate!=null)
|
||
|
{
|
||
|
var minDateText=$(this).datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'minDate');
|
||
|
var maxDateText=$(this).datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'maxDate');
|
||
|
|
||
|
var minDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, minDateText);
|
||
|
var maxDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, maxDateText);
|
||
|
|
||
|
if(currentDate<minDate)
|
||
|
$(this).val(minDateText);
|
||
|
else if(currentDate>maxDate)
|
||
|
$(this).val(maxDateText);
|
||
|
}
|
||
|
|
||
|
// Timepicker hack (prevent IE to re-open the datepicker on date click+focus)
|
||
|
var index=$(this).attr("data-type");
|
||
|
var d=new Date();
|
||
|
if(globalTmpTimePickerHackTime[index]!=undefined && d.getTime()-globalTmpTimePickerHackTime[index]<200)
|
||
|
return false;
|
||
|
},
|
||
|
onClose: function(dateText, inst) // set the datepicker value if the date is out of range (min/max) and reset the value to proper format (for example 'yy-mm-dd' allows '2000-1-1' -> we need to reset the value to '2000-01-01')
|
||
|
{
|
||
|
var valid=true;
|
||
|
try {var currentDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, dateText)}
|
||
|
catch (e){valid=false}
|
||
|
|
||
|
if(valid==true && currentDate!=null)
|
||
|
{
|
||
|
var minDateText=$(this).datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'minDate');
|
||
|
var maxDateText=$(this).datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'maxDate');
|
||
|
|
||
|
var minDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, minDateText);
|
||
|
var maxDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, maxDateText);
|
||
|
|
||
|
if(currentDate<minDate)
|
||
|
$(this).val(minDateText);
|
||
|
else if(currentDate>maxDate)
|
||
|
$(this).val(maxDateText);
|
||
|
else
|
||
|
$(this).val($.datepicker.formatDate(globalSettings.datepickerformat.value, currentDate));
|
||
|
}
|
||
|
|
||
|
// Timepicker hack (prevent IE to re-open the datepicker on date click+focus)
|
||
|
var index=$(this).attr("data-type");
|
||
|
var d=new Date();
|
||
|
globalTmpTimePickerHackTime[index]=d.getTime();
|
||
|
$(this).focus();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$(this).mousedown(function(){
|
||
|
if($(this).datepicker('widget').css('display')=='none')
|
||
|
$(this).datepicker('show');
|
||
|
else
|
||
|
$(this).datepicker('hide');
|
||
|
});
|
||
|
|
||
|
$(this).on('keydown', function(event){
|
||
|
// show datepicker on keydown (up/down/left/right) but only if it not causes cursor position move
|
||
|
if(this.selectionStart!=undefined && this.selectionStart!=-1)
|
||
|
if(((event.which==38 || event.which==37) && this.selectionStart==0) || ((event.which==40 || event.which==39) && this.selectionStart==$(this).val().length))
|
||
|
{
|
||
|
if($(this).datepicker('widget').css('display')=='none')
|
||
|
$(this).datepicker('show');
|
||
|
else
|
||
|
$(this).datepicker('hide');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$(this).blur(function(event){
|
||
|
// handle onblur event because datepicker can be already closed
|
||
|
// note: because onblur is called more than once we can handle it only if there is a value change!
|
||
|
var valid=true;
|
||
|
try {var currentDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, $(this).val())}
|
||
|
catch (e) {valid=false}
|
||
|
if($(this).val()=='')
|
||
|
valid=false;
|
||
|
|
||
|
if(valid==true && $(this).val()!=$.datepicker.formatDate(globalSettings.datepickerformat.value, currentDate))
|
||
|
{
|
||
|
var minDateText=$(this).datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'minDate');
|
||
|
var maxDateText=$(this).datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'maxDate');
|
||
|
|
||
|
var minDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, minDateText);
|
||
|
var maxDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, maxDateText);
|
||
|
|
||
|
if(currentDate<minDate)
|
||
|
$(this).val(minDateText);
|
||
|
else if(currentDate>maxDate)
|
||
|
$(this).val(maxDateText);
|
||
|
else
|
||
|
$(this).val($.datepicker.formatDate(globalSettings.datepickerformat.value, currentDate));
|
||
|
}
|
||
|
|
||
|
if($(this).attr('id')=='date_from')
|
||
|
{
|
||
|
var tmptime = $('#time_from').val();
|
||
|
var validD=true, prevDate = '';
|
||
|
if(globalPrevDate!='')
|
||
|
prevDate = new Date(globalPrevDate.getTime());
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_from').val())}
|
||
|
catch (e){validD=false}
|
||
|
|
||
|
if($('#date_from').val()!='' && tmptime.match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateFrom=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_from').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateFrom, 'yyyy-MM-dd');
|
||
|
var aDate=new Date(Date.parse("01/02/1990, "+$('#time_from').val()));
|
||
|
var time_from=$.fullCalendar.formatDate(aDate, 'HH:mm:ss');
|
||
|
|
||
|
var checkD=$.fullCalendar.parseDate(datetime_to+'T'+time_from);
|
||
|
globalPrevDate = new Date(checkD.getTime());
|
||
|
}
|
||
|
else
|
||
|
globalPrevDate='';
|
||
|
if($(this).attr('id')=='date_from' && prevDate!='' && globalPrevDate!='')
|
||
|
{
|
||
|
globalPrevDate.setSeconds(0);
|
||
|
globalPrevDate.setMilliseconds(0);
|
||
|
prevDate.setSeconds(0);
|
||
|
prevDate.setMilliseconds(0);
|
||
|
var diffDate = globalPrevDate.getTime() - prevDate.getTime();
|
||
|
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_to').val())}
|
||
|
catch (e){validD=false}
|
||
|
if($('#date_to').val()!='' && $('#time_to').val().match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateTo=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_to').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateTo, 'yyyy-MM-dd');
|
||
|
var aDateT=new Date(Date.parse("01/02/1990, "+$('#time_to').val()));
|
||
|
var time_to=$.fullCalendar.formatDate(aDateT, 'HH:mm:ss');
|
||
|
var checkDT=$.fullCalendar.parseDate(datetime_to+'T'+time_to);
|
||
|
var toDate = new Date(checkDT.getTime() + diffDate);
|
||
|
var formattedDate_to=$.datepicker.formatDate(globalSettings.datepickerformat.value, toDate);
|
||
|
$('#date_to').val(formattedDate_to);
|
||
|
$('#time_to').val($.fullCalendar.formatDate(toDate, (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm')));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if($('#todo_type').val()=='both' && $(this).attr('id')=='date_fromTODO')
|
||
|
{
|
||
|
var tmptime = $('#time_fromTODO').val();
|
||
|
var validD=true, prevDate = '';
|
||
|
if(globalPrevDate!='')
|
||
|
prevDate = new Date(globalPrevDate.getTime());
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val())}
|
||
|
catch (e){validD=false}
|
||
|
if($('#date_fromTODO').val()!='' && tmptime.match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateFrom=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateFrom, 'yyyy-MM-dd');
|
||
|
var aDate=new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val()));
|
||
|
var time_from=$.fullCalendar.formatDate(aDate, 'HH:mm:ss');
|
||
|
|
||
|
var checkD=$.fullCalendar.parseDate(datetime_to+'T'+time_from);
|
||
|
globalPrevDate = new Date(checkD.getTime());
|
||
|
}
|
||
|
else
|
||
|
globalPrevDate='';
|
||
|
|
||
|
if($(this).attr('id')=='date_fromTODO' && prevDate!='' && globalPrevDate!='')
|
||
|
{
|
||
|
globalPrevDate.setSeconds(0);
|
||
|
globalPrevDate.setMilliseconds(0);
|
||
|
prevDate.setSeconds(0);
|
||
|
prevDate.setMilliseconds(0);
|
||
|
var diffDate = globalPrevDate.getTime() - prevDate.getTime();
|
||
|
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').val())}
|
||
|
catch (e){validD=false}
|
||
|
if($('#date_toTODO').val()!='' && $('#time_toTODO').val().match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateTo=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateTo, 'yyyy-MM-dd');
|
||
|
var aDateT=new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val()));
|
||
|
var time_to=$.fullCalendar.formatDate(aDateT, 'HH:mm:ss');
|
||
|
var checkDT=$.fullCalendar.parseDate(datetime_to+'T'+time_to);
|
||
|
var toDate = new Date(checkDT.getTime() + diffDate);
|
||
|
var formattedDate_to=$.datepicker.formatDate(globalSettings.datepickerformat.value, toDate);
|
||
|
$('#date_toTODO').val(formattedDate_to);
|
||
|
$('#time_toTODO').val($.fullCalendar.formatDate(toDate, (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm')));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$(this).bind('keyup change', function(){
|
||
|
if(!$(this).prop('readonly') && !$(this).prop('disabled'))
|
||
|
{
|
||
|
var valid=false;
|
||
|
|
||
|
if($(this).val()!='')
|
||
|
{
|
||
|
valid=true;
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $(this).val())}
|
||
|
catch (e){valid=false}
|
||
|
}
|
||
|
|
||
|
if($(this).attr('id')=='completedOnDate')
|
||
|
{
|
||
|
if($(this).val()=='')
|
||
|
{
|
||
|
if($('#completedOnTime').val()=='')
|
||
|
{
|
||
|
valid=true;
|
||
|
$('#completedOnTime').parent().find('img').css('display', 'none');
|
||
|
}
|
||
|
else
|
||
|
valid=false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(valid)
|
||
|
{
|
||
|
if($('#completedOnTime').val()=='')
|
||
|
$('#completedOnTime').parent().find('img').css('display', 'inline');
|
||
|
else
|
||
|
$('#completedOnTime').parent().find('img').css('display', 'none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(valid)
|
||
|
{
|
||
|
$(this).parent().find('img').css('display','none');
|
||
|
if($(this).attr('id')=='date_from' && $('#repeat_end_date').is(':visible'))
|
||
|
$('#repeat_end_date').keyup();
|
||
|
if(($(this).attr('id')=='date_fromTODO' || $(this).attr('id')=='date_toTODO') && $('#repeat_end_date_TODO').is(':visible'))
|
||
|
$('#repeat_end_date_TODO').keyup();
|
||
|
}
|
||
|
else
|
||
|
$(this).parent().find('img').css('display','inline');
|
||
|
|
||
|
if($(this).attr('id')=='repeat_end_date')
|
||
|
{
|
||
|
if(valid && $('#date_from').val()!='')
|
||
|
{
|
||
|
$(this).parent().find('img').css('display','inline');
|
||
|
var today=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_from').val());
|
||
|
if(today!=null)
|
||
|
{
|
||
|
var repeatEnd = $.datepicker.parseDate(globalSettings.datepickerformat.value, $(this).val());
|
||
|
if(repeatEnd!=null)
|
||
|
if(repeatEnd>=today)
|
||
|
$(this).parent().find('img').css('display','none');
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if(valid && $(this).attr('id')=='repeat_end_date_TODO')
|
||
|
{
|
||
|
if($('#date_fromTODO').is(':visible') && $('#date_fromTODO').val()!='')
|
||
|
{
|
||
|
$(this).parent().find('img').css('display','inline');
|
||
|
var today=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val());
|
||
|
if(today!=null)
|
||
|
{
|
||
|
var repeatEnd = $.datepicker.parseDate(globalSettings.datepickerformat.value, $(this).val());
|
||
|
if(repeatEnd!=null)
|
||
|
if(repeatEnd>=today)
|
||
|
$(this).parent().find('img').css('display','none');
|
||
|
|
||
|
}
|
||
|
}
|
||
|
else if($('#date_toTODO').is(':visible') && $('#date_toTODO').val()!='')
|
||
|
{
|
||
|
$(this).parent().find('img').css('display','inline');
|
||
|
var today=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').val());
|
||
|
if(today!=null)
|
||
|
{
|
||
|
var repeatEnd = $.datepicker.parseDate(globalSettings.datepickerformat.value, $(this).val());
|
||
|
if(repeatEnd!=null)
|
||
|
if(repeatEnd>=today)
|
||
|
$(this).parent().find('img').css('display','none');
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// show the datepicker after the initialization
|
||
|
$(this).datepicker('show');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function initCalDavTimepicker(element)
|
||
|
{
|
||
|
var timepickers = element.find('.time');
|
||
|
|
||
|
timepickers.focus(function(){
|
||
|
$(this).autocomplete({
|
||
|
create: function( event, ui ){
|
||
|
$(this).data("ui-autocomplete").menu.element.addClass('ui-autocomplete-caldav');
|
||
|
},
|
||
|
close: function( event, ui ){
|
||
|
$(this).keyup();
|
||
|
},
|
||
|
source: function(request, response){
|
||
|
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), 'i');
|
||
|
response($.grep(timelist, function(value){
|
||
|
value = value.label || value.value || value;
|
||
|
return matcher.test(value) || matcher.test(value.multiReplace(globalSearchTransformAlphabet));
|
||
|
}));
|
||
|
},
|
||
|
minLength: 0
|
||
|
});
|
||
|
});
|
||
|
|
||
|
timepickers.blur(function(){
|
||
|
var tmptime=$.trim($(this).val());
|
||
|
if(tmptime.match(globalTimePre)!=null)
|
||
|
{
|
||
|
if(tmptime.indexOf(':')==-1)
|
||
|
{
|
||
|
if(globalSettings.ampmformat.value)
|
||
|
{
|
||
|
if(tmptime.indexOf(' ')==-1)
|
||
|
tmptime=tmptime.substring(0,2)+':'+tmptime.substring(2,4)+' '+tmptime.substring(4,6);
|
||
|
else tmptime=tmptime.substring(0,2)+':'+tmptime.substring(2,4)+' '+tmptime.substring(5,7);
|
||
|
}
|
||
|
else tmptime=tmptime.substring(0,2)+':'+tmptime.substring(2,4);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(globalSettings.ampmformat.value)
|
||
|
{
|
||
|
var partA=tmptime.split(':')[0];
|
||
|
partA=parseInt(partA,10);
|
||
|
var partB=tmptime.split(':')[1].substring(0,tmptime.split(':')[1].length-2);
|
||
|
partB=parseInt(partB,10);
|
||
|
tmptime=(partA < 10 ? '0' : '')+partA+':'+(partB < 10 ? '0' : '')+partB+' '+tmptime.split(':')[1].substring(tmptime.split(':')[1].length-2, tmptime.split(':')[1].length);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var partA=tmptime.split(':')[0];
|
||
|
partA=parseInt(partA,10);
|
||
|
var partB=tmptime.split(':')[1];
|
||
|
partB=parseInt(partB,10);
|
||
|
tmptime=(partA<10 ? '0' : '')+partA+':'+(partB<10 ? '0' : '')+partB;
|
||
|
}
|
||
|
}
|
||
|
if(tmptime.length==7)
|
||
|
tmptime=tmptime.substring(0,5)+' '+tmptime.substring(5,7);
|
||
|
else if(tmptime.length==6 && tmptime.indexOf(':')!=-1)
|
||
|
tmptime=tmptime.substring(0,2)+':'+tmptime.substring(2,4)+' '+tmptime.substring(4,6);
|
||
|
|
||
|
$(this).val(tmptime.toUpperCase());
|
||
|
}
|
||
|
|
||
|
if($(this).attr('id')=='time_from')
|
||
|
{
|
||
|
var validD=true, prevDate = '';
|
||
|
if(globalPrevDate!='')
|
||
|
prevDate = new Date(globalPrevDate.getTime());
|
||
|
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_from').val())}
|
||
|
catch (e){validD=false}
|
||
|
if(tmptime.match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateFrom=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_from').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateFrom, 'yyyy-MM-dd');
|
||
|
var aDate=new Date(Date.parse("01/02/1990, "+$('#time_from').val()));
|
||
|
var time_from=$.fullCalendar.formatDate(aDate, 'HH:mm:ss');
|
||
|
|
||
|
var checkD=$.fullCalendar.parseDate(datetime_to+'T'+time_from);
|
||
|
globalPrevDate = new Date(checkD.getTime());
|
||
|
}
|
||
|
else
|
||
|
globalPrevDate='';
|
||
|
if($(this).attr('id')=='time_from' && prevDate!='' && globalPrevDate!='')
|
||
|
{
|
||
|
globalPrevDate.setSeconds(0);
|
||
|
globalPrevDate.setMilliseconds(0);
|
||
|
prevDate.setSeconds(0);
|
||
|
prevDate.setMilliseconds(0);
|
||
|
var diffDate = globalPrevDate.getTime() - prevDate.getTime();
|
||
|
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_to').val())}
|
||
|
catch (e){validD=false}
|
||
|
if($('#date_to').val()!='' && $('#time_to').val().match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateTo=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_to').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateTo, 'yyyy-MM-dd');
|
||
|
var aDateT=new Date(Date.parse("01/02/1990, "+$('#time_to').val()));
|
||
|
var time_to=$.fullCalendar.formatDate(aDateT, 'HH:mm:ss');
|
||
|
var checkDT=$.fullCalendar.parseDate(datetime_to+'T'+time_to);
|
||
|
var toDate = new Date(checkDT.getTime() + diffDate);
|
||
|
var formattedDate_to=$.datepicker.formatDate(globalSettings.datepickerformat.value, toDate);
|
||
|
$('#date_to').val(formattedDate_to);
|
||
|
$('#time_to').val($.fullCalendar.formatDate(toDate, (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm')));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else if($('#todo_type').val()=='both' && $(this).attr('id')=='time_fromTODO')
|
||
|
{
|
||
|
var validD=true, prevDate = '';
|
||
|
if(globalPrevDate!='')
|
||
|
prevDate = new Date(globalPrevDate.getTime());
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val())}
|
||
|
catch (e){validD=false}
|
||
|
if(tmptime.match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateFrom=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateFrom, 'yyyy-MM-dd');
|
||
|
var aDate=new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val()));
|
||
|
var time_from=$.fullCalendar.formatDate(aDate, 'HH:mm:ss');
|
||
|
|
||
|
var checkD=$.fullCalendar.parseDate(datetime_to+'T'+time_from);
|
||
|
globalPrevDate = new Date(checkD.getTime());
|
||
|
}
|
||
|
else
|
||
|
globalPrevDate='';
|
||
|
|
||
|
if($(this).attr('id')=='time_fromTODO' && prevDate!='' && globalPrevDate!='')
|
||
|
{
|
||
|
globalPrevDate.setSeconds(0);
|
||
|
globalPrevDate.setMilliseconds(0);
|
||
|
prevDate.setSeconds(0);
|
||
|
prevDate.setMilliseconds(0);
|
||
|
var diffDate = globalPrevDate.getTime() - prevDate.getTime();
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').val())}
|
||
|
catch (e){validD=false}
|
||
|
if($('#date_toTODO').val()!='' && $('#time_toTODO').val().match(globalTimePre)!=null && validD)
|
||
|
{
|
||
|
var dateTo=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').val());
|
||
|
var datetime_to=$.fullCalendar.formatDate(dateTo, 'yyyy-MM-dd');
|
||
|
var aDateT=new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val()));
|
||
|
var time_to=$.fullCalendar.formatDate(aDateT, 'HH:mm:ss');
|
||
|
var checkDT=$.fullCalendar.parseDate(datetime_to+'T'+time_to);
|
||
|
var toDate = new Date(checkDT.getTime() + diffDate);
|
||
|
var formattedDate_to=$.datepicker.formatDate(globalSettings.datepickerformat.value, toDate);
|
||
|
$('#date_toTODO').val(formattedDate_to);
|
||
|
$('#time_toTODO').val($.fullCalendar.formatDate(toDate, (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm')));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
timepickers.bind('keyup change', function(){
|
||
|
var tmptime=$.trim($(this).val());
|
||
|
/*if(tmptime.match(globalTimePre)!=null)
|
||
|
{
|
||
|
var formattedTime=tmptime.toLowerCase().replace(RegExp(' ','g'),''); // lower case string without spaces
|
||
|
if(formattedTime.indexOf(':')==-1)
|
||
|
var result_time=(parseInt(formattedTime.substr(0,2),10)+(formattedTime.substr(-2)=='pm' ? 12 : 0)).pad(2)+formattedTime.substr(2,2);
|
||
|
else
|
||
|
var result_time=(parseInt(formattedTime.split(':')[0],10)+(formattedTime.substr(-2)=='pm' ? 12 : 0)).pad(2)+parseInt(formattedTime.split(':')[1],10).pad(2);
|
||
|
$(this).parent().find('img').css('display', 'none');
|
||
|
}
|
||
|
else $(this).parent().find('img').css('display', 'inline');*/
|
||
|
if($(this).attr('id')!='completedOnTime')
|
||
|
{
|
||
|
if(tmptime.match(globalTimePre)==null)
|
||
|
$(this).parent().find('img').css('display', 'inline');
|
||
|
else
|
||
|
$(this).parent().find('img').css('display', 'none');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if($(this).val()=='')
|
||
|
{
|
||
|
if($('#completedOnDate').val()=='')
|
||
|
{
|
||
|
$(this).parent().find('img').css('display', 'none');
|
||
|
$('#completedOnDate').parent().find('img').css('display', 'none');
|
||
|
}
|
||
|
else
|
||
|
$(this).parent().find('img').css('display', 'inline');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(tmptime.match(globalTimePre)==null)
|
||
|
$(this).parent().find('img').css('display', 'inline');
|
||
|
else
|
||
|
{
|
||
|
$(this).parent().find('img').css('display', 'none');
|
||
|
if($('#completedOnDate').val()=='')
|
||
|
$('#completedOnDate').parent().find('img').css('display', 'inline');
|
||
|
else
|
||
|
$('#completedOnDate').parent().find('img').css('display', 'none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
timepickers.dblclick(function(){
|
||
|
if($(this).val()!='')
|
||
|
return false;
|
||
|
|
||
|
var now=new Date();
|
||
|
var todoString='';
|
||
|
if($(this).attr('id')!=undefined)
|
||
|
if($(this).attr('id').indexOf('TODO')!=-1)
|
||
|
todoString='TODO';
|
||
|
if($(this).attr('id')=='time_to' || (($(this).attr('id')=='time_toTODO')&&($('.dateTrFromTODO').css('display')!='none')))
|
||
|
{
|
||
|
var testString=$(this).val();
|
||
|
if(($('#time_from'+todoString).parent().find('img').css('display')=='none') && ($('#date_from'+todoString).parent().find('img').css('display')=='none')
|
||
|
&& ($('#date_to'+todoString).parent().find('img').css('display')=='none'))
|
||
|
{
|
||
|
var inputDate=$.datepicker.parseDate(globalSettings.datepickerformat.value,$('#date_from'+todoString).val());
|
||
|
var formatString=inputDate.getFullYear()+'/'+(inputDate.getMonth()<10 ? '0' : '')+(inputDate.getMonth()+1)+'/'+(inputDate.getDate()<10 ? '0' : '')+inputDate.getDate();
|
||
|
|
||
|
var timeDate=new Date(Date.parse(formatString+", "+$('#time_from'+todoString).val()));
|
||
|
now=new Date(timeDate.getTime());
|
||
|
|
||
|
var inputDate2=$.datepicker.parseDate(globalSettings.datepickerformat.value,$('#date_to'+todoString).val())
|
||
|
var formatString2=inputDate2.getFullYear()+'/'+(inputDate2.getMonth()<10 ? '0' : '')+(inputDate2.getMonth()+1)+'/'+(inputDate2.getDate()<10 ? '0' : '')+inputDate2.getDate();
|
||
|
|
||
|
var timeDateFrom=new Date(Date.parse(formatString2+", "+$('#time_from'+todoString).val()));
|
||
|
if(formatString==formatString2)
|
||
|
{
|
||
|
now.setHours(now.getHours()+1);
|
||
|
var newTestValue = new Date(Date.parse(formatString2+", "+$.fullCalendar.formatDate(now, (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm'))));
|
||
|
if(newTestValue < timeDateFrom)
|
||
|
{
|
||
|
newTestValue.setHours(23);
|
||
|
newTestValue.setMinutes(59);
|
||
|
now = new Date(newTestValue.getTime());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if($(this).attr('id')=='time_from' || $(this).attr('id')=='time_fromTODO')
|
||
|
{
|
||
|
if(globalPrevDate!='')
|
||
|
{
|
||
|
globalPrevDate.setHours(now.getHours());
|
||
|
globalPrevDate.setMinutes(now.getMinutes());
|
||
|
}
|
||
|
}
|
||
|
$(this).val($.fullCalendar.formatDate(now, (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm')));
|
||
|
$(this).keyup();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function duplicateEvent(todoSel)
|
||
|
{
|
||
|
if(todoSel=='TODO')
|
||
|
{
|
||
|
startEditModeTodo();
|
||
|
$('#showTODO').val('');
|
||
|
$('#uidTODO').val('');
|
||
|
$('#vcalendarHashTODO').val('');
|
||
|
$('#vcalendarUIDTODO').val('');
|
||
|
$('#etagTODO').val('');
|
||
|
$('#todoInEdit').val('true');
|
||
|
$('#deleteTODO').hide();
|
||
|
$('#resetTODO').hide();
|
||
|
$('#editTODO').hide();
|
||
|
$('#duplicateTODO').hide();
|
||
|
$('#editOptionsButtonTODO').hide();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
startEditModeEvent();
|
||
|
$('#uid').val('');
|
||
|
$('#show').val('');
|
||
|
$('#etag').val('');
|
||
|
$('#vcalendarHash').val('');
|
||
|
$('#vcalendarUID').val('');
|
||
|
$('#editButton').hide();
|
||
|
$('#duplicateButton').hide();
|
||
|
$('#editOptionsButton').hide();
|
||
|
$('#resetButton').hide();
|
||
|
$('#deleteButton').hide();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function showNewEvent(todoSel)
|
||
|
{
|
||
|
if($('#ResourceCalDAV'+todoSel+'List .resourceCalDAV'+todoSel+'_item:visible').not('.resourceCalDAV_item_ro').length==0)
|
||
|
return false;
|
||
|
|
||
|
$('#timezonePicker'+todoSel).prop('disabled', true);
|
||
|
if(todoSel=='TODO')
|
||
|
{
|
||
|
$('#TodoDisabler').fadeIn(globalEditorFadeAnimation);
|
||
|
showTodoForm(null, 'new');
|
||
|
$('#nameTODO').focus();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$('#show').val('');
|
||
|
$('#CAEvent').hide();
|
||
|
|
||
|
$('#EventDisabler').fadeIn(globalEditorFadeAnimation, function(){
|
||
|
showEventForm(new Date(), true, null, null, 'new', '');
|
||
|
$('#name').focus();
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function showEventPopup(e, event)
|
||
|
{
|
||
|
var from;
|
||
|
var to;
|
||
|
var status;
|
||
|
var avail;
|
||
|
var classType;
|
||
|
var priority;
|
||
|
var resource = globalResourceCalDAVList.getCollectionByUID(event.res_id);
|
||
|
|
||
|
if(event.allDay)
|
||
|
{
|
||
|
from = $.fullCalendar.formatDate(event.realStart, dateFormatJqToFc(globalSettings.datepickerformat.value));
|
||
|
to = $.fullCalendar.formatDate(event.realEnd, dateFormatJqToFc(globalSettings.datepickerformat.value));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
from = $.fullCalendar.formatDate(event.realStart, dateFormatJqToFc(globalSettings.datepickerformat.value) + '\' \'' + (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm'));
|
||
|
to = $.fullCalendar.formatDate(event.realEnd, dateFormatJqToFc(globalSettings.datepickerformat.value) + '\' \'' + (globalSettings.ampmformat.value ? 'hh:mm TT' : 'HH:mm'));
|
||
|
}
|
||
|
|
||
|
switch(event.status){
|
||
|
case 'NONE':
|
||
|
status = localization[globalInterfaceLanguage].txtStatusNone;
|
||
|
break;
|
||
|
case 'TENTATIVE':
|
||
|
status = localization[globalInterfaceLanguage].txtStatusTentative;
|
||
|
break;
|
||
|
case 'CONFIRMED':
|
||
|
status = localization[globalInterfaceLanguage].txtStatusConfirmed;
|
||
|
break;
|
||
|
case 'CANCELLED':
|
||
|
status = localization[globalInterfaceLanguage].txtStatusCancelled;
|
||
|
break;
|
||
|
default:
|
||
|
status = localization[globalInterfaceLanguage].txtStatusNone;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
switch(event.avail){
|
||
|
case 'OPAQUE':
|
||
|
avail = localization[globalInterfaceLanguage].eventAvailabilityBusy;
|
||
|
break;
|
||
|
case 'TRANSPARENT':
|
||
|
avail = localization[globalInterfaceLanguage].eventAvailabilityFree;
|
||
|
break;
|
||
|
default:
|
||
|
avail = localization[globalInterfaceLanguage].eventAvailabilityFree;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
switch(event.classType){
|
||
|
case 'PUBLIC':
|
||
|
classType = localization[globalInterfaceLanguage].eventTypePublic;
|
||
|
break;
|
||
|
case 'CONFIDENTIAL':
|
||
|
classType = localization[globalInterfaceLanguage].eventTypeConfidential;
|
||
|
break;
|
||
|
case 'PRIVATE':
|
||
|
classType = localization[globalInterfaceLanguage].eventTypePrivate;
|
||
|
break;
|
||
|
default:
|
||
|
classType = localization[globalInterfaceLanguage].eventTypePublic;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
var prior = parseInt(event.priority,10);
|
||
|
if(prior==5)
|
||
|
priority = localization[globalInterfaceLanguage].txtPriorityMedium;
|
||
|
else if(prior>5 && prior<10)
|
||
|
priority = localization[globalInterfaceLanguage].txtPriorityLow;
|
||
|
else if(prior<5 && prior>0)
|
||
|
priority = localization[globalInterfaceLanguage].txtPriorityHigh;
|
||
|
else
|
||
|
priority = localization[globalInterfaceLanguage].txtPriorityNone;
|
||
|
|
||
|
// prevent displaying of extremely long texts in the event preview box
|
||
|
var maxPreviewTextLength=512;
|
||
|
|
||
|
if(event.title=='')
|
||
|
$('#CalDavZAPPopup').find('[data-type="name"]').parent().css('display','none');
|
||
|
else
|
||
|
$('#CalDavZAPPopup').find('[data-type="name"]').text((event.title.length>maxPreviewTextLength ? event.title.substr(0, maxPreviewTextLength-4)+' ...' : event.title)).parent().css('display','');
|
||
|
if(event.location=='')
|
||
|
$('#CalDavZAPPopup').find('[data-type="location"]').parent().css('display','none');
|
||
|
else
|
||
|
$('#CalDavZAPPopup').find('[data-type="location"]').text(event.location).parent().css('display','');
|
||
|
if(event.hrefUrl=='')
|
||
|
$('#CalDavZAPPopup').find('[data-type="url"]').parent().css('display','none');
|
||
|
else
|
||
|
$('#CalDavZAPPopup').find('[data-type="url"]').text(event.hrefUrl).parent().css('display','');
|
||
|
if(event.note=='')
|
||
|
$('#CalDavZAPPopup').find('[data-type="note"]').parent().css('display','none');
|
||
|
else
|
||
|
$('#CalDavZAPPopup').find('[data-type="note"]').text((event.note.length>maxPreviewTextLength ? event.note.substr(0, maxPreviewTextLength-4)+' ...' : event.note)).parent().css('display','');
|
||
|
|
||
|
|
||
|
|
||
|
$('#CalDavZAPPopup').find('[data-type="from"]').html(from);
|
||
|
$('#CalDavZAPPopup').find('[data-type="to"]').html(to);
|
||
|
$('#CalDavZAPPopup').find('[data-type="status"]').text(status);
|
||
|
$('#CalDavZAPPopup').find('[data-type="avail"]').text(avail);
|
||
|
$('#CalDavZAPPopup').find('[data-type="type"]').text(classType);
|
||
|
$('#CalDavZAPPopup').find('[data-type="priority"]').text(priority);
|
||
|
$('#CalDavZAPPopup').find('[data-type="calendar"]').text(resource.displayvalue);
|
||
|
|
||
|
$('#CalDavZAPPopup').css({'opacity':0,'display':'block','top':0,'left':0});
|
||
|
$('#CalDavZAPPopupColor').css('height',0);
|
||
|
$('#CalDavZAPPopup').css('top', Math.max(e.pageY-$('#CalDavZAPPopup').outerHeight()-10, 30));
|
||
|
$('#CalDavZAPPopup').css('left', Math.max(Math.min(e.pageX, $(window).width()-$('#CalDavZAPPopup').outerWidth()-50)+20, 30));
|
||
|
$('#CalDavZAPPopupColor').css({'background-color':resource.ecolor, 'height':$('#CalDavZAPPopup').height()});
|
||
|
$('#CalDavZAPPopup').animate({'opacity':1}, 100);
|
||
|
}
|
||
|
|
||
|
function moveEventPopup(e)
|
||
|
{
|
||
|
$('#CalDavZAPPopup').css('top', Math.max(e.pageY-$('#CalDavZAPPopup').outerHeight()-10, 30));
|
||
|
$('#CalDavZAPPopup').css('left', Math.max(Math.min(e.pageX, $(window).width()-$('#CalDavZAPPopup').outerWidth()-50)+20, 30));
|
||
|
}
|
||
|
|
||
|
function hideEventPopup()
|
||
|
{
|
||
|
$('#CalDavZAPPopup').css('display', 'none');
|
||
|
}
|
||
|
|
||
|
function loadAdditionalCardDAVCollections()
|
||
|
{
|
||
|
if(globalSettingsSaving!='')
|
||
|
return false;
|
||
|
globalSettingsSaving='addressbook';
|
||
|
|
||
|
var inSettings = $.extend({},globalSettings);
|
||
|
var rex = new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)');
|
||
|
var key='loadedaddressbookcollections';
|
||
|
|
||
|
inSettings.loadedaddressbookcollections = {value : new Array(), locked: globalSettings[key].locked};
|
||
|
$('#ResourceCardDAVList').find('.unloadCheck').each(function(cin,cel)
|
||
|
{
|
||
|
if($(cel).prop('checked'))
|
||
|
{
|
||
|
var uidParts=$(cel).attr('data-id').match(rex);
|
||
|
inSettings.loadedaddressbookcollections.value.splice(inSettings.loadedaddressbookcollections.value.length , 0, uidParts[1]+uidParts[3]);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if($(inSettings[key]).not(globalSettings[key].value).length > 0 || $(globalSettings[key].value).not(inSettings[key]).length > 0)
|
||
|
{
|
||
|
$('#AddressbookOverlay').removeClass('loader_hidden');
|
||
|
$('#ResourceCardDAVList').find('input[type="checkbox"]').prop('disabled',true);
|
||
|
var setC=0;
|
||
|
for(var i=0;i<globalAccountSettings.length;i++)
|
||
|
if(globalAccountSettings[i].href.indexOf(globalLoginUsername)!=-1 && globalAccountSettings[i].settingsAccount)
|
||
|
{
|
||
|
setC++;
|
||
|
netSaveSettings(globalAccountSettings[i], inSettings, false, true);
|
||
|
break;
|
||
|
}
|
||
|
if(setC==0)
|
||
|
cancelUnloadedCardDAVCollections();
|
||
|
}
|
||
|
else
|
||
|
hideUnloadedCardDAVCollections(true);
|
||
|
}
|
||
|
|
||
|
function showUnloadedCardDAVCollections()
|
||
|
{
|
||
|
if(globalAddressbookCollectionsLoading)
|
||
|
return false;
|
||
|
globalAddressbookCollectionsLoading=true;
|
||
|
if(isAvaible('CalDavZAP'))
|
||
|
{
|
||
|
$('#showUnloadedCalendars').css('display','none');
|
||
|
$('#showUnloadedCalendarsTODO').css('display','none');
|
||
|
}
|
||
|
$('#ResourceCardDAVList').find('input[type="checkbox"]').prop('disabled',true);
|
||
|
$('#AddressbookOverlay').children('.loaderInfo').text(localization[globalInterfaceLanguage].loadingCollectionList).parent().fadeIn(300);
|
||
|
var resList=$('#ResourceCardDAVList');
|
||
|
var resHeader='.resourceCardDAV_header';
|
||
|
var resItem='.resourceCardDAV';
|
||
|
|
||
|
$('#ResourceCardDAVList').find('input[type="checkbox"]').prop('disabled',false);
|
||
|
$('#AddressbookOverlay').children('.loaderInfo').text('').parent().addClass('loader_hidden');
|
||
|
resList.find('.resourceCardDAV_selected').removeClass('resourceCardDAV_selected');
|
||
|
resList.find('input').css('display','none');
|
||
|
// header display
|
||
|
resList.children('.resourceCardDAV_header').each(function(){
|
||
|
if($(this).css('display')=='none')
|
||
|
$(this).addClass('unloaded').css('display','');
|
||
|
var headerClickElm = $('<input type="checkbox" class="unloadCheckHeader" style="position:absolute;top:3px;right:0px;margin-right:6px;"/>');
|
||
|
headerClickElm.change(function(){
|
||
|
loadResourceChBoxClick(this, '#ResourceCardDAVList', resHeader, resItem, '.resourceCardDAV_item');
|
||
|
});
|
||
|
$(this).addClass('load_mode').append(headerClickElm);
|
||
|
});
|
||
|
// carddav_item display
|
||
|
resList.find('.resourceCardDAV').each(function(){
|
||
|
if(typeof $(this).attr('data-id') != 'undefined')
|
||
|
{
|
||
|
var newInputElm = $('<input type="checkbox" class="unloadCheck" data-id="'+$(this).attr('data-id')+'" style="position:absolute;top:8px;right:0px;margin-right:6px;"/>');
|
||
|
newInputElm.change(function(){
|
||
|
loadCollectionChBoxClick(this, '#ResourceCardDAVList', resHeader, resItem, '.resourceCardDAV_item');
|
||
|
});
|
||
|
$(this).siblings('.contact_group').addBack().addClass('load_mode');
|
||
|
$(this).append(newInputElm);
|
||
|
if($(this).parent().css('display')=='none')
|
||
|
$(this).addClass('unloaded');
|
||
|
else
|
||
|
newInputElm.prop('checked',true);
|
||
|
newInputElm.trigger('change');
|
||
|
}
|
||
|
});
|
||
|
$('#showUnloadedAddressbooks').css('display','none');
|
||
|
$('.resourcesCardDAV_h').text(localization[globalInterfaceLanguage].txtEnabledAddressbooks);
|
||
|
var origH = resList.find('.resourceCardDAV_header.unloaded').eq(0).css('height');
|
||
|
var origC = resList.find('.resourceCardDAV.unloaded').parent().eq(0).css('height');
|
||
|
resList.find('.resourceCardDAV_header.unloaded').css({'height':0,'display':''}).animate({height:origH},300);
|
||
|
resList.find('.resourceCardDAV.unloaded').parent().css({'height':0,'display':''}).animate({height:origC},300);
|
||
|
resList.animate({'top':49},300);
|
||
|
}
|
||
|
|
||
|
function cancelUnloadedCardDAVCollections()
|
||
|
{
|
||
|
$('#ResourceCardDAVList').children('.resourceCardDAV_item').children('.resourceCardDAV ').each(function(){
|
||
|
var uidParts=$(this).attr('data-id').match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)'));
|
||
|
var checkHref=uidParts[1]+uidParts[3];
|
||
|
var isLoaded=false;
|
||
|
if(typeof globalCrossServerSettingsURL!='undefined'&&globalCrossServerSettingsURL!=null&globalCrossServerSettingsURL)
|
||
|
{
|
||
|
var uidParts=$(this).attr('data-id').match(RegExp('/([^/]+/[^/]+/)$'));
|
||
|
var tmpParts = uidParts[1].match('^(.*/)([^/]+)/$');
|
||
|
var checkHref=decodeURIComponent(tmpParts[1])+tmpParts[2]+'/';
|
||
|
var found=false;
|
||
|
for(var l=0;l<globalSettings.loadedaddressbookcollections.value.length;l++)
|
||
|
{
|
||
|
var tmpParts2 = globalSettings.loadedaddressbookcollections.value[l].match('^(.*/)([^/]+)/([^/]+)/$');
|
||
|
var checkHref2=decodeURIComponent(tmpParts2[2])+'/'+tmpParts2[3]+'/';
|
||
|
if(checkHref==checkHref2)
|
||
|
{
|
||
|
found=true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
isLoaded=found;
|
||
|
}
|
||
|
else
|
||
|
isLoaded=(globalSettings.loadedaddressbookcollections.value.indexOf(checkHref)!=-1)
|
||
|
var unloadCh=$(this).find('.unloadCheck');
|
||
|
var checked=unloadCh.prop('checked');
|
||
|
|
||
|
if((isLoaded && !checked) || (!isLoaded && checked))
|
||
|
unloadCh.prop('checked',!checked).trigger('change');
|
||
|
});
|
||
|
hideUnloadedCardDAVCollections(true);
|
||
|
}
|
||
|
|
||
|
function hideUnloadedCardDAVCollections(withCallback)
|
||
|
{
|
||
|
var resList=$('#ResourceCardDAVList');
|
||
|
resList.find(':input.unloadCheck').remove();
|
||
|
resList.find(':input.unloadCheckHeader').remove();
|
||
|
resList.find('.load_mode').removeClass('load_mode');
|
||
|
resList.find(':input').css('display','');
|
||
|
resList.find('.resourceCardDAV').not('.unloaded').parent().css('height','');
|
||
|
|
||
|
$('.resourcesCardDAV_h').text(localization[globalInterfaceLanguage].txtAddressbooks);
|
||
|
resList.find('.resourceCardDAV_header.unloaded').animate({height:0},300).promise().done(function(){
|
||
|
resList.find('.resourceCardDAV_header.unloaded').css({'display':'none','height':''});
|
||
|
});
|
||
|
resList.find('.resourceCardDAV.unloaded').parent().animate({height:0},300).promise().done(function(){
|
||
|
resList.find('.resourceCardDAV.unloaded').parent().css({'display':'none','height':''});
|
||
|
resList.find('.resourceCardDAV_header').not('.unloaded').each(function(){
|
||
|
var triggerInput=$(this).nextUntil('.resourceCardDAV_header').filter(':visible').first().find('input[type="checkbox"]');
|
||
|
collectionChBoxClick(triggerInput.get(0), '#ResourceCardDAVList', '.resourceCardDAV_header', '.resourceCardDAV', null, false);
|
||
|
});
|
||
|
resList.find('.unloaded').removeClass('unloaded');
|
||
|
globalAddressbookCollectionsLoading=false;
|
||
|
if(withCallback)
|
||
|
hideUnloadedCardDAVCollectionsCallBack();
|
||
|
});
|
||
|
resList.animate({'top':24},300);
|
||
|
if(withCallback)
|
||
|
$('#AddressbookOverlay').fadeOut(300,function(){
|
||
|
$(this).removeClass('loader_hidden');
|
||
|
});
|
||
|
if(isAvaible('CalDavZAP'))
|
||
|
{
|
||
|
$('#showUnloadedCalendars').css('display','block');
|
||
|
$('#showUnloadedCalendarsTODO').css('display','block');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hideUnloadedCardDAVCollectionsCallBack()
|
||
|
{
|
||
|
if(globalAddressbookList.contactLoaded!=null)
|
||
|
globalAddressbookList.loadContactByUID(globalAddressbookList.contactLoaded.uid);
|
||
|
$('#showUnloadedAddressbooks').css('display','');
|
||
|
globalFirstHideLoader=true;
|
||
|
globalSettingsSaving='';
|
||
|
selectActiveAddressbook();
|
||
|
$('#AddressbookOverlay').css('display','none');
|
||
|
$('#ResourceCardDAVList').find('input[type="checkbox"]').prop('disabled',false);
|
||
|
}
|
||
|
|
||
|
function selectActiveAddressbook()
|
||
|
{
|
||
|
if(globalAddressbookCollectionsLoading)
|
||
|
return false;
|
||
|
|
||
|
for(var i=0; i<globalResourceCardDAVList.collections.length;i++)
|
||
|
if(globalResourceCardDAVList.collections[i].uid!=undefined)
|
||
|
{
|
||
|
var inputResource=globalResourceCardDAVList.collections[i].uid;
|
||
|
var par=inputResource.split('/');
|
||
|
if(globalSettings.addressbookselected.value!='')
|
||
|
{
|
||
|
if(typeof globalSettings.addressbookselected.value=='string' && inputResource==globalSettings.addressbookselected.value.substring(0,globalSettings.addressbookselected.value.lastIndexOf('/')+1))
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV[data-id="'+globalSettings.addressbookselected.value+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
else if(typeof globalSettings.addressbookselected.value=='string' && globalSettings.addressbookselected.value.charAt(globalSettings.addressbookselected.value.length-1)=='/' && (par[par.length-3]+'/'+par[par.length-2]+'/')==globalSettings.addressbookselected.value)
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV[data-id="'+inputResource+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
else if(typeof globalSettings.addressbookselected.value=='string' && globalSettings.addressbookselected.value.charAt(globalSettings.addressbookselected.value.length-1)!='/')
|
||
|
{
|
||
|
if((par[par.length-3]+'/'+par[par.length-2]+'/') == globalSettings.addressbookselected.value.substring(0,globalSettings.addressbookselected.value.lastIndexOf('/')+1) && $('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV[data-id="'+inputResource+globalSettings.addressbookselected.value.substring(globalSettings.addressbookselected.value.lastIndexOf('/')+1,globalSettings.addressbookselected.value.length)+'"]:visible').length>0)
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV[data-id="'+inputResource+globalSettings.addressbookselected.value.substring(globalSettings.addressbookselected.value.lastIndexOf('/')+1,globalSettings.addressbookselected.value.length)+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
}
|
||
|
else if (typeof globalSettings.addressbookselected.value=='object' && inputResource.match(globalSettings.addressbookselected.value)!=null)
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV[data-id="'+inputResource+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length==0)
|
||
|
for(var i=0; i<globalResourceCardDAVList.collections.length;i++)
|
||
|
if(globalResourceCardDAVList.collections[i].uid!=undefined)
|
||
|
{
|
||
|
var inputResource=globalResourceCardDAVList.collections[i].uid;
|
||
|
var par=inputResource.split('/');
|
||
|
if(typeof globalAddressbookSelected!='undefined' && globalAddressbookSelected!=null && globalAddressbookSelected!='')
|
||
|
{
|
||
|
globalSettings.addressbookselected.value = globalAddressbookSelected;
|
||
|
if(typeof globalAddressbookSelected=='string' && inputResource==globalAddressbookSelected.substring(0,globalAddressbookSelected.lastIndexOf('/')+1))
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
$('#ResourceCardDAVList').find('[data-id="'+globalAddressbookSelected+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
else if(typeof globalAddressbookSelected=='string' && globalAddressbookSelected.charAt(globalAddressbookSelected.length-1)=='/' && (par[par.length-3]+'/'+par[par.length-2]+'/')==globalAddressbookSelected)
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
$('#ResourceCardDAVList').find('[data-id="'+inputResource+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
else if(typeof globalAddressbookSelected=='string' && globalAddressbookSelected.charAt(globalAddressbookSelected.length-1)!='/')
|
||
|
{
|
||
|
if((par[par.length-3]+'/'+par[par.length-2]+'/') == globalAddressbookSelected.substring(0,globalAddressbookSelected.lastIndexOf('/')+1) && $('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('[data-id="'+inputResource+globalAddressbookSelected.substring(globalAddressbookSelected.lastIndexOf('/')+1,globalAddressbookSelected.length)+'"]:visible').length>0)
|
||
|
$('#ResourceCardDAVList').find('[data-id="'+inputResource+globalAddressbookSelected.substring(globalAddressbookSelected.lastIndexOf('/')+1,globalAddressbookSelected.length)+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
}
|
||
|
else if (typeof globalAddressbookSelected=='object' && inputResource.match(globalAddressbookSelected)!=null)
|
||
|
{
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
$('#ResourceCardDAVList').find('[data-id="'+inputResource+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
else if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0)
|
||
|
{
|
||
|
globalSettings.addressbookselected.value=par[par.length-3]+'/'+par[par.length-2]+'/';
|
||
|
$('#ResourceCardDAVList').find('[data-id="'+inputResource+'"]:visible').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($('#ResourceCardDAVList').find('.resourceCardDAV_selected:visible').length == 0 && $('#ResourceCardDAVList').find('.resourceCardDAV[data-id]:visible').length > 0)
|
||
|
{
|
||
|
var ui_d = $('#ResourceCardDAVList').find('.resourceCardDAV[data-id]:visible').eq(0).attr('data-id');
|
||
|
var part_u = ui_d.split('/');
|
||
|
globalSettings.addressbookselected.value=part_u[part_u.length-3]+'/'+part_u[part_u.length-2]+'/';
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV[data-id]:visible').eq(0).addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
var selColl=globalResourceCardDAVList.getCollectionByUID($('#ResourceCardDAVList').find('.resourceCardDAV[data-id].resourceCardDAV_selected').attr('data-id'));
|
||
|
if(selColl!=null)
|
||
|
{
|
||
|
selColl.filterUID=selColl.uid;
|
||
|
if(selColl.permissions.read_only==true)
|
||
|
globalRefAddContact.addClass('element_no_display');
|
||
|
else
|
||
|
globalRefAddContact.removeClass('element_no_display');
|
||
|
|
||
|
globalRefAddContact.attr('data-url', selColl.uid.replace(RegExp('[^/]+$'),''));
|
||
|
globalRefAddContact.attr('data-filter-url',selColl.filterUID); // Set the current addressbook filter uid
|
||
|
globalRefAddContact.attr('data-account-uid',selColl.accountUID);
|
||
|
globalRefAddContact.attr('data-color',selColl.color);
|
||
|
|
||
|
// Make the selected collection active
|
||
|
if(!globalCardDAVInitLoad)
|
||
|
{
|
||
|
if(typeof(globalContactsABChange)=='function')
|
||
|
globalContactsABChange(selColl.uid);
|
||
|
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV_item').find('.resourceCardDAV_selected').removeClass('resourceCardDAV_selected');
|
||
|
$('#ResourceCardDAVList').find('[data-id='+jqueryEscapeSelector(selColl.uid)+']').addClass('resourceCardDAV_selected');
|
||
|
if(selColl.filterUID[selColl.filterUID.length-1]!='/')
|
||
|
$('#ResourceCardDAVList').find('[data-id='+jqueryEscapeSelector(selColl.filterUID)+']').addClass('resourceCardDAV_selected');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function CardDAVUpdateMainLoader(inputCollection)
|
||
|
{
|
||
|
if(!globalCardDAVInitLoad)
|
||
|
{
|
||
|
if(globalSettingsSaving=='addressbook')
|
||
|
{
|
||
|
globalLoadedCollectionsCount++;
|
||
|
$('#AddressbookOverlay').children('.loaderInfo').text(localization[globalInterfaceLanguage].loadingAddressbooks.replace('%act%', globalLoadedCollectionsCount).replace('%total%', globalLoadedCollectionsNumber));
|
||
|
if(globalSettingsSaving!='' && globalLoadedCollectionsCount==globalLoadedCollectionsNumber)
|
||
|
setTimeout(function(){hideUnloadedCardDAVCollectionsCallBack();if(isAvaible('Settings'))hideSettingsOverlay();},300);
|
||
|
}
|
||
|
selectActiveAddressbook();
|
||
|
for(var adr in globalAddressbookList.vcard_groups)
|
||
|
{
|
||
|
if(globalAddressbookList.vcard_groups[adr].length>0)
|
||
|
{
|
||
|
extendDestSelect();
|
||
|
if(typeof $('#vCardEditor').attr('data-vcard-uid')=='undefined')
|
||
|
$('#vCardEditor').find('[data-attr-name="_DEST_"]').find('optiotn[data-type$="'+$('#ResourceCardDAVList').find('.resourceCardDAV_selected').find(':input[data-id]').attr('data-id')+'"]').prop('selected',true)
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
if(inputCollection.makeLoaded)
|
||
|
{
|
||
|
globalAddressbookNumberCount++;
|
||
|
$('#MainLoaderInner').html(localization[globalInterfaceLanguage].loadingAddressbooks.replace('%act%', (globalAddressbookNumberCount)).replace('%total%', globalAddressbookNumber));
|
||
|
}
|
||
|
|
||
|
inputCollection.isLoaded=true;
|
||
|
$('#ResourceCardDAVList [data-id="'+inputCollection.uid+'"]').removeClass('r_operate');
|
||
|
|
||
|
var unloadedCount=0;
|
||
|
for(var i=0; i<globalResourceCardDAVList.collections.length;i++)
|
||
|
if(globalResourceCardDAVList.collections[i].uid!=undefined && !globalResourceCardDAVList.collections[i].isLoaded)
|
||
|
unloadedCount++;
|
||
|
|
||
|
if(unloadedCount==0 && !isCardDAVLoaded)
|
||
|
{
|
||
|
globalCardDAVInitLoad=false;
|
||
|
globalAddressbookList.renderContacs();
|
||
|
var rexo=new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)');
|
||
|
if(!globalDefaultAddressbookCollectionActiveAll)
|
||
|
{
|
||
|
for(var i=0;i<globalSettings.activeaddressbookcollections.value.length;i++)
|
||
|
{
|
||
|
if(typeof globalCrossServerSettingsURL!='undefined'&&globalCrossServerSettingsURL!=null&globalCrossServerSettingsURL)
|
||
|
{
|
||
|
var tmpParts2 = globalSettings.activeaddressbookcollections.value[i].match('^(.*/)([^/]+)/([^/]+)/$');
|
||
|
var checkHref2=tmpParts2[2]+'/'+tmpParts2[3]+'/';
|
||
|
if($('#ResourceCardDAVList input[data-id$="'+checkHref2+'"]:visible').length>0)
|
||
|
$('#ResourceCardDAVList input[data-id$="'+checkHref2+'"]').trigger('click');
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var uidPart=globalSettings.activeaddressbookcollections.value[i].match(RegExp('^(https?://)(.*)', 'i'))[1];
|
||
|
var uidPart2=globalSettings.activeaddressbookcollections.value[i].match(RegExp('^(https?://)(.*)', 'i'))[2];
|
||
|
var uidPart3=getAccount(inputCollection.accountUID).userAuth.userName;
|
||
|
var uid = uidPart+uidPart3+'@'+uidPart2;
|
||
|
if($('#ResourceCardDAVList .resourceCardDAV input[data-id="'+uid+'"]:visible').length>0)
|
||
|
$('#ResourceCardDAVList .resourceCardDAV input[data-id="'+uid+'"]').trigger('click');
|
||
|
}
|
||
|
}
|
||
|
if(globalSettings.activeaddressbookcollections.value.length>0 && $('#ResourceCardDAVList .resourceCardDAV input:checked').length==0)
|
||
|
globalDefaultAddressbookCollectionActiveAll=true;
|
||
|
}
|
||
|
if(globalDefaultAddressbookCollectionActiveAll)
|
||
|
for(var i=0;i<globalResourceCardDAVList.collections.length;i++)
|
||
|
if(globalResourceCardDAVList.collections[i].uid!=undefined && $('#ResourceCardDAVList .resourceCardDAV input[data-id="'+globalResourceCardDAVList.collections[i].uid+'"]:visible').length>0)
|
||
|
$('#ResourceCardDAVList input[data-id="'+globalResourceCardDAVList.collections[i].uid+'"]').trigger('click');
|
||
|
selectActiveAddressbook();
|
||
|
globalRefAddContact.prop('disabled', false);
|
||
|
loadNextApplication(true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function applyAddrSettings(abContactRef, remValues)
|
||
|
{
|
||
|
var addrVals = new Array();
|
||
|
if(typeof remValues!= 'undefined')
|
||
|
{
|
||
|
abContactRef.find('[data-type="\\%address"]').find('[data-type="country_type"]').each(function(){
|
||
|
addrVals[$(this).parents('[data-type="%address"]').attr('data-id')] = $(this).val();
|
||
|
});
|
||
|
}
|
||
|
var country_option=abContactRef.find('[data-type="\\%address"]').find('[data-type="country_type"]').find('option').last().clone();
|
||
|
|
||
|
abContactRef.find('[data-type="\\%address"]').find('[data-type="country_type"]').html('');
|
||
|
|
||
|
// we need a copy of the object because of the next "delete" operation
|
||
|
var addressTypesTmp=jQuery.extend({}, addressTypes);
|
||
|
|
||
|
// delete custom ordered element before the sort (then we will add them back)
|
||
|
if(globalSettings.addresscountryfavorites.value.length>0)
|
||
|
for(var i=globalSettings.addresscountryfavorites.value.length-1;i>=0;i--)
|
||
|
delete addressTypesTmp[globalSettings.addresscountryfavorites.value[i]];
|
||
|
|
||
|
var addressTypesArr=sortCountries(addressTypesTmp);
|
||
|
// re-add custom ordered elements from the original addressTypes (where all elements are still present)
|
||
|
if(globalSettings.addresscountryfavorites.value.length>0)
|
||
|
for(var i=globalSettings.addresscountryfavorites.value.length-1;i>=0;i--)
|
||
|
addressTypesArr.unshift({'key': globalSettings.addresscountryfavorites.value[i], 'value': addressTypes[globalSettings.addresscountryfavorites.value[i]], 'translated_value': localization[globalInterfaceLanguage]['txtAddressCountry'+globalSettings.addresscountryfavorites.value[i].toUpperCase()]});
|
||
|
|
||
|
for(var i=0;i<addressTypesArr.length;i++)
|
||
|
{
|
||
|
var tmp=country_option;
|
||
|
tmp.attr('data-type',addressTypesArr[i].key);
|
||
|
tmp.attr('data-full-name',addressTypesArr[i].value[0]);
|
||
|
tmp.text(addressTypesArr[i].translated_value); // translation
|
||
|
abContactRef.find('[data-type="\\%address"]').find('[data-type="country_type"]').append(tmp.clone());
|
||
|
}
|
||
|
abContactRef.find('[data-type="\\%address"]').find('[data-type="country_type"]').attr('data-autoselect',globalSettings.defaultaddresscountry.value);
|
||
|
for(var key in addrVals)
|
||
|
abContactRef.find('[data-type="\\%address"][data-id="'+key+'"]').find('[data-type="country_type"]').val(addrVals[key]);
|
||
|
}
|
||
|
|
||
|
function localizeCardDAV()
|
||
|
{
|
||
|
// frequently used
|
||
|
var abContactRef=$('#ABContact');
|
||
|
|
||
|
// restore original templates
|
||
|
$('#ResourceCardDAVList').empty().append(globalOrigCardDAVListTemplate.clone());
|
||
|
abContactRef.empty().append(globalOrigVcardTemplate.clone());
|
||
|
|
||
|
|
||
|
localizeAddressTypes();
|
||
|
|
||
|
// interface translation
|
||
|
$('[data-type="system_logo"]').attr('alt',localization[globalInterfaceLanguage].altLogo);
|
||
|
$('[data-type="system_username"]').attr('placeholder',localization[globalInterfaceLanguage].pholderUsername);
|
||
|
$('[data-type="system_password"]').attr('placeholder',localization[globalInterfaceLanguage].pholderPassword);
|
||
|
|
||
|
$('[data-type="resourcesCardDAV_txt"]').text(localization[globalInterfaceLanguage].txtAddressbooks);
|
||
|
$('[data-type="contact_txt"]').text(localization[globalInterfaceLanguage].txtContact);
|
||
|
$('[data-type="search"]').attr('placeholder',localization[globalInterfaceLanguage].txtSearch);
|
||
|
$('#AddContact').attr('alt',localization[globalInterfaceLanguage].altAddContact);
|
||
|
$('#AddContact').attr('title',localization[globalInterfaceLanguage].altAddContact);
|
||
|
$('#Logout').attr('alt',localization[globalInterfaceLanguage].altLogout);
|
||
|
$('#Logout').attr('title',localization[globalInterfaceLanguage].altLogout);
|
||
|
$('#showUnloadedAddressbooks').attr({title:capitalize(localization[globalInterfaceLanguage].txtEnabledAddressbooks),alt:capitalize(localization[globalInterfaceLanguage].txtEnabledAddressbooks)});
|
||
|
$('#loadUnloadedAddressbooks').val(localization[globalInterfaceLanguage].buttonSave);
|
||
|
$('#loadUnloadedAddressbooksCancel').val(localization[globalInterfaceLanguage].buttonCancel);
|
||
|
|
||
|
abContactRef.find('#photoBox').find('h1').text(localization[globalInterfaceLanguage].txtRemoteImage);
|
||
|
abContactRef.find('#photoURL').attr('placeholder',localization[globalInterfaceLanguage].pholderUrlVal);
|
||
|
|
||
|
abContactRef.find('[data-type="photo"]').text(localization[globalInterfaceLanguage].altPhoto);
|
||
|
abContactRef.find('[data-type="given"]').attr('placeholder',localization[globalInterfaceLanguage].pholderGiven);
|
||
|
abContactRef.find('[data-type="family"]').attr('placeholder',localization[globalInterfaceLanguage].pholderFamily);
|
||
|
abContactRef.find('[data-type="middle"]').attr('placeholder',localization[globalInterfaceLanguage].pholderMiddle);
|
||
|
abContactRef.find('[data-type="nickname"]').attr('placeholder',localization[globalInterfaceLanguage].pholderNickname);
|
||
|
abContactRef.find('[data-type="ph_firstname"]').attr('placeholder',localization[globalInterfaceLanguage].pholderPhGiven);
|
||
|
abContactRef.find('[data-type="ph_lastname"]').attr('placeholder',localization[globalInterfaceLanguage].pholderPhFamily);
|
||
|
abContactRef.find('[data-type="prefix"]').attr('placeholder',localization[globalInterfaceLanguage].pholderPrefix);
|
||
|
abContactRef.find('[data-type="suffix"]').attr('placeholder',localization[globalInterfaceLanguage].pholderSuffix);
|
||
|
abContactRef.find('[data-type="date_bday"]').attr('placeholder',localization[globalInterfaceLanguage].pholderBday);
|
||
|
abContactRef.find('[data-type="title"]').attr('placeholder',localization[globalInterfaceLanguage].pholderTitle);
|
||
|
abContactRef.find('[data-type="org"]').attr('placeholder',localization[globalInterfaceLanguage].pholderOrg);
|
||
|
abContactRef.find('[data-type="department"]').attr('placeholder',localization[globalInterfaceLanguage].pholderDepartment);
|
||
|
abContactRef.find('span[data-type="company_contact"]').text(localization[globalInterfaceLanguage].txtCompanyContact);
|
||
|
|
||
|
abContactRef.find('[data-type="\\%del"]').attr('alt',localization[globalInterfaceLanguage].altDel);
|
||
|
abContactRef.find('[data-type="\\%add"]').attr('alt',localization[globalInterfaceLanguage].altAdd);
|
||
|
abContactRef.find('[data-type="value_handler"]').attr('alt',localization[globalInterfaceLanguage].altValueHandler);
|
||
|
|
||
|
abContactRef.find('[data-type=":custom"]').text(localization[globalInterfaceLanguage].txtCustom);
|
||
|
abContactRef.find('[data-type="custom_value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderCustomVal);
|
||
|
|
||
|
abContactRef.find('[data-type="dates_txt"]').text(localization[globalInterfaceLanguage].txtDates);
|
||
|
abContactRef.find('[data-type="\\%date"]').find('input[data-type="date_value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderDate);
|
||
|
abContactRef.find('[data-type="\\%date"]').find('[data-type=":_$!<anniversary>!$_:"]').text(localization[globalInterfaceLanguage].txtDatesAnniversary);
|
||
|
abContactRef.find('[data-type="\\%date"]').find('[data-type=":_$!<other>!$_:"]').text(localization[globalInterfaceLanguage].txtDatesOther);
|
||
|
|
||
|
abContactRef.find('[data-type="phone_txt"]').text(localization[globalInterfaceLanguage].txtPhone);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('input[data-type="value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderPhoneVal);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="work"]').text(localization[globalInterfaceLanguage].txtPhoneWork);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="home"]').text(localization[globalInterfaceLanguage].txtPhoneHome);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="cell"]').text(localization[globalInterfaceLanguage].txtPhoneCell);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="cell,work"]').text(localization[globalInterfaceLanguage].txtPhoneCellWork);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="cell,home"]').text(localization[globalInterfaceLanguage].txtPhoneCellHome);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="main"]').text(localization[globalInterfaceLanguage].txtPhoneMain);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="pager"]').text(localization[globalInterfaceLanguage].txtPhonePager);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="fax"]').text(localization[globalInterfaceLanguage].txtPhoneFax);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="fax,work"]').text(localization[globalInterfaceLanguage].txtPhoneFaxWork);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="fax,home"]').text(localization[globalInterfaceLanguage].txtPhoneFaxHome);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="iphone"]').text(localization[globalInterfaceLanguage].txtPhoneIphone);
|
||
|
abContactRef.find('[data-type="\\%phone"]').find('[data-type="other"]').text(localization[globalInterfaceLanguage].txtPhoneOther);
|
||
|
|
||
|
abContactRef.find('[data-type="email_txt"]').text(localization[globalInterfaceLanguage].txtEmail);
|
||
|
abContactRef.find('[data-type="\\%email"]').find('input[data-type="value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderEmailVal);
|
||
|
abContactRef.find('[data-type="\\%email"]').find('[data-type="internet,work"]').text(localization[globalInterfaceLanguage].txtEmailWork);
|
||
|
abContactRef.find('[data-type="\\%email"]').find('[data-type="home,internet"]').text(localization[globalInterfaceLanguage].txtEmailHome);
|
||
|
abContactRef.find('[data-type="\\%email"]').find('[data-type=":mobileme:,internet"]').text(localization[globalInterfaceLanguage].txtEmailMobileme);
|
||
|
abContactRef.find('[data-type="\\%email"]').find('[data-type=":_$!<other>!$_:,internet"]').text(localization[globalInterfaceLanguage].txtEmailOther);
|
||
|
|
||
|
abContactRef.find('[data-type="url_txt"]').text(localization[globalInterfaceLanguage].txtUrl);
|
||
|
abContactRef.find('[data-type="\\%url"]').find('input[data-type="value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderUrlVal);
|
||
|
abContactRef.find('[data-type="\\%url"]').find('[data-type="work"]').text(localization[globalInterfaceLanguage].txtUrlWork);
|
||
|
abContactRef.find('[data-type="\\%url"]').find('[data-type="home"]').text(localization[globalInterfaceLanguage].txtUrlHome);
|
||
|
abContactRef.find('[data-type="\\%url"]').find('[data-type=":_$!<homepage>!$_:"]').text(localization[globalInterfaceLanguage].txtUrlHomepage);
|
||
|
abContactRef.find('[data-type="\\%url"]').find('[data-type=":_$!<other>!$_:"]').text(localization[globalInterfaceLanguage].txtUrlOther);
|
||
|
|
||
|
abContactRef.find('[data-type="related_txt"]').text(localization[globalInterfaceLanguage].txtRelated);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('input[data-type="value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderRelatedVal);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<manager>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedManager);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<assistant>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedAssistant);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<father>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedFather);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<mother>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedMother);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<parent>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedParent);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<brother>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedBrother);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<sister>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedSister);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<child>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedChild);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<friend>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedFriend);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<spouse>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedSpouse);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<partner>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedPartner);
|
||
|
abContactRef.find('[data-type="\\%person"]').find('[data-type=":_$!<other>!$_:"]').text(localization[globalInterfaceLanguage].txtRelatedOther);
|
||
|
|
||
|
abContactRef.find('[data-type="im_txt"]').text(localization[globalInterfaceLanguage].txtIm);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('input[data-type="value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderImVal);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="work"]').text(localization[globalInterfaceLanguage].txtImWork);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="home"]').text(localization[globalInterfaceLanguage].txtImHome);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type=":mobileme:"]').text(localization[globalInterfaceLanguage].txtImMobileme);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type=":_$!<other>!$_:"]').text(localization[globalInterfaceLanguage].txtImOther);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="aim"]').text(localization[globalInterfaceLanguage].txtImProtAim);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="icq"]').text(localization[globalInterfaceLanguage].txtImProtIcq);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="irc"]').text(localization[globalInterfaceLanguage].txtImProtIrc);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="jabber"]').text(localization[globalInterfaceLanguage].txtImProtJabber);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="msn"]').text(localization[globalInterfaceLanguage].txtImProtMsn);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="yahoo"]').text(localization[globalInterfaceLanguage].txtImProtYahoo);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="facebook"]').text(localization[globalInterfaceLanguage].txtImProtFacebook);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="gadugadu"]').text(localization[globalInterfaceLanguage].txtImProtGadugadu);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="googletalk"]').text(localization[globalInterfaceLanguage].txtImProtGoogletalk);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="qq"]').text(localization[globalInterfaceLanguage].txtImProtQq);
|
||
|
abContactRef.find('[data-type="\\%im"]').find('[data-type="skype"]').text(localization[globalInterfaceLanguage].txtImProtSkype);
|
||
|
|
||
|
abContactRef.find('[data-type="profile_txt"]').text(localization[globalInterfaceLanguage].txtProfile);
|
||
|
abContactRef.find('[data-type="\\%profile"]').find('input[data-type="value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderProfileVal);
|
||
|
abContactRef.find('[data-type="\\%profile"]').find('[data-type="twitter"]').text(localization[globalInterfaceLanguage].txtProfileTwitter);
|
||
|
abContactRef.find('[data-type="\\%profile"]').find('[data-type="facebook"]').text(localization[globalInterfaceLanguage].txtProfileFacebook);
|
||
|
abContactRef.find('[data-type="\\%profile"]').find('[data-type="flickr"]').text(localization[globalInterfaceLanguage].txtProfileFlickr);
|
||
|
abContactRef.find('[data-type="\\%profile"]').find('[data-type="linkedin"]').text(localization[globalInterfaceLanguage].txtProfileLinkedin);
|
||
|
abContactRef.find('[data-type="\\%profile"]').find('[data-type="myspace"]').text(localization[globalInterfaceLanguage].txtProfileMyspace);
|
||
|
abContactRef.find('[data-type="\\%profile"]').find('[data-type="sinaweibo"]').text(localization[globalInterfaceLanguage].txtProfileSinaweibo);
|
||
|
|
||
|
abContactRef.find('[data-type="address_txt"]').text(localization[globalInterfaceLanguage].txtAddress);
|
||
|
abContactRef.find('[data-type="\\%address"]').find('[data-type="work"]').text(localization[globalInterfaceLanguage].txtAddressWork);
|
||
|
abContactRef.find('[data-type="\\%address"]').find('[data-type="home"]').text(localization[globalInterfaceLanguage].txtAddressHome);
|
||
|
abContactRef.find('[data-type="\\%address"]').find('[data-type=":_$!<other>!$_:"]').text(localization[globalInterfaceLanguage].txtAddressOther);
|
||
|
|
||
|
abContactRef.find('[data-type="categories_txt"]').text(localization[globalInterfaceLanguage].txtCategories);
|
||
|
|
||
|
abContactRef.find('[data-type="note_txt"]').text(localization[globalInterfaceLanguage].txtNote);
|
||
|
abContactRef.find('[data-type="\\%note"]').find('textarea[data-type="value"]').attr('placeholder',localization[globalInterfaceLanguage].pholderNoteVal);
|
||
|
|
||
|
abContactRef.find('[data-type="edit"]').val(localization[globalInterfaceLanguage].buttonEdit);
|
||
|
abContactRef.find('[data-type="add_contact"]').val(localization[globalInterfaceLanguage].altAddContact);
|
||
|
abContactRef.find('[data-type="save"]').val(localization[globalInterfaceLanguage].buttonSave);
|
||
|
abContactRef.find('[data-type="cancel"]').val(localization[globalInterfaceLanguage].buttonCancel);
|
||
|
abContactRef.find('[data-type="delete_from_group"]').val(localization[globalInterfaceLanguage].buttonDeleteFromGroup);
|
||
|
abContactRef.find('[data-type="delete"]').val(localization[globalInterfaceLanguage].buttonDelete);
|
||
|
|
||
|
// hook for extension specific localization
|
||
|
if(typeof(globalContactsExtLocalize)=='function')
|
||
|
globalContactsExtLocalize(abContactRef);
|
||
|
|
||
|
globalTranslCardDAVListTemplate=$('#ResourceCardDAVListTemplate').clone();
|
||
|
globalTranslCardDAVListHeader=globalTranslCardDAVListTemplate.find('.resourceCardDAV_header').clone();
|
||
|
globalTranslCardDAVListItem=globalTranslCardDAVListTemplate.find('.resourceCardDAV_item').clone();
|
||
|
|
||
|
globalTranslVcardTemplate=$('#vCardTemplate').contents().clone();
|
||
|
|
||
|
// CUSTOM PLACEHOLDER (initialization for the whole page)
|
||
|
$('input[placeholder],textarea[placeholder]').placeholder();
|
||
|
}
|
||
|
|
||
|
function processEditorElements(inputEditorRef, processingType, inputIsReadonly, inputIsCompany)
|
||
|
{
|
||
|
var cssShowAsTxtClass='element_show_as_text';
|
||
|
var cssGrayedTxt='element_grayed';
|
||
|
var cssElementNoDisplay='element_no_display';
|
||
|
var cssElementHide='element_hide';
|
||
|
|
||
|
var tmp_ref=inputEditorRef;
|
||
|
|
||
|
if(processingType=='hide')
|
||
|
{
|
||
|
tmp_ref.attr('data-editor-state', 'show');
|
||
|
var disabled=true;
|
||
|
var readonly=true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
tmp_ref.attr('data-editor-state', 'edit');
|
||
|
var disabled=false;
|
||
|
var readonly=false;
|
||
|
}
|
||
|
|
||
|
var inputLockedElements=[];
|
||
|
if(typeof(globalContactsExtGetLockedElements)=='function')
|
||
|
inputLockedElements=globalContactsExtGetLockedElements(inputIsCompany);
|
||
|
|
||
|
var inputDisabledElements=[];
|
||
|
if(typeof(globalContactsExtGetDisabledElements)=='function')
|
||
|
inputDisabledElements=globalContactsExtGetDisabledElements(inputIsCompany);
|
||
|
|
||
|
// show "drag" border on photo & delete button
|
||
|
tmp_ref.find('#photo_drag').css('display', (disabled || readonly ? 'none' : 'inline'));
|
||
|
// if the editor state is "edit" show the "delete" button
|
||
|
if(!tmp_ref.find('#photo').hasClass('photo_blank'))
|
||
|
tmp_ref.find('#reset_img').css('display', (disabled || readonly ? 'none': 'inline'));
|
||
|
|
||
|
// checkboxes
|
||
|
var tmp=tmp_ref.find('[type="checkbox"]');
|
||
|
tmp.each(
|
||
|
function(index,element)
|
||
|
{
|
||
|
var tmp=$(element);
|
||
|
var tmp_data_type=tmp.attr('data-type');
|
||
|
tmp.prop('disabled', disabled || inputLockedElements.indexOf('[data-type="'+tmp_data_type+'"]')!=-1);
|
||
|
if(!tmp.prop('checked') && (processingType=='hide' || inputLockedElements.indexOf('[data-type="'+tmp_data_type+'"]')!=-1))
|
||
|
tmp.parent().addClass(cssGrayedTxt);
|
||
|
else
|
||
|
tmp.parent().removeClass(cssGrayedTxt);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
tmp_ref.find('input[data-type^="date_"]').prop('disabled', disabled || readonly);
|
||
|
|
||
|
// family name, given name, and organization name
|
||
|
var typeList=['family', 'given', 'middle', 'nickname', 'prefix', 'suffix', 'ph_firstname', 'ph_lastname', 'date_bday', 'tags', 'title', 'department', 'org'];
|
||
|
for(var i=0; i<typeList.length; i++)
|
||
|
{
|
||
|
var elementRef = tmp_ref.find('[data-type="'+typeList[i]+'"]');
|
||
|
var elementDisabled = inputDisabledElements.indexOf('[data-type="'+typeList[i]+'"]')!=-1 && (processingType=='add' || elementRef.val()=='');
|
||
|
var elementReadOnly = readonly || inputLockedElements.indexOf('[data-type="'+typeList[i]+'"]')!=-1 || elementDisabled;
|
||
|
|
||
|
elementRef.prop({'readonly':elementReadOnly, 'disabled':elementDisabled}).toggleClass('non_editable', elementDisabled);
|
||
|
}
|
||
|
|
||
|
var tmp_tags_prefix=['#tags'];
|
||
|
var typeList=new Array({sel: '[data-type="\\%address"]'}, {sel: '[data-type="\\%phone"]'}, {sel: '[data-type="\\%email"]'}, {sel: '[data-type="\\%url"]'}, {sel: '[data-type="\\%date"]'}, {sel: '[data-type="\\%person"]'}, {sel: '[data-type="\\%im"]'}, {sel: '[data-type="\\%profile"]'}, {sel: '[data-type="\\%categories"]'}, {sel: '[data-type="\\%note"]'});
|
||
|
// hook for extending the list of editor elements
|
||
|
if(typeof(globalContactsExtGetAdditionalElements)=='function')
|
||
|
{
|
||
|
tmp_tags_prefix=tmp_tags_prefix.concat(globalContactsExtGetAdditionalElements('tags'));
|
||
|
typeList=typeList.concat(globalContactsExtGetAdditionalElements('common'));
|
||
|
}
|
||
|
|
||
|
tmp_ref.find('select').prop('disabled', disabled);
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var newSVG=$((disabled ? SVG_select_dis : SVG_select)).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': (disabled ? '-22px' : '-19px'), 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
|
||
|
//XXXX check this - was $('#ABContact')
|
||
|
tmp_ref.find('select').parent().find('svg[data-type="select_icon"]').replaceWith($('<div>').append($(newSVG).clone()).html());
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
|
||
|
for(var i=0; i<tmp_tags_prefix.length; i++)
|
||
|
{
|
||
|
var tmp=tmp_ref.find(tmp_tags_prefix[i]+'_tag');
|
||
|
tmp.prop('readonly', readonly);
|
||
|
if(readonly)
|
||
|
tmp.closest('div.tagsinput').addClass('readonly');
|
||
|
else
|
||
|
tmp.closest('div.tagsinput').removeClass('readonly');
|
||
|
}
|
||
|
|
||
|
for(var i=0; i<typeList.length; i++)
|
||
|
{
|
||
|
var found_non_empty=0;
|
||
|
var empty = false;
|
||
|
tmp=tmp_ref.find(typeList[i].sel);
|
||
|
|
||
|
tmp.each(
|
||
|
function(index, element)
|
||
|
{
|
||
|
var tmp=$(element).find('[data-type="value"]');
|
||
|
if(tmp.length==0)
|
||
|
tmp=$(element).find('[data-type="date_value"]');
|
||
|
var found=0;
|
||
|
// check if there is any data present (if not, whe hide the element)
|
||
|
if($(element).attr('data-type')=='%address') // address is handled specially
|
||
|
tmp.each(
|
||
|
function(index,element)
|
||
|
{
|
||
|
if($(element).attr('data-addr-field')!='' && $(element).attr('data-addr-field')!='country' && $(element).val()!='')
|
||
|
{
|
||
|
found=1;
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
else if(tmp.val()!='') // other elements (not address)
|
||
|
found=1;
|
||
|
|
||
|
if(processingType=='hide')
|
||
|
{
|
||
|
if(found)
|
||
|
{
|
||
|
$(element).find('[data-type="\\%add"]').find('input[type="image"]').addClass(cssElementNoDisplay);
|
||
|
$(element).find('[data-type="\\%del"]').find('input[type="image"]').addClass(cssElementNoDisplay);
|
||
|
$(element).find('select').prop('disabled', disabled);
|
||
|
$(element).find('textarea').prop('disabled', disabled);
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var newSVG=$((disabled ? SVG_select_dis : SVG_select)).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': (disabled ? '-22px' : '-19px'), 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
|
||
|
//XXXX check this - was $('#ABContact')
|
||
|
$(element).find('svg[data-type="select_icon"]').replaceWith($('<div>').append($(newSVG).clone()).html());
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
tmp.prop('readonly', readonly);
|
||
|
found_non_empty=1;
|
||
|
}
|
||
|
else
|
||
|
$(element).addClass(cssElementNoDisplay);
|
||
|
}
|
||
|
else // 'show'
|
||
|
{
|
||
|
empty = empty || $(element).hasClass(cssElementNoDisplay);
|
||
|
|
||
|
$(element).removeClass(cssElementNoDisplay);
|
||
|
$(element).find('[data-type="\\%add"]').find('input[type="image"]').removeClass(cssElementNoDisplay);
|
||
|
$(element).find('[data-type="\\%del"]').find('input[type="image"]').removeClass(cssElementNoDisplay);
|
||
|
$(element).find('select').prop('disabled', disabled);
|
||
|
$(element).find('textarea').prop('disabled', disabled);
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var newSVG=$((disabled ? SVG_select_dis : SVG_select)).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': (disabled ? '-22px' : '-19px'), 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
//XXXX check this - was $('#ABContact')
|
||
|
$(element).find('svg[data-type="select_icon"]').replaceWith($('<div>').append($(newSVG).clone()).html());
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
tmp.prop('readonly', readonly);
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
|
||
|
if(processingType==='show' && !empty) {
|
||
|
if(typeList[i].sel==='[data-type="\\%address"]') {
|
||
|
tmp.each(function() {
|
||
|
var street = $(this).find('[data-addr-field="street"]');
|
||
|
if(street.val()) {
|
||
|
street.trigger('keyup.street');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if(typeof globalContactAutoExpand=='undefined' || globalContactAutoExpand!=false)
|
||
|
tmp.last().find('[data-type="\\%add"]').find('.op').trigger('click');
|
||
|
}
|
||
|
|
||
|
// set the visibility of the buttons
|
||
|
if(processingType=='hide')
|
||
|
{
|
||
|
if(inputIsReadonly!=true)
|
||
|
{
|
||
|
if(typeof globalGroupContactsByCompanies!='undefined' && globalGroupContactsByCompanies==true && inputIsCompany)
|
||
|
tmp_ref.find('[data-type="add_contact"]').removeClass(cssElementNoDisplay);
|
||
|
else
|
||
|
tmp_ref.find('[data-type="add_contact"]').addClass(cssElementNoDisplay);
|
||
|
|
||
|
tmp_ref.find('[data-type="edit"]').removeClass(cssElementNoDisplay);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
tmp_ref.find('[data-type="add_contact"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="edit"]').addClass(cssElementNoDisplay);
|
||
|
}
|
||
|
|
||
|
tmp_ref.find('[data-type="save"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="cancel"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="delete_from_group"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="delete"]').addClass(cssElementNoDisplay);
|
||
|
}
|
||
|
else if(processingType=='add')
|
||
|
{
|
||
|
tmp_ref.find('[data-type="add_contact"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="edit"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="save"]').removeClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="cancel"]').removeClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="delete_from_group"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="delete"]').addClass(cssElementNoDisplay);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
tmp_ref.find('[data-type="add_contact"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="edit"]').addClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="save"]').removeClass(cssElementNoDisplay);
|
||
|
tmp_ref.find('[data-type="cancel"]').removeClass(cssElementNoDisplay);
|
||
|
// show "Delete from Group" only if there is an active contact group
|
||
|
|
||
|
// XXX we need to use another identificator
|
||
|
// if(globalResourceCardDAVList.getLoadedAddressbook().filterUID[globalResourceCardDAVList.getLoadedAddressbook().filterUID.length-1]!='/')
|
||
|
// tmp.find('[data-type="delete_from_group"]').removeClass(cssElementNoDisplay);
|
||
|
|
||
|
tmp_ref.find('[data-type="delete"]').removeClass(cssElementNoDisplay);
|
||
|
}
|
||
|
|
||
|
if(!found_non_empty)
|
||
|
{
|
||
|
if(processingType=='hide')
|
||
|
tmp.prev().addClass(cssElementNoDisplay);
|
||
|
else
|
||
|
tmp.prev().removeClass(cssElementNoDisplay);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// set editor "process" hook
|
||
|
if(typeof(globalContactsExtEditorProcess)=='function')
|
||
|
globalContactsExtEditorProcess(tmp_ref, 'post', processingType, inputIsCompany);
|
||
|
}
|
||
|
|
||
|
function loadImage(image)
|
||
|
{
|
||
|
var canvas = $('#photo');
|
||
|
var canvasElement = canvas.get(0);
|
||
|
var imageWidth = image.width;
|
||
|
var imageHeight = image.height;
|
||
|
var canvasWidth = canvas.width()*globalContactPhotoScaleFactor;
|
||
|
var canvasHeight = canvas.height()*globalContactPhotoScaleFactor;
|
||
|
var clipStartX = 0;
|
||
|
var clipStartY = 0;
|
||
|
var clipWidth = imageWidth;
|
||
|
var clipHeight = imageHeight;
|
||
|
|
||
|
canvasElement.width = canvasWidth;
|
||
|
canvasElement.height = canvasHeight;
|
||
|
|
||
|
if(imageWidth-canvasWidth < imageHeight-canvasHeight) {
|
||
|
var clipLength = Math.ceil((imageHeight-imageWidth/canvasWidth*canvasHeight)/2);
|
||
|
clipStartY = clipLength;
|
||
|
clipHeight = imageHeight-clipLength*2;
|
||
|
}
|
||
|
else {
|
||
|
var clipLength = Math.ceil((imageWidth-imageHeight/canvasHeight*canvasWidth)/2);
|
||
|
clipStartX = clipLength;
|
||
|
clipWidth = imageWidth-clipLength*2;
|
||
|
}
|
||
|
|
||
|
canvasElement.getContext('2d').drawImage(image, clipStartX, clipStartY, clipWidth, clipHeight, 0, 0, canvasWidth, canvasHeight);
|
||
|
canvas.removeClass('photo_blank');
|
||
|
}
|
||
|
|
||
|
function CardDAVeditor_cleanup(inputLoadEmpty, inputIsCompany)
|
||
|
{
|
||
|
CardDAVcleanupRegexEnvironment();
|
||
|
|
||
|
// Cleanup the editor and store reference to the editor object
|
||
|
globalRefVcardEditor=globalTranslVcardTemplate.clone();
|
||
|
// cleanup old data form address fields
|
||
|
globalAddressElementOldData={};
|
||
|
|
||
|
if(typeof(globalContactsExtEditorProcess)=='function')
|
||
|
globalContactsExtEditorProcess(globalRefVcardEditor, 'pre', null, inputIsCompany);
|
||
|
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
/* IE or FF */
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
// ADD empty SVG to interface (we will replace it later)
|
||
|
$('<svg data-type="select_icon"></svg>').css('display', 'none').insertAfter(globalRefVcardEditor.find('select[data-type$="_type"]'));
|
||
|
|
||
|
if($.browser.msie && parseInt($.browser.version, 10)==10) /* IE 10 (because there are no more conditional comments) */
|
||
|
globalRefVcardEditor.find('[data-type="\\%note"]').find('textarea[data-type="value"]').text('').attr('placeholder',$('[data-type="\\%note"]').find('textarea[data-type="value"]').attr('placeholder'));
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
|
||
|
// bind events (see also add_elements())
|
||
|
// hide the "-" button (we maybe change this in future)
|
||
|
globalRefVcardEditor.find('[data-type="\\%del"]').css('visibility', 'hidden');
|
||
|
|
||
|
var tmp_arr=['[data-type="\\%phone"]', '[data-type="\\%email"]', '[data-type="\\%url"]', '[data-type="\\%date"]', '[data-type="\\%person"]', '[data-type="\\%im"]', '[data-type="\\%profile"]', '[data-type="\\%address"]'];
|
||
|
for(var i=0; i<tmp_arr.length; i++)
|
||
|
{
|
||
|
globalABEditorCounter[tmp_arr[i]]=1; // restart id counters for editor objects
|
||
|
globalRefVcardEditor.find(tmp_arr[i]+' [data-type="\\%add"] input').data('customSelector', tmp_arr[i]).click(function(){add_element($(this).parent(), $(this).data('customSelector'), $(this).data('customSelector'), '[data-type="\\%add"]','[data-type="\\%del"]', globalABEditorCounter[$(this).data('customSelector')]++);checkContactFormScrollBar();});
|
||
|
globalRefVcardEditor.find(tmp_arr[i]+' [data-type="\\%del"] input').data('customSelector', tmp_arr[i]).click(function(){del_element($(this).parent(), $(this).data('customSelector'), '[data-type="\\%add"]','[data-type="\\%del"]');checkContactFormScrollBar();});
|
||
|
if(typeof globalContactAutoExpand=='undefined' || globalContactAutoExpand!=false)
|
||
|
{
|
||
|
globalRefVcardEditor.find(tmp_arr[i]+' input[type="text"]').bind('keyup', function() {
|
||
|
var el = $(this);
|
||
|
var row = el.closest('tr[data-type^="%"]');
|
||
|
var isLast = row.attr('data-type')!==row.next().attr('data-type');
|
||
|
|
||
|
if(isLast && el.val()) {
|
||
|
row.find('[data-type="\\%add"] input').trigger('click');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
//globalRefVcardEditor.find(tmp_arr[i]).children().filter('[data-type="\\%add"]').click();
|
||
|
}
|
||
|
// one special thing for address
|
||
|
globalRefVcardEditor.find('[data-type="\\%address"] [data-type="country_type"]').change(function(){set_address_country(this);checkContactFormScrollBar();});
|
||
|
|
||
|
var tmp=globalRefVcardEditor.find('[data-type="\\%address"]');
|
||
|
var tmp_select=tmp.find('[data-type="country_type"]').attr('data-autoselect');
|
||
|
if(tmp_select!='')
|
||
|
{
|
||
|
tmp.find('[data-type="country_type"]').children('[data-type="'+jqueryEscapeSelector(tmp_select)+'"]').prop('selected', true);
|
||
|
tmp.find('[data-autoselect]').change();
|
||
|
}
|
||
|
|
||
|
globalRefVcardEditor.find('[data-type="custom_value"]').bind('keyup change', function(){
|
||
|
$(this).parent().find('[data-type="invalid"]').css('display', (vCard.pre['custom_type'].test($(this).val()) ? 'none' : 'inline'));
|
||
|
});
|
||
|
|
||
|
// init image uploader
|
||
|
globalRefVcardEditor.find('.photo_div').bind('dragover dragenter', function(event){
|
||
|
event.stopPropagation();
|
||
|
event.preventDefault();
|
||
|
|
||
|
// allow image manipulation only if the editor is in "edit" state
|
||
|
if($('#vCardEditor').attr('data-editor-state')!="edit")
|
||
|
return false;
|
||
|
|
||
|
event.originalEvent.dataTransfer.dropEffect='copy'; // explicitly show this is a copy
|
||
|
});
|
||
|
|
||
|
globalRefVcardEditor.find('.photo_div').bind('drop', function(event) {
|
||
|
process_image(event);
|
||
|
});
|
||
|
|
||
|
globalRefVcardEditor.find('#upload_file').bind('change', function(event) {
|
||
|
process_image(event);
|
||
|
});
|
||
|
|
||
|
globalRefVcardEditor.find('#photoBoxButton').bind('click', function(event) {
|
||
|
var photo = $('#photoURL').val();
|
||
|
var newImg = new Image();
|
||
|
newImg.src = photo;
|
||
|
newImg.onload = function() {
|
||
|
// show the image "delete" button
|
||
|
$('#reset_img').css('display', 'inline');
|
||
|
// remove the template related to previous image (start with clean one)
|
||
|
vCard.tplM['contentline_PHOTO'][0]=null;
|
||
|
|
||
|
$('#photoURLHidden').val($('#photoURL').val());
|
||
|
|
||
|
loadImage(this);
|
||
|
hidePhotoBox();
|
||
|
};
|
||
|
newImg.onerror = function() {
|
||
|
$('#photoURL').addClass('invalid');
|
||
|
$('#photoBoxContent').find('[data-type="invalid"]').css('display', 'inline');
|
||
|
};
|
||
|
});
|
||
|
|
||
|
// initialize tagsinput
|
||
|
globalRefVcardEditor.find('#tags').tagsInput({
|
||
|
'height': null,
|
||
|
'width': '530px',
|
||
|
'color': '#2d2d2d',
|
||
|
'placeholderColor': '#e0e0e0',
|
||
|
'useNativePlaceholder': true,
|
||
|
'defaultText': localization[globalInterfaceLanguage].addCategory,
|
||
|
'delimiter': ',',
|
||
|
'allowDelimiterInValue': true, // if true delimiter is escaped with '\' ('\' is escaped as '\\')
|
||
|
'trimInput': false,
|
||
|
'autocomplete_url': globalAddressbookList.getABCategories(true),
|
||
|
'autocomplete': {
|
||
|
'autoFocus': true,
|
||
|
'minLength': 0
|
||
|
},
|
||
|
'onChange' : function(tag, tagImported)
|
||
|
{
|
||
|
// copy the array
|
||
|
var xList=globalAddressbookList.getABCategories(true);
|
||
|
var currentTags=$(this).val().splitCustom(',');
|
||
|
for(var i=xList.length-1; i>=0; i--)
|
||
|
{
|
||
|
for(var j=0; j<currentTags.length; j++)
|
||
|
if(xList[i] == currentTags[j])
|
||
|
xList.splice(i, 1);
|
||
|
}
|
||
|
$('#tags_tag').autocomplete('option', 'source', xList);
|
||
|
|
||
|
checkContactFormScrollBar();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// initialize datepicker
|
||
|
globalRefVcardEditor.find('input[data-type^="date_"]').focus(function(){initDatePicker($(this));});
|
||
|
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie && parseInt($.browser.version, 10)==10) /* IE 10 (because there are no more conditional comments) */
|
||
|
globalRefVcardEditor.find('#tags_tag').css({'padding-top': '1px', 'padding-left': '1px'});
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
|
||
|
globalRefVcardEditor.find('[data-type="org"]').autocomplete({'source': function(request, response){var matcher=RegExp($.ui.autocomplete.escapeRegex(request.term), 'i'); response($.grep(globalAddressbookList.getABCompanies(true), function(value){value=value.label || value.value || value; return matcher.test(value) || matcher.test(value.multiReplace(globalSearchTransformAlphabet));}));}, 'minLength': 0, 'change': function(){$('[data-type="department"]').autocomplete({'source': function(request, response){var matcher=RegExp($.ui.autocomplete.escapeRegex(request.term), 'i'); response($.grep(globalAddressbookList.getABCompanyDepartments($('#vCardEditor').find('[data-type="org"]').val()), function(value){value=value.label || value.value || value; return matcher.test(value) || matcher.test(value.multiReplace(globalSearchTransformAlphabet));}));}, 'minLength': 0})}});
|
||
|
|
||
|
/*
|
||
|
globalABListTop=globalRefABList.offset().top;
|
||
|
globalABListLeft=globalRefABList.offset().left;
|
||
|
|
||
|
// rewrite it and use:
|
||
|
// var start=document.elementFromPoint(globalABListLeft, globalABListTop);
|
||
|
globalLastScrollPos=0; // move to the main.js
|
||
|
|
||
|
globalRefABList.scroll(function(e){
|
||
|
globalRefABListTable.children('.ablist_header:visible').each(function(index, element){
|
||
|
var headerWidth=$(element).outerWidth();
|
||
|
var headerHeight=$(element).outerHeight();
|
||
|
var floating_elem=$('#SystemCardDavMATE > .ablist_header');
|
||
|
|
||
|
if(globalLastScrollPos<=globalRefABList.scrollTop()) // scrolling DOWN
|
||
|
{
|
||
|
var next_h=$(element).nextAll('.ablist_header:visible').first(); // next visible header
|
||
|
if(next_h!=null && next_h.offset().top>globalABListTop) // only if it is below to #ABList do action
|
||
|
{
|
||
|
var cloned=$(element).clone();
|
||
|
// do not create the floating header with the same text twice
|
||
|
if(floating_elem.filter(':contains("'+jqueryEscapeSelector(cloned.text())+'")').length==0)
|
||
|
{
|
||
|
// parameters for the fixed element
|
||
|
cloned.css({'top': globalABListTop, 'left': globalABListLeft, 'width': headerWidth, 'position': 'fixed', 'z-index': 1});
|
||
|
// remove the previous floating header
|
||
|
floating_elem.remove();
|
||
|
|
||
|
// set the opacity back to standard value (item is invisible scrolled above the ABlist top)
|
||
|
globalRefABListTable.children('.ablist_header').each(function(index,element){
|
||
|
if($(element).css('opacity')=='0'){$(element).css('opacity',0.85);}
|
||
|
});
|
||
|
|
||
|
// set the element opacity to 0 and "replace" it with floating element above it
|
||
|
$(element).css('opacity',0);
|
||
|
cloned.appendTo('#SystemCardDavMATE');
|
||
|
}
|
||
|
// move the previous floating header UP
|
||
|
if(next_h.offset().top<globalABListTop+headerHeight) // if next header offset is immediately below to top offset
|
||
|
floating_elem.css('top',globalABListTop-(globalABListTop+headerHeight-next_h.offset().top));
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else // scrolling UP
|
||
|
{
|
||
|
if($(element).offset().top>=globalABListTop)
|
||
|
{
|
||
|
var prev_h=$(element).prevAll('.ablist_header').first();
|
||
|
if(prev_h!=null) // if there is a previous header in #ABList do action
|
||
|
{
|
||
|
var cloned=$(prev_h).clone();
|
||
|
// do not create the floating header with the same text twice
|
||
|
if(floating_elem.filter(':contains("'+jqueryEscapeSelector(cloned.text())+'")').length==0)
|
||
|
{
|
||
|
// parameters for the fixed element
|
||
|
// cloned.css('top',globalABListTop-headerHeight);
|
||
|
cloned.css({'top': Math.min(globalABListTop,$(element).offset().top-headerHeight), 'left': globalABListLeft, 'width': headerWidth, 'position': 'fixed', 'z-index': 1});
|
||
|
|
||
|
// remove the previous floating header
|
||
|
floating_elem.remove();
|
||
|
|
||
|
// set the opacity back to standard value (item is invisible scrolled above the ABlist top)
|
||
|
globalRefABListTable.children('.ablist_header').each(function(index,element){
|
||
|
if($(element).css('opacity')=='0'){$(element).css('opacity',0.85);}
|
||
|
});
|
||
|
|
||
|
// set the previous element opacity to 0 and "replace" it with floating element above it
|
||
|
$(prev_h).css('opacity',0);
|
||
|
cloned.appendTo('#SystemCardDavMATE');
|
||
|
}
|
||
|
}
|
||
|
// move the next floating header DOWN
|
||
|
if(floating_elem.length!=0 && floating_elem.offset().top<globalABListTop)
|
||
|
floating_elem.css('top',Math.min(globalABListTop,$(element).offset().top-headerHeight));
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
globalLastScrollPos=globalRefABList.scrollTop();
|
||
|
});
|
||
|
*/
|
||
|
|
||
|
// CUSTOM PLACEHOLDER (initialization for the editor)
|
||
|
globalRefVcardEditor.find('input[placeholder],textarea[placeholder]').placeholder();
|
||
|
// enable autosize for textarea elements
|
||
|
globalRefVcardEditor.find('textarea[data-type="value"]').autosize({defaultStyles: {height: '64', overflow: '', 'overflow-y': '', 'word-wrap': '', resize: 'none'}, callback: function(){checkContactFormScrollBar();}});
|
||
|
|
||
|
if(inputLoadEmpty==true)
|
||
|
$('#EditorBox').fadeTo(0, 1); /* 0 = no animation */
|
||
|
|
||
|
return globalRefVcardEditor;
|
||
|
}
|
||
|
|
||
|
|
||
|
function animate_message(messageSelector, messageTextSelector, duration, operation)
|
||
|
{
|
||
|
if(operation==undefined)
|
||
|
operation='+=';
|
||
|
var height=$(messageTextSelector).height()+14;
|
||
|
var animation=400;
|
||
|
|
||
|
$(messageSelector).animate({'max-height': height+'px', height: (operation==undefined ? '+=' : operation)+height+'px'}, animation, function(){
|
||
|
if(operation=='+=')
|
||
|
{
|
||
|
if(messageSelector=='#ABInMessageEditBox')
|
||
|
{
|
||
|
|
||
|
$(messageTextSelector).text(localization[globalInterfaceLanguage][globalDisableAnimationMessageHiding]);
|
||
|
globalObjectLoading=false
|
||
|
globalDisableAnimationMessageHiding='';
|
||
|
}
|
||
|
else
|
||
|
setTimeout(function(){
|
||
|
animate_message(messageSelector, messageTextSelector, 0, '-=');
|
||
|
}, duration);
|
||
|
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return duration+2*animation;
|
||
|
}
|
||
|
|
||
|
function show_editor_message(inputPosition, inputSetClass, inputMessage, inputDuration)
|
||
|
{
|
||
|
if(inputPosition==undefined || inputPosition=='in')
|
||
|
{
|
||
|
$('#ABContact').scrollTop(0);
|
||
|
messageSelector='#ABInMessage';
|
||
|
messageTextSelector='#ABInMessageText';
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
messageSelector='#ABMessage';
|
||
|
messageTextSelector='#ABMessageText';
|
||
|
}
|
||
|
|
||
|
$(messageTextSelector).attr('class',inputSetClass);
|
||
|
$(messageTextSelector).text(inputMessage);
|
||
|
return animate_message(messageSelector, messageTextSelector, inputDuration);
|
||
|
}
|
||
|
|
||
|
function set_address_country(inputSelectedAddressObj)
|
||
|
{
|
||
|
var selectedCountry=$(inputSelectedAddressObj).find('option').filter(':selected').attr('data-type');
|
||
|
var addressElement=$(inputSelectedAddressObj).closest('[data-type="\\%address"]');
|
||
|
|
||
|
// store the previous data + cleanup the data-addr-fields, placeholders and values
|
||
|
globalAddressElementOldData = {};
|
||
|
|
||
|
addressElement.find('[data-addr-fid]').each(
|
||
|
function(index, element)
|
||
|
{
|
||
|
var tmp=$(element).find('input');
|
||
|
var tmp_field_name=tmp.attr('data-addr-field');
|
||
|
|
||
|
if(tmp_field_name!=undefined && tmp_field_name!='') {
|
||
|
if(!globalAddressElementOldData.hasOwnProperty(tmp_field_name)) {
|
||
|
globalAddressElementOldData[tmp_field_name] = [];
|
||
|
}
|
||
|
|
||
|
globalAddressElementOldData[tmp_field_name].push({'value': tmp.val(), 'data-match': tmp.attr('data-match')});
|
||
|
}
|
||
|
|
||
|
if(tmp_field_name==='street') {
|
||
|
tmp.unbind('keyup.street');
|
||
|
}
|
||
|
|
||
|
tmp.attr({'data-addr-field': '', 'data-match': '', 'placeholder': ''}).unplaceholder(); // REMOVE CUSTOM PLACEHOLDER
|
||
|
tmp.val('');
|
||
|
|
||
|
// set address country "cleanup" hook
|
||
|
if(typeof(globalContactsExtAddrElemAfterCleanup)=='function')
|
||
|
globalContactsExtAddrElemAfterCleanup(element);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
addressElement.find('[data-group="street"]').closest('tr[data-type="container"]').not(':first').remove();
|
||
|
addressElement.find('[data-group]').removeAttr('data-group');
|
||
|
|
||
|
if(addressTypes[selectedCountry]!=undefined)
|
||
|
for(var i=1;i<addressTypes[selectedCountry].length;i++)
|
||
|
{
|
||
|
if(addressTypes[selectedCountry][i]['type']=='input')
|
||
|
{
|
||
|
var tmp=addressElement.find('[data-addr-fid="'+jqueryEscapeSelector(addressTypes[selectedCountry][i]['fid'])+'"]').find('input');
|
||
|
tmp.attr('data-addr-field',addressTypes[selectedCountry][i]['data-addr-field']);
|
||
|
tmp.attr('placeholder',addressTypes[selectedCountry][i]['placeholder']);
|
||
|
|
||
|
if(addressTypes[selectedCountry][i]['data-addr-field']==='street') {
|
||
|
tmp.closest('tr[data-type="container"]').attr('data-group', 'street');
|
||
|
|
||
|
tmp.bind('keyup.street', function() {
|
||
|
var el = $(this);
|
||
|
var row = el.closest('tr[data-type="container"]');
|
||
|
var isLast = row.attr('data-group')!==row.next().attr('data-group');
|
||
|
|
||
|
if(isLast && el.val()) {
|
||
|
row.clone(true).insertAfter(row).find('input').val('');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// here we restore the data from globalAddressElementOldData variable
|
||
|
if(globalAddressElementOldData.hasOwnProperty(addressTypes[selectedCountry][i]['data-addr-field'])) {
|
||
|
for(var j=0; j<globalAddressElementOldData[addressTypes[selectedCountry][i]['data-addr-field']].length; j++) {
|
||
|
tmp = addressElement.find('[data-addr-fid="'+jqueryEscapeSelector(addressTypes[selectedCountry][i]['fid'])+'"]').find('input').last();
|
||
|
tmp.val(globalAddressElementOldData[addressTypes[selectedCountry][i]['data-addr-field']][j]['value']);
|
||
|
tmp.trigger('keyup.street');
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
else if(addressTypes[selectedCountry][i]['type']=='country')
|
||
|
{
|
||
|
var tmp=addressElement.find('[data-type="\\%country_container"]');
|
||
|
tmp.find('select').find('option[data-type]').prop('selected', false);
|
||
|
tmp.find('select').find('option[data-type="'+jqueryEscapeSelector(selectedCountry)+'"]').prop('selected', true);
|
||
|
|
||
|
// the country selector is in wrong container -> we need to move it
|
||
|
if(addressTypes[selectedCountry][i]['fid']!=tmp.closest('[data-addr-fid]').attr('data-addr-fid'))
|
||
|
$(addressElement).find('[data-addr-fid="'+jqueryEscapeSelector(addressTypes[selectedCountry][i]['fid'])+'"]').append(tmp);
|
||
|
}
|
||
|
|
||
|
// set address country "update" hook
|
||
|
if(typeof(globalContactsExtAddrElemAfterUpdate)=='function')
|
||
|
globalContactsExtAddrElemAfterUpdate(addressElement, addressTypes[selectedCountry][i]);
|
||
|
}
|
||
|
|
||
|
// hide the unused fields by changing the CSS
|
||
|
addressElement.find('[data-type="container"]').each(
|
||
|
function(index,element)
|
||
|
{
|
||
|
var found=0;
|
||
|
$(element).find('[data-addr-field]').each(
|
||
|
function(index,element)
|
||
|
{
|
||
|
if($(element).attr('data-addr-field')!='')
|
||
|
{
|
||
|
found=1;
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
|
||
|
if(found)
|
||
|
$(element).removeClass('element_no_display_af');
|
||
|
else
|
||
|
$(element).addClass('element_no_display_af');
|
||
|
}
|
||
|
);
|
||
|
|
||
|
// CUSTOM PLACEHOLDER (reinitialization due to possible placeholder value change)
|
||
|
addressElement.find('input[data-type="value"][placeholder],textarea[data-type="value"][placeholder]').placeholder();
|
||
|
}
|
||
|
|
||
|
function add_element(inputElementID, inputParentSelector, newElementSelector, inputAddClassSelector, inputDelClassSelector, newElementID) // note: newElementSelector is always used with .last()
|
||
|
{
|
||
|
// we assume that the new element is inputElementID.parent() to minimize then number of selectors!
|
||
|
var newElement=inputElementID.parent().clone().wrap('<div>'); // wrap('<div>') is used because we use .find() which not searches the "self"
|
||
|
// disable the "add" button on the current element (do not move above)
|
||
|
inputElementID.filter(inputAddClassSelector).css('visibility', 'hidden');
|
||
|
|
||
|
// CUSTOM PLACEHOLDER
|
||
|
// remove the "placeholder" data (custom placeholder label for IE)
|
||
|
newElement.find('label').remove();
|
||
|
newElement.find('[data-type="date_value"],[data-type="value"]').removeAttr('id', '').removeClass('placeholder-input');
|
||
|
|
||
|
// unselect each selected element
|
||
|
newElement.find('option').prop('selected', false);
|
||
|
// remove the form values
|
||
|
newElement.find('[data-type$="value"], [data-type$="date_value"]').val('');
|
||
|
// hide custom types
|
||
|
newElement.find('[data-type="custom_span"]').css('display', 'none');
|
||
|
// get the current data-id value
|
||
|
var prevID=newElement.attr("data-id");
|
||
|
// add the new data-id value
|
||
|
newElement.attr("data-id", newElementID);
|
||
|
|
||
|
// add element "before insert" hook
|
||
|
if(typeof(globalContactsExtAddElemBeforeInsert)=='function')
|
||
|
globalContactsExtAddElemBeforeInsert(newElement);
|
||
|
|
||
|
// add the new element (with enabled "add" button) + store the reference to the current element
|
||
|
var tmpRef=inputElementID.parent().after(newElement);
|
||
|
// enable the "del" button on this and the previous element
|
||
|
tmpRef.next().addBack().find(inputDelClassSelector).css('visibility', '');
|
||
|
|
||
|
// now we need a reference to the new element
|
||
|
var tmpRef=tmpRef.next();
|
||
|
// CUSTOM PLACEHOLDER
|
||
|
// enable custom placeholder support (it is enabled only if needed)
|
||
|
tmpRef.find('input[data-type="value"][placeholder], input[data-type="date_value"][placeholder],textarea[data-type="value"][placeholder]').placeholder();
|
||
|
|
||
|
// enable autosize for textarea elements
|
||
|
tmpRef.find('textarea[data-type="value"]').autosize({defaultStyles: {height: '64', overflow: '', 'overflow-y': '', 'word-wrap': '', resize: 'none'}, callback: function(){checkContactFormScrollBar();}});
|
||
|
|
||
|
//bind datepicker
|
||
|
if(tmpRef.find('input[data-type="date_value"]').hasClass('hasDatepicker'))
|
||
|
tmpRef.find('input[data-type="date_value"]').removeClass('hasDatepicker');
|
||
|
if(tmpRef.find('input[data-type="date_value"]').parent().find('img').css('display')!='none')
|
||
|
tmpRef.find('input[data-type="date_value"]').parent().find('img').css('display','none')
|
||
|
tmpRef.find('input[data-type="date_value"]').focus(function(){initDatePicker($(this));});
|
||
|
|
||
|
// bind events
|
||
|
var tmp_arr=['[data-type="\\%phone"]', '[data-type="\\%email"]', '[data-type="\\%url"]', '[data-type="\\%date"]', '[data-type="\\%person"]', '[data-type="\\%im"]', '[data-type="\\%profile"]', '[data-type="\\%address"]'];
|
||
|
if(tmp_arr.indexOf(inputParentSelector)!=-1)
|
||
|
{
|
||
|
|
||
|
tmpRef.find('[data-type="\\%add"] input').data('customSelector', inputParentSelector).click(function(){add_element($(this).parent(), $(this).data('customSelector'), $(this).data('customSelector'), '[data-type="\\%add"]','[data-type="\\%del"]', globalABEditorCounter[$(this).data('customSelector')]++);checkContactFormScrollBar();});
|
||
|
tmpRef.find('[data-type="\\%del"] input').data('customSelector', inputParentSelector).click(function(){del_element($(this).parent(), $(this).data('customSelector'), '[data-type="\\%add"]','[data-type="\\%del"]');checkContactFormScrollBar();});
|
||
|
if(typeof globalContactAutoExpand=='undefined' || globalContactAutoExpand!=false)
|
||
|
{
|
||
|
tmpRef.find('input[type="text"]').bind('keyup', function() {
|
||
|
var el = $(this);
|
||
|
var row = el.closest('tr[data-type^="%"]');
|
||
|
var isLast = row.attr('data-type')!==row.next().attr('data-type');
|
||
|
|
||
|
if(isLast && el.val()) {
|
||
|
row.find('[data-type="\\%add"] input').trigger('click');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
// one special thing for address
|
||
|
if(inputParentSelector=='[data-type="\\%address"]' && tmpRef.attr('data-type')=='%address')
|
||
|
tmpRef.find('[data-type="country_type"]').change(function(){set_address_country(this);checkContactFormScrollBar();});
|
||
|
}
|
||
|
|
||
|
if(inputParentSelector=='[data-type="\\%address"]')
|
||
|
{
|
||
|
// execute the "autoselect"
|
||
|
var tmp=inputElementID.closest(inputParentSelector).next();
|
||
|
var tmp_select=tmp.find('[data-autoselect]').attr('data-autoselect');
|
||
|
if(tmp_select!=null)
|
||
|
{
|
||
|
tmp.find('[data-type="country_type"]').children('[data-type="'+jqueryEscapeSelector(tmp_select)+'"]').prop('selected', true);
|
||
|
tmp.find('[data-autoselect]').change();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
tmpRef.find('[data-type="custom_value"]').bind('keyup change', function(){
|
||
|
$(this).parent().find('[data-type="invalid"]').css('display', (vCard.pre['custom_type'].test($(this).val()) ? 'none' : 'inline'));
|
||
|
});
|
||
|
|
||
|
if(typeof(globalContactsExtAddElemAfterInsert)=='function')
|
||
|
globalContactsExtAddElemAfterInsert(tmpRef, inputDelClassSelector, prevID);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function del_element(inputElementID, inputParentSelector, inputAddClassSelector, inputDelClassSelector)
|
||
|
{
|
||
|
// all elements except the last can be removed
|
||
|
if(inputElementID.closest(inputParentSelector).siblings(inputParentSelector).length>0)
|
||
|
{
|
||
|
inputElementID.closest(inputParentSelector).remove();
|
||
|
// enable the "add" button on last element
|
||
|
$(inputParentSelector).last().find(inputAddClassSelector).css('visibility', '');
|
||
|
// hide the "del" button if only one element is present (we maybe change this in future)
|
||
|
if($(inputParentSelector).length==1)
|
||
|
$(inputParentSelector).last().find(inputDelClassSelector).css('visibility', 'hidden');
|
||
|
}
|
||
|
else // currently not used because the "-" button is hidden on the last element (we maybe change this in future)
|
||
|
inputElementID.closest(inputParentSelector).find('input[data-type="value"]').val('');
|
||
|
}
|
||
|
|
||
|
/* BEGIN image manipulation */
|
||
|
function process_image(event)
|
||
|
{
|
||
|
event.stopPropagation();
|
||
|
event.preventDefault();
|
||
|
|
||
|
// allow image manipulation only if the editor is in "edit" state
|
||
|
if($('#vCardEditor').attr('data-editor-state')!="edit")
|
||
|
return false;
|
||
|
|
||
|
if(typeof event.originalEvent.dataTransfer!='undefined')
|
||
|
var files=event.originalEvent.dataTransfer.files; // fileList object from drag&drop
|
||
|
else
|
||
|
var files=event.originalEvent.target.files; // fileList object from input type file
|
||
|
|
||
|
// files is a FileList of File objects. List some properties.
|
||
|
for(var i=0;i<files.length;i++) // we handle only the first picture here ... (see below)
|
||
|
{
|
||
|
// only process image files
|
||
|
if(!files[i].type.match(/image/i))
|
||
|
continue;
|
||
|
|
||
|
// do not accept images bigger than 64KiB
|
||
|
// if(files[i].size>65536)
|
||
|
// continue;
|
||
|
|
||
|
// show the image "delete" button
|
||
|
$('#reset_img').css('display', 'inline');
|
||
|
// remove the template related to previous image (start with clean one)
|
||
|
vCard.tplM['contentline_PHOTO'][0]=null;
|
||
|
|
||
|
var reader=new FileReader();
|
||
|
// closure to capture the file information.
|
||
|
reader.onload=(function(theFile){
|
||
|
return function(e){
|
||
|
//escape(files[i].name), files[i].type, files[i].size, files[i].lastModifiedDate
|
||
|
var newImg=new Image();
|
||
|
newImg.src=e.target.result;
|
||
|
newImg.onload=function(){
|
||
|
loadImage(this);
|
||
|
};
|
||
|
};
|
||
|
})(files[i]);
|
||
|
|
||
|
reader.readAsDataURL(files[i]);
|
||
|
break; // we handle only the first picture here ...
|
||
|
}
|
||
|
|
||
|
$('#photoURL, #photoURLHidden').val('');
|
||
|
}
|
||
|
/* END image manipulation */
|
||
|
|
||
|
|
||
|
function hideNotVisibleMessage()
|
||
|
{
|
||
|
globalAddressbookList.contactToReload=null;
|
||
|
animate_message('#ABInMessageEditBox', '#ABInMessageTextEditBox', 0, '-=');
|
||
|
$('#ABInMessageEditBox').css('display','');
|
||
|
}
|
||
|
|
||
|
function initSearchCardDav()
|
||
|
{
|
||
|
if(globalQs==null)
|
||
|
{
|
||
|
$('#SearchBox').find('input[data-type="search"]').keyup(function(){
|
||
|
globalAddressbookList.contactToReload=null
|
||
|
});
|
||
|
globalQs=$('#SearchBox').find('input[data-type="search"]').quicksearch(globalAddressbookList.contacts,
|
||
|
{
|
||
|
delay: 250,
|
||
|
hide: function(){
|
||
|
var tmp=$(this)[0];
|
||
|
if(!tmp.headerOnly)
|
||
|
tmp.search_hide=true;
|
||
|
},
|
||
|
show: function(){
|
||
|
var tmp=$(this)[0];
|
||
|
if(!tmp.headerOnly)
|
||
|
tmp.search_hide=false;
|
||
|
},
|
||
|
prepareQuery: function (val){
|
||
|
return val.multiReplace(globalSearchTransformAlphabet).toLowerCase().split(' ');
|
||
|
},
|
||
|
onBefore: function(){
|
||
|
if($('#SearchBox').find('input[data-type="search"]').val()=='')
|
||
|
$('#SearchBox').find('img[data-type="reset"]').css('display','none');
|
||
|
else
|
||
|
$('#SearchBox').find('img[data-type="reset"]').css('display','');
|
||
|
},
|
||
|
onAfter: function(){
|
||
|
globalAddressbookList.applyABFilter(dataGetChecked('#ResourceCardDAVList'),false);
|
||
|
// XXX maybe this was the reason for data-filter-url?
|
||
|
// globalAddressbookList.applyABFilter(globalRefAddContact.attr('data-filter-url'),false);
|
||
|
|
||
|
// maybe useful for somebody
|
||
|
// if((selected_contact=globalRefABListTable.find('.ablist_item_selected')).length==1)
|
||
|
// globalRefABList.scrollTop(globalRefABList.scrollTop()+selected_contact.offset().top-globalRefABList.offset().top-globalRefABList.height()*globalKBNavigationPaddingRate);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function initKbAddrNavigation()
|
||
|
{
|
||
|
$(document.documentElement).keyup(function(event)
|
||
|
{
|
||
|
if(typeof globalActiveApp=='undefined' || globalActiveApp!='CardDavMATE')
|
||
|
return true;
|
||
|
|
||
|
if(globalActiveApp=='CardDavMATE' && globalObjectLoading==true)
|
||
|
{
|
||
|
event.preventDefault();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//if($('#SystemCardDavMATE').css('display')!='none' && $('#ABListLoader').css('display')=='none' && $('#ABListOverlay').css('display')=='none' && !$('input[data-type="search"]').is(':focus'))
|
||
|
/* XXX - System display:none changes */
|
||
|
if($('#SystemCardDavMATE').css('visibility')!='hidden' && isCardDAVLoaded && $('#ABListOverlay').css('display')=='none' && !$('input[data-type="search"]').is(':focus'))
|
||
|
{
|
||
|
// 37 = left, 38 = up, 39 = right, 40 = down
|
||
|
var selected_contact=null, next_contact=null;
|
||
|
if((selected_contact=globalRefABListTable.find('.ablist_item_selected')).length==1)
|
||
|
{
|
||
|
if(event.keyCode == 38 && (next_contact=selected_contact.prevAll('.ablist_item').filter(':visible').first()).attr('data-id')!=undefined || event.keyCode == 40 && (next_contact=selected_contact.nextAll('.ablist_item').filter(':visible').first()).attr('data-id')!=undefined)
|
||
|
globalAddressbookList.loadContactByUID(next_contact.attr('data-id'));
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
$(document.documentElement).keydown(function(event)
|
||
|
{
|
||
|
if(typeof globalActiveApp=='undefined' || globalActiveApp!='CardDavMATE')
|
||
|
return true;
|
||
|
|
||
|
if(globalActiveApp=='CardDavMATE' && globalObjectLoading==true)
|
||
|
{
|
||
|
event.preventDefault();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//if($('#SystemCardDavMATE').css('display')!='none' && $('#ABListLoader').css('display')=='none' && $('#ABListOverlay').css('display')=='none' && !$('input[data-type="search"]').is(':focus'))
|
||
|
/* XXX - System display:none changes */
|
||
|
if($('#SystemCardDavMATE').css('visibility')!='hidden' && isCardDAVLoaded && $('#ABListOverlay').css('display')=='none' && !$('input[data-type="search"]').is(':focus'))
|
||
|
{
|
||
|
// 37 = left, 38 = up, 39 = right, 40 = down
|
||
|
var selected_contact=null, next_contact=null;
|
||
|
if((selected_contact=globalRefABListTable.find('.ablist_item_selected')).length==1)
|
||
|
{
|
||
|
var wrapperRef = $('.ablist_table_wrapper');
|
||
|
|
||
|
if(event.keyCode == 38 && (next_contact=selected_contact.prevAll('.ablist_item').filter(':visible').first()).attr('data-id')!=undefined || event.keyCode == 40 && (next_contact=selected_contact.nextAll('.ablist_item').filter(':visible').first()).attr('data-id')!=undefined)
|
||
|
{
|
||
|
switch(event.keyCode)
|
||
|
{
|
||
|
case 38:
|
||
|
event.preventDefault();
|
||
|
if(wrapperRef.scrollTop()>wrapperRef.scrollTop()+next_contact.offset().top-wrapperRef.offset().top-wrapperRef.height()*globalKBNavigationPaddingRate)
|
||
|
wrapperRef.scrollTop(wrapperRef.scrollTop()+next_contact.offset().top-wrapperRef.offset().top-wrapperRef.height()*globalKBNavigationPaddingRate);
|
||
|
else if(wrapperRef.scrollTop()<wrapperRef.scrollTop()+next_contact.offset().top+next_contact.height()-wrapperRef.offset().top-wrapperRef.height()*(1-globalKBNavigationPaddingRate)) /* contact invisible (scrollbar moved) */
|
||
|
wrapperRef.scrollTop(wrapperRef.scrollTop()+next_contact.offset().top+next_contact.height()-wrapperRef.offset().top-wrapperRef.height()*(1-globalKBNavigationPaddingRate));
|
||
|
else
|
||
|
return false;
|
||
|
break;
|
||
|
case 40:
|
||
|
event.preventDefault();
|
||
|
if(wrapperRef.scrollTop()<wrapperRef.scrollTop()+next_contact.offset().top+next_contact.height()-wrapperRef.offset().top-wrapperRef.height()*(1-globalKBNavigationPaddingRate)) /* contact invisible (scrollbar moved) */
|
||
|
wrapperRef.scrollTop(wrapperRef.scrollTop()+next_contact.offset().top+next_contact.height()-wrapperRef.offset().top-wrapperRef.height()*(1-globalKBNavigationPaddingRate));
|
||
|
else if(wrapperRef.scrollTop()>wrapperRef.scrollTop()+next_contact.offset().top-wrapperRef.offset().top-wrapperRef.height()*globalKBNavigationPaddingRate)
|
||
|
wrapperRef.scrollTop(wrapperRef.scrollTop()+next_contact.offset().top-wrapperRef.offset().top-wrapperRef.height()*globalKBNavigationPaddingRate);
|
||
|
else
|
||
|
return false;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else // no previous contact and up pressed || no next contact and down pressed
|
||
|
{
|
||
|
switch(event.keyCode)
|
||
|
{
|
||
|
case 38:
|
||
|
wrapperRef.scrollTop(0);
|
||
|
break;
|
||
|
case 40:
|
||
|
wrapperRef.scrollTop(wrapperRef.prop('scrollHeight'));
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function initDatePicker(inputObject)
|
||
|
{
|
||
|
if(!inputObject.hasClass('hasDatepicker'))
|
||
|
{
|
||
|
inputObject.datepicker({
|
||
|
disabled: inputObject.prop('readonly') || inputObject.prop('disabled'),
|
||
|
showMonthAfterYear: true,
|
||
|
prevText: '',
|
||
|
nextText: '',
|
||
|
monthNamesShort: ['01','02','03','04','05','06','07','08','09','10','11','12'],
|
||
|
dateFormat: globalSettings.datepickerformat.value,
|
||
|
defaultDate: '-'+Math.round(30*365.25-1),
|
||
|
minDate: '-120y',
|
||
|
maxDate: '+0',
|
||
|
yearRange: 'c-120:+0',
|
||
|
firstDay: globalSettings.datepickerfirstdayofweek.value,
|
||
|
weekendDays: globalSettings.weekenddays.value,
|
||
|
changeMonth: true,
|
||
|
changeYear: true,
|
||
|
showAnim: '',
|
||
|
afterUpdate: function(inst)
|
||
|
{
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
// IE and FF datepicker selectbox problem fix
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var calendar=inst.dpDiv;
|
||
|
setTimeout(function(){
|
||
|
if($.browser.msie && parseInt($.browser.version, 10)==10) /* IE 10 */
|
||
|
calendar.find('select').css({'padding-top': '1px', 'padding-left': '0px', 'padding-right': '0px'});
|
||
|
|
||
|
var newSVG=$(SVG_select).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
calendar.find('select').after($($('<div>').append($(newSVG).clone()).html()));
|
||
|
},1);
|
||
|
}
|
||
|
else if(navigator.platform.toLowerCase().indexOf('win')==0 && $.browser.webkit && !!window.chrome) /* Chrome on Windows */
|
||
|
{
|
||
|
var calendar=inst.dpDiv;
|
||
|
setTimeout(function(){ calendar.find('select').css({'padding-left': '0px', 'padding-right': '13px'}); },1);
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
},
|
||
|
beforeShow: function(input, inst) // set the datepicker value if the date is out of range (min/max)
|
||
|
{
|
||
|
inst.dpDiv.removeClass('ui-datepicker-simple');
|
||
|
|
||
|
var valid=true;
|
||
|
try {var currentDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, inputObject.val())}
|
||
|
catch (e) {valid=false}
|
||
|
|
||
|
if(valid==true && currentDate!=null)
|
||
|
{
|
||
|
var minDateText=inputObject.datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'minDate');
|
||
|
var maxDateText=inputObject.datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'maxDate');
|
||
|
|
||
|
var minDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, minDateText);
|
||
|
var maxDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, maxDateText);
|
||
|
|
||
|
if(currentDate<minDate)
|
||
|
inputObject.val(minDateText);
|
||
|
else if(currentDate>maxDate)
|
||
|
inputObject.val(maxDateText);
|
||
|
}
|
||
|
|
||
|
// Timepicker hack (prevent IE to re-open the datepicker on date click + focus)
|
||
|
var index=inputObject.attr("data-type");
|
||
|
var d = new Date();
|
||
|
if(globalTmpTimePickerHackTime[index]!=undefined && d.getTime()-globalTmpTimePickerHackTime[index]<200)
|
||
|
return false;
|
||
|
},
|
||
|
onClose: function(dateText, inst) // set the datepicker value if the date is out of range (min/max) and reset the value to proper format (for example 'yy-mm-dd' allows '2000-1-1' -> we need to reset the value to '2000-01-01')
|
||
|
{
|
||
|
var valid=true;
|
||
|
try {var currentDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, dateText)}
|
||
|
catch (e) {valid=false}
|
||
|
|
||
|
if(valid==true && currentDate!=null)
|
||
|
{
|
||
|
var minDateText=inputObject.datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'minDate');
|
||
|
var maxDateText=inputObject.datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'maxDate');
|
||
|
|
||
|
var minDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, minDateText);
|
||
|
var maxDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, maxDateText);
|
||
|
|
||
|
if(currentDate<minDate)
|
||
|
inputObject.val(minDateText);
|
||
|
else if(currentDate>maxDate)
|
||
|
inputObject.val(maxDateText);
|
||
|
else
|
||
|
inputObject.val($.datepicker.formatDate(globalSettings.datepickerformat.value, currentDate));
|
||
|
}
|
||
|
|
||
|
// Timepicker hack (prevent IE to re-open the datepicker on date click + focus)
|
||
|
var index=inputObject.attr("data-type");
|
||
|
var d = new Date();
|
||
|
globalTmpTimePickerHackTime[index]=d.getTime();
|
||
|
|
||
|
inputObject.focus();
|
||
|
|
||
|
if(inputObject.closest('tr').attr('data-attr-name')==='X-ABDATE') {
|
||
|
inputObject.trigger('keyup');
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
inputObject.mousedown(function(){
|
||
|
if(inputObject.datepicker('widget').css('display')=='none')
|
||
|
inputObject.datepicker('show');
|
||
|
else
|
||
|
inputObject.datepicker('hide');
|
||
|
});
|
||
|
|
||
|
inputObject.on('keydown', function(event){
|
||
|
// show datepicker on keydown (up/down/left/right) but only if it not causes cursor position move
|
||
|
if(this.selectionStart!=undefined && this.selectionStart!=-1)
|
||
|
if(((event.which==38 || event.which==37) && this.selectionStart==0) || ((event.which==40 || event.which==39) && this.selectionStart==$(this).val().length))
|
||
|
{
|
||
|
if(inputObject.datepicker('widget').css('display')=='none')
|
||
|
inputObject.datepicker('show');
|
||
|
else
|
||
|
inputObject.datepicker('hide');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
inputObject.blur(function(event){
|
||
|
// handle onblur event because datepicker can be already closed
|
||
|
// note: because onblur is called more than once we can handle it only if there is a value change!
|
||
|
var valid=true;
|
||
|
try {var currentDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, inputObject.val())}
|
||
|
catch (e) {valid=false}
|
||
|
|
||
|
if(valid==true && inputObject.val()!=$.datepicker.formatDate(globalSettings.datepickerformat.value, currentDate))
|
||
|
{
|
||
|
var minDateText=inputObject.datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'minDate');
|
||
|
var maxDateText=inputObject.datepicker('option', 'dateFormat', globalSettings.datepickerformat.value).datepicker('option', 'maxDate');
|
||
|
|
||
|
var minDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, minDateText);
|
||
|
var maxDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, maxDateText);
|
||
|
|
||
|
if(currentDate<minDate)
|
||
|
inputObject.val(minDateText);
|
||
|
else if(currentDate>maxDate)
|
||
|
inputObject.val(maxDateText);
|
||
|
else
|
||
|
inputObject.val($.datepicker.formatDate(globalSettings.datepickerformat.value, currentDate));
|
||
|
}
|
||
|
});
|
||
|
|
||
|
inputObject.on('keyup change', function(){
|
||
|
if(!$(this).prop('readonly') && !$(this).prop('disabled'))
|
||
|
{
|
||
|
var valid=true;
|
||
|
|
||
|
if($(this).val()!='')
|
||
|
{
|
||
|
try {$.datepicker.parseDate(globalSettings.datepickerformat.value, $(this).val())}
|
||
|
catch (e) {valid=false}
|
||
|
}
|
||
|
|
||
|
if(valid)
|
||
|
$(this).parent().find('img').css('display','none');
|
||
|
else
|
||
|
$(this).parent().find('img').css('display','inline');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// show the datepicker after the initialization
|
||
|
inputObject.datepicker('show');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function checkForVcardGroups(contactUID)
|
||
|
{
|
||
|
if($('#vCardEditor').attr('data-url')==contactUID)
|
||
|
{
|
||
|
var collUID= contactUID.replace(RegExp('[^/]*$'),'');
|
||
|
var select_elem=$('#vCardEditor').find('[data-attr-name="_DEST_"]').find('[data-type="'+jqueryEscapeSelector(collUID)+'"]');
|
||
|
if(select_elem.length==1)
|
||
|
{
|
||
|
var vGroupC = globalAddressbookList.getMyContactGroups(contactUID).length;
|
||
|
if(vGroupC>1)
|
||
|
select_elem.text(localization[globalInterfaceLanguage].txtVcardGroupsTextMulti.replace('%coll%',globalResourceCardDAVList.getCollectionByUID(collUID).displayvalue).replace('%n%',vGroupC));
|
||
|
else if(vGroupC==1)
|
||
|
select_elem.text(localization[globalInterfaceLanguage].txtVcardGroupsTextSingle.replace('%coll%',globalResourceCardDAVList.getCollectionByUID(collUID).displayvalue));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function checkContactFormScrollBar()
|
||
|
{
|
||
|
var baseWidth = 582;
|
||
|
var scrollWidth = $('#EditorBox').length ? $('#ABContact').outerWidth() - $('#EditorBox').outerWidth() : 0;
|
||
|
var previousWidth = parseInt($('#ABList').css('right'), 10);
|
||
|
var newWidth = baseWidth+scrollWidth;
|
||
|
|
||
|
if(previousWidth===newWidth)
|
||
|
return true;
|
||
|
|
||
|
$('.collection_d, #SearchBox, #ABList').css('right', newWidth);
|
||
|
$('#ABListOverlay').css('right', newWidth+1);
|
||
|
$('.contact_d, #ABMessage, #ABContactOverlay').width(newWidth);
|
||
|
$('#ABContactColor').css('right', newWidth-3);
|
||
|
$('#ABContact').width(newWidth-3);
|
||
|
|
||
|
var columnLengths = [];
|
||
|
for(var i=0; i<getDataColumnCount(); i++) {
|
||
|
columnLengths.push([]);
|
||
|
}
|
||
|
|
||
|
globalRefABListTable.children('.ablist_item:visible').each(function() {
|
||
|
$(this).children().slice(globalFixedContactDataColumnsCount).each(function(ind) {
|
||
|
columnLengths[ind].push($(this).text().length);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
setDataColumnsWidth(columnLengths);
|
||
|
}
|
||
|
|
||
|
function extendDestSelect(selGroup)
|
||
|
{
|
||
|
if($('#vCardEditor').attr('data-editor-state')=='edit')
|
||
|
return false;
|
||
|
var dest = $('[data-attr-name="_DEST_"]');
|
||
|
$('#ExtendedDest').remove();
|
||
|
var extendedDest = $('<div id="ExtendedDest">');
|
||
|
var destSelected = dest.children(':selected');
|
||
|
var header = null;
|
||
|
var headerShown = false;
|
||
|
var currentGroups = typeof $('#vCardEditor').attr('data-vcard-uid')=='undefined' ? [] : globalAddressbookList.getMyContactGroups($('#vCardEditor').attr('data-url'));
|
||
|
|
||
|
dest.parent().after(extendedDest);
|
||
|
for(var i=0; i<globalResourceCardDAVList.collections.length; i++) {
|
||
|
var resource = globalResourceCardDAVList.collections[i];
|
||
|
if(typeof resource.headerOnly!='undefined' && resource.headerOnly) {
|
||
|
header = resource;
|
||
|
headerShown = false;
|
||
|
}
|
||
|
else if(typeof resource.makeLoaded!='undefined' && resource.makeLoaded) {
|
||
|
if(!headerShown) {
|
||
|
$('<div>').addClass('extended_dest_header').text(header.displayvalue).appendTo(extendedDest);
|
||
|
headerShown = true;
|
||
|
}
|
||
|
|
||
|
var itemEl = $('<div>').addClass('extended_dest_item');
|
||
|
var resourceEl = $('<div>').addClass('extended_dest_resource').text(resource.displayvalue);
|
||
|
var groupContEl = $('<div>').addClass('extended_dest_group_container');
|
||
|
|
||
|
$('<input>').attr({'type':'checkbox','data-id':resource.uid})
|
||
|
.prop('checked',resource.uid==destSelected.attr('data-type'))
|
||
|
.change(function(){
|
||
|
if($(this).prop('checked')) {
|
||
|
var newCollection = globalResourceCardDAVList.getCollectionByUID($(this).attr('data-id'));
|
||
|
$(this).parent().parent().siblings().find('input[type="checkbox"]').prop('checked',false);
|
||
|
dest.children('[data-type="'+newCollection.uid+'"]').prop('selected',true).text(newCollection.displayvalue);
|
||
|
$('#ABContactColor').css('background-color',newCollection.color);
|
||
|
}
|
||
|
else
|
||
|
$(this).prop('checked',true);
|
||
|
})
|
||
|
.prependTo(resourceEl);
|
||
|
$('<div>').addClass('extended_dest_resource_color').css('background-color',resource.color).prependTo(resourceEl);
|
||
|
|
||
|
for(var j=0; j<globalAddressbookList.vcard_groups[resource.uid].length; j++) {
|
||
|
var group = globalAddressbookList.vcard_groups[resource.uid][j];
|
||
|
var groupEl = $('<div>').addClass('extended_dest_group').text(group.displayvalue);
|
||
|
|
||
|
$('<input>').attr({'type':'checkbox','data-id':group.uid})
|
||
|
.prop('checked',currentGroups.indexOf(group.uid)!=-1 || typeof selGroup!= 'undefined' && selGroup==group.uid)
|
||
|
.change(function(){
|
||
|
var groupCount = $(this).parent().parent().find('input[type="checkbox"]:checked').length;
|
||
|
var newCollectionUID = $(this).parent().parent().prev().children('input[type="checkbox"]').attr('data-id');
|
||
|
var newCollection = globalResourceCardDAVList.getCollectionByUID(newCollectionUID);
|
||
|
if(groupCount>1)
|
||
|
dest.children('[data-type="'+newCollectionUID+'"]').text(localization[globalInterfaceLanguage].txtVcardGroupsTextMulti.replace('%coll%',newCollection.displayvalue).replace('%n%',groupCount));
|
||
|
else if(groupCount==1)
|
||
|
dest.children('[data-type="'+newCollectionUID+'"]').text(localization[globalInterfaceLanguage].txtVcardGroupsTextSingle.replace('%coll%',newCollection.displayvalue));
|
||
|
else
|
||
|
dest.children('[data-type="'+newCollectionUID+'"]').text(newCollection.displayvalue);
|
||
|
|
||
|
if($(this).prop('checked')) {
|
||
|
$(this).parent().parent().prev().children('input[type="checkbox"]').prop('checked',true);
|
||
|
$(this).parent().parent().parent().siblings().find('input[type="checkbox"]').prop('checked',false);
|
||
|
dest.children('[data-type="'+newCollectionUID+'"]').prop('selected',true);
|
||
|
$('#ABContactColor').css('background-color',newCollection.color);
|
||
|
}
|
||
|
})
|
||
|
.prependTo(groupEl);
|
||
|
$('<div>').addClass('extended_dest_group_color').css('background-color',group.color).prependTo(groupEl);
|
||
|
|
||
|
groupEl.appendTo(groupContEl);
|
||
|
}
|
||
|
|
||
|
resourceEl.appendTo(itemEl);
|
||
|
groupContEl.appendTo(itemEl);
|
||
|
itemEl.appendTo(extendedDest);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
dest.mousedown(function(e){
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
this.blur();
|
||
|
|
||
|
if(extendedDest.height()>0) {
|
||
|
dest.removeClass('inverse_select');
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var newSVG=$(SVG_select).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
dest.parent().find('svg[data-type="select_icon"]').replaceWith($('<div>').append($(newSVG).clone()).html());
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
extendedDest.animate({'height':0},200);
|
||
|
$('html').unbind('mousedown');
|
||
|
}
|
||
|
else {
|
||
|
dest.addClass('inverse_select');
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var newSVG=$(SVG_select_inv).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
dest.parent().find('svg[data-type="select_icon"]').replaceWith($('<div>').append($(newSVG).clone()).html());
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
extendedDest.animate({'height':164},200);
|
||
|
$('html').mousedown(function(e){
|
||
|
if(e.target.id=='ExtendedDest' || $.contains(document.getElementById('ExtendedDest'),e.target))
|
||
|
return true;
|
||
|
|
||
|
dest.removeClass('inverse_select');
|
||
|
/*************************** BAD HACKS SECTION ***************************/
|
||
|
if($.browser.msie || $.browser.mozilla)
|
||
|
{
|
||
|
var newSVG=$(SVG_select).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
|
||
|
dest.parent().find('svg[data-type="select_icon"]').replaceWith($('<div>').append($(newSVG).clone()).html());
|
||
|
}
|
||
|
/*************************** END OF BAD HACKS SECTION ***************************/
|
||
|
extendedDest.animate({'height':0},200);
|
||
|
$('html').unbind('mousedown');
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
$(document).on("mouseover", "#vCardEditor .ablist_item", function() {
|
||
|
if(!$(this).is('.ui-draggable') && (typeof globalDisableDragAndDrop=='undefined' || globalDisableDragAndDrop!=true))
|
||
|
{
|
||
|
$(this).draggable({
|
||
|
delay: 250,
|
||
|
revert: 'invalid',
|
||
|
scroll: false,
|
||
|
opacity: 0.8,
|
||
|
stack: '#SystemCardDavMATE',
|
||
|
containment: '#SystemCardDavMATE',
|
||
|
appendTo: 'body',
|
||
|
start: function( event, ui ){
|
||
|
// disallow on read-only collection
|
||
|
if(globalResourceCardDAVList.getCollectionPrivByUID($(this).attr('data-id').replace(RegExp('[^/]*$'),''))==true)
|
||
|
return false;
|
||
|
},
|
||
|
helper: function(){
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV.ui-droppable').droppable( 'option', 'accept', false);
|
||
|
$('#ResourceCardDAVList').find('.group.ui-droppable').droppable( 'option', 'accept', false);
|
||
|
|
||
|
$('#ResourceCardDAVList').find('.resourceCardDAV[data-id!='+jqueryEscapeSelector($(this).attr('data-id').replace(RegExp('[^/]+$'),''))+'].ui-droppable').droppable( 'option', 'accept', '.ablist_item');
|
||
|
var myContactGroups=globalAddressbookList.getMyContactGroups($(this).attr('data-id'));
|
||
|
$('#ResourceCardDAVList').find('.group[data-id^='+jqueryEscapeSelector($(this).attr('data-id').replace(RegExp('[^/]+$'),''))+'].ui-droppable').not('.resourceCardDAV_selected').each(function(index, element){
|
||
|
if(myContactGroups.indexOf($(element).attr('data-id'))==-1)
|
||
|
$(element).droppable( 'option', 'accept', '.ablist_item');
|
||
|
});
|
||
|
|
||
|
var tmp=$(this).clone();
|
||
|
tmp.addClass('ablist_item_dragged');
|
||
|
// we cannot use .css() here, because we need to add !important (problem with Gecko based browsers)
|
||
|
var tmp_style='max-width: '+$(this).outerWidth()+'px;';
|
||
|
if($(this).css('background-image')!='none')
|
||
|
tmp_style+='background-image: url(images/company_s_w.svg) !important;';
|
||
|
tmp.attr('style', tmp_style);
|
||
|
|
||
|
return tmp;
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
*/
|
||
|
|
||
|
function setDataColumnsWidth(cache) {
|
||
|
if(!globalRefABListTableCols && !globalRefABListInnerTableCols) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// remove gutter
|
||
|
$('.ablist_table_gutter').remove();
|
||
|
|
||
|
// clear old column widths
|
||
|
globalRefABListTableCols.width('');
|
||
|
globalRefABListInnerTableCols.width('');
|
||
|
|
||
|
// use cached column values to compute new column widths
|
||
|
var characterWidth = 9; // gross approximation
|
||
|
var lastColumn = null;
|
||
|
var lastInnerColumn = null;
|
||
|
var scrollWidth = $('.ablist_table_wrapper').innerWidth() - globalRefABListTable.outerWidth();
|
||
|
var reservedWidth = 0;
|
||
|
globalRefABListTable.children('.ablist_item').first().children().slice(0, globalFixedContactDataColumnsCount).each(function() {
|
||
|
reservedWidth += $(this).width();
|
||
|
});
|
||
|
var availableWidth;
|
||
|
var maxWidth;
|
||
|
availableWidth = maxWidth = globalRefABList.innerWidth() - reservedWidth - scrollWidth;
|
||
|
|
||
|
cache.every(function(lengths, index) {
|
||
|
// var maxLength = Math.max.apply(null, lengths);
|
||
|
lengths.sort(function(a, b) {
|
||
|
return a - b;
|
||
|
});
|
||
|
|
||
|
var maxLength = lengths[Math.max(Math.min(Math.ceil(lengths.length * globalContactDataMinVisiblePercentage), lengths.length) - 1, 0)];
|
||
|
var column = globalRefABListTableCols.eq(index + globalFixedContactDataColumnsCount);
|
||
|
var innerColumn = globalRefABListInnerTableCols.eq(index + globalFixedContactDataColumnsCount);
|
||
|
var columnWidth = Math.max(maxLength * characterWidth, getDataColumnMinWidthAtIndex(index));
|
||
|
|
||
|
// exit early if there is not enough space for the column
|
||
|
if(columnWidth > availableWidth) {
|
||
|
// if exiting at the very first column, mark it as the last visible one anyway
|
||
|
// this will ensure that it gets to occupy what width there is available later on
|
||
|
if(!lastColumn) {
|
||
|
lastColumn = column;
|
||
|
}
|
||
|
if(!lastInnerColumn) {
|
||
|
lastInnerColumn = innerColumn;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// dont show column if no data are present
|
||
|
if(columnWidth && lengths[lengths.length - 1]>0) {
|
||
|
lastColumn = column;
|
||
|
lastInnerColumn = innerColumn;
|
||
|
availableWidth -= columnWidth;
|
||
|
column.width(columnWidth);
|
||
|
innerColumn.width(columnWidth);
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
});
|
||
|
|
||
|
// set the last visible column to occupy the rest of the available table width
|
||
|
if(lastColumn && lastInnerColumn) {
|
||
|
lastColumn.width(lastColumn.width() + availableWidth);
|
||
|
lastInnerColumn.width(lastInnerColumn.width() + availableWidth);
|
||
|
|
||
|
// if scrollbar present, create gutter
|
||
|
if(scrollWidth) {
|
||
|
$('<col class="ablist_table_gutter">').width(scrollWidth).insertAfter(lastColumn);
|
||
|
$('<th class="ablist_table_gutter">').insertAfter($('.ablist_table_header').children().eq(lastColumn.index()));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getDataColumnCount() {
|
||
|
return globalSettings.collectiondisplay.value.length;
|
||
|
}
|
||
|
|
||
|
function isDataColumnDefined(column) {
|
||
|
var re = RegExp('(?:^|[^\\\\]){'+column+'(?:\\[.*?\\])*'+'}', 'i');
|
||
|
|
||
|
return globalSettings.collectiondisplay.value.some(function(col) {
|
||
|
if(col.hasOwnProperty('value')) {
|
||
|
var values = col.value;
|
||
|
|
||
|
if($.isPlainObject(values)) {
|
||
|
return values.company.some(function(value) {
|
||
|
return re.test(value)
|
||
|
}) || values.personal.some(function(value) {
|
||
|
return re.test(value)
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return values.some(function(value) {
|
||
|
return re.test(value)
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function getContactDataColumns(isCompany) {
|
||
|
return $.map(globalSettings.collectiondisplay.value, function(col) {
|
||
|
var value = col.value;
|
||
|
|
||
|
if($.isPlainObject(value)) {
|
||
|
if(isCompany && value.hasOwnProperty('company')) {
|
||
|
return [value.company];
|
||
|
}
|
||
|
if(!isCompany && value.hasOwnProperty('personal')) {
|
||
|
return [value.personal];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return [value];
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function getDataColumnLabelAtIndex(index) {
|
||
|
if(globalSettings.collectiondisplay.value[index].hasOwnProperty('label')) {
|
||
|
var label = globalSettings.collectiondisplay.value[index].label;
|
||
|
|
||
|
if($.isPlainObject(label)) {
|
||
|
return getDataColumnLabel(label[globalInterfaceLanguage] || '');
|
||
|
}
|
||
|
else {
|
||
|
return getDataColumnLabel(label);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getDataColumnLabel(formatString) {
|
||
|
var result = '';
|
||
|
var variableParts = null;
|
||
|
var re = RegExp('(?:^|[^\\\\])({(.*?[^\\\\])})');
|
||
|
|
||
|
while(variableParts = formatString.match(re)) {
|
||
|
var value = localization[globalInterfaceLanguage][globalContactDataColumnLabelVars[variableParts[2]]] || '';
|
||
|
formatString = formatString.replace(variableParts[1], value);
|
||
|
}
|
||
|
|
||
|
return formatString;
|
||
|
}
|
||
|
|
||
|
function getDataColumnMinWidthAtIndex(index) {
|
||
|
return 100;
|
||
|
}
|
||
|
|
||
|
function setContactDataColumn(contact, column, value, filterData) {
|
||
|
var column = column.toUpperCase();
|
||
|
|
||
|
if(globalContactDataColumnDefs.hasOwnProperty(column) && value) {
|
||
|
var property = globalContactDataColumnDefs[column].property;
|
||
|
|
||
|
if(!contact.hasOwnProperty(property)) {
|
||
|
contact[property] = [];
|
||
|
}
|
||
|
|
||
|
var data = {};
|
||
|
|
||
|
for(var name in filterData) {
|
||
|
var filterProperty = globalContactDataColumnDefs[column].filterProperities[name];
|
||
|
data[filterProperty] = filterData[name];
|
||
|
}
|
||
|
|
||
|
if($.isArray(value)) {
|
||
|
value = value.join(', ');
|
||
|
}
|
||
|
data.value = value;
|
||
|
|
||
|
contact[property].push(data);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function getContactDataColumn(contact, variables) {
|
||
|
var result = '';
|
||
|
var variableParts = null;
|
||
|
var re = RegExp('(?:^|[^\\\\])({(.*?[^\\\\])})');
|
||
|
|
||
|
variables.forEach(function(formatString) {
|
||
|
var matched = false;
|
||
|
|
||
|
while(variableParts = formatString.match(re)) {
|
||
|
var value = getContactDataColumnVariable(contact, variableParts[2]);
|
||
|
formatString = formatString.replace(variableParts[1], value);
|
||
|
matched = matched || value!=='';
|
||
|
}
|
||
|
|
||
|
if(matched) {
|
||
|
result += formatString;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
function getContactDataColumnVariable(contact, variable) {
|
||
|
var parts = variable.match(/^(.*?)(\[.*\])*$/);
|
||
|
var attr = parts[1].toUpperCase();
|
||
|
|
||
|
if(parts && attr && globalContactDataColumnDefs.hasOwnProperty(attr)) {
|
||
|
var property = globalContactDataColumnDefs[attr].property;
|
||
|
|
||
|
if(contact.hasOwnProperty(property)) {
|
||
|
var re = RegExp('\\[(.*?[^\\\\])\\]');
|
||
|
var numeral = 0;
|
||
|
var filterStr = parts[2] ? parts[2].toUpperCase() : '';
|
||
|
var filters = [];
|
||
|
var matches = contact[property];
|
||
|
|
||
|
while(filterStr) {
|
||
|
var match = filterStr.match(re);
|
||
|
|
||
|
if(match===null) {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
filters.push(match[1].replaceAll('\\[', '[').replaceAll('\\]', ']'));
|
||
|
filterStr = filterStr.replace(match[0], '');
|
||
|
}
|
||
|
|
||
|
filters.forEach(function(filterEl) {
|
||
|
if(filterEl[0]===':') {
|
||
|
numeral = parseInt(filterEl.slice(1), 10);
|
||
|
}
|
||
|
else {
|
||
|
var filterParts = filterEl.splitCustom('=');
|
||
|
var filterType = filterParts[0];
|
||
|
var filterValue = filterParts[1];
|
||
|
|
||
|
if(filterType && filterValue && globalContactDataColumnDefs[attr].hasOwnProperty('filterProperities') && globalContactDataColumnDefs[attr].filterProperities.hasOwnProperty(filterType)) {
|
||
|
var filterProperty = globalContactDataColumnDefs[attr].filterProperities[filterType];
|
||
|
|
||
|
matches = matches.filter(function(matchEl) {
|
||
|
return matchEl[filterProperty].indexOf(filterValue)>-1;
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if(!isNaN(numeral) && numeral>-1 && numeral<matches.length) {
|
||
|
return matches[numeral].value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
function getParamsFromContentlineParse(vcard, parsed, primaryParam, customParam, dataTypeRegister, preserveCase) {
|
||
|
var params = [];
|
||
|
|
||
|
if(primaryParam && parsed[3]) {
|
||
|
var parsed_paramArr = vcardSplitValue(parsed[3], ';');
|
||
|
|
||
|
parsed_paramArr.forEach(function(el) {
|
||
|
if(el) {
|
||
|
var elParts = el.split('=');
|
||
|
|
||
|
if(elParts[0].toUpperCase()===primaryParam) {
|
||
|
var val = elParts[1];
|
||
|
|
||
|
if(!preserveCase) {
|
||
|
val = val.toUpperCase();
|
||
|
}
|
||
|
|
||
|
params.push(humanizeVcardDataTypes(dataTypeRegister, val));
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
if(customParam && parsed[1]) {
|
||
|
var vcard_element_related = null;
|
||
|
var re = RegExp('\r\n'+parsed[1].replace('.','\\.'+customParam+':(.*)')+'\r\n', 'im');
|
||
|
while((vcard_element_related = vcard.match(re))!=null) {
|
||
|
var val = vcard_element_related[1];
|
||
|
|
||
|
if(!preserveCase) {
|
||
|
val = val.toUpperCase();
|
||
|
}
|
||
|
|
||
|
params.push(humanizeVcardDataTypes(dataTypeRegister, vcardUnescapeValue(val)));
|
||
|
vcard = vcard.replace(vcard_element_related[0], '\r\n');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return params;
|
||
|
}
|
||
|
|
||
|
function humanizeVcardDataTypes(register, type) {
|
||
|
if(register && dataTypes[register].hasOwnProperty(type.toLowerCase())) {
|
||
|
matched = type.match(/^_\$!<(.*)>!\$_$/i);
|
||
|
|
||
|
if(matched) {
|
||
|
return matched[1];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return type;
|
||
|
}
|
||
|
|
||
|
function showPhotoBox(e) {
|
||
|
if($('#photoBox').is(':visible'))
|
||
|
hidePhotoBox();
|
||
|
else
|
||
|
{
|
||
|
e.stopPropagation();
|
||
|
|
||
|
$('#photoArrow, #photoBox').css('display', 'block');
|
||
|
$('#photoURL').focus();
|
||
|
|
||
|
$('html').bind('click.photo', function(e) {
|
||
|
if(!$.contains(document.getElementById('photoBox'), e.target)) {
|
||
|
hidePhotoBox();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function hidePhotoBox() {
|
||
|
$('#photoURL').val($('#photoURLHidden').val());
|
||
|
$('#photoBoxContent').find('[data-type="invalid"]').css('display', 'none');
|
||
|
$('#photoURL').removeClass('invalid');
|
||
|
|
||
|
$('#photoBox').css('display','none');
|
||
|
$('#photoArrow').css('display','none');
|
||
|
$('html').unbind('click.photo');
|
||
|
}
|
||
|
// reorder countries according to localization (returns array becaouse object are unsorted according to ECMA)
|
||
|
function sortCountries(obj)
|
||
|
{
|
||
|
var arr=[];
|
||
|
for(var prop in obj)
|
||
|
if(obj.hasOwnProperty(prop))
|
||
|
arr.push({'key': prop, 'value': obj[prop], 'translated_value': localization[globalInterfaceLanguage]['txtAddressCountry'+prop.toUpperCase()]});
|
||
|
|
||
|
return arr.sort(function(a, b){return a.translated_value.customCompare(b.translated_value, globalSortAlphabet, 1, false)});
|
||
|
}
|