main.js 93 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942
  1. /*
  2. CalDavZAP - the open source CalDAV Web Client
  3. Copyright (C) 2011-2015
  4. Jan Mate <jan.mate@inf-it.com>
  5. Andrej Lezo <andrej.lezo@inf-it.com>
  6. Matej Mihalik <matej.mihalik@inf-it.com>
  7. This program is free software: you can redistribute it and/or modify
  8. it under the terms of the GNU Affero General Public License as
  9. published by the Free Software Foundation, either version 3 of the
  10. License, or (at your option) any later version.
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU Affero General Public License for more details.
  15. You should have received a copy of the GNU Affero General Public License
  16. along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. var globalEventList=new EventList();
  19. var globalAppleSupport = new AppleSupportNextDateArray();
  20. var globalResourceCalDAVList=new ResourceCalDAVList();
  21. var maxAlarmValue=2147000000;
  22. var globalMultiWeekSize=3;
  23. var globalMaxNextInstanesTodoCheckingNumber=60;
  24. var globalEventIntervalID=null;
  25. var globalResourceRefreshNumber=0;
  26. var globalResourceRefreshNumberTodo=0;
  27. var globalCalDAVInitLoad=true;
  28. var globalCalDAVResourceSync=false;
  29. var globalCalDAVCollectionSync=false;
  30. var globalCalendarNumber=0;
  31. var globalOnlyCalendarNumber=0;
  32. var globalTodoCalendarNumber=0;
  33. var globalOnlyCalendarNumberCount=0;
  34. var globalOnlyTodoCalendarNumberCount=0;
  35. var globalCalendarNumberCount=0;
  36. var globalEventTimeoutID=0;
  37. var cleanResourceCalDAVListTemplate=null;
  38. var cleanResourceCalDAVTODOListTemplate=null;
  39. var cleanVcalendarTemplate=null;
  40. var cleanVtodoTemplate=null;
  41. var origResourceCalDAVListTemplate=null;
  42. var origResourceCalDAVTODOListTemplate=null;
  43. var origVcalendarTemplate=null;
  44. var origVtodoTemplate=null;
  45. var origVtodoLoaderTemplate=null;
  46. var globalSessionTimeZone=null;
  47. var globalCalDAVQs=null;
  48. var globalCalDAVTODOQs=null;
  49. var globalVisibleCalDAVCollections=new Array();
  50. var globalVisibleCalDAVTODOCollections=new Array();
  51. var isResourceComplete=false;
  52. var prevFunctionArray=new Array();
  53. var prevFunctionArrayIterator=0;
  54. var globalWorkerArray=new Array();
  55. var globalIntervalArray=new Array();
  56. var globalCurrentLoadingResource='';
  57. var timeZonesEnabled=new Array();
  58. var cLcouny=42;
  59. var processedTimezones = Array();
  60. var timelist=new Array();
  61. var minelems=[0,15,30,45];
  62. var frequencies = ["SECONDLY", "MINUTELY", "HOURLY", "DAILY", "WEEKLY", "MONTHLY", "YEARLY"];
  63. var globalToday=new Date();
  64. var isCalDAVLoaded=false;
  65. var isCalDAVAvaible=true;
  66. var globalLoadedLimit = new Date();
  67. var globalToLoadedLimit = new Date();
  68. var globalLimitLoading='';
  69. var globalLimitTodoLoading='';
  70. var globalBeginPast = new Date();
  71. var globalBeginFuture = new Date();
  72. var globalLoadedLimitTodo = new Date();
  73. var globalToLoadedLimitTodo = new Date();
  74. var globalDefaultCalendarCollectionActiveAll = false;
  75. var globalDefaultTodoCalendarCollectionActiveAll = false;
  76. var globalDefaultCalendarCollectionLoadAll = false;
  77. var globalDefaultTodoCalendarCollectionLoadAll = false;
  78. var globalTodoLoaderHide='';
  79. var globalEventCollectionsLoading=false;
  80. var globalTodoCollectionsLoading=false;
  81. var globalCalEvent=null;
  82. var globalCalTodo=null;
  83. var globalJsEvent=null;
  84. var globalRevertFunction=null;
  85. var globalPrevDragEventAllDay=null;
  86. var globalPrevDate='';
  87. var globalAllowFcRerender=true;
  88. var globalCalWidth=0;
  89. var globalTodoCheckTimeout=null;
  90. var globalTodoCheckTimeoutDelay=1000;
  91. var globalTodolistStatusArray={};
  92. var globalSettings={
  93. version: {value: (typeof globalSettingsVersion!='undefined' && globalSettingsVersion!=null) ? globalSettingsVersion : 1, locked:false},
  94. resourcealphabetsorting: {value: (typeof globalResourceAlphabetSorting!='undefined' && globalResourceAlphabetSorting!=null) ? globalResourceAlphabetSorting : true, locked:false},
  95. usejqueryauth: {value: (typeof globalUseJqueryAuth!='undefined' && globalUseJqueryAuth!=null) ? globalUseJqueryAuth : false, locked:false},
  96. settingstype: {value: (typeof globalSettingsType!='undefined' && globalSettingsType!=null && globalSettingsType!='') ? globalSettingsType : 'principal-URL', locked:false},
  97. defaultactiveapp: {value: (typeof globalDefaultActiveApp!='undefined' && globalDefaultActiveApp!=null && globalDefaultActiveApp!='') ? globalDefaultActiveApp : null, locked:false},
  98. islastdefaultactiveapp: {value: false, locked:false},
  99. datepickerfirstdayofweek: {value: (typeof globalDatepickerFirstDayOfWeek!='undefined' && globalDatepickerFirstDayOfWeek!=null) ? globalDatepickerFirstDayOfWeek : 1, locked:false},
  100. syncresourcesinterval: {value: (typeof globalSyncResourcesInterval!='undefined' && globalSyncResourcesInterval!=null) ? globalSyncResourcesInterval :300000, locked:false},
  101. datepickerformat: {value: (typeof globalDatepickerFormat!='undefined' && globalDatepickerFormat!=null && globalDatepickerFormat!='') ? globalDatepickerFormat : localization[globalInterfaceLanguage]._default_datepicker_format_, locked:false},
  102. backgroundsync: {value: (typeof globalBackgroundSync!='undefined' && globalBackgroundSync!=null) ? globalBackgroundSync : true, locked:false},
  103. enablekbnavigation: {value: (typeof globalEnableKbNavigation!='undefined' && globalEnableKbNavigation!=null) ? globalEnableKbNavigation : true, locked:false},
  104. rewritetimezonecomponent: {value: (typeof globalRewriteTimezoneComponent!='undefined' && globalRewriteTimezoneComponent!=null) ? globalRewriteTimezoneComponent : true, locked:false},
  105. removeunknowntimezone: {value: (typeof globalRemoveUnknownTimezone!='undefined' && globalRemoveUnknownTimezone!=null) ? globalRemoveUnknownTimezone : false, locked:false},
  106. mozillasupport: {value: (typeof globalMozillaSupport!='undefined' && globalMozillaSupport!=null) ? globalMozillaSupport : false, locked:false},
  107. appleremindersmode: {value: (typeof globalAppleRemindersMode!='undefined' && globalAppleRemindersMode!=null) ? globalAppleRemindersMode : false, locked:false},
  108. titleformatmonth: {value: localization[globalInterfaceLanguage]._default_title_format_month_, locked:false},
  109. titleformatweek: {value: localization[globalInterfaceLanguage]._default_title_format_week_, locked:false},
  110. titleformatday: {value: localization[globalInterfaceLanguage]._default_title_format_day_, locked:false},
  111. titleformattable: {value: localization[globalInterfaceLanguage]._default_title_format_table_, locked:false},
  112. columnformatagenda: {value: localization[globalInterfaceLanguage]._default_column_format_agenda_, locked:false},
  113. activecalendarcollections: {value: (typeof globalActiveCalendarCollections!='undefined' && globalActiveCalendarCollections!=null) ? globalActiveCalendarCollections : new Array(), locked:false},
  114. activetodocollections: {value: (typeof globalActiveTodoCollections!='undefined' && globalActiveTodoCollections!=null) ? globalActiveTodoCollections : new Array(), locked:false},
  115. loadedcalendarcollections: {value: (typeof globalLoadedCalendarCollections!='undefined' && globalLoadedCalendarCollections!=null) ? globalLoadedCalendarCollections : new Array(), locked:false},
  116. loadedtodocollections: {value: (typeof globalLoadedTodoCollections!='undefined' && globalLoadedTodoCollections!=null) ? globalLoadedTodoCollections : new Array(), locked:false},
  117. todolistfilterselected: {value: (typeof globalTodoListFilterSelected!='undefined' && globalTodoListFilterSelected!=null && globalTodoListFilterSelected!='') ? globalTodoListFilterSelected : ['filterAction', 'filterProgress'], locked:false},
  118. activeview: {value: (typeof globalActiveView!='undefined' && globalActiveView!=null && globalActiveView!='') ? globalActiveView : 'multiWeek', locked:false},
  119. islastactiveview: {value: true, locked:false},
  120. calendarselected: {value: (typeof globalCalendarSelected!='undefined' && globalCalendarSelected!=null && globalCalendarSelected!='') ? globalCalendarSelected : '', locked:false},
  121. todocalendarselected: {value: (typeof globalTodoCalendarSelected!='undefined' && globalTodoCalendarSelected!=null && globalTodoCalendarSelected!='') ? globalTodoCalendarSelected : '', locked:false},
  122. timezone: {value: (typeof globalTimeZone!='undefined' && globalTimeZone!=null && globalTimeZone!='') ? globalTimeZone : 'local', locked:false},
  123. islasttimezone: {value: true, locked:false},
  124. openformmode: {value: (typeof globalOpenFormMode!='undefined' && globalOpenFormMode!=null && globalOpenFormMode!='') ? globalOpenFormMode : 'double', locked:false},
  125. calendarstartofbusiness: {value: (typeof globalCalendarStartOfBusiness!='undefined' && globalCalendarStartOfBusiness!=null) ? globalCalendarStartOfBusiness : 8, locked:false},
  126. calendarendofbusiness: {value: (typeof globalCalendarEndOfBusiness!='undefined' && globalCalendarEndOfBusiness!=null) ? globalCalendarEndOfBusiness : 17, locked:false},
  127. defaulteventduration: {value: (typeof globalDefaultEventDuration!='undefined' && globalDefaultEventDuration!=null && globalDefaultEventDuration>=0) ? globalDefaultEventDuration : null, locked:false},
  128. ampmformat: {value: (typeof globalAMPMFormat!='undefined' && globalAMPMFormat!=null) ? globalAMPMFormat : localization[globalInterfaceLanguage]._default_AMPM_format_, locked:false},
  129. timeformatagenda: {value: (typeof globalTimeFormatAgenda!='undefined' && globalTimeFormatAgenda!=null && globalTimeFormatAgenda!='') ? globalTimeFormatAgenda : null, locked:false},
  130. timeformatbasic: {value: (typeof globalTimeFormatBasic!='undefined' && globalTimeFormatBasic!=null && globalTimeFormatBasic!='') ? globalTimeFormatBasic : null, locked:false},
  131. displayhiddenevents: {value: (typeof globalDisplayHiddenEvents!='undefined' && globalDisplayHiddenEvents!=null) ? globalDisplayHiddenEvents : false, locked:false},
  132. timezonesupport: {value: (typeof globalTimeZoneSupport!='undefined' && globalTimeZoneSupport!=null) ? globalTimeZoneSupport : true, locked:false},
  133. timezonesenabled: {value: (typeof globalTimeZonesEnabled!='undefined' && globalTimeZonesEnabled!=null && globalTimeZonesEnabled!='') ? globalTimeZonesEnabled : [], locked:false},
  134. showhiddenalarms: {value: (typeof globalShowHiddenAlarms!='undefined' && globalShowHiddenAlarms!=null) ? globalShowHiddenAlarms : false, locked:false},
  135. ignorecompletedorcancelledalarms: {value: (typeof globalIgnoreCompletedOrCancelledAlarms!='undefined' && globalIgnoreCompletedOrCancelledAlarms!=null) ? globalIgnoreCompletedOrCancelledAlarms : true, locked:false},
  136. weekenddays: {value: (typeof globalWeekendDays!='undefined' && globalWeekendDays!=null && globalWeekendDays!='') ? globalWeekendDays : [0, 6], locked:false},
  137. eventstartpastlimit: {value: (typeof globalEventStartPastLimit!='undefined' && globalEventStartPastLimit!=null) ? globalEventStartPastLimit : 3, locked:false},
  138. todopastlimit: {value: (typeof globalTodoPastLimit!='undefined' && globalTodoPastLimit!=null) ? globalTodoPastLimit : 3, locked:false},
  139. eventstartfuturelimit: {value: (typeof globalEventStartFutureLimit!='undefined' && globalEventStartFutureLimit!=null) ? globalEventStartFutureLimit : 3, locked:false},
  140. compatibility: {value: (typeof globalCompatibility!='undefined' && globalCompatibility!=null && globalCompatibility!='') ? globalCompatibility : {anniversaryOutputFormat: ['apple']}, locked:false},
  141. contactstorefn: {value: (typeof globalContactStoreFN!='undefined' && globalContactStoreFN!=null && globalContactStoreFN!='') ? globalContactStoreFN : ['prefix',' last',' middle',' first',' suffix'], locked:false},
  142. urihandlertel: {value: (typeof globalUriHandlerTel!='undefined' && globalUriHandlerTel!=null && globalUriHandlerTel!='') ? globalUriHandlerTel : 'tel:', locked:false},
  143. urihandleremail: {value: (typeof globalUriHandlerEmail!='undefined' && globalUriHandlerEmail!=null && globalUriHandlerEmail!='') ? globalUriHandlerEmail : 'mailto:', locked:false},
  144. urihandlerurl: {value: (typeof globalUriHandlerUrl!='undefined' && globalUriHandlerUrl!=null && globalUriHandlerUrl!='') ? globalUriHandlerUrl : 'http://', locked:false},
  145. urihandlerprofile: {value: (typeof globalUriHandlerProfile!='undefined' && globalUriHandlerProfile!=null && globalUriHandlerProfile!='') ? globalUriHandlerProfile : {'twitter': 'http://twitter.com/%u', 'facebook': 'http://www.facebook.com/%u', 'flickr': 'http://www.flickr.com/photos/%u', 'linkedin': 'http://www.linkedin.com/in/%u', 'myspace': 'http://www.myspace.com/%u', 'sinaweibo': 'http://weibo.com/n/%u'}, locked:false},
  146. addresscountryequivalence: {value: (typeof globalAddressCountryEquivalence!='undefined' && globalAddressCountryEquivalence!=null && globalAddressCountryEquivalence!='') ? globalAddressCountryEquivalence : [{country: 'de', regex: '^\\W*Deutschland\\W*$'}, {country: 'sk', regex: '^\\W*Slovensko\\W*$'}], locked:false},
  147. addressbookselected: {value: (typeof globalAddressbookSelected!='undefined' && globalAddressbookSelected!=null && globalAddressbookSelected!='') ? globalAddressbookSelected : '', locked:false},
  148. collectiondisplay: {value: (typeof globalCollectionDisplay!='undefined' && globalCollectionDisplay!=null && globalCollectionDisplay!='') ? globalCollectionDisplay : (
  149. (typeof globalGroupContactsByCompanies!='undefined' && globalGroupContactsByCompanies) ?
  150. [{label: '{Name}', value: {company: ['{Company}', ' [{Department}]'], personal: ['{LastName}', ' {MiddleName}', ' {FirstName}']}}, {label: '{JobTitle}', value: ['{JobTitle}']}, {label: '{Email}', value: ['{Email[:0]}']}, {label: '{Phone} 1', value: ['{Phone[:0]}']}, {label: '{Phone} 2', value: ['{Phone[:1]}']}, {label: '{NoteText}', value: ['{NoteText}']}] :
  151. [{label: '{Name}', value: ['{LastName}', ' {MiddleName}', ' {FirstName}']}, {label: '{Company} [{Department}]', value: ['{Company}', ' [{Department}]']}, {label: '{JobTitle}', value: ['{JobTitle}']}, {label: '{Email}', value: ['{Email[:0]}']}, {label: '{Phone} 1', value: ['{Phone[:0]}']}, {label: '{Phone} 2', value: ['{Phone[:1]}']}, {label: '{NoteText}', value: ['{NoteText}']}]
  152. ), locked:false},
  153. collectionsort: {value: (typeof globalCollectionSort!='undefined' && globalCollectionSort!=null && globalCollectionSort!='') ? globalCollectionSort : '', locked:false},
  154. defaultaddresscountry: {value: (typeof globalDefaultAddressCountry!='undefined' && globalDefaultAddressCountry!=null && globalDefaultAddressCountry!='') ? globalDefaultAddressCountry :'us', locked:false},
  155. addresscountryfavorites: {value: (typeof globalAddressCountryFavorites!='undefined' && globalAddressCountryFavorites!=null && globalAddressCountryFavorites!='') ? globalAddressCountryFavorites :[], locked:false},
  156. activeaddressbookcollections: {value: (typeof globalActiveAddressbookCollections!='undefined' && globalActiveAddressbookCollections!=null) ? globalActiveAddressbookCollections : new Array(), locked:false},
  157. loadedaddressbookcollections: {value: (typeof globalLoadedAddressbookCollections!='undefined' && globalLoadedAddressbookCollections!=null) ? globalLoadedAddressbookCollections : new Array(), locked:false}
  158. };
  159. function resetSettings()
  160. {
  161. globalSettings={
  162. version: {value: (typeof globalSettingsVersion!='undefined' && globalSettingsVersion!=null) ? globalSettingsVersion : 1, locked:false},
  163. resourcealphabetsorting: {value: (typeof globalResourceAlphabetSorting!='undefined' && globalResourceAlphabetSorting!=null) ? globalResourceAlphabetSorting : true, locked:false},
  164. usejqueryauth: {value: (typeof globalUseJqueryAuth!='undefined' && globalUseJqueryAuth!=null) ? globalUseJqueryAuth : false, locked:false},
  165. settingstype: {value: (typeof globalSettingsType!='undefined' && globalSettingsType!=null && globalSettingsType!='') ? globalSettingsType : 'principal-URL', locked:false},
  166. defaultactiveapp: {value: (typeof globalDefaultActiveApp!='undefined' && globalDefaultActiveApp!=null && globalDefaultActiveApp!='') ? globalDefaultActiveApp : null, locked:false},
  167. islastdefaultactiveapp: {value: false, locked:false},
  168. datepickerfirstdayofweek: {value: (typeof globalDatepickerFirstDayOfWeek!='undefined' && globalDatepickerFirstDayOfWeek!=null) ? globalDatepickerFirstDayOfWeek : 1, locked:false},
  169. syncresourcesinterval: {value: (typeof globalSyncResourcesInterval!='undefined' && globalSyncResourcesInterval!=null) ? globalSyncResourcesInterval :300000, locked:false},
  170. datepickerformat: {value: (typeof globalDatepickerFormat!='undefined' && globalDatepickerFormat!=null && globalDatepickerFormat!='') ? globalDatepickerFormat : localization[globalInterfaceLanguage]._default_datepicker_format_, locked:false},
  171. backgroundsync: {value: (typeof globalBackgroundSync!='undefined' && globalBackgroundSync!=null) ? globalBackgroundSync : true, locked:false},
  172. enablekbnavigation: {value: (typeof globalEnableKbNavigation!='undefined' && globalEnableKbNavigation!=null) ? globalEnableKbNavigation : true, locked:false},
  173. rewritetimezonecomponent: {value: (typeof globalRewriteTimezoneComponent!='undefined' && globalRewriteTimezoneComponent!=null) ? globalRewriteTimezoneComponent : true, locked:false},
  174. removeunknowntimezone: {value: (typeof globalRemoveUnknownTimezone!='undefined' && globalRemoveUnknownTimezone!=null) ? globalRemoveUnknownTimezone : false, locked:false},
  175. mozillasupport: {value: (typeof globalMozillaSupport!='undefined' && globalMozillaSupport!=null) ? globalMozillaSupport : false, locked:false},
  176. appleremindersmode: {value: (typeof globalAppleRemindersMode!='undefined' && globalAppleRemindersMode!=null) ? globalAppleRemindersMode : false, locked:false},
  177. titleformatmonth: {value: localization[globalInterfaceLanguage]._default_title_format_month_, locked:false},
  178. titleformatweek: {value: localization[globalInterfaceLanguage]._default_title_format_week_, locked:false},
  179. titleformatday: {value: localization[globalInterfaceLanguage]._default_title_format_day_, locked:false},
  180. titleformattable: {value: localization[globalInterfaceLanguage]._default_title_format_table_, locked:false},
  181. columnformatagenda: {value: localization[globalInterfaceLanguage]._default_column_format_agenda_, locked:false},
  182. activecalendarcollections: {value: (typeof globalActiveCalendarCollections!='undefined' && globalActiveCalendarCollections!=null) ? globalActiveCalendarCollections : new Array(), locked:false},
  183. activetodocollections: {value: (typeof globalActiveTodoCollections!='undefined' && globalActiveTodoCollections!=null) ? globalActiveTodoCollections : new Array(), locked:false},
  184. loadedcalendarcollections: {value: (typeof globalLoadedCalendarCollections!='undefined' && globalLoadedCalendarCollections!=null) ? globalLoadedCalendarCollections : new Array(), locked:false},
  185. loadedtodocollections: {value: (typeof globalLoadedTodoCollections!='undefined' && globalLoadedTodoCollections!=null) ? globalLoadedTodoCollections : new Array(), locked:false},
  186. todolistfilterselected: {value: (typeof globalTodoListFilterSelected!='undefined' && globalTodoListFilterSelected!=null && globalTodoListFilterSelected!='') ? globalTodoListFilterSelected : ['filterAction', 'filterProgress'], locked:false},
  187. activeview: {value: (typeof globalActiveView!='undefined' && globalActiveView!=null && globalActiveView!='') ? globalActiveView : 'multiWeek', locked:false},
  188. islastactiveview: {value: true, lockedlocked:false},
  189. calendarselected: {value: (typeof globalCalendarSelected!='undefined' && globalCalendarSelected!=null && globalCalendarSelected!='') ? globalCalendarSelected : '', locked:false},
  190. todocalendarselected: {value: (typeof globalTodoCalendarSelected!='undefined' && globalTodoCalendarSelected!=null && globalTodoCalendarSelected!='') ? globalTodoCalendarSelected : '', locked:false},
  191. timezone: {value: (typeof globalTimeZone!='undefined' && globalTimeZone!=null && globalTimeZone!='') ? globalTimeZone : 'local', locked:false},
  192. islasttimezone: {value: true, locked:false},
  193. openformmode: {value: (typeof globalOpenFormMode!='undefined' && globalOpenFormMode!=null && globalOpenFormMode!='') ? globalOpenFormMode : 'double', locked:false},
  194. calendarstartofbusiness: {value: (typeof globalCalendarStartOfBusiness!='undefined' && globalCalendarStartOfBusiness!=null) ? globalCalendarStartOfBusiness : 8, locked:false},
  195. calendarendofbusiness: {value: (typeof globalCalendarEndOfBusiness!='undefined' && globalCalendarEndOfBusiness!=null) ? globalCalendarEndOfBusiness : 17, locked:false},
  196. defaulteventduration: {value: (typeof globalDefaultEventDuration!='undefined' && globalDefaultEventDuration!=null && globalDefaultEventDuration>=0) ? globalDefaultEventDuration : null, locked:false},
  197. ampmformat: {value: (typeof globalAMPMFormat!='undefined' && globalAMPMFormat!=null) ? globalAMPMFormat : localization[globalInterfaceLanguage]._default_AMPM_format_, locked:false},
  198. timeformatagenda: {value: (typeof globalTimeFormatAgenda!='undefined' && globalTimeFormatAgenda!=null && globalTimeFormatAgenda!='') ? globalTimeFormatAgenda : null, locked:false},
  199. timeformatbasic: {value: (typeof globalTimeFormatBasic!='undefined' && globalTimeFormatBasic!=null && globalTimeFormatBasic!='') ? globalTimeFormatBasic : null, locked:false},
  200. displayhiddenevents: {value: (typeof globalDisplayHiddenEvents!='undefined' && globalDisplayHiddenEvents!=null) ? globalDisplayHiddenEvents : false, locked:false},
  201. timezonesupport: {value: (typeof globalTimeZoneSupport!='undefined' && globalTimeZoneSupport!=null) ? globalTimeZoneSupport : true, locked:false},
  202. timezonesenabled: {value: (typeof globalTimeZonesEnabled!='undefined' && globalTimeZonesEnabled!=null && globalTimeZonesEnabled!='') ? globalTimeZonesEnabled : [], locked:false},
  203. showhiddenalarms: {value: (typeof globalShowHiddenAlarms!='undefined' && globalShowHiddenAlarms!=null) ? globalShowHiddenAlarms : false, locked:false},
  204. ignorecompletedorcancelledalarms: {value: (typeof globalIgnoreCompletedOrCancelledAlarms!='undefined' && globalIgnoreCompletedOrCancelledAlarms!=null) ? globalIgnoreCompletedOrCancelledAlarms : true, locked:false},
  205. weekenddays: {value: (typeof globalWeekendDays!='undefined' && globalWeekendDays!=null && globalWeekendDays!='') ? globalWeekendDays : [0, 6], locked:false},
  206. eventstartpastlimit: {value: (typeof globalEventStartPastLimit!='undefined' && globalEventStartPastLimit!=null) ? globalEventStartPastLimit : 3, locked:false},
  207. todopastlimit: {value: (typeof globalTodoPastLimit!='undefined' && globalTodoPastLimit!=null) ? globalTodoPastLimit : 3, locked:false},
  208. eventstartfuturelimit: {value: (typeof globalEventStartFutureLimit!='undefined' && globalEventStartFutureLimit!=null) ? globalEventStartFutureLimit : 3, locked:false},
  209. compatibility: {value: (typeof globalCompatibility!='undefined' && globalCompatibility!=null && globalCompatibility!='') ? globalCompatibility : {anniversaryOutputFormat: ['apple']}, locked:false},
  210. contactstorefn: {value: (typeof globalContactStoreFN!='undefined' && globalContactStoreFN!=null && globalContactStoreFN!='') ? globalContactStoreFN : ['prefix',' last',' middle',' first',' suffix'], locked:false},
  211. urihandlertel: {value: (typeof globalUriHandlerTel!='undefined' && globalUriHandlerTel!=null && globalUriHandlerTel!='') ? globalUriHandlerTel : 'tel:', locked:false},
  212. urihandleremail: {value: (typeof globalUriHandlerEmail!='undefined' && globalUriHandlerEmail!=null && globalUriHandlerEmail!='') ? globalUriHandlerEmail : 'mailto:', locked:false},
  213. urihandlerurl: {value: (typeof globalUriHandlerUrl!='undefined' && globalUriHandlerUrl!=null && globalUriHandlerUrl!='') ? globalUriHandlerUrl : 'http://', locked:false},
  214. urihandlerprofile: {value: (typeof globalUriHandlerProfile!='undefined' && globalUriHandlerProfile!=null && globalUriHandlerProfile!='') ? globalUriHandlerProfile : {'twitter': 'http://twitter.com/%u', 'facebook': 'http://www.facebook.com/%u', 'flickr': 'http://www.flickr.com/photos/%u', 'linkedin': 'http://www.linkedin.com/in/%u', 'myspace': 'http://www.myspace.com/%u', 'sinaweibo': 'http://weibo.com/n/%u'}, locked:false},
  215. addresscountryequivalence: {value: (typeof globalAddressCountryEquivalence!='undefined' && globalAddressCountryEquivalence!=null && globalAddressCountryEquivalence!='') ? globalAddressCountryEquivalence : [{country: 'de', regex: '^\\W*Deutschland\\W*$'}, {country: 'sk', regex: '^\\W*Slovensko\\W*$'}], locked:false},
  216. addressbookselected: {value: (typeof globalAddressbookSelected!='undefined' && globalAddressbookSelected!=null && globalAddressbookSelected!='') ? globalAddressbookSelected : '', locked:false},
  217. collectiondisplay: {value: (typeof globalCollectionDisplay!='undefined' && globalCollectionDisplay!=null && globalCollectionDisplay!='') ? globalCollectionDisplay : (
  218. (typeof globalGroupContactsByCompanies!='undefined' && globalGroupContactsByCompanies) ?
  219. [{label: '{Name}', value: {company: ['{Company}', ' [{Department}]'], personal: ['{LastName}', ' {MiddleName}', ' {FirstName}']}}, {label: '{JobTitle}', value: ['{JobTitle}']}, {label: '{Email}', value: ['{Email[:0]}']}, {label: '{Phone} 1', value: ['{Phone[:0]}']}, {label: '{Phone} 2', value: ['{Phone[:1]}']}, {label: '{NoteText}', value: ['{NoteText}']}] :
  220. [{label: '{Name}', value: ['{LastName}', ' {MiddleName}', ' {FirstName}']}, {label: '{Company} [{Department}]', value: ['{Company}', ' [{Department}]']}, {label: '{JobTitle}', value: ['{JobTitle}']}, {label: '{Email}', value: ['{Email[:0]}']}, {label: '{Phone} 1', value: ['{Phone[:0]}']}, {label: '{Phone} 2', value: ['{Phone[:1]}']}, {label: '{NoteText}', value: ['{NoteText}']}]
  221. ), locked:false},
  222. collectionsort: {value: (typeof globalCollectionSort!='undefined' && globalCollectionSort!=null && globalCollectionSort!='') ? globalCollectionSort : '', locked:false},
  223. defaultaddresscountry: {value: (typeof globalDefaultAddressCountry!='undefined' && globalDefaultAddressCountry!=null && globalDefaultAddressCountry!='') ? globalDefaultAddressCountry :'us', locked:false},
  224. addresscountryfavorites: {value: (typeof globalAddressCountryFavorites!='undefined' && globalAddressCountryFavorites!=null && globalAddressCountryFavorites!='') ? globalAddressCountryFavorites :[], locked:false},
  225. activeaddressbookcollections: {value: (typeof globalActiveAddressbookCollections!='undefined' && globalActiveAddressbookCollections!=null) ? globalActiveAddressbookCollections : new Array(), locked:false},
  226. loadedaddressbookcollections: {value: (typeof globalLoadedAddressbookCollections!='undefined' && globalLoadedAddressbookCollections!=null) ? globalLoadedAddressbookCollections : new Array(), locked:false}
  227. };
  228. }
  229. function transformToServer(inSettings)
  230. {
  231. var serverSettings={};
  232. for(var prop in inSettings)
  233. {
  234. serverSettings[prop]=inSettings[prop].value;
  235. }
  236. return serverSettings;
  237. }
  238. var globalWindowFocus=true;
  239. var globalLoginUsername='';
  240. var globalLoginPassword='';
  241. var isUserLogged=false;
  242. var isDelegationLoaded=false;
  243. var globalActiveApp='';
  244. var globalAvailableAppsArray=new Array();
  245. var globalEnableAppSwitch=true;
  246. var globalAppName='CalDavZAP';
  247. var globalVersion='0.13.1';
  248. var globalBuildNo=1442928599;
  249. var globalXMLCache=null;
  250. var globalVersionCheckURL=(location.protocol=='file:' ? 'http:' : location.protocol)+'//www.inf-it.com/versioncheck/'+globalAppName+'/?v='+globalVersion;
  251. var globalXClientHeader=globalAppName+' '+globalVersion+' (Inf-IT CalDAV Web Client)';
  252. var globalResourceNumberCount=0;
  253. var globalResourceNumber=0;
  254. var globalResourceIntervalID=null;
  255. var globalFirstLoadNextApp=false;
  256. var globalObjectLoading=false;
  257. var settingsLoaded=false;
  258. var globalKBNavigationPaddingRate=0.2;
  259. var globalParallelAjaxCallCardDAVEnabled=true;
  260. var globalParallelAjaxCallCalDAVEnabled=true;
  261. var globalCacheUpdateInterval=null;
  262. var isIntegrated=false;
  263. var SVG_select='<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" x="0px" y="0px" width="19px" height="19px" viewBox="0 0 19 19" overflow="visible" enable-background="new 0 0 19 19" xml:space="preserve"><defs></defs><rect x="2" fill="#585858" width="17" height="19"/><polygon fill="#FFFFFF" points="14,7 10.5,13 7,7 "/><rect fill="#FFFFFF" width="2" height="19"/></svg>';
  264. var SVG_select_b='<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" x="0px" y="0px" width="19px" height="19px" viewBox="0 0 19 19" overflow="visible" enable-background="new 0 0 19 19" xml:space="preserve"><defs></defs><rect x="2" fill="#585858" width="17" height="19"/><polygon fill="#FFFFFF" points="14,7 10.5,13 7,7 "/><rect fill="#F0F0F0" width="2" height="19"/></svg>';
  265. var SVG_select_login='<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" x="0px" y="0px" width="19px" height="28px" viewBox="0 0 19 28" overflow="visible" enable-background="new 0 0 19 28" xml:space="preserve"><defs></defs><rect fill="#FFFFFF" width="19" height="28"/></svg>';
  266. var SVG_select_dis='<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" x="0px" y="0px" width="22px" height="19px" viewBox="0 0 22 19" overflow="visible" enable-background="new 0 0 22 19" xml:space="preserve"><defs></defs><rect fill="#FFFFFF" width="22" height="19"/></svg>';
  267. var globalDefinedSettings = new Array();
  268. var globalLoadedPrincipals = new Array();
  269. var globalEnableAllResourceSync = true;
  270. if(typeof isSettingsAvaible == 'undefined')
  271. var globalPreviousSupportedSettings = ['activecalendarcollections','activetodocollections', 'activeaddressbookcollections','todolistfilterselected','activeview','defaultactiveapp','calendarselected', 'todocalendarselected','addressbookselected','timezone', 'loadedtodocollections', 'loadedcalendarcollections', 'loadedaddressbookcollections', 'version'];
  272. var globalSettingsSaving = '';
  273. var globalFirstHideLoader = true;
  274. var globalLoadedCollectionsNumber = 0;
  275. var globalLoadedCollectionsCount = 0;
  276. var ignoreServerSettings=false;
  277. var globalPreventLogoutSync=false;
  278. var globalEmailAddress='';
  279. var globalSettingsVersion=3;
  280. var globalSyncSettingsSave=false;
  281. // Timepicker hack (prevent IE to re-open the datepicker on date click + focus)
  282. var globalTmpTimePickerHackTime=new Object();
  283. function isAvaible(app)
  284. {
  285. return globalAvailableAppsArray.indexOf(app)!=-1
  286. }
  287. function loadAllResources()
  288. {
  289. if(globalResourceIntervalID==null)
  290. netFindResource(globalAccountSettings[0], 0, true, 0);
  291. }
  292. function getAccount(accountUID)
  293. {
  294. // find the original settings for the resource and user
  295. var tmp=accountUID.match(RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@([^/]+)(.*/)','i'));
  296. var resource_href=tmp[1]+tmp[3]+tmp[4];
  297. var resource_user=tmp[2];
  298. for(var i=0;i<globalAccountSettings.length;i++)
  299. if(globalAccountSettings[i].href==resource_href && globalAccountSettings[i].userAuth.userName==resource_user)
  300. resourceSettings=globalAccountSettings[i];
  301. return resourceSettings;
  302. }
  303. function checkForUnloadedResources()
  304. {
  305. var rex=new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@([^/]+)(.*/)', 'i');
  306. for(var i=globalLoadedPrincipals.length-1; i>=0;i--)
  307. {
  308. var resourceCounter = 0;
  309. if(isAvaible('CardDavMATE'))
  310. for(var j=0; j<globalResourceCardDAVList.collections.length;j++)
  311. if(globalResourceCardDAVList.collections[j].uid!=undefined&&globalResourceCardDAVList.collections[j].makeLoaded)
  312. {
  313. var tmp=globalResourceCardDAVList.collections[j].accountUID.match(rex);
  314. var resourceCalDAV_href=tmp[1]+tmp[3]+tmp[4];
  315. if(globalLoadedPrincipals[i]==resourceCalDAV_href)
  316. resourceCounter++;
  317. }
  318. if(isAvaible('CalDavZAP'))
  319. {
  320. for(var j=0; j<globalResourceCalDAVList.collections.length;j++)
  321. if(globalResourceCalDAVList.collections[j].uid!=undefined&&globalResourceCalDAVList.collections[j].makeLoaded)
  322. {
  323. var tmp=globalResourceCalDAVList.collections[j].accountUID.match(rex);
  324. var resourceCalDAV_href=tmp[1]+tmp[3]+tmp[4];
  325. if(globalLoadedPrincipals[i]==resourceCalDAV_href)
  326. resourceCounter++;
  327. }
  328. for(var j=0; j<globalResourceCalDAVList.TodoCollections.length;j++)
  329. if(globalResourceCalDAVList.TodoCollections[j].uid!=undefined&&globalResourceCalDAVList.TodoCollections[j].makeLoaded)
  330. {
  331. var tmp=globalResourceCalDAVList.TodoCollections[j].accountUID.match(rex);
  332. var resourceCalDAV_href=tmp[1]+tmp[3]+tmp[4];
  333. if(globalLoadedPrincipals[i]==resourceCalDAV_href)
  334. resourceCounter++;
  335. }
  336. }
  337. if(resourceCounter==0)
  338. globalLoadedPrincipals.splice(i,1);
  339. }
  340. }
  341. function reloadResources(dontSaveSettings, loadArray)
  342. {
  343. if((isAvaible('CardDavMATE')&&(globalCardDAVInitLoad||globalCardDAVResourceSync)) || (isAvaible('CalDavZAP')&&(globalCalDAVInitLoad||globalCalDAVResourceSync))
  344. || (isAvaible('Projects')&&!isProjectsLoaded) || (isAvaible('Settings')&&(!isSettingsLoaded || (globalSettingsSaving!=''&&!dontSaveSettings))) || (isAvaible('CalDavZAP')&&(globalLimitLoading!='' || globalLimitTodoLoading!='')))
  345. return false;
  346. if(globalWindowFocus==false)
  347. return false;
  348. globalCardDAVResourceSync=true;
  349. globalCalDAVResourceSync=true;
  350. if(isAvaible('CalDavZAP'))
  351. {
  352. globalCalDAVResourceSync = true;
  353. globalToday.setHours(0);
  354. globalToday.setMinutes(0);
  355. globalToday.setSeconds(0);
  356. globalToday.setMilliseconds(0);
  357. var currentToday=new Date();
  358. currentToday.setHours(0);
  359. currentToday.setMinutes(0);
  360. currentToday.setSeconds(0);
  361. currentToday.setMilliseconds(0);
  362. if(currentToday.getTime()!=globalToday.getTime())
  363. {
  364. if(isAvaible('CalDavZAP'))
  365. $('.date').datepicker('refresh');
  366. if(isAvaible('CardDavMATE'))
  367. $('#vCardEditor').find('input[data-type^="date_"]').datepicker('refresh');
  368. if(isAvaible('Projects'))
  369. $('.project_date').datepicker('refresh');
  370. $('#calendar').fullCalendar('updateToday');
  371. $('#calendar').fullCalendar('gotoDate', currentToday);
  372. $('#todoList').fullCalendar('gotoDate', currentToday);
  373. if(currentToday.getTime()>globalToday.getTime())
  374. {
  375. getNextMonths($('#calendar').fullCalendar('getView').end);
  376. getNextMonthsTodo();
  377. }
  378. else //support for timezone with backward time flow
  379. {
  380. getPrevMonths($('#calendar').fullCalendar('getView').start);
  381. getPrevMonthsTodo();
  382. }
  383. globalToday=currentToday;
  384. }
  385. }
  386. checkForUnloadedResources();
  387. if(!globalEnableAllResourceSync&&(typeof loadArray=='undefined' || loadArray==null))
  388. netFindResource(globalAccountSettings[0], 0, false, 0, globalLoadedPrincipals);
  389. else
  390. netFindResource(globalAccountSettings[0], 0, false, 0, loadArray);
  391. }
  392. function ifLoadCollections()
  393. {
  394. if((isAvaible('CardDavMATE') && (globalCardDAVInitLoad || globalCardDAVResourceSync)) || (isAvaible('CalDavZAP') && (globalCalDAVInitLoad || globalCalDAVResourceSync)))
  395. return false;
  396. var changeCounter = 0;
  397. if(isAvaible('CardDavMATE'))
  398. for(var i=0; i<globalResourceCardDAVList.collections.length;i++)
  399. if(globalResourceCardDAVList.collections[i].uid!=undefined && globalResourceCardDAVList.collections[i].someChanged)
  400. changeCounter++;
  401. if(isAvaible('CalDavZAP'))
  402. {
  403. for(var i=0; i<globalResourceCalDAVList.collections.length;i++)
  404. if(globalResourceCalDAVList.collections[i].uid!=undefined && globalResourceCalDAVList.collections[i].someChanged)
  405. changeCounter++;
  406. for(var i=0; i<globalResourceCalDAVList.TodoCollections.length;i++)
  407. if(globalResourceCalDAVList.TodoCollections[i].uid!=undefined && globalResourceCalDAVList.TodoCollections[i].someChanged)
  408. changeCounter++;
  409. }
  410. if(changeCounter>0 || globalSettingsSaving!='')
  411. loadNextApplication(false);
  412. }
  413. function bindColorPickerClick(newElement)
  414. {
  415. newElement.click(function(event){
  416. var collectionType=null;
  417. var resourceSelectedClass=null;
  418. var resourceItems=null;
  419. if(newElement.parent().hasClass('resourceCalDAV_item'))
  420. {
  421. if(globalEventCollectionsLoading)
  422. return false;
  423. collectionType='event';
  424. resourceSelectedClass='resourceCalDAV_item_selected';
  425. resourceItems=newElement.parent().siblings('.resourceCalDAV_item_selected');
  426. }
  427. else if(newElement.parent().hasClass('resourceCalDAVTODO_item'))
  428. {
  429. if(globalTodoCollectionsLoading)
  430. return false;
  431. collectionType='todo';
  432. resourceSelectedClass='resourceCalDAV_item_selected';
  433. resourceItems=newElement.parent().siblings('.resourceCalDAV_item_selected');
  434. }
  435. else if(newElement.hasClass('resourceCardDAVColor'))
  436. {
  437. if(globalAddressbookCollectionsLoading)
  438. return false;
  439. collectionType='addressbook';
  440. resourceSelectedClass='resourceCardDAV_selected';
  441. resourceItems=newElement.parent().parent().siblings().find('.resourceCardDAV_selected');
  442. }
  443. var showInput = event.shiftKey;
  444. var colorpicker=$(this).siblings('.colorPicker');
  445. if(!$(this).hasClass('hasColorpicker'))
  446. {
  447. $(this).addClass('hasColorpicker');
  448. colorpicker.spectrum({
  449. chooseText: localization[globalInterfaceLanguage].buttonSave,
  450. cancelText: localization[globalInterfaceLanguage].buttonCancel,
  451. color: newElement.css('background-color'),
  452. showInput: showInput,
  453. preferredFormat: 'hex6',
  454. move: function(color)
  455. {
  456. newElement.css('background', color);
  457. },
  458. hide: function(color)
  459. {
  460. if(newElement.css('background-color') != colorpicker.spectrum('get').toRgbString())
  461. newElement.css('background', colorpicker.spectrum('get').toRgbString());
  462. },
  463. change: function(color)
  464. {
  465. newElement.css('background', color);
  466. if(collectionType=='event')
  467. {
  468. var coll = globalResourceCalDAVList.getEventCollectionByUID($(this).parent().attr('data-id'));
  469. netSaveProperty(coll, (typeof globalCalendarColorPropertyXmlns!='undefined'&&globalCalendarColorPropertyXmlns!=null&&globalCalendarColorPropertyXmlns!='' ? globalCalendarColorPropertyXmlns : 'http://apple.com/ns/ical/'), 'calendar-color', color.toHexString())
  470. }
  471. else if(collectionType=='todo')
  472. {
  473. var coll = globalResourceCalDAVList.getTodoCollectionByUID($(this).parent().attr('data-id'));
  474. netSaveProperty(coll, (typeof globalCalendarColorPropertyXmlns!='undefined'&&globalCalendarColorPropertyXmlns!=null&&globalCalendarColorPropertyXmlns!='' ? globalCalendarColorPropertyXmlns : 'http://apple.com/ns/ical/'), 'calendar-color', color.toHexString())
  475. }
  476. else if(collectionType=='addressbook')
  477. {
  478. var coll = globalResourceCardDAVList.getCollectionByUID($(this).parent().attr('data-id'));
  479. netSaveProperty(coll, (typeof globalAddrColorPropertyXmlns!='undefined'&&globalAddrColorPropertyXmlns!=null&&globalAddrColorPropertyXmlns!='' ? globalAddrColorPropertyXmlns : 'http://inf-it.com/ns/ab/'), 'addressbook-color', color.toHexString())
  480. }
  481. }
  482. });
  483. }
  484. else if(showInput!=colorpicker.spectrum('option', 'showInput'))
  485. colorpicker.spectrum('option', 'showInput',showInput);
  486. var container = colorpicker.spectrum('container');
  487. if(container.is(':visible')) {
  488. colorpicker.spectrum('hide');
  489. }
  490. else {
  491. var offset=$(this).offset();
  492. colorpicker.spectrum('show');
  493. if(event.pageY<$(window).height()/2) {
  494. offset.top+=$(this).outerHeight();
  495. container.removeClass('sp-inverse');
  496. }
  497. else {
  498. offset.top-=container.outerHeight();
  499. container.addClass('sp-inverse');
  500. }
  501. container.offset(offset);
  502. }
  503. resourceItems.removeClass(resourceSelectedClass);
  504. newElement.parent().addClass(resourceSelectedClass);
  505. return false;
  506. });
  507. }
  508. function loadNextApplication(forceLoad)
  509. {
  510. if(!globalFirstLoadNextApp)
  511. {
  512. if(isAvaible('CardDavMATE'))
  513. setAddressbookNumber();
  514. if(isAvaible('CalDavZAP'))
  515. setCalendarNumber(true);
  516. globalFirstLoadNextApp=true;
  517. }
  518. if(isAvaible('CardDavMATE') && !globalCardDAVCollectionSync && globalResourceCardDAVList.collections.length>0)
  519. {
  520. globalCardDAVCollectionSync=true;
  521. CardDAVnetLoadCollection(globalResourceCardDAVList.collections[0], forceLoad, false, null, 0, globalResourceCardDAVList.collections,true);
  522. }
  523. else if(isAvaible('CalDavZAP') && !globalCalDAVCollectionSync && globalResourceCalDAVList.collections.length>0)
  524. {
  525. globalCalDAVCollectionSync=true;
  526. CalDAVnetLoadCollection(globalResourceCalDAVList.collections[0], forceLoad, true, 0, globalResourceCalDAVList.collections);
  527. }
  528. else if(isAvaible('Projects') && !globalProjectSync && !isProjectsLoaded && getLoggedUser()!=null)
  529. {
  530. $('#MainLoaderInner').html('Loading projects');
  531. globalProjectSync=true;
  532. if(typeof globalCRMSettings != 'undefined')
  533. netLoadXSLT(globalCRMSettings.XSLTHref);
  534. else
  535. {
  536. console.log("Error: globalCRMSettings is not defined");
  537. loadNextApplication(false);
  538. }
  539. }
  540. else if(isAvaible('Reports') && !globalReportsSync && !isReportsLoaded && getLoggedUser()!=null)
  541. {
  542. $('#MainLoaderInner').html('Loading Reports');
  543. globalReportsSync=true;
  544. if(typeof globalCRMSettings != 'undefined')
  545. netLoadReportList(globalCRMSettings);
  546. else
  547. {
  548. console.log("Error: globalCRMSettings is not defined");
  549. loadNextApplication(false);
  550. }
  551. }
  552. else if(isAvaible('Settings') && !globalSettingsSync && !isSettingsLoaded && getLoggedUser()!=null)
  553. {
  554. globalSettingsSync = true;
  555. if(!isSettingsLoaded)
  556. loadNextApplication(false);
  557. if($('#ResourceSettingsList').children('.resourceSettings_item').length)
  558. $('#ResourceSettingsList').children().eq(0).trigger('click');
  559. }
  560. else
  561. {
  562. if((isAvaible('CalDavZAP') && !isCalDAVLoaded) || (isAvaible('CardDavMATE') && !isCardDAVLoaded))
  563. $('#MainLoader').fadeOut(1200, function(){$('#MainLoader').css('left','50px');});
  564. if(isAvaible('CardDavMATE'))
  565. {
  566. globalCardDAVCollectionSync=false;
  567. if(!isCardDAVLoaded)
  568. isCardDAVLoaded=true;
  569. }
  570. if(isAvaible('CalDavZAP'))
  571. {
  572. globalCalDAVCollectionSync=false;
  573. if(!isCalDAVLoaded)
  574. isCalDAVLoaded=true;
  575. }
  576. if(isAvaible('Projects'))
  577. {
  578. globalProjectSync=false;
  579. isProjectsLoaded = true;
  580. }
  581. if(isAvaible('Reports'))
  582. {
  583. globalReportsSync=false;
  584. isReportsLoaded = true;
  585. }
  586. if(isAvaible('Settings'))
  587. {
  588. globalSettingsSync=false;
  589. isSettingsLoaded = true;
  590. }
  591. }
  592. }
  593. function checkForApplication(inputApp)
  594. {
  595. if(!globalEnableAppSwitch || globalObjectLoading)
  596. return false;
  597. globalEnableAppSwitch=false;
  598. globalActiveApp=inputApp;
  599. var inputID = 'System'+inputApp;
  600. $('.System').not('#'+inputID).each(function(){
  601. $(this).animate({opacity : 0}, 666, function(){
  602. /* XXX - System display:none changes
  603. if($(this).attr('id').indexOf('CalDav')==-1)
  604. $(this).css('display','none');
  605. else*/
  606. $(this).css('visibility','hidden');
  607. });
  608. });
  609. /* XXX - System display:none changes
  610. if(inputID.indexOf('CalDav')==-1)
  611. $('#'+inputID).css('display','block').animate({opacity : 1}, 666, function(){globalEnableAppSwitch=true;});
  612. else*/
  613. $('#'+inputID).css('visibility','visible').animate({opacity : 1}, 666, function(){globalEnableAppSwitch=true;});
  614. }
  615. function getLoggedUser()
  616. {
  617. for(var i=0; i<globalAccountSettings.length;i++)
  618. if(globalAccountSettings[i].href.indexOf(globalLoginUsername)!=-1)
  619. return globalAccountSettings[i];
  620. return globalAccountSettings[0];
  621. }
  622. function login()
  623. {
  624. $('#LoginLoader').fadeTo(1200, 1, function(){
  625. globalLoginUsername=$('#LoginPage').find('[data-type="system_username"]').val();
  626. globalLoginPassword=$('#LoginPage').find('[data-type="system_password"]').val();
  627. loadConfig();
  628. });
  629. }
  630. function logout(forceLogout)
  631. {
  632. if((typeof forceLogout=='undefined' || forceLogout==null ) && (
  633. (isAvaible('CardDavMATE') && (!isCardDAVLoaded || globalCardDAVResourceSync)) ||
  634. (isAvaible('CalDavZAP') && (!isCalDAVLoaded || globalCalDAVResourceSync)) ||
  635. (isAvaible('Projects') && !isProjectsLoaded) ||
  636. (isAvaible('Settings') && (!isSettingsLoaded || (globalSettingsSaving!='' && !dontSaveSettings))) ||
  637. (isAvaible('CalDavZAP') && (globalLimitLoading!='' || globalLimitTodoLoading!=''))
  638. ))
  639. {
  640. globalPreventLogoutSync=true;
  641. return false;
  642. }
  643. clearInterval(globalResourceIntervalID);
  644. if(globalFirstLoadNextApp)
  645. globalFirstLoadNextApp=false;
  646. settingsLoaded=false;
  647. ignoreServerSettings=false;
  648. //save settings
  649. checkBeforeClose(false);
  650. globalResourceIntervalID=null;
  651. globalLoginUsername='';
  652. globalLoginPassword='';
  653. globalXMLCache=null;
  654. globalResourceNumber=0;
  655. globalResourceNumberCount=0;
  656. globalLoadedPrincipals=new Array();
  657. globalEmailAddress='';
  658. globalPreventLogoutSync=false;
  659. globalSyncSettingsSave=false;
  660. $(document.documentElement).unbind();
  661. // reset page title
  662. var tmpMatch = document.title.match('^(.*) \\[.*\\]$');
  663. if(tmpMatch!=null)
  664. document.title = tmpMatch[1];
  665. $('#LoginPage').fadeTo(2000, 1, function(){
  666. if(typeof isCalDAVLoaded!='undefined' && isCalDAVLoaded)
  667. {
  668. logoutCalDAV();
  669. isCalDAVLoaded=false;
  670. }
  671. if(typeof isCardDAVLoaded!='undefined' && isCardDAVLoaded)
  672. {
  673. logoutCardDAV();
  674. isCardDAVLoaded=false;
  675. }
  676. if(typeof isProjectsLoaded!='undefined' && isProjectsLoaded)
  677. {
  678. logoutProjects();
  679. isProjectsLoaded = false;
  680. }
  681. if(typeof isReportsLoaded!='undefined' && isReportsLoaded)
  682. {
  683. logoutReports();
  684. isReportsLoaded = false;
  685. }
  686. if(typeof isSettingsLoaded!='undefined' && isSettingsLoaded)
  687. {
  688. logoutSettings();
  689. isSettingsLoaded = false;
  690. }
  691. for(var i=globalAccountSettings.length-1;i>=0;i--)
  692. if(globalAccountSettings[i].type=='network')
  693. globalAccountSettings.splice(i, 1);
  694. if(typeof globalDemoMode=='undefined')
  695. {
  696. $('[data-type="system_username"]').val('').change();
  697. $('[data-type="system_password"]').val('').change();
  698. }
  699. $('.integration_d').hide();
  700. isUserLogged=false;
  701. if(globalSettings.defaultactiveapp.value==null)
  702. {
  703. if(isAvaible('CalDavZAP'))
  704. globalActiveApp='CalDavZAP';
  705. else if(isAvaible('CardDavMATE'))
  706. globalActiveApp='CardDavMATE';
  707. }
  708. else
  709. globalActiveApp=globalSettings.defaultactiveapp.value;
  710. resetSettings();
  711. if(isAvaible('CardDavMATE'))
  712. mainCardDAV();
  713. if(isAvaible('CalDavZAP'))
  714. mainCalDAV();
  715. if(isAvaible('Settings'))
  716. mainSettings();
  717. if(isAvaible('Projects'))
  718. mainProjects();
  719. if(isAvaible('Reports'))
  720. mainReports();
  721. init();
  722. });
  723. }
  724. function init()
  725. {
  726. // browser check
  727. if(($.browser.msie && parseInt($.browser.version, 10)<9) || $.browser.opera)
  728. $('#login_message').css('display','').text(localization[globalInterfaceLanguage].unsupportedBrowser);
  729. if(typeof globalDemoMode!='undefined')
  730. {
  731. if(typeof globalDemoMode.userName!=undefined)
  732. $('[data-type="system_username"]').val(globalDemoMode.userName).change();
  733. if(typeof globalDemoMode.userPassword!=undefined)
  734. $('[data-type="system_password"]').val(globalDemoMode.userPassword).change();
  735. }
  736. loadConfig();
  737. }
  738. function run()
  739. {
  740. isUserLogged=true;
  741. window.onfocus=function(){globalWindowFocus=true;}
  742. window.onblur=function(){if(globalSettings.backgroundsync.value==false) globalWindowFocus=false;}
  743. $('#LoginPage').fadeOut(2000);
  744. if(typeof globalAccountSettings=='undefined')
  745. {
  746. console.log('Error: \'no account configured\': see config.js!');
  747. return false;
  748. }
  749. if(typeof globalNewVersionNotifyUsers=='undefined' || globalNewVersionNotifyUsers!=null)
  750. netVersionCheck();
  751. document.title+=' ['+globalAccountSettings[0].userAuth.userName+']';
  752. // Automatically detect crossDomain settings
  753. var detectedHref=location.protocol+'//'+location.hostname+(location.port ? ':'+location.port : '');
  754. for(var i=0;i<globalAccountSettings.length;i++)
  755. {
  756. if(globalAccountSettings[i].crossDomain==undefined || typeof globalAccountSettings[i].crossDomain!='boolean')
  757. {
  758. if(globalAccountSettings[i].href.indexOf(detectedHref)==0)
  759. globalAccountSettings[i].crossDomain=false;
  760. else
  761. globalAccountSettings[i].crossDomain=true;
  762. console.log("Info: [userAccount: '"+globalAccountSettings[i].href.replace('\/\/', '//'+globalAccountSettings[i].userAuth.userName+'@')+"']: crossDomain set to: '"+(globalAccountSettings[i].crossDomain==true ? 'true' : 'false')+"'");
  763. }
  764. }
  765. if(typeof globalAvailableAppsArray!='undefined' && globalAvailableAppsArray!=null && globalAvailableAppsArray.length>1) {
  766. // show integration banner
  767. $('.integration_d').css('display', 'block');
  768. // show app buttons for available apps only
  769. if(globalAvailableAppsArray.indexOf('CalDavZAP')!=-1)
  770. $('#intCaldav').attr('title',localization[globalInterfaceLanguage].txtCalendars).css('display', 'block').find('.int_error').attr('alt',localization[globalInterfaceLanguage].txtError);
  771. if(globalAvailableAppsArray.indexOf('CalDavTODO')!=-1)
  772. $('#intCaldavTodo').attr('title',localization[globalInterfaceLanguage].txtTodos).css('display', 'block').find('.int_error').attr('alt',localization[globalInterfaceLanguage].txtError);
  773. if(globalAvailableAppsArray.indexOf('CardDavMATE')!=-1)
  774. $('#intCarddav').attr('title',localization[globalInterfaceLanguage].txtContacts).css('display', 'block').find('.int_error').attr('alt',localization[globalInterfaceLanguage].txtError);
  775. if(globalAvailableAppsArray.indexOf('Projects')!=-1)
  776. $('#intProjects').attr('title',localization[globalInterfaceLanguage].txtProjects).css('display', 'block').find('.int_error').attr('alt',localization[globalInterfaceLanguage].txtError);
  777. if(globalAvailableAppsArray.indexOf('Reports')!=-1)
  778. $('#intReports').attr('title',localization[globalInterfaceLanguage].txtReports).css('display', 'block').find('.int_error').attr('alt',localization[globalInterfaceLanguage].txtError);
  779. if(globalAvailableAppsArray.indexOf('Settings')!=-1)
  780. $('#intSettings').attr('title',localization[globalInterfaceLanguage].txtSettings).css('display', 'block').find('.int_error').attr('alt',localization[globalInterfaceLanguage].txtError);
  781. // show the refresh button
  782. if(typeof globalEnableRefresh==='boolean' && globalEnableRefresh && (globalAvailableAppsArray.indexOf('CalDavZAP')!=-1 || globalAvailableAppsArray.indexOf('CalDavTODO')!=-1 || globalAvailableAppsArray.indexOf('CardDavMATE')!=-1)) {
  783. $('#intRefresh').attr('title',localization[globalInterfaceLanguage].txtRefresh).find('.int_error').attr('alt',localization[globalInterfaceLanguage].txtError);
  784. $('#intRefresh').prev().addBack().css('display', 'block');
  785. }
  786. }
  787. $('#cacheDialogText').text(localization[globalInterfaceLanguage].txtCacheText);
  788. $('#cacheDialogButton').attr('value',localization[globalInterfaceLanguage].txtCacheButton);
  789. }
  790. function loadConfig()
  791. {
  792. if(isUserLogged)// !!!!!! kedy moze toto nastat? nexapem ...
  793. return false;
  794. var configLoaded=true;
  795. // Automatically detect crossDomain settings
  796. var detectedHref=location.protocol+'//'+location.hostname+(location.port ? ':'+location.port : '');
  797. // check username and password against the server and create config from globalNetworkCheckSettings
  798. if(typeof globalNetworkCheckSettings!='undefined' && globalNetworkCheckSettings!=null)
  799. {
  800. if(globalLoginUsername=='' || globalLoginPassword=='')
  801. {
  802. $('#LoginPage').fadeTo(500, 1, function(){if(typeof globalDemoMode=='undefined') $('[data-type="system_username"]').focus()});
  803. $('#LoginLoader').fadeOut(1200);
  804. return false;
  805. }
  806. else
  807. {
  808. if(globalNetworkCheckSettings.crossDomain==undefined || typeof globalNetworkCheckSettings.crossDomain!='boolean')
  809. {
  810. if(globalNetworkCheckSettings.href.indexOf(detectedHref)==0)
  811. globalNetworkCheckSettings.crossDomain=false;
  812. else
  813. globalNetworkCheckSettings.crossDomain=true;
  814. console.log("Info: [globalNetworkCheckSettings: '"+globalNetworkCheckSettings.href+"']: crossDomain set to: '"+(globalNetworkCheckSettings.crossDomain==true ? 'true' : 'false')+"'");
  815. }
  816. // !!!! preco sa riesi s logout buttonom prave tu?
  817. // show the logout button
  818. if(typeof globalAvailableAppsArray!='undefined' && globalAvailableAppsArray!=null && globalAvailableAppsArray.length>1) {
  819. $('#intLogout').prev().addBack().css('display', 'block');
  820. $('#intLogout').attr('title',localization[globalInterfaceLanguage].altLogout);
  821. }
  822. else {
  823. $('#Logout').css('display', 'block');
  824. }
  825. netCheckAndCreateConfiguration(globalNetworkCheckSettings);
  826. return true;
  827. }
  828. }
  829. // load the configuration XML(s) from the network
  830. if(typeof globalNetworkAccountSettings!='undefined' && globalNetworkAccountSettings!=null)
  831. {
  832. if(globalLoginUsername=='' || globalLoginPassword=='')
  833. {
  834. $('#LoginPage').fadeTo(500, 1, function(){if(typeof globalDemoMode=='undefined') $('[data-type="system_username"]').focus()});
  835. $('#LoginLoader').fadeOut(1200);
  836. return false;
  837. }
  838. else
  839. {
  840. if(globalNetworkAccountSettings.crossDomain==undefined || typeof globalNetworkAccountSettings.crossDomain!='boolean')
  841. {
  842. if(globalNetworkAccountSettings.href.indexOf(detectedHref)==0)
  843. globalNetworkAccountSettings.crossDomain=false;
  844. else
  845. globalNetworkAccountSettings.crossDomain=true;
  846. console.log("Info: [globalNetworkAccountSettings: '"+globalNetworkAccountSettings.href+"']: crossDomain set to: '"+(globalNetworkAccountSettings.crossDomain==true ? 'true' : 'false')+"'");
  847. }
  848. // !!!! preco sa riesi s logout buttonom prave tu?
  849. // show the logout button
  850. if(typeof globalAvailableAppsArray!='undefined' && globalAvailableAppsArray!=null && globalAvailableAppsArray.length>1) {
  851. $('#intLogout').prev().addBack().css('display', 'block');
  852. $('#intLogout').attr('title',localization[globalInterfaceLanguage].altLogout);
  853. }
  854. else {
  855. $('#Logout').css('display', 'block');
  856. }
  857. netLoadConfiguration(globalNetworkAccountSettings);
  858. return true;
  859. }
  860. }
  861. if((typeof globalNetworkAccountSettings=='undefined' || globalNetworkAccountSettings==null) && (typeof globalNetworkCheckSettings=='undefined' || globalNetworkCheckSettings==null) && (typeof globalAccountSettings!='undefined' && globalAccountSettings!=null) && globalAccountSettings.length>0)
  862. {
  863. var delegCount=0, delegIndex=0;
  864. if(!isDelegationLoaded)
  865. {
  866. for(var i=0; i<globalAccountSettings.length; i++)
  867. if((typeof globalAccountSettings[i].delegation=='boolean' && globalAccountSettings[i].delegation) || (globalAccountSettings[i].delegation instanceof Array && globalAccountSettings[i].delegation.length>0))
  868. delegIndex=i;
  869. for(var i=0; i<globalAccountSettings.length; i++)
  870. if((typeof globalAccountSettings[i].delegation=='boolean' && globalAccountSettings[i].delegation) || (globalAccountSettings[i].delegation instanceof Array && globalAccountSettings[i].delegation.length>0))
  871. {
  872. delegCount++;
  873. DAVresourceDelegation(globalAccountSettings[i], i, delegIndex);
  874. }
  875. if(delegCount>0)
  876. isDelegationLoaded = true;
  877. }
  878. if(delegCount==0 && !isDelegationLoaded)
  879. {
  880. // start the client
  881. if(isAvaible('CardDavMATE'))
  882. runCardDAV();
  883. if(isAvaible('CalDavZAP'))
  884. runCalDAV();
  885. if(isAvaible('Projects'))
  886. runProjects();
  887. if(isAvaible('Settings'))
  888. runSettings();
  889. globalResourceNumber=globalAccountSettings.length;
  890. loadAllResources();
  891. }
  892. }
  893. }
  894. function globalMain()
  895. {
  896. for(var prop in globalSettings)
  897. globalDefinedSettings.push(prop);
  898. if(typeof globalEnabledApps=='undefined' || globalEnabledApps==null)
  899. {
  900. if(typeof isCalDAVAvaible!='undefined' && isCalDAVAvaible!=null && isCalDAVAvaible)
  901. {
  902. globalAvailableAppsArray[globalAvailableAppsArray.length]='CalDavZAP';
  903. globalAvailableAppsArray[globalAvailableAppsArray.length]='CalDavTODO';
  904. }
  905. if(typeof isCardDAVAvaible!='undefined' && isCardDAVAvaible!=null && isCardDAVAvaible)
  906. globalAvailableAppsArray[globalAvailableAppsArray.length]='CardDavMATE';
  907. if(typeof isSettingsAvaible!='undefined' && isSettingsAvaible!=null && isSettingsAvaible)
  908. globalAvailableAppsArray[globalAvailableAppsArray.length]='Settings';
  909. if(typeof isProjectsAvaible!='undefined' && isProjectsAvaible!=null && isProjectsAvaible)
  910. globalAvailableAppsArray[globalAvailableAppsArray.length]='Projects';
  911. if(typeof isReportsAvaible!='undefined' && isReportsAvaible!=null && isReportsAvaible)
  912. globalAvailableAppsArray[globalAvailableAppsArray.length]='Reports';
  913. }
  914. else
  915. {
  916. if(typeof isCalDAVAvaible!='undefined' && isCalDAVAvaible!=null && isCalDAVAvaible && (globalEnabledApps.indexOf('CalDavZAP')!=-1 || globalEnabledApps.indexOf('CalDavTODO')!=-1 ))
  917. {
  918. globalAvailableAppsArray[globalAvailableAppsArray.length]='CalDavZAP';
  919. globalAvailableAppsArray[globalAvailableAppsArray.length]='CalDavTODO';
  920. }
  921. if(typeof isCardDAVAvaible!='undefined' && isCardDAVAvaible!=null && isCardDAVAvaible && globalEnabledApps.indexOf('CardDavMATE')!=-1)
  922. globalAvailableAppsArray[globalAvailableAppsArray.length]='CardDavMATE';
  923. if(typeof isSettingsAvaible!='undefined' && isSettingsAvaible!=null && isSettingsAvaible && globalEnabledApps.indexOf('Settings')!=-1)
  924. globalAvailableAppsArray[globalAvailableAppsArray.length]='Settings';
  925. if(typeof isProjectsAvaible!='undefined' && isProjectsAvaible!=null && isProjectsAvaible && globalEnabledApps.indexOf('Projects')!=-1)
  926. globalAvailableAppsArray[globalAvailableAppsArray.length]='Projects';
  927. if(typeof isReportsAvaible!='undefined' && isReportsAvaible!=null && isReportsAvaible)
  928. globalAvailableAppsArray[globalAvailableAppsArray.length]='Reports';
  929. }
  930. if(globalAvailableAppsArray.length>1)
  931. isIntegrated=true;
  932. if(globalSettings.defaultactiveapp.value==null)
  933. {
  934. if(isAvaible('CardDavMATE'))
  935. globalActiveApp='CardDavMATE';
  936. else if(isAvaible('CalDavZAP'))
  937. globalActiveApp='CalDavZAP';
  938. }
  939. else
  940. globalActiveApp=globalSettings.defaultactiveapp.value;
  941. if(isAvaible('CardDavMATE'))
  942. {
  943. // Modify available inputs before making additional changes to vCard form
  944. if(typeof globalDisabledContactAttributes!='undefined' && globalDisabledContactAttributes instanceof Array)
  945. for(var i=0;i<globalDisabledContactAttributes.length;i++)
  946. $('#vCardTemplate').find('[data-attr-name="'+jqueryEscapeSelector(globalDisabledContactAttributes[i])+'"]').remove();
  947. // hook for vCard template extension
  948. if(typeof(globalContactsExtInitMain)=='function')
  949. globalContactsExtInitMain($('#vCardTemplate'));
  950. }
  951. /*************************** BAD HACKS SECTION ***************************/
  952. // here we fix the cross OS/cross broser problems (unfixable in pure CSS)
  953. if($.browser.webkit && !!window.chrome) /* Chrome */
  954. {
  955. if(navigator.platform.toLowerCase().indexOf('win')==0) /* Windows version */
  956. {
  957. $('#LoginPage, #vCardTemplate, #event_details_template, #todo_details_template, #EditorBoxSettings').find('input').css('text-indent', '2px');
  958. $('#LoginPage, #vCardTemplate, #event_details_template, #todo_details_template, #EditorBoxSettings').find('select').css({'padding-left': '0px', 'padding-right': '13px'});
  959. }
  960. else /* non-Windows version */
  961. $('#LoginPage, #vCardTemplate, #event_details_template, #todo_details_template, #EditorBoxSettings').find('input').css('text-indent', '1px');
  962. }
  963. else if($.browser.safari)
  964. {
  965. $('#LoginPage, #vCardTemplate, #event_details_template, #todo_details_template, #EditorBoxSettings').find('textarea').addClass('safari_hack');
  966. $('#LoginPage, #vCardTemplate, #event_details_template, #todo_details_template, #EditorBoxSettings').find('input').addClass('safari_hack');
  967. }
  968. else if($.browser.msie) /* IE */
  969. {
  970. if(parseInt($.browser.version, 10)==10) /* IE 10 (because there are no more conditional comments) */
  971. {
  972. $('select').css({'padding-top': '1px', 'padding-left': '0px', 'padding-right': '0px'});
  973. $('textarea').css('padding-top', '3px');
  974. $('input[type=button]').css('padding-top', '2px');
  975. }
  976. // ADD SVG to login screen
  977. var newSVG=$(SVG_select_login).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
  978. $('#Login').find('select[data-type="language"]').after($($('<div>').append($(newSVG).clone()).html()));
  979. }
  980. else if($.browser.mozilla)
  981. {
  982. // ADD SVG to login screen
  983. var newSVG=$(SVG_select_login).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
  984. $('#Login').find('select[data-type="language"]').after($($('<div>').append($(newSVG).clone()).html()));
  985. }
  986. /*************************** END OF BAD HACKS SECTION ***************************/
  987. /* language selector */
  988. var lang_num=0;
  989. var language_option=$('#Login').find('[data-type="language"]').find('option');
  990. $('#Login').find('[data-type="language"]').html('');
  991. if(typeof globalInterfaceCustomLanguages!='undefined' && globalInterfaceCustomLanguages.length!=undefined && globalInterfaceCustomLanguages.length>0)
  992. {
  993. for(var i=0; i<globalInterfaceCustomLanguages.length; i++)
  994. if(localization[globalInterfaceCustomLanguages[i]]!=undefined)
  995. {
  996. var tmp=language_option;
  997. tmp.attr('data-type',globalInterfaceCustomLanguages[i]);
  998. tmp.text(localization[globalInterfaceCustomLanguages[i]]['_name_']);
  999. $('#Login').find('[data-type="language"]').append(tmp.clone());
  1000. lang_num++;
  1001. }
  1002. }
  1003. if(lang_num==0) // no language option, use the default (all languages from localization.js)
  1004. for(var loc in localization)
  1005. {
  1006. var tmp=language_option;
  1007. tmp.attr('data-type',loc);
  1008. tmp.text(localization[loc]['_name_']); // translation
  1009. $('#Login').find('[data-type="language"]').append(tmp.clone());
  1010. }
  1011. // select the globalInterfaceLanguage in the interface
  1012. $('[data-type="language"]').find('[data-type='+globalInterfaceLanguage+']').prop('selected',true);
  1013. // set login screen logo
  1014. if(isAvaible('CalDavZAP') && !isAvaible('CardDavMATE'))
  1015. {
  1016. $('[data-size="login_logo"]').find('img').attr('src', "images/cdz_logo.svg");
  1017. $('#LoginPage').find('.footer').text('CalDavZAP - the open source CalDAV web client');
  1018. }
  1019. else if(isAvaible('CardDavMATE') && !isAvaible('CalDavZAP'))
  1020. {
  1021. $('[data-size="login_logo"]').find('img').attr('src', "carddavmate/images/cdm_logo.svg");
  1022. $('#LoginPage').find('.footer').text('CardDavMATE - the open source CardDAV web client');
  1023. }
  1024. else
  1025. {
  1026. $('#Login').css('margin-top', '41px');
  1027. $('[data-size="login_logo"]').find('img').attr('src', "images/infcloud_logo.svg");
  1028. $('#LoginPage').find('.footer').text('InfCloud - the open source CalDAV/CardDAV web client');
  1029. }
  1030. $('#LoginPage').find('.footer').attr('title', globalVersion);
  1031. var server_info_tag = $('<div>Server: </div>');
  1032. server_info_tag.append($('<a>', {href: globalNetworkCheckSettings.href}).append(globalNetworkCheckSettings.href));
  1033. $('#LoginPage').find('.footer').append(server_info_tag);
  1034. if(isAvaible('CardDavMATE'))
  1035. globalMainCardDAV();
  1036. if(isAvaible('CalDavZAP'))
  1037. globalMainCalDAV();
  1038. if(isAvaible('Projects'))
  1039. globalMainProjects();
  1040. if(isAvaible('Reports'))
  1041. globalMainReports();
  1042. if(isAvaible('Settings'))
  1043. globalMainSettings();
  1044. if(isAvaible('CardDavMATE'))
  1045. mainCardDAV();
  1046. if(isAvaible('CalDavZAP'))
  1047. mainCalDAV();
  1048. if(isAvaible('Projects'))
  1049. mainProjects();
  1050. if(isAvaible('Reports'))
  1051. mainReports();
  1052. if(isAvaible('Settings'))
  1053. mainSettings();
  1054. init();
  1055. }
  1056. function saveSettings(isFormSave)
  1057. {
  1058. if(globalSettings.islastdefaultactiveapp.value)
  1059. globalSettings.defaultactiveapp.value=globalActiveApp;
  1060. globalSettings.version.value=globalSettingsVersion;
  1061. var rex = new RegExp('^(https?://)([^@/]+(?:@[^@/]+)?)@(.*)');
  1062. if(isAvaible('CalDavZAP'))
  1063. {
  1064. globalSettings.activecalendarcollections.value.splice(0, globalSettings.activecalendarcollections.value.length);
  1065. globalSettings.activetodocollections.value.splice(0, globalSettings.activetodocollections.value.length);
  1066. globalSettings.todolistfilterselected.value.splice(0, globalSettings.todolistfilterselected.value.length);
  1067. for(var i=0;i<globalVisibleCalDAVCollections.length;i++)
  1068. {
  1069. var uidParts=globalVisibleCalDAVCollections[i].match(rex)
  1070. globalSettings.activecalendarcollections.value.splice(globalSettings.activecalendarcollections.value.length , 0, uidParts[1]+uidParts[3]);
  1071. }
  1072. for(var i=0;i<globalVisibleCalDAVTODOCollections.length;i++)
  1073. {
  1074. var uidParts=globalVisibleCalDAVTODOCollections[i].match(rex);
  1075. globalSettings.activetodocollections.value.splice(globalSettings.activetodocollections.value.length , 0, uidParts[1]+uidParts[3]);
  1076. }
  1077. if(globalSettings.islastactiveview.value)
  1078. {
  1079. var view= $('#calendar').fullCalendar('getView');
  1080. globalSettings.activeview.value=view.name;
  1081. }
  1082. if(globalSettings.islasttimezone.value)
  1083. globalSettings.timezone.value=globalSessionTimeZone;
  1084. var uidSelected=$('#ResourceCalDAVList').find('.resourceCalDAV_item_selected').attr('data-id');
  1085. if(uidSelected!=undefined && uidSelected!='')
  1086. {
  1087. var par=uidSelected.split('/');
  1088. globalSettings.calendarselected.value=par[par.length-3]+'/'+par[par.length-2]+'/';
  1089. }
  1090. uidSelected=$('#ResourceCalDAVTODOList').find('.resourceCalDAV_item_selected').attr('data-id');
  1091. if(uidSelected!=undefined && uidSelected!='')
  1092. {
  1093. var par=uidSelected.split('/');
  1094. globalSettings.todocalendarselected.value=par[par.length-3]+'/'+par[par.length-2]+'/';
  1095. }
  1096. var filterArray = $('.fc-filter-option-selected');
  1097. for(var i=0; i<filterArray.length; i++)
  1098. globalSettings.todolistfilterselected.value.splice(globalSettings.todolistfilterselected.value.length,0,$($('.fc-filter-option-selected')[i]).attr('data-type'));
  1099. }
  1100. if(isAvaible('CardDavMATE'))
  1101. {
  1102. globalSettings.activeaddressbookcollections.value.splice(0, globalSettings.activeaddressbookcollections.value.length);
  1103. var visAddrs = dataGetChecked('#ResourceCardDAVList');
  1104. for(var i=0;i<visAddrs.length;i++)
  1105. {
  1106. if(visAddrs[i]!='undefined')
  1107. {
  1108. var uidPart=visAddrs[i].match(RegExp('^(https?://)(.*)', 'i'))[1];
  1109. var uidPart2= visAddrs[i].match(RegExp('^(https?://)(.*)', 'i'))[2].split('@')[2];
  1110. globalSettings.activeaddressbookcollections.value.splice(globalSettings.activeaddressbookcollections.value.length , 0, uidPart+uidPart2);
  1111. }
  1112. }
  1113. if($('#ResourceCardDAVList').find('.group.resourceCardDAV_selected').length>0)
  1114. var uidASelected=$('#ResourceCardDAVList').find('.group.resourceCardDAV_selected').attr('data-id');
  1115. else if($('#ResourceCardDAVList').find('.resourceCardDAV_selected').length>0)
  1116. var uidASelected=$('#ResourceCardDAVList').find('.resourceCardDAV_selected').attr('data-id');
  1117. else
  1118. var uidASelected='';
  1119. if(uidASelected!=undefined && uidASelected!='')
  1120. globalSettings.addressbookselected.value=uidASelected;
  1121. }
  1122. if(isAvaible('Settings') && isFormSave)
  1123. return applyFormSettings();
  1124. else
  1125. return globalSettings;
  1126. }
  1127. function loadXMLSetings(settingsXML)
  1128. {
  1129. $(settingsXML).children().each(
  1130. function(ind,elm)
  1131. {
  1132. var type = $(elm).attr('type');
  1133. var locked = typeof $(elm).attr('locked')!='undefined'&&$(elm).attr('locked')!=null&&$(elm).attr('locked')=='true' ? true : false;
  1134. if(typeof globalSettings[$(elm).prop('tagName').toLowerCase()] == 'undefined')
  1135. return true;
  1136. if(locked)
  1137. globalSettings[$(elm).prop('tagName').toLowerCase()].locked=true;
  1138. if($(elm).children().length>0)
  1139. {
  1140. globalSettings[$(elm).prop('tagName').toLowerCase()].value = new Array();
  1141. $(elm).children().each(function(pind,pelm)
  1142. {
  1143. if($(elm).prop('tagName').toLowerCase() == 'urihandlerprofile')
  1144. {
  1145. globalSettings[$(elm).prop('tagName').toLowerCase()].value = {};
  1146. globalSettings[$(elm).prop('tagName').toLowerCase()].value[$(pelm).text().toLowerCase()] = $(pelm).attr('url');
  1147. }
  1148. else if($(elm).prop('tagName').toLowerCase() == 'addresscountryequivalence')
  1149. {
  1150. var eqObject = {};
  1151. eqObject['country'] = $(pelm).attr('name');
  1152. eqObject['regex'] = $(pelm).attr('regex');
  1153. globalSettings[$(elm).prop('tagName').toLowerCase()].value.push(eqObject);
  1154. }
  1155. else if($(elm).prop('tagName').toLowerCase() == 'compatibility')
  1156. {
  1157. globalSettings[$(elm).prop('tagName').toLowerCase()].value = {};
  1158. globalSettings[$(elm).prop('tagName').toLowerCase()].value[$(pelm).attr('name')] = new Array();
  1159. $(pelm).children().each(function(rind,relm)
  1160. {
  1161. globalSettings[$(elm).prop('tagName').toLowerCase()].value[$(pelm).attr('name')].push($(relm).text());
  1162. });
  1163. }
  1164. else if($(pelm).text()!='')
  1165. {
  1166. switch(type)
  1167. {
  1168. case 'integer':
  1169. globalSettings[$(elm).prop('tagName').toLowerCase()].value.push(parseInt($(pelm).text(),10));
  1170. break;
  1171. case 'string':
  1172. if($(pelm).text()!='null')
  1173. globalSettings[$(elm).prop('tagName').toLowerCase()].value.push($(pelm).text());
  1174. else
  1175. globalSettings[$(elm).prop('tagName').toLowerCase()].value.push(null);
  1176. break;
  1177. case 'boolean':
  1178. if($(pelm).text() == 'true')
  1179. globalSettings[$(elm).prop('tagName').toLowerCase()].value.push(true);
  1180. else
  1181. globalSettings[$(elm).prop('tagName').toLowerCase()].value.push(false);
  1182. break;
  1183. default:
  1184. break;
  1185. }
  1186. }
  1187. });
  1188. }
  1189. else if($(elm).text()!='')
  1190. {
  1191. switch(type)
  1192. {
  1193. case 'integer':
  1194. globalSettings[$(elm).prop('tagName').toLowerCase()].value = parseInt($(elm).text(),10);
  1195. break;
  1196. case 'string':
  1197. if($(elm).text()!='null')
  1198. globalSettings[$(elm).prop('tagName').toLowerCase()].value = $(elm).text();
  1199. else
  1200. globalSettings[$(elm).prop('tagName').toLowerCase()].value = null;
  1201. break;
  1202. case 'boolean':
  1203. if($(elm).text() == 'true')
  1204. globalSettings[$(elm).prop('tagName').toLowerCase()].value = true;
  1205. else if($(elm).text() == 'false')
  1206. globalSettings[$(elm).prop('tagName').toLowerCase()].value = false;
  1207. break;
  1208. default:
  1209. break;
  1210. }
  1211. }
  1212. });
  1213. }
  1214. function applyServerSettings(inputSettings)
  1215. {
  1216. if(typeof inputSettings.activecalendarcollections == 'undefined' || inputSettings.activecalendarcollections==null)
  1217. inputSettings.activecalendarcollections = new Array();
  1218. if(typeof inputSettings.activetodocollections == 'undefined' || inputSettings.activetodocollections==null)
  1219. inputSettings.activetodocollections = new Array();
  1220. if(typeof inputSettings.loadedcalendarcollections == 'undefined' || inputSettings.loadedcalendarcollections==null)
  1221. {
  1222. inputSettings.loadedcalendarcollections = new Array();
  1223. if(isAvaible('CalDavZAP'))
  1224. $('#showUnloadedCalendars').css('display','none');
  1225. }
  1226. if(typeof inputSettings.loadedtodocollections == 'undefined' || inputSettings.loadedtodocollections==null)
  1227. {
  1228. inputSettings.loadedtodocollections = new Array();
  1229. if(isAvaible('CalDavZAP'))
  1230. $('#showUnloadedCalendarsTODO').css('display','none');
  1231. }
  1232. if(typeof inputSettings.activeaddressbookcollections == 'undefined' || inputSettings.activeaddressbookcollections==null)
  1233. inputSettings.activeaddressbookcollections = new Array();
  1234. if(typeof inputSettings.loadedaddressbookcollections == 'undefined' || inputSettings.loadedaddressbookcollections==null)
  1235. {
  1236. inputSettings.loadedaddressbookcollections = new Array();
  1237. if(isAvaible('CardDavMATE'))
  1238. $('#showUnloadedAddressbooks').css('display','none');
  1239. }
  1240. transformSettings(inputSettings);
  1241. for(var prop in inputSettings)
  1242. {
  1243. if(globalDefinedSettings.indexOf(prop)==-1 || (typeof globalPreviousSupportedSettings !='undefined' && globalPreviousSupportedSettings.indexOf(prop)==-1))
  1244. {
  1245. if(globalDefinedSettings.indexOf(prop)==-1)
  1246. console.log('Warning: Unsupported property: \''+prop+'\' (you can safely ignore this message)');
  1247. continue;
  1248. }
  1249. if(typeof globalSettings[prop] !='undefined' && !globalSettings[prop].locked)
  1250. globalSettings[prop].value=inputSettings[prop];
  1251. }
  1252. }
  1253. function transformSettings(settings) {
  1254. if(!settings.version) {
  1255. settings.version = 1;
  1256. }
  1257. while(settings.version<globalSettingsVersion) {
  1258. console.log('Warning: Detected outdated server settings (version ' + settings.version++ +') - transforming to version ' + settings.version);
  1259. switch(settings.version) {
  1260. case 2:
  1261. if(typeof globalActiveCalendarCollections!='undefined' && globalActiveCalendarCollections!=null)
  1262. settings.activecalendarcollections=globalActiveCalendarCollections.slice();
  1263. else
  1264. settings.activecalendarcollections.splice(0, settings.activecalendarcollections.length);
  1265. if(typeof globalActiveTodoCollections!='undefined' && globalActiveTodoCollections!=null)
  1266. settings.activetodocollections=globalActiveTodoCollections.slice();
  1267. else
  1268. settings.activetodocollections.splice(0, settings.activetodocollections.length);
  1269. if(typeof globalLoadedCalendarCollections!='undefined' && globalLoadedCalendarCollections!=null)
  1270. settings.loadedcalendarcollections=globalLoadedCalendarCollections.slice();
  1271. else
  1272. settings.loadedcalendarcollections.splice(0, settings.loadedcalendarcollections.length);
  1273. if(typeof globalLoadedTodoCollections!='undefined' && globalLoadedTodoCollections!=null)
  1274. settings.loadedtodocollections=globalLoadedTodoCollections.slice();
  1275. else
  1276. settings.loadedtodocollections.splice(0, settings.loadedtodocollections.length);
  1277. if(typeof globalActiveAddressbookCollections!='undefined' && globalActiveAddressbookCollections!=null)
  1278. settings.activeaddressbookcollections=globalActiveAddressbookCollections.slice();
  1279. else
  1280. settings.activeaddressbookcollections.splice(0, settings.activeaddressbookcollections.length);
  1281. if(typeof globalLoadedAddressbookCollections!='undefined' && globalLoadedAddressbookCollections!=null)
  1282. settings.loadedaddressbookcollections=globalLoadedAddressbookCollections.slice();
  1283. else
  1284. settings.loadedaddressbookcollections.splice(0, settings.loadedaddressbookcollections.length);
  1285. if(typeof globalContactStoreFN!='undefined' && globalContactStoreFN!=null)
  1286. settings.contactstorefn=globalContactStoreFN.slice();
  1287. else
  1288. settings.contactstorefn=['prefix', ' last', ' middle', ' first', ' suffix'];
  1289. break;
  1290. case 3:
  1291. settings.collectiondisplay=(typeof globalCollectionDisplay!='undefined' && globalCollectionDisplay!=null && globalCollectionDisplay!='') ? globalCollectionDisplay : (
  1292. (typeof globalGroupContactsByCompanies!='undefined' && globalGroupContactsByCompanies) ?
  1293. [{label: '{Name}', value: {company: ['{Company}', ' [{Department}]'], personal: ['{LastName}', ' {MiddleName}', ' {FirstName}']}}, {label: '{JobTitle}', value: ['{JobTitle}']}, {label: '{Email}', value: ['{Email[:0]}']}, {label: '{Phone} 1', value: ['{Phone[:0]}']}, {label: '{Phone} 2', value: ['{Phone[:1]}']}, {label: '{NoteText}', value: ['{NoteText}']}] :
  1294. [{label: '{Name}', value: ['{LastName}', ' {MiddleName}', ' {FirstName}']}, {label: '{Company} [{Department}]', value: ['{Company}', ' [{Department}]']}, {label: '{JobTitle}', value: ['{JobTitle}']}, {label: '{Email}', value: ['{Email[:0]}']}, {label: '{Phone} 1', value: ['{Phone[:0]}']}, {label: '{Phone} 2', value: ['{Phone[:1]}']}, {label: '{NoteText}', value: ['{NoteText}']}]
  1295. );
  1296. settings.collectionsort=(typeof globalCollectionSort!='undefined' && globalCollectionSort!=null && globalCollectionSort!='') ? globalCollectionSort : '';
  1297. break;
  1298. default:
  1299. break;
  1300. }
  1301. }
  1302. }
  1303. function loadSettings(strobj, fromServer, syncMode)
  1304. {
  1305. if(settingsLoaded && !syncMode)
  1306. return false;
  1307. try
  1308. {
  1309. objNew = jQuery.parseJSON(strobj);
  1310. if(typeof objNew=='object')
  1311. {
  1312. if(!syncMode && typeof globalSettingsXML!='undefined' && globalSettingsXML!=null && globalSettingsXML!='')
  1313. loadXMLSetings($(globalSettingsXML));
  1314. if(fromServer)
  1315. applyServerSettings(objNew);
  1316. // $.extend(globalSettings,objNew);
  1317. }
  1318. }
  1319. catch(err)
  1320. {
  1321. console.log('load settings - JSON parsing error: '+err);
  1322. delete globalSettings.version.value;
  1323. loadSettings(JSON.stringify(globalSettings), false, false);
  1324. return false;
  1325. }
  1326. if(syncMode)
  1327. return false;
  1328. if(isAvaible('CalDavZAP'))
  1329. {
  1330. for(var i=0;i<globalSettings.timezonesenabled.value.length;i++)
  1331. if(timeZonesEnabled.indexOf(globalSettings.timezonesenabled.value[i])==-1)
  1332. timeZonesEnabled.push(globalSettings.timezonesenabled.value[i]);
  1333. if(globalSettings.timezonesupport.value)
  1334. {
  1335. globalSessionTimeZone=globalSettings.timezone.value;
  1336. if(globalSessionTimeZone != null && timeZonesEnabled.indexOf(globalSessionTimeZone)==-1)
  1337. timeZonesEnabled.push(globalSessionTimeZone);
  1338. }
  1339. else
  1340. {
  1341. globalSessionTimeZone = 'local';
  1342. timeZonesEnabled.push('local');
  1343. }
  1344. initTimepicker(globalSettings.ampmformat.value);
  1345. if(globalSettings.timeformatagenda.value==null)
  1346. {
  1347. if(globalSettings.ampmformat.value)
  1348. globalSettings.timeformatagenda.value='h:mm TT{ - h:mm TT}';
  1349. else
  1350. globalSettings.timeformatagenda.value='H:mm{ - H:mm}';
  1351. }
  1352. if(globalSettings.timeformatbasic.value==null)
  1353. {
  1354. if(globalSettings.ampmformat.value)
  1355. globalSettings.timeformatbasic.value = 'h:mmT{-h:mmT}';
  1356. else
  1357. globalSettings.timeformatbasic.value = 'H:mm{-H:mm}';
  1358. }
  1359. if(globalSettings.appleremindersmode.value)
  1360. {
  1361. if(globalSettings.todolistfilterselected.value.indexOf('filterAction')==-1 && globalSettings.todolistfilterselected.value.indexOf('filterCompleted')==-1)
  1362. {
  1363. if(globalSettings.todolistfilterselected.value.indexOf('filterProgress')!=-1)
  1364. globalSettings.todolistfilterselected.value[globalSettings.todolistfilterselected.value.indexOf('filterProgress')] = 'filterAction';
  1365. if(globalSettings.todolistfilterselected.value.indexOf('filterCanceled')!=-1)
  1366. globalSettings.todolistfilterselected.value[globalSettings.todolistfilterselected.value.indexOf('filterCanceled')] = 'filterAction';
  1367. }
  1368. }
  1369. if(globalSettings.eventstartfuturelimit.value == null)
  1370. {
  1371. var now=new Date();
  1372. globalToLoadedLimit = new Date(now.getFullYear(), now.getMonth()+12, 1, 0, 0, 0);
  1373. globalToLoadedLimit.setMilliseconds(0);
  1374. globalBeginFuture = new Date(globalToLoadedLimit.getTime());
  1375. globalBeginFuture.setDate(globalBeginFuture.getDate()+14);
  1376. globalToLoadedLimitTodo = new Date(now.getFullYear(), now.getMonth()+12, 1, 0, 0, 0);
  1377. globalToLoadedLimitTodo.setMilliseconds(0);
  1378. }
  1379. if(globalSettings.enablekbnavigation.value!==false)
  1380. initKbTodoNavigation();
  1381. initFullCalendar();
  1382. initTodoList();
  1383. $('#SystemCalDavZAP .fc-header-title').css('width', $('#main_h_placeholder').width()-$('#SystemCalDavZAP .fc-header-left').outerWidth()-$('#SystemCalDavZAP .fc-header-right').outerWidth());
  1384. $('#ResourceCalDAVList, #ResourceCalDAVTODOList').css('bottom',(globalSettings.timezonesupport.value ? 20 : 0));
  1385. $('#alertBox').css('left', ($(window).width()/2)-($('#alertBox').width()/2));
  1386. }
  1387. if(isAvaible('CardDavMATE'))
  1388. {
  1389. // set ABListTableLayout
  1390. globalRefAbListTableHeader = $('#ABListTable').find('.ablist_table_header');
  1391. var colgroups = $('#ABListTable').find('colgroup');
  1392. for(var i=0; i<getDataColumnCount(); i++) {
  1393. globalRefAbListTableHeader.append('<th>');
  1394. colgroups.append('<col>');
  1395. }
  1396. globalRefAbListTableHeader.children().slice(globalFixedContactDataColumnsCount).each(function(ind) {
  1397. $(this).text(getDataColumnLabelAtIndex(ind));
  1398. });
  1399. globalRefABListTableCols=$('#ABListTable').find('colgroup').first().children();
  1400. globalRefABListInnerTableCols=$('#ABListTableInner').find('colgroup').children();
  1401. $('#ABListTable').find('.ablist_table_container').children().attr('colspan', getDataColumnCount()+globalFixedContactDataColumnsCount);
  1402. globalRefABListTable.children('.ablist_header').children().attr('colspan', getDataColumnCount()+globalFixedContactDataColumnsCount);
  1403. if(!globalOrigABListHeader) {
  1404. globalOrigABListHeader=globalRefABListTable.children('.ablist_header').remove();
  1405. }
  1406. if(!globalOrigABListItem) {
  1407. globalOrigABListItem=globalRefABListTable.children('.ablist_item').remove();
  1408. }
  1409. if(globalSettings.enablekbnavigation.value!==false)
  1410. initKbAddrNavigation();
  1411. applyAddrSettings(globalTranslVcardTemplate);
  1412. applyAddrSettings($('#vCardEditor'));
  1413. }
  1414. if(isAvaible('Projects'))
  1415. if(globalSettings.enablekbnavigation.value!==false)
  1416. initKbProjectNavigation();
  1417. settingsLoaded=true;
  1418. if(!isAvaible(globalSettings.defaultactiveapp.value))
  1419. globalActiveApp = globalAvailableAppsArray[0];
  1420. else
  1421. globalActiveApp = globalSettings.defaultactiveapp.value;
  1422. }
  1423. function checkForLoadedCollections(inputSettings)
  1424. {
  1425. var val='', triggerSync=true;
  1426. globalLoadedCollectionsNumber=0;
  1427. globalLoadedCollectionsCount=0;
  1428. if(globalSettingsSaving=='event')
  1429. {
  1430. hideUnloadedCollections('event');
  1431. val = inputSettings.loadedcalendarcollections.value;
  1432. if(val.length>0)
  1433. globalLoadedCollectionsNumber+=$(val).not(globalSettings.loadedcalendarcollections.value).length;
  1434. else
  1435. globalLoadedCollectionsNumber++;
  1436. if($(globalSettings.loadedcalendarcollections.value).not(val).length>0)
  1437. {
  1438. if(globalLoadedCollectionsNumber==0)
  1439. {
  1440. triggerSync=false;
  1441. globalFirstHideLoader=false;
  1442. }
  1443. var unloadArray = $(globalSettings.loadedcalendarcollections.value).not(val);
  1444. unloadCalDAVCollection(unloadArray.toArray(),true);
  1445. }
  1446. if(triggerSync)
  1447. addLoadCalDAVCollection(val, true);
  1448. globalSettings.loadedcalendarcollections.value = val;
  1449. }
  1450. else if(globalSettingsSaving=='todo')
  1451. {
  1452. hideUnloadedCollections('todo');
  1453. val = inputSettings.loadedtodocollections.value;
  1454. if(val.length>0)
  1455. globalLoadedCollectionsNumber+=$(val).not(globalSettings.loadedtodocollections.value).length;
  1456. else
  1457. globalLoadedCollectionsNumber++;
  1458. if($(globalSettings.loadedtodocollections.value).not(val).length>0)
  1459. {
  1460. if(globalLoadedCollectionsNumber==0)
  1461. {
  1462. triggerSync=false;
  1463. globalFirstHideLoader=false;
  1464. }
  1465. var unloadArray = $(globalSettings.loadedtodocollections.value).not(val);
  1466. unloadCalDAVCollection(unloadArray.toArray(),false);
  1467. }
  1468. if(triggerSync)
  1469. addLoadCalDAVCollection(val, false);
  1470. globalSettings.loadedtodocollections.value = val;
  1471. }
  1472. else if(globalSettingsSaving=='addressbook')
  1473. {
  1474. hideUnloadedCardDAVCollections();
  1475. val = inputSettings.loadedaddressbookcollections.value;
  1476. if(val.length>0)
  1477. globalLoadedCollectionsNumber+=$(val).not(globalSettings.loadedaddressbookcollections.value).length;
  1478. else
  1479. globalLoadedCollectionsNumber++;
  1480. if($(globalSettings.loadedaddressbookcollections.value).not(val).length>0)
  1481. {
  1482. if(globalLoadedCollectionsNumber==0)
  1483. {
  1484. triggerSync=false;
  1485. globalFirstHideLoader=false;
  1486. }
  1487. var unloadArray = $(globalSettings.loadedaddressbookcollections.value).not(val);
  1488. unloadCardDAVCollection(unloadArray.toArray());
  1489. }
  1490. if(triggerSync)
  1491. addLoadCardDAVCollection(val)
  1492. globalSettings.loadedaddressbookcollections.value = val;
  1493. }
  1494. if(triggerSync)
  1495. ifLoadCollections();
  1496. }
  1497. function checkBeforeClose(isFormSave)
  1498. {
  1499. if((isAvaible('CalDavZAP') && globalCalDAVInitLoad) || (isAvaible('CardDavMATE') && globalCardDAVInitLoad))
  1500. return false;
  1501. var old_settings=JSON.stringify(globalSettings);
  1502. var settings=saveSettings(isFormSave);
  1503. var new_settings = JSON.stringify(settings);
  1504. if(old_settings == new_settings)
  1505. return false;
  1506. for(var i=0;i<globalAccountSettings.length;i++)
  1507. if(globalAccountSettings[i].href.indexOf(globalLoginUsername)!=-1 && globalAccountSettings[i].settingsAccount)
  1508. {
  1509. netSaveSettings(globalAccountSettings[i], settings, isFormSave,false);
  1510. break;
  1511. }
  1512. }
  1513. function isEachResourceLoaded()
  1514. {
  1515. var loaded = true;
  1516. for(var i=0; i< globalAccountSettings.length; i++)
  1517. if(typeof globalAccountSettings[i].errorLoaded!='undefined' && globalAccountSettings[i].errorLoaded!=null && globalAccountSettings[i].errorLoaded===true)
  1518. loaded=false;
  1519. return loaded;
  1520. }
  1521. window.onload=globalMain;
  1522. window.onkeydown=function(event)
  1523. {
  1524. switch(event.which) {
  1525. case 13:
  1526. if(!isUserLogged)
  1527. $('#Login').find('[data-type="system_login"]').trigger('click');
  1528. break;
  1529. case 27:
  1530. if(globalActiveApp=='CalDavZAP' && $('#CAEvent').is(':visible') && $('#EventDisabler').is(':hidden'))
  1531. $('#closeButton').trigger('click');
  1532. if(globalActiveApp=='Projects' && $('#ProjectEventForm').is(':visible') && $('#ProjectsDisabler').is(':hidden'))
  1533. $('#cancelActivity').trigger('click');
  1534. if($('.sp-container').is(':visible'))
  1535. $('html').trigger('click');
  1536. break;
  1537. default:
  1538. break;
  1539. }
  1540. };
  1541. function logoutCalDAV()
  1542. {
  1543. globalTodolistStatusArray={};
  1544. globalTodoCheckTimeout=null;
  1545. globalVisibleCalDAVCollections.splice(0, globalVisibleCalDAVCollections.length);
  1546. globalVisibleCalDAVTODOCollections.splice(0, globalVisibleCalDAVTODOCollections.length);
  1547. processedTimezones.splice(0, processedTimezones.length);
  1548. globalCalendarNumber=0;
  1549. globalOnlyCalendarNumber=0;
  1550. globalTodoCalendarNumber=0;
  1551. globalCalendarNumberCount=0;
  1552. globalLoadedLimit = new Date();
  1553. globalToLoadedLimit = new Date();
  1554. globalLimitLoading='';
  1555. globalLimitTodoLoading='';
  1556. globalBeginPast = new Date();
  1557. globalBeginFuture = new Date();
  1558. globalLoadedLimitTodo = new Date();
  1559. globalToLoadedLimitTodo = new Date();
  1560. globalDefaultCalendarCollectionActiveAll = false;
  1561. globalDefaultTodoCalendarCollectionActiveAll = false;
  1562. globalDefaultCalendarCollectionLoadAll = false;
  1563. globalDefaultTodoCalendarCollectionLoadAll = false;
  1564. globalCalDAVCollectionSync=false;
  1565. globalAllowFcRerender=true;
  1566. globalEventList.reset();
  1567. globalResourceCalDAVList.reset();
  1568. timeZonesEnabled.splice(0,timeZonesEnabled.length);
  1569. if(globalEventIntervalID!=null)
  1570. clearInterval(globalEventIntervalID);
  1571. $('#EventDisabler, #TodoDisabler, #AlertDisabler').fadeOut(2000);
  1572. $('#SystemCalDavZAP, #SystemCalDavTODO').animate({opacity : 0},200).promise().done(function(){
  1573. $('#SystemCalDavZAP, #SystemCalDavTODO').css('visibility','hidden');
  1574. $('#main, #mainTODO').animate({top: 25}, 0);
  1575. $('#searchForm, #searchFormTODO').hide();
  1576. $('#searchInput, #searchInputTODO').val('').trigger('keyup').trigger('blur');
  1577. $('#calendar').fullCalendar('destroy');
  1578. $('#todoList').fullCalendar('destroy');
  1579. $('#timezonePicker, #timezonePickerTODO').prop('disabled', false).empty();
  1580. $('#eventColor, #todoColor').css('background-color','');
  1581. if($('#ResourceCalDAVList').width()<1)
  1582. $('#ResourceCalDAVToggle').trigger('click');
  1583. if($('#ResourceCalDAVTODOList').width()<1)
  1584. $('#ResourceCalDAVTODOToggle').trigger('click');
  1585. });
  1586. }
  1587. function mainCalDAV()
  1588. {
  1589. localizeCalDAV();
  1590. // init();
  1591. }
  1592. function localizeCalDAV()
  1593. {
  1594. globalCalDAVInitLoad = true;
  1595. $('#ResourceCalDAVList').html(origResourceCalDAVListTemplate);
  1596. $('#ResourceCalDAVTODOList').html(origResourceCalDAVTODOListTemplate);
  1597. $('#CAEvent').html(origVcalendarTemplate);
  1598. $('#CATodo').html(origVtodoTemplate);
  1599. $('#todoLoader').html(origVtodoLoaderTemplate);
  1600. translate();
  1601. $('input[placeholder],textarea[placeholder]').placeholder();
  1602. cleanResourceCalDAVListTemplate=$('#ResourceCalDAVListTemplate').clone().wrap('<div>').parent().html();
  1603. cleanResourceCalDAVTODOListTemplate=$('#ResourceCalDAVTODOListTemplate').clone().wrap('<div>').parent().html();
  1604. cleanVcalendarTemplate=$('#CAEvent .saveLoader').clone().wrap('<div>').parent().html() + $('#repeatConfirmBox').clone().wrap('<div>').parent().html() + $('#event_details_template').clone().wrap('<div>').parent().html();
  1605. cleanVtodoTemplate=$('#repeatConfirmBoxTODO').clone().wrap('<div>').parent().html() + $('#todo_details_template').clone().wrap('<div>').parent().html();
  1606. $('#searchInput, #searchInputTODO').val('');
  1607. globalSettings.titleformatmonth.value = localization[globalInterfaceLanguage]._default_title_format_month_;
  1608. globalSettings.titleformatweek.value = localization[globalInterfaceLanguage]._default_title_format_week_;
  1609. globalSettings.titleformatday.value = localization[globalInterfaceLanguage]._default_title_format_day_;
  1610. globalSettings.titleformattable.value = localization[globalInterfaceLanguage]._default_title_format_table_;
  1611. globalSettings.columnformatagenda.value = localization[globalInterfaceLanguage]._default_column_format_agenda_;
  1612. }
  1613. function runCalDAV()
  1614. {
  1615. if(!isUserLogged)
  1616. run();
  1617. globalResourceRefreshNumber=0;
  1618. globalResourceRefreshNumberTodo=0;
  1619. $('#MainLoader').css('left','0px');
  1620. $('#MainLoader').fadeIn(200);
  1621. if(typeof globalSubscribedCalendars!='undefined' && globalSubscribedCalendars!=null)
  1622. {
  1623. globalAccountSettings[globalAccountSettings.length]=$.extend({},globalAccountSettings[0]);
  1624. globalAccountSettings[globalAccountSettings.length-1].hrefLabel = globalSubscribedCalendars.hrefLabel;
  1625. globalAccountSettings[globalAccountSettings.length-1].calendars = globalSubscribedCalendars.calendars;
  1626. globalAccountSettings[globalAccountSettings.length-1].ignoreAlarms = '';
  1627. }
  1628. }
  1629. function globalMainCalDAV()
  1630. {
  1631. $(window).resize(function(evt){
  1632. if(evt.target!=window)
  1633. return;
  1634. if(typeof globalCalDAVInitLoad!='undefined' && !globalCalDAVInitLoad && !globalResourceRefreshNumber && $('#main').width()!=globalCalWidth)
  1635. $('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].resizeLoader).parent().css('display','block');
  1636. $('#SystemCalDavZAP .fc-header-title').css('width', $('#main_h_placeholder').width()-$('#SystemCalDavZAP .fc-header-left').outerWidth()-$('#SystemCalDavZAP .fc-header-right').outerWidth());
  1637. $('#ResourceCalDAVList, #ResourceCalDAVTODOList').css('bottom',(globalSettings.timezonesupport.value ? 20 : 0));
  1638. $('#alertBox').css('left', ($(window).width()/2)-($('#alertBox').width()/2));
  1639. $('#calendar').fullCalendar('option', 'contentHeight', $('#main').height() - 14);
  1640. $('#todoList').fullCalendar('allowSelectEvent',false);
  1641. $('#todoList').fullCalendar('option', 'contentHeight', $('#mainTODO').height() - 14);
  1642. $('#todoList').fullCalendar('allowSelectEvent',true);
  1643. $('#todoList').fullCalendar('selectEvent', null, true);
  1644. if($('#CATodo').is(':visible')) {
  1645. checkTodoFormScrollBar();
  1646. }
  1647. if(globalSettings.displayhiddenevents.value)
  1648. {
  1649. hideEventCalendars();
  1650. hideTodoCalendars();
  1651. }
  1652. globalCalWidth = $('#main').width();
  1653. });
  1654. $('#ResourceCalDAVToggle').click(function(){
  1655. var transSpeedResource=70;
  1656. var isResourceVisible=$('#ResourceCalDAVList').width()>1;
  1657. var col0=isResourceVisible? 0:218;
  1658. var col1=isResourceVisible? 0:224;
  1659. var col2=isResourceVisible? 0:224;
  1660. var col3=isResourceVisible? 0:225;
  1661. if(isIntegrated)
  1662. {
  1663. col2+=isResourceVisible? 49:50;
  1664. col3+=50;
  1665. }
  1666. if(typeof globalCalDAVInitLoad!='undefined' && !globalCalDAVInitLoad && !globalResourceRefreshNumber)
  1667. $('#CalendarLoader').children('.loaderInfo').text(localization[globalInterfaceLanguage].resizeLoader).parent().css('display','block');
  1668. if(globalSettings.timezonesupport.value)
  1669. $('#timezoneWrapper').animate({width: col0}, transSpeedResource);
  1670. $('#resourceCalDAV_h, #ResourceCalDAVList').animate({width: col1}, transSpeedResource);
  1671. $('#CalendarLoader').animate({left: col3}, transSpeedResource);
  1672. $('#main_h, #searchForm, #main').animate({left: col2}, transSpeedResource).promise().done(function(){
  1673. $('#SystemCalDavZAP .fc-header-title').width($('#main_h_placeholder').width()-$('#SystemCalDavZAP .fc-header-left').width()-$('#SystemCalDavZAP .fc-header-right').width()-20);
  1674. $(window).resize();
  1675. });
  1676. });
  1677. $('#ResourceCalDAVTODOToggle').click(function(){
  1678. var transSpeedResource=70;
  1679. var isResourceVisible=$('#ResourceCalDAVTODOList').width()>1;
  1680. var col0=isResourceVisible? 0:218;
  1681. var col1=isResourceVisible? 0:224;
  1682. var col2=isResourceVisible? 0:224;
  1683. var col3=isResourceVisible? 0:225;
  1684. if(isIntegrated)
  1685. {
  1686. col2+=isResourceVisible? 49:50;
  1687. col3+=50;
  1688. }
  1689. if(globalSettings.timezonesupport.value)
  1690. $('#timezoneWrapperTODO').animate({width: col0}, transSpeedResource);
  1691. $('#resourceCalDAVTODO_h, #ResourceCalDAVTODOList').animate({width: col1}, transSpeedResource);
  1692. $('#CalendarLoaderTODO').animate({left: col3}, transSpeedResource);
  1693. $('#main_h_TODO, #searchFormTODO').animate({left: col2}, transSpeedResource);
  1694. $('#mainTODO').animate({left: col2}, transSpeedResource, function(){
  1695. $('#todoList').fullCalendar('allowSelectEvent',false);
  1696. $(window).resize();
  1697. $('#todoList').fullCalendar('allowSelectEvent',true);
  1698. $('#todoList').fullCalendar('selectEvent', null, true);
  1699. });
  1700. });
  1701. $('#eventFormShowerTODO').click(function(){
  1702. showNewEvent('TODO');
  1703. });
  1704. $('#eventFormShower').click(function(){
  1705. showNewEvent('');
  1706. });
  1707. $('#searchInput').bind('keyup change', function(){
  1708. if($(this).val()!='')
  1709. $('#reserButton').css('visibility', 'visible');
  1710. else
  1711. $('#reserButton').css('visibility', 'hidden');
  1712. });
  1713. $('#searchInputTODO').bind('keyup change', function(){
  1714. if($(this).val()!='')
  1715. $('#resetButtonTODO').css('visibility', 'visible');
  1716. else
  1717. $('#resetButtonTODO').css('visibility', 'hidden');
  1718. });
  1719. $('#timezonePicker, #timezonePickerTODO').change(function(){
  1720. var previousTimezone=globalSessionTimeZone;
  1721. globalSessionTimeZone=$(this).val();
  1722. $('#timezonePicker').val($(this).val());
  1723. $('#timezonePickerTODO').val($(this).val());
  1724. applyTimezone(previousTimezone);
  1725. });
  1726. /*************************** BAD HACKS SECTION ***************************/
  1727. if($.browser.msie || $.browser.mozilla)
  1728. {
  1729. var newSVG=$(SVG_select_b).attr('data-type', 'select_icon').css({'pointer-events': 'none', 'z-index': '1', 'display': 'inline', 'margin-left': '-19px', 'vertical-align': 'top', 'background-color': '#ffffff'}); // background-color = stupid IE9 bug
  1730. $('#timezoneWrapper, #timezoneWrapperTODO').find('select').after($($('<div>').append($(newSVG).clone()).html()));
  1731. }
  1732. // INFO LABEL ALIGN WITH UNDELYING SELECT FIX
  1733. if($.browser.webkit && !!$.browser.safari)
  1734. $('.infoSpan[data-type="txt_interval"]').css('padding-left', '3px');
  1735. /*************************** END OF BAD HACKS SECTION ***************************/
  1736. globalCalWidth = $('#main').width();
  1737. origResourceCalDAVListTemplate = $('#ResourceCalDAVListTemplate').clone().wrap('<div>').parent().html();
  1738. origResourceCalDAVTODOListTemplate = $('#ResourceCalDAVTODOListTemplate').clone().wrap('<div>').parent().html();
  1739. origVcalendarTemplate = $('#CAEvent .saveLoader').clone().wrap('<div>').parent().html() + $('#repeatConfirmBox').clone().wrap('<div>').parent().html() + $('#event_details_template').clone().wrap('<div>').parent().html();
  1740. origVtodoTemplate = $('#repeatConfirmBoxTODO').clone().wrap('<div>').parent().html() + $('#todo_details_template').clone().wrap('<div>').parent().html();
  1741. origVtodoLoaderTemplate=$('#todoLoader .saveLoader').clone().wrap('<div>').parent().html();
  1742. populateTimezoneKeys();
  1743. }
  1744. function setCalendarNumber(initSearch)
  1745. {
  1746. /*if($('.resourceCalDAV_header:visible').length>1 || (!$('.resourceCalDAV_header:visible').length && $('.resourceCalDAV_item:visible').length>1))
  1747. $('.addRemoveAllCalDAV').show();
  1748. if($('.resourceCalDAVTODO_header:visible').length>1 || (!$('.resourceCalDAVTODO_header:visible').length && $('.resourceCalDAVTODO_item:visible').length>1))
  1749. $('.addRemoveAllCalDAVTODO').show();*/
  1750. if(initSearch)
  1751. initSearchEngine();
  1752. globalCalendarNumber=0;
  1753. globalOnlyCalendarNumber=0;
  1754. globalTodoCalendarNumber=0;
  1755. for(var i=0; i<globalResourceCalDAVList.collections.length;i++)
  1756. if(globalResourceCalDAVList.collections[i].uid!=undefined && globalResourceCalDAVList.collections[i].makeLoaded)
  1757. {
  1758. globalCalendarNumber++;
  1759. globalOnlyCalendarNumber++;
  1760. }
  1761. for(var i=0; i<globalResourceCalDAVList.TodoCollections.length;i++)
  1762. if(globalResourceCalDAVList.TodoCollections[i].uid!=undefined && globalResourceCalDAVList.TodoCollections[i].makeLoaded)
  1763. {
  1764. globalCalendarNumber++;
  1765. globalTodoCalendarNumber++;
  1766. }
  1767. }