From 86194a6f342191f20683a5d151695eacc39c0836 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 15 Aug 2006 20:52:23 +0000 Subject: [PATCH] Monotone-Parent: c62f87f9eaae5a006ca213225187b102d079690f Monotone-Revision: 4d769cbc45f10f9aec213da06d5d57cebdfab8e0 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2006-08-15T20:52:23 Monotone-Branch: ca.inverse.sogo --- UI/Contacts/Images/delete.png | Bin 1424 -> 0 bytes UI/MailerUI/Images/COPYING | 5 - UI/MailerUI/Images/LICENSE-thunderbird.txt | 567 ------ .../Images/tb-ab-delete-flat-24x24.png | Bin 1384 -> 0 bytes .../tb-ab-instantmessage-flat-24x24.png | Bin 1270 -> 0 bytes .../Images/tb-ab-newcard-flat-24x24.png | Bin 1422 -> 0 bytes .../Images/tb-ab-newlist-flat-24x24.png | Bin 910 -> 0 bytes .../Images/tb-ab-properties-flat-24x24.png | Bin 1389 -> 0 bytes UI/MailerUI/Images/tb-ab-write-flat-24x24.png | Bin 1498 -> 0 bytes .../Images/tb-compose-attach-flat-24x24.png | Bin 1668 -> 0 bytes .../Images/tb-compose-contacts-flat-24x24.png | Bin 1582 -> 0 bytes .../Images/tb-compose-copy-flat-24x24.png | Bin 1301 -> 0 bytes .../Images/tb-compose-cut-flat-24x24.png | Bin 1533 -> 0 bytes .../Images/tb-compose-paste-flat-24x24.png | Bin 1435 -> 0 bytes .../Images/tb-compose-quote-flat-24x24.png | Bin 1519 -> 0 bytes .../Images/tb-compose-save-flat-24x24.png | Bin 1463 -> 0 bytes .../Images/tb-compose-security-flat-24x24.png | Bin 1412 -> 0 bytes .../Images/tb-compose-send-flat-24x24.png | Bin 1355 -> 0 bytes .../Images/tb-compose-spell-flat-24x24.png | Bin 960 -> 0 bytes .../Images/tb-mail-addressbook-flat-24x24.png | Bin 1442 -> 0 bytes .../Images/tb-mail-delete-flat-24x24.png | Bin 1424 -> 0 bytes .../Images/tb-mail-file-flat-24x24.png | Bin 1496 -> 0 bytes .../Images/tb-mail-forward-flat-24x24.png | Bin 1334 -> 0 bytes .../Images/tb-mail-getmail-flat-24x24.png | Bin 1505 -> 0 bytes .../Images/tb-mail-junk-flat-24x24.png | Bin 1592 -> 0 bytes .../Images/tb-mail-mark-flat-24x24.png | Bin 1031 -> 0 bytes .../Images/tb-mail-next-flat-24x24.png | Bin 1623 -> 0 bytes .../Images/tb-mail-prev-flat-24x24.png | Bin 1646 -> 0 bytes .../Images/tb-mail-print-flat-24x24.png | Bin 1497 -> 0 bytes .../Images/tb-mail-reply-flat-24x24.png | Bin 1358 -> 0 bytes .../Images/tb-mail-replyall-flat-24x24.png | Bin 1328 -> 0 bytes .../Images/tb-mail-stop-flat-24x24.png | Bin 1580 -> 0 bytes .../Images/tb-mail-write-flat-24x24.png | Bin 1538 -> 0 bytes UI/MailerUI/Images/tbtb_anais.png | Bin 966 -> 0 bytes UI/MailerUI/Images/tbtb_folderadd.png | Bin 2004 -> 0 bytes UI/MailerUI/Images/tbtb_folderdel.png | Bin 2158 -> 0 bytes .../English.lproj/skycalendar.html | 0 .../English.lproj/skycalendar.js | 0 .../French.lproj/skycalendar.html | 0 .../French.lproj/skycalendar.js | 0 UI/WebServerResources/SchedulerUI.js | 17 +- .../account-settings.png | Bin .../apt_icon_private.gif | Bin .../create-account.png | Bin .../day-view.png | Bin .../images => WebServerResources}/delete.png | Bin UI/WebServerResources/downstairs.gif | Bin 0 -> 113 bytes .../images => WebServerResources}/edit.png | Bin .../images => WebServerResources}/first.gif | Bin .../goto-today.png | Bin .../green_corner.gif | Bin UI/{MainUI => WebServerResources}/homepage.js | 0 .../icon_popupcalendar.gif | Bin .../icon_view_chart.gif | Bin .../icon_view_chart_inactive.gif | Bin .../icon_view_columns.gif | Bin .../icon_view_columns_inactive.gif | Bin .../icon_view_list.gif | Bin .../icon_view_list_inactive.gif | Bin .../icon_view_overview.gif | Bin .../icon_view_overview_inactive.gif | Bin .../invisible_space_2.gif | Bin .../images => WebServerResources}/last.gif | Bin .../manage-filters.png | Bin .../manage-imap.png | Bin .../manage-newsgroups.png | Bin .../manage-rss.png | Bin .../month-view.png | Bin .../multiweek-view.png | Bin .../new-card.png | Bin .../new-event.png | Bin .../new-list.png | Bin .../new-task.png | Bin .../images => WebServerResources}/next.gif | Bin .../next_week.gif | Bin .../offline-settings.png | Bin .../previous.gif | Bin .../previous_week.gif | Bin .../properties.png | Bin UI/WebServerResources/prototype.js | 1781 +++++++++++++++++ .../read-messages.png | Bin .../search-messages.png | Bin .../treeview_corner.gif | Bin .../treeview_corner_minus.gif | Bin .../treeview_corner_plus.gif | Bin .../treeview_junction.gif | Bin .../treeview_leaf.gif | Bin .../treeview_leaf_corner.gif | Bin .../treeview_line.gif | Bin .../treeview_minus.gif | Bin .../treeview_plus.gif | Bin .../treeview_space.gif | Bin .../week-view.png | Bin .../write-message.png | Bin .../Images => WebServerResources}/write.png | Bin 95 files changed, 1795 insertions(+), 575 deletions(-) delete mode 100644 UI/Contacts/Images/delete.png delete mode 100644 UI/MailerUI/Images/COPYING delete mode 100644 UI/MailerUI/Images/LICENSE-thunderbird.txt delete mode 100644 UI/MailerUI/Images/tb-ab-delete-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-ab-instantmessage-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-ab-newcard-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-ab-newlist-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-ab-properties-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-ab-write-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-attach-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-contacts-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-copy-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-cut-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-paste-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-quote-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-save-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-security-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-send-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-compose-spell-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-addressbook-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-delete-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-file-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-forward-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-getmail-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-junk-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-mark-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-next-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-prev-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-print-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-reply-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-replyall-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-stop-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tb-mail-write-flat-24x24.png delete mode 100644 UI/MailerUI/Images/tbtb_anais.png delete mode 100644 UI/MailerUI/Images/tbtb_folderadd.png delete mode 100644 UI/MailerUI/Images/tbtb_folderdel.png rename UI/{Scheduler => WebServerResources}/English.lproj/skycalendar.html (100%) rename UI/{Scheduler => WebServerResources}/English.lproj/skycalendar.js (100%) rename UI/{Scheduler => WebServerResources}/French.lproj/skycalendar.html (100%) rename UI/{Scheduler => WebServerResources}/French.lproj/skycalendar.js (100%) rename UI/{MailerUI/Images => WebServerResources}/account-settings.png (100%) rename UI/{Scheduler/images => WebServerResources}/apt_icon_private.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/create-account.png (100%) rename UI/{Scheduler/images => WebServerResources}/day-view.png (100%) rename UI/{Scheduler/images => WebServerResources}/delete.png (100%) create mode 100644 UI/WebServerResources/downstairs.gif rename UI/{Scheduler/images => WebServerResources}/edit.png (100%) rename UI/{Scheduler/images => WebServerResources}/first.gif (100%) rename UI/{Scheduler/images => WebServerResources}/goto-today.png (100%) rename UI/{Scheduler/images => WebServerResources}/green_corner.gif (100%) rename UI/{MainUI => WebServerResources}/homepage.js (100%) rename UI/{Scheduler/images => WebServerResources}/icon_popupcalendar.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_chart.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_chart_inactive.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_columns.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_columns_inactive.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_list.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_list_inactive.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_overview.gif (100%) rename UI/{Scheduler/images => WebServerResources}/icon_view_overview_inactive.gif (100%) rename UI/{Scheduler/images => WebServerResources}/invisible_space_2.gif (100%) rename UI/{Scheduler/images => WebServerResources}/last.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/manage-filters.png (100%) rename UI/{MailerUI/Images => WebServerResources}/manage-imap.png (100%) rename UI/{MailerUI/Images => WebServerResources}/manage-newsgroups.png (100%) rename UI/{MailerUI/Images => WebServerResources}/manage-rss.png (100%) rename UI/{Scheduler/images => WebServerResources}/month-view.png (100%) rename UI/{Scheduler/images => WebServerResources}/multiweek-view.png (100%) rename UI/{Contacts/Images => WebServerResources}/new-card.png (100%) rename UI/{Scheduler/images => WebServerResources}/new-event.png (100%) rename UI/{Contacts/Images => WebServerResources}/new-list.png (100%) rename UI/{Scheduler/images => WebServerResources}/new-task.png (100%) rename UI/{Scheduler/images => WebServerResources}/next.gif (100%) rename UI/{Scheduler/images => WebServerResources}/next_week.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/offline-settings.png (100%) rename UI/{Scheduler/images => WebServerResources}/previous.gif (100%) rename UI/{Scheduler/images => WebServerResources}/previous_week.gif (100%) rename UI/{Contacts/Images => WebServerResources}/properties.png (100%) create mode 100644 UI/WebServerResources/prototype.js rename UI/{MailerUI/Images => WebServerResources}/read-messages.png (100%) rename UI/{MailerUI/Images => WebServerResources}/search-messages.png (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_corner.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_corner_minus.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_corner_plus.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_junction.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_leaf.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_leaf_corner.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_line.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_minus.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_plus.gif (100%) rename UI/{MailerUI/Images => WebServerResources}/treeview_space.gif (100%) rename UI/{Scheduler/images => WebServerResources}/week-view.png (100%) rename UI/{MailerUI/Images => WebServerResources}/write-message.png (100%) rename UI/{Contacts/Images => WebServerResources}/write.png (100%) diff --git a/UI/Contacts/Images/delete.png b/UI/Contacts/Images/delete.png deleted file mode 100644 index 3abba4ceba57c6be47addbf4f091346b62d2b8ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1424 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 diff --git a/UI/MailerUI/Images/tb-ab-newcard-flat-24x24.png b/UI/MailerUI/Images/tb-ab-newcard-flat-24x24.png deleted file mode 100644 index a94ac2c968f84e6696bfeb0c1f88c4e562080851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1422 zcmV;91#$X`P)5FBliHS3FxE1FZ0&8K=0=)%k zp&ggD_j#W4oWH(ki)?PT^OyXRb8=2T-{1M3bABF6#0!r<)MqWfG1>&un7t1^edt9# zLU=b%`umC9&Lcal)ty?I$XM6qtli_BOQ&m71b*lOU;OA>2YE)&s{`Hg&zo-HWq2^XrZ|yN4h?N zl4>zGspf{=O9>aJy3q?9xw5S%-I5v3IQwno}F6=}__#P}7Y5GX0ZI`WM_xDq*!D5)r}=2&z88oKG-UC8+wGJAF!*?`iG* zLSJv|=kDl^NiEwZCuTQ}4vhWw15fb8z*_-u@Y|c~)Xc<{U(V&55J5;R7Q-5gl9DJ0 z391286O){l@p7uZuDz|8LukRqwkF;*xps}=(F#*rf7YJ22N7BzbcnPOM!VSm7U+Ha*1Bx=58-DX?R@R{v#h%?NK>&$ zGMz?*A=49+1j#I~7QVyUrcD@a5IS5C5g2W5Zawb3y{P+pD;ipw5AS*Cn?2cVjx!@; z_-6*VcWpp*>JpP~lHuZ2qD&gAEk+w^lQn$l?%NP1WXAV-@rB_VYergYlpR#o-IoCH zGMOhI`1)6Rve_Jwgu?1IymYL{t}VB5=f|7bcldtp?zxke{3;?dUv;Pj;lkL)6`%cT z8==+&N)sp@yLj^2j)|j{=i+>_|Bg>>?>(?>Yp)kch$4ujM`87Pe*MQI3=aK``r-&X zyE}+XNVwp;Fye+if!6Ts5Mpz!hiS*q0vv;OqeIse)#nZ}7D&DuT{sCn;0t+DgZ^h5r^;1h>t z;m}au-ZglMEkHB4T0BqTxQ^p8N{?`K-$j7+d%H?X);<;9&D;@uP1R|S*eFU}JWPro%& cegD>f16K7_K6cSLP5=M^07*qoM6N<$g5s#YEC2ui diff --git a/UI/MailerUI/Images/tb-ab-newlist-flat-24x24.png b/UI/MailerUI/Images/tb-ab-newlist-flat-24x24.png deleted file mode 100644 index 319696892bda2f029188340ac157ff85e58e4a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmV;919AL`P)>q1@YQt%Jjh$7-f!KEvaq)DnI8Eu26YSX5zwTVSLGw;27&T%m_j~O#F z)zkx*%en8~@0{~}_q^-gpOqOE&6_AHifMILQA`X~rT(qDrnNQ8*3`?)$rtV!r-el( zntv`I0U&@Hh}GtrZ#BO@ntkKc$16G7SfHx60S=}P6K#i2WTF{Z>C8Ow(jw9R5yG(o zX5d8;Z3Z>~7hqaTrc(eF%`%Ud79maX#YNm`o+MS?{a}vNHv@!Wz|o_lbai!A1KzTN zT4vGy1Nh<+!M+0+jxY*&{zRb#EzN$N=GGOcWt@j&t23r#vy5NLx2X8d<> z0~6~^QGN3-*UoWieT7}!cQep)@Lz$eS;q<@70otZT3+2g&aGUYk5uI z`SxW7?+TcF@G)l3F1xSi{S+|KveD`X_w?M$1H(_Sr}w^$76@=I09T!z3xI%M*MH#9 z@BpbL>>J*NcrCOQxk<2^$n80=4xf4wiK$4LSYy;%*hXZ_4hI+Kh^{Q)dk+%#kGB@o zs@Gb*Qjs!cU!mg5XjLay!?jJFtOn7Q1)QctR~IPv6-ZL$vrp$JahM4t7+t4;-T6015k+B8=-6lc%x9?^4>@uaabW8A(_uNc8*S^1jdOPi2ee1^=Q_XjJ z#p2+1E_Q#yU%}6r2I7??4YYhSwSuHt`z9jZrhTf%qgP(sTVM+|@!FU*W-h7n-5X18 zQy;KJ6R%CQsBis0x}5-0O0rvnc#;1#fTl9DTHN4f#q(S72I6hHWhZYnK%CgKm*>|{ k`Dw|kx6?k=(^b diff --git a/UI/MailerUI/Images/tb-ab-properties-flat-24x24.png b/UI/MailerUI/Images/tb-ab-properties-flat-24x24.png deleted file mode 100644 index 72f233c982715edce6fa717a486836b5e720b5b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1389 zcmV-z1(N!SP)E(N0XhGbW<#xGUE>c;gF zSt?O5AzttjG$!~#ghWvj6;V(slBcZg&tJ{ZU z_fJLr)LXGvmT&Bu{9F93qOEsURhYNcRawZ1tbi5}N>S3`8XqA;8}sH*yTeym**x{R zAC|rRz_}fx4IhC?0#8q^3H>RXOm8wpbX#Q5MoOk?f@qjlLF7;lpBMxxYt9Z&pT6h5 zXAZ4J#3-3JOsbl)cj>0Jt5&zY-WYD2^PHs|w>>&w(=>N7O2)2u^bP>(>w>)dpFT3* zB=H=DiTEo;o>=kdSD#LY|>haO`%RwH1TCe6*^axQbUAH93iP0KbsNLAGo4!3{FyN|uNU2FZ<_28HQXzBQA z$Uy+DPo70t>k&OBC*Zk?r-2D+3fI=jgURjRVILGsjk@ZA{e7qd?C&S-3Ql$9v9#`symT!M-Ey*3=_BLpj^$Y zvm3Z&<&AW&UB$6IZ5(*{1uk9KgmM)5RE~WykHW=E=A7!PC)#{YRL)WGQ~XS=-XGH83tflTV%FT*T=>U%c(x)nn8IlM1Hq~(1Ot}og=*`@1$eI6mr9pP zG^+P~lS4E<{3IP8e}-}t%25P^6(~p1bFhcnE3U${OacKPmg}4`E+Eir_h+(>#`tyb zpSkES^cJ9)xAAOMj{e?bgyuJ)#UL28Fnm%oE?~=+OWa)E&5SP5Nr*vs@p2Ayepjx& zYr704vQ#uQ;(8DW_z+K~{_4RQJt+)(afE8EN8PHWm~rd9eBHi_#ExB5pH@Tfk1^`* zS%)%%Xb&vQhqy9nLO`+LWd!gP}Eg+jN(tmh}baI$KYK~zY`t(IGCoJSdkpZWi_*L&XD>vinpxT?IUL zE#R^1F0aFi*WtqJEW_)v;IQc^1PaBm4<`;dz4txc@uMfiRHDS}L>_?Tt#HckCMSe& zS}+Qo8y~O*s@*zXyN<`9W4CHc5Cw|mSniw4eGrsoV*1waKH9Wz=c)9UF*`9u zem?%5@bIis3}{MnP@q^{Z=<%doQiTCQwdDP9YZchzF_e7u^#q*Z!1HSlA;nc2JI9Q zLwLP(3n6q+o!Y_OzLUM9nU7}|4Gguk!WAHQfJ^A?>f+sZF4MB*Vf?Gg>APOSFeTY^ zma*PzSKMx42M|KOqXCpm4xGETVEo65rNWeo;o*Oh&SbbYFv#D}p2Op<;^bd@`F6)6 z42>J4(k6zX2zP}j<_o_Sf@hRcmU7 zEoEE@^)Vfbvwg=-ZbkB}S{uZFzm>tEB8H(Tm;uz+Dm3i%?V z7rSse3N1nimr@))bLLkIw+R5Gv+~#7{mG1!3aKEI$Y>)~Pg2L`!xVT}Dx z)iX0~GM_Lo48`cB%QQAP5dsu?PN~xGK4ab{aQFv-_*6XiW+a+LDu~U@P+hZ%(Xku2 z+#WV>dX&DaGi=_pfv@R#f>jwv-6VZum~Vb(8!nHB+U9jO;oP+CjsgJ6l!rqDiK3KH zU*AYmQ#0$crQ9sBtD_Vwtxe(eceXuo zbln{V08~l6_UYi9`r_r13W`M&q3O)WQW%9S3!^>k+Wn0cxDWz=otxG*bwU@~^LG_E zbYOMw@W_03K5yQ(3zx^vOk|qG&2du0=h@q_9kIa2f*@^4n#On_|^pYA2lQhh!fOH+}U%MzPhAU3(c zr`_Y@_jEL=OVe6AQ$Qif#748^0f z{r42G&X+!lj3u*c*R8V8C-cOo)620~nvJCgbJ=1@nlfaTR48ib{pXK7mj8E#_;2R^ z;>+E~Efx{XWr`sMS1`?xk&yjIj5!p5$TTfO1@ZNsgV z1zDE|T@L%QZVK7m-PqLQFCGy+FEa8qzMwOpNnNb?PlG~@BUC69l~*Vfk~V#_GQ>~3 zHf~cwn(U8M`+W=U=w747oHt^+2PyrbVmlo;p1enHw1u-P%|e z{Ev?;FR@J!_=uG?6{Qo~blNHr4~vW0yep;8XpAqpdKsr_Iwn2!V8fHN{k@&PQ6vYx zexk@H8puoUN&G}3%G6cL$?ZCIt(b=`k9~XJ33FfXW@S;flO~xrWYWZXZ%ul!WA1}< z@Ti#t2R=ZN1ooK0g(CNJK0dz6#=7#UH}&;u;A62%-&b~P|E^k9&JaydahYicD!k$6uGuz`G$F02$mY3S*3V;B z?CfMXI=fbx!*}Ag?=sR3<|6Bgb(U>nrn6H*P(!c;)s64j@-kl`pW{%tvLZiJt)gU;qF?qLJVB z^>obXY^&|yd8oz9R&W2*?X>OHR9_`Xf>@W4HXMHTa?cuup)P2uuc1!d@^$pGE%gjd z=V|K-1rF=o6Ef-FZ~y@0(8;Qaqen{&H5ECChwwx!ToONvB8dyy+CqvXJsZ+f6Z5>` zCuN2>6hY-pY6ahg+YT>?-l#+|w4hm2Dzsb8DKcr|o?*>SEE@6dfa#VGK@Q0?q+jYe zmi@Y;wHhG^&+bRzKVRrrjQ`bJnp z#3mjGzus)A_H*HuQ?nzYF9ORc3>~!r4!ikMn1tHuUCd(!9?!jAp(tRw!#x--KbNEy z2Lzv*6gq3q3lWRT5QN8gJZ{u@TMzf#jx)1fijtxzzxY;%IuN&+Gbz0Jo#eAw?7uZk z%wZcS9W{31bgQ{%Cjh8j1C<}Qd)!umuW&cVvcV)Zq~ka^7Ct+w8R21Nw+)TK4*Nik z$v|&bsj`^=YWK*-grsScr@W+RSqAI7b92kZ)cuzpTrOOggsD`?bkd3P1$@jW*VNrM z(rz>7b)r4%8_t}eo@Q7f003KdegBbULilk2;OrJtirq1I3iB`~N%#vh{6&EY2ypM2 zjGdUvX(^y^dRhtwU{WHqL20& z$b%|XGW{%z!mw2%e%s;MJb+J740{~_f*6J}alk29KvObP_jkhoh`#`4r!GeLZDUyg O0000z8u>&0!P7_z%DOc_G9Z zXTblsn%+1!@Z<9@ev07co8Opg893gxHgPMrwYvOkQ`g=;`qPWE{|Nlr|%Iy-&r@i#7Beb8&8#_4l+Mey!D;jOGKoJow2ynOXl+a*~s zesSz)!=nPs2hD%@?lTc-mEU$Zgum8w;B%hP{$p6(4H!~z{lXi3CLF??o;d|PBq$`4 zchy2ZsA~n9b{)poeb7=|yL&1zHgf9P4;<5%i^aE1X~wbJU-s?lJ<&RFQuwi!P1mR&pI#$)ih? z%Xf;5%@$ZpRVZtcif*D-q9R-_f&6K~ble8ohuaK?*BUX~I+QL6>sqA%Uhx z^T`ylltTc6T~2le9jt65B(KTT!G73H=q3m=UWc{BnDoJuXl#1zJTyPVhk_MV?R{hpA3M=#E*Ow_| z^B7W86-Wq228qXFc8fZklTN`LuzS-#JvPbZ;(rW9j2^l*j+)2!b@Gff?`X7_85vt!Ru#BIt;qf-NL#z{9eRN~t_+iv5Bb%Vw=g7_{vH&U z6=A6o*Z@jJH7YdyKsK2`3HPy)*9dqVxVvg7cbF7Ql3Y>ZcSAfKXLREtiY-VbF^Slr zAxeT+VTR?6IR36dl7IdXuivrzooA1<*#LCih;F4eFccrfvSc!vCB0du&Rs)8y@K2A zAX6}Ck#KA725ns}AOvdJhTH6qTZ4vaGHbcw~2oo|ak)S^-&h(dFGoo39Ut@ID+k6C_rOwgx(UC8S{t z-B+MRbE!>iR+F-3pcw+q0Dqm6y{=k%x`I@6lWb9Pa^JJm*qqz9=ab-ugzVx3iODNG za{Mq(#d_QZP}a4%Oft*PCI`3QdyU3{Z({YfQ_;<8877(mnJt6HfbwZz32H7${Kk0_ zhI3rJEda7h0pN&Y1 z6GMVlDYHB=N^JaHQXgNYG3ckQrHLH@KgsnX3-ft%b+z=$Ho;Gh_B~b?@Q!r$hJ9`A zb(BjvmKN?2k1e7)JFxeB5nun8iG)<PX@{N26{Xm>|YQT%jr;q`-!%8x4pU1fm+D0w6w(1+9uYzdOBKLX>V=D zZnd#6mtsDeE~HY$VKC3ivD;T(2f6)R|Ett`<+G9c8e#d0#VSsRLyp1LX1gUEv{2W* zpZI)|yC1L0cr0_xFpRTm#<=j-%uN2DX7YcMy|4CnHw&BfIjc>aw%hFFKmS$y1Bn#sk(S>f6aWAK07*qoM6N<$f}~ROO#lD@ diff --git a/UI/MailerUI/Images/tb-compose-copy-flat-24x24.png b/UI/MailerUI/Images/tb-compose-copy-flat-24x24.png deleted file mode 100644 index fc1c5f2aa095e233d944f579fb99197afa6bdd84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1301 zcmV+w1?u{VP)!GF)=d{vmxe2X!zR`Gkok^rF`J)Yp*{jzNIytWM*VN8@4S#5HJkrBy4HH zhsN%W+1#e>BZoi!X5xo^pI_=-IYFd<`M0PRfokg9#{{g(IXH8A0^=7ZA?x9*10+ta zn81?qOi&D&&;gG*iG*m^&R*o#cj1{GK1QF&K{~wajZe-FuY^DVz-LEq2cPa8&MPCp z0GQFr0LDu(f_n;KL@;56cAz+z}SLh5y#Jzk=c9RqMng86Y@pNA)(_5cQ4&%tkhm7ZQAA+-v=ALsZAh^nVD;9xLpY_12mrr$fPA^DiJbi5BKiWaP8_0Tt5Xjd+%NANrkeM4F78O(x#`{d+AMn5AVEo*IO z2O7;NB1ADj%xKPORLUVLX_n1}b7i8qjRPk~TJP z$iR^{WXf9ICeWnS$y4J-h{=gcc`j%+;s9g_ZGt2Ii63A2{n4Kag}u>o$L?DP&uysH;-ohMBU=YM(j=ix zOID)RGmdR{w+V3Q5EX#v|IYP#XwB3caa&_r#s~}NGznNj_|}R)uEFlQ3N;Y{kxn9B z5R1l)dR;@uS~@GmFBF8?GI}M_23`~cu_jb29TQY$o2ZnVx?T=%S4;JvQC9&QbJcl} zKZLt?8`0tKFE^`|@J6-L3|LcO3 diff --git a/UI/MailerUI/Images/tb-compose-cut-flat-24x24.png b/UI/MailerUI/Images/tb-compose-cut-flat-24x24.png deleted file mode 100644 index 5b52d3240b976913b09eabf70434b47f4cb8265e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1533 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 VV|1Vp9IF5T002ovPDHLkV1fdJ;Ftga diff --git a/UI/MailerUI/Images/tb-compose-save-flat-24x24.png b/UI/MailerUI/Images/tb-compose-save-flat-24x24.png deleted file mode 100644 index 28d6f178e144114244248338c05dde3ad2bb1d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463 zcmV;o1xWgdP)EBkO#kX2F{rS<6`D+5qoci)D4(b6XmOK#e&)yj8&-Hn|J5<{* zm|wj%Fh6_4@qJ?l`p^+1`(VA?V)40&Up}0B>Y`XRs+6DGc3M7BiZKs zonL+Eo9C|vc-rxPF!Hf`l3uzOk@lAG70Af=t;C*h(+a@aPNfGNF4T7O$i!ZH(jJa@ ztd;uI?QydQcqbs1$=&9rVpwSbLOl?kd9KZ+6<8|AsoFHz!4&NlSOdmD7$^=O%G0Pq zqaw^N*Elxx0^|Pg%=fpA$g?7zwXLnuytxqZ>lYK;b#y-;$;CkwR)fC`Mt30d7a$5d zwYX8^Gh+)J$*!>al0*Qnp89s)wURja^&c*)zdik6YxLN$#FddC!tc*(p7`Sq-ha~p zQmF*W>EflELW9;&_KS@6zRtJqoTW1VPnyN@8_DcYKA9OF6tR>S-uRAZObDjAB@V*f zw+s7*3Y_>^mHu4^$?ZszWsR&|B`d3BWsTw976aF%N$(sc*7ITZ9Qq{5O#Xvz+*3$| z5NG-~Cm-~T)+pWN>I8x?q}TcGc!5gwFYFn}(32Y`mD@!kdk{$v;KZOW9)Pq!0vi4@ z*0gcO12pYwg}^UNdRFUqCJ#<=CP$BCt4)Ps_8GtLE(kAygdG9V4D}g$ z;ywz3G z6egm)RK!Nns~v#R=tdPxi$*D8$A>bV+3VVW6}|c{K^+=_U_w<~sy2p-{TI3kLUd3^ znTUGDuzS#h=F&Ey?!S3&hzgs^)RhD^!{)j?d-%yGqt2=@8WYsPSn5@m{#+9_{A+fO z)rip$wpqO_T)dQM>VU14rjAfCt3E6{p3Ku1)JCTeL)o0ih1;BP{yM5S4e zPZ?2@j#W<||MBVREkN0CEs1eP>orB+t^`yUp;g)v3|pGghGBEV;ukF?pK`6LrVur0 zktx?<@^h#DFstBQ-)OI1i(d5C8>7D8!_Z-&aAA?+O33EA6~Ac9wVIj|VbWTeGOn5Y z+E4#=SP9UON R;^P1S002ovPDHLkV1o4z(Xjvk diff --git a/UI/MailerUI/Images/tb-compose-security-flat-24x24.png b/UI/MailerUI/Images/tb-compose-security-flat-24x24.png deleted file mode 100644 index a6a1fbd9e8d37b047f102e388424b368d06bf793..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1412 zcmV-~1$+95P)%b9aqYwhL349YME zZ1>AfcGmv?zW?{n`qmQspXZ6^pO0E~ZvTdLg?$|zxh=}~J4)qBGBPrL{=+L1Zz*G5 zJb3WH{O$f1cM^ZMMcP}zv=9hYo$Ww7BF~-+%VS&lfKhAMfm1MLwUW zG;?ixBdvxGNZ6XquAo|h@v(7)5Jzqj2Ot%SW43ygY*?kUJtmWK_k3grL8#WIq7)KG zy?mWi=+54{CY^G{P?Ttjs49ime} z>r8Sb<@^m~f*LL9gltUq{a2rU1NiB-Z@oOc3~==4-^rw$*qsQsXHbcJHmV{?NQIU{ zp=(c}a4$hRjUUITFyQLMJmW<}CajW)4B3>BT|HaAQS2Z1%HLl3_H&KBKW0DPMa zrdO>lw00L5yHF<^R1qQ}6DG753gp&yE^SfPXZreSdV8l3!m(}ZI=a@bL`7lt!m;Bo z0ZReen8NBcIkFqJ6OR0a!GT_q#F9-*np@gHW|jb&S~Bc@co)t&NF2F-o{(!_d_Uzih>|6<@6r1n62SGw@dJLR9l%{mZrp?c|~Jc+O5k_>Kf0Eq<`hmZ;(6)eEw01^ANuj*pU)=%LD5nZ2H z&u4b*TyP*fgcqQcN1(hrWMJHlSplH{-+wb>Hj&JoS&ns(2W;`43A!1bRfZtkSZn&)Dj2srVO0Xj>G^& zKnx-V6+s+9I-=&m`SDR)sOZ_W5tLlWN=WcR@Y7tnIEglPw!uCyhx^WrKKjXZ-QZG- zhh6=@J;pb9S;wPKK29jJKpwmf9FA*a!;GAKm!XrrOixXp@LckPWq_6Q?|%KF-dV2J z^pkC)6SUryBTOqi-@{o!y{f6q)hS({W%_cFsbU{jFHLe~bj;Pul`{zUHi`J%GrvB1 z>Q1)`@xo&d{MaEL0agLcIKsutL*g&0000~_1wMsSiplboFS zzWL{$i^V;(?c1@J)x9z44s@pdTe1i}#lp)gJ;h!b>h9GjqH5ez`c7DBe- z$f3?*lXJ91M^$`=V~3*H;V6M{lt844KsbU^RfQ7?<3z&PwgK&dmjmAgFUR?7Hpu~t zYz};1vwY$iM4RCP5uExZF9K2wqk&SGiry#?0VC!9lM~YctAsKvpLiOPI|W)wz|!Ed z$N*;On-LIQj6q2mUTPvE2*ea;hpB*9NHIm3s5?TJ##n%%E}R7;h{y;6^pL=qii`&P zL8uQ}fz}|3jSD*niA$6L0?GwX|5pYK&3G7GgZ4prMY#B-P>hS@z{`X0m$Mq7$WoEP z;F?!RlvjcmCG9s7?CboJ)@!Hf$|M29^yoO2j-A1V35_Ea*#N4@EP;&?l$*gz-Nx&` zjo07DK>sav_I$;+eeJAlXyT=X%NP|2ll5J?`;&BBzr^C-4$xdZ1-27m2lTWTFrk`iLeVHxhj`)Chg8)?_+a%0#Aq_UOV)SE>jE{AAaf_z(=a~9k#lFE zm+#olQ|usL6o_BmdZWhQ$EcN04;55-tp8y*Rdo?IE_?>p&z0d2WY(BwPV^kYSAuP9 z7EfzHYqPlP_RYOOi!CDHxup|Y5ndkr9PK^7^Tnm3Y*?^j7(C;tkVJYAV2 zwN=I4@iRV=1b!jzg>Y+m#}wc# z@aK%?j-Kw8Ira7UN`}GjAJxE?MSH0U)$;S@W9)9-LcUNyDd9#w1<-2UHRr7~R!2j> zJl{0mwvAneYh_qB=QUQ$e2(K?t?W7S1_jSYDWRY=C;B_Z^Hfvdu7acV_>1)9fqZ`6 zl-fF!HpMKI;cV|8oa;^S>8~H-`3j{3r45NpH)-YWXBP(o_wwk|#Nj^eF7D6grpBV9 zG1@{aAzR3C;nw*gxHR)brkh?b)dsAk4RvpVpHMXMSxVg4g;cUpYhwinU`YU_g@Hnj zE4iB_vfYx_?nl7d!OPC#|F*3(5}*Z(B^ah-VSp}#RxI|hgVUA2{{yc6RiQ96=Ij6f N002ovPDHLkV1g`1jt~F< diff --git a/UI/MailerUI/Images/tb-compose-spell-flat-24x24.png b/UI/MailerUI/Images/tb-compose-spell-flat-24x24.png deleted file mode 100644 index 44fadc7ad41f1dd264b3d7d06c8828fe537fcd18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmV;x13&zUP)OAB}Vcl)DKE3%9hgT6 z^Xz#q5ChtcXf>1DqrhC?XrS_MfD5I-d5N9_hJjv_C102^h4~UbAHLfZu>x>p{OsGhplQ1Dk<6fscVj$$0JKcX0Q9bu<`8L3fmyJOV5< znE+k`_D$9};0YVYQQ(ts$a`sMxcuvinM6UHHSCii(Jc0&MGx80Z6j z2ADq*YvC@h%D3c$nao$MsdO9g1$J3(*?Jpdjh^QYIm@G}XLFZFYwHq;Y#wvV1f8+i ztjbCqaL&yhD@}8X)-3(9`&_AeFl`H0NQe!6oXKZBls3DQEp$ zt~J(u^7kO-czyIS5q-5#zjC2`D6?~_Pes9wJsVvmO0y~}1U69~PIWC`_I42CtG88@ zkceX5yri!$b5jH=F5`=mcTufW)!iLWN4EeRt6Mx@M4lhV$Y9o8Y@1BVl1)Aui@t&5 zL%XSkYpJlxLA8VT0tvQ1)77(WS_A+`VvDQMvQFoiRUlFQ6X&kDvHt@Kiuez$=uW1m zO#pB>x}?r|UZ*-2DhW{SUwOQ@W~v02{g0FrTs?Z?A-_;*^%wONLExS zc3(7c+XRiLPW>gqq2OehtL8?}+&013+_PJJ@h8aRYk$+})0h4ig0;!yNndoGi2mq{ ijEd+9C-UOW?EMcs!jZVjb11d|0000%oy<)BCv`g^f7(rBx=Ty4{=t^Dq9F9ahXof`l-37}xU3I~ zDEd&47DV=8k$v!`h)}SKh=R-RQgG4Ohi%gCAMK{yZIif3+>SGCl1^ss+&lN4KR+Lm z44GEZeelBJchBM6@8|sfoO2KSpC9$VPJI1GU+Q;GO(8N3JfW1DQc6vVxEpuq{^1R8 zIGf32-ad2Y%$@%RP=EfxQ)9m8PYY^Vp{50rrFEFvWF2!O|0f%-%jgp%B0$dplLWpk(maXDO9RkKMX;>!b&uteLgO5{DtySe&s)xK13W#3@86 z#L2czAxea_5uy`~Sc|ik=4PD(V*`|~yaphL4B(U?7FBI!L9DeXrKGjduK)Dp zALB@WK2zxDz~l&s;8Xwt*rct3S~)^?RTZF{EH8Y(ty)2@M0<1;MJK!+fYEj~$arj2 z?&EgCls1txMy$hG+X_dk8H<=*R(uBf^XLy2>Aqk7;)M$rW`Z4nHtC#FK4HCqSo=`D zKeT$0_Bm{gp?voC3WUyAg z@xsxgxfb9vKe=?z8oQLs1>C)}@gIa9fbD9s4Y%4LMpMZ7gMP1hI@o=TI%ltRWc`Dc z@&>~r1OGN04<=YQQ{qO0W+S2*#WbS`=N#4;QsV~O09u_x?#bhsW_U*)1`XV%AsCcNa1DmazAhF!g&OB5wk(OTvr6 zg8*mUm7u41eCnIe(YyZ;+1`PzBf&XrtwQ>bw}>l?=(`J~Ys*%QeorZ8MYyW0%=yXH z`DcEM-O+mpV6=THqx|m|k9=Gul|{m(8ItmClJbJsMzsuFMP$x-%vsGFr!HQtedt@o wZ@zx)d2u|8*z0ab(3rWCzj}M+!(Lnd1%th;vly+6E&u=k07*qoM6N<$f@TxG2><{9 diff --git a/UI/MailerUI/Images/tb-mail-delete-flat-24x24.png b/UI/MailerUI/Images/tb-mail-delete-flat-24x24.png deleted file mode 100644 index 66e9f236fd23986dc54c8716c0c6acb76a65bcbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1424 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 qj^n)NdEUE@$=0000+cN diff --git a/UI/MailerUI/Images/tb-mail-mark-flat-24x24.png b/UI/MailerUI/Images/tb-mail-mark-flat-24x24.png deleted file mode 100644 index 1f009b32b2a0c1dae8ecbe5cbfcba35dd58bfaa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 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 V86PIfTBQI0002ovPDHLkV1mC96-NL7 diff --git a/UI/MailerUI/Images/tb-mail-prev-flat-24x24.png b/UI/MailerUI/Images/tb-mail-prev-flat-24x24.png deleted file mode 100644 index d2a9f725bc359599e589ddb9a7c2ad457282f9f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1646 zcmV-!29f!RP)gxtLw(9zjX$BmvzZIWm9@7;amL7sZ> z(bCfL?c!qpa6?0bUt9A@N=kfu-@)@FjsR;w8;dnyEm$kCK&C8BHe2ou4vlVEy=LQ7 z>-p1v{fNM!LoHj1i~YloKfYFGvlSE<7vXt|iExw`PyK|WZ7(CG%fhlx5k?VltkK3` zEof~}N-?*pN(>CUJnl7g{^Vp0?@}ZD1xQ#IYtxG+G;k5GW~_lPTrV#dRf@ zF8}iYuvO)9x%tXTy|T7pjVdYe@jP`Oo+Mc7(B9k1Jvl~MSsCecnrt@9@pFf%$joJ7 zx{ff4?z=?@q>w1(@^D2Z9oKIzUbgD9zmah)w^mora|>;mfk#nH7);UpPY?cihHt>t{duSbb9nbR~u!%(}Nh;+~TT>&AmD{AYY??baTd-mQ9>q*e-Ni{9 z4(>R`K*uP(y}f9ysi>%6{rb<5yRe71N8c!jSZilmrC9jLBY@o`jkQbW%qf}i`G@c* zN{HfwJNXgJG#uP$-(jDW%9}D@n9nB8}FS zevwlcq6gtoln^HgL$?PBClU_sIK^=1B>nyU1(EvtdJdl7OLcWMLI{MANU2DtOR<&; zsSSc8nHBzl75n@886O`<8_lg-x6oRnwI-9vAO!fnkB|zfoI)C7k=oediODH~Fd_>7 zJ3L7=PKn^zKWt&l46{zy&ZL4>3?OF%MN*vcmIz=E-+_>3^G4`yC zZFubco*{jAD&XF9@E`EfvNB%!`%k%(^s{v7(gOVQ<;(0?-Z%rlMxrflDvgs$BZP-G zmiG2bR!7NE+5CKCR~SXdu6GU)1QFBIA#swB%($ej`y6$3bp`m9D_3}G#SaRVCmK>- z39eU)a*DCSrS;-PCdMaUf9=S=4hdi*{o{@s-II650)j{r#|hS209JouJ^6f|D2ljx z^(tRq`9rp?-bu&x_b^uC6_t@HdI%>~f)y!-^Lb93d~-U~y0NfL-+Jrxc>TIBbl)Bx z-8{FdO1O@Tl=nCJm)C5ktM6Y-=BIhO{zp8y>}fi0c44eT$}7b!D#LM0u)Ci$M&E8$VGehxfdFXegDAPHLFA>Q;MSmm6hept18EF9j2xN`UmnP29)xU zP7y+QSm839&+~H2ukGOAP}7Ou?Qfd(WbSG_@RU$0x8%{f^y0cjq*4w_DwI;lnL!fL zMaUG06xvu?FJ9!t$v3Bid*S!qIKJ=D#~%G}?b=r(r1)9NO>M5Nt&s~CK0-EINjhDM zR1QH9Gc-KHjhmgcw_maoy8r+H07*qoM6N<$g4TF50RR91 diff --git a/UI/MailerUI/Images/tb-mail-print-flat-24x24.png b/UI/MailerUI/Images/tb-mail-print-flat-24x24.png deleted file mode 100644 index 5f7d2824da8993286229a4187af80df1e4fc9d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1497 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 oS1`?xk&yjIj8J`K~R) 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 diff --git a/UI/Scheduler/English.lproj/skycalendar.html b/UI/WebServerResources/English.lproj/skycalendar.html similarity index 100% rename from UI/Scheduler/English.lproj/skycalendar.html rename to UI/WebServerResources/English.lproj/skycalendar.html diff --git a/UI/Scheduler/English.lproj/skycalendar.js b/UI/WebServerResources/English.lproj/skycalendar.js similarity index 100% rename from UI/Scheduler/English.lproj/skycalendar.js rename to UI/WebServerResources/English.lproj/skycalendar.js diff --git a/UI/Scheduler/French.lproj/skycalendar.html b/UI/WebServerResources/French.lproj/skycalendar.html similarity index 100% rename from UI/Scheduler/French.lproj/skycalendar.html rename to UI/WebServerResources/French.lproj/skycalendar.html diff --git a/UI/Scheduler/French.lproj/skycalendar.js b/UI/WebServerResources/French.lproj/skycalendar.js similarity index 100% rename from UI/Scheduler/French.lproj/skycalendar.js rename to UI/WebServerResources/French.lproj/skycalendar.js diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index 74771f321..3cf6d7282 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -1,13 +1,24 @@ function newEvent(sender) { - var urlstr; - - urlstr = "new"; + var urlstr = ApplicationBaseURL + "new"; + window.open(urlstr, "SOGo_compose", "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," + "location=0,directories=0,status=0,menubar=0,copyhistory=0"); return false; /* stop following the link */ } +function displayAppointment(sender) { + var aptId = sender.getAttribute("aptId"); + var urlstr = ApplicationBaseURL + aptId + "/view"; + + var win = window.open(urlstr, "SOGo_view_" + aptId, + "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0,copyhistory=0"); + win.focus(); + + return false; /* stop following the link */ +} + function onContactRefresh(node) { var parentNode = node.parentNode; diff --git a/UI/MailerUI/Images/account-settings.png b/UI/WebServerResources/account-settings.png similarity index 100% rename from UI/MailerUI/Images/account-settings.png rename to UI/WebServerResources/account-settings.png diff --git a/UI/Scheduler/images/apt_icon_private.gif b/UI/WebServerResources/apt_icon_private.gif similarity index 100% rename from UI/Scheduler/images/apt_icon_private.gif rename to UI/WebServerResources/apt_icon_private.gif diff --git a/UI/MailerUI/Images/create-account.png b/UI/WebServerResources/create-account.png similarity index 100% rename from UI/MailerUI/Images/create-account.png rename to UI/WebServerResources/create-account.png diff --git a/UI/Scheduler/images/day-view.png b/UI/WebServerResources/day-view.png similarity index 100% rename from UI/Scheduler/images/day-view.png rename to UI/WebServerResources/day-view.png diff --git a/UI/Scheduler/images/delete.png b/UI/WebServerResources/delete.png similarity index 100% rename from UI/Scheduler/images/delete.png rename to UI/WebServerResources/delete.png diff --git a/UI/WebServerResources/downstairs.gif b/UI/WebServerResources/downstairs.gif new file mode 100644 index 0000000000000000000000000000000000000000..898418d6654f375affcfedc17498132cd988781d GIT binary patch literal 113 zcmZ?wbhEHb + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://prototype.conio.net/ + * +/*--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.4.0', + ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', + + emptyFunction: function() {}, + K: function(x) {return x} +} + +var Class = { + create: function() { + return function() { + this.initialize.apply(this, arguments); + } + } +} + +var Abstract = new Object(); + +Object.extend = function(destination, source) { + for (property in source) { + destination[property] = source[property]; + } + return destination; +} + +Object.inspect = function(object) { + try { + if (object == undefined) return 'undefined'; + if (object == null) return 'null'; + return object.inspect ? object.inspect() : object.toString(); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } +} + +Function.prototype.bind = function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } +} + +Function.prototype.bindAsEventListener = function(object) { + var __method = this; + return function(event) { + return __method.call(object, event || window.event); + } +} + +Object.extend(Number.prototype, { + toColorPart: function() { + var digits = this.toString(16); + if (this < 16) return '0' + digits; + return digits; + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + } +}); + +var Try = { + these: function() { + var returnValue; + + for (var i = 0; i < arguments.length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) {} + } + + return returnValue; + } +} + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create(); +PeriodicalExecuter.prototype = { + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.callback(); + } finally { + this.currentlyExecuting = false; + } + } + } +} + +/*--------------------------------------------------------------------------*/ + +function $() { + var elements = new Array(); + + for (var i = 0; i < arguments.length; i++) { + var element = arguments[i]; + if (typeof element == 'string') + element = document.getElementById(element); + + if (arguments.length == 1) + return element; + + elements.push(element); + } + + return elements; +} +Object.extend(String.prototype, { + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(eval); + }, + + escapeHTML: function() { + var div = document.createElement('div'); + var text = document.createTextNode(this); + div.appendChild(text); + return div.innerHTML; + }, + + unescapeHTML: function() { + var div = document.createElement('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? div.childNodes[0].nodeValue : ''; + }, + + toQueryParams: function() { + var pairs = this.match(/^\??(.*)$/)[1].split('&'); + return pairs.inject({}, function(params, pairString) { + var pair = pairString.split('='); + params[pair[0]] = pair[1]; + return params; + }); + }, + + toArray: function() { + return this.split(''); + }, + + camelize: function() { + var oStringList = this.split('-'); + if (oStringList.length == 1) return oStringList[0]; + + var camelizedString = this.indexOf('-') == 0 + ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) + : oStringList[0]; + + for (var i = 1, len = oStringList.length; i < len; i++) { + var s = oStringList[i]; + camelizedString += s.charAt(0).toUpperCase() + s.substring(1); + } + + return camelizedString; + }, + + inspect: function() { + return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'"; + } +}); + +String.prototype.parseQuery = String.prototype.toQueryParams; + +var $break = new Object(); +var $continue = new Object(); + +var Enumerable = { + each: function(iterator) { + var index = 0; + try { + this._each(function(value) { + try { + iterator(value, index++); + } catch (e) { + if (e != $continue) throw e; + } + }); + } catch (e) { + if (e != $break) throw e; + } + }, + + all: function(iterator) { + var result = true; + this.each(function(value, index) { + result = result && !!(iterator || Prototype.K)(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator) { + var result = true; + this.each(function(value, index) { + if (result = !!(iterator || Prototype.K)(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator) { + var results = []; + this.each(function(value, index) { + results.push(iterator(value, index)); + }); + return results; + }, + + detect: function (iterator) { + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator) { + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(pattern, iterator) { + var results = []; + this.each(function(value, index) { + var stringValue = value.toString(); + if (stringValue.match(pattern)) + results.push((iterator || Prototype.K)(value, index)); + }) + return results; + }, + + include: function(object) { + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inject: function(memo, iterator) { + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.collect(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator) { + var result; + this.each(function(value, index) { + value = (iterator || Prototype.K)(value, index); + if (value >= (result || value)) + result = value; + }); + return result; + }, + + min: function(iterator) { + var result; + this.each(function(value, index) { + value = (iterator || Prototype.K)(value, index); + if (value <= (result || value)) + result = value; + }); + return result; + }, + + partition: function(iterator) { + var trues = [], falses = []; + this.each(function(value, index) { + ((iterator || Prototype.K)(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value, index) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator) { + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator) { + return this.collect(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.collect(Prototype.K); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (typeof args.last() == 'function') + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + iterator(value = collections.pluck(index)); + return value; + }); + }, + + inspect: function() { + return '#'; + } +} + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray +}); +var $A = Array.from = function(iterable) { + if (!iterable) return []; + if (iterable.toArray) { + return iterable.toArray(); + } else { + var results = []; + for (var i = 0; i < iterable.length; i++) + results.push(iterable[i]); + return results; + } +} + +Object.extend(Array.prototype, Enumerable); + +Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0; i < this.length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != undefined || value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(value.constructor == Array ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + indexOf: function(object) { + for (var i = 0; i < this.length; i++) + if (this[i] == object) return i; + return -1; + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + shift: function() { + var result = this[0]; + for (var i = 0; i < this.length - 1; i++) + this[i] = this[i + 1]; + this.length--; + return result; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } +}); +var Hash = { + _each: function(iterator) { + for (key in this) { + var value = this[key]; + if (typeof value == 'function') continue; + + var pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + merge: function(hash) { + return $H(hash).inject($H(this), function(mergedHash, pair) { + mergedHash[pair.key] = pair.value; + return mergedHash; + }); + }, + + toQueryString: function() { + return this.map(function(pair) { + return pair.map(encodeURIComponent).join('='); + }).join('&'); + }, + + inspect: function() { + return '#'; + } +} + +function $H(object) { + var hash = Object.extend({}, object || {}); + Object.extend(hash, Enumerable); + Object.extend(hash, Hash); + return hash; +} +ObjectRange = Class.create(); +Object.extend(ObjectRange.prototype, Enumerable); +Object.extend(ObjectRange.prototype, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + do { + iterator(value); + value = value.succ(); + } while (this.include(value)); + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')}, + function() {return new XMLHttpRequest()} + ) || false; + }, + + activeRequestCount: 0 +} + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responderToAdd) { + if (!this.include(responderToAdd)) + this.responders.push(responderToAdd); + }, + + unregister: function(responderToRemove) { + this.responders = this.responders.without(responderToRemove); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (responder[callback] && typeof responder[callback] == 'function') { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) {} + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { + Ajax.activeRequestCount++; + }, + + onComplete: function() { + Ajax.activeRequestCount--; + } +}); + +Ajax.Base = function() {}; +Ajax.Base.prototype = { + setOptions: function(options) { + this.options = { + method: 'post', + asynchronous: true, + parameters: '' + } + Object.extend(this.options, options || {}); + }, + + responseIsSuccess: function() { + return this.transport.status == undefined + || this.transport.status == 0 + || (this.transport.status >= 200 && this.transport.status < 300); + }, + + responseIsFailure: function() { + return !this.responseIsSuccess(); + } +} + +Ajax.Request = Class.create(); +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Request.prototype = Object.extend(new Ajax.Base(), { + initialize: function(url, options) { + this.transport = Ajax.getTransport(); + this.setOptions(options); + this.request(url); + }, + + request: function(url) { + var parameters = this.options.parameters || ''; + if (parameters.length > 0) parameters += '&_='; + + try { + this.url = url; + if (this.options.method == 'get' && parameters.length > 0) + this.url += (this.url.match(/\?/) ? '&' : '?') + parameters; + + Ajax.Responders.dispatch('onCreate', this, this.transport); + + this.transport.open(this.options.method, this.url, + this.options.asynchronous); + + if (this.options.asynchronous) { + this.transport.onreadystatechange = this.onStateChange.bind(this); + setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); + } + + this.setRequestHeaders(); + + var body = this.options.postBody ? this.options.postBody : parameters; + this.transport.send(this.options.method == 'post' ? body : null); + + } catch (e) { + this.dispatchException(e); + } + }, + + setRequestHeaders: function() { + var requestHeaders = + ['X-Requested-With', 'XMLHttpRequest', + 'X-Prototype-Version', Prototype.Version]; + + if (this.options.method == 'post') { + requestHeaders.push('Content-type', + 'application/x-www-form-urlencoded'); + + /* Force "Connection: close" for Mozilla browsers to work around + * a bug where XMLHttpReqeuest sends an incorrect Content-length + * header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType) + requestHeaders.push('Connection', 'close'); + } + + if (this.options.requestHeaders) + requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); + + for (var i = 0; i < requestHeaders.length; i += 2) + this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState != 1) + this.respondToReadyState(this.transport.readyState); + }, + + header: function(name) { + try { + return this.transport.getResponseHeader(name); + } catch (e) {} + }, + + evalJSON: function() { + try { + return eval(this.header('X-JSON')); + } catch (e) {} + }, + + evalResponse: function() { + try { + return eval(this.transport.responseText); + } catch (e) { + this.dispatchException(e); + } + }, + + respondToReadyState: function(readyState) { + var event = Ajax.Request.Events[readyState]; + var transport = this.transport, json = this.evalJSON(); + + if (event == 'Complete') { + try { + (this.options['on' + this.transport.status] + || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(transport, json); + } catch (e) { + this.dispatchException(e); + } + + if ((this.header('Content-type') || '').match(/^text\/javascript/i)) + this.evalResponse(); + } + + try { + (this.options['on' + event] || Prototype.emptyFunction)(transport, json); + Ajax.Responders.dispatch('on' + event, this, transport, json); + } catch (e) { + this.dispatchException(e); + } + + /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ + if (event == 'Complete') + this.transport.onreadystatechange = Prototype.emptyFunction; + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Updater = Class.create(); + +Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { + initialize: function(container, url, options) { + this.containers = { + success: container.success ? $(container.success) : $(container), + failure: container.failure ? $(container.failure) : + (container.success ? null : $(container)) + } + + this.transport = Ajax.getTransport(); + this.setOptions(options); + + var onComplete = this.options.onComplete || Prototype.emptyFunction; + this.options.onComplete = (function(transport, object) { + this.updateContent(); + onComplete(transport, object); + }).bind(this); + + this.request(url); + }, + + updateContent: function() { + var receiver = this.responseIsSuccess() ? + this.containers.success : this.containers.failure; + var response = this.transport.responseText; + + if (!this.options.evalScripts) + response = response.stripScripts(); + + if (receiver) { + if (this.options.insertion) { + new this.options.insertion(receiver, response); + } else { + Element.update(receiver, response); + } + } + + if (this.responseIsSuccess()) { + if (this.onComplete) + setTimeout(this.onComplete.bind(this), 10); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(); +Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { + initialize: function(container, url, options) { + this.setOptions(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = {}; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(request) { + if (this.options.decay) { + this.decay = (request.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = request.responseText; + } + this.timer = setTimeout(this.onTimerEvent.bind(this), + this.decay * this.frequency * 1000); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +document.getElementsByClassName = function(className, parentElement) { + var children = ($(parentElement) || document.body).getElementsByTagName('*'); + return $A(children).inject([], function(elements, child) { + if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) + elements.push(child); + return elements; + }); +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Element) { + var Element = new Object(); +} + +Object.extend(Element, { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function() { + for (var i = 0; i < arguments.length; i++) { + var element = $(arguments[i]); + Element[Element.visible(element) ? 'hide' : 'show'](element); + } + }, + + hide: function() { + for (var i = 0; i < arguments.length; i++) { + var element = $(arguments[i]); + element.style.display = 'none'; + } + }, + + show: function() { + for (var i = 0; i < arguments.length; i++) { + var element = $(arguments[i]); + element.style.display = ''; + } + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + }, + + update: function(element, html) { + $(element).innerHTML = html.stripScripts(); + setTimeout(function() {html.evalScripts()}, 10); + }, + + getHeight: function(element) { + element = $(element); + return element.offsetHeight; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + return Element.classNames(element).include(className); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + return Element.classNames(element).add(className); + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + return Element.classNames(element).remove(className); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + for (var i = 0; i < element.childNodes.length; i++) { + var node = element.childNodes[i]; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + Element.remove(node); + } + }, + + empty: function(element) { + return $(element).innerHTML.match(/^\s*$/); + }, + + scrollTo: function(element) { + element = $(element); + var x = element.x ? element.x : element.offsetLeft, + y = element.y ? element.y : element.offsetTop; + window.scrollTo(x, y); + }, + + getStyle: function(element, style) { + element = $(element); + var value = element.style[style.camelize()]; + if (!value) { + if (document.defaultView && document.defaultView.getComputedStyle) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css.getPropertyValue(style) : null; + } else if (element.currentStyle) { + value = element.currentStyle[style.camelize()]; + } + } + + if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) + if (Element.getStyle(element, 'position') == 'static') value = 'auto'; + + return value == 'auto' ? null : value; + }, + + setStyle: function(element, style) { + element = $(element); + for (name in style) + element.style[name.camelize()] = style[name]; + }, + + getDimensions: function(element) { + element = $(element); + if (Element.getStyle(element, 'display') != 'none') + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = ''; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = 'none'; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return; + element._overflow = element.style.overflow; + if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') + element.style.overflow = 'hidden'; + }, + + undoClipping: function(element) { + element = $(element); + if (element._overflow) return; + element.style.overflow = element._overflow; + element._overflow = undefined; + } +}); + +var Toggle = new Object(); +Toggle.display = Element.toggle; + +/*--------------------------------------------------------------------------*/ + +Abstract.Insertion = function(adjacency) { + this.adjacency = adjacency; +} + +Abstract.Insertion.prototype = { + initialize: function(element, content) { + this.element = $(element); + this.content = content.stripScripts(); + + if (this.adjacency && this.element.insertAdjacentHTML) { + try { + this.element.insertAdjacentHTML(this.adjacency, this.content); + } catch (e) { + if (this.element.tagName.toLowerCase() == 'tbody') { + this.insertContent(this.contentFromAnonymousTable()); + } else { + throw e; + } + } + } else { + this.range = this.element.ownerDocument.createRange(); + if (this.initializeRange) this.initializeRange(); + this.insertContent([this.range.createContextualFragment(this.content)]); + } + + setTimeout(function() {content.evalScripts()}, 10); + }, + + contentFromAnonymousTable: function() { + var div = document.createElement('div'); + div.innerHTML = '' + this.content + '
'; + return $A(div.childNodes[0].childNodes[0].childNodes); + } +} + +var Insertion = new Object(); + +Insertion.Before = Class.create(); +Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { + initializeRange: function() { + this.range.setStartBefore(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.parentNode.insertBefore(fragment, this.element); + }).bind(this)); + } +}); + +Insertion.Top = Class.create(); +Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(true); + }, + + insertContent: function(fragments) { + fragments.reverse(false).each((function(fragment) { + this.element.insertBefore(fragment, this.element.firstChild); + }).bind(this)); + } +}); + +Insertion.Bottom = Class.create(); +Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { + initializeRange: function() { + this.range.selectNodeContents(this.element); + this.range.collapse(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.appendChild(fragment); + }).bind(this)); + } +}); + +Insertion.After = Class.create(); +Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { + initializeRange: function() { + this.range.setStartAfter(this.element); + }, + + insertContent: function(fragments) { + fragments.each((function(fragment) { + this.element.parentNode.insertBefore(fragment, + this.element.nextSibling); + }).bind(this)); + } +}); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set(this.toArray().concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set(this.select(function(className) { + return className != classNameToRemove; + }).join(' ')); + }, + + toString: function() { + return this.toArray().join(' '); + } +} + +Object.extend(Element.ClassNames.prototype, Enumerable); +var Field = { + clear: function() { + for (var i = 0; i < arguments.length; i++) + $(arguments[i]).value = ''; + }, + + focus: function(element) { + $(element).focus(); + }, + + present: function() { + for (var i = 0; i < arguments.length; i++) + if ($(arguments[i]).value == '') return false; + return true; + }, + + select: function(element) { + $(element).select(); + }, + + activate: function(element) { + element = $(element); + element.focus(); + if (element.select) + element.select(); + } +} + +/*--------------------------------------------------------------------------*/ + +var Form = { + serialize: function(form) { + var elements = Form.getElements($(form)); + var queryComponents = new Array(); + + for (var i = 0; i < elements.length; i++) { + var queryComponent = Form.Element.serialize(elements[i]); + if (queryComponent) + queryComponents.push(queryComponent); + } + + return queryComponents.join('&'); + }, + + getElements: function(form) { + form = $(form); + var elements = new Array(); + + for (tagName in Form.Element.Serializers) { + var tagElements = form.getElementsByTagName(tagName); + for (var j = 0; j < tagElements.length; j++) + elements.push(tagElements[j]); + } + return elements; + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) + return inputs; + + var matchingInputs = new Array(); + for (var i = 0; i < inputs.length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || + (name && input.name != name)) + continue; + matchingInputs.push(input); + } + + return matchingInputs; + }, + + disable: function(form) { + var elements = Form.getElements(form); + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + element.blur(); + element.disabled = 'true'; + } + }, + + enable: function(form) { + var elements = Form.getElements(form); + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + element.disabled = ''; + } + }, + + findFirstElement: function(form) { + return Form.getElements(form).find(function(element) { + return element.type != 'hidden' && !element.disabled && + ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + Field.activate(Form.findFirstElement(form)); + }, + + reset: function(form) { + $(form).reset(); + } +} + +Form.Element = { + serialize: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + var parameter = Form.Element.Serializers[method](element); + + if (parameter) { + var key = encodeURIComponent(parameter[0]); + if (key.length == 0) return; + + if (parameter[1].constructor != Array) + parameter[1] = [parameter[1]]; + + return parameter[1].map(function(value) { + return key + '=' + encodeURIComponent(value); + }).join('&'); + } + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + var parameter = Form.Element.Serializers[method](element); + + if (parameter) + return parameter[1]; + } +} + +Form.Element.Serializers = { + input: function(element) { + switch (element.type.toLowerCase()) { + case 'submit': + case 'hidden': + case 'password': + case 'text': + return Form.Element.Serializers.textarea(element); + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element); + } + return false; + }, + + inputSelector: function(element) { + if (element.checked) + return [element.name, element.value]; + }, + + textarea: function(element) { + return [element.name, element.value]; + }, + + select: function(element) { + return Form.Element.Serializers[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + }, + + selectOne: function(element) { + var value = '', opt, index = element.selectedIndex; + if (index >= 0) { + opt = element.options[index]; + value = opt.value; + if (!value && !('value' in opt)) + value = opt.text; + } + return [element.name, value]; + }, + + selectMany: function(element) { + var value = new Array(); + for (var i = 0; i < element.length; i++) { + var opt = element.options[i]; + if (opt.selected) { + var optValue = opt.value; + if (!optValue && !('value' in opt)) + optValue = opt.text; + value.push(optValue); + } + } + return [element.name, value]; + } +} + +/*--------------------------------------------------------------------------*/ + +var $F = Form.Element.getValue; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = function() {} +Abstract.TimedObserver.prototype = { + initialize: function(element, frequency, callback) { + this.frequency = frequency; + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + this.registerCallback(); + }, + + registerCallback: function() { + setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + onTimerEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + } +} + +Form.Element.Observer = Class.create(); +Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(); +Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = function() {} +Abstract.EventObserver.prototype = { + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + var elements = Form.getElements(this.element); + for (var i = 0; i < elements.length; i++) + this.registerCallback(elements[i]); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + case 'password': + case 'text': + case 'textarea': + case 'select-one': + case 'select-multiple': + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +} + +Form.Element.EventObserver = Class.create(); +Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(); +Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) { + var Event = new Object(); +} + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + + element: function(event) { + return event.target || event.srcElement; + }, + + isLeftClick: function(event) { + return (((event.which) && (event.which == 1)) || + ((event.button) && (event.button == 1))); + }, + + pointerX: function(event) { + return event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)); + }, + + pointerY: function(event) { + return event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)); + }, + + stop: function(event) { + if (event.preventDefault) { + event.preventDefault(); + event.stopPropagation(); + } else { + event.returnValue = false; + event.cancelBubble = true; + } + }, + + // find the first node with the given tagName, starting from the + // node the event was triggered on; traverses the DOM upwards + findElement: function(event, tagName) { + var element = Event.element(event); + while (element.parentNode && (!element.tagName || + (element.tagName.toUpperCase() != tagName.toUpperCase()))) + element = element.parentNode; + return element; + }, + + observers: false, + + _observeAndCache: function(element, name, observer, useCapture) { + if (!this.observers) this.observers = []; + if (element.addEventListener) { + this.observers.push([element, name, observer, useCapture]); + element.addEventListener(name, observer, useCapture); + } else if (element.attachEvent) { + this.observers.push([element, name, observer, useCapture]); + element.attachEvent('on' + name, observer); + } + }, + + unloadCache: function() { + if (!Event.observers) return; + for (var i = 0; i < Event.observers.length; i++) { + Event.stopObserving.apply(this, Event.observers[i]); + Event.observers[i][0] = null; + } + Event.observers = false; + }, + + observe: function(element, name, observer, useCapture) { + var element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + (navigator.appVersion.match(/Konqueror|Safari|KHTML/) + || element.attachEvent)) + name = 'keydown'; + + this._observeAndCache(element, name, observer, useCapture); + }, + + stopObserving: function(element, name, observer, useCapture) { + var element = $(element); + useCapture = useCapture || false; + + if (name == 'keypress' && + (navigator.appVersion.match(/Konqueror|Safari|KHTML/) + || element.detachEvent)) + name = 'keydown'; + + if (element.removeEventListener) { + element.removeEventListener(name, observer, useCapture); + } else if (element.detachEvent) { + element.detachEvent('on' + name, observer); + } + } +}); + +/* prevent memory leaks in IE */ +Event.observe(window, 'unload', Event.unloadCache, false); +var Position = { + // set to true if needed, warning: firefox performance problems + // NOT neeeded for page scrolling, only if draggable contained in + // scrollable elements + includeScrollOffsets: false, + + // must be called before calling withinIncludingScrolloffset, every time the + // page is scrolled + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + realOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return [valueL, valueT]; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return [valueL, valueT]; + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + p = Element.getStyle(element, 'position'); + if (p == 'relative' || p == 'absolute') break; + } + } while (element); + return [valueL, valueT]; + }, + + offsetParent: function(element) { + if (element.offsetParent) return element.offsetParent; + if (element == document.body) return element; + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return element; + + return document.body; + }, + + // caches x/y coordinate pair to use with overlap + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = this.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = this.realOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = this.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + // within must be called directly before + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + clone: function(source, target) { + source = $(source); + target = $(target); + target.style.position = 'absolute'; + var offsets = this.cumulativeOffset(source); + target.style.top = offsets[1] + 'px'; + target.style.left = offsets[0] + 'px'; + target.style.width = source.offsetWidth + 'px'; + target.style.height = source.offsetHeight + 'px'; + }, + + page: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent==document.body) + if (Element.getStyle(element,'position')=='absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } while (element = element.parentNode); + + return [valueL, valueT]; + }, + + clone: function(source, target) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || {}) + + // find page position of source + source = $(source); + var p = Position.page(source); + + // find coordinate system to use + target = $(target); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(target,'position') == 'absolute') { + parent = Position.offsetParent(target); + delta = Position.page(parent); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if(options.setWidth) target.style.width = source.offsetWidth + 'px'; + if(options.setHeight) target.style.height = source.offsetHeight + 'px'; + }, + + absolutize: function(element) { + element = $(element); + if (element.style.position == 'absolute') return; + Position.prepare(); + + var offsets = Position.positionedOffset(element); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px';; + element.style.left = left + 'px';; + element.style.width = width + 'px';; + element.style.height = height + 'px';; + }, + + relativize: function(element) { + element = $(element); + if (element.style.position == 'relative') return; + Position.prepare(); + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + } +} + +// Safari returns margins on body which is incorrect if the child is absolutely +// positioned. For performance reasons, redefine Position.cumulativeOffset for +// KHTML/WebKit only. +if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { + Position.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return [valueL, valueT]; + } +} \ No newline at end of file diff --git a/UI/MailerUI/Images/read-messages.png b/UI/WebServerResources/read-messages.png similarity index 100% rename from UI/MailerUI/Images/read-messages.png rename to UI/WebServerResources/read-messages.png diff --git a/UI/MailerUI/Images/search-messages.png b/UI/WebServerResources/search-messages.png similarity index 100% rename from UI/MailerUI/Images/search-messages.png rename to UI/WebServerResources/search-messages.png diff --git a/UI/MailerUI/Images/treeview_corner.gif b/UI/WebServerResources/treeview_corner.gif similarity index 100% rename from UI/MailerUI/Images/treeview_corner.gif rename to UI/WebServerResources/treeview_corner.gif diff --git a/UI/MailerUI/Images/treeview_corner_minus.gif b/UI/WebServerResources/treeview_corner_minus.gif similarity index 100% rename from UI/MailerUI/Images/treeview_corner_minus.gif rename to UI/WebServerResources/treeview_corner_minus.gif diff --git a/UI/MailerUI/Images/treeview_corner_plus.gif b/UI/WebServerResources/treeview_corner_plus.gif similarity index 100% rename from UI/MailerUI/Images/treeview_corner_plus.gif rename to UI/WebServerResources/treeview_corner_plus.gif diff --git a/UI/MailerUI/Images/treeview_junction.gif b/UI/WebServerResources/treeview_junction.gif similarity index 100% rename from UI/MailerUI/Images/treeview_junction.gif rename to UI/WebServerResources/treeview_junction.gif diff --git a/UI/MailerUI/Images/treeview_leaf.gif b/UI/WebServerResources/treeview_leaf.gif similarity index 100% rename from UI/MailerUI/Images/treeview_leaf.gif rename to UI/WebServerResources/treeview_leaf.gif diff --git a/UI/MailerUI/Images/treeview_leaf_corner.gif b/UI/WebServerResources/treeview_leaf_corner.gif similarity index 100% rename from UI/MailerUI/Images/treeview_leaf_corner.gif rename to UI/WebServerResources/treeview_leaf_corner.gif diff --git a/UI/MailerUI/Images/treeview_line.gif b/UI/WebServerResources/treeview_line.gif similarity index 100% rename from UI/MailerUI/Images/treeview_line.gif rename to UI/WebServerResources/treeview_line.gif diff --git a/UI/MailerUI/Images/treeview_minus.gif b/UI/WebServerResources/treeview_minus.gif similarity index 100% rename from UI/MailerUI/Images/treeview_minus.gif rename to UI/WebServerResources/treeview_minus.gif diff --git a/UI/MailerUI/Images/treeview_plus.gif b/UI/WebServerResources/treeview_plus.gif similarity index 100% rename from UI/MailerUI/Images/treeview_plus.gif rename to UI/WebServerResources/treeview_plus.gif diff --git a/UI/MailerUI/Images/treeview_space.gif b/UI/WebServerResources/treeview_space.gif similarity index 100% rename from UI/MailerUI/Images/treeview_space.gif rename to UI/WebServerResources/treeview_space.gif diff --git a/UI/Scheduler/images/week-view.png b/UI/WebServerResources/week-view.png similarity index 100% rename from UI/Scheduler/images/week-view.png rename to UI/WebServerResources/week-view.png diff --git a/UI/MailerUI/Images/write-message.png b/UI/WebServerResources/write-message.png similarity index 100% rename from UI/MailerUI/Images/write-message.png rename to UI/WebServerResources/write-message.png diff --git a/UI/Contacts/Images/write.png b/UI/WebServerResources/write.png similarity index 100% rename from UI/Contacts/Images/write.png rename to UI/WebServerResources/write.png