aboutsummaryrefslogtreecommitdiff
path: root/radicale_infcloud/web/vtodo.js
diff options
context:
space:
mode:
Diffstat (limited to 'radicale_infcloud/web/vtodo.js')
-rw-r--r--radicale_infcloud/web/vtodo.js3531
1 files changed, 3531 insertions, 0 deletions
diff --git a/radicale_infcloud/web/vtodo.js b/radicale_infcloud/web/vtodo.js
new file mode 100644
index 0000000..b110975
--- /dev/null
+++ b/radicale_infcloud/web/vtodo.js
@@ -0,0 +1,3531 @@
+/*
+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 AppleSupportNextDateArray()
+{
+ this.nextDates={};
+ this.reset=function()
+ {
+ this.nextDates={};
+ };
+}
+
+function addAndEditTODO(deleteMode)
+{
+ var inputUID='';
+ if($('#uidTODO').val()!='')
+ var coll = globalResourceCalDAVList.getTodoCollectionByUID($('#uidTODO').val().substring(0, $('#uidTODO').val().lastIndexOf('/')+1));
+ else
+ var coll = globalResourceCalDAVList.getTodoCollectionByUID($('#todo_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($('#etagTODO').val()!='')
+ inputUID=$('#uidTODO').val();
+ else if($('#todo_calendar').val()!='choose')
+ inputUID=$('#todo_calendar').val()+'';
+ else
+ return false;
+
+ todoToVcalendar('EDIT',origUID, inputUID, $('#etagTODO').val(), '',deleteMode);
+}
+
+function interResourceEditTODO(operation, delUID)
+{
+ var inputUID='';
+ if($('#uidTODO').val()!='')
+ var coll = globalResourceCalDAVList.getTodoCollectionByUID($('#uidTODO').val().substring(0, $('#uidTODO').val().lastIndexOf('/')+1));
+ else
+ var coll = globalResourceCalDAVList.getTodoCollectionByUID($('#todo_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(operation != 'MOVE_IN')
+ $('#etagTODO').val('');
+ var srcUID=$('#uidTODO').val().substring($('#uidTODO').val().lastIndexOf('/')+1, $('#uidTODO').val().length);
+
+ inputUID=$('#todo_calendar').val()+srcUID;
+ todoToVcalendar(operation, origUID, inputUID, '', delUID, false);
+}
+
+function saveTodo(deleteMode)
+{
+ $('#todo_details_template').scrollTop(0);
+ var calUID=$('#uidTODO').val().substring(0, $('#uidTODO').val().lastIndexOf('/'));
+ var newUID=$('#todo_calendar').val().substring(0, $('#todo_calendar').val().length-1);
+ if($('#todo_details_template').find('img[data-type=invalidVerySmall],img[data-type=invalidSmall]').filter(function(){return this.style.display!='none'}).length>0)
+ {
+ show_editor_loader_messageCalendar('vtodo', 'message_error', localization[globalInterfaceLanguage].txtErorInputTodo);
+ return false;
+ }
+
+ if($('#todo_calendar').val()!='choose')
+ {
+ if($('#nameTODO').val()=='')
+ $('#name').val(localization[globalInterfaceLanguage].pholderNewTODO);
+
+ if($('#todo_type').val()=='start' || $('#todo_type').val()=='due' || $('#todo_type').val()=='both')
+ {
+ if($('#date_toTODO').val()!='' && $('#date_fromTODO').val()!='')
+ {
+ var a=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val());
+ var a2=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').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($('#time_fromTODO').val()!='' && $('#time_toTODO').val()!='')
+ {
+ time_from=new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val()));
+ time_from=$.fullCalendar.formatDate(time_from, 'HH:mm' );
+ time_to=new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val()));
+ time_to=$.fullCalendar.formatDate(time_to, 'HH:mm' );
+ }
+ if($('#todo_type').val()=='both' && $.fullCalendar.parseDate(datetime_from+'T'+time_from+'Z')>$.fullCalendar.parseDate(datetime_to+'T'+time_to+'Z'))
+ {
+ show_editor_loader_messageCalendar('vtodo', 'message_error', localization[globalInterfaceLanguage].txtErrorDatesTodo);
+ return false;
+ }
+ }
+
+ if($('#date_toTODO').val()!='' || $('#date_fromTODO').val()!='')
+ {
+ if(newUID==calUID || $('#etagTODO').val()=='')
+ addAndEditTODO(deleteMode);
+// else if(calUID.substring(0, calUID.lastIndexOf('/'))==newUID.substring(0, newUID.lastIndexOf('/')))
+// {
+// var delUID=$('#uidTODO').val();
+// interResourceEditTODO('MOVE_IN',delUID);
+// }
+ else if(/*calUID.substring(0, calUID.lastIndexOf('/'))!=newUID.substring(0, newUID.lastIndexOf('/')) && */$('#etagTODO').val()!='')
+ {
+ var delUID=$('#uidTODO').val();
+ interResourceEditTODO('MOVE_OTHER',delUID);
+ }
+ }
+ else
+ show_editor_loader_messageCalendar('vtodo', 'message_error', localization[globalInterfaceLanguage].txtDateTimeErrorTodo);
+ }
+ else
+ {
+ if((newUID==calUID) || ($('#etagTODO').val()==''))
+ addAndEditTODO(deleteMode);
+// else if(calUID.substring(0, calUID.lastIndexOf('/'))==newUID.substring(0, newUID.lastIndexOf('/')))
+// {
+// var delUID=$('#uidTODO').val();
+// interResourceEditTODO('MOVE_IN',delUID);
+// }
+ else if(/*calUID.substring(0, calUID.lastIndexOf('/'))!=newUID.substring(0, newUID.lastIndexOf('/')) && */ $('#etagTODO').val()!='')
+ {
+ var delUID=$('#uidTODO').val();
+ interResourceEditTODO('MOVE_OTHER',delUID);
+ }
+ }
+ }
+ else
+ show_editor_loader_messageCalendar('vtodo', 'message_error', localization[globalInterfaceLanguage].txtNotChooseTodo);
+}
+
+function deleteTodo()
+{
+ var delUID=$('#uidTODO').val();
+
+ if(delUID!='')
+ deleteVcalendarFromCollection(delUID,'vtodo');
+}
+
+function getRepeatTodoObject(inputRepeatObj)
+{
+ var appleTodoMode = false;
+ var tzArray=new Array();
+ var tzString='';
+ var isTimeZone=false;
+ var origTimezone = '';
+ var vCalendarText = inputRepeatObj.vCalendarText;
+ var sel_option = '';
+ var inputTodos=jQuery.grep(globalEventList.displayTodosArray[inputRepeatObj.rid],function(e){if(e.id==inputRepeatObj.uidTodo && ((globalSettings.appleremindersmode.value || e.repeatCount<2) || !e.repeatCount))return true});
+ if(globalSettings.appleremindersmode.value && inputTodos.length==1)
+ {
+ if(inputRepeatObj.recurrenceId!='' || inputRepeatObj.futureStart!='')
+ appleTodoMode = true;
+ }
+ for(var iE=0;iE<inputTodos.length;iE++)
+ {
+ if(tzArray.indexOf(inputTodos[iE].timeZone)==-1)
+ {
+ if(!appleTodoMode && inputRepeatObj.deleteMode && (inputRepeatObj.vcalendarHash==String(CryptoJS.SHA256(inputTodos[iE].vcalendar))))
+ continue;
+ var component=buildTimezoneComponent(inputTodos[iE].timeZone);
+ if(component!='' && (inputRepeatObj.vcalendarHash!=String(CryptoJS.SHA256(inputTodos[iE].vcalendar))))
+ {
+ tzArray[tzArray.length]=inputTodos[iE].timeZone;
+ tzString+=component;
+ if(tzString.lastIndexOf('\r\n')!=(tzString.length-2))
+ tzString+='\r\n';
+ isTimeZone=true;
+ }
+ else if(component!='' && (inputRepeatObj.vcalendarHash==String(CryptoJS.SHA256(inputTodos[iE].vcalendar))))
+ origTimezone+=component;
+ }
+ }
+ if(isTimeZone)
+ {
+ if(vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2))
+ vCalendarText+='\r\n';
+ vCalendarText+=tzString;
+ }
+
+ var newFirst = vCalendarText;
+ var origRepeatRule = '';
+ var realTodo='';
+ var origVcalendarString='';
+ var todoStringArray=new Array();
+ if(inputTodos.length>0)
+ {
+ var rid=inputRepeatObj.uidTodo.substring(0, inputRepeatObj.uidTodo.lastIndexOf('/')+1);
+ if(rid && globalEventList.todos[rid][inputRepeatObj.uidTodo].uid!=undefined)
+ origVcalendarString=globalEventList.todos[rid][inputRepeatObj.uidTodo].vcalendar;
+ while(origVcalendarString.match(vCalendar.pre['vtodo'])!=null)
+ {
+ if(origVcalendarString.substring(origVcalendarString.indexOf('BEGIN:VTODO')-2, origVcalendarString.indexOf('BEGIN:VTODO'))=='\r\n')
+ {
+ var partTodo=origVcalendarString.substring(origVcalendarString.indexOf('BEGIN:VTODO')-2,origVcalendarString.indexOf('END:VTODO')+'END:VTODO'.length);
+ origVcalendarString=origVcalendarString.replace(partTodo, '');
+ }
+ else
+ {
+ var partTodo=origVcalendarString.substring(origVcalendarString.indexOf('BEGIN:VTODO'),origVcalendarString.indexOf('END:VTODO')+'END:VTODO'.length);
+ origVcalendarString=origVcalendarString.replace(partTodo, '');
+ partTodo+='\r\n';
+ }
+ todoStringArray[todoStringArray.length]=partTodo;
+ }
+ }
+ var beginVcalendar = vCalendarText;
+ var futureMode = false;
+ for(var j=0;j<inputTodos.length;j++)
+ {
+ todoStringArray.splice(todoStringArray.indexOf(inputTodos[j].vcalendar),1);
+ if((inputRepeatObj.futureStart== '' && inputRepeatObj.vcalendarHash!=String(CryptoJS.SHA256(inputTodos[j].vcalendar))) || inputTodos[j].rec_id!=inputRepeatObj.recurrenceId)
+ {
+ var stringUIDcurrent=inputTodos[j].vcalendar.match(vCalendar.pre['contentline_UID']);
+ if(stringUIDcurrent!=null)
+ stringUIDcurrent=stringUIDcurrent[0].match(vCalendar.pre['contentline_parse'])[4];
+ if((inputRepeatObj.deleteMode && inputRepeatObj.vcalendarHash==String(CryptoJS.SHA256(inputTodos[j].vcalendar))) || (inputRepeatObj.deleteMode && !inputTodos[j].rec_id && inputRepeatObj.vcalendarUID==stringUIDcurrent) || appleTodoMode)
+ {
+ var ruleString=inputTodos[j].vcalendar.match(vCalendar.pre['contentline_RRULE2']);
+ var origRuleString=ruleString;
+ origRepeatRule = ruleString;
+ var exDate=inputTodos[j].start;
+ var process_elem=vCalendar.tplC['VTcontentline_EXDATE'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+
+ exDate=inputRepeatObj.recurrenceId.parseComnpactISO8601();
+
+ if(globalSettings.timezonesupport.value)
+ sel_option=inputRepeatObj.timezoneTODO;
+
+ if(sel_option!='local')
+ {
+ var valOffsetFrom=getOffsetByTZ(sel_option, exDate);
+ var intOffset = valOffsetFrom.getSecondsFromOffset()*-1;
+ exDate = new Date(exDate.setSeconds(intOffset));
+ }
+ else
+ exDate=new Date(exDate.setSeconds(getLocalOffset(exDate)));
+
+ exDate=$.fullCalendar.formatDate(exDate, "yyyyMMdd'T'HHmmss'Z'");
+ process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
+ process_elem=process_elem.replace('##:::##TZID##:::##','');
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(exDate));
+ if(inputTodos[j].finalString.length>2);
+ inputTodos[j].vcalendar=inputTodos[j].vcalendar.replace(ruleString,ruleString+(inputTodos[j].finalString.substring(2,inputTodos[j].finalString.length)));
+ if(!appleTodoMode)
+ inputTodos[j].vcalendar=inputTodos[j].vcalendar.replace(ruleString,ruleString+process_elem);
+ }
+ else
+ {
+ var endPart = (inputTodos[j].vcalendar+'\r\n').match(vCalendar.pre['endVTODO']);
+ if(endPart!=null)
+ {
+ if(inputTodos[j].finalString.length>2)
+ inputTodos[j].vcalendar=inputTodos[j].vcalendar.replace(endPart[0].substring(0,endPart[0].length-2),(inputTodos[j].finalString)+endPart[0].substring(2,endPart[0].length));
+ }
+ }
+
+ var origVcalendar = inputTodos[j].vcalendar;
+ if(appleTodoMode && typeof globalAppleSupport.nextDates[inputTodos[j].id] != 'undefined')
+ {
+ var startPart='',endPart='';
+ if(origVcalendar.match(vCalendar.pre['contentline_DTSTART'])!=null && origVcalendar.match(vCalendar.pre['contentline_DUE'])!=null)
+ {
+ startPart = origVcalendar.match(vCalendar.pre['contentline_DTSTART'])[0].match(vCalendar.pre['contentline_parse'])[4];
+ endPart = origVcalendar.match(vCalendar.pre['contentline_DUE'])[0].match(vCalendar.pre['contentline_parse'])[4];
+ }
+
+ var isUTC=false;
+ if(globalSettings.timezonesupport.value)
+ sel_option=inputRepeatObj.timezoneTODO;
+
+ if(sel_option=='UTC')
+ isUTC=true;
+
+ var newStart = new Date(globalAppleSupport.nextDates[inputTodos[j].id].getTime());
+ var valOffsetFrom=getOffsetByTZ(sel_option,newStart );
+ var intOffset='';
+ if(typeof globalSessionTimeZone!='undefined' && globalSessionTimeZone!=null && globalSessionTimeZone!='')
+ intOffset=getOffsetByTZ(globalSessionTimeZone, newStart).getSecondsFromOffset();
+ else
+ intOffset=newStart.getTimezoneOffset()*60*-1;
+
+ intOffset = valOffsetFrom.getSecondsFromOffset() - intOffset;
+
+ newStart.setSeconds(intOffset);
+ var datetime_to=$.fullCalendar.formatDate(newStart, "yyyyMMdd'T'HHmmss");
+ inputTodos[j].vcalendar = inputTodos[j].vcalendar.replace(endPart,vcalendarEscapeValue(datetime_to+(isUTC ? 'Z' : '')));
+ inputTodos[j].vcalendar = inputTodos[j].vcalendar.replace(startPart,vcalendarEscapeValue(datetime_to+(isUTC ? 'Z' : '')));
+ if(inputTodos[j].after!='')
+ inputTodos[j].vcalendar = changeRuleForFuture(inputTodos[j], inputTodos[j].after);
+ origVcalendar = inputTodos[j].vcalendar;
+ }
+
+ if(origVcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2))
+ vCalendarText+=origVcalendar.substring(2,origVcalendar.length);
+ else if((origVcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2)) || (origVcalendar.indexOf('\r\n')!=0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) )
+ vCalendarText+=origVcalendar;
+ else
+ vCalendarText+='\r\n'+origVcalendar;
+ }
+ else if(inputRepeatObj.futureStart.split(';')[0]!='' && inputRepeatObj.futureStart.split(';')[1]!=inputTodos[j].start && inputRepeatObj.futureStart.split(';')[1]!=inputTodos[j].end)
+ {
+ var ruleString=inputTodos[j].vcalendar.match(vCalendar.pre['contentline_RRULE2']);
+ if(inputTodos[j].finalString.length>2);
+ inputTodos[j].vcalendar=inputTodos[j].vcalendar.replace(ruleString,ruleString+(inputTodos[j].finalString.substring(2,inputTodos[j].finalString.length)));
+ if(inputRepeatObj.futureStart.split(';')[0]>1 && inputRepeatObj.vcalendarHash==String(CryptoJS.SHA256(inputTodos[j].vcalendar)))
+ inputTodos[j].vcalendar=changeRuleForFuture(inputTodos[j], inputRepeatObj.futureStart.split(';')[0]);
+ if(inputTodos[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2))
+ vCalendarText+=inputTodos[j].vcalendar.substring(2,inputTodos[j].vcalendar.length);
+ else if((inputTodos[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2)) || (inputTodos[j].vcalendar.indexOf('\r\n')!=0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) )
+ vCalendarText+=inputTodos[j].vcalendar;
+ else
+ vCalendarText+='\r\n'+inputTodos[j].vcalendar;
+ futureMode=true;
+ }
+ else if(inputRepeatObj.deleteMode && inputRepeatObj.futureStart.split(';')[0]!='' && (inputRepeatObj.futureStart.split(';')[1]==inputTodos[j].start || inputRepeatObj.futureStart.split(';')[1]==inputTodos[j].end))
+ {
+ var ruleString=inputTodos[j].vcalendar.match(vCalendar.pre['contentline_RRULE2']);
+ if(inputTodos[j].finalString.length>2);
+ inputTodos[j].vcalendar=inputTodos[j].vcalendar.replace(ruleString,ruleString+(inputTodos[j].finalString.substring(2,inputTodos[j].finalString.length)));
+
+ if(inputRepeatObj.vcalendarHash==String(CryptoJS.SHA256(inputTodos[j].vcalendar)))
+ inputTodos[j].vcalendar=changeRuleForFuture(inputTodos[j], 2);
+ if(inputTodos[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2))
+ vCalendarText+=inputTodos[j].vcalendar.substring(2,inputTodos[j].vcalendar.length);
+ else if((inputTodos[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2)) || (inputTodos[j].vcalendar.indexOf('\r\n')!=0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) )
+ vCalendarText+=inputTodos[j].vcalendar;
+ else
+ vCalendarText+='\r\n'+inputTodos[j].vcalendar;
+ }
+ else
+ realTodo=inputTodos[j];
+ }
+ vCalendarText=vCalendarText.replace(realTodo.vcalendar,'');
+
+ if(!appleTodoMode)
+ for(var ip=0; ip<todoStringArray.length;ip++)
+ {
+ if(todoStringArray[ip].indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2))
+ vCalendarText+=todoStringArray[ip].substring(2,todoStringArray[ip].length);
+ else if((todoStringArray[ip].indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2)) || (todoStringArray[ip].indexOf('\r\n')!=0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) )
+ vCalendarText+=todoStringArray[ip];
+ else
+ vCalendarText+='\r\n'+todoStringArray[ip];
+ }
+ return {
+ tzArray:tzArray,
+ tzString:tzString,
+ isTimeZone:isTimeZone,
+ origTimezone:origTimezone,
+ vCalendarText:vCalendarText,
+ realTodo:realTodo,
+ sel_option: sel_option,
+ futureMode:futureMode,
+ appleTodoMode:appleTodoMode,
+ newFirst:newFirst,
+ beginVcalendar:beginVcalendar
+ };
+}
+
+function todoToVcalendar(operation, accountUID, inputUID, inputEtag, delUID, deleteMode)
+{
+ var vtodo=false;
+ var vCalendarText='',
+ groupCounter=0;
+ var repeatHash = 'form';
+ if(delUID!='')
+ var rid=delUID.substring(0, delUID.lastIndexOf('/')+1);
+ else
+ var rid=inputUID.substring(0, inputUID.lastIndexOf('/')+1);
+ // vCalendar BEGIN (required by RFC)
+ if(vCalendar.tplM['VTbegin'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTbegin'][repeatHash][0])!=undefined)
+ vCalendarText+=vCalendar.tplM['VTbegin'][repeatHash][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'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_VERSION'][repeatHash][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'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash][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 resultTodoObj = getRepeatTodoObject({
+ rid:rid,
+ uidTodo:$('#uidTODO').val(),
+ vcalendarHash: $('#vcalendarHashTODO').val(),
+ vcalendarUID: $('#vcalendarUIDTODO').val(),
+ recurrenceId: $('#recurrenceIDTODO').val(),
+ timezoneTODO: $('#timezoneTODO').val(),
+ futureStart: $('#futureStartTODO').val(),
+ deleteMode: deleteMode,
+ 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 = resultTodoObj.realTodo;
+ var newFirst = resultTodoObj.newFirst;
+ var sel_option = resultTodoObj.sel_option;
+
+ //until here will function TODOCLICK
+ var origEvent='';
+ if(deleteMode || resultTodoObj.futureMode)
+ {
+ if(vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2))
+ vCalendarText+='\r\n';
+ if(!isTimeZone && ( appleTodoMode || (resultTodoObj.futureMode && origTimezone!='')))
+ {
+ vCalendarText+=origTimezone;
+ if(vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2))
+ vCalendarText+='\r\n';
+ }
+ // PRODID
+ if(vCalendar.tplM['VTcontentline_PRODID'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_PRODID'][repeatHash][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'][repeatHash]!='undefined' && vCalendar.tplM['VTunprocessed'][repeatHash]!='' && vCalendar.tplM['VTunprocessed'][repeatHash]!=null)
+ vCalendarText+=vCalendar.tplM['VTunprocessed'][repeatHash].replace(RegExp('^\r\n'), '');
+
+ vCalendar.tplM['VTunprocessed'][repeatHash]=new Array();
+ // vCalendar END (required by RFC)
+
+ if(vCalendar.tplM['VTend'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTend'][repeatHash][0])!=undefined)
+ vCalendarText+=vCalendar.tplM['VTend'][repeatHash][0];
+ else
+ {
+ process_elem=vCalendar.tplC['VTend'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ vCalendarText+=process_elem;
+ }
+ if(deleteMode)
+ {
+ var fixedArr = checkAndFixMultipleUID(vCalendarText,false);
+ var inputS = fixedArr[0];
+ fixedArr.splice(0,1);
+ return putVcalendarToCollection(accountUID, inputUID, inputEtag, inputS, delUID,'vtodo',false,deleteMode,fixedArr);
+ }
+ else if(resultTodoObj.futureMode)
+ {
+ origEvent = vCalendarText;
+ vCalendarText = resultTodoObj.beginVcalendar;
+ }
+ }
+
+ var timeZoneAttr='';
+ if(typeof globalSessionTimeZone!='undefined' && globalSessionTimeZone)
+ sel_option=globalSessionTimeZone;
+ var isUTC=false;
+
+ var origFirst=vCalendarText;
+ if(appleTodoMode)
+ vCalendarText='';
+ if($('#todo_type').val()!='none')
+ {
+ if(globalSettings.timezonesupport.value)
+ sel_option=$('#timezoneTODO').val();
+
+ 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['VTunprocessedVTIMEZONE'][repeatHash])
+ {
+ if(tzArray.indexOf(sel_option)==-1)
+ vCalendarText+= buildTimezoneComponent(sel_option);
+ }
+ else
+ vCalendarText+=vCalendar.tplM['VTunprocessedVTIMEZONE'][repeatHash];
+ }
+ origFirst+=vCalendarText;
+ // ---------------------------------------------------------------------------------------------------- //
+ if(vCalendar.tplM['VTbeginVTODO'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTbeginVTODO'][repeatHash][0])!=undefined)
+ vCalendarText+=vCalendar.tplM['VTbeginVTODO'][repeatHash][0];
+ else
+ {
+ process_elem=vCalendar.tplC['VTbeginVTODO'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ vCalendarText+=process_elem;
+ vtodo=true;
+ }
+ var d, utc;
+ d=new Date();
+ 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';
+ var create=true;
+
+ if($('#recurrenceIDTODO').val()=='')
+ var checkVal='orig';
+ else
+ var checkVal=$('#recurrenceIDTODO').val();
+
+ var created='';
+ for(vev in vCalendar.tplM['VTcontentline_CREATED'][repeatHash])
+ {
+ if(vev==checkVal)
+ created=vCalendar.tplM['VTcontentline_CREATED'][repeatHash][vev];
+ }
+
+ if(created!='')
+ {
+ process_elem=created;
+ // 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_CREATED'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc));
+ }
+ vCalendarText+=process_elem;
+
+ if(vCalendar.tplM['VTcontentline_LM'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_LM'][repeatHash][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_LM'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc));
+ vCalendarText+=process_elem;
+
+ if(vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash][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_DTSTAMP'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc));
+ vCalendarText+=process_elem;
+
+ // UID (required by RFC)
+ if(!appleTodoMode && $("#futureStartTODO").val()=='' && (operation!='MOVE_IN'&& operation!='MOVE_OTHER') && vCalendar.tplM['VTcontentline_UID'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_UID'][repeatHash][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_UID'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ var newUID=globalEventList.getNewUID();
+ // it is VERY small probability, that for 2 newly created events the same UID is generated (but not impossible :( ...)
+ process_elem=process_elem.replace('##:::##uid##:::##', newUID);
+ vCalendarText+=process_elem;
+
+ if(vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash][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_SUMMARY'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ if($('#nameTODO').val()=='')
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue("New TODO"));
+ else
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#nameTODO').val()));
+ //process_elem=process_elem.replace('##:::##value##:::##',vcalendarEscapeValue('zmena'));
+ vCalendarText+=process_elem;
+
+ if($('#statusTODO').val()!='NONE')
+ {
+ //if((value=$('[id="vcalendar_editor"] [data-type="\\%note"]').find('textarea').val())!='')
+ //{
+ if(vCalendar.tplM['VTcontentline_STATUS'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_STATUS'][repeatHash][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_STATUS'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#statusTODO').val()));
+ vCalendarText+=process_elem;
+ }
+
+ if($('#percenteCompleteValue').val()!='')
+ {
+ if(vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash][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_PERCENT-COMPLETE'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#percenteCompleteValue').val()));
+ vCalendarText+=process_elem;
+ }
+
+ if($('#priority_TODO').val()!='0')
+ {
+ if(vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash][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_PRIORITY'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#priority_TODO').val()));
+ vCalendarText+=process_elem;
+ }
+
+ if($('#noteTODO').val()!='')
+ {
+ // NOTE
+ if(vCalendar.tplM['VTcontentline_NOTE'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_NOTE'][repeatHash][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_NOTE'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#noteTODO').val()));
+ vCalendarText+=process_elem;
+ }
+
+ if($('#typeTODO').val()!='')
+ {
+ // CLASS
+ if(vCalendar.tplM['VTcontentline_CLASS'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_CLASS'][repeatHash][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_CLASS'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ if(typeof vCalendar.tplM['VTcontentline_CLASS'][repeatHash] =='undefined' || vCalendar.tplM['VTcontentline_CLASS'][repeatHash]==null || vCalendar.tplM['VTcontentline_CLASS'][repeatHash].length==0)
+ process_elem='';
+ }
+
+ if($('.row_typeTODO').css('display')!='none')
+ {
+ process_elem=vCalendar.tplC['VTcontentline_CLASS'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#typeTODO').val().toUpperCase()));
+ }
+ vCalendarText+=process_elem;
+ }
+
+ if($('#url_TODO').val()!='')
+ {
+ if(vCalendar.tplM['VTcontentline_URL'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_URL'][repeatHash][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_URL'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#url_TODO').val()));
+ vCalendarText+=process_elem;
+ }
+
+ //RFC OPTIONAL
+ if(vCalendar.tplM['VTcontentline_LOCATION'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_LOCATION'][repeatHash][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_LOCATION'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##','');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##','');
+ }
+
+ if($('#location_TODO').val()!='')
+ {
+ process_elem=process_elem.replace('##:::##value##:::##',vcalendarEscapeValue($('#location_TODO').val()));
+ vCalendarText+=process_elem;
+ }
+
+ if($('#repeat_TODO').val()!='no-repeat')
+ {
+ var interval=$("#repeat_interval_detail_TODO").val();
+ var byDay='';
+ var isCustom=false;
+ var monthDay='';
+ var bymonth='';
+ var wkst='';
+ if(interval==1 || interval=='')
+ interval='';
+ else interval=";INTERVAL="+$("#repeat_interval_detail_TODO").val();
+
+ var frequency=$('#repeat_TODO').val();
+ if(frequency=='TWO_WEEKLY')
+ {
+ frequency='WEEKLY';
+ interval=";INTERVAL="+2;
+ }
+ else if(frequency=='BUSINESS')
+ {
+ frequency='WEEKLY';
+ byDay=';BYDAY=';
+ if(globalSettings.weekenddays.value.length>0)
+ {
+ for(var i=0;i<7;i++)
+ if(globalSettings.weekenddays.value.indexOf(i)==-1)
+ byDay+=i+',';
+ byDay=byDay.substring(0,byDay.length-1);
+ byDay=byDay.replace(1,'MO').replace(2,'TU').replace(3,'WE').replace(4,'TH').replace(5,'FR').replace(6,'SA').replace(0,'SU');
+ }
+ else
+ {
+ byDay='SA,SU';
+ }
+ interval='';
+ }
+ else if(frequency=='WEEKEND')
+ {
+ frequency='WEEKLY';
+ byDay=';BYDAY=';
+ if(globalSettings.weekenddays.value.length>0)
+ {
+ for(var i=0;i<globalSettings.weekenddays.value.length;i++)
+ byDay+=globalSettings.weekenddays.value[i]+',';
+ byDay=byDay.substring(0,byDay.length-1);
+ byDay=byDay.replace(1,'MO').replace(2,'TU').replace(3,'WE').replace(4,'TH').replace(5,'FR').replace(6,'SA').replace(0,'SU');
+ }
+ else
+ {
+ byDay='SA,SU';
+ }
+ interval='';
+ }
+ else if(frequency=='CUSTOM_WEEKLY')
+ {
+ frequency='WEEKLY';
+ var byDayArray=$('#week_custom_TODO .customTable td.selected');
+ if(byDayArray.length>0)
+ {
+ byDay=';BYDAY=';
+ for(var ri=0;ri<byDayArray.length;ri++)
+ byDay+=$(byDayArray[ri]).attr('data-type')+',';
+ byDay=byDay.substring(0,byDay.length-1);
+ byDay=byDay.replace(1,'MO').replace(2,'TU').replace(3,'WE').replace(4,'TH').replace(5,'FR').replace(6,'SA').replace(0,'SU');
+ if(globalSettings.mozillasupport.value==null || !globalSettings.mozillasupport.value)
+ if(realTodo!='')
+ {
+ if(realTodo.wkst!='')
+ wkst=';WKST='+realTodo.wkst.replace(1,'MO').replace(2,'TU').replace(3,'WE').replace(4,'TH').replace(5,'FR').replace(6,'SA').replace(0,'SU');
+ }
+ else
+ wkst=';WKST='+globalSettings.datepickerfirstdayofweek.value.toString().replace(1,'MO').replace(2,'TU').replace(3,'WE').replace(4,'TH').replace(5,'FR').replace(6,'SA').replace(0,'SU');
+ }
+ }
+ else if(frequency=='CUSTOM_MONTHLY')
+ {
+ frequency='MONTHLY';
+ var byDayFirstPart='';
+ var monthCustomOption = $('#repeat_month_custom_select_TODO').val();
+ if(monthCustomOption!='custom' && $('#repeat_month_custom_select2_TODO').val()!='DAY')
+ {
+ if(monthCustomOption!='')
+ byDay=';BYDAY=';
+ switch(monthCustomOption)
+ {
+ case 'every':
+ byDayFirstPart='';
+ break;
+ case 'first':
+ byDayFirstPart='1';
+ break;
+ case 'second':
+ byDayFirstPart='2';
+ break;
+ case 'third':
+ byDayFirstPart='3';
+ break;
+ case 'fourth':
+ byDayFirstPart='4';
+ break;
+ case 'fifth':
+ byDayFirstPart='5';
+ break;
+ case 'last':
+ byDayFirstPart='-1';
+ break;
+ default:
+ byDayFirstPart='';
+ break;
+ }
+ byDay+= byDayFirstPart+$('#repeat_month_custom_select2_TODO').val();
+ }
+ else if(monthCustomOption!='custom' && $('#repeat_month_custom_select2_TODO').val()=='DAY')
+ {
+ byDay='';
+ switch(monthCustomOption)
+ {
+ case 'every':
+ monthDay=';BYMONTHDAY=';
+ for(var p=1;p<32;p++)
+ monthDay+=p+',';
+ monthDay=monthDay.substring(0,monthDay.length-1);
+ break;
+ case 'first':
+ monthDay=';BYMONTHDAY=1';
+ break;
+ case 'second':
+ monthDay=';BYMONTHDAY=2';
+ break;
+ case 'third':
+ monthDay=';BYMONTHDAY=3';
+ break;
+ case 'fourth':
+ monthDay=';BYMONTHDAY=4';
+ break;
+ case 'fifth':
+ monthDay=';BYMONTHDAY=5';
+ break;
+ case 'last':
+ monthDay=';BYMONTHDAY=-1';
+ break;
+ default:
+ byDayFirstPart='';
+ monthDay='';
+ break;
+ }
+ }
+ else
+ {
+ var monthDayArray = $('#month_custom2_TODO .selected');
+ if(monthDayArray.length>0)
+ {
+ monthDay=';BYMONTHDAY=';
+ for(var ri=0;ri<monthDayArray.length;ri++)
+ monthDay+=$(monthDayArray[ri]).attr('data-type')+',';
+ monthDay=monthDay.substring(0,monthDay.length-1);
+ }
+ }
+ }
+ else if(frequency=='CUSTOM_YEARLY')
+ {
+ frequency='YEARLY';
+ var byDayFirstPart='';
+ var monthCustomOption = $('#repeat_year_custom_select1_TODO').val();
+ var monthArray = $('#year_custom3_TODO .selected');
+ if(monthArray.length>0)
+ {
+ bymonth=';BYMONTH=';
+ for(var ri=0;ri<monthArray.length;ri++)
+ {
+ var val = parseInt($(monthArray[ri]).attr('data-type'),10);
+ if(!isNaN(val))
+ bymonth+=(val+1)+',';
+ }
+ bymonth=bymonth.substring(0,bymonth.length-1);
+ }
+ if(monthCustomOption!='custom' && $('#repeat_year_custom_select2_TODO').val()!='DAY')
+ {
+ if(monthCustomOption!='')
+ byDay=';BYDAY=';
+ switch(monthCustomOption)
+ {
+ case 'every':
+ byDayFirstPart='';
+ break;
+ case 'first':
+ byDayFirstPart='1';
+ break;
+ case 'second':
+ byDayFirstPart='2';
+ break;
+ case 'third':
+ byDayFirstPart='3';
+ break;
+ case 'fourth':
+ byDayFirstPart='4';
+ break;
+ case 'fifth':
+ byDayFirstPart='5';
+ break;
+ case 'last':
+ byDayFirstPart='-1';
+ break;
+ default:
+ byDayFirstPart='';
+ break;
+ }
+ byDay+= byDayFirstPart+$('#repeat_month_custom_select2_TODO').val();
+ }
+ else if(monthCustomOption!='custom' && $('#repeat_year_custom_select2_TODO').val()=='DAY')
+ {
+ byDay='';
+ switch(monthCustomOption)
+ {
+ case 'every':
+ monthDay=';BYMONTHDAY=';
+ for(var p=1;p<32;p++)
+ monthDay+=p+',';
+ monthDay=monthDay.substring(0,monthDay.length-1);
+ break;
+ case 'first':
+ monthDay=';BYMONTHDAY=1';
+ break;
+ case 'second':
+ monthDay=';BYMONTHDAY=2';
+ break;
+ case 'third':
+ monthDay=';BYMONTHDAY=3';
+ break;
+ case 'fourth':
+ monthDay=';BYMONTHDAY=4';
+ break;
+ case 'fifth':
+ monthDay=';BYMONTHDAY=5';
+ break;
+ case 'last':
+ monthDay=';BYMONTHDAY=-1';
+ break;
+ default:
+ byDayFirstPart='';
+ monthDay='';
+ break;
+ }
+ }
+ else
+ {
+ var monthDayArray = $('#year_custom1_TODO .selected');
+ if(monthDayArray.length>0)
+ {
+ monthDay=';BYMONTHDAY=';
+ for(var ri=0;ri<monthDayArray.length;ri++)
+ monthDay+=$(monthDayArray[ri]).attr('data-type')+',';
+ monthDay=monthDay.substring(0,monthDay.length-1);
+ }
+ }
+ }
+ else if($('#repeat_TODO option:selected').attr('data-type')=="custom_repeat")
+ isCustom=true;
+
+ if(vCalendar.tplM['VTcontentline_RRULE'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_RRULE'][repeatHash][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_RRULE'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+
+ if(!isCustom)
+ {
+ if($('#repeat_end_details_TODO').val()=="on_date")
+ {
+ var dateUntil=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#repeat_end_date_TODO').val());
+ var datetime_until='';
+ if($('#todo_type').val()=='start')
+ var tForR=new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val()));
+ else
+ var tForR=new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val()));
+ dateUntil.setHours(tForR.getHours());
+ dateUntil.setMinutes(tForR.getMinutes());
+ dateUntil.setSeconds(tForR.getSeconds());
+ if(globalSettings.timezonesupport.value && sel_option in timezones)
+ var valOffsetFrom=getOffsetByTZ(sel_option, dateUntil);
+ if(valOffsetFrom)
+ {
+ var intOffset=valOffsetFrom.getSecondsFromOffset()*1000*-1;
+ dateUntil.setTime(dateUntil.getTime()+intOffset);
+ }
+ datetime_until=$.fullCalendar.formatDate(dateUntil, "yyyyMMdd'T'HHmmss'Z'");
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue("FREQ="+frequency)+interval+";UNTIL="+datetime_until+bymonth+monthDay+byDay+wkst);
+ }
+ else if($('#repeat_end_details_TODO').val()=="after")
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue("FREQ="+frequency)+interval+";COUNT="+(parseInt($('#repeat_end_after_TODO').val()))+bymonth+monthDay+byDay+wkst);
+ else
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue("FREQ="+frequency)+interval+bymonth+monthDay+byDay+wkst);
+ }
+ else
+ process_elem=process_elem.replace('##:::##value##:::##', $('#repeat_TODO').val());
+ vCalendarText+=process_elem;
+
+ if(realTodo.repeatStart || realTodo.repeatEnd)
+ {
+ if(realTodo.repeatStart)
+ var a=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val());
+ else
+ var a=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').val());
+ if(realTodo.repeatStart)
+ var repeatStart=realTodo.repeatStart;
+ else
+ var repeatStart=realTodo.repeatEnd;
+
+ var b=new Date(1970,1,1,0,0,0);
+ if(realTodo.repeatStart)
+ b=new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val() ));
+ else
+ b=new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val() ));
+ a.setHours(b.getHours());
+ a.setMinutes(b.getMinutes());
+ a.setSeconds(b.getSeconds());
+
+ var offsetDate=a-repeatStart;
+ for(var iter in vCalendar.tplM['VTcontentline_EXDATE'][repeatHash])
+ {
+ if(isNaN(iter))
+ continue;
+
+ var exStr=('\r\n'+vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][iter]).match(vCalendar.pre['contentline_parse']);
+ var exVal=exStr[4].parseComnpactISO8601();
+ if(exVal)
+ {
+ if(exStr[4].indexOf('T')==-1)
+ {
+ //HERE
+ if(realTodo.repeatStart)
+ var timePart = new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val() ));
+ else
+ var timePart = new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val() ));
+ var time_from = $.fullCalendar.formatDate(b, 'HHmmss');
+ exVal = (exStr[4] + 'T' + time_from).parseComnpactISO8601();
+ if(sel_option!='local')
+ {
+ var valOffsetFrom=getOffsetByTZ(sel_option, exVal);
+ var intOffset = valOffsetFrom.getSecondsFromOffset()*-1;
+ exVal = new Date(exVal.setSeconds(intOffset));
+ }
+ }
+ else if(exStr[4].indexOf('T')!=-1)
+ {
+ if(sel_option!='local')
+ {
+ var valOffsetFrom=getOffsetByTZ(sel_option, exVal);
+ var origValOffset = getOffsetByTZ(realTodo.timeZone, exVal);
+ var intOffset = (valOffsetFrom.getSecondsFromOffset() - origValOffset.getSecondsFromOffset())*-1;
+ exVal = new Date(exVal.setSeconds(intOffset));
+ }
+ else
+ {
+ var origValOffset = getOffsetByTZ(realTodo.timeZone, exVal);
+ exVal = new Date(exVal.setSeconds(origValOffset.getSecondsFromOffset()));
+ }
+ }
+
+ var value=new Date(exVal.getTime()+offsetDate);
+ process_elem=vCalendar.tplC['VTcontentline_EXDATE'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ newValue=$.fullCalendar.formatDate(value, "yyyyMMdd'T'HHmmss")+(sel_option!='local' ? 'Z' : '');
+ process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
+ process_elem=process_elem.replace('##:::##TZID##:::##', vcalendarEscapeValue(''));
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(newValue));
+ vCalendarText+=process_elem;
+ }
+ }
+ }
+ }
+
+ //RECURRENCE-ID
+ if($('#recurrenceIDTODO').val() && !appleTodoMode)
+ {
+ if(vCalendar.tplM['VTcontentline_REC_ID'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_REC_ID'][repeatHash][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_REC_ID'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+
+ var rec_id=$('#recurrenceIDTODO').val()
+ 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));
+ }
+ vCalendarText+=process_elem;
+ }
+
+ var a=$('#todoDetailsTable').find("tr[data-id]");
+ var lastDataId=0;
+ for(var i=0;i<a[a.length-1].attributes.length;i++)
+ if(a[a.length-1].attributes[i].nodeName=="data-id")
+ {
+ lastDataId=a[a.length-1].attributes[i].value;
+ break;
+ }
+
+ var alarmIterator=0;
+ var alarmUniqueArray = new Array();
+ for(var t=0;t<lastDataId;t++)
+ {
+ if($(".alertTODO[data-id="+(t+1)+"]").length>0)
+ {
+ var alarmText = '';
+ if($(".alertTODO[data-id="+(t+1)+"]").val()!='none')
+ {
+ if(vCalendar.tplM['VTbeginVALARM'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTbeginVALARM'][repeatHash][0])!=undefined)
+ alarmText+=vCalendar.tplM['VTbeginVALARM'][repeatHash][0];
+ else
+ {
+ process_elem=vCalendar.tplC['VTbeginVALARM'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ alarmText+=process_elem;
+ vevent=true;
+ }
+
+ if($(".alertTODO[data-id="+(t+1)+"]").val()=='message')
+ {
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='on_date')
+ {
+ if(vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][0])!=undefined)
+ {
+ 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_TRIGGER'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+
+ var dateTo=$.datepicker.parseDate(globalSettings.datepickerformat.value,$(".message_date_inputTODO[data-id="+(t+1)+"]").val());
+ var datetime_to=$.fullCalendar.formatDate(dateTo, 'yyyy-MM-dd');
+ var aDate=new Date(Date.parse("01/02/1990, "+$(".message_time_inputTODO[data-id="+(t+1)+"]").val()));
+ var time_to=$.fullCalendar.formatDate(aDate, 'HH:mm:ss');
+ var alarmDT=$.fullCalendar.parseDate(datetime_to+'T'+time_to);
+
+ if(globalSettings.timezonesupport.value)
+ sel_option=$('#timezoneTODO').val();
+
+ if($('.timezone_rowTODO').css('display')=='none')
+ sel_option='local';
+
+ if(sel_option!='local')
+ {
+ var valOffsetFrom=getOffsetByTZ(sel_option, alarmDT);
+ var intOffset = valOffsetFrom.getSecondsFromOffset()*-1;
+ alarmDT = new Date(alarmDT.setSeconds(intOffset));
+ }
+ else
+ {
+ var intOffset = getLocalOffset(alarmDT);
+ alarmDT = new Date(alarmDT.setSeconds(intOffset));
+ }
+
+ var newValue=$.fullCalendar.formatDate(alarmDT, "yyyyMMdd'T'HHmmss")+'Z';
+ process_elem=process_elem.replace('##:::##VALUE=DATE-TIME##:::##', ';VALUE=DATE-TIME');
+ process_elem=process_elem.replace('##:::##VALUE=DURATION##:::##', '');
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(newValue));
+ alarmText+=process_elem;
+ }
+ else
+ {
+ var duration='';
+ var before_after=$(".before_after_inputTODO[data-id="+(t+1)+"]").val();
+
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='minutes_before')
+ duration="-PT"+before_after+"M";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='hours_before')
+ duration="-PT"+before_after+"H";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='days_before')
+ duration="-P"+before_after+"D";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='weeks_before')
+ duration="-P"+before_after+"W";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='seconds_before')
+ duration="-PT"+before_after+"S";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='minutes_after')
+ duration="PT"+before_after+"M";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='hours_after')
+ duration="PT"+before_after+"H";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='days_after')
+ duration="P"+before_after+"D";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='weeks_after')
+ duration="P"+before_after+"W";
+ if($(".alert_message_detailsTODO[data-id="+(t+1)+"]").val()=='seconds_after')
+ duration="PT"+before_after+"S";
+
+ if(vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][0])!=undefined)
+ {
+ 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_TRIGGER'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##VALUE=DATE-TIME##:::##', '');
+ process_elem=process_elem.replace('##:::##VALUE=DURATION##:::##', ';VALUE=DURATION');
+ process_elem=process_elem.replace('##:::##value##:::##', duration);
+ alarmText+=process_elem;
+ }
+
+ if(vCalendar.tplM['VTcontentline_ACTION'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_ACTION'][repeatHash][0])!=undefined)
+ {
+ 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_ACTION'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue('DISPLAY'));
+ alarmText+=process_elem;
+
+ if(vCalendar.tplM['VTcontentline_DESCRIPTION']!=null && (process_elem=vCalendar.tplM['VTcontentline_DESCRIPTION'][0])!=undefined)
+ {
+ 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_DESCRIPTION'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue('Reminder'));
+ alarmText+=process_elem;
+
+ }
+
+ if(typeof vCalendar.tplM['VTunprocessedVALARM'][repeatHash]!='undefined' && vCalendar.tplM['VTunprocessedVALARM'][repeatHash]!='' && vCalendar.tplM['VTunprocessedVALARM'][repeatHash]!=null)
+ {
+ if(vCalendar.tplM['VTunprocessedVALARM'][repeatHash][t]!=undefined)
+ {
+ tmp=vCalendar.tplM['VTunprocessedVALARM'][repeatHash][t].replace(RegExp('^\r\n'), '').replace(RegExp('\r\n$'), '');
+ if(tmp.indexOf('\r\n')==0)
+ tmp=tmp.substring(2, tmp.length);
+ if(tmp.lastIndexOf('\r\n')!=(tmp.length-2))
+ tmp+='\r\n';
+ alarmText+=tmp;
+ }
+ }
+
+ if(vCalendar.tplM['VTendVALARM'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTendVALARM'][repeatHash][0])!=undefined)
+ alarmText+=vCalendar.tplM['VTendVALARM'][repeatHash][0];
+ else
+ {
+ process_elem=vCalendar.tplC['VTendVALARM'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ alarmText+=process_elem;
+ }
+ if(alarmUniqueArray.indexOf(alarmText)==-1)
+ {
+ alarmUniqueArray.push(alarmText);
+ vCalendarText+=alarmText;
+ }
+ }
+ }
+ }
+
+ if($('#todo_type').val()=='start' || $('#todo_type').val()=='due' || $('#todo_type').val()=='both')
+ {
+ if($('#date_fromTODO').val()=='' && $('#date_toTODO').val()=='')
+ {
+ alert("Not enough data!");
+ return false;
+ }
+
+ if(($('#todo_type').val()=='start' || ($('#todo_type').val()=='both' && !appleTodoMode)) && $('#date_fromTODO').val()!='')
+ {
+ if(vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][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_E_DTSTART'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+
+ var dateFrom=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val());
+ var datetime_from=$.fullCalendar.formatDate(dateFrom, 'yyyyMMdd');
+ var timeFrom=new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val()));
+ var time_from=((timeFrom.getHours())<10 ? '0'+(timeFrom.getHours()): (timeFrom.getHours()))+''+((timeFrom.getMinutes())<10 ? '0'+(timeFrom.getMinutes()): (timeFrom.getMinutes()))+'00';
+
+ process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
+ process_elem=process_elem.replace('##:::##TZID##:::##', timeZoneAttr);
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_from+'T'+time_from+(isUTC ? 'Z' : '')));
+
+ if(appleTodoMode)
+ {
+ var process_elem2 = '';
+ if(vCalendar.tplM['VTcontentline_DUE'][repeatHash]!=null && (process_elem2=vCalendar.tplM['VTcontentline_DUE'][repeatHash][0])!=undefined)
+ {
+ // replace the object and related objects' group names (+ append the related objects after the processed)
+ parsed=('\r\n'+process_elem2).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm'));
+ if(parsed[1]!='') // if group is present, replace the object and related objects' group names
+ process_elem2=('\r\n'+process_elem2).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2);
+ }
+ else
+ {
+ 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+'T'+time_from+(isUTC ? 'Z' : '')));
+ vCalendarText+=process_elem2;
+ }
+ vCalendarText+=process_elem;
+ }
+
+ if(($('#todo_type').val()=='due' || $('#todo_type').val()=='both') && $('#date_toTODO').val()!='')
+ {
+ if(vCalendar.tplM['VTcontentline_DUE'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_DUE'][repeatHash][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_DUE'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+
+ var dateTo=$.datepicker.parseDate(globalSettings.datepickerformat.value,$('#date_toTODO').val());
+ var datetime_to=$.fullCalendar.formatDate(dateTo, 'yyyyMMdd');
+ var timeTo=new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val()));
+ var time_to=((timeTo.getHours())<10 ? '0'+(timeTo.getHours()): (timeTo.getHours()))+''+((timeTo.getMinutes())<10 ? '0'+(timeTo.getMinutes()): (timeTo.getMinutes()))+'00';
+
+ process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
+ process_elem=process_elem.replace('##:::##TZID##:::##',timeZoneAttr);
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_to+'T'+time_to+(isUTC ? 'Z' : '')));
+
+ if(globalSettings.appleremindersmode.value)
+ {
+ var process_elem2 = '';
+ if(vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash]!=null && (process_elem2=vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][0])!=undefined)
+ {
+ // replace the object and related objects' group names (+ append the related objects after the processed)
+ parsed=('\r\n'+process_elem2).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm'));
+ if(parsed[1]!='') // if group is present, replace the object and related objects' group names
+ process_elem2=('\r\n'+process_elem2).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2);
+ }
+ else
+ {
+ 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+'T'+time_to+(isUTC ? 'Z' : '')));
+ vCalendarText+=process_elem2;
+ }
+ vCalendarText+=process_elem;
+ }
+ }
+
+ if(realTodo!='')
+ {
+ if(realTodo.type!='')
+ {
+ if(realTodo.repeatStart)
+ {
+ var a=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_fromTODO').val());
+ var b=new Date(Date.parse("01/02/1990, "+$('#time_fromTODO').val() ));
+ }
+ else if(realTodo.repeatEnd)
+ {
+ var a=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_toTODO').val());
+ var b=new Date(Date.parse("01/02/1990, "+$('#time_toTODO').val() ));
+ }
+
+ if(realTodo.repeatStart)
+ var repeatStart=realTodo.repeatStart;
+ else if(realTodo.repeatEnd)
+ var repeatEnd=realTodo.repeatEnd;
+ a.setHours(b.getHours());
+ a.setMinutes(b.getMinutes());
+ a.setSeconds(b.getSeconds());
+ var changeDate=new Date(a.getTime());
+ var offsetDate=0;
+
+ if(realTodo.repeatStart)
+ offsetDate=changeDate-repeatStart;
+ else if(realTodo.repeatEnd)
+ offsetDate=changeDate-repeatEnd;
+
+ var realEventUID=realTodo.vcalendar.match(vCalendar.pre['contentline_UID']);
+
+ if(realEventUID!=null)
+ realEventUID=realEventUID[0].match(vCalendar.pre['contentline_parse'])[4];
+
+ if(offsetDate!=0)
+ {
+ var vcalendarOrig=vCalendarText;
+ var eventArray=new Array(),backupEventArray= new Array();
+ while(vcalendarOrig.match(vCalendar.pre['vtodo'])!=null)
+ {
+ if(vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VTODO')-2, vcalendarOrig.indexOf('BEGIN:VTODO'))=='\r\n')
+ {
+ var partEvent=vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VTODO')-2,vcalendarOrig.indexOf('END:VTODO')+'END:VTODO'.length);
+ vcalendarOrig=vcalendarOrig.replace(partEvent, '');
+ }
+ else
+ {
+ var partEvent=vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VTODO'),vcalendarOrig.indexOf('END:VTODO')+'END:VTODO'.length);
+ vcalendarOrig=vcalendarOrig.replace(partEvent, '');
+ partEvent+='\r\n';
+ }
+ eventArray[eventArray.length]=partEvent;
+ backupEventArray[backupEventArray.length]=partEvent;
+ }
+ if(eventArray.length==0)
+ console.log("Error: '"+inputUID+"': unable to parse vTodo");
+
+ for(var it=0;it<eventArray.length;it++)
+ {
+ var findUid=eventArray[it].match(vCalendar.pre['contentline_UID']);
+ if(findUid!=null)
+ {
+ if(findUid[0].match(vCalendar.pre['contentline_parse'])[4]!=realEventUID)
+ continue;
+ }
+ var findRec=eventArray[it].match(vCalendar.pre['contentline_RECURRENCE_ID']);
+ if(findRec!=null)
+ {
+ var parsed=findRec[0].match(vCalendar.pre['contentline_parse']);
+ process_elem=vCalendar.tplC['VTcontentline_REC_ID'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', parsed[1]);
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+
+ var value=parsed[4].parseComnpactISO8601();
+ if(value)
+ {
+ value=new Date(value.getTime()+offsetDate)
+
+ var newValue=$.fullCalendar.formatDate(value, "yyyyMMdd'T'HHmmss");
+ if(isUTC)
+ newValue+='Z';
+
+ process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue(''));
+ process_elem=process_elem.replace('##:::##TZID##:::##', timeZoneAttr);
+ process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(newValue));
+ eventArray[it]=eventArray[it].replace(findRec[0],'\r\n'+process_elem);
+ }
+ }
+ vCalendarText=vCalendarText.replace(backupEventArray[it],eventArray[it]);
+ }
+ }
+ }
+ }
+
+ if($('.completedOnTr').css('display')!='none')
+ {
+ if(vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash][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_COMPLETED'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ process_elem=process_elem.replace('##:::##params_wsc##:::##', '');
+ }
+ if($('.completedOnTr .date').val()!='' && $('.completedOnTr .time').val()!='')
+ {
+ var completedDate=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('.completedOnTr .date').val());
+ var timeCompleted=new Date(Date.parse("01/02/1990, "+$('#completedOnTime').val()));
+ var datetime_completed=$.fullCalendar.parseDate($.fullCalendar.formatDate(completedDate, "yyyy'-'MM'-'dd")+'T'+$.fullCalendar.formatDate(timeCompleted, "HH':'mm'-'ss"));
+
+ if(globalSettings.timezonesupport.value)
+ sel_option=$('#timezoneTODO').val();
+
+ if($('.timezone_rowTODO').css('display')=='none')
+ sel_option='local';
+
+ 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=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(newValue));
+ vCalendarText+=process_elem;
+ }
+ }
+
+ 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($('#recurrenceIDTODO').val()=='')
+ var checkVal='orig';
+ else
+ var checkVal=$('#recurrenceIDTODO').val();
+
+ if(typeof vCalendar.tplM['VTunprocessedVTODO'][repeatHash]!='undefined' && vCalendar.tplM['VTunprocessedVTODO'][repeatHash]!=null)
+ {
+ for(vev in vCalendar.tplM['VTunprocessedVTODO'][repeatHash])
+ if(vev==checkVal)
+ vCalendarText+=vCalendar.tplM['VTunprocessedVTODO'][repeatHash][vev].replace(RegExp('^\r\n'), '');
+ }
+ if(appleTodoMode)
+ vCalendarText = '';
+
+ if(vCalendar.tplM['VTendVTODO'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTendVTODO'][repeatHash][0])!=undefined)
+ {
+ if(!appleTodoMode)
+ vCalendarText+=vCalendar.tplM['VTendVTODO'][repeatHash][0];
+ else
+ newFirst+=vCalendar.tplM['VTendVTODO'][repeatHash][0];
+ }
+ else
+ {
+ process_elem=vCalendar.tplC['VTendVTODO'];
+ process_elem=process_elem.replace('##:::##group_wd##:::##', '');
+ if(!appleTodoMode)
+ vCalendarText+=process_elem;
+ else
+ newFirst+=process_elem;
+ }
+
+ // PRODID
+ if(vCalendar.tplM['VTcontentline_PRODID'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTcontentline_PRODID'][repeatHash][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'][repeatHash]!='undefined' && vCalendar.tplM['VTunprocessed'][repeatHash]!='' && vCalendar.tplM['VTunprocessed'][repeatHash]!=null)
+ {
+ if(!appleTodoMode)
+ vCalendarText+=vCalendar.tplM['VTunprocessed'][repeatHash].replace(RegExp('^\r\n'), '');
+ else
+ origFirst+=vCalendar.tplM['VTunprocessed'][repeatHash].replace(RegExp('^\r\n'), '');;
+ }
+
+ vCalendar.tplM['VTunprocessed'][repeatHash]=new Array();
+
+ // vCalendar END (required by RFC)
+ if(vCalendar.tplM['VTend'][repeatHash]!=null && (process_elem=vCalendar.tplM['VTend'][repeatHash][0])!=undefined)
+ vCalendarText+=vCalendar.tplM['VTend'][repeatHash][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;
+ }
+ else if(resultTodoObj.futureMode && origEvent!='')
+ {
+ var fixed = checkAndFixMultipleUID(origEvent,false);
+ if(fixed.length==1)
+ textArray[textArray.length]=origEvent;
+ else
+ textArray=fixed;
+ }
+ var fixedArr = checkAndFixMultipleUID(vCalendarText,false);
+ fixedArr = $.merge(textArray,fixedArr);
+ var inputS = fixedArr[0];
+ fixedArr.splice(0,1);
+ if(operation=='MOVE_IN')
+ return moveVcalendarToCollection(accountUID, inputUID, inputEtag, inputS, delUID, 'vtodo', false, deleteMode, fixedArr);
+ else
+ return putVcalendarToCollection(accountUID, inputUID, inputEtag, inputS, delUID,'vtodo',false,deleteMode,fixedArr);
+}
+
+function fullVcalendarToTodoData(inputEvent, formMode)
+{
+ var vcalendar='';
+ if(formMode)
+ var repeatHash = 'form';
+ else
+ var repeatHash = inputEvent.repeatHash;
+ CalDAVeditor_cleanup(repeatHash);
+
+ var rid=inputEvent.id.substring(0, inputEvent.id.lastIndexOf('/')+1);
+ if(rid)
+ if(globalEventList.todos[rid][inputEvent.id].uid!=undefined)
+ vcalendar=globalEventList.todos[rid][inputEvent.id].vcalendar;
+ if(!vcalendar)
+ return false;
+ var vcalendar_full=vcalendar.split('\r\n');
+ if((parsed=('\r\n'+vcalendar_full[0]+'\r\n').match(vCalendar.pre['contentline_parse']))==null)
+ return false;
+ //BEGIN, END VCALENDAR
+
+ vCalendar.tplM['VTbegin'][repeatHash]=new Array();
+ vCalendar.tplM['VTbegin'][repeatHash][0]=vCalendar.tplC['VTbegin'].replace(/##:::##group_wd##:::##/g, vcalendar_begin_group=parsed[1]);
+ // parsed (contentline_parse)=[1]->"group.", [2]->"name", [3]->";param;param", [4]->"value"
+ if((parsed=('\r\n'+vcalendar_full[vcalendar_full.length-2]+'\r\n').match(vCalendar.pre['contentline_parse']))==null)
+ return false;
+ // values not directly supported by the editor (old values are kept intact)
+ vCalendar.tplM['VTend'][repeatHash]=new Array();
+ vCalendar.tplM['VTend'][repeatHash][0]=vCalendar.tplC['VTend'].replace(/##:::##group_wd##:::##/g, vcalendar_end_group=parsed[1]);
+
+ if(vcalendar_begin_group!=vcalendar_end_group)
+ return false; // the vCalendar BEGIN and END "group" are different
+
+ // remove the vCalendar BEGIN and END
+ vcalendar='\r\n'+vcalendar_full.slice(1, vcalendar_full.length-2).join('\r\n')+'\r\n';
+
+ //FIX TIMEZONE
+ var beginTimeZone=vcalendar.indexOf('BEGIN:VTIMEZONE');
+ var startEndTimeZone=vcalendar.indexOf('END:VTIMEZONE');
+ var endTimeZone=0;
+ var vTimeZone='';
+ while(beginTimeZone!=-1 && startEndTimeZone!=-1)
+ {
+ for(i=(startEndTimeZone+2);i<vcalendar.length;i++)
+ {
+ if(vcalendar.charAt(i)=='\n')
+ {
+ endTimeZone=i+1;
+ break;
+ }
+ }
+ vTimeZone=vcalendar.substring(beginTimeZone, endTimeZone);
+ vcalendar=vcalendar.substring(0, beginTimeZone)+vcalendar.substring(endTimeZone, vcalendar.length);
+ beginTimeZone=vcalendar.indexOf('BEGIN:VTIMEZONE');
+ startEndTimeZone=vcalendar.indexOf('END:VTIMEZONE');
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_VERSION']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ version=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_VERSION'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_VERSION'][repeatHash][0]=vCalendar.tplC['VTcontentline_VERSION'];
+ vCalendar.tplM['VTcontentline_VERSION'][repeatHash][0]=vCalendar.tplM['VTcontentline_VERSION'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_VERSION'][repeatHash][0]=vCalendar.tplM['VTcontentline_VERSION'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vcalendar=vcalendar.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vcalendar.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_VERSION'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vcalendar=vcalendar.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_CALSCALE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ version=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash][0]=vCalendar.tplC['VTcontentline_CALSCALE'];
+ vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash][0]=vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash][0]=vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vcalendar=vcalendar.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vcalendar.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_CALSCALE'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vcalendar=vcalendar.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //PRODID
+ vcalendar_element=vcalendar.match(RegExp('\r\n'+vCalendar.re['contentline_PRODID'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+
+ vCalendar.tplM['VTcontentline_PRODID'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_PRODID'][repeatHash][0]=vCalendar.tplC['VTcontentline_PRODID'];
+ vCalendar.tplM['VTcontentline_PRODID'][repeatHash][0]=vCalendar.tplM['VTcontentline_PRODID'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_PRODID'][repeatHash][0]=vCalendar.tplM['VTcontentline_PRODID'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vcalendar=vcalendar.replace(vcalendar_element[0], '\r\n');
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vcalendar.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_PRODID'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vcalendar=vcalendar.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+ // -------------------VTODO---------------------- //
+ var todoArray=new Array();
+ while(vcalendar.match(vCalendar.pre['vtodo'])!=null)
+ {
+ if(vcalendar.substring(vcalendar.indexOf('BEGIN:VTODO')-2, vcalendar.indexOf('BEGIN:VTODO'))=='\r\n')
+ {
+ var partTodo=vcalendar.substring(vcalendar.indexOf('BEGIN:VTODO')-2,vcalendar.indexOf('END:VTODO')+'END:VTODO'.length);
+ vcalendar=vcalendar.replace(partTodo, '');
+ }
+ else
+ {
+ var partTodo=vcalendar.substring(vcalendar.indexOf('BEGIN:VTODO'),vcalendar.indexOf('END:VTODO')+'END:VTODO'.length);
+ vcalendar=vcalendar.replace(partTodo, '');
+ partTodo+='\r\n';
+ }
+ todoArray[todoArray.length]=partTodo;
+ }
+ if(todoArray.length==0)
+ console.log("Error: '"+inputEvent.id+"': unable to parse vTodo");
+
+ for(var it=0;it<todoArray.length;it++)
+ {
+ var vtodo=todoArray[it];
+ var vtodo_full=vtodo.split('\r\n');
+ var isThisTODO=false;
+ if(vtodo==null)
+ return false;
+
+ //BEGIN
+ if((parsed=('\r\nBEGIN:VTODO\r\n').match(vCalendar.pre['contentline_parse']))==null)
+ return false;
+ //BEGIN, END VCALENDAR
+ vCalendar.tplM['VTbeginVTODO'][repeatHash] = new Array();
+ vCalendar.tplM['VTbeginVTODO'][repeatHash][0]=vCalendar.tplC['VTbeginVTODO'].replace(/##:::##group_wd##:::##/g, vcalendar_begin_group=parsed[1]);
+ // parsed (contentline_parse)=[1]->"group.", [2]->"name", [3]->";param;param", [4]->"value"
+ if((parsed=('\r\n'+vcalendar_full[vtodo_full.length-2]+'\r\n').match(vCalendar.pre['contentline_parse']))==null)
+ return false;
+ // values not directly supported by the editor (old values are kept intact)
+ vCalendar.tplM['VTendVTODO'][repeatHash] = new Array();
+ vCalendar.tplM['VTendVTODO'][repeatHash][0]=vCalendar.tplC['VTendVTODO'].replace(/##:::##group_wd##:::##/g, vcalendar_end_group=parsed[1]);
+ if(vcalendar_begin_group!=vcalendar_end_group)
+ return false; // the vCalendar BEGIN and END "group" are different
+
+ // remove the vCalendar BEGIN and END
+ vtodo='\r\n'+vtodo_full.slice(2, vtodo_full.length-1).join('\r\n')+'\r\n';
+ var created='',recurr_id='', frequency='';
+
+ //RECURRENCE-ID
+ var rec='';
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_RECURRENCE_ID']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ var rec=parsed[4];
+ vCalendar.tplM['VTcontentline_REC_ID'][repeatHash]= new Array();
+ vCalendar.tplM['VTcontentline_REC_ID'][repeatHash][0]=vCalendar.tplC['VTcontentline_REC_ID'];
+ vCalendar.tplM['VTcontentline_REC_ID'][repeatHash][0]=vCalendar.tplM['VTcontentline_REC_ID'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ var pars=vcalendarSplitParam(parsed[3]);
+ var parString='';
+
+ for(var i=0;i<pars.length;i++)
+ {
+ if((pars[i]!='VALUE=DATE') && (pars[i].indexOf('TZID=')==-1) && (pars[i]!=''))
+ parString+=';'+pars[i];
+ }
+
+ vCalendar.tplM['VTcontentline_REC_ID'][repeatHash][0]=vCalendar.tplM['VTcontentline_REC_ID'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parString);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_REC_ID'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+ if(rec=='')
+ rec='orig';
+ else
+ recurr_id=rec;
+
+ //CREATED
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_CREATED'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_CREATED'][repeatHash]={};
+ vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec]=vCalendar.tplC['VTcontentline_CREATED'];
+ vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec]=vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec]=vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ created = parsed[4];
+ vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec]=vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec].replace(/##:::##value##:::##/g,parsed[4]);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_CREATED'][repeatHash][rec]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //RRULE
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_RRULE2']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_RRULE'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0]=vCalendar.tplC['VTcontentline_RRULE'];
+ vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0]=vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ var pars=parsed[4].split(';');
+ var parString='';
+
+ for(var i=0;i<pars.length;i++)
+ {
+ if((pars[i].indexOf('FREQ=')==-1) && (pars[i].indexOf('COUNT=')==-1) && (pars[i].indexOf('UNTIL=')==-1) && (pars[i]!='') && (pars[i].indexOf('INTERVAL=')==-1) && (pars[i].indexOf('BYDAY=')==-1)
+ && (pars[i].indexOf('BYMONTHDAY=')==-1) && (pars[i].indexOf('BYMONTH=')==-1) && (pars[i].indexOf('WKST=')==-1))
+ parString+=';'+pars[i];
+ if(pars[i].indexOf('FREQ=')!=-1)
+ frequency=pars[i].split('FREQ=')[1];
+ }
+ vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0]=vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0]=vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0].replace(/##:::##value##:::##/g, '##:::##value##:::##'+parString);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_RRULE'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+ var tmpR=''
+ if(frequency!='')
+ tmpR=inputEvent.id+'#'+created+'#'+frequency;
+ else
+ tmpR=inputEvent.id+'#'+created+'#'+recurr_id;
+ if(tmpR==repeatHash)
+ isThisTODO=true;
+ //SUMMARY
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_SUMMARY']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ title=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash][0]=vCalendar.tplC['VTcontentline_SUMMARY'];
+ vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash][0]=vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash][0]=vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_SUMMARY'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_TRANSP'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_TRANSP'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_TRANSP'][repeatHash][0]=vCalendar.tplC['VTcontentline_TRANSP'];
+ vCalendar.tplM['VTcontentline_TRANSP'][repeatHash][0]=vCalendar.tplM['VTcontentline_TRANSP'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_TRANSP'][repeatHash][0]=vCalendar.tplM['VTcontentline_TRANSP'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_TRANSP'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_STATUS']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ title=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_STATUS'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_STATUS'][repeatHash][0]=vCalendar.tplC['VTcontentline_STATUS'];
+ vCalendar.tplM['VTcontentline_STATUS'][repeatHash][0]=vCalendar.tplM['VTcontentline_STATUS'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_STATUS'][repeatHash][0]=vCalendar.tplM['VTcontentline_STATUS'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_STATUS'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //LOCATION
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_LOCATION'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ //note=String(vcalendar_element).split(':')[1];
+ title=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_LOCATION'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_LOCATION'][repeatHash][0]=vCalendar.tplC['VTcontentline_LOCATION'];
+ vCalendar.tplM['VTcontentline_LOCATION'][repeatHash][0]=vCalendar.tplM['VTcontentline_LOCATION'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_LOCATION'][repeatHash][0]=vCalendar.tplM['VTcontentline_LOCATION'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_LOCATION'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //URL
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_URL'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ //note=String(vcalendar_element).split(':')[1];
+ title=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_URL'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_URL'][repeatHash][0]=vCalendar.tplC['VTcontentline_URL'];
+ vCalendar.tplM['VTcontentline_URL'][repeatHash][0]=vCalendar.tplM['VTcontentline_URL'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_URL'][repeatHash][0]=vCalendar.tplM['VTcontentline_URL'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_URL'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_PERCENT-COMPLETE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+
+ //note=String(vcalendar_element).split(':')[1];
+ title=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash][0]=vCalendar.tplC['VTcontentline_PERCENT-COMPLETE'];
+ vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash][0]=vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash][0]=vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_PERCENT-COMPLETE'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_PRIORITY']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+
+ //note=String(vcalendar_element).split(':')[1];
+ title=vcalendarUnescapeValue(parsed[4]);
+ vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash][0]=vCalendar.tplC['VTcontentline_PRIORITY'];
+ vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash][0]=vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash][0]=vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_PRIORITY'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ // ---------------- VALARM --------------- //
+ var valarm=vtodo.match(vCalendar.pre['valarm']);
+ if(valarm!=null)
+ {
+ vtodo=vtodo.replace(valarm[0], '');
+ vCalendar.tplM['VTalarm_STRING'][repeatHash]='';
+ var alarmString='';
+ var alarmArray=new Array();
+
+ for(var i=0;i<valarm[0].length;i++)
+ {
+ if(valarm[0].substring(i-'END:VALARM'.length, i)=='END:VALARM')
+ {
+ alarmArray[alarmArray.length]=alarmString+'\r\n';
+ if(isThisTODO)
+ vCalendar.tplM['VTalarm_STRING'][repeatHash]+=alarmString+'\r\n';
+ alarmString='';
+ }
+ alarmString+=valarm[0][i];
+ }
+ for(var j=0;j<alarmArray.length;j++)
+ {
+ checkA=alarmArray[j].match(vCalendar.re['valarm']);
+ if(checkA!=null)
+ {
+ var valarm_full=checkA[0].split('\r\n');
+
+ //BEGIN
+ if((parsed=('\r\n'+valarm_full[0]+'\r\n').match(vCalendar.pre['contentline_parse']))==null)
+ return false;
+ //BEGIN, END VCALENDAR
+ vCalendar.tplM['VTbeginVALARM'][repeatHash] = new Array();
+ vCalendar.tplM['VTbeginVALARM'][repeatHash][j]=vCalendar.tplC['VTbeginVALARM'].replace(/##:::##group_wd##:::##/g, vcalendar_begin_group=parsed[1]);
+ // parsed (contentline_parse)=[1]->"group.", [2]->"name", [3]->";param;param", [4]->"value"
+ if((parsed=('\r\n'+valarm_full[valarm_full.length-2]+'\r\n').match(vCalendar.pre['contentline_parse']))==null)
+ return false;
+ // values not directly supported by the editor (old values are kept intact)
+ vCalendar.tplM['VTendVALARM'][repeatHash] = new Array();
+ vCalendar.tplM['VTendVALARM'][repeatHash][j]=vCalendar.tplC['VTendVALARM'].replace(/##:::##group_wd##:::##/g, vcalendar_end_group=parsed[1]);
+
+ if(vcalendar_begin_group!=vcalendar_end_group)
+ return false; // the vCalendar BEGIN and END "group" are different
+
+ // remove the vCalendar BEGIN and END
+ alarmArray[j]='\r\n'+valarm_full.slice(1, valarm_full.length-2).join('\r\n')+'\r\n';
+
+ trigger=alarmArray[j].match(vCalendar.pre['contentline_TRIGGER']);
+ if(trigger!=null)
+ {
+
+ parsed=(trigger[0]+'\r\n').match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][j]=vCalendar.tplC['VTcontentline_TRIGGER'];
+ vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][j]=vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][j].replace(/##:::##group_wd##:::##/g, parsed[1]);
+
+ var pars=vcalendarSplitParam(parsed[3]);
+ var parString='';
+ for(var i=0;i<pars.length;i++)
+ {
+ if((pars[i]!='VALUE=DATE-TIME') && (pars[i]!='VALUE=DURATION') && (pars[i]!=''))
+ parString+=';'+pars[i];
+ }
+
+ vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][j]=vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][j].replace(/##:::##params_wsc##:::##/g, parString);
+
+ alarmArray[j]=alarmArray[j].replace(trigger[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_TRIGGER'][repeatHash][j]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+
+ }
+
+ note=alarmArray[j].match(vCalendar.pre['contentline_NOTE']);
+ if(note!=null)
+ {
+ parsed=note[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_VANOTE'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_VANOTE'][repeatHash][j]=vCalendar.tplC['VTcontentline_VANOTE'];
+ vCalendar.tplM['VTcontentline_VANOTE'][repeatHash][j]=vCalendar.tplM['VTcontentline_VANOTE'][repeatHash][j].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_VANOTE'][repeatHash][j]=vCalendar.tplM['VTcontentline_VANOTE'][repeatHash][j].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ alarmArray[j]=alarmArray[j].replace(note[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_VANOTE'][repeatHash][j]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ action=(alarmArray[j]).match(vCalendar.pre['contentline_ACTION']);
+ if(action!=null)
+ {
+ parsed=action[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_ACTION'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_ACTION'][repeatHash][j]=vCalendar.tplC['VTcontentline_ACTION'];
+ vCalendar.tplM['VTcontentline_ACTION'][repeatHash][j]=vCalendar.tplM['VTcontentline_ACTION'][repeatHash][j].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_ACTION'][repeatHash][j]=vCalendar.tplM['VTcontentline_ACTION'][repeatHash][j].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ alarmArray[j]=alarmArray[j].replace(action[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_ACTION'][repeatHash][j]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ var checkUnprocess=$.trim(alarmArray[j]);
+ vCalendar.tplM['VTunprocessedVALARM'][repeatHash] = new Array();
+ if(checkUnprocess!='')
+ vCalendar.tplM['VTunprocessedVALARM'][repeatHash][j]=alarmArray[j];
+ }
+ }
+ }
+
+ //NOTE
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_NOTE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_NOTE'][repeatHash]=new Array();
+ vCalendar.tplM['VTcontentline_NOTE'][repeatHash][0]=vCalendar.tplC['VTcontentline_NOTE'];
+ vCalendar.tplM['VTcontentline_NOTE'][repeatHash][0]=vCalendar.tplM['VTcontentline_NOTE'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_NOTE'][repeatHash][0]=vCalendar.tplM['VTcontentline_NOTE'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_NOTE'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //NOTE
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_CLASS']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_CLASS'][repeatHash]=new Array()
+ vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0]=vCalendar.tplC['VTcontentline_CLASS'];
+ vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0]=vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0]=vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0]=vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0].replace(/##:::##value##:::##/g, parsed[4]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_CLASS'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+ //END
+
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_DUE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_DUE'][repeatHash]= new Array();
+ vCalendar.tplM['VTcontentline_DUE'][repeatHash][0]=vCalendar.tplC['VTcontentline_DUE'];
+ vCalendar.tplM['VTcontentline_DUE'][repeatHash][0]=vCalendar.tplM['VTcontentline_DUE'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+
+ var pars=vcalendarSplitParam(parsed[3]);
+ var parString='';
+
+ for(var i=0;i<pars.length;i++)
+ {
+ if((pars[i]!='VALUE=DATE') && (pars[i].indexOf('TZID=')==-1) && (pars[i]!=''))
+ parString+=';'+pars[i];
+ }
+
+ vCalendar.tplM['VTcontentline_DUE'][repeatHash][0]=vCalendar.tplM['VTcontentline_DUE'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parString);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_DUE'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //START
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_DTSTART']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][0]=vCalendar.tplC['VTcontentline_E_DTSTART'];
+ vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][0]=vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+
+ var pars=vcalendarSplitParam(parsed[3]);
+ var parString='';
+
+ for(var i=0;i<pars.length;i++)
+ {
+ if(pars[i]!='VALUE=DATE' && pars[i].indexOf('TZID=')==-1 && pars[i]!='')
+ parString+=';'+pars[i];
+ }
+
+ vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][0]=vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parString);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_E_DTSTART'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //UID
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_UID'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_UID'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_UID'][repeatHash][0]=vCalendar.tplC['VTcontentline_UID'];
+ vCalendar.tplM['VTcontentline_UID'][repeatHash][0]=vCalendar.tplM['VTcontentline_UID'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_UID'][repeatHash][0]=vCalendar.tplM['VTcontentline_UID'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vCalendar.tplM['VTcontentline_UID'][repeatHash][0]=vCalendar.tplM['VTcontentline_UID'][repeatHash][0].replace(/##:::##uid##:::##/g,parsed[4]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_UID'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //LAST-MODIFIED
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_LM'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_LM'][repeatHash]=new Array();
+ vCalendar.tplM['VTcontentline_LM'][repeatHash][0]=vCalendar.tplC['VTcontentline_LM'];
+ vCalendar.tplM['VTcontentline_LM'][repeatHash][0]=vCalendar.tplM['VTcontentline_LM'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_LM'][repeatHash][0]=vCalendar.tplM['VTcontentline_LM'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_LM'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ //DTSTAMP
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_DTSTAMP'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash] = new Array();
+ vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash][0]=vCalendar.tplC['VTcontentline_DTSTAMP'];
+ vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash][0]=vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash][0].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash][0]=vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash][0].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_DTSTAMP'][repeatHash][0]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ var i=-1;
+ while(vtodo.match(vCalendar.pre['contentline_EXDATE'])!= null)
+ {
+ i++;
+ vcalendar_element=vtodo.match(vCalendar.pre['contentline_EXDATE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash]=new Array();
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]=vCalendar.tplC['VTcontentline_EXDATE'];
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]=vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ var pars=vcalendarSplitParam(parsed[3]);
+ var parString='', dateStr='';
+
+ for(var j=0;j<pars.length;j++)
+ {
+ if(pars[j]!='VALUE=DATE' && pars[j]!='')
+ parString+=';'+pars[j];
+ if(pars[j]=='VALUE=DATE')
+ dateStr=pars[j];
+ }
+
+ if(dateStr.indexOf('VALUE=DATE')!=-1)
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]=vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i].replace(/##:::##AllDay##:::##/g, ';VALUE=DATE');
+ else
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]=vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i].replace(/##:::##AllDay##:::##/g, '');
+
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]=vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i].replace(/##:::##TZID##:::##/g, '');
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]=vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i].replace(/##:::##params_wsc##:::##/g, parString);
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]=vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i].replace(/##:::##value##:::##/g,parsed[4]);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_EXDATE'][repeatHash][i]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+ }
+
+ //COMPLETED
+ vcalendar_element=vtodo.match(RegExp('\r\n'+vCalendar.re['contentline_COMPLETED'], 'mi'));
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash] = {};
+ vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash][rec]=vCalendar.tplC['VTcontentline_COMPLETED'];
+ vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash][rec]=vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash][rec].replace(/##:::##group_wd##:::##/g, parsed[1]);
+ vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash][rec]=vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash][rec].replace(/##:::##params_wsc##:::##/g, parsed[3]);
+ vtodo=vtodo.replace(vcalendar_element[0], '\r\n');
+ if(parsed[1]!='')
+ {
+ var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im');
+ while ((vcalendar_element_related=vtodo.match(re))!=null)
+ {
+ // append the parameter to its parent
+ vCalendar.tplM['VTcontentline_COMPLETED'][repeatHash][rec]+=vcalendar_element_related[0].substr(2);
+ // remove the processed parameter
+ vtodo=vtodo.replace(vcalendar_element_related[0], '\r\n');
+ }
+ }
+ }
+
+ if(vcalendar.indexOf('\r\n')==0)
+ vcalendar=vcalendar.substring(2, vcalendar.length-2);
+
+ if(vcalendar.lastIndexOf('\r\n')!=(vcalendar.length-2))
+ vcalendar+='\r\n';
+ vCalendar.tplM['VTunprocessedVTODO'][repeatHash]={};
+ vCalendar.tplM['VTunprocessedVTODO'][repeatHash][rec]=vtodo;
+ // if(vTimeZone!='')
+ // vcalendar+=vTimeZone;
+ isThisTODO=false;
+ }
+
+ if(vcalendar.indexOf('\r\n')==0)
+ vcalendar=vcalendar.substring(2, vcalendar.length-2);
+
+ if(vcalendar.lastIndexOf('\r\n')!=(vcalendar.length-2))
+ vcalendar+='\r\n';
+
+ vCalendar.tplM['VTunprocessedVTIMEZONE'][repeatHash]=vTimeZone;
+ vCalendar.tplM['VTunprocessed'][repeatHash]=vcalendar;
+}
+
+function vcalendarTodoData(inputCollection, inputEvent, isNew)
+{
+ var vcalendarOrig=inputEvent.vcalendar;
+ var todoArray=new Array();
+ var preTodoArray=new Array();
+ if((check=inputEvent.vcalendar.match(vCalendar.pre['vtodo']))==null)
+ {
+ console.log("Error: '"+inputEvent.uid+"': unable to parse vTodo");
+ return false;
+ }
+
+ //CHECK CALSCALE
+ var elem=vcalendarOrig.match(vCalendar.pre['contentline_CALSCALE']);
+ if(elem!=null)
+ {
+ var calscale=elem[0].match(vCalendar.pre['contentline_parse'])[4];
+ if(calscale!='GREGORIAN')
+ {
+ console.log("Error:'"+inputEvent.uid+"': Unsupported calscale in:"+vcalendarOrig);
+ return false;
+ }
+ }
+ //CHECK VERSION
+ var elemV=vcalendarOrig.match(vCalendar.pre['contentline_VERSION']);
+ if(elemV!=null)
+ {
+ var ver=elemV[0].match(vCalendar.pre['contentline_parse'])[4];
+ if(ver!='2.0')
+ {
+ console.log("Error:'"+inputEvent.uid+"': Unsupported version ("+ver+") in:"+vcalendarOrig);
+ return false;
+ }
+ }
+ //FIX TIMEZONE
+ var beginTimeZone=vcalendarOrig.indexOf('BEGIN:VTIMEZONE');
+ var startEndTimeZone=vcalendarOrig.indexOf('END:VTIMEZONE');
+ var endTimeZone=0;
+ while(vcalendarOrig.indexOf('BEGIN:VTIMEZONE')!=-1)
+ if(beginTimeZone!=-1 && startEndTimeZone!=-1)
+ {
+ for(i=(startEndTimeZone+2);i<vcalendarOrig.length;i++)
+ {
+ if(vcalendarOrig.charAt(i)=='\n')
+ {
+ endTimeZone=i+1;
+ break;
+ }
+ }
+ vTimeZone=vcalendarOrig.substring(beginTimeZone, endTimeZone);
+ vcalendarOrig=vcalendarOrig.substring(0, beginTimeZone)+vcalendarOrig.substring(endTimeZone, vcalendarOrig.length);
+ }
+
+ var rid=inputEvent.uid.substring(0, inputEvent.uid.lastIndexOf('/')+1);
+ var evid=inputEvent.uid.substring(inputEvent.uid.lastIndexOf('/')+1, inputEvent.uid.length);
+ var recurrence_id_array=new Array();
+ while(vcalendarOrig.match(vCalendar.pre['vtodo'])!=null)
+ {
+ if(vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VTODO')-2, vcalendarOrig.indexOf('BEGIN:VTODO'))=='\r\n')
+ {
+ var partTodo=vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VTODO')-2,vcalendarOrig.indexOf('END:VTODO')+'END:VTODO'.length);
+ vcalendarOrig=vcalendarOrig.replace(partTodo, '');
+ }
+ else
+ {
+ var partTodo=vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VTODO'),vcalendarOrig.indexOf('END:VTODO')+'END:VTODO'.length);
+ vcalendarOrig=vcalendarOrig.replace(partTodo, '');
+ partTodo+='\r\n';
+ }
+ var rec_array=partTodo.match(vCalendar.pre['contentline_RECURRENCE_ID']);
+ var uidString=partTodo.match(vCalendar.pre['contentline_UID']);
+
+ if(uidString!=null && rec_array!=null)
+ recurrence_id_array[recurrence_id_array.length]=rec_array[0].match(vCalendar.pre['contentline_parse'])[4]+';'+uidString[0].match(vCalendar.pre['contentline_parse'])[4];
+
+ todoArray[todoArray.length]=partTodo;
+ }
+
+ if(todoArray.length==0)
+ return false;
+ var repeatHashEquals = false;
+ for(var toIt=0; toIt<todoArray.length; toIt++)
+ {
+ var oo='',
+ note='',
+ start='',
+ end='',
+ title='',
+ all=false,
+ frequency='',
+ until='',
+ complete='',
+ isUntilDate=false,
+ alertTime=new Array(),
+ alertNote=new Array(),
+ alertTimeOut=new Array(),
+ valOffsetFrom='',
+ tzName='local',
+ classType='',
+ url='',
+ tmpObj='',
+ isRepeat=false,
+ intOffset='',
+ realStart='',
+ realEnd='',
+ interval='',
+ until='',
+ completedOn='',
+ location='',
+ isUntilDate=false,
+ wkst='',
+ byMonthDay='',
+ byDay='',
+ rec_id='',
+ created='',
+ repeatHash='',
+ returnForValue = true,
+ pars=new Array();
+ var rid=inputEvent.uid.substring(0, inputEvent.uid.lastIndexOf('/')+1);
+ var status='',filterStatus='',renderPriority=0,
+ percent="0",
+ priority="0",
+ alarms=new Array();
+ var vcalendar=inputEvent.vcalendar;
+ var dates = new Array();
+ var vcalendar=todoArray[toIt];
+ var stringUID=vcalendar.match(vCalendar.pre['contentline_UID']);
+ if(stringUID!=null)
+ stringUID=stringUID[0].match(vCalendar.pre['contentline_parse'])[4];
+
+ var exDates=new Array();
+ var exDate=null;
+ var exDate_array=new Array();
+ var vcalendar2=vcalendar+'';
+
+ while(vcalendar2.match(vCalendar.pre['contentline_EXDATE'])!= null)
+ {
+ exDate=vcalendar2.match(vCalendar.pre['contentline_EXDATE']);
+ exDate_array[exDate_array.length]=exDate[0];
+ vcalendar2=vcalendar2.replace(exDate,'\r\n');
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_RRULE2']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+// if(parsed[4].indexOf('BYSETPOS')!=-1 || parsed[4].indexOf('BYWEEKNO')!=-1)
+// {
+// console.log("Error:'"+inputEvent.uid+"': Unsupported recurrence rule in todo:"+vcalendar);
+// return false;
+// }
+ pars=parsed[4].split(';');
+ var parString='';
+ if(pars.length>0)
+ isRepeat=true;
+ for(var i=0;i<pars.length;i++)
+ {
+ if(pars[i].indexOf('FREQ=')!=-1)
+ frequency=pars[i].split('=')[1];
+ else if(pars[i].indexOf('INTERVAL=')!=-1)
+ interval=pars[i].split('=')[1];
+ else if(pars[i].indexOf('COUNT=')!=-1)
+ {
+ until=pars[i].split('=')[1];
+ if(until==0)
+ {
+ returnForValue = false;
+ break
+ }
+ else if(isNaN(until))
+ {
+ returnForValue = false;
+ break
+ }
+ }
+ else if(pars[i].indexOf('UNTIL=')!=-1)
+ {
+ isUntilDate=true;
+ until=pars[i].split('=')[1];
+ }
+ else if(pars[i].indexOf('WKST=')!=-1)
+ {
+ wkst=pars[i].split('=')[1].replace(/\d*MO/,1).replace(/\d*TU/,2).replace(/\d*WE/,3).replace(/\d*TH/,4).replace(/\d*FR/,5).replace(/\d*SA/,6).replace(/\d*SU/,0);
+ if(globalSettings.mozillasupport.value!=null && globalSettings.mozillasupport.value)
+ wkst='';
+ }
+ else if(pars[i].indexOf('BYMONTHDAY=')!=-1)
+ byMonthDay=pars[i].split('=')[1];
+ else if(pars[i].indexOf('BYDAY=')!=-1)
+ {
+ byDay=pars[i].split('=')[1];
+ byDay=byDay.replace(/\d*MO/,1).replace(/\d*TU/,2).replace(/\d*WE/,3).replace(/\d*TH/,4).replace(/\d*FR/,5).replace(/\d*SA/,6).replace(/\d*SU/,0).split(',');
+// if(byDay.length>1 &&(frequency=='MONTHLY'||frequency=='YEARLY'))
+// {
+// console.log("Error:'"+inputEvent.uid+"': Unsupported recurrence rule in todo:"+vcalendar);
+// return false;
+// }
+ }
+ }
+ if(!returnForValue)
+ return false;
+ if(!interval)
+ interval=1;
+ }
+ var help1 = '';
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_DTSTART']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ start=parsed[4];
+
+ help1=start;
+ if(help1.indexOf("T")==-1)
+ {
+ help1=help1.substring(0, 4)+'-'+help1.substring(4, 6)+'-'+help1.substring(6, 8);
+ all=true;
+ }
+ else
+ {
+ help1=help1.substring(0, 4)+'-'+help1.substring(4, 6)+'-'+help1.substring(6, 8)+'T'+help1.substring(9, 11)+':'+help1.substring(11, 13)+':'+help1.substring(13, 15);
+ all=false;
+ }
+
+ var t=$.fullCalendar.parseDate(help1);
+ start=help1;
+ if(t==null)
+ return false;
+ if((t.toString())=='Invalid Date')
+ return false;
+ if(exDate_array!=null)
+ for(var j=0;j<exDate_array.length;j++)
+ {
+ var exString=(exDate_array[j]+'\r\n').match(vCalendar.pre['contentline_parse'])[4];
+ if(exString.indexOf('T')!=-1 && exString.indexOf('Z')!=-1)
+ var utcTime=exString.parseComnpactISO8601().setSeconds(getLocalOffset(exString.parseComnpactISO8601())*-1);
+ else if(exString.indexOf('T')!=-1 && exString.indexOf('Z')==-1)
+ var utcTime=exString.parseComnpactISO8601();
+ else
+ {
+ if(start.indexOf('T')!=-1)
+ exString += 'T' + $.fullCalendar.formatDate(t,'HHmmss');
+
+ var utcTime=exString.parseComnpactISO8601();
+ }
+ exDates[exDates.length]=new Date(utcTime).toString();
+ }
+
+ var dtStartTimezone=parsed[3].split('=');
+ if(!all)
+ {
+ if(parsed[4].charAt(parsed[4].length-1)=='Z')
+ tzName='UTC';
+
+ if(dtStartTimezone.length>1 || tzName=='UTC')
+ {
+ if(tzName!='UTC')
+ tzName=$.trim(dtStartTimezone[1]);
+ var finTZ = checkTimezone(tzName);
+ if(finTZ!=null)
+ tzName = finTZ;
+ if(globalSettings.timezonesupport.value && tzName in timezones)
+ {
+ valOffsetFrom=getOffsetByTZ(tzName, t);
+ intOffset=(getLocalOffset(t)*-1*1000)-valOffsetFrom.getSecondsFromOffset()*1000;
+ }
+ }
+ else if(processedTimezones.indexOf(tzName)==-1)
+ {
+ if(timeZonesEnabled.indexOf(tzName)==-1)
+ timeZonesEnabled.push('local');
+ processedTimezones.push('local');
+ }
+ if(tzName!='' && tzName != 'local')
+ if(processedTimezones.indexOf(tzName)==-1)
+ {
+ if(timeZonesEnabled.indexOf(tzName)==-1)
+ timeZonesEnabled.push(tzName);
+ processedTimezones.push(tzName);
+ }
+ }
+ realStart=start;
+ if(help1.indexOf("T")!=-1)
+ {
+ if(intOffset!='')
+ t.setTime(t.getTime()+intOffset);
+
+ start=$.fullCalendar.formatDate(t,'u');
+ }
+ inputEvent.start=$.fullCalendar.parseDate(start);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_DUE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ end=parsed[4];
+
+ var help=end;
+ var oldEnd = '';
+ if(help.indexOf("T")==-1)
+ {
+
+ help=help.substring(0, 4)+'-'+help.substring(4, 6)+'-'+help.substring(6, 8);
+
+ var d=$.fullCalendar.parseDate(help);
+ var da=new Date(d.getTime());
+ if(help1.indexOf("T")==-1)
+ da.setDate(da.getDate()-1);
+ help=$.fullCalendar.formatDate(da, "yyyy-MM-dd");
+ all=true;
+ oldEnd = help;
+ if(help1.indexOf("T")!=-1)
+ {
+ all=false;
+ help+='T00:00:00';
+ if(tzName == 'UTC')
+ help+='Z';
+ }
+ }
+ else
+ {
+ help=help.substring(0, 4)+'-'+help.substring(4, 6)+'-'+help.substring(6, 8)+'T'+help.substring(9, 11)+':'+help.substring(11, 13)+':'+help.substring(13, 15);
+ oldEnd = help;
+ all=false;
+ }
+
+ end=help;
+ var t1=$.fullCalendar.parseDate(end);
+ if(t1==null)
+ return false;
+
+ if((t1.toString())=='Invalid Date')
+ return false;
+
+ if(exDate_array!=null && exDates.length==0)
+ for(var j=0;j<exDate_array.length;j++)
+ {
+ var exString=(exDate_array[j]+'\r\n').match(vCalendar.pre['contentline_parse'])[4];
+ if(exString.indexOf('T')!=-1 && exString.indexOf('Z')!=-1)
+ var utcTime=exString.parseComnpactISO8601().setSeconds(getLocalOffset(exString.parseComnpactISO8601())*-1);
+ else if(exString.indexOf('T')!=-1 && exString.indexOf('Z')==-1)
+ var utcTime=exString.parseComnpactISO8601();
+ else
+ {
+ if(end.indexOf('T')!=-1)
+ exString += 'T' + $.fullCalendar.formatDate(t1,'HHmmss');
+
+ var utcTime=exString.parseComnpactISO8601();
+ }
+ exDates[exDates.length]=new Date(utcTime).toString();
+ }
+ if(intOffset=='' && (help1.indexOf("T")!=-1 || oldEnd.indexOf("T")!=-1))
+ {
+ var dtStartTimezone=parsed[3].split('=');
+
+ if(parsed[4].charAt(parsed[4].length-1)=='Z')
+ tzName='UTC';
+ if(dtStartTimezone.length>1 || tzName=='UTC')
+ {
+ if(tzName!='UTC' && oldEnd.indexOf("T")!=-1)
+ tzName=$.trim(dtStartTimezone[1]);
+ var finTZ = checkTimezone(tzName);
+ if(finTZ!=null)
+ tzName = finTZ;
+ if(globalSettings.timezonesupport.value && tzName in timezones)
+ {
+ valOffsetFrom=getOffsetByTZ(tzName, t1);
+ intOffset=(getLocalOffset(t1)*-1*1000)-valOffsetFrom.getSecondsFromOffset()*1000;
+ }
+ }
+ }
+
+ realEnd=help;
+ if(globalSettings.appleremindersmode.value)
+ realStart=help;
+ if(help.indexOf("T")!=-1)
+ {
+ if(intOffset!='')
+ t1.setTime(t1.getTime()+intOffset);
+ end=$.fullCalendar.formatDate(t1,'u');
+ }
+ inputEvent.end=end;
+ if(globalSettings.appleremindersmode.value)
+ start=end;
+ }
+ if(globalSettings.appleremindersmode.value && realEnd=='' && realStart!='')
+ {
+ realStart='';
+ start='';
+ }
+
+ var finalAString='';
+ var valarm=vcalendar.match(vCalendar.pre['valarm']);
+ if(valarm!=null)
+ {
+ vcalendar=vcalendar.replace(valarm[0], '');
+
+ var alarmString='';
+ var alarmArray=new Array();
+ for(var i=0;i<valarm[0].length;i++)
+ {
+ if(valarm[0].substring(i-'END:VALARM'.length, i)=='END:VALARM')
+ {
+ alarmArray[alarmArray.length]=alarmString+'\r\n';
+ alarmString='';
+ }
+ alarmString+=valarm[0][i];
+ }
+
+ for(var j=0;j<alarmArray.length;j++)
+ {
+ if(alarmArray[j].indexOf('\r\n')==0 && finalAString.lastIndexOf('\r\n')==(finalAString.length-2))
+ finalAString+=alarmArray[j].substring(2,alarmArray[j].length);
+ else if((alarmArray[j].indexOf('\r\n')==0 && finalAString.lastIndexOf('\r\n')!=(finalAString.length-2)) || (alarmArray[j].indexOf('\r\n')!=0 && finalAString.lastIndexOf('\r\n')==(finalAString.length-2)) )
+ finalAString+=alarmArray[j];
+ else
+ finalAString+='\r\n'+alarmArray[j];
+ checkA=alarmArray[j].match(vCalendar.re['valarm']);
+ if(checkA!=null)
+ {
+ action=(alarmArray[j]).match(vCalendar.pre['contentline_ACTION']);
+ if(action!=null)
+ parsed=action[0].match(vCalendar.pre['contentline_parse']);
+ else
+ break;
+
+ trigger=alarmArray[j].match(vCalendar.pre['contentline_TRIGGER']);
+ if(trigger!=null)
+ {
+ parsed=(trigger[0]+'\r\n').match(vCalendar.pre['contentline_parse']);
+
+ if(parsed!=null)
+ {
+ value=parsed[4];
+ var checkD=value.match(vCalendar.pre['date-time-value']);
+ var intOffsetA='';
+ var tzNameA='';
+ if(checkD!=null)
+ {
+ if(parsed[3])
+ var dtStartTimezoneA=parsed[3].split('=');
+ var alarmTimeA=$.fullCalendar.parseDate(value.substring(0, 4)+'-'+value.substring(4, 6)+'-'+value.substring(6, 8)+'T'+value.substring(9, 11)+':'+value.substring(11, 13)+':'+value.substring(13, 15));
+ if(value.charAt(value.length-1)=='Z')
+ tzNameA='UTC';
+ if(dtStartTimezoneA.length>1 || tzNameA=='UTC')
+ {
+ if(tzNameA!='UTC' && dtStartTimezoneA[0]==';TZID')
+ tzNameA=$.trim(dtStartTimezoneA[1]);
+ var finTZ = checkTimezone(tzNameA);
+ if(finTZ!=null)
+ tzNameA = finTZ;
+ if(globalSettings.timezonesupport.value && tzNameA in timezones)
+ {
+ var valOffsetFromA=getOffsetByTZ(tzNameA, alarmTimeA);
+ if(tzName != 'local')
+ intOffsetA=getOffsetByTZ(tzName, alarmTimeA).getSecondsFromOffset()*1000-valOffsetFromA.getSecondsFromOffset()*1000;
+ else
+ intOffsetA=-1*getLocalOffset(alarmTimeA)*1000-valOffsetFromA.getSecondsFromOffset()*1000;
+ }
+ }
+ else if(processedTimezones.indexOf(tzName)==-1)
+ {
+ if(timeZonesEnabled.indexOf(tzName)==-1)
+ timeZonesEnabled.push('local');
+ processedTimezones.push('local');
+ }
+ if(tzNameA!='' && tzName != 'local')
+ if(processedTimezones.indexOf(tzNameA)==-1)
+ {
+ if(timeZonesEnabled.indexOf(tzNameA)==-1)
+ timeZonesEnabled.push(tzNameA);
+ processedTimezones.push(tzNameA);
+ }
+ if(intOffsetA!='')
+ alarmTimeA.setTime(alarmTimeA.getTime()+intOffsetA);
+ alertTime[j]=$.fullCalendar.formatDate(alarmTimeA,"yyyy-MM-dd'T'HH:mm:ss");
+ }
+ else
+ {
+ alertTime[j]=0;
+
+ if(value.indexOf('W')!=-1)
+ alertTime[j]=parseAlarmWeek(value);
+ else if(value.indexOf('D')!=-1)
+ alertTime[j]=parseAlarmDay(value);
+ else if(value.indexOf('T')!=-1)
+ alertTime[j]=parseAlarmTime(value);
+
+ if(parsed[4].charAt(0)=="-")
+ alertTime[j]="-"+alertTime[j];
+ else
+ alertTime[j]="+"+alertTime[j];
+ }
+ }
+ }
+ else
+ break;
+
+ alnote=alarmArray[j].match(vCalendar.pre['contentline_NOTE']);
+ if(alnote!=null)
+ {
+ parsed=alnote[0].match(vCalendar.pre['contentline_parse']);
+ alertNote[j]=parsed[4];
+ }
+ else
+ alertNote[j]='Default note';
+ }
+ }
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_LOCATION']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ location=vcalendarUnescapeValue(parsed[4]);
+ }
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_NOTE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ note=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_CLASS']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ classType=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_URL']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ url=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ //NEEDS-ACTION
+ //COMPLETED
+ //IN-PROCESS
+ //CANCELLED
+ //PERCENT-COMPLETE
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_RECURRENCE_ID']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ var rec=parsed[4];
+ /*if(rec.indexOf("T")==-1)
+ {
+ rec=rec.substring(0, 4)+'/'+rec.substring(4, 6)+'/'+rec.substring(6, 8);
+ var d=$.fullCalendar.parseDate(rec);
+ var da=new Date(d.getTime()-1*24*60*60*1000);
+ var day=da.getDate();
+
+ if(day<10)
+ day='0'+day;
+
+ var month=da.getMonth();
+ month++;
+ if(month<10)
+ month='0'+month;
+
+ rec=da.getFullYear()+'-'+month+'-'+day;
+ }
+ else
+ rec=rec.substring(0, 4)+'-'+rec.substring(4, 6)+'-'+rec.substring(6, 8)+'T'+rec.substring(9, 11)+':'+rec.substring(11, 13)+':'+rec.substring(13, 15);
+ rec_id=$.fullCalendar.parseDate(rec);*/
+ //if(!rec_id || rec_id=='Invalid Date')
+ // rec_id='';
+ rec_id=rec;
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_SUMMARY']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ title=vcalendarUnescapeValue(parsed[4]);
+ }
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_CREATED']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ created=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_STATUS']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ status=vcalendarUnescapeValue(parsed[4]);
+ }
+ if(globalSettings.appleremindersmode.value && (status=='IN-PROCESS' || status=='CANCELLED'))
+ status = 'NEEDS-ACTION';
+ switch(status)
+ {
+ case 'NEEDS-ACTION':
+ filterStatus = 'filterAction';
+ break;
+ case 'COMPLETED':
+ filterStatus = 'filterCompleted';
+ break;
+ case 'IN-PROCESS':
+ filterStatus = 'filterProgress';
+ break;
+ case 'CANCELLED':
+ filterStatus = 'filterCanceled';
+ break;
+ default:
+ filterStatus = 'filterAction';
+ break;
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_COMPLETED']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ var tmpDate=parsed[4];
+
+ if(tmpDate.indexOf("T")!=-1)
+ tmpDate=tmpDate.substring(0, 4)+'-'+tmpDate.substring(4, 6)+'-'+tmpDate.substring(6, 8)+'T'+tmpDate.substring(9, 11)+':'+tmpDate.substring(11, 13)+':'+tmpDate.substring(13, 15);
+
+ var t1=$.fullCalendar.parseDate(tmpDate);
+ if(t1==null || ((t1.toString())=='Invalid Date'))
+ completedOn='';
+ else
+ completedOn=new Date(t1.getTime());
+
+ if(completedOn!='')
+ {
+ var intOffsetA='';
+ var dtStartTimezoneA = new Array();
+ if(parsed[3])
+ dtStartTimezoneA=parsed[3].split('=');
+ if(parsed[4].charAt(parsed[4].length-1)=='Z')
+ tzNameA='UTC';
+ if(dtStartTimezoneA.length>1 || tzNameA=='UTC')
+ {
+ if(tzNameA!='UTC')
+ tzNameA=$.trim(dtStartTimezoneA[1]);
+ var finTZ = checkTimezone(tzNameA);
+ if(finTZ!=null)
+ tzNameA = finTZ;
+ if(globalSettings.timezonesupport.value && tzNameA in timezones)
+ {
+ var valOffsetFromA=getOffsetByTZ(tzNameA, completedOn);
+ intOffsetA=getOffsetByTZ(tzName, completedOn).getSecondsFromOffset()*1000-valOffsetFromA.getSecondsFromOffset()*1000;
+ }
+ }
+ else if(processedTimezones.indexOf(tzName)==-1)
+ {
+ if(timeZonesEnabled.indexOf(tzName)==-1)
+ timeZonesEnabled.push('local');
+ processedTimezones.push('local');
+ }
+ if(tzName!='' && tzName != 'local')
+ if(processedTimezones.indexOf(tzNameA)==-1)
+ {
+ if(timeZonesEnabled.indexOf(tzNameA)==-1)
+ timeZonesEnabled.push(tzNameA);
+ processedTimezones.push(tzNameA);
+ }
+
+ if(intOffsetA!='')
+ completedOn.setTime(completedOn.getTime()+intOffsetA);
+ }
+ }
+ if(status=='COMPLETED' && completedOn=='' && end!='' && typeof end=='object')
+ completedOn=new Date(end.getTime());
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_PERCENT-COMPLETE']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ complete=vcalendarUnescapeValue(parsed[4]);
+ percent=complete;
+ }
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_PRIORITY']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ priority=vcalendarUnescapeValue(parsed[4]);
+ var priorN = parseInt(priority,10);
+ if(!isNaN(priorN))
+ {
+ if(priority>5 && priority<10)
+ renderPriority=3;
+ else if(priority<5 && priority>0)
+ renderPriority=1;
+ else if(priority==5)
+ renderPriority=2;
+ else
+ renderPriority=0;
+ }
+ }
+
+ var evid=inputEvent.uid.substring(inputEvent.uid.lastIndexOf('/')+1, inputEvent.uid.length);
+ var todos='',
+ p=0;
+ var isChange=false;
+ if(isRepeat &&(realStart || realEnd))
+ repeatHash=inputEvent.uid+'#'+created+'#'+frequency;
+ else if(!isRepeat)
+ repeatHash=inputEvent.uid+'#'+created+'#'+rec_id;
+
+ if(percent!='' && percent!='0' && percent!='100' && percent!='50')
+ {
+ if(typeof globalTodolistStatusArray[repeatHash]=='undefined')
+ globalTodolistStatusArray[repeatHash] = {};
+ globalTodolistStatusArray[repeatHash].percent = percent;
+ }
+
+ if(!isNew && !repeatHashEquals)
+ {
+ var checkForChangeTodo=findEventInArray(inputEvent.uid, false, globalCalTodo!=null ? globalCalTodo.repeatHash : null);
+ if(checkForChangeTodo!='')
+ {
+ if(checkForChangeTodo.etag!=inputEvent.etag || ($('#showTODO').val()==inputEvent.uid && ($('#repeatTodo').val()=="true" || $('#recurrenceIDTODO').val()!='') && !repeatHashEquals))
+ {
+ for(var it=0; it<checkForChangeTodo.alertTimeOut.length; it++)
+ clearTimeout(checkForChangeTodo.alertTimeOut[it]);
+ if($('#showTODO').val()==inputEvent.uid)
+ {
+ if($('#repeatTodo').val()=="true" || $('#recurrenceIDTODO').val()!='')
+ {
+ if(!(typeof globalCalTodo!='undefined' && globalCalTodo!=null && globalCalTodo.repeatHash == repeatHash))
+ {
+ var name=globalCalTodo.title;
+ //showTodoForm({title: name, id:inputEvent.uid}, 'show','', true);
+ $('#editAllTODO').css('visibility','hidden');
+ $('#editFutureTODO').css('visibility','hidden');
+ $('#editOnlyOneTODO').css('visibility','hidden');
+ $('#repeatConfirmBoxContentTODO').html('<b>'+name+"</b> "+localization[globalInterfaceLanguage].repeatChangeTxt);
+ $('#repeatConfirmBoxQuestionTODO').html(localization[globalInterfaceLanguage].repeatTodoChangeTxtClose);
+ }
+ else
+ {
+ isChange=true;
+ repeatHashEquals=true;
+ $('#todoList').fullCalendar('selectEvent');
+ }
+ }
+ else
+ isChange=true;
+ }
+ }
+ }
+ }
+
+ var res=0;
+ var index=0;
+ for(var p=0;p<globalResourceCalDAVList.TodoCollections.length;p++)
+ if(typeof globalResourceCalDAVList.TodoCollections[p].uid !='undefined' && globalResourceCalDAVList.TodoCollections[p].uid==inputCollection.uid)
+ {
+ index=p;
+ break;
+ }
+ var re=new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@([^/]+)(.*/)([^/]+/)([^/]+/)([^/]*)', 'i');
+ var tmp=rid.match(re);
+ var firstPart=index.pad(String(globalResourceCalDAVList.TodoCollections.length).length);
+
+ var compareString=(firstPart + title).toLowerCase();
+ var isall=false;
+ if(isRepeat &&(realStart || realEnd))
+ {
+ var firstDateSaved = false;
+ if(globalAppleSupport.nextDates[inputEvent.uid]!=undefined)
+ delete globalAppleSupport.nextDates[inputEvent.uid];
+ var ruleString=vcalendar.match(vCalendar.pre['contentline_RRULE2'])[0].match(vCalendar.pre['contentline_parse'])[4];
+ inputEvent.isRepeat=true;
+
+ if(realStart)
+ var varDate=new Date($.fullCalendar.parseDate(realStart).getTime());
+ else if(realEnd)
+ var varDate=new Date($.fullCalendar.parseDate(realEnd).getTime());
+
+ if(realEnd)
+ var varEndDate=new Date($.fullCalendar.parseDate(realEnd).getTime());
+
+ var lastGenDate='';
+ var repeatStart='', repeatEnd='';
+ if(realStart)
+ repeatStart=new Date(varDate.getTime());
+ if(realEnd)
+ repeatEnd=new Date(varEndDate.getTime());
+ var untilDate='',
+ realUntilDate='',
+ realUntil='';
+ if(until!=='')
+ {
+ if(isUntilDate)
+ {
+ if(until.indexOf('T')!=-1)
+ {
+ var uString = until.substring(0, 4)+'-'+until.substring(4, 6)+'-'+until.substring(6, 8)+'T'+until.substring(9, 11)+':'+until.substring(11, 13)+':'+until.substring(13, 15);
+ var ut=$.fullCalendar.parseDate(uString);
+ if(ut==null)
+ return false;
+ if(ut.toString()=='Invalid Date')
+ return false;
+
+ if(globalSettings.timezonesupport.value && tzName in timezones)
+ valOffsetFrom=getOffsetByTZ(tzName, ut);
+ if(valOffsetFrom)
+ {
+ var intOffset=valOffsetFrom.getSecondsFromOffset()*1000;
+ ut.setTime(ut.getTime()+intOffset);
+ }
+ untilDate = new Date(ut.getTime());
+ }
+ else
+ {
+ untilDate=$.fullCalendar.parseDate(until.substring(0, 4)+'-'+until.substring(4, 6)+'-'+until.substring(6, 8));
+ if(realStart!='')
+ {
+ untilDate.setHours($.fullCalendar.parseDate(realStart).getHours());
+ untilDate.setMinutes($.fullCalendar.parseDate(realStart).getMinutes());
+ untilDate.setSeconds($.fullCalendar.parseDate(realStart).getSeconds());
+ }
+ else if(realEnd!='')
+ {
+ untilDate.setHours($.fullCalendar.parseDate(realEnd).getHours());
+ untilDate.setMinutes($.fullCalendar.parseDate(realEnd).getMinutes());
+ untilDate.setSeconds($.fullCalendar.parseDate(realEnd).getSeconds());
+ }
+ }
+
+ realUntil='';
+ }
+ else
+ {
+ untilDate='';
+ realUntil=until;
+
+ }
+ realUntilDate=untilDate;
+ inputEvent.untilDate=untilDate;
+ }
+ else
+ {
+ untilDate=globalToLoadedLimitTodo;
+ realUntilDate='';
+ inputEvent.untilDate='never';
+ }
+ var repeatCount=0, realRepeatCount=0;
+
+
+ var repeatLimit = new Date(globalToLoadedLimitTodo.getTime());
+ repeatLimit.setMonth(repeatLimit.getMonth() + 2);
+
+ var dayDifference=0;
+ if(realEnd)
+ dayDifference=varEndDate.getTime()-varDate.getTime();
+ var lastGenDate=generateTodoRepeatInstances({
+ dayDifference:dayDifference,
+ untilDate:realUntilDate,
+ repeatStart:repeatStart,
+ repeatEnd:repeatEnd,
+ futureRLimit:repeatLimit,
+ stringUID:stringUID,
+ recurrence_id_array:recurrence_id_array,
+ exDates:exDates,
+ alertTime:alertTime,
+ ignoreAlarms:inputCollection.ignoreAlarms,
+ isChange:isChange,
+ todoArray:todoArray,
+ preTodoArray:preTodoArray,
+ realRepeatCount:realRepeatCount,
+ repeatCount:repeatCount,
+ items:new todoItems(start,end, realUntilDate, frequency, interval, realUntil, wkst, repeatStart, repeatEnd, repeatCount, realRepeatCount, byDay, location, note, title, inputEvent.uid, vcalendar, inputEvent.etag, alertTime, alertNote, status, filterStatus, rec_id, repeatHash, percent, inputEvent.displayValue, rid, compareString, tzName, realStart, realEnd, alertTimeOut,classType,url,completedOn, toIt, priority,renderPriority, finalAString,ruleString)
+ });
+ }
+ else
+ {
+ if(end!='' && typeof end == 'string')
+ {
+ var ttt = $.fullCalendar.parseDate(end);
+ end=new Date(ttt.getTime());
+ }
+ if(!inputCollection.ignoreAlarms)
+ alertTimeOut=setAlertTimeouts(true, alertTime, start,end, {title:title, status:status},true, inputEvent.uid);
+
+ var tmpObj=new todoItems(start, end, '', '', '', '', '', '', '', '', '', '', location, note, title, inputEvent.uid, vcalendar, inputEvent.etag, alertTime, alertNote, status, filterStatus, rec_id, repeatHash, percent, inputEvent.displayValue, rid, compareString, tzName, realStart, realEnd, alertTimeOut,classType,url,completedOn,toIt, priority,renderPriority, finalAString,'');
+ preTodoArray.splice(preTodoArray.length, 0, tmpObj);
+ if(isChange)
+ globalCalTodo=tmpObj;
+ }
+ deleteEventFromArray(inputEvent.uid);
+ $.merge(globalEventList.displayTodosArray[rid],preTodoArray);
+ }
+}
bgstack15