diff options
Diffstat (limited to 'radicale_web/web/infcloud/interface.js')
-rw-r--r-- | radicale_web/web/infcloud/interface.js | 7196 |
1 files changed, 0 insertions, 7196 deletions
diff --git a/radicale_web/web/infcloud/interface.js b/radicale_web/web/infcloud/interface.js deleted file mode 100644 index e5afb8d..0000000 --- a/radicale_web/web/infcloud/interface.js +++ /dev/null @@ -1,7196 +0,0 @@ -/* -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: String(CryptoJS.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=(globalContactPhotoScaleFactor===null ? image.width : canvas.width()*globalContactPhotoScaleFactor); - var canvasHeight=(globalContactPhotoScaleFactor===null ? image.height : 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"]').val('').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)}); -} |