summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorsten Grote <grote@kolabsys.com>2013-03-19 15:03:55 (GMT)
committerTorsten Grote <grote@kolabsys.com>2013-03-19 15:03:55 (GMT)
commitef9d1ddd26811caa43f42ee94e3a4b36162648a6 (patch)
tree28c93a0d29b0567a14a88eb447a2da4179f1adbd
parentab391c80f21b45a8b7af7a3acf2ea745519ee554 (diff)
downloadkolab.org-www-ef9d1ddd26811caa43f42ee94e3a4b36162648a6.tar.gz
added better editor: ckeditor
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/CHANGELOG.txt445
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/LICENSE.txt339
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/README.txt359
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/TROUBLESHOOTING.txt215
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/UPGRADE.txt30
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor-rtl.css34
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.api.php73
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.config.js101
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.css167
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.info12
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.install597
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.module685
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.styles.js91
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor/COPY_HERE.txt3
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/about.pngbin0 -> 1221 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/anchor.pngbin0 -> 1215 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/backgroundColor.pngbin0 -> 1238 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiLeft.pngbin0 -> 1149 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiRight.pngbin0 -> 1149 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockJustify.pngbin0 -> 1124 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockQuote.pngbin0 -> 1164 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bold.pngbin0 -> 1156 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bulletedList.pngbin0 -> 1131 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/button.pngbin0 -> 1191 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/centerJustify.pngbin0 -> 1128 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkSpelling.pngbin0 -> 1193 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkbox.pngbin0 -> 1171 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/copy.pngbin0 -> 1193 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/createDivContainer.pngbin0 -> 1166 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/cut.pngbin0 -> 1233 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/decreaseIndent.pngbin0 -> 1153 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalbreak.pngbin0 -> 191 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalpagebreak.pngbin0 -> 212 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/find.pngbin0 -> 1199 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/flash.pngbin0 -> 1226 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/font.pngbin0 -> 3663 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/fontSize.pngbin0 -> 3657 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/form.pngbin0 -> 1141 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/format.pngbin0 -> 3815 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/group.pngbin0 -> 190 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/hiddenField.pngbin0 -> 1313 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/horizontalLine.pngbin0 -> 1158 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/icon.pngbin0 -> 4405 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/iframe.pngbin0 -> 409 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/image.pngbin0 -> 1267 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/imageButton.pngbin0 -> 1199 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/increaseIndent.pngbin0 -> 1156 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/index.html1
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/italic.pngbin0 -> 1142 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/leftJustify.pngbin0 -> 1128 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/link.pngbin0 -> 1224 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linkit.pngbin0 -> 608 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktomenu.gifbin0 -> 971 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktonode.gifbin0 -> 979 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/maximize.pngbin0 -> 1184 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/newPage.pngbin0 -> 1142 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/numberedList.pngbin0 -> 1149 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pageBreakPrinting.pngbin0 -> 1185 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/paste.pngbin0 -> 1224 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pastePlainText.pngbin0 -> 1246 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pasteWord.pngbin0 -> 1242 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/preview.pngbin0 -> 1193 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/print.pngbin0 -> 1183 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/radioButton.pngbin0 -> 1164 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/readmoreButton.pngbin0 -> 1145 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/redo.pngbin0 -> 1168 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/removeFormat.pngbin0 -> 1176 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/replace.pngbin0 -> 1182 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/rightJustify.pngbin0 -> 1128 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/save.pngbin0 -> 1197 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectAll.pngbin0 -> 1165 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectionField.pngbin0 -> 912 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/showBlocks.pngbin0 -> 1197 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/smiley.pngbin0 -> 1212 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/source.pngbin0 -> 1171 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/spacer.pngbin0 -> 1233 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/specialCharacter.pngbin0 -> 1175 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/strike.pngbin0 -> 1147 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/styles.pngbin0 -> 3822 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/subscript.pngbin0 -> 1170 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/superscript.pngbin0 -> 1172 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/table.pngbin0 -> 1182 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/templates.pngbin0 -> 1165 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textColor.pngbin0 -> 1201 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textField.pngbin0 -> 1197 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textarea.pngbin0 -> 956 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/underline.pngbin0 -> 1143 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/undo.pngbin0 -> 1173 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/unlink.pngbin0 -> 1220 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/delete.pngbin0 -> 715 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/tick.pngbin0 -> 537 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.inc1832
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.js132
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.drush.inc69
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.features.inc118
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.lib.inc1545
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.page.inc227
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.user.inc135
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.utils.js344
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/filemanager.config.php98
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery-ui.min.js414
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.sortable.min.js60
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.widget.min.js15
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/sort.js150
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/dialogs/uicolor.js179
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/icons/uicolor.pngbin0 -> 989 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/_translationstatus.txt27
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/bg.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cs.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cy.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/da.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/de.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/el.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/en.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/eo.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/et.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fa.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fi.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fr.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/he.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/hr.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/it.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/mk.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nb.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nl.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/no.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/pl.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/tr.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/ug.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/uk.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/vi.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/zh-cn.js11
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/plugin.js28
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/samples/uicolor.html103
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_bg.pngbin0 -> 1120 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_thumb.pngbin0 -> 195 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_mask.pngbin0 -> 12174 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_thumb.pngbin0 -> 192 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/yui.css15
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/yui.js5914
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/counter/plugin.js62
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/drupalbreaks/images/drupalbreak.pngbin0 -> 191 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/drupalbreaks/images/drupalpagebreak.pngbin0 -> 212 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/drupalbreaks/images/pagebreak.gifbin0 -> 54 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/drupalbreaks/plugin.js175
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/imce/images/icon.pngbin0 -> 523 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/imce/plugin.js67
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/media/images/icon.gifbin0 -> 126 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/media/library.js349
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/media/plugin.js58
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/mediaembed/dialogs/mediaembed.js54
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/mediaembed/images/icon.pngbin0 -> 560 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/mediaembed/images/placeholder.gifbin0 -> 2711 bytes
-rw-r--r--kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/plugins/mediaembed/plugin.js110
154 files changed, 15707 insertions, 0 deletions
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/CHANGELOG.txt b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/CHANGELOG.txt
new file mode 100644
index 0000000..0e72a24
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/CHANGELOG.txt
@@ -0,0 +1,445 @@
+2012-12-22
+New stable release 7.x-1.12
+
+Bug fixes:
+[#1871918] by matulis: Bug in checking if a file "contents.css" exists
+[#1870270] by dczepierga: Disable plugins which not exists and are stored in ckeditor profiles
+[#1864760] by dczepierga: Wrong path to plugins stored in database
+[#1868416] by dczepierga: Move skin selection option to CKEditor Global Profile
+[#1866654] by dczepierga: Remove "Skin" and "Toolbar state on startup" options from user profile
+[#1865086] by dczepierga: Set default theme if selected not exists
+
+2012-12-12
+New stable release 7.x-1.11
+
+New features:
+[#1858840] by dczepierga: Add option to enable/disable aggregate ckeditor.js script
+[#1847662] by dczepierga: Add support for CKEditor v4
+[#1577518] by dczepierga: Remove unused/unsupported hook_user from code
+[#1559700] by dczepierga: Disable HTML Entities conversion by default
+[#1692666] by dczepierga: Unset Ckeditor-Plugin upon module disabling/uninstalling
+
+Bug fixes:
+[#1760506] by ceng: CKEditor features are not reverted or applied from the command line
+[#1857910] by dczepierga: Using extraPlugins config option in Custom JavaScript (Advanced options) not working
+[#1850626] by dczepierga: Wrong path to external plugins loaded by hook
+[#1844390] by dczepierga: Undefined index: loadPlugins in ckeditor_modules_enabled()
+[#1790082] by dczepierga: Order of filters calling in ckeditor filter XSS function
+[#1728318] by dczepierga: Text format filters are not properly given $format; cannot look up their per-format settings
+[#1698600] by azovsky: Undefined index: format in ckeditor_pre_render_text_format()
+[#1651130] by lmeurs: Wrong variable substitution using t()
+[#1637416] by michal_cksource: Fix description to "Custom JavaScript configuration" option
+[#1595606] by kmcnamee: Wrong instructions for configuring CKFinder
+[#1350998] by MegaChriz: CKEditor settings appear on all user profile edit pages
+[#1567022] by dczepierga: Overlays of administration toolbar appears in CKEditor maximized mode
+[#1557526] by dczepierga: CKEditor gets inserted multiple times on text format selection
+[#1554840] by dczepierga: Missing argument - WYSIWYG Filter, HTML Purifier & HTMLawed
+
+2012-04-18
+New stable release 7.x-1.9
+
+New features:
+[#1489358] by dczepierga: Add support for the Stylesheet Parser plugin
+[#1483402] by dczepierga: Change security filters policy
+[#1489074] by acbramley: Change CKEditor XSS URL to be passed through url()
+[#1473010] by michal_cksource: Set spellchecker to use the interface language
+
+Bug fixes:
+[#1537824] by dczepierga: External plugins do not work when the ckeditor_basic.js loading method is used
+[#1507852] by dczepierga: 'drush ckeditor-download' fails if SVN is not installed
+[#1432068] by kruser: Fix path to the sites/all/libraries/ckeditor/ckeditor.styles.js file
+[#1504398] by ndeschildre: Importing CKEditor profile features fails, manual revert is needed
+[#1508342] by dczepierga: WSOD on saving content from CKEditor using Ajax when the node edit form is embedded in the display of another node
+[#1491210] by michal_cksource: CKEditor gets disabled/enabled on all AJAX calls
+[#1512196] by dczepierga: Refactor code with titles and descriptions now available for translation
+[#1496164] by michal_cksource: Buttons are too high when using the drag & drop feature in Firefox
+[#1492344] by dczepierga: Portuguese language missing
+
+2012-03-15
+New stable release 7.x-1.8
+
+Bug fixes:
+[#1371660] by dczepierga: CKFinder requirement check needs fixing
+
+2012-03-14
+New stable release 7.x-1.7
+
+New features:
+[#1338044] by dczepierga: Add an option to disable the toolbar wizard
+[#1349330] by dczepierga: Add a configuration option to set the CKFinder library path
+
+Bug fixes:
+[#1345738] by michal_cksource: Included JavaScript files for the toolbar drag & drop wizard should be minified
+[#1361846] by mrsimonelliott: CKEditor does not load on a 'Long Text' CCK field
+[#1371660] by dczepierga: CKFinder requirement check needs fixing
+[#1043230] by KoCo: D7 administration toolbar overlays CKEditor in maximized mode
+[#1357794] by dczepierga: Invalid attribute "disc-type" in ckeditor.css
+[#1324990] by michal_cksource: Problems with access to private files (download)
+[#1343310] by michal_cksource: Change settings for private download
+[#1351470] by dczepierga: CKEditor plugins added with the "hook_ckeditor_plugin" button do not appear in the toolbar
+[#1329980] by jherencia: Problem with CKEditor module update
+[#1347682] by jherencia: D6 to D7 - error in update #7003 when running update.php
+[#1350382] by michal_cksource: Improve regex pattern to find plugins for CKEditor
+[#1349304] by michal_cksource: Change descriptions in CKEditor help page
+[#1343310] by michal_cksource: Change settings for private download
+[#1348196] by michal_cksource: Change of the default path for CKFinder settings
+[#1346818] by michal_cksource: Change of Full toolbar buttons
+[#1345658] by michal_cksource: Enable the Drupal Breaks plugin by default
+
+2011-11-10
+New stable relase 7.x-1.6
+
+Bug fixes:
+[#1337064] by michal_cksource: Fix Fatal error: Call to undefined function db_fetch_object()
+
+2011-11-09
+New stable relase 7.x-1.5
+
+Bug fixes:
+[#1334140] by michal_cksource: CKEditor is cut off in comments form
+[#1331728] by michal_cksource: Remove unnecessary Drupal Page Break button if there is no module to support this feature
+[#1331720] by michal_cksource: Fix broken link to Global Profile in CKEditor configuration main page
+[#1331716] by michal_cksource: Fix missing version number in report status
+[#1324554] by dczepierga: Fix adding custom plugin - change in ckeditor.api.php
+[#1283918] by michal_cksource: Fix UTF-8 issues
+[#1327540] by michal_cksource: Fix hook_file_download allows downloading of private files created by another module
+[#1325412] by michal_cksource: Fix problem with list-style-type in ckeditor.css
+
+
+2011-10-26
+New stable release 7.x-1.4
+
+-- 2011-10-24
+- [#1319658] by michal_cksource: Correct language list in the CKEditor profile configuration
+
+-- 2011-10-20
+- [#1259510] by michal_cksource: Fix for setting a private files folder breaks CKEditor file uploads
+
+-- 2011-10-17
+- [#1310280] by dczepierga: Improve icons detection from CKEditor plugins (part 2)
+- [#1298972] by michal_cksource: Correct messages and add language fixes
+- [#1311928] by dczepierga: Add jquery_ui support to the Drag & Drop toolbar configuration
+
+-- 2011-10-14
+- [#1310280] by dczepierga: Improve icons detection from CKEditor plugins
+- [#1295176] by dczepierga: Fix Notice: Undefined index: default in ckeditor_admin_profile_form() - when editing CKEditor profile
+- [#1310198] by duozersk: Add plugin to count symbols and words inside CKEditor
+
+-- 2011-10-04
+- [#1298972] by michal_cksource: Correct messages and add language fixes
+
+-- 2011-09-26
+- [#1154264] by dczepierga: Fix for deleting profle - after deleting the Advanced profile, Full HTML profile doesn't load
+
+-- 2011-09-23
+- [#1288084] by dczepierga: Disable Media and IMCE module selection if these modules are not installed
+
+-- 2011-09-20
+- [#1283788] by dczepierga: Fix Notice: Undefined index: buttons in ckeditor_toolbar_buttons_all()
+
+-- 2011-09-19
+- [#1219348] by dczepierga: Fix for WYSIWYG filter - add missing argument
+
+-- 2011-09-15
+- [#1280298] by dczepierga: Add configuration option to disable text format filters in filter/xss request
+- [#1270792] by dczepierga: Further improvements to the Drag & Drop toolbar configuration
+
+-- 2011-09-13
+- [#1173294] by dczepierga: Fix for incorrect file path for uploaded Images
+
+-- 2011-09-12
+- [#1270792] by michal_cksource: Improved Drag & Drop toolbar configuration - fixed css styles
+- [#1270792] by michal_cksource: Improved Drag & Drop toolbar configuration - fixed errors (dragged item was to low in Firefox and validation failed when 'group' button was first in buttons row)
+
+-- 2011-09-06
+- [#1270792] by dczepierga: Add Drag & Drop toolbar configuration
+
+-- 2011-08-31
+- [#1264884] by dczepierga: Fix warning: is_dir(): open_basedir restriction in effect
+
+-----------------------------
+ 2011-08-29
+ Released CKEditor 7.x-1.3
+-----------------------------
+
+-- 2011-08-29
+- [#1260892] by dczepierga: Add regex to work with new CKEditor toolbar format (toolbar groups compatible with WAI-ARIA)
+- [#1258326] by dczepierga: Add configuration option for setting CKEditor plugins directory
+
+-- 2011-08-25
+- [#1257308] by dczepierga: Add loading sample toolbar to profile configuration
+- [#1192622] by dczepierga: Replace static paths to plugins in the database with dynamic paths
+
+-- 2011-08-16
+- [#1250496] by dczepierga: 'CKEDITOR' is not defined - problem with ckeditor.styles.js
+
+-- 2011-08-11
+- [#1231130] by dczepierga: The "Use theme style" setting now always uses the "seven" theme (admin menu theme)
+
+-- 2011-08-10
+- [#1245306] by dczepierga: "Custom JavaScript configuration" field description is wrong
+
+-- 2011-08-08
+- [#1231338] by dczepierga: Features module support for Drupal 7 (exporting profiles)
+
+-- 2011-08-02
+- [#1235142] by madmanmax: README.TXT - Installing CKFinder - wrong permission name
+
+-- 2011-07-12
+- [#1216104] by dczepierga: Bug in custom JavaScript configuration - semicolon problem
+- [#1215032] by dczepierga: Bad location of the configuration file in the description of CKEditor profile
+
+-- 2011-07-04
+- [#1190278] by dczepierga: CKEditor does not work with the Insert module
+
+-- 2011-06-28
+- [#1198068] by michal_cksource: Confusing behavior with IMCE button implementation
+
+-- 2011-06-27
+- [#1201180] by dczepierga: SCAYT spelling language does not match node language
+
+-- 2011-06-22
+- [#1196166] by dczepierga: Bug in custom JavaScript configuration - editor not showing in some cases
+
+-- 2011-06-17
+- [#1032120] by dczepierga: Formatting is lost when editing a node
+
+-- 2011-06-14
+- [#1187808] by RolandK: Not formatting text between code tags
+
+-- 2011-06-13
+- [#1186880] by dczepierga: Handling arrays in the "Custom JavaScript configuration"
+
+-- 2011-06-09
+- [#1183218] by neclimdul: Fix broken teasers for long paragraphs
+
+-- 2011-06-06
+- [#1179880] by dczepierga: Add hook to register a plugin
+- [#1063646] by dczepierga: Fix calling Undefined index: "loadPlugins" in ckeditor_admin_values_to_settings()
+
+-- 2011-06-02
+- [#1176212] by dczepierga: Remove not supported linktomenu and linktonode plugins
+- [#1176208] by dczepierga: Add plugins management in profile settings
+
+-----------------------------
+ 2011-05-30
+ Released CKEditor 7.x-1.2
+-----------------------------
+
+-- 2011-05-27
+- [#1170612] by dczepierga: Add support for autogrow and tableresize plugin
+
+-- 2011-05-26
+- [#1169402] by dczepierga: Fix duplicated path in the error message displayed when CKEditor is not installed correctly
+
+-- 2011-05-23
+- [#1165864] by dczepierga: Improve manual selection of the user interface color
+- [#1093038] by marhak: CKEDITOR is not defined when using ckeditor_basic.js - Editor is not loading
+- [#1039810] by cwc: Fix to predefined styles path errors (fix typo)
+- [#1164270] by TommyChris: Fix to work with ckeditor_link module (http://drupal.org/project/ckeditor_link)
+
+-- 2011-05-16
+- [#1158898] by dczepierga: Add Google PageSpeed and Drupal JS/CSS aggregation support
+
+-- 2011-05-09
+- [#1134252] by dczepierga: Add HTML Entities configurable option in each profile
+
+-- 2011-05-04
+- [#1022986] by dczepierga: Add integration with Media Module
+
+-- 2011-05-02
+- [#1142600] by taite11: Readme file edit - there is no core upload module in Drupal 7
+
+-- 2011-04-28
+- [#1022986] by dczepierga: Add integration with Media Module (http://drupal.org/project/media)
+
+-- 2011-04-11
+- [#1116516] by weboide: Fix to CKEditor and Profile2 - remove call to undefined function ckeditor_user_customize_form_validate() on uid=1
+
+-- 2011-04-07
+- [#1093028] by marhak: Text written in rich text editor (WYSIWYG) mode disappears when switching to plain text editor mode
+- [#1102824] by dczepierga: CKEditor loses all text when uploading an image or file via field API
+
+-- 2011-03-31
+- [#1093038] by marhak: CKEDITOR is not defined when using ckeditor_basic.js - Editor is not loading
+
+-- 2011-03-30
+- [#1109366] by dczepierga: #1052604 Fix remove call to undefined function ckeditor_user_customize_form_validate
+
+-- 2011-03-29
+- [#1107882] by dczepierga: Add a warning message when the wysiwyg module is enabled in Drupal 7
+
+-- 2011-03-28
+- [#1107882] by dczepierga: Add a warning message when the wysiwyg module is enabled in Drupal 7
+
+-- 2011-03-23
+- [#1039810] by cwc: Fix to predefined styles path errors
+
+-- 2011-03-17
+- [#1095954] by dczepierga: Fix to prevent calling "Toggle rich text link" multiple times
+
+-----------------------------
+ 2011-03-10
+ Released CKEditor 7.x-1.1
+-----------------------------
+
+-- 2011-02-22
+- [#960576] by dczepierga: Add loading ckeditor.css from theme.
+- [#1069012] by dczepierga: CKEditor version could not be determined
+
+-- 2011-02-21
+- [#1068186] by dczepierga: Added support for CKEditor SWF (http://drupal.org/project/ckeditor_swf) and CKEditor Link (http://drupal.org/project/ckeditor_link) modules
+
+-- 2011-02-17
+- [#1064422] by dczepierga: All changes to the text are lost when input format is changed
+
+-- 2011-02-14
+- [#1053222] by dczepierga: Two editors appeared when JavaScript Aggregation was enabled
+- [#1037390] by dczepierga: Cannot use CKEditor module to create header/footer in Views
+- [#1052604] by dczepierga: Call to undefined function ckeditor_user_customize_form_validate
+
+-- 2011-02-11
+- [#1056068] by dczepierga: Fix Warning: file_get_contents(/drupal7/sites/all/libraries/ckeditor/ckeditor.js)
+
+-- 2011-02-08
+- [#1054414] by dczepierga: Added support for elFinder (http://drupal.org/project/elfinder) file manager
+- [#1054606] by dczepierga: No detach method in Drupal.behaviors.ckeditor
+
+-- 2011-02-07
+- [#1037390] by dczepierga: Cannot use CKEditor module to create header/footer in Views
+- [#1053358] by dczepierga: Removed option to "Use CKEditor in a popup window" in "My account" settings
+
+-- 2011-02-04
+- [#1050034] by dczepierga: Disabled editor gets enabled again after ajax calls
+
+-- 2011-02-03
+- [#1037390] by dczepierga: Cannot use CKEditor module to create header/footer in Views
+
+-- 2011-02-01
+- [#1037390] by dczepierga: Cannot use CKEditor module to create header/footer in Views
+
+-- 2011-01-24
+- [#1035544] by dczepierga: Remove double http:// in ckeditor.drush.inc
+
+-- 2011-01-20
+- [#1006770] by OnkelTem: Fix Notice: Undefined index: filtered_html in ckeditor_profile_load()
+
+-----------------------------
+ 2011-01-13
+ Released CKEditor 7.x-1.0
+-----------------------------
+
+-- 2011-01-13
+- Added Upgrade.txt
+- Fixed filters description (HTML should be allowed there)
+- Link to CKEditor Global Profile was not displayed properly.
+- [#1025472] by dczepierga: Starting slash in editor path result in Warnings
+- [#1022562] by dczepierga: In IE8 break button icon doesn't appear
+- [#1023546] by dczepierga: Useless ajax call when no security filters are checked
+
+-- 2011-01-11
+- [#1022666] by dczepierga: Teaser break doesn't work with filtered html input format.
+- [#1022494] by dczepierga: CKEditor module - Compatibility with Drupal's coding standards
+
+-- 2011-01-10
+- [#1011112] by Oren_Held: Support RTL also when CSS is not in theme mode (self/none)
+- [#1020612] by amateescu: Extra table borders added by the Seven theme
+- [#1003462] by dczepierga: CKfinder path customization won't work
+- [#1020820] by dczepierga: CKEditor does not work after enabling javascript aggregation
+- [#1006230] by amateescu: Editor not loading for Full HTML
+
+-- 2011-01-05
+- [#1006770] by dczepierga: Notice: Undefined index: filtered_html in ckeditor_profile_load()
+
+-- 2010-12-29
+- [#1009816] by dczepierga: Access denied: ckeditor/xss
+- [#1004822] by dczepierga: Switching text format to filtered html deletes all "p" tags
+
+-- 2010-12-28
+- [#1006124] by dczepierga: Registered user gets "Undefined index: popup" message
+- [#1000330] by dczepierga: No Insert File button in IMCE
+
+-- 2010-12-20
+- [#1000838] by dczepierga: The Teaser button is absolutely necessary - important functionality has been deleted
+
+-----------------------------
+ 2010-12-15
+ Released CKEditor 7.x-1.0 RC
+-----------------------------
+
+-- 2010-12-15
+- [#991380] by dczepierga: Language files (D7)
+- Removed a link to delete the global profile
+- [#999292] by dczepierga: Remove filter_html as default option in Full HTML text format (D7)
+- Fixed a typo
+- Updated comments, minor corrections
+
+-- 2010-12-14
+- [#997136] by dczepierga: CKFinder - thumbnails not available
+- [#997124] by dczepierga: Invalid error message when CKFinder is enabled but not configured properly.
+- [#997116] by dczepierga: D7 Custom formatting options not used
+- [#997090] by dczepierga: XSS protection not working as expected
+- [#997098] by dczepierga: Error when CKEditor (the editor) is not present in the ckeditor folder
+
+-- 2010-12-13
+- [#997074] by dczepierga: Corect the default order of Bidi buttons
+
+-- 2010-12-10
+- [#994372] by dczepierga: Update README.TXT (D7)
+
+-- 2010-12-09
+- [#993436] by dczepierga: Disable option of using CKEditor in a popup window (D7)
+- [#993362] by dczepierga: CKEditor not work in popup window (D7)
+- [#993330] by dczepierga: Change editor theme in profile edit form (D7)
+- [#993272] by dczepierga: User Interface color change enabled only for Kama skin
+
+-- 2010-12-07
+- [#991380] by dczepierga: Language files (D7)
+- [#984986] by dczepierga: Code syntax after Coder module validation
+- [#984978] by dczepierga: Security filters not works (D7) - Security mode fix
+- [#984968] by dczepierga: Make sure that the help information is correct (D7)
+
+-- 2010-12-06
+- [#990368] by dczepierga: Cleanup code - modules not ported to Drupal 7
+- [#985006] by dczepierga: Review README.txt (D7)
+
+-- 2010-12-04
+- [#984978] by dczepierga: Security filters not works (D7)
+
+-- 2010-12-03
+- [#984976] by dczepierga: User Interface color not saved in D7
+- [#985002] by dczepierga: Remove DrupalPageBreak button from toolbar
+
+-- 2010-11-30
+- [#984986] by dczepierga: Code syntax after Coder module validation
+- Removed extra information that should be added by the packaging script
+
+-- 2010-11-29
+- [#984202] by dczepierga: Detecting of summary field in form
+- [#966490] by dczepierga: Comment form after ckeditor install.
+- [#966492] by dczepierga: CKEditor in edit summary/teaser mode
+- [#984096] by dczepierga: Compatibility of DrupalBreaks Plugin
+- [#984000] by dczepierga: CKeditor not works in node edit
+
+-- 2010-11-25
+- [#981624] by dczepierga: Compatibility with drupal 7.0-beta3
+- [#966488] by dczepierga: CKEditor should respect input format changes
+
+-- 2010-11-23
+- [#976968] by dczepierga: Toolbar config validation in profile
+
+-- 2010-11-19
+- [#901502] by dczepierga: Multi toolbar configuration, and different settings for each
+- [#975360] by dczepierga: Remove Minimum rows
+- [#975456] by dczepierga: Remove visibility settings in Global profile in D7
+- [#975458] by dczepierga: Selecting UI Color not working
+
+-- 2010-11-09
+- [#966598] by dczepierga: CKFinder compatibility
+
+-- 2010-11-08
+- [#965280] by dczepierga: Profiles after save lose all input formats
+- [#965258] by dczepierga: Compatibility with drupal 7.0-beta2
+
+-- 2010-10-26
+- Created initial dev version of the CKEditor module for Drupal 7.x
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/LICENSE.txt b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/LICENSE.txt
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/LICENSE.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/README.txt b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/README.txt
new file mode 100644
index 0000000..5ab2b7b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/README.txt
@@ -0,0 +1,359 @@
+TABLE OF CONTENTS
+-----------------
+ * Overview
+ * More Information and License
+ * Requirements
+ * Installation Paths
+ * Installation / Configuration
+ * Installation Troubleshooting
+ * Uploading Images and Files
+ * Installing CKFinder
+ * Managing Plugins
+ * Installing Additional Plugins
+ * Integrating a Plugin with the CKEditor Module (for Plugin Developers)
+ * Setting up Security Filters
+ * HTML Filters and Inline Styling
+ * Integrating a Custom Security Filter with the CKEditor Module (for Developers)
+ * Upgrading Instructions
+ * Help & Contribution
+ * Credits
+
+Overview
+--------
+This module allows Drupal to replace textarea fields with CKEditor.
+CKEditor is an online rich text editor that can be embedded inside web pages.
+It is a WYSIWYG (What You See Is What You Get) editor which means that the
+text edited in it looks as similar as possible to the results end users will
+see after the document gets published. It brings to the Web popular editing
+features found in desktop word processors such as Microsoft Word and
+OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+kind of installation on the client computer.
+
+More Information and License
+----------------------------
+CKEditor - The text editor for the Internet
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of the GNU Lesser General Public License:
+ http://www.opensource.org/licenses/lgpl-license.php
+
+For further information visit:
+ http://ckeditor.com/
+
+Requirements
+------------
+ - Drupal 7.x,
+ - PHP 5.2 or greater,
+ - CKEditor 3.4 or greater.
+ You will need to download CKEditor from the official download site: http://ckeditor.com/download.
+ It is recommended to always use the latest CKEditor version available.
+
+Installation Paths
+------------------
+It is recommended to install the CKEditor for Drupal module in the "sites/all/modules" directory.
+
+When adding the files for standalone CKEditor and CKFinder, you can use one of the following directories:
+- "sites/all/modules/ckeditor/"
+- "sites/all/libraries/"
+and create a "ckeditor" or "ckfinder" directory inside.
+
+The CKEditor module will automatically recognize the proper path to the editor and the file browser.
+
+All installation and configuration instructions in this README file assume that you use the first option and place the CKEditor and CKFinder files in the "sites/all/modules/ckeditor/" directory. If you want to use the "sites/all/libraries/" directory, you will need to adjust the paths given in the instructions accordingly.
+
+Installation / Configuration
+----------------------------
+Note: these instructions assume that you install the CKEditor for Drupal module in the
+ "sites/all/modules" directory (recommended).
+
+ 1. Unzip the module files to the "sites/all/modules" directory. It should now
+ contain a "ckeditor" directory.
+ 2. Download standalone CKEditor from http://ckeditor.com/download. Unzip the
+ contents of the "ckeditor" directory from the installation package to the
+ "sites/all/modules/ckeditor/ckeditor" (or "sites/all/libraries/ckeditor") directory.
+ Note: you can skip uploading the "_samples" and "_source" folders.
+ 3. Enable the module in the "Administration panel > Modules > User Interface" section.
+ 4. Grant permissions for using CKEditor in the
+ "Administration panel > People > Permissions" section.
+ Note: In order to enable the file browser, refer to the
+ "Installing CKFinder" section.
+ 5. Adjust CKEditor profiles in the
+ "Administration panel > Configuration > Content Authoring > CKEditor" section.
+ Profiles determine which options are available to users based on the input format system.
+ 6. For the Rich Text Editing to work you also need to configure your filters
+ for the users that may access Rich Text Editing.
+ Either grant those users Full HTML access or use the following tags:
+ <a> <p> <span> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr>
+ <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <em> <b> <u> <i> <strong>
+ <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code>
+ <cite> <embed> <object> <param> <strike> <caption> <tbody>
+ To make copying the list easier, below all tags were placed in one line:
+ <a> <p> <span> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <em> <b> <u> <i> <strong> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike> <caption> <tbody>
+ If you are going to use CKEditor with the Filtered HTML input format,
+ please refer to the "HTML Filters and Inline Styling" section.
+ 7. To have better control over line breaks, you may disable the line break converter
+ for a given text format in the "Administration panel > Configuration > Content authoring > Text formats" section (recommended).
+ 8. Modify the ckeditor.config.js file to adjust it to your needs (optional).
+ Configuration options are described here:
+ http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
+ Developer's documentation for CKEditor:
+ http://docs.cksource.com/CKEditor_3.x/Developers_Guide
+ WARNING: Remember to clear the browser cache after you have modified any of the JavaScript files.
+ If you skip this step, you may notice that the browser is ignoring your changes.
+
+Installation Troubleshooting
+----------------------------
+If CKEditor does not appear on the page, check if all files were extracted correctly.
+
+The "sites/all/modules/ckeditor/ckeditor/" directory should contain the following files:
+ckeditor.js, config.js, contents.css
+and directories: "skins", "themes", "lang", "images".
+
+The correct directory structure is as follows:
+modules <dir>
+ ckeditor <dir>
+ ckeditor.module
+ ckeditor.admin.inc
+ ...
+ ckeditor <dir>
+ _source <dir>
+ images <dir>
+ lang <dir>
+ plugins <dir>
+ skins <dir>
+ themes <dir>
+ COPY_HERE.txt
+ ckeditor.js
+ ...
+
+As noted above, alternatively the "sites/all/libraries/ckeditor" directory can be used.
+The "libraries" directory is the default path when drush is used to download the editor JavaScript code.
+
+If you are still experiencing problems with your CKEditor installation, scroll down to the "Help & Contribution" section.
+
+Uploading Images and Files
+--------------------------
+There are two methods for uploading files:
+- by using a commercial file browser like CKFinder (http://ckfinder.com), an advanced Ajax file manager;
+- by using modules like IMCE.
+
+To select a preferred file browser, adjust CKEditor profiles in the
+"Administration panel > Configuration > Content Authoring > CKEditor" section.
+In the "File browser settings" section you can choose which file browser will be used for each profile.
+Note: in order to choose an upload module other than CKFinder, you should install an appropriate Drupal module first.
+
+Installing CKFinder
+-------------------
+CKFinder is an Ajax-based file manager created by CKEditor developers: http://ckfinder.com/.
+
+ 1. Download CKFinder for PHP: http://ckfinder.com/download
+ 2. Unpack CKFinder to the directory containing the CKEditor module and place it in the
+ "sites/all/modules/ckeditor/ckfinder" (or "sites/all/libraries/ckfinder") folder.
+ The correct directory structure is as follows:
+
+ modules <dir>
+ ckeditor <dir>
+ ckeditor.module
+ ckeditor.admin.inc
+ ...
+ ckeditor <dir>
+ _source <dir>
+ images <dir>
+ ckeditor.js
+ ...
+ ckfinder <dir>
+ core <dir>
+ ckfinder.php
+ config.php
+ ...
+
+ 3. Grant the "CKFinder access" permission in the "Administration panel > People > Permissions" section.
+ Note: if you do not see this permission, it means that CKEditor did not find CKFinder
+ and you have probably uploaded CKFinder into a wrong directory.
+ 4. Open the CKFinder configuration file (ckfinder/config.php) and do the following:
+
+ I) Remove the CheckAuthentication() function:
+ (do not worry, this function is defined in filemanager.config.php, see below)
+
+ function CheckAuthentication() <- remove it
+ { <- remove it
+ //WARNING : DO NOT simply... <- remove it
+ ... <- remove it
+ return false; <- remove it
+ } <- remove it
+
+ II) Add:
+
+ - for CKFinder installed in the "sites/all/modules/ckeditor/ckfinder" directory:
+ require_once '../../../../includes/filemanager.config.php';
+
+ - for CKFinder installed in the "sites/all/libraries/ckfinder" directory:
+ require_once '../../../../../modules/ckeditor/includes/filemanager.config.php';
+
+ straight below the following line:
+
+ $baseDir = resolveUrl($baseUrl);
+
+ 5. Open the Drupal settings file (sites/default/settings.php) and do the following:
+
+ I) Uncomment the $base_url variable and set the base URL of your website (without the trailing slash).
+
+ II) Uncomment the $cookie_domain variable and set the domain name of your website.
+
+ 6. Select CKFinder as a preferred file browser in the
+ "Administration panel > Configuration > Content Authoring > CKEditor" section
+ (for a selected CKEditor profile scroll down to the "File browser settings" section).
+ In the "File browser settings" section you may also change destination folders for files uploaded with CKFinder.
+
+Managing Plugins
+----------------
+If you want to manage CKEditor plugins for a profile, go to the "Administration panel > Configuration > Content Authoring > CKEditor" section. This section lets you choose plugins relevant for each CKEditor profile from a list.
+In order to activate a plugin, go to the "Editor appearance > Plugins" section and select the checkbox next to a required plugin name.
+
+If a plugin contains toolbar buttons, you will need to drag and drop them to an appropriate toolbar position by using the toolbar wizard. If this is the case, the button should be added to the CKEditor toolbar by using the method described below:
+- Enter the "Editor appearance > Toolbar" section.
+- Check whether the plugin button that you want to use is present in the "Used buttons" sections. If not, find it in the "All buttons" section and drag and drop to the toolbar configuration from the "Used buttons" section.
+
+Alternatively, if you turned off the toolbar wizard and prefer to enter the toolbar configuration manually, you will need to add the plugin button by yourself by appending it to your toolbar definition code.
+
+Please note that some plugins require installing additional modules to work correctly.
+
+Installing Additional Plugins
+-----------------------------
+The installation process is based on placing the plugin folder in the "plugins" directory of the CKEditor module (usually "sites/all/modules/ckeditor").
+The plugin folder should contain at least the plugin.js file that is responsible for the plugin logic.
+The plugin description will be displayed in the "Administration panel" if it is added to the plugin.js file by using the following special comment:
+/**
+ * @file Plugin description
+ */
+Hint: The "Administration panel" automatically detects the toolbar buttons available in the plugin and adds them to the toolbar wizard.
+
+A plugin can be enabled by using the same method as described above - see the "Managing Plugins" section.
+
+Integrating a Plugin with the CKEditor Module (for Plugin Developers)
+---------------------------------------------------------------------
+Integrating your application with the CKEditor module by adding a plugin works through a special hook.
+An example of the hook is shown below:
+
+function MODULENAME_ckeditor_plugin() {
+ return array(
+ 'plugin_name' => array(
+ // Plugin name.
+ 'name' => 'plugin_name',
+ // Plugin description - it will be displayed in the plugins management section of the profile settings.
+ 'desc' => t('Plugin description'),
+ // The full path to the CKEditor plugin directory, trailing slash included.
+ 'path' => drupal_get_path('module', 'my_module') . '/plugin_dir/',
+ // Plugin buttons definition (optional).
+ 'buttons' => array(
+ 'button_name' => array('label' => 'Button label', 'icon' => '/path/to/icon/image'),
+ 'button_name' => array('label' => 'Button label', 'icon' => '/path/to/icon/image'),
+ ...
+ )
+ )
+ );
+}
+Please note that MODULENAME in the code above is the name of the module.
+
+After the hook is used the plugin will automatically appear on the plugin list for each CKEditor profile where you will be able to enable it as described in the "Managing Plugins" section.
+
+Setting up Security Filters
+---------------------------
+The CKEditor security system protects you from executing malicious code that is already in your database. In plain textareas database content is harmless because it is not executed, but a WYSIWYG editor interprets HTML like a Web browser and thus the content needs to be filtered before it is loaded.
+
+In order to configure the security filters, go to the "Administration panel > Configuration > Content Authoring > CKEditor" section. Enter the profile configuration and go to the "Security" section.
+
+The "Security" section lists all the security filters that are currently supported by the CKEditor for Drupal module along with their status for each text format.
+
+The CKEditor for Drupal module has built-in support for some popular security filter modules which you will need to download and install by yourself first. Visit the official websites for each module in order to get the files and find installation and configuration instructions.
+
+When a filter module is installed, you will be able to configure its security filters and enable for a given text format. The list of active text formats is displayed in the "Security" section along with the links that will take you to the "Administration panel > Configuration > Content authoring > Text formats" section where you will be able to configure the filters for each of the text formats. The filters will then be run on the content during the filtering process.
+
+The "Security Settings" option in the "Security" section lets you choose whether to always run the security filters on CKEditor content (recommended and default option) or run them only when CKEditor is set to start automatically. If you change this setting to only run the filters when CKEditor starts automatically, you will not be protected when toggling manually between a plain textarea and the WYSIWYG editor.
+
+The following security filter modules are currently supported:
+ - HTML Purifier - http://drupal.org/project/htmlpurifier
+ - htmLawed - http://drupal.org/project/htmLawed
+ - Htmltidy - http://drupal.org/project/htmltidy
+ - WYSIWYG Filter - http://drupal.org/project/wysiwyg_filter
+
+HTML Filters and Inline Styling
+-------------------------------
+In the "Administration panel > Configuration > Content Authoring > Text fromats" section, Filtered HTML is the default filter.
+Due to security reasons enabling Full HTML is only an option for trusted users.
+
+To take full advantage of using CKEditor you can extend the list of allowed tags in the HTML filter that is enabled in the Filtered HTML input format. If you do not do this, you may notice that a page created in CKEditor looks different after saving.
+
+Unfortunately, even if you extend the list of allowed tags, one problem still remains: Filtered HTML not only strips disallowed tags, but also strips inline style definitions. It basically means that you are unable to apply a different font color, size or family, align images etc. using CKEditor out of the box.
+
+You can solve this problem by creating another input format that will work in a similar way as Filtered HTML (will only allow specified tags), but in a much better way - i.e. it will not strip inline styles that CKEditor is using when
+formatting text or images after the page is saved. To create such an input format, you will need an HTML filter. See the list of HTML filter modules that are supported by the CKEditor module in the "Setting up Security Filters" section above.
+
+It is up to you to decide which one to use. Just make sure that you will only allow to use proper inline styles, tags, and attributes.
+
+Integrating a Custom Security Filter with the CKEditor Module (for Developers)
+------------------------------------------------------------------------------
+Integrating your application with the CKEditor module by adding a security filter works through a special hook.
+An example of the hook is shown below:
+
+function MODULENAME_ckeditor_security_filter() {
+ return array(
+ 'security_filter_name' => array(
+ // Security filter title - it would be displayed in the "Security > Security filters" section of profile settings.
+ 'title' => t('Security filter title'),
+ // Security filter description - it would be displayed in the "Security > Security filters" section of profile settings.
+ 'description' => t('Security filter description'),
+ )
+ );
+}
+Please note that MODULENAME in the code above is the name of the module.
+
+After the hook is used the security filter will automatically appear on the filters list for each CKEditor profile where you will be able to enable it as described in the "Setting up Filters" section.
+
+Upgrading Instructions
+----------------------
+This instruction assumes that you are upgrading the CKEditor module [M] and CKEditor (the editor) [E] at the same time.
+Instructions specific for module upgrades are tagged with [M]. Steps that must be taken when upgrading CKEditor (the editor) are marked with [E].
+
+ 1. [M] Download the latest version of the CKEditor module from http://drupal.org/project/ckeditor (it is advised to read the release notes before going further).
+ 2. [E] Download the latest version of CKEditor from http://ckeditor.com/download (it is advised to read the "What's New" page before going further: http://ckeditor.com/whatsnew).
+ 3. [M] Back up your database.
+ 4. [EM] Place the site in the "Off-line" mode to let the database updates run without interruption and to avoid displaying errors to end users of the site.
+ 5. [E] If you are using CKFinder, make sure you will not delete it, and move it to a safe place.
+ 6. [E] If you introduced any changes (e.g. custom toolbar definitions etc.) in the sites/all/modules/ckeditor/ckeditor.config.js file (or sites/all/modules/ckeditor/ckeditor/config.js), write down your changes and add them again after uploading new files.
+ In general, try to avoid making any changes to CKEditor's config.js file and add everything to ckeditor.config.js.
+ 7. Delete old files:
+ [EM]* Simply remove the "modules/ckeditor" directory if upgrading both the editor and the module.
+ [M] If you are upgrading the module only, remember to leave the "modules/ckeditor/ckeditor" directory untouched.
+ [E] When upgrading the editor, remove the contents of the "modules/ckeditor/ckeditor" directory only.
+ WARNING: If you do not remove old files and just rename the "ckeditor" directory instead (e.g. to "ckeditor_old"), Drupal may use the module from the renamed "ckeditor_old" directory.
+ 8. [M] Upload the CKEditor module (extracted files and folders) to the "sites/all/modules" directory.
+ 9. [E] Upload standalone CKEditor (extracted files and folders from the "ckeditor" directory) to the "sites/modules/ckeditor/ckeditor" directory (i.e. where the COPY HERE.txt file exists).
+ 10. [E] Restore the CKFinder files from where you copied them (see step 5).
+ 11. [E] Apply your modifications to default configuration in the ckeditor.config.js file (see step 6).
+ 12. [M] Run update.php.
+ 13. [EM] Put the site back online.
+
+Help & Contribution
+-------------------
+If you are looking for more information, have any trouble with the configuration of the module
+or if you found an issue, please visit the official project page:
+ http://drupal.org/project/ckeditor
+
+Having problems? Take a look at the list of common problems when installing CKEditor:
+ http://docs.cksource.com/CKEditor_for_Drupal/Troubleshooting
+
+Learn how to adjust CKEditor to your theme and configure the spellchecker:
+ http://docs.cksource.com/CKEditor_for_Drupal/Tricks
+
+If you would like to help in the development of the module, we encourage you to join our team.
+Any help will be greatly appreciated!
+
+Credits
+-------
+ - CKEditor for Drupal is currently maintained by the CKEditor team and Jorrit Schippers.
+ http://ckeditor.com/
+
+ - CKEditor - The text editor for the Internet
+ Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ http://cksource.com/
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/TROUBLESHOOTING.txt b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/TROUBLESHOOTING.txt
new file mode 100644
index 0000000..2192eb8
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/TROUBLESHOOTING.txt
@@ -0,0 +1,215 @@
+
+Note: the HTML version of this file (always up-to-date) is available online: http://drupal.ckeditor.com/troubleshooting
+
+CONTENTS OF THIS FILE
+---------------------
+
+ * CKEditor does not work in my theme
+ * Known module incompatibilities
+ * Images are not displayed when submitted
+ * I followed the instructions, but CKEditor does not show up (+ debugging instructions)
+ * Selected toolbar does not show for user 1
+ * The CKEditor component is not installed correctly
+ * CKEditor does not work after upgrading
+ * Text alignment does not work
+ * Line breaks removed when editing content previously authored without using CKEditor
+ * I successfully uploaded an image, but cannot see it in the file browser
+ * Quote symbols are being changed to quote entities
+
+CKEditor does not work in my theme
+----------------------------------
+
+Your theme may be missing the following code:
+
+<?php print $scripts; ?>
+
+Add that line of code to the head section of your theme.
+
+Another possibility is that the following code might be missing in your theme:
+
+<?php print $closure; ?>
+
+The solution is similar as above - you need to add that line to your theme at the end of its code.
+
+Finally, you can also switch to a different theme.
+
+Known module incompatibilities
+------------------------------
+
+At the moment CKEditor will not show up when the following modules are enabled:
+
+ * Theme developer (http://drupal.org/node/318941)
+ * Theme Builder (http://drupal.org/node/271032)
+
+Images are not displayed when submitted
+---------------------------------------
+
+Most probably you need to properly configure the input format. Either set it to "Full HTML" or add the <img> tag to the "Filtered HTML" format.
+The full list of tags that should be allowed is available in the README.txt file.
+Make sure that you have read the "Setting up filters" section in the README.txt file or on this page: http://drupal.ckeditor.com/filters
+
+I followed the instructions, but CKEditor does not show up
+----------------------------------------------------------
+
+First of all make sure that CKEditor is enabled on this specific page.
+Take a look into the source code of your page and search for something similar to:
+ "ckeditor": { "module_path":
+
+If you cannot find such code, it means that CKEditor is disabled on that page/field.
+Make sure that you have the right permissions to use CKEditor and check your CKEditor profile (include/exclude settings, minimum rows value).
+
+If CKEditor is enabled, but it does not show up, try the following steps:
+
+ 1. Switch to the default theme (Garland). If CKEditor appears, read the "CKEditor does not work in xxx theme" instructions.
+ If your theme already contains the "closure" and "scripts" statements, read below.
+ 2. Make sure that you are using a browser that is compatible with CKEditor.
+ 3. On some occasions other installed modules may cause CKEditor not to show up (although if you look at page source, you will see the CKEditor code).
+ Instead of CKEditor you may see a very small textarea.
+ This mostly happens when some other module causes a JavaScript error and CKEditor cannot load because of this.
+ To check this:
+ - Write down the list of currently installed modules.
+ - Disable all additional modules.
+ - If CKEditor shows up, start enabling the modules that you disabled in the previous step and find out which module is incompatible with CKEditor.
+ Use the project's site to report a new bug and provide the following details:
+ * Drupal version,
+ * CKEditor module version,
+ * CKEditor version,
+ * The name and version of the incompatible module.
+ * If additional steps are required to reproduce this issue, like creating a new special content or configuring this additional module in a special way, provide a detailed list of steps to follow.
+ - If the step above did not help, disable all additional modules and switch to the Garland theme. Clear the browser cache.
+ If CKEditor still does not work, it means that it may be corrupted.
+ Upload CKEditor again using an FTP client that warns you when files are truncated or corrupted.
+ - If CKEditor works for the Garland theme with all modules enabled, but it does not work for your theme with all modules disabled, then your theme is a problem.
+ Use the project's site to report a new bug and provide the following details:
+ * Drupal version,
+ * CKEditor module version,
+ * CKEditor version,
+ * The name and version of the incompatible theme.
+ 4. Finally, if nothing helped, to find out where exactly the error occurred, you may use Firefox with the Firebug extension.
+ Use the project's site to create a new support request providing as much information as possible, including the exact JavaScript error message that you got.
+
+Selected toolbar does not show for user 1
+-----------------------------------------
+
+There are two reasons why you are seeing a different toolbar (or do not see CKEditor at all):
+
+ - If "Allow users to customize CKEditor appearance" is enabled, each user
+ may override the profile settings in the "Rich text editor settings" section of the admin/user/N/edit page
+ ("My Account" -> "Edit")
+
+ - A different profile is used for user 1 than you expect.
+ User 1 must be assigned a system role that corresponds to the privileges required.
+ If no role is assigned to User 1, they will have the privileges of an "authenticated user"
+ (usually it is the "Advanced" profile).
+
+The CKEditor component is not installed correctly
+-------------------------------------------------
+
+Please remember that installing the CKEditor module is a two-step process. You need to download and unpack:
+- the CKEditor module that integrates CKEditor with Drupal;
+- CKEditor, the rich text editor.
+
+If your CKEditor does not show, you should check whether all files were extracted correctly.
+The /modules/ckeditor/ckeditor/ directory should contain the following files:
+ckeditor.js, config.js, contents.css as well as directories named "skins", "themes", "lang", "images".
+
+The correct directory structure is as follows:
+modules <dir>
+ ckeditor <dir>
+ ckeditor.module
+ ckeditor.admin.inc
+ ...
+ ckeditor <dir>
+ _source <dir>
+ images <dir>
+ lang <dir>
+ plugins <dir>
+ skins <dir>
+ themes <dir>
+ COPY_HERE.txt
+ ckeditor.js
+ ...
+
+CKEditor does not work after upgrading
+--------------------------------------
+
+This may be caused by the browser cache. Clear your browser cache and restart the browser if clearing the cache did not help.
+If you upgraded the CKEditor module, make sure that all roles with "access ckeditor" permissions are assigned to at least one CKEditor profile.
+
+Text alignment does not work
+----------------------------
+
+In the ckeditor.config.js file (located in the CKEditor module directory), the following classes are defined to provide the text alignment functionality:
+config.justifyClasses = [ 'rteleft', 'rtecenter', 'rteright', 'rtejustify' ];
+
+Unfortunately, some themes may override these styles and text alignment may not work as expected.
+If you are using the Full HTML input format, you may simply comment out this line:
+//config.justifyClasses = [ 'rteleft', 'rtecenter', 'rteright', 'rtejustify' ];
+
+CKEditor will then use inline styles instead: <p style="text-align: right;">sample text</p>.
+The problem is that inline styles may only be used with the Full HTML format.
+Filtered HTML will strip that code, so do not use this solution with this input format.
+
+For Filtered HTML things are a bit more complicated. For example if your theme defines such CSS style:
+
+.content p { text-align: left; }
+
+the text-align property set in the .rteright class will not work.
+To align the <p> tag, you will have to edit the modules/ckeditor/ckeditor.css file and create a style that will be applied to the <p> tag:
+
+.content p.rteleft {
+ text-align: left;
+}
+.content p.rteright {
+ text-align: right;
+}
+.content p.rtecenter {
+ text-align: center;
+}
+.content p.rtejustify {
+ text-align: justify;
+}
+
+Use DOM inspector (in Firefox) to check why the alignment does not work and to correct your CSS styles.
+There is no universal workaround for this situation.
+
+Line breaks removed when editing content previously authored without using CKEditor
+-----------------------------------------------------------------------------------
+
+The problem lies in the way you configured your input filters.
+Before you enabled CKEditor, you probably had the Line break converter enabled.
+
+Now you are trying to edit the same content with the Line break converter disabled, thus the line breaks are removed.
+
+Possible workarounds:
+ * Enable the Line break converter (not recommended).
+ * Create a new input format with the Line break converter enabled. Use it just for old articles (recommended).
+ * Start with CKEditor disabled by default, replace all new line characters manually with a <br> tag, then use toggle to switch to WYSIWYG mode.
+
+ If you are a PHP programmer, you may try the approach proposed by BakerQ in http://drupal.org/node/240633
+
+Quote symbols are being changed to quote entities
+-------------------------------------------------
+
+Some modules like Typogrify or SmartyPants require special handling of HTML entities.
+For example, by default CKEditor will convert a double quote character (") to &quot;.
+To disable processing of HTML entities, add the following line to the modules/ckeditor/ckeditor.config.js file:
+
+config.entities = false;
+
+It is also possible to disable processing of HTML entities for a selected CKEditor profile by adding the following line in "Advanced Options" -> "Custom JavaScript configuration":
+
+entities = false;
+
+CKEditor toolbar does not show up
+---------------------------------
+
+If the CKEditor toolbar does not show up and the styles/themes seem to be corrupted, it is possible that you uploaded the files via FTP in the ASCII mode.
+Make sure you are uploading the files in the binary mode.
+
+CKEditor adds <p>&nbsp;</p>
+---------------------------
+
+Sometimes you may notice that when editing nodes, the spacing between paragraphs is being doubled.
+This may be caused by the HTML Purifier module when the AutoParagraph option is enabled.
+When you disable it, make sure you clear the HTML Purifier cache. \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/UPGRADE.txt b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/UPGRADE.txt
new file mode 100644
index 0000000..d84b2ec
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/UPGRADE.txt
@@ -0,0 +1,30 @@
+## Upgrade vs. Update ##
+
+Before you continue reading you need to understand the difference between "upgrading" and "updating".
+
+"Upgrading" refers to moving from one major release to another.
+E.g. you are moving from Drupal 6 to Drupal 7.
+
+"Updating" typically refers to bringing the editor or CKEditor module up to the latest minor version (e.g 7.x-1.0 to 7.x-1.2).
+Updating instructions are available in the README.txt file.
+
+## Upgrading the CKEditor module from 6.x to 7.x ##
+
+Due to differences between the CKEditor module for Drupal 6 and Drupal 7 there is no way (at least at the moment)
+to upgrade without uninstalling the previous version of the module (and losing the configuration settings stored in the database).
+
+# Upgrading #
+
+1. Backup the "ckeditor_role" and "ckeditor_settings" tables
+ and write down your custom configuration settings stored in the CKEditor profiles.
+2. Disable and uninstall the CKEditor 6.x module.
+3. Make a backup of the "sites/all/modules/ckeditor" folder or at least make sure to make a copy of the "ckeditor.config.js" file.
+4. Delete the contents of the "sites/all/modules/ckeditor" folder.
+5. Follow the README.txt file to install the CKEditor module for Drupal 7.
+6. Adjust CKEditor profiles to your needs.
+7. If you made any changes to "ckeditor.config.js" in Drupal 6, check the default configuration file distributed with the module for Drupal 7 and re-apply the changes.
+
+
+## Migrating from the FCKeditor module ##
+
+Please refer to the "Upgrading the CKEditor module from 6.x to 7.x" section.
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor-rtl.css b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor-rtl.css
new file mode 100644
index 0000000..3974a82
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor-rtl.css
@@ -0,0 +1,34 @@
+/* Indent & Justify classes */
+
+.rteindent1 {
+ margin-right: 40px;
+ margin-left: 0;
+}
+.rteindent2 {
+ margin-right: 80px;
+ margin-left: 0;
+}
+.rteindent3 {
+ margin-right: 120px;
+ margin-left: 0;
+}
+.rteindent4 {
+ margin-right: 160px;
+ margin-left: 0;
+}
+.rteindent1[dir=ltr] {
+ margin-left: 40px;
+ margin-right: 0;
+}
+.rteindent2[dir=ltr] {
+ margin-left: 80px;
+ margin-right: 0;
+}
+.rteindent3[dir=ltr] {
+ margin-left: 120px;
+ margin-right: 0;
+}
+.rteindent4[dir=ltr] {
+ margin-left: 160px;
+ margin-right: 0;
+} \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.api.php b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.api.php
new file mode 100644
index 0000000..447cea0
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.api.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+
+/**
+ * Hook to register the CKEditor plugin - it would appear in the plugins list on the profile setting page.
+ */
+function hook_ckeditor_plugin() {
+ return array(
+ 'plugin_name' => array(
+ // Name of the plugin used to write it.
+ 'name' => 'plugin_name',
+ // Description of the plugin - it would be displayed in the plugins management section of profile settings.
+ 'desc' => t('Plugin description'),
+ // The full path to the CKEditor plugins directory, with the trailing slash.
+ 'path' => drupal_get_path('module', 'my_module') . '/plugin_dir/',
+ 'buttons' => array(
+ 'button_name' => array(
+ 'icon' => 'path to button icon',
+ 'label' => 'Button Label',
+ )
+ )
+ )
+ );
+}
+
+/**
+ * Hook to register the CKEditor security filter - it would appear in the security filters list on the profile setting page.
+ */
+function hook_ckeditor_security_filter() {
+ return array(
+ 'security_filter_name' => array(
+ // Title of the security filter - it would be displayed in the security filters section of profile settings.
+ 'title' => t('Security filter title'),
+ // Description of the security filter - it would be displayed in the security filters section of profile settings.
+ 'description' => t('Security filter description'),
+ )
+ );
+}
+
+?>
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.config.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.config.js
new file mode 100644
index 0000000..ef4c43d
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.config.js
@@ -0,0 +1,101 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/*
+ WARNING: clear browser's cache after you modify this file.
+ If you don't do this, you may notice that browser is ignoring all your changes.
+ */
+CKEDITOR.editorConfig = function(config) {
+ config.indentClasses = [ 'rteindent1', 'rteindent2', 'rteindent3', 'rteindent4' ];
+
+ // [ Left, Center, Right, Justified ]
+ config.justifyClasses = [ 'rteleft', 'rtecenter', 'rteright', 'rtejustify' ];
+
+ // The minimum editor width, in pixels, when resizing it with the resize handle.
+ config.resize_minWidth = 450;
+
+ // Protect PHP code tags (<?...?>) so CKEditor will not break them when
+ // switching from Source to WYSIWYG.
+ // Uncommenting this line doesn't mean the user will not be able to type PHP
+ // code in the source. This kind of prevention must be done in the server
+ // side
+ // (as does Drupal), so just leave this line as is.
+ config.protectedSource.push(/<\?[\s\S]*?\?>/g); // PHP Code
+ config.protectedSource.push(/<code>[\s\S]*?<\/code>/gi); // Code tags
+ config.extraPlugins = '';
+
+ /*
+ * Append here extra CSS rules that should be applied into the editing area.
+ * Example:
+ * config.extraCss = 'body {color:#FF0000;}';
+ */
+ config.extraCss = '';
+ /**
+ * Sample extraCss code for the "marinelli" theme.
+ */
+ if (Drupal.settings.ckeditor.theme == "marinelli") {
+ config.extraCss += "body{background:#FFF;text-align:left;font-size:0.8em;}";
+ config.extraCss += "#primary ol, #primary ul{margin:10px 0 10px 25px;}";
+ }
+ if (Drupal.settings.ckeditor.theme == "newsflash") {
+ config.extraCss = "body{min-width:400px}";
+ }
+
+ /**
+ * CKEditor's editing area body ID & class.
+ * See http://drupal.ckeditor.com/tricks
+ * This setting can be used if CKEditor does not work well with your theme by default.
+ */
+ config.bodyClass = '';
+ config.bodyId = '';
+ /**
+ * Sample bodyClass and BodyId for the "marinelli" theme.
+ */
+ if (Drupal.settings.ckeditor.theme == "marinelli") {
+ config.bodyClass = 'singlepage';
+ config.bodyId = 'primary';
+ }
+}
+
+/*
+ * Sample toolbars
+ */
+
+//Toolbar definition for basic buttons
+Drupal.settings.cke_toolbar_DrupalBasic = [ [ 'Format', 'Bold', 'Italic', '-', 'NumberedList','BulletedList', '-', 'Link', 'Unlink', 'Image' ] ];
+
+//Toolbar definition for Advanced buttons
+Drupal.settings.cke_toolbar_DrupalAdvanced = [
+ ['Source'],
+ ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker', 'Scayt'],
+ ['Undo','Redo','Find','Replace','-','SelectAll','RemoveFormat'],
+ ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar'],
+ ['Maximize', 'ShowBlocks'],
+ '/',
+ ['Format'],
+ ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
+ ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
+ ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiRtl','BidiLtr'],
+ ['Link','Unlink','Anchor','Linkit','LinkToNode','LinkToMenu'],
+ ['DrupalBreak', 'DrupalPageBreak']
+];
+
+// Toolbar definiton for all buttons
+Drupal.settings.cke_toolbar_DrupalFull = [
+ ['Source'],
+ ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker', 'Scayt'],
+ ['Undo','Redo','Find','Replace','-','SelectAll','RemoveFormat'],
+ ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','Iframe'],
+ '/',
+ ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
+ ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
+ ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiRtl','BidiLtr'],
+ ['Link','Unlink','Anchor','Linkit','LinkToNode', 'LinkToMenu'],
+ '/',
+ ['Format','Font','FontSize'],
+ ['TextColor','BGColor'],
+ ['Maximize', 'ShowBlocks'],
+ ['DrupalBreak', 'DrupalPageBreak']
+]; \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.css b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.css
new file mode 100644
index 0000000..d2b8d55
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.css
@@ -0,0 +1,167 @@
+/* Indent & Justify classes */
+
+.rteindent1 {
+ margin-left: 40px;
+}
+.rteindent2 {
+ margin-left: 80px;
+}
+.rteindent3 {
+ margin-left: 120px;
+}
+.rteindent4 {
+ margin-left: 160px;
+}
+.rteleft {
+ text-align: left;
+}
+.rteright {
+ text-align: right;
+}
+.rtecenter {
+ text-align: center;
+}
+.rtejustify {
+ text-align: justify;
+}
+.ibimage_left {
+ float: left;
+}
+.ibimage_right {
+ float: right;
+}
+
+/* CKEditor padding in IE */
+table.cke_editor fieldset {
+ padding: 0 !important;
+}
+/* hack with ie and garland editing area size fix - [#733512] */
+.cke_editor{
+ display: table !important;
+}
+.cke_editor,#ie#bug {
+ display: inline-table !important;
+}
+/* Fix table border for Drupal's Seven theme - [#1020612] */
+.cke_dialog tr td:last-child {
+ border-right: 0;
+}
+
+/*toolbar Drag & Drop*/
+form#ckeditor-admin-profile-form textarea#edit-toolbar {
+ display: none;
+}
+form#ckeditor-admin-profile-form #edit-toolbar + .grippie {
+ display: none;
+}
+div.sortableList {
+ cursor: n-resize;
+}
+div.widthMarker {
+ height: 20px;
+ border-top: 1px dashed #CCC;
+ margin: 10px 0px 0px 1px;
+ padding-left: 1px;
+ text-align: center;
+}
+div.sortableList.group {
+ margin: 20px 0px 0px 0px;
+}
+div.sortableList div.sortableListDiv {
+ height: 30px;
+ margin-bottom: 3px;
+ width: 900px;
+}
+div.sortableList div.sortableListDiv span.sortableListSpan {
+ background-color: #F0F0EE;
+ height: 30px;
+ border-right: 1px dashed #CCC;
+ display: block;
+}
+div.sortableList div.sortableListDiv span.sortableListSpan ul {
+ width: 900px;
+ white-space: nowrap;
+ border: 1px solid #CCC;
+ list-style: none;
+ margin:0px;
+ padding: 0px 0px 0px 1px;
+ height: 30px;
+}
+div.sortableList div.sortableListDiv span.sortableListSpan ul li {
+ list-style: none;
+ cursor: move;
+ height: 18px;
+ min-width: 18px;
+ padding: 2px;
+}
+div.sortableList div.sortableListDiv span.sortableListSpan ul li.group {
+ min-width: 5px;
+ padding-left: 2px;
+}
+div.sortableList div.sortableListDiv span.sortableListSpan ul li img {
+ border: 0;
+ padding: 0;
+ margin: 0
+}
+li.sortableItem {
+ position: relative;
+ float: left;
+ margin: 3px 1px 1px 0px;
+ border: 1px solid #CCC;
+ background-color: #F0F0EE;
+ z-index: 99;
+}
+
+#security-filters .filter-text-formats {
+ float: left;
+ clear: both;
+ width: 15%;
+ font-size: 11px;
+ font-weight: bold;
+ padding: 10px 0px;
+}
+
+#security-filters .filter-text-formats .filter-text-format-status {
+ float: left;
+ padding-right: 20px;
+}
+
+#security-filters .filter-text-formats .enabled {
+ background: url(images/tick.png) no-repeat right center;
+}
+
+#security-filters .filter-text-formats .disabled {
+ background: url(images/delete.png) no-repeat right center;
+}
+
+#security-filters .filter-info {
+ float: left;
+ width: 85%;
+}
+
+#security-filters .fieldset-legend {
+ background: none;
+ padding-left: 10px;
+}
+
+#security-filters .fieldset-legend a {
+ font-weight: normal;
+ font-size: 10px;
+ padding-left: 5px;
+}
+
+#security-filters .filter-wrapper {
+ clear: both;
+ float: left;
+ border-bottom: 1px solid #CCCCCC;
+ width: 100%;
+}
+
+/* Fix for fieldset for-edit-apperance in Firefox*/
+fieldset#edit-appearance div#groupLayout, div#allButtons {
+ border: 0;
+ padding: 0 0 0 0;
+ margin: 1em 0;
+ overflow: auto;
+}
+/* end of toolbar Drag & Drop */ \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.info b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.info
new file mode 100644
index 0000000..a5bf444
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.info
@@ -0,0 +1,12 @@
+name = CKEditor
+description = "Enables CKEditor (WYSIWYG HTML editor) for use instead of plain text fields."
+core = 7.x
+package = User interface
+configure = admin/config/content/ckeditor
+files[] = includes/ckeditor.user.inc
+; Information added by drupal.org packaging script on 2012-12-22
+version = "7.x-1.12"
+core = "7.x"
+project = "ckeditor"
+datestamp = "1356180966"
+
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.install b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.install
new file mode 100644
index 0000000..b35281d
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.install
@@ -0,0 +1,597 @@
+<?php
+
+/*
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+
+/*
+ * Implementation of hook_install().
+ *
+ * This will automatically install the database tables for the CKEditor module for both MySQL and PostgreSQL databases.
+ *
+ * If you are using another database, you will have to install the tables manually, using the queries below as a reference.
+ *
+ * Note that the curly braces around table names are a Drupal-specific feature to allow for automatic database table prefixing,
+ * and will need to be removed.
+ */
+
+function ckeditor_install() {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+
+ //searching ckeditor.js
+ $editor_path = _ckeditor_script_path();
+ //insert default input formats to profiles
+ db_insert('ckeditor_input_format')->fields(array("name" => "Advanced", "format" => 'filtered_html'))->execute();
+ db_insert('ckeditor_input_format')->fields(array("name" => "Full", "format" => 'full_html'))->execute();
+
+ //insert settings for default role
+ $arr = array();
+ $arr['filebrowser'] = 'none';
+ $arr['quickupload'] = 'f';
+
+ //security
+ $arr['ss'] = "2";
+ $arr['filters']['filter_html'] = 1;
+
+ //appearance
+ $arr['default'] = "t";
+ $arr['show_toggle'] = "t";
+ $arr['popup'] = variable_get('ckeditor_popup', 0) ? "t" : "f";
+ $arr['toolbar'] = "
+[
+ ['Source'],
+ ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker', 'Scayt'],
+ ['Undo','Redo','Find','Replace','-','SelectAll','RemoveFormat'],
+ ['Image','Media','Flash','Table','HorizontalRule','Smiley','SpecialChar'],
+ ['Maximize', 'ShowBlocks'],
+ '/',
+ ['Format'],
+ ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
+ ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
+ ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl'],
+ ['Link','Unlink','Anchor', 'Linkit']
+]
+ ";
+ $arr['expand'] = variable_get('ckeditor_toolbar_start_expanded', 1) ? "t" : "f";
+ $arr['width'] = variable_get("ckeditor_width", "100%");
+ $arr['lang'] = "en";
+ $arr['auto_lang'] = "t";
+ $arr['language_direction'] = "default";
+
+ //output
+ $arr['enter_mode'] = "p";
+ $arr['shift_enter_mode'] = "br";
+ $arr['font_format'] = 'p;div;pre;address;h1;h2;h3;h4;h5;h6';
+ $arr['format_source'] = "t";
+ $arr['format_output'] = "t";
+ $arr['custom_formatting'] = "f";
+ $arr['formatting']['custom_formatting_options'] = array('indent' => 'indent', 'breakBeforeOpen' => 'breakBeforeOpen', 'breakAfterOpen' => 'breakAfterOpen', 'breakAfterClose' => 'breakAfterClose');
+
+ //css
+ $arr['css_mode'] = "none";
+ $arr['css_path'] = variable_get("ckeditor_stylesheet", "");
+
+ //upload
+ //get permissions here like in _update_role_permissions
+ $arr['filebrowser'] = "none";
+ $arr['user_choose'] = "f";
+ $arr['ckeditor_load_method'] = "ckeditor.js";
+ $arr['ckeditor_load_time_out'] = 0;
+ $arr['scayt_autoStartup'] = "f";
+
+ //advanced options
+ $arr['html_entities'] = "f";
+
+ db_insert('ckeditor_settings')->fields(array("name" => "Advanced", "settings" => serialize($arr)))->execute();
+
+ //insert settings for advanced role
+ $arr['toolbar'] = "
+[
+ ['Source'],
+ ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker', 'Scayt'],
+ ['Undo','Redo','Find','Replace','-','SelectAll','RemoveFormat'],
+ ['Image','Media','Flash','Table','HorizontalRule','Smiley','SpecialChar','Iframe'],
+ '/',
+ ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
+ ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
+ ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl'],
+ ['Link','Unlink','Anchor', 'Linkit'],
+ ['DrupalBreak'],
+ '/',
+ ['Format','Font','FontSize'],
+ ['TextColor','BGColor'],
+ ['Maximize', 'ShowBlocks']
+]
+ ";
+
+ $arr['filters'] = array();
+
+ db_insert('ckeditor_settings')->fields(array("name" => "Full", "settings" => serialize($arr)))->execute();
+
+ $arr = array();
+
+ if ($editor_path) {
+ $arr['ckeditor_path'] = $editor_path;
+ }
+
+ db_insert('ckeditor_settings')->fields(array("name" => "CKEditor Global Profile", "settings" => serialize($arr)))->execute();
+
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.admin');
+}
+
+/**
+ * Implementation of hook_schema().
+ */
+function ckeditor_schema() {
+ $schema['ckeditor_settings'] = array(
+ 'description' => 'Stores CKEditor profile settings',
+ 'fields' => array(
+ 'name' => array(
+ 'type' => 'varchar',
+ 'not null' => TRUE,
+ 'default' => '',
+ 'length' => 128,
+ 'description' => 'Name of the CKEditor profile',
+ ),
+ 'settings' => array(
+ 'type' => 'text',
+ 'description' => 'Profile settings',
+ ),
+ ),
+ 'primary key' => array('name')
+ );
+ $schema['ckeditor_input_format'] = array(
+ 'description' => 'Stores CKEditor input format assignments',
+ 'fields' => array(
+ 'name' => array(
+ 'type' => 'varchar',
+ 'not null' => TRUE,
+ 'default' => '',
+ 'length' => 128,
+ 'description' => 'Name of the CKEditor role',
+ ),
+ 'format' => array(
+ 'type' => 'varchar',
+ 'not null' => TRUE,
+ 'default' => '',
+ 'length' => 128,
+ 'description' => 'Drupal filter format ID',
+ )
+ ),
+ 'primary key' => array('name', 'format'),
+ );
+
+ return $schema;
+}
+
+/**
+ * Implementation of hook_requirements().
+ *
+ * This hook will issue warnings if:
+ * - The CKEditor source files are not found.
+ * - The CKEditor source files are out of date.
+ * - Quick upload and/or the built-in file browser are used and $cookie_domain is not set.
+ */
+function ckeditor_requirements($phase) {
+ $requirements = array();
+
+ if ($phase == 'runtime') {
+ module_load_include('module', 'ckeditor');
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $requirements['ckeditor'] = array(
+ 'title' => t('CKEditor'),
+ 'value' => t('Unknown'),
+ );
+
+ $requirements['ckeditor']['severity'] = REQUIREMENT_OK;
+
+ if (!_ckeditor_requirements_isinstalled()) {
+ $sourcepath = ckeditor_path('local');
+
+ $requirements['ckeditor']['description'] = t('CKEditor was not found in <code>%sourcepath</code>.', array('%sourcepath' => $sourcepath));
+ $requirements['ckeditor']['severity'] = REQUIREMENT_ERROR;
+ }
+ elseif (($installed_version = _ckeditor_requirements_getinstalledversion()) === NULL) {
+ $requirements['ckeditor']['description'] = t('CKEditor version could not be determined.');
+ $requirements['ckeditor']['severity'] = REQUIREMENT_INFO;
+ }
+ else {
+ $profile_name = _ckeditor_requirements_ckfinder_filebrowser_enabled();
+ if ($profile_name !== FALSE) {
+ if (!_ckeditor_requirements_cookiedomainset()) {
+ $requirements['ckeditor']['severity'] = REQUIREMENT_ERROR;
+ $requirements['ckeditor']['description'] = t('You are using a feature that requires <code>$cookie_domain</code> to be set, but it is not set in your <code>settings.php</code> file (CKFinder is enabled in the !profile profile).', array('!profile' => l($profile_name, 'admin/config/content/ckeditor/edit/' . urlencode($profile_name))));
+ }
+ elseif ($error = _ckeditor_requirements_ckfinder_config_check($profile_name)) {
+ $requirements['ckeditor']['severity'] = REQUIREMENT_ERROR;
+ $requirements['ckeditor']['description'] = $error;
+ }
+ }
+ }
+ if ((($installed_version = _ckeditor_requirements_getinstalledversion()) !== NULL) && (-1 == version_compare($installed_version, '3.1 SVN')) && $installed_version != '%VERSION%') {
+ $requirements['ckeditor']['description'] = t('Some features are disabled because you are using an older version of CKEditor. Please upgrade to CKEditor 3.1 (or higher).');
+ $requirements['ckeditor']['severity'] = REQUIREMENT_INFO;
+ }
+ if (!empty($installed_version)) {
+ if ($installed_version == '%VERSION%') {
+ $requirements['ckeditor']['value'] = 'GIT version';
+ }
+ else {
+ $requirements['ckeditor']['value'] = $installed_version;
+ }
+ }
+ else {
+ $requirements['ckeditor']['value'] = t('Not found');
+ }
+ }
+
+ return $requirements;
+}
+
+/**
+ * Fetches the version of the installed CKEditor sources.
+ *
+ * It tries to locate the version of the CKEditor sources in
+ * ckeditor.js.
+ *
+ * Releases have a version number such as "3.0.1".
+ * SVN nightly releases have a minor version number with SVN appended: "3.0 SVN".
+ * SVN checkouts have the string "[Development]".
+ *
+ * This function is used by ckeditor_requirements().
+ *
+ * @return string Version number (eg. 3.0) of CKEditor. Null if not found in ckeditor_basic.js.
+ */
+function _ckeditor_requirements_getinstalledversion() {
+ module_load_include('module', 'ckeditor');
+ $editor_path = ckeditor_path('local', TRUE);
+ $jspath = $editor_path . '/ckeditor.js';
+
+ $configcontents = @file_get_contents($jspath);
+ if (!$configcontents) {
+ return NULL;
+ }
+ $matches = array();
+ if (preg_match('#,version:[\'\"]{1}(.*?)[\'\"]{1},#', $configcontents, $matches)) {
+ return $matches[1];
+ }
+ return NULL;
+}
+
+/**
+ * Executed when the built-in file browser is enabled.
+ * Returns FALSE if no errors are found in the config.php file, otherwise it returns an error message.
+ *
+ * @return string|boolean
+ */
+function _ckeditor_requirements_ckfinder_config_check($profile_name) {
+ global $base_url;
+ module_load_include('module', 'ckeditor');
+ $config_path = ckfinder_path('local') . '/config.php';
+
+ if (!file_exists($config_path)) {
+ return t('!ckfinder is not installed correctly: <code>!config</code> not found. Make sure that you uploaded all files and did not accidentally remove the configuration file.', array(
+ '!config' => $config_path,
+ '!ckfinder' => '<a href="http://ckfinder.com">CKFinder</a>'
+ ));
+ }
+
+ if (!is_readable($config_path)) {
+ return t('CKEditor needs read permission to the <code>!config</code> file.', array('!config' => $config_path));
+ }
+
+ $config_contents = file($config_path);
+
+ //not a 100% valid check, but well... let's have at least some error checking
+ $require_once_found = FALSE;
+ $require_once_line = 0;
+ $userfiles_absolute_path_line = 0;
+ $force_single_extension_line = 0;
+
+ if ($config_contents) {
+ foreach ($config_contents as $line_num => $line) {
+ //make sure it doesn't start with a comment, unfortunately we're not protected if code is commented with /* */
+ if (!$require_once_found && strpos($line, "filemanager.config.php") !== FALSE && !preg_match(",^(?://|\#|\*|/\*),", trim($line))) {
+ $require_once_found = TRUE;
+ $require_once_line = $line_num;
+ }
+ /**
+ * @todo Finish this
+ */
+ if (!$userfiles_absolute_path_line && strpos($line, '$Config[\'UserFilesAbsolutePath\']') !== FALSE && !preg_match(",^(?://|\#|\*|/\*),", trim($line))) {
+ $userfiles_absolute_path_line = $line_num;
+ }
+ if (!$force_single_extension_line && strpos($line, '$Config[\'ForceSingleExtension\']') !== FALSE && !preg_match(",^(?://|\#|\*|/\*),", trim($line))) {
+ $force_single_extension_line = $line_num;
+ }
+ }
+ }
+
+ if (!$require_once_found) {
+ return t('You are using a feature that requires manual integration in the <code>config.php</code> file. Please read the "Installing CKFinder" section in the <code>!readme</code> file carefully and add a <code>require_once ...</code> statement to the <code>%ckfconfig</code> file.', array('%ckfconfig' => $config_path, '!readme' => l(t('README.txt'), $base_url . '/' . drupal_get_path('module', 'ckeditor') . '/README.txt', array('absolute' => TRUE))));
+ }
+
+ if ($userfiles_absolute_path_line && $force_single_extension_line && (
+ $require_once_line < $userfiles_absolute_path_line || $require_once_line > $force_single_extension_line)) {
+ return t('You are using a feature that requires manual integration in the <code>config.php</code> file. You have added a <code>require_once ...</code> statement to the <code>%ckfconfig</code> file, but in the wrong line.', array('%ckfconfig' => $config_path));
+ }
+
+ return FALSE;
+}
+
+/**
+ * Checks if any profile requires an explicit setting of $cookie_domain
+ * in settings.php.
+ *
+ * %cookie_domain is required when the internal file browser or quick upload is used.
+ *
+ * This function is used by ckeditor_requirements().
+ *
+ * @return boolean True if any profile requires $cookie_domain.
+ */
+function _ckeditor_requirements_ckfinder_filebrowser_enabled() {
+ module_load_include('module', 'ckeditor');
+ $profiles = ckeditor_profile_load();
+
+ foreach ($profiles as $profile) {
+ if ((isset($profile->settings['filebrowser']) && $profile->settings['filebrowser'] == 'ckfinder')) {
+ return $profile->name;
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ * Checks if $cookie_domain was set.
+ *
+ * It has to include settings.php again because conf_init() sets
+ * $cookie_domain regardless of its presence in settings.php, so
+ * simply checking $GLOBALS['cookie_domain'] is not possible.
+ *
+ * This function is used by ckeditor_requirements().
+ *
+ * @return boolean True if $cookie_domain was set in settings.php.
+ */
+function _ckeditor_requirements_cookiedomainset() {
+ if (file_exists('./' . conf_path() . '/settings.php')) {
+ $settings = file_get_contents('./' . conf_path() . '/settings.php');
+
+ if (preg_match('#^\s*\$cookie_domain#m', $settings)) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ * Updates broken settings for the 'Full' profile. (Resets toolbar to default)
+ */
+function ckeditor_update_7000() {
+ _ckeditor_d6_to_d7_migration();
+ $result = db_query("SELECT settings FROM {ckeditor_settings} WHERE name = :name", array(':name' => 'Full'))->fetchField();
+ $settings = unserialize($result);
+ $settings['toolbar'] = "
+[
+ ['Source'],
+ ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker', 'Scayt'],
+ ['Undo','Redo','Find','Replace','-','SelectAll','RemoveFormat'],
+ ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar'],
+ '/',
+ ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
+ ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
+ ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl'],
+ ['Link','Unlink','Anchor'],
+ ['DrupalBreak'],
+ '/',
+ ['Format','Font','FontSize'],
+ ['TextColor','BGColor'],
+ ['Maximize', 'ShowBlocks']
+]
+ ";
+
+ $settings = serialize($settings);
+
+ $update = db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => $settings,
+ ))
+ ->condition('name', 'Full', '=')
+ ->execute();
+}
+
+/**
+ * Removes the 'DrupalBreak' button from the 'Advanced' profile. (Resets toolbar to default)
+ */
+function ckeditor_update_7001() {
+ $result = db_query("SELECT settings FROM {ckeditor_settings} WHERE name = :name", array(':name' => 'Advanced'))->fetchField();
+ $settings = unserialize($result);
+ $settings['toolbar'] = "
+[
+ ['Source'],
+ ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker', 'Scayt'],
+ ['Undo','Redo','Find','Replace','-','SelectAll','RemoveFormat'],
+ ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar'],
+ ['Maximize', 'ShowBlocks'],
+ '/',
+ ['Format'],
+ ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
+ ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
+ ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl'],
+ ['Link','Unlink','Anchor']
+]
+ ";
+
+ $settings = serialize($settings);
+
+ $update = db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => $settings,
+ ))
+ ->condition('name', 'Advanced', '=')
+ ->execute();
+}
+
+/**
+ * Rewrites 'Path to CKEditor' to new flags.
+ */
+function ckeditor_update_7002() {
+ $result = db_query("SELECT settings FROM {ckeditor_settings} WHERE name = :name", array(':name' => 'CKEditor Global Profile'))->fetchField();
+ $settings = unserialize($result);
+ if ($settings['ckeditor_path'] == '%b/sites/all/libraries/ckeditor') {
+ $settings['ckeditor_path'] = '%l/ckeditor';
+ }
+ else {
+ $settings['ckeditor_path'] = str_replace('%b/', '', $settings['ckeditor_path']);
+ $settings['ckeditor_path'] = str_replace('%b', '', $settings['ckeditor_path']);
+ }
+
+ $settings = serialize($settings);
+
+ $update = db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => $settings,
+ ))
+ ->condition('name', 'CKEditor Global Profile', '=')
+ ->execute();
+}
+
+/**
+ * Fixes static paths to plugin files.
+ */
+function ckeditor_update_7003() {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ module_load_include('module', 'ckeditor');
+
+ _ckeditor_d6_to_d7_migration();
+
+ $render = array();
+ $render["%base_path%"] = base_path();
+ $render["%editor_path%"] = ckeditor_path('relative') . '/';
+ $render["%ckeditor_path%"] = ckeditor_module_path('relative');
+ $render["%plugin_dir%"] = $render["%module_path%"] . '/plugins/';
+
+ $result = db_query("SELECT * FROM {ckeditor_settings} WHERE name <> :name", array(':name' => 'CKEditor Global Profile'))->fetchAllAssoc('name');
+
+ foreach ((array) $result as $profile) {
+ $name = $profile->name;
+ $settings = unserialize($profile->settings);
+
+ foreach ((array) $settings['loadPlugins'] as $i => $plugin) {
+ $settings['loadPlugins'][$i]['path'] = str_replace(array_values($render), array_keys($render), $plugin['path']);
+ }
+
+ $settings = serialize($settings);
+
+ $update = db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => $settings,
+ ))
+ ->condition('name', $name, '=')
+ ->execute();
+ }
+}
+
+/**
+ * Minor update for those who have run update.php with problems.
+ * @see http://drupal.org/node/1347682 for a better explanation.
+ */
+function ckeditor_update_7004() {
+ return _ckeditor_d6_to_d7_migration();
+}
+
+/**
+ * Fixes plugin paths stored in database.
+ * @see http://drupal.org/node/1864760 for more information
+ */
+function ckeditor_update_7005() {
+ $result = db_query("SELECT * FROM {ckeditor_settings} WHERE name <> :name", array(':name' => 'CKEditor Global Profile'))->fetchAllAssoc('name');
+
+ foreach ((array) $result as $profile) {
+ $name = $profile->name;
+ $settings = unserialize($profile->settings);
+
+ $replace = array(
+ "%base_path%%editor_path%" => "%editor_path%",
+ "%base_path%%module_path%" => "%module_path%",
+ "%base_path%%plugin_dir%" => "%plugin_dir%",
+ "%base_path%%plugin_dir_extra%" => "%plugin_dir_extra%"
+ );
+
+ foreach ((array) $settings['loadPlugins'] as $i => $plugin) {
+ $settings['loadPlugins'][$i]['path'] = str_replace(array_keys($replace), array_values($replace), $plugin['path']);
+ }
+
+ $settings = serialize($settings);
+
+ db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => $settings,
+ ))
+ ->condition('name', $name, '=')
+ ->execute();
+ }
+}
+
+/**
+ * Adapts D6 table structure to D7 schema.
+ */
+function _ckeditor_d6_to_d7_migration() {
+ if (db_table_exists('ckeditor_role')) {
+ db_drop_table('ckeditor_role');
+ }
+ if (!db_table_exists('ckeditor_input_format')) {
+ $ckeditor_input_format = array(
+ 'description' => 'Stores CKEditor input format assignments',
+ 'fields' => array(
+ 'name' => array(
+ 'type' => 'varchar',
+ 'not null' => TRUE,
+ 'default' => '',
+ 'length' => 128,
+ 'description' => 'Name of the CKEditor role',
+ ),
+ 'format' => array(
+ 'type' => 'varchar',
+ 'not null' => TRUE,
+ 'default' => '',
+ 'length' => 128,
+ 'description' => 'Drupal filter format ID',
+ )
+ ),
+ 'primary key' => array('name', 'format'),
+ );
+ db_create_table('ckeditor_input_format', $ckeditor_input_format);
+ }
+} \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.module b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.module
new file mode 100644
index 0000000..ab868ee
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.module
@@ -0,0 +1,685 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+/**
+ * The name of the simplified toolbar that should be forced.
+ * Make sure that this toolbar is defined in ckeditor.config.js or fckconfig.js.
+ */
+define('CKEDITOR_FORCE_SIMPLE_TOOLBAR_NAME', 'DrupalBasic');
+define('CKEDITOR_ENTERMODE_P', 1);
+define('CKEDITOR_ENTERMODE_BR', 2);
+define('CKEDITOR_ENTERMODE_DIV', 3);
+
+global $_ckeditor_configuration;
+global $_ckeditor_ids;
+
+require_once('includes/ckeditor.user.inc');
+
+$_ckeditor_configuration = array();
+$_ckeditor_ids = array();
+
+/**
+ * Implementation of hook_menu().
+ */
+function ckeditor_menu() {
+ $items = array();
+
+ $items['ckeditor/xss'] = array(
+ 'title' => 'XSS Filter',
+ 'description' => 'XSS Filter.',
+ 'page callback' => 'ckeditor_filter_xss',
+ 'file' => 'includes/ckeditor.page.inc',
+ 'access callback' => TRUE,
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['ckeditor/disable/wysiwyg/%'] = array(
+ 'title' => 'Disable the WYSIWYG module',
+ 'description' => 'Disable WYSIWYG module.',
+ 'page callback' => 'ckeditor_disable_wysiwyg',
+ 'page arguments' => array(3),
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'access callback' => TRUE,
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['admin/config/content/ckeditor'] = array(
+ 'title' => 'CKEditor',
+ 'description' => 'Configure the rich text editor.',
+ 'page callback' => 'ckeditor_admin_main',
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_NORMAL_ITEM,
+ );
+
+ $items['admin/config/content/ckeditor/skinframe'] = array(
+ 'title' => 'Change skin of CKEditor',
+ 'description' => 'Configure skin for CKEditor.',
+ 'page callback' => 'ckeditor_skinframe',
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['admin/config/content/ckeditor/add'] = array(
+ 'title' => 'Add a new CKEditor profile',
+ 'description' => 'Configure the rich text editor.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('ckeditor_admin_profile_form'),
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['admin/config/content/ckeditor/clone/%ckeditor_profile'] = array(
+ 'title' => 'Clone the CKEditor profile',
+ 'description' => 'Configure the rich text editor.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('ckeditor_admin_profile_clone_form', 5),
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['admin/config/content/ckeditor/edit/%ckeditor_profile'] = array(
+ 'title' => 'Edit the CKEditor profile',
+ 'description' => 'Configure the rich text editor.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('ckeditor_admin_profile_form', 5),
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['admin/config/content/ckeditor/delete/%ckeditor_profile'] = array(
+ 'title' => 'Delete the CKEditor profile',
+ 'description' => 'Configure the rich text editor.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('ckeditor_admin_profile_delete_form', 5),
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['admin/config/content/ckeditor/addg'] = array(
+ 'title' => 'Add the CKEditor Global profile',
+ 'description' => 'Configure the rich text editor.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('ckeditor_admin_global_profile_form', 'add'),
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ $items['admin/config/content/ckeditor/editg'] = array(
+ 'title' => 'Edit the CKEditor Global profile',
+ 'description' => 'Configure the rich text editor.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('ckeditor_admin_global_profile_form', 'edit'),
+ 'file' => 'includes/ckeditor.admin.inc',
+ 'access arguments' => array('administer ckeditor'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ return $items;
+}
+
+/**
+ * Implementation of hook_permission().
+ *
+ * People -> Permissions
+ */
+function ckeditor_permission() {
+ $arr = array();
+ $arr['administer ckeditor'] = array(
+ 'title' => t('Administer CKEditor access'),
+ 'description' => t('Allow users to change CKEditor settings.')
+ );
+
+ $arr['customize ckeditor'] = array(
+ 'title' => t('Customize CKEditor appearance'),
+ 'description' => t('Allow users to customize CKEditor appearance.')
+ );
+
+ if (file_exists(ckfinder_path('local'))) {
+ $arr['allow CKFinder file uploads'] = array(
+ 'title' => t('CKFinder access'),
+ 'description' => t('Allow users to use CKFinder.')
+ );
+ }
+ return $arr;
+}
+
+/**
+ * Implementation of hook_help().
+ *
+ * This function delegates the execution to ckeditor_help_delegate() in includes/ckeditor.page.inc to
+ * lower the amount of code in ckeditor.module.
+ */
+function ckeditor_help($path, $arg) {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.page');
+ return module_invoke('ckeditor', 'help_delegate', $path, $arg);
+}
+
+/**
+ * Check CKEditor version
+ */
+function ckeditor_get_version($main_version = FALSE) {
+ static $ckeditor_version = FALSE;
+
+ if ($ckeditor_version !== FALSE) {
+ if (!$main_version) {
+ return $ckeditor_version;
+ }
+ $version = explode('.', $ckeditor_version);
+ return trim($version[0]);
+ }
+
+ $editor_path = ckeditor_path('local', TRUE);
+ $jspath = $editor_path . '/ckeditor.js';
+
+ $configcontents = @file_get_contents($jspath);
+ if (!$configcontents) {
+ return $ckeditor_version = NULL;
+ }
+ $matches = array();
+ if (preg_match('#,version:[\'\"]{1}(.*?)[\'\"]{1},#', $configcontents, $matches)) {
+ $ckeditor_version = $matches[1];
+ if ($ckeditor_version == '%VERSION%') {
+ $ckeditor_version = '4.0.0';
+ }
+ if (!$main_version) {
+ return $ckeditor_version;
+ }
+ $version = explode('.', $ckeditor_version);
+ return trim($version[0]);
+ }
+ return $ckeditor_version = NULL;
+}
+
+/**
+ * Implementation of hook_init().
+ */
+function ckeditor_init() {
+ drupal_add_css(drupal_get_path('module', 'ckeditor') . '/ckeditor.css');
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter() for user_profile_form().
+ */
+function ckeditor_form_user_profile_form_alter(&$form, &$form_state) {
+ if ($form['#user_category'] == 'account') {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.user');
+ ckeditor_user_customize($form, $form_state, 'user_profile_form');
+ }
+}
+
+/**
+ * Implementation of hook_element_info_alter().
+ *
+ * Replace the textarea with CKEditor using a callback function (ckeditor_pre_render_text_format).
+ */
+function ckeditor_element_info_alter(&$types) {
+ $types['text_format']['#pre_render'][] = 'ckeditor_pre_render_text_format';
+}
+
+/**
+ * This function creates the HTML objects required for CKEditor.
+ *
+ * @param $element
+ * A fully populated form element to add the editor to.
+ * @return
+ * The same $element with extra CKEditor markup and initialization.
+ */
+function ckeditor_pre_render_text_format($element) {
+ static $init = FALSE;
+ if (!isset($element['#format'])) {
+ return $element;
+ }
+
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ if ($init === FALSE) {
+ $input_formats = ckeditor_profiles_compile();
+ drupal_add_js(array('ckeditor' => array('input_formats' => $input_formats, 'plugins' => array())), 'setting');
+ $init = TRUE;
+ }
+
+ if (isset($element['value'])) {
+ if (!isset($element['format'])) {
+ return $element;
+ }
+ if (isset($element['summary'])) {
+ $element['value'] = ckeditor_load_by_field($element['value'], $element['format']['format'], TRUE, $element['summary']['#id']);
+ $element['summary'] = ckeditor_load_by_field($element['summary'], $element['format']['format'], FALSE);
+ }
+ else {
+ $element['value'] = ckeditor_load_by_field($element['value'], $element['format']['format']);
+ }
+ }
+ else {
+ $element = ckeditor_load_by_field($element, $element['#format']);
+ }
+
+ return $element;
+}
+
+/**
+ * Load all profiles. Just load one profile if $name is passed in.
+ */
+function ckeditor_profile_load($name = '', $clear = FALSE) {
+ static $profiles = array();
+ global $user;
+
+ if (empty($profiles) || $clear === TRUE) {
+ $result = db_select('ckeditor_settings', 's')->fields('s')->execute();
+ foreach ($result as $data) {
+ $data->settings = unserialize($data->settings);
+ $data->input_formats = array();
+
+ $profiles[$data->name] = $data;
+ }
+ $input_formats = filter_formats($user);
+ $result = db_select('ckeditor_input_format', 'f')->fields('f')->execute();
+ foreach ($result as $data) {
+ if (isset($input_formats[$data->format])) {
+ $profiles[$data->name]->input_formats[$data->format] = $input_formats[$data->format]->name;
+ }
+ }
+ }
+
+ return ($name ? (isset($profiles[urldecode($name)]) ? $profiles[urldecode($name)] : FALSE) : $profiles);
+}
+
+/**
+ * Generate base path of the Drupal installation.
+ *
+ * @return
+ * Path of the Drupal installation.
+ */
+function ckeditor_base_path($mode = 'relative') {
+ if ($mode == 'local') {
+ return $cke_base_local_path = '.';
+ }
+ return rtrim(base_path(), '/');
+}
+
+/**
+ * Generate module path of the CKEditor module.
+ *
+ * @return
+ * Path of CKEditor module.
+ */
+function ckeditor_module_path($mode = 'relative') {
+ switch ($mode) {
+ default:
+ case 'relative':
+ return ckeditor_base_path('relative') . '/' . drupal_get_path('module', 'ckeditor');
+ case 'local':
+ return ckeditor_base_path('local') . '/' . drupal_get_path('module', 'ckeditor');
+ case 'url':
+ return drupal_get_path('module', 'ckeditor');
+ }
+}
+
+/**
+ * Generate library path of the Drupal installation.
+ *
+ * @return
+ * Path of library in the Drupal installation.
+ */
+function ckeditor_library_path($mode = 'relative') {
+ switch ($mode) {
+ default:
+ case 'relative':
+ return ckeditor_base_path('relative') . '/sites/all/libraries';
+ case 'local':
+ return ckeditor_base_path('local') . '/sites/all/libraries';
+ case 'url':
+ return 'sites/all/libraries';
+ }
+}
+
+/**
+ * Read the CKEditor path from the Global profile.
+ *
+ * @return
+ * Path to CKEditor folder.
+ */
+function ckeditor_path($mode = 'relative', $refresh = FALSE) {
+ static $cke_static;
+
+ if (!isset($cke_static)) {
+ $cke_static = array();
+ }
+
+ if ($refresh || !isset($cke_static[$mode])) {
+ $global_profile = ckeditor_profile_load('CKEditor Global Profile', $refresh);
+ switch ($mode) {
+ default:
+ case 'relative':
+ if ($global_profile && isset($global_profile->settings['ckeditor_path'])) {
+ $cke_path = $global_profile->settings['ckeditor_path'];
+ $cke_path = strtr($cke_path, array("%b" => ckeditor_base_path('relative'), "%m" => ckeditor_module_path('relative'), "%l" => ckeditor_library_path('relative')));
+ $cke_path = str_replace('\\', '/', $cke_path);
+ $cke_path = str_replace('//', '/', $cke_path);
+ return $cke_static[$mode] = $cke_path;
+ }
+ return $cke_static[$mode] = ckeditor_module_path('relative') . '/ckeditor';
+ case 'local':
+ if ($global_profile) {
+ if (!empty($global_profile->settings['ckeditor_local_path'])) {
+ return $cke_static[$mode] = $global_profile->settings['ckeditor_local_path'];
+ }
+ if (isset($global_profile->settings['ckeditor_path'])) {
+ $cke_local_path = $global_profile->settings['ckeditor_path'];
+ $cke_local_path = strtr($cke_local_path, array("%b" => ckeditor_base_path('local'), "%m" => ckeditor_module_path('local'), "%l" => ckeditor_library_path('local')));
+ return $cke_static[$mode] = $cke_local_path;
+ }
+ }
+ return $cke_static[$mode] = ckeditor_module_path('local') . '/ckeditor';
+ case 'url':
+ if ($global_profile && isset($global_profile->settings['ckeditor_path'])) {
+ $cke_path = $global_profile->settings['ckeditor_path'];
+ $cke_path = strtr($cke_path, array("%m" => ckeditor_module_path('url'), "%l" => ckeditor_library_path('url')));
+ $cke_path = str_replace('\\', '/', $cke_path);
+ $cke_path = str_replace('//', '/', $cke_path);
+ //In D7 base path in URL mode is not needed, so we need to remove it with trailing slash (if exists)
+ $cke_path = str_replace(array("%b/", "%b"), '', $cke_path);
+ return $cke_static[$mode] = $cke_path;
+ }
+ return $cke_static[$mode] = ckeditor_module_path('url') . '/ckeditor';
+ }
+ }
+ return $cke_static[$mode];
+}
+
+/**
+ * Read the CKEditor plugins path from the Global profile.
+ *
+ * @return
+ * Path to CKEditor plugins folder.
+ */
+function ckeditor_plugins_path($mode = 'relative', $refresh = FALSE) {
+ static $cke_static;
+
+ if (!isset($cke_static)) {
+ $cke_static = array();
+ }
+
+ if ($refresh || !isset($cke_static[$mode])) {
+ $global_profile = ckeditor_profile_load('CKEditor Global Profile', $refresh);
+ switch ($mode) {
+ default:
+ case 'relative':
+ if ($global_profile && isset($global_profile->settings['ckeditor_plugins_path'])) {
+ $cke_plugins_path = $global_profile->settings['ckeditor_plugins_path'];
+ $cke_plugins_path = strtr($cke_plugins_path, array("%b" => ckeditor_base_path('relative'), "%m" => ckeditor_module_path('relative'), "%l" => ckeditor_library_path('relative')));
+ $cke_plugins_path = str_replace('\\', '/', $cke_plugins_path);
+ $cke_plugins_path = str_replace('//', '/', $cke_plugins_path);
+ $cke_plugins_path = rtrim($cke_plugins_path, ' \/');
+ return $cke_static[$mode] = $cke_plugins_path;
+ }
+ return $cke_static[$mode] = ckeditor_module_path('relative') . '/plugins';
+ case 'local':
+ if ($global_profile) {
+ if (!empty($global_profile->settings['ckeditor_plugins_local_path'])) {
+ return $cke_static[$mode] = $global_profile->settings['ckeditor_plugins_local_path'];
+ }
+ if (isset($global_profile->settings['ckeditor_plugins_path'])) {
+ $cke_plugins_local_path = $global_profile->settings['ckeditor_plugins_path'];
+ $cke_plugins_local_path = strtr($cke_plugins_local_path, array("%b" => ckeditor_base_path('local'), "%m" => ckeditor_module_path('local'), "%l" => ckeditor_library_path('local')));
+ return $cke_static[$mode] = $cke_plugins_local_path;
+ }
+ }
+ return $cke_static[$mode] = ckeditor_module_path('local') . '/plugins';
+ case 'url':
+ if ($global_profile && isset($global_profile->settings['ckeditor_plugins_path'])) {
+ $cke_plugins_path = $global_profile->settings['ckeditor_plugins_path'];
+ $cke_plugins_path = strtr($cke_plugins_path, array("%m" => ckeditor_module_path('url'), "%l" => ckeditor_library_path('url')));
+ $cke_plugins_path = str_replace('\\', '/', $cke_plugins_path);
+ $cke_plugins_path = str_replace('//', '/', $cke_plugins_path);
+ $cke_plugins_path = rtrim($cke_plugins_path, ' \/');
+ //In D7 base path in URL mode is not needed, so we need to remove it with trailing slash (if exists)
+ $cke_plugins_path = str_replace(array("%b/", "%b"), '', $cke_plugins_path);
+ return $cke_static[$mode] = $cke_plugins_path;
+ }
+ return $cke_static[$mode] = ckeditor_module_path('url') . '/plugins';
+ }
+ }
+ return $cke_static[$mode];
+}
+
+/**
+ * Read the CKFinder path from the Global profile.
+ *
+ * @return
+ * Path to CKFinder folder.
+ */
+function ckfinder_path($mode = 'relative', $refresh = FALSE) {
+ static $cke_static;
+
+ if (!isset($cke_static)) {
+ $cke_static = array();
+ }
+
+ if ($refresh || !isset($cke_static[$mode])) {
+ $global_profile = ckeditor_profile_load('CKEditor Global Profile', $refresh);
+ switch ($mode) {
+ default:
+ case 'relative':
+ if ($global_profile && isset($global_profile->settings['ckfinder_path'])) {
+ $ckfinder_path = $global_profile->settings['ckfinder_path'];
+ $ckfinder_path = strtr($ckfinder_path, array("%b" => ckeditor_base_path('relative'), "%m" => ckeditor_module_path('relative'), "%l" => ckeditor_library_path('relative')));
+ $ckfinder_path = str_replace('\\', '/', $ckfinder_path);
+ $ckfinder_path = str_replace('//', '/', $ckfinder_path);
+ return $cke_static[$mode] = $ckfinder_path;
+ }
+ return $cke_static[$mode] = ckeditor_module_path('relative') . '/ckfinder';
+ case 'local':
+ if ($global_profile) {
+ if (!empty($global_profile->settings['ckfinder_local_path'])) {
+ return $cke_static[$mode] = $global_profile->settings['ckfinder_local_path'];
+ }
+ if (isset($global_profile->settings['ckfinder_path'])) {
+ $ckfinder_path = $global_profile->settings['ckfinder_path'];
+ $ckfinder_path = strtr($ckfinder_path, array("%b" => ckeditor_base_path('local'), "%m" => ckeditor_module_path('local'), "%l" => ckeditor_library_path('local')));
+ return $cke_static[$mode] = $ckfinder_path;
+ }
+ }
+ return $cke_static[$mode] = ckeditor_module_path('local') . '/ckfinder';
+ case 'url':
+ if ($global_profile && isset($global_profile->settings['ckfinder_path'])) {
+ $ckfinder_path = $global_profile->settings['ckfinder_path'];
+ $ckfinder_path = strtr($ckfinder_path, array("%m" => ckeditor_module_path('url'), "%l" => ckeditor_library_path('url')));
+ $ckfinder_path = str_replace('\\', '/', $cke_plugins_path);
+ $ckfinder_path = str_replace('//', '/', $cke_plugins_path);
+ //In D7 base path in URL mode is not needed, so we need to remove it with trailing slash (if exists)
+ $ckfinder_path = str_replace(array("%b/", "%b"), '', $ckfinder_path);
+ return $cke_static[$mode] = $ckfinder_path;
+ }
+ return $cke_static[$mode] = ckeditor_module_path('url') . '/ckfinder';
+ }
+ }
+ return $cke_static[$mode];
+}
+
+/**
+ * Implementation of hook_features_api().
+ *
+ * Allow exporting of CKEditor profiles by the Features module.
+ */
+function ckeditor_features_api() {
+ return array(
+ 'ckeditor_profile' => array(
+ 'name' => t('CKEditor profiles'),
+ 'default_hook' => 'ckeditor_profile_defaults',
+ 'default_file' => FEATURES_DEFAULTS_INCLUDED,
+ 'file' => drupal_get_path('module', 'ckeditor') . '/includes/ckeditor.features.inc',
+ )
+ );
+}
+
+/**
+ * Implementation of hook_file_download().
+ * Support for private downloads.
+ * CKEditor does not implement any kind of potection on private files.
+ */
+function ckeditor_file_download($uri) {
+ if ($path = file_create_url($uri)) {
+ $result = db_query("SELECT f.* FROM {file_managed} f WHERE uri = :uri", array(':uri' => $uri));
+ foreach ($result as $record) {
+ return NULL;
+ }
+ //No info in DB? Probably a file uploaded with FCKeditor / CKFinder
+ $global_profile = ckeditor_profile_load("CKEditor Global Profile");
+ //Assume that files inside of ckeditor directory belong to the CKEditor. If private directory is set, let the decision about protection to the user.
+ $private_dir_db = $private_dir = isset($global_profile->settings['private_dir']) ? trim($global_profile->settings['private_dir'], '\/') : '';
+ $private_dir_db = str_replace(array('\\%u', '\\%n'), array('', ''), $private_dir_db);
+ $private_dir = preg_quote($private_dir, '#');
+ $private_dir = strtr($private_dir, array('%u' => '(\d+)', '%n' => '([\x80-\xF7 \w@.-]+)')); // regex for %n taken from user_validate_name() in user.module
+ $private_dir = trim($private_dir, '\/');
+
+ $regex = '#^' . preg_quote('private://', '#') . $private_dir . '#';
+
+ if (!strstr($uri, 'private://') && !strstr($uri, 'public://')) {
+ $path = 'private://' . $uri;
+ }
+ else {
+ $path = $uri;
+ }
+ //check if CKEditor's "Enable access to files located in the private folder" option is disabled or enabled
+ $allow_download_private_files = FALSE;
+ if (isset($global_profile->settings['ckeditor_allow_download_private_files']) && $global_profile->settings['ckeditor_allow_download_private_files'] === 't') {
+ $allow_download_private_files = TRUE;
+ }
+ //denied access to file if private upload is set and CKEditor's "Enable access to files located in the private folder" option is disabled
+ if ($allow_download_private_files == FALSE)
+ return NULL;
+ //check if file can be served by comparing regex and path to file
+ if (preg_match($regex, $path)) {
+ $info = image_get_info($uri);
+ return array('Content-Type' => $info['mime_type']);
+ }
+ }
+}
+
+/**
+ * Implementation of hook_modules_enabled().
+ *
+ * Enable disabled plugins by hook_modules_disabled().
+ */
+function ckeditor_modules_enabled($modules) {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $profiles_list = ckeditor_profile_input_formats();
+ $plugins_list = ckeditor_load_plugins();
+ foreach ($profiles_list AS $_profile => $_inputs) {
+ $changed = FALSE;
+ $profile = ckeditor_profile_load($_profile);
+ if (!isset($profile->settings['loadPlugins'])) continue;
+ foreach (array_keys((array) $profile->settings['loadPlugins']) as $plugin_name) {
+ if (isset($profile->settings['loadPlugins'][$plugin_name]['active']) && $profile->settings['loadPlugins'][$plugin_name]['active'] == 0 && array_key_exists($plugin_name, $plugins_list)) {
+ $profile->settings['loadPlugins'][$plugin_name]['active'] = 1;
+ $changed = TRUE;
+ }
+ }
+ if ($changed === TRUE) {
+ db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => serialize($profile->settings)
+ ))
+ ->condition('name', $profile->name, '=')
+ ->execute();
+ }
+ }
+}
+
+/**
+ * Implementation of hook_modules_disabled().
+ *
+ * Disable enabled plugins in CKEditor profiles added by disabled modules.
+ */
+function ckeditor_modules_disabled($modules) {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $profiles_list = ckeditor_profile_input_formats();
+ $plugins_list = ckeditor_load_plugins();
+ foreach ($profiles_list AS $_profile => $_inputs) {
+ $changed = FALSE;
+ $profile = ckeditor_profile_load($_profile);
+ foreach (array_keys((array) $profile->settings['loadPlugins']) as $plugin_name) {
+ if (!array_key_exists($plugin_name, $plugins_list)) {
+ $profile->settings['loadPlugins'][$plugin_name]['active'] = 0;
+ $changed = TRUE;
+ }
+ }
+ if ($changed === TRUE) {
+ db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => serialize($profile->settings)
+ ))
+ ->condition('name', $profile->name, '=')
+ ->execute();
+ }
+ }
+}
+
+/**
+ * Implementation of hook_modules_uninstalled().
+ *
+ * Remove enabled plugins in CKEditor profiles added by uninstalled modules.
+ */
+function ckeditor_modules_uninstalled($modules) {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $profiles_list = ckeditor_profile_input_formats();
+ $plugins_list = ckeditor_load_plugins();
+ foreach ($profiles_list AS $_profile => $_inputs) {
+ $changed = FALSE;
+ $profile = ckeditor_profile_load($_profile);
+ foreach (array_keys((array) $profile->settings['loadPlugins']) as $plugin_name) {
+ if (!array_key_exists($plugin_name, $plugins_list)) {
+ unset($profile->settings['loadPlugins'][$plugin_name]);
+ $changed = TRUE;
+ }
+ }
+ if ($changed === TRUE) {
+ db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => serialize($profile->settings)
+ ))
+ ->condition('name', $profile->name, '=')
+ ->execute();
+ }
+ }
+} \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.styles.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.styles.js
new file mode 100644
index 0000000..fc80b18
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor.styles.js
@@ -0,0 +1,91 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/*
+ * This file is used/requested by the 'Styles' button.
+ * The 'Styles' button is not enabled by default in DrupalFull and DrupalFiltered toolbars.
+ */
+if(typeof(CKEDITOR) !== 'undefined') {
+ CKEDITOR.addStylesSet( 'drupal',
+ [
+ /* Block Styles */
+
+ // These styles are already available in the "Format" drop-down list, so they are
+ // not needed here by default. You may enable them to avoid placing the
+ // "Format" drop-down list in the toolbar, maintaining the same features.
+ /*
+ { name : 'Paragraph' , element : 'p' },
+ { name : 'Heading 1' , element : 'h1' },
+ { name : 'Heading 2' , element : 'h2' },
+ { name : 'Heading 3' , element : 'h3' },
+ { name : 'Heading 4' , element : 'h4' },
+ { name : 'Heading 5' , element : 'h5' },
+ { name : 'Heading 6' , element : 'h6' },
+ { name : 'Preformatted Text', element : 'pre' },
+ { name : 'Address' , element : 'address' },
+ */
+
+ { name : 'Blue Title' , element : 'h3', styles : { 'color' : 'Blue' } },
+ { name : 'Red Title' , element : 'h3', styles : { 'color' : 'Red' } },
+
+ /* Inline Styles */
+
+ // These are core styles available as toolbar buttons. You may opt enabling
+ // some of them in the "Styles" drop-down list, removing them from the toolbar.
+ /*
+ { name : 'Strong' , element : 'strong', overrides : 'b' },
+ { name : 'Emphasis' , element : 'em' , overrides : 'i' },
+ { name : 'Underline' , element : 'u' },
+ { name : 'Strikethrough' , element : 'strike' },
+ { name : 'Subscript' , element : 'sub' },
+ { name : 'Superscript' , element : 'sup' },
+ */
+
+ { name : 'Marker: Yellow' , element : 'span', styles : { 'background-color' : 'Yellow' } },
+ { name : 'Marker: Green' , element : 'span', styles : { 'background-color' : 'Lime' } },
+
+ { name : 'Big' , element : 'big' },
+ { name : 'Small' , element : 'small' },
+ { name : 'Typewriter' , element : 'tt' },
+
+ { name : 'Computer Code' , element : 'code' },
+ { name : 'Keyboard Phrase' , element : 'kbd' },
+ { name : 'Sample Text' , element : 'samp' },
+ { name : 'Variable' , element : 'var' },
+
+ { name : 'Deleted Text' , element : 'del' },
+ { name : 'Inserted Text' , element : 'ins' },
+
+ { name : 'Cited Work' , element : 'cite' },
+ { name : 'Inline Quotation' , element : 'q' },
+
+ { name : 'Language: RTL' , element : 'span', attributes : { 'dir' : 'rtl' } },
+ { name : 'Language: LTR' , element : 'span', attributes : { 'dir' : 'ltr' } },
+
+ /* Object Styles */
+
+ {
+ name : 'Image on Left',
+ element : 'img',
+ attributes :
+ {
+ 'style' : 'padding: 5px; margin-right: 5px',
+ 'border' : '2',
+ 'align' : 'left'
+ }
+ },
+
+ {
+ name : 'Image on Right',
+ element : 'img',
+ attributes :
+ {
+ 'style' : 'padding: 5px; margin-left: 5px',
+ 'border' : '2',
+ 'align' : 'right'
+ }
+ }
+ ]);
+} \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor/COPY_HERE.txt b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor/COPY_HERE.txt
new file mode 100644
index 0000000..21920c7
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/ckeditor/COPY_HERE.txt
@@ -0,0 +1,3 @@
+Go to http://ckeditor.com and download the latest version. Then
+uncompress the contents of the "ckeditor" directory of the downloaded file to
+this folder (modules/ckeditor/ckeditor). \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/about.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/about.png
new file mode 100644
index 0000000..0322c35
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/about.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/anchor.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/anchor.png
new file mode 100644
index 0000000..4cca695
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/anchor.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/backgroundColor.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/backgroundColor.png
new file mode 100644
index 0000000..40b50a1
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/backgroundColor.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiLeft.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiLeft.png
new file mode 100644
index 0000000..f10b360
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiLeft.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiRight.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiRight.png
new file mode 100644
index 0000000..ba1ec2e
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bidiRight.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockJustify.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockJustify.png
new file mode 100644
index 0000000..a3f3a83
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockJustify.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockQuote.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockQuote.png
new file mode 100644
index 0000000..c9b71c5
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/blockQuote.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bold.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bold.png
new file mode 100644
index 0000000..e1094e2
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bold.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bulletedList.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bulletedList.png
new file mode 100644
index 0000000..8d0896a
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/bulletedList.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/button.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/button.png
new file mode 100644
index 0000000..21484f8
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/button.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/centerJustify.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/centerJustify.png
new file mode 100644
index 0000000..b4d9f96
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/centerJustify.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkSpelling.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkSpelling.png
new file mode 100644
index 0000000..8e580c7
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkSpelling.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkbox.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkbox.png
new file mode 100644
index 0000000..5592a45
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/checkbox.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/copy.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/copy.png
new file mode 100644
index 0000000..fd5bb46
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/copy.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/createDivContainer.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/createDivContainer.png
new file mode 100644
index 0000000..5b13638
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/createDivContainer.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/cut.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/cut.png
new file mode 100644
index 0000000..24b5d57
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/cut.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/decreaseIndent.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/decreaseIndent.png
new file mode 100644
index 0000000..c23a31b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/decreaseIndent.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalbreak.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalbreak.png
new file mode 100644
index 0000000..97dfea4
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalbreak.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalpagebreak.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalpagebreak.png
new file mode 100644
index 0000000..ab96d5d
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/drupalpagebreak.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/find.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/find.png
new file mode 100644
index 0000000..7244dc2
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/find.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/flash.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/flash.png
new file mode 100644
index 0000000..09c0da0
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/flash.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/font.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/font.png
new file mode 100644
index 0000000..d8fa5b7
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/font.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/fontSize.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/fontSize.png
new file mode 100644
index 0000000..8ad6ce4
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/fontSize.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/form.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/form.png
new file mode 100644
index 0000000..35e055b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/form.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/format.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/format.png
new file mode 100644
index 0000000..3d813f6
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/format.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/group.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/group.png
new file mode 100644
index 0000000..977e58e
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/group.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/hiddenField.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/hiddenField.png
new file mode 100644
index 0000000..4714544
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/hiddenField.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/horizontalLine.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/horizontalLine.png
new file mode 100644
index 0000000..2453110
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/horizontalLine.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/icon.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/icon.png
new file mode 100644
index 0000000..99606b2
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/icon.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/iframe.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/iframe.png
new file mode 100644
index 0000000..89e456c
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/iframe.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/image.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/image.png
new file mode 100644
index 0000000..28e09de
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/image.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/imageButton.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/imageButton.png
new file mode 100644
index 0000000..0d7d072
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/imageButton.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/increaseIndent.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/increaseIndent.png
new file mode 100644
index 0000000..4341b2f
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/increaseIndent.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/index.html b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/index.html
new file mode 100644
index 0000000..fa6d84e
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/index.html
@@ -0,0 +1 @@
+<html><body bgcolor="#FFFFFF"></body></html> \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/italic.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/italic.png
new file mode 100644
index 0000000..8ada3d1
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/italic.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/leftJustify.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/leftJustify.png
new file mode 100644
index 0000000..76aa5b4
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/leftJustify.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/link.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/link.png
new file mode 100644
index 0000000..0c2052d
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/link.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linkit.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linkit.png
new file mode 100644
index 0000000..dd25023
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linkit.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktomenu.gif b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktomenu.gif
new file mode 100644
index 0000000..51a908e
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktomenu.gif
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktonode.gif b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktonode.gif
new file mode 100644
index 0000000..f09db7c
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/linktonode.gif
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/maximize.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/maximize.png
new file mode 100644
index 0000000..8ea2a62
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/maximize.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/newPage.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/newPage.png
new file mode 100644
index 0000000..58071d9
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/newPage.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/numberedList.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/numberedList.png
new file mode 100644
index 0000000..651395e
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/numberedList.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pageBreakPrinting.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pageBreakPrinting.png
new file mode 100644
index 0000000..5548558
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pageBreakPrinting.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/paste.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/paste.png
new file mode 100644
index 0000000..3b9c091
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/paste.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pastePlainText.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pastePlainText.png
new file mode 100644
index 0000000..5a7a4ee
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pastePlainText.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pasteWord.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pasteWord.png
new file mode 100644
index 0000000..014b9eb
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/pasteWord.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/preview.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/preview.png
new file mode 100644
index 0000000..8a22da1
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/preview.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/print.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/print.png
new file mode 100644
index 0000000..07489b3
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/print.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/radioButton.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/radioButton.png
new file mode 100644
index 0000000..af40a3d
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/radioButton.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/readmoreButton.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/readmoreButton.png
new file mode 100644
index 0000000..76bcf5e
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/readmoreButton.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/redo.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/redo.png
new file mode 100644
index 0000000..cc27e1f
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/redo.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/removeFormat.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/removeFormat.png
new file mode 100644
index 0000000..ec18656
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/removeFormat.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/replace.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/replace.png
new file mode 100644
index 0000000..8263ebb
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/replace.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/rightJustify.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/rightJustify.png
new file mode 100644
index 0000000..1987182
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/rightJustify.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/save.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/save.png
new file mode 100644
index 0000000..753415b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/save.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectAll.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectAll.png
new file mode 100644
index 0000000..ed9665a
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectAll.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectionField.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectionField.png
new file mode 100644
index 0000000..dd6715b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/selectionField.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/showBlocks.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/showBlocks.png
new file mode 100644
index 0000000..d89520c
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/showBlocks.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/smiley.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/smiley.png
new file mode 100644
index 0000000..f9ad72a
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/smiley.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/source.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/source.png
new file mode 100644
index 0000000..1c55058
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/source.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/spacer.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/spacer.png
new file mode 100644
index 0000000..cca2392
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/spacer.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/specialCharacter.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/specialCharacter.png
new file mode 100644
index 0000000..f4a5594
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/specialCharacter.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/strike.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/strike.png
new file mode 100644
index 0000000..b295a96
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/strike.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/styles.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/styles.png
new file mode 100644
index 0000000..54e1f7b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/styles.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/subscript.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/subscript.png
new file mode 100644
index 0000000..e60bf6c
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/subscript.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/superscript.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/superscript.png
new file mode 100644
index 0000000..b5ac6ee
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/superscript.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/table.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/table.png
new file mode 100644
index 0000000..d86417d
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/table.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/templates.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/templates.png
new file mode 100644
index 0000000..c208cd2
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/templates.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textColor.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textColor.png
new file mode 100644
index 0000000..006ed64
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textColor.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textField.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textField.png
new file mode 100644
index 0000000..f6b412a
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textField.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textarea.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textarea.png
new file mode 100644
index 0000000..3b12d4c
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/textarea.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/underline.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/underline.png
new file mode 100644
index 0000000..52b93ce
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/underline.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/undo.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/undo.png
new file mode 100644
index 0000000..90587f8
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/undo.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/unlink.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/unlink.png
new file mode 100644
index 0000000..e8b8fe5
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/buttons/unlink.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/delete.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/delete.png
new file mode 100644
index 0000000..08f2493
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/delete.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/tick.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/images/tick.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.inc b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.inc
new file mode 100644
index 0000000..b3c576f
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.inc
@@ -0,0 +1,1832 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+
+/**
+ * Main administrative page
+ */
+function ckeditor_admin_main() {
+ global $base_url;
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $editor_path = ckeditor_path('local');
+ $ckconfig_file = $editor_path . '/config.js';
+
+ //check if CKEditor plugin is installed
+ if (!_ckeditor_requirements_isinstalled()) {
+ drupal_set_message(t(
+ 'Checking for !filename or !file.', array(
+ '!filename' => '<code>' . $ckconfig_file . '</code>',
+ '!file' => '<code>sites/all/libraries/ckeditor/ckeditor.js</code>'
+ )
+ ));
+ drupal_set_message(t(
+ 'The CKEditor component is not installed correctly. Please go to the !ckeditorlink in order to download the latest version. After that you must extract the files to the !ckeditorpath or !librarypath directory and make sure that the !ckeditorfile or !ckeditorlibrary file exists. Refer to the !readme file for more information.', array(
+ '!ckeditorlink' => l(t('CKEditor homepage'), 'http://ckeditor.com/download'),
+ '!readme' => l(t('README.txt'), $base_url . '/' . drupal_get_path('module', 'ckeditor') . '/README.txt', array('absolute' => TRUE)),
+ '!ckeditorpath' => '<code>sites/all/modules/ckeditor/ckeditor</code>',
+ '!ckeditorfile' => '<code>sites/all/modules/ckeditor/ckeditor/ckeditor.js</code>',
+ '!ckeditorlibrary' => '<code>sites/all/libraries/ckeditor/ckeditor.js</code>',
+ '!librarypath' => '<code>sites/all/libraries/ckeditor</code>'
+ )
+ ), 'error');
+ drupal_set_message(t(
+ 'If you have CKEditor already installed, edit the <strong>!editg</strong> and update the CKEditor path.', array(
+ '!editg' => l(t('CKEditor Global Profile'), 'admin/config/content/ckeditor/editg')
+ )
+ ), 'warning');
+
+ return '';
+ }
+
+ if (module_exists('wysiwyg')) {
+ drupal_set_message(t(
+ 'The WYSIWYG module was detected. Using both modules at the same time may cause problems. It is recommended to turn the WYSIWYG module off (!wysiwygdisablelink).', array(
+ '!wysiwygdisablelink' => l(t('click here to disable'), 'ckeditor/disable/wysiwyg/' . drupal_get_token('ckeditorDisableWysiwyg'))
+ )
+ ), 'warning');
+ }
+
+ //find profile other than Global
+ $result = db_select('ckeditor_settings', 's')->fields('s', array('name'))->condition('name', 'CKEditor Global Profile', '<>')->range(0, 1)->execute()->fetchAssoc();
+ if (!$result) {
+ drupal_set_message(t('No CKEditor profiles found. Right now nobody is able to use CKEditor. Create a new profile below.'), 'error');
+ }
+
+ return ckeditor_profile_overview();
+}
+
+/**
+ * Controller for CKEditor profiles.
+ */
+function ckeditor_profile_overview() {
+ $output = '';
+ $skins = ckeditor_load_skin_options();
+ $global_profile = ckeditor_profile_load('CKEditor Global Profile');
+ if (isset($global_profile->settings['skin']) && !array_key_exists($global_profile->settings['skin'], $skins)) {
+ drupal_set_message(t('The <em>CKEditor Global Profile</em> profile is using %skin skin which cannot be found. Please <a href="@profile_settings">update your settings</a>.', array('%skin' => $global_profile->settings['skin'], '@profile_settings' => url('admin/config/content/ckeditor/editg'))), 'warning');
+ }
+ $profiles = ckeditor_profile_load();
+ if ($profiles) {
+ $access_ckeditor_roles = user_roles(FALSE, 'access ckeditor');
+ $header = array(t('Profile'), t('Input format'), t('Operations'));
+ $plugins = ckeditor_load_plugins();
+ $disabled_plugins = array();
+ foreach ($profiles as $p) {
+ if ($p->name !== "CKEditor Global Profile") {
+ if (isset($p->settings['loadPlugins']) && is_array($p->settings['loadPlugins']) && count($p->settings['loadPlugins']) > 0) {
+ $changed = FALSE;
+ foreach ($p->settings['loadPlugins'] as $plugin_name => $plugin_settings) {
+ if (!array_key_exists($plugin_name, $plugins)) {
+ if (isset($plugin_settings['active']) && $plugin_settings['active'] == 0) {
+ continue;
+ }
+ if (!isset($disabled_plugins[$p->name])) {
+ $disabled_plugins[$p->name] = array();
+ }
+ $p->settings['loadPlugins'][$plugin_name]['active'] = 0;
+ $disabled_plugins[$p->name][] = $plugin_name;
+ $changed = TRUE;
+ }
+ }
+ if ($changed === TRUE) {
+ db_update('ckeditor_settings')
+ ->fields(array(
+ 'settings' => serialize($p->settings)
+ ))
+ ->condition('name', $p->name, '=')
+ ->execute();
+ }
+ }
+ $rows[] = array(
+ array('data' => $p->name, 'valign' => 'top'),
+ array('data' => implode("<br />\n", $p->input_formats)),
+ array(
+ 'data' =>
+ l(t('edit'), 'admin/config/content/ckeditor/edit/' . urlencode($p->name)) . ' ' .
+ l(t('clone'), 'admin/config/content/ckeditor/clone/' . urlencode($p->name)) . ' ' .
+ l(t('delete'), 'admin/config/content/ckeditor/delete/' . urlencode($p->name)),
+ 'valign' => 'top'
+ )
+ );
+ }
+ }
+
+ if (count($disabled_plugins) > 0) {
+ $msg = t("The following plugins could not be found and were automatically disabled in CKEditor profiles:");
+ foreach ($disabled_plugins as $profile_name => $profile_plugins) {
+ $msg .= "<br/><br/>";
+ $msg .= t("<b>Profile</b>: %profile_name", array("%profile_name" => $profile_name));
+ $msg .= "<br/>";
+ $msg .= t("<b>Plugins</b>: %profile_plugins", array("%profile_plugins" => implode(', ', $profile_plugins)));
+ }
+ drupal_set_message($msg, 'warning');
+ }
+
+ $output .= '<h3>' . t('Profiles') . '</h3>';
+ $output .= theme('table', array("header" => $header, "rows" => $rows));
+ $output .= '<p>' . l(t('Create a new profile'), 'admin/config/content/ckeditor/add') . '</p>';
+ }
+ else {
+ drupal_set_message(t(
+ 'No profiles found. Click here to !create.', array(
+ '!create' => l(t('create a new profile'), 'admin/config/content/ckeditor/add')
+ )
+ ), 'warning');
+ }
+
+ $rows = array();
+ if (!isset($profiles['CKEditor Global Profile'])) {
+ drupal_set_message(t(
+ 'The global profile can not be found. Click here to !create.', array(
+ '!create' => l(t('create the global profile'), 'admin/config/content/ckeditor/addg')
+ )
+ ), 'warning');
+ }
+ else {
+ $output .= "<h3>" . t("Global settings") . "</h3>";
+ $rows[] = array(
+ array('data' => t('CKEditor Global Profile')),
+ array('data' => l(t('edit'), 'admin/config/content/ckeditor/editg'), 'valign' => 'top')
+ );
+ $output .= theme('table', array("header" => array(t('Profile'), t('Operations')), "rows" => $rows));
+ }
+ return $output;
+}
+
+/**
+ * Form builder for a global profile
+ */
+function ckeditor_admin_global_profile_form($form, $form_state, $mode = 'add') {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ if ($mode == 'edit') {
+ $profile = ckeditor_profile_load('CKEditor Global Profile');
+
+ $form['_profile'] = array(
+ '#type' => 'value',
+ '#value' => $profile,
+ );
+ }
+ else {
+ $profile = new stdClass();
+ }
+
+ if ($mode == 'add') {
+ $data = ckeditor_profile_load('CKEditor Global Profile');
+ if (!empty($data)) {
+ drupal_set_message(t('The global profile already exists. Only one global profile is allowed.'), 'error');
+ drupal_not_found();
+ }
+
+ $btn = t('Create a global profile');
+ }
+ else {
+ $btn = t('Update the global profile');
+ }
+
+ $orig_formats = filter_formats();
+ $formats = array();
+ foreach ($orig_formats AS $format) {
+ $formats[$format->format] = $format->name;
+ }
+
+ $drupal_base_path = ckeditor_base_path('relative');
+ $drupal_library_path = ckeditor_library_path('relative');
+ $module_drupal_path = ckeditor_module_path('relative');
+ $skin_options = ckeditor_load_skin_options();
+
+ $form['appearance'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Editor appearance'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+
+ //if skin is not set or not exists select default skin (moono or skin) or first on the skin list
+ if (empty($profile->settings['skin']) || (!empty($profile->settings['skin']) && !array_key_exists($profile->settings['skin'], $skin_options))) {
+ $profile->settings['skin'] = ckeditor_default_skin();
+ }
+
+ $form['appearance']['skin'] = array(
+ '#type' => 'select',
+ '#title' => t('Skin'),
+ '#default_value' => $profile->settings['skin'],
+ '#options' => $skin_options,
+ '#description' => t('Choose a CKEditor skin.'),
+ );
+
+ $form['ckeditor_advanced_settings'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Advanced settings'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+
+ $form['ckeditor_advanced_settings']['ckeditor_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Path to CKEditor'),
+ '#default_value' => !empty($profile->settings['ckeditor_path']) ? $profile->settings['ckeditor_path'] : '%m/ckeditor',
+ '#size' => 40,
+ '#maxlength' => 128,
+ '#description' => t(
+ 'The path to CKEditor (the WYSIWYG rich text editor downloaded from !ckeditorcom) relative to the document root.', array(
+ '!ckeditorcom' => l(t('ckeditor.com'), 'http://ckeditor.com/download')
+ )
+ ) .
+ '<br /> ' .
+ t('Available placeholders:!b &ndash; path of the Drupal installation (!base) !m &ndash; path where the CKEditor module is stored (!module).!l &ndash; path to the libraries directory (!library)', array(
+ '!b' => '<br /><code>%b</code>',
+ '!m' => '<br /><code>%m</code>',
+ '!l' => '<br /><code>%l</code>',
+ '!base' => '<code>' . $drupal_base_path . '</code>',
+ '!module' => '<code>' . $module_drupal_path . '</code>',
+ '!library' => '<code>' . $drupal_library_path . '</code>',
+ )
+ ) .
+ '<br /> ' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . ckeditor_path('relative') . '</code>'
+ )
+ ),
+ '#required' => TRUE
+ );
+
+ $form['ckeditor_advanced_settings']['ckeditor_local_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Local path to CKEditor'),
+ '#default_value' => isset($profile->settings['ckeditor_local_path']) ? $profile->settings['ckeditor_local_path'] : '',
+ '#size' => 40,
+ '#maxlength' => 128,
+ '#description' => t(
+ 'The path to the local directory (on the server) that points to the path defined above. Enter either an absolute server path or a path relative to the !indexphp file. If left empty, the CKEditor module will try to find the right path.', array(
+ '!indexphp' => '<code>index.php</code>'
+ )
+ ) .
+ '<br /> ' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . ckeditor_path('local') . '</code>'
+ )
+ )
+ );
+
+ $form['ckeditor_advanced_settings']['ckeditor_plugins_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Path to the CKEditor plugins directory'),
+ '#default_value' => !empty($profile->settings['ckeditor_plugins_path']) ? $profile->settings['ckeditor_plugins_path'] : '%m/plugins',
+ '#size' => 40,
+ '#maxlength' => 128,
+ '#description' => t('Path to the CKEditor plugins directory relative to the document root.') .
+ '<br />' .
+ t('Available placeholders:!b &ndash; path of the Drupal installation (!base) !m &ndash; the base URL path where the CKEditor module is stored (!module).!l &ndash; the base URL path to the libraries directory (!library)', array(
+ '!b' => '<br /><code>%b</code>',
+ '!m' => '<br /><code>%m</code>',
+ '!l' => '<br /><code>%l</code>',
+ '!base' => '<code>' . $drupal_base_path . '</code>',
+ '!module' => '<code>' . $module_drupal_path . '</code>',
+ '!library' => '<code>' . $drupal_library_path . '</code>',
+ )
+ ) .
+ '<br /> ' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . ckeditor_plugins_path('relative') . '</code>'
+ )
+ )
+ );
+
+ $form['ckeditor_advanced_settings']['ckeditor_plugins_local_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Local path to the CKEditor plugins directory'),
+ '#default_value' => isset($profile->settings['ckeditor_plugins_local_path']) ? $profile->settings['ckeditor_plugins_local_path'] : '',
+ '#size' => 40,
+ '#maxlength' => 128,
+ '#description' => t(
+ 'The path to the local directory (on the server) that points to the path defined above. Enter either an absolute server path or a path relative to the !indexphp file. If left empty, the CKEditor module will try to find the right path.', array(
+ '!indexphp' => '<code>index.php</code>'
+ )
+ ) .
+ '<br /> ' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . ckeditor_plugins_path('local') . '</code>'
+ )
+ )
+ );
+
+ $form['ckeditor_advanced_settings']['ckfinder_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Path to CKFinder'),
+ '#default_value' => !empty($profile->settings['ckfinder_path']) ? $profile->settings['ckfinder_path'] : '%m/ckfinder',
+ '#size' => 40,
+ '#maxlength' => 128,
+ '#description' => t(
+ 'The path to CKFinder (AJAX based file manager downloaded from !ckfindercom) relative to the document root.', array(
+ '!ckfindercom' => l(t('ckfinder.com'), 'http://ckfinder.com/download')
+ )
+ ) .
+ '<br />' .
+ t('Available placeholders:!b &ndash; path of the Drupal installation (!base) !m &ndash; path where the CKEditor module is stored (!module).!l &ndash; path to the libraries directory (!library)', array(
+ '!b' => '<br /><code>%b</code>',
+ '!m' => '<br /><code>%m</code>',
+ '!l' => '<br /><code>%l</code>',
+ '!base' => '<code>' . $drupal_base_path . '</code>',
+ '!module' => '<code>' . $module_drupal_path . '</code>',
+ '!library' => '<code>' . $drupal_library_path . '</code>'
+ )
+ ) .
+ '<br /> ' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . ckfinder_path('relative') . '</code>'
+ )
+ )
+ );
+
+ $form['ckeditor_advanced_settings']['ckfinder_local_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Local path to CKFinder'),
+ '#default_value' => isset($profile->settings['ckfinder_local_path']) ? $profile->settings['ckfinder_local_path'] : '',
+ '#size' => 40,
+ '#maxlength' => 128,
+ '#description' => t(
+ 'The path to the local directory (on the server) that points to the path defined above. Enter either an absolute server path or a path relative to the !indexphp file. If left empty, the CKEditor module will try to find the right path.', array(
+ '!indexphp' => '<code>index.php</code>'
+ )
+ ) .
+ '<br /> ' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . ckfinder_path('local') . '</code>'
+ )
+ )
+ );
+
+ //@todo DOWNLOAD API
+ if (variable_get('file_default_scheme', '') == 'private') {
+ $form['ckeditor_advanced_settings']['ckeditor_allow_download_private_files'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Enable access to files located in the private folder'),
+ '#default_value' => !empty($profile->settings['ckeditor_allow_download_private_files']),
+ '#return_value' => 't',
+ '#description' => t(
+ '<strong>Use this option with care.</strong> If checked, CKEditor will allow anyone knowing the URL to view a file located inside of the private path (!private_path), but only if there is no information about the file in the Drupal database. If the path below is specified, anyone will have access only to that location.', array(
+ '!private_path' => '<code>' . variable_get('file_private_path', '') . '</code>'
+ )
+ ),
+ '#required' => FALSE
+ );
+ $current_private_dir = !empty($profile->settings['private_dir']) ? $profile->settings['private_dir'] : '';
+ $form['ckeditor_advanced_settings']['private_dir'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Location of files uploaded with CKEditor to the private folder'),
+ '#default_value' => !empty($profile->settings['private_dir']) ? $profile->settings['private_dir'] : '',
+ '#size' => 40,
+ '#maxlength' => 255,
+ '#description' => t('The path relative to the location of the private directory where CKEditor should store uploaded files.') .
+ '<br />' .
+ t('Available wildcard characters:!u &ndash; User ID.!n &ndash; Username', array(
+ '!u' => '<br/><code>%u</code>',
+ '!n' => '<br /><code>%n</code>'
+ )
+ ) .
+ '<br />' .
+ t('System path to the private folder is: !system_path.', array(
+ '!system_path' => '<code>' . realpath(variable_get('file_private_path', conf_path() . '/files')) . DIRECTORY_SEPARATOR . '</code>'
+ )
+ )
+ );
+ }
+
+ if (function_exists('linktocontent_node_menu') && function_exists('pathfilter_filter')) {
+ $form['ckeditor_advanced_settings']['linktoc'] = array(
+ '#type' => 'select',
+ '#options' => array('p' => t('Link to paths only'), 'n' => t('Link using internal: links'), 'pn' => t('Allow the user to select between paths and internal links')),
+ '#title' => t('Path Filter & Link To Content integration'),
+ '#default_value' => empty($profile->settings['linktoc']) ? 'p' : $profile->settings['linktoc'],
+ '#description' => t(
+ 'With the !plink extension it is possible to use internal: links. By default the !link extension is linking to nodes using paths.', array(
+ '!plink' => l(t('Path Filter'), 'http://drupal.org/project/pathfilter'),
+ '!link' => l(t('Link To Content'), 'http://drupal.org/project/linktocontent')
+ )
+ )
+ );
+ }
+
+ $form['ckeditor_advanced_settings']['ckeditor_aggregate'] = array(
+ '#type' => 'radios',
+ '#title' => t('Aggregate <code>ckeditor.js</code>'),
+ '#default_value' => !empty($profile->settings['ckeditor_aggregate']) ? $profile->settings['ckeditor_aggregate'] : 'f',
+ '#options' => array(
+ 't' => t('Enabled'),
+ 'f' => t('Disabled')
+ ),
+ '#description' => t('When enabled, <code>ckeditor.js</code> will be aggregated if JavaScript aggregation is enabled. <strong>Not recommended</strong>.'),
+ );
+
+ $form['ckeditor_advanced_settings']['toolbar_wizard'] = array(
+ '#type' => 'radios',
+ '#title' => t('Use toolbar Drag&Drop feature'),
+ '#default_value' => !empty($profile->settings['toolbar_wizard']) ? $profile->settings['toolbar_wizard'] : 't',
+ '#options' => array(
+ 't' => t('Enabled'),
+ 'f' => t('Disabled')
+ ),
+ '#description' => t('When enabled, the toolbar can be built by using the drag-and-drop feature. Otherwise you will need to enter the toolbar configuration manually to the text box.'),
+ );
+
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => $btn
+ );
+
+ return $form;
+}
+
+/**
+ * Form validation for a global profile
+ */
+function ckeditor_admin_global_profile_form_validate($form, &$form_state) {
+
+}
+
+/**
+ * Submit form for a global profile
+ */
+function ckeditor_admin_global_profile_form_submit($form, &$form_state) {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $edit = & $form_state['values'];
+ $edit['name'] = 'CKEditor Global Profile';
+
+ if (isset($edit['_profile'])) {
+ ckeditor_profile_delete($edit['_profile']->name);
+ }
+
+ //strip whitespaces
+ if (empty($edit['ckeditor_local_path'])) {
+ $edit['ckeditor_local_path'] = '';
+ }
+ else {
+ $edit['ckeditor_local_path'] = trim($edit['ckeditor_local_path']);
+ }
+
+ //strip slash from the end
+ if (empty($edit['ckeditor_path'])) {
+ $edit['ckeditor_path'] = '';
+ }
+ $edit['ckeditor_path'] = trim(rtrim($edit['ckeditor_path'], "/"));
+ if ($edit['ckeditor_path'] && 0 !== strpos($edit['ckeditor_path'], "/") && 0 !== strpos($edit['ckeditor_path'], "%")) {
+ //ensure that slash is at the beginning
+ $edit['ckeditor_path'] = "/" . $edit['ckeditor_path'];
+ }
+ //no slash at the end
+ $edit['ckeditor_local_path'] = trim(rtrim($edit['ckeditor_local_path'], "/"));
+
+ //strip whitespaces
+ if (empty($edit['ckeditor_plugins_local_path'])) {
+ $edit['ckeditor_plugins_local_path'] = '';
+ }
+ else {
+ $edit['ckeditor_plugins_local_path'] = trim($edit['ckeditor_plugins_local_path']);
+ }
+
+ //strip slash from the end
+ if (empty($edit['ckeditor_plugins_path'])) {
+ $edit['ckeditor_plugins_path'] = '';
+ }
+ $edit['ckeditor_plugins_path'] = trim(rtrim($edit['ckeditor_plugins_path'], "/"));
+ if ($edit['ckeditor_plugins_path'] && 0 !== strpos($edit['ckeditor_plugins_path'], "/") && 0 !== strpos($edit['ckeditor_plugins_path'], "%")) {
+ //ensure that slash is at the beginning
+ $edit['ckeditor_plugins_path'] = "/" . $edit['ckeditor_plugins_path'];
+ }
+ //no slash at the end
+ $edit['ckeditor_plugins_path'] = trim(rtrim($edit['ckeditor_plugins_path'], "/"));
+
+ //strip slash from the end
+ if (empty($edit['ckfinder_path'])) {
+ $edit['ckfinder_path'] = '';
+ }
+ $edit['ckfinder_path'] = trim(rtrim($edit['ckfinder_path'], "/"));
+ if ($edit['ckfinder_path'] && 0 !== strpos($edit['ckfinder_path'], "/") && 0 !== strpos($edit['ckfinder_path'], "%")) {
+ //ensure that slash is at the beginning
+ $edit['ckfinder_path'] = "/" . $edit['ckfinder_path'];
+ }
+
+ //no slash at the end
+ $edit['ckfinder_local_path'] = trim(rtrim($edit['ckfinder_local_path'], "/"));
+
+ $settings = ckeditor_admin_values_to_settings($edit);
+ db_insert('ckeditor_settings')
+ ->fields(array(
+ "name" => $edit["name"],
+ "settings" => $settings
+ ))
+ ->execute();
+
+ drupal_set_message(t('The CKEditor global profile was saved.'));
+ $form_state['redirect'] = 'admin/config/content/ckeditor';
+}
+
+/**
+ * Form builder for a profile
+ */
+function ckeditor_admin_profile_form($form, $form_state, $profile = NULL) {
+ global $theme;
+
+ if ($profile != NULL) {
+ $form['_profile'] = array(
+ '#type' => 'value',
+ '#value' => $profile,
+ );
+ }
+ else {
+ $profile = new stdClass();
+ }
+
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+
+ $editor_path = ckeditor_path('relative');
+ $editor_local_path = ckeditor_path('local');
+ $editor_url_path = ckeditor_path('url');
+ $module_drupal_path = ckeditor_module_path('relative');
+ $module_drupal_url_path = ckeditor_module_path('url');
+
+ drupal_add_js(array('ckeditor_version' => ckeditor_get_version()), 'setting');
+
+ $lang_options = ckeditor_load_lang_options();
+
+ $form['basic'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Basic setup'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE
+ );
+
+ switch (arg(4)) {
+ case 'clone':
+ //load all profiles to check their names
+ $profiles = ckeditor_profile_load();
+ $oldname = $profile->name;
+ $maxsize = 128; //default max name length
+
+ $res = array();
+ $pat = "/^(.*?)_([0-9]+)$/";
+ if (preg_match($pat, $oldname, $res)) { // oldname like 'name_nr'
+ $name = $res[1];
+ $num = $res[2] + 1;
+ }
+ else {
+ $name = $oldname;
+ $num = 2;
+ }
+
+ $newname = substr($name, 0, $maxsize - 3) . '_' . $num; // +limit
+ while (isset($profiles[$newname])) { //find next free number
+ $num++;
+ $newname = substr($name, 0, $maxsize - 3) . '_' . $num;
+ }
+ break;
+ case 'edit':
+ $newname = $profile->name;
+ break;
+ }
+
+ $global_profile = ckeditor_profile_load('CKEditor Global Profile');
+ $toolbar_wizard = !empty($global_profile->settings['toolbar_wizard']) ? $global_profile->settings['toolbar_wizard'] : 't';
+ drupal_add_js(array('ckeditor_toolbar_wizard' => $toolbar_wizard), 'setting');
+
+ $form['basic']['name'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Profile name'),
+ '#default_value' => !empty($profile->name) ? $newname : '',
+ '#size' => 40,
+ '#maxlength' => 128,
+ '#description' => t('Enter a name for this profile. This name is only visible within the CKEditor administration page.'),
+ '#required' => TRUE
+ );
+
+ $orig_formats = filter_formats();
+
+ if (arg(4) == 'edit' && !empty($profile->name)) {
+ $used_formats = db_select('ckeditor_input_format', 'f')->fields('f', array("format"))->distinct()->condition("f.name", array($profile->name), 'NOT IN')->execute()->fetchAllAssoc('format');
+ }
+ else {
+ $profile->input_formats = array();
+ $used_formats = db_select('ckeditor_input_format', 'f')->fields('f', array("format"))->distinct()->execute()->fetchAllAssoc('format');
+ }
+
+ $formats = array();
+ $input_format_config_links = array();
+ foreach ($orig_formats AS $format) {
+ if ((arg(4) == 'edit' && !empty($profile->input_formats) && array_key_exists($format->format, $profile->input_formats)) || !array_key_exists($format->format, $used_formats)) {
+ $formats[$format->format] = $format->name;
+ $input_format_config_links[$format->format] = array("name" => $format->name, "config_url" => url("admin/config/content/formats/" . $format->format));
+ }
+ }
+
+ $form['basic']['input_formats'] = array(
+ '#id' => 'input-formats',
+ '#type' => 'checkboxes',
+ '#title' => t('Text formats'),
+ '#default_value' => !empty($profile->input_formats) ? array_keys((array) $profile->input_formats) : array(),
+ '#options' => $formats,
+ '#description' => t('Choose the text formats where you want to load CKEditor.')
+ );
+
+ $form['security'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Security'),
+ '#description' => '<p>' . t('The CKEditor security system protects you from executing malicious code that is already in your database. In plain textareas database content is harmless because it is not executed, but the CKEditor WYSIWYG editor interprets HTML like a web browser and thus the content needs to be filtered before it is loaded.') . '</p>',
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE
+ );
+
+ $form['security']['filters'] = array(
+ '#id' => 'security-filters',
+ '#type' => 'container'
+ );
+
+ $form['security']['filters']['__header'] = array(
+ '#type' => 'item',
+ '#title' => t('Security filters'),
+ '#description' => t(
+ 'Below is a list of security filters along with their status for each text format.<br/><br/>The following statuses are available:!img_enabled - the filter is configured for a given text format and will be run on the content during the filtering proces.!img_disabled - the filter is disabled for a given text format and will not be run on the content during the filtering process.<br/><br/>In order to modify the security filters settings for each of the text formats, you need to visit the text format configuration sections as listed below: !elem_format_config', array(
+ '!img_enabled' => '</br><img src="' . $module_drupal_path . '/images/tick.png"/>',
+ '!img_disabled' => '</br><img src="' . $module_drupal_path . '/images/delete.png"/>',
+ '!elem_format_config' => '<ul class="text-formats-config"></ul>'
+ )
+ ),
+ '#weight' => -10
+ );
+
+ //get text formats filters
+ $input_format_filters = array();
+ foreach ($formats AS $key => $value) {
+ $input_format_filters[$key] = array();
+ $filters = filter_list_format($key);
+ foreach ($filters as $filter_name => $filter_settings) {
+ if ($filter_settings->status == 1) {
+ $input_format_filters[$key][$filter_name] = TRUE;
+ }
+ }
+ }
+ drupal_add_js(array('text_format_filters' => $input_format_filters, 'text_formats_config_links' => $input_format_config_links), 'setting');
+
+ $security_filters = ckeditor_security_filters();
+ _ckeditor_admin_profile_form_security_filters($form, $profile, $security_filters);
+
+ $form['security']['ss'] = array(
+ '#type' => 'radios',
+ '#title' => t('Security settings'),
+ '#default_value' => isset($profile->settings['ss']) ? $profile->settings['ss'] : '2',
+ '#options' => array(
+ '2' => t('Always run security filters for CKEditor.'),
+ '1' => t('Run security filters only when CKEditor is set to start automatically.'),
+ ),
+ '#description' => t('There are two ways of starting CKEditor: automatically and manually (via toggle). If you decide to apply security filters only when CKEditor starts automatically, you will not be protected when toggling manually from plain textarea to CKEditor. Choose this option only if you can detect various attacks (mainly XSS) by yourself just by looking at the HTML code.'),
+ );
+
+ $form['appearance'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Editor appearance'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ );
+
+ $form['appearance']['default'] = array(
+ '#type' => 'radios',
+ '#title' => t('Default state'),
+ '#default_value' => !empty($profile->settings['default']) ? $profile->settings['default'] : 't',
+ '#options' => array(
+ 't' => t('Enabled'),
+ 'f' => t('Disabled')
+ ),
+ '#description' => t('Default editor state. If disabled, the rich text editor may still be enabled by using toggle.'),
+ );
+
+ $form['appearance']['show_toggle'] = array(
+ '#type' => 'radios',
+ '#title' => t('Show the disable/enable rich text editor toggle'),
+ '#default_value' => !empty($profile->settings['show_toggle']) ? $profile->settings['show_toggle'] : 't',
+ '#options' => array(
+ 't' => t('Show'),
+ 'f' => t('Hide')
+ ),
+ '#description' => t('Whether or not to show the disable/enable rich text editor toggle below the textarea.'),
+ );
+
+ $ui_colors = array(
+ "default" => t('CKEditor default'),
+ "custom" => t('Select manually')
+ );
+ if (function_exists('color_get_palette')) {
+ // apparently $theme is not initialized (?)
+ if (empty($theme)) {
+ init_theme();
+ }
+ $palette = @color_get_palette($theme, FALSE); //[#652274]
+ $color_palette['default'] = '#D3D3D3';
+ if (!empty($palette)) {
+ if (!empty($palette['base'])) {
+ $color_palette['color_base'] = $palette['base'];
+ $ui_colors["color_base"] = t('Color module: base');
+ }
+ if (!empty($palette['top'])) {
+ $color_palette['color_top'] = $palette['top'];
+ $ui_colors["color_top"] = t('Color module: top');
+ }
+ if (!empty($palette['bottom'])) {
+ $color_palette['color_bottom'] = $palette['bottom'];
+ $ui_colors["color_bottom"] = t('Color module: bottom');
+ }
+ }
+ drupal_add_js(array('ckeditor_uicolor' => $color_palette), 'setting');
+ }
+
+ drupal_add_js('window.CKEDITOR_BASEPATH = "' . $editor_path . '/"', array('type' => 'inline', 'weight' => -100));
+ drupal_add_js($editor_url_path . '/ckeditor.js', array('type' => 'file', 'preprocess' => FALSE));
+ drupal_add_js($module_drupal_url_path . '/ckeditor.config.js', 'file');
+ drupal_add_js($module_drupal_url_path . '/includes/ckeditor.admin.js', 'file');
+
+ if ($toolbar_wizard == 't') {
+ if (module_exists('jquery_ui')) {
+ jquery_ui_add(array('jquery.ui.widget.min.js', 'jquery.ui.sortable.min.js'));
+ }
+ else {
+ drupal_add_js($module_drupal_url_path . '/includes/jqueryUI/jquery-ui.min.js', 'file');
+ drupal_add_js($module_drupal_url_path . '/includes/jqueryUI/jquery.ui.widget.min.js', 'file');
+ drupal_add_js($module_drupal_url_path . '/includes/jqueryUI/jquery.ui.sortable.min.js', 'file');
+ }
+ drupal_add_js($module_drupal_url_path . '/includes/jqueryUI/sort.js', 'file');
+ }
+
+ $form['appearance']['uicolor'] = array(
+ '#type' => 'select',
+ '#title' => t('User interface color'),
+ '#default_value' => !empty($profile->settings['uicolor']) ? $profile->settings['uicolor'] : 'default',
+ '#options' => $ui_colors,
+ );
+
+ if (!isset($global_profile->settings['skin']) || !file_exists($editor_local_path . '/skins/' . $global_profile->settings['skin'])) {
+ $global_profile->settings['skin'] = ckeditor_default_skin();
+ }
+ $skinframe_url = url('admin/config/content/ckeditor/skinframe', array(
+ 'query' => array(
+ 'token' => drupal_get_token('ckeditorSkinframeCall'),
+ 'skin' => $global_profile->settings['skin'],
+ 'uicolor' => (!empty($profile->settings['uicolor_user']) && $profile->settings['uicolor'] == 'custom') ? ltrim($profile->settings['uicolor_user'], '#') : 'D3D3D3'
+ )
+ ));
+ $form['appearance']['skinframe'] = array(
+ '#markup' => '<iframe frameborder="0" id="skinframe" marginheight="0" marginwidth="0" src="' . $skinframe_url . '" style="height:500px;width:700px;"></iframe><br/>',
+ '#description' => '',
+ );
+ $form['appearance']['uicolor_user'] = array(
+ '#type' => 'hidden',
+ '#default_value' => !empty($profile->settings['uicolor_user']) ? $profile->settings['uicolor_user'] : 'default',
+ );
+
+ $form['appearance']['toolbar'] = array(
+ '#type' => 'textarea',
+ '#title' => t('Toolbar'),
+ '#default_value' => !empty($profile->settings['toolbar']) ? $profile->settings['toolbar'] : '',
+ '#description' => t('Load sample toolbar: !toolbars', array("!toolbars" => '<a href="#" id="cke_toolbar_DrupalBasic" class="cke_load_toolbar">' . t('Basic') . '</a> | <a href="#" id="cke_toolbar_DrupalAdvanced" class="cke_load_toolbar">' . t('Advanced') . '</a> | <a href="#" id="cke_toolbar_DrupalFull" class="cke_load_toolbar">' . t('Full') . '</a>')),
+ '#wysiwyg' => FALSE,
+ '#rows' => 15
+ );
+
+ if ($toolbar_wizard == 't') {
+ $form['appearance']['toolbar_wizzard_used'] = array(
+ '#markup' => '<div>' . t('Used buttons') . '</div><div class="sortableList" id="groupLayout"></div><br/>',
+ '#description' => t('Currently used buttons'),
+ );
+
+ drupal_add_js(array('cke_toolbar_buttons_all' => ckeditor_toolbar_buttons_all()), 'setting');
+
+ $form['appearance']['toolbar_wizzard_all'] = array(
+ '#markup' => '<div>' . t('All buttons') . '</div><div id="allButtons" class="sortableList"></div><br/>',
+ '#description' => t('All available buttons'),
+ );
+ }
+
+ $plugin_list = ckeditor_load_plugins();
+ $plugins = array();
+ if (isset($profile->settings['loadPlugins'])) {
+ foreach ($plugin_list AS $key => $val) {
+ $plugins[$key] = $val['desc'];
+ }
+ }
+ else {
+ $default_plugins = array();
+ foreach ($plugin_list AS $key => $val) {
+ $plugins[$key] = $val['desc'];
+ if (isset($val['default']) && $val['default'] == 't') {
+ $default_plugins[] = $key;
+ }
+ }
+ }
+
+ $form['appearance']['loadPlugins'] = array(
+ '#type' => 'checkboxes',
+ '#title' => t('Plugins'),
+ '#default_value' => isset($profile->settings['loadPlugins']) ? array_keys((array) $profile->settings['loadPlugins']) : $default_plugins,
+ '#options' => $plugins,
+ '#description' => t('Choose the plugins that you want to enable in CKEditor.')
+ );
+
+ $form['appearance']['expand'] = array(
+ '#type' => 'radios',
+ '#title' => t('Toolbar state on startup'),
+ '#default_value' => !empty($profile->settings['expand']) ? $profile->settings['expand'] : 't',
+ '#options' => array(
+ 't' => t('Expanded'),
+ 'f' => t('Collapsed')
+ ),
+ '#description' => t('The toolbar will start in an expanded or collapsed state.'),
+ );
+
+ if (file_exists(ckeditor_path('local') . '/plugins/divarea/plugin.js')) {
+ $form['appearance']['use_divarea'] = array(
+ '#type' => 'radios',
+ '#title' => t('"Div-based" editor'),
+ '#default_value' => !empty($profile->settings['use_divarea']) ? $profile->settings['use_divarea'] : 't',
+ '#options' => array(
+ 't' => t('Enabled'),
+ 'f' => t('Disabled')
+ ),
+ '#description' => t("Loading editor into <code>div</code> instead of <code>iframe</code>.")
+ );
+ }
+
+ $form['appearance']['width'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Editor width'),
+ '#default_value' => !empty($profile->settings['width']) ? $profile->settings['width'] : '100%',
+ '#description' => t("Editor interface width in pixels or percent. Examples: 400, 100%."),
+ '#size' => 40,
+ '#maxlength' => 128,
+ );
+
+ $form['appearance']['lang'] = array(
+ '#type' => 'select',
+ '#title' => t('Language'),
+ '#default_value' => !empty($profile->settings['lang']) ? $profile->settings['lang'] : 'en',
+ '#options' => $lang_options,
+ '#description' => t('The language for the CKEditor user interface.')
+ );
+
+ $form['appearance']['auto_lang'] = array(
+ '#type' => 'radios',
+ '#title' => t('Auto-detect language'),
+ '#default_value' => !empty($profile->settings['auto_lang']) ? $profile->settings['auto_lang'] : 't',
+ '#options' => array(
+ 't' => t('Enabled'),
+ 'f' => t('Disabled')
+ ),
+ '#description' => t('Automatically detect the user language.')
+ );
+
+ $form['appearance']['language_direction'] = array(
+ '#type' => 'select',
+ '#title' => t('Language direction'),
+ '#default_value' => !empty($profile->settings['language_direction']) ? $profile->settings['language_direction'] : 'default',
+ '#options' => array(
+ 'default' => t('Get from current locale (default)'),
+ 'ltr' => t('Left-To-Right'), // language like English
+ 'rtl' => t('Right-To-Left') // languages like Arabic
+ ),
+ '#description' => t(
+ 'Choose the language direction used in the editing area. Even when CKEditor automatically detects the user language and adjusts its user interface, the editing area is not automatically changed into the LTR or RTL mode. To be able to type LTR (like English) and RTL (like Arabic, Hebrew, Persian) content at the same time, please make sure that the <strong>!bidiltr</strong> and <strong>!bidirtl</strong> buttons are enabled in the toolbar.', array(
+ '!bidiltr' => 'BidiLtr',
+ '!bidirtl' => 'BidiRtl'
+ )
+ )
+ );
+
+ $form['output'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Cleanup and output'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ );
+
+ $form['output']['enter_mode'] = array(
+ '#type' => 'select',
+ '#title' => t('Enter mode'),
+ '#default_value' => !empty($profile->settings['enter_mode']) ? $profile->settings['enter_mode'] : 'p',
+ '#options' => array(
+ 'p' => '<p>',
+ 'br' => '<br>',
+ 'div' => '<div>'
+ ),
+ '#description' => t('Set which tag should be used by CKEditor when the <em>Enter</em> key is pressed.')
+ );
+
+ $form['output']['shift_enter_mode'] = array(
+ '#type' => 'select',
+ '#title' => t('Shift+Enter mode'),
+ '#default_value' => !empty($profile->settings['shift_enter_mode']) ? $profile->settings['shift_enter_mode'] : 'br',
+ '#options' => array(
+ 'p' => '<p>',
+ 'br' => '<br>',
+ 'div' => '<div>'
+ ),
+ '#description' => t('Set which tag should be used by CKEditor when the <em>Shift+Enter</em> key combination is pressed.')
+ );
+
+ $form['output']['font_format'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Font formats'),
+ '#default_value' => !empty($profile->settings['font_format']) ? $profile->settings['font_format'] : 'p;div;pre;address;h1;h2;h3;h4;h5;h6',
+ '#size' => 40,
+ '#maxlength' => 250,
+ '#description' => t(
+ 'Semicolon-separated list of HTML font formats. Allowed values are: !allowed_values', array(
+ '!allowed_values' => '<code>p;div;pre;address;h1;h2;h3;h4;h5;h6</code>'
+ )
+ )
+ );
+
+ if (!empty($profile->settings['formatting']['custom_formatting_options'])) {
+ foreach ($profile->settings['formatting']['custom_formatting_options'] as $k => $v) {
+ if ($v === 0) {
+ unset($profile->settings['formatting']['custom_formatting_options'][$k]);
+ }
+ }
+ }
+
+ $form['output']['custom_formatting'] = array(
+ '#type' => 'radios',
+ '#title' => t('Use custom formatting options'),
+ '#default_value' => !empty($profile->settings['custom_formatting']) ? $profile->settings['custom_formatting'] : 'f',
+ '#options' => array(
+ 't' => t('Yes'),
+ 'f' => t('No'),
+ ),
+ );
+
+ $form['output']['formatting'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Custom formatting options'),
+ '#tree' => TRUE,
+ );
+
+ $form['output']['formatting']['custom_formatting_options'] = array(
+ '#type' => 'checkboxes',
+ '#default_value' => isset($profile->settings['formatting']['custom_formatting_options']) ? array_keys((array) $profile->settings['formatting']['custom_formatting_options']) : array('indent' => 'indent', 'breakBeforeOpen' => 'breakBeforeOpen', 'breakAfterOpen' => 'breakAfterOpen', 'breakAfterClose' => 'breakAfterClose'),
+ '#options' => array(
+ 'indent' => t('Indent the element contents.'),
+ 'breakBeforeOpen' => t('Break line before the opening tag.'),
+ 'breakAfterOpen' => t('Break line after the opening tag.'),
+ 'breakBeforeClose' => t('Break line before the closing tag.'),
+ 'breakAfterClose' => t('Break line after the closing tag.'),
+ 'pre_indent' => t('Indent the <code>&lt;pre&gt;</code> element contents.'),
+ ),
+ );
+
+ $form['css'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('CSS'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE
+ );
+
+ $form['css']['css_mode'] = array(
+ '#type' => 'select',
+ '#title' => t('Editor CSS'),
+ '#default_value' => !empty($profile->settings['css_mode']) ? $profile->settings['css_mode'] : 'theme',
+ '#options' => array(
+ 'theme' => t('Use theme CSS'),
+ 'self' => t('Define CSS'),
+ 'none' => t('CKEditor default')
+ ),
+ '#description' => t(
+ 'Defines the CSS to be used in the editor area.!title_theme_css &ndash; load the !style_css file from the current site theme.!title_define_css &ndash; enter the CSS file path below.!title_ckeditor_default &ndash; use the default editor CSS.', array(
+ '!title_theme_css' => '<br /><strong>' . t('Use theme CSS') . '</strong>',
+ '!title_define_css' => '<br /><strong>' . t('Define CSS') . '</strong>',
+ '!title_ckeditor_default' => '<br /><strong>' . t('CKEditor default') . '</strong>',
+ '!style_css' => '<code>style.css</code>'
+ )
+ )
+ );
+
+ $form['css']['css_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('CSS file path'),
+ '#default_value' => !empty($profile->settings['css_path']) ? $profile->settings['css_path'] : "",
+ '#size' => 40,
+ '#maxlength' => 255,
+ '#description' => t(
+ 'Enter the path to the CSS file (Example: !example1) or a list of CSS files separated with a comma (Example: !example2). Make sure you select the !title_define_css option above.', array(
+ '!example1' => '<code>"css/editor.css"</code>',
+ '!example2' => '<code>"/themes/garland/style.css,http://example.com/style.css"</code>',
+ '!title_define_css' => '<strong>' . t('Define CSS') . '</strong>'
+ )
+ ) .
+ '<br />' .
+ t('Available placeholders:!h &ndash; host name (!host).!t &ndash; path to theme (!theme).', array(
+ '!h' => '<br /><code>%h</code>',
+ '!t' => '<br /><code>%t</code>',
+ '!host' => '<code>' . base_path() . '</code>',
+ '!theme' => '<code>' . base_path() . path_to_theme() . '/</code>'
+ )
+ )
+ );
+
+ $form['css']['css_style'] = array(
+ '#type' => 'select',
+ '#title' => t('Predefined styles'),
+ '#default_value' => !empty($profile->settings['css_style']) ? $profile->settings['css_style'] : 'theme',
+ '#options' => array(
+ 'theme' => t('Use theme ckeditor.styles.js'),
+ 'self' => t('Define path to ckeditor.styles.js'),
+ 'default' => t('CKEditor default')
+ ),
+ '#description' => t(
+ 'Define the location of the !ckeditor_styles_js_file file. It is used by the <strong>Style</strong> drop-down list available in the default toolbar. Copy the !ckeditor_styles_js_path file into your theme directory (!theme) and adjust it to your needs.', array(
+ '!ckeditor_styles_js_file' => '<code>ckeditor.styles.js</code>',
+ '!ckeditor_styles_js_path' => '<code>' . drupal_get_path('module', 'ckeditor') . '/ckeditor.styles.js</code>',
+ '!theme' => '<code>' . path_to_theme() . '/ckeditor.styles.js' . '</code>'
+ )
+ )
+ );
+
+ $form['css']['styles_path'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Predefined styles path'),
+ '#default_value' => !empty($profile->settings['styles_path']) ? $profile->settings['styles_path'] : "",
+ '#size' => 40,
+ '#maxlength' => 255,
+ '#description' => t(
+ 'Enter the path to a file with predefined styles (Example: !example1). Make sure you select the !style_define_path option above.', array(
+ '!style_define_path' => '<strong>' . t('Define path to ckeditor.styles.js') . '</strong>',
+ '!ckeditor_styles_js_file' => '<code>ckeditor.styles.js</code>',
+ '!example1' => '<code>/ckeditor.styles.js</code>'
+ )
+ ) .
+ '<br />' .
+ t('Available placeholders:!h &ndash; host name (!host).!t &ndash; path to theme (!theme).!m &ndash; path to the CKEditor module (!module).', array(
+ '!h' => '<br /><code>%h</code>',
+ '!t' => '<br /><code>%t</code>',
+ '!m' => '<br /><code>%m</code>',
+ '!host' => '<code>' . base_path() . '</code>',
+ '!theme' => '<code>' . base_path() . path_to_theme() . '/</code>',
+ '!module' => '<code>' . drupal_get_path('module', 'ckeditor') . '</code>'
+ )
+ )
+ );
+
+ $form['ckeditor_upload_settings'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('File browser settings'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ '#description' => t(
+ 'Set the file browser settings. A file browser will allow you to browse the files stored on the server and embed them as links, images, or Flash movies. CKEditor is compatible with such Drupal modules as !imce or !elfinder. CKEditor can be also integrated with !ckfinder, an advanced Ajax file manager.', array(
+ '!imce' => l(t('IMCE'), 'http://drupal.org/project/imce'),
+ '!elfinder' => l(t('elFinder'), 'http://drupal.org/project/elfinder'),
+ '!ckfinder' => l(t('CKFinder'), 'http://ckfinder.com')
+ )
+ )
+ );
+
+ $filebrowsers = array(
+ 'none' => t('None'),
+ 'ckfinder' => t('CKFinder'),
+ );
+
+ $filebrowsers_dialogs = array(
+ '' => t('Same as in the Link dialog window'),
+ 'ckfinder' => t('CKFinder'),
+ );
+
+ if (module_exists('imce')) {
+ $filebrowsers['imce'] = t('IMCE');
+ $filebrowsers_dialogs['imce'] = t('IMCE');
+ }
+
+ if (module_exists('elfinder')) {
+ $filebrowsers['elfinder'] = t('elFinder');
+ $filebrowsers_dialogs['elfinder'] = t('elFinder');
+ }
+
+ /* MODULES NOT PORTED TO D7
+ if (module_exists('tinybrowser')) {
+ $filebrowsers['tinybrowser'] = t('TinyBrowser');
+ $filebrowsers_dialogs['tinybrowser'] = t('TinyBrowser');
+ }
+
+ if (module_exists('imagebrowser')) {
+ $filebrowsers['ib'] = t('Image Browser');
+ $filebrowsers_dialogs['ib'] = t('Image Browser');
+ }
+
+ if (module_exists('webfm_popup')) {
+ $filebrowsers['webfm'] = t('Web File Manager');
+ $filebrowsers_dialogs['webfm'] = t('Web File Manager');
+ }
+ */
+ $form['ckeditor_upload_settings']['filebrowser'] = array(
+ '#type' => 'select',
+ '#title' => t('File browser type (Link dialog window)'),
+ '#default_value' => !empty($profile->settings['filebrowser']) ? $profile->settings['filebrowser'] : 'none',
+ '#options' => $filebrowsers,
+ '#description' => t('Select the file browser that you would like to use to upload files.'),
+ );
+
+ $form['ckeditor_upload_settings']['filebrowser_image'] = array(
+ '#type' => 'select',
+ '#title' => t('File browser type (Image dialog window)'),
+ '#default_value' => !empty($profile->settings['filebrowser_image']) ? $profile->settings['filebrowser_image'] : 'none',
+ '#options' => $filebrowsers_dialogs,
+ '#description' => t('Select the file browser that you would like to use to upload images.'),
+ );
+
+ $form['ckeditor_upload_settings']['filebrowser_flash'] = array(
+ '#type' => 'select',
+ '#title' => t('File browser type (Flash dialog window)'),
+ '#default_value' => !empty($profile->settings['filebrowser_flash']) ? $profile->settings['filebrowser_flash'] : 'none',
+ '#options' => $filebrowsers_dialogs,
+ '#description' => t('Select the file browser that you would like to use to upload Flash movies.'),
+ );
+
+ if (variable_get('file_default_scheme', '') != 'private') {
+ $current_user_files_path = empty($profile->settings['UserFilesPath']) ? "%b%f/" : $profile->settings['UserFilesPath'];
+ $current_user_files_path = strtr($current_user_files_path, array("%f" => variable_get('file_public_path', conf_path() . '/files'), "%u" => "UID", "%b" => base_path(), "%n" => "UNAME"));
+
+ $current_user_files_absolute_path = empty($profile->settings['UserFilesAbsolutePath']) ? "%d%b%f/" : $profile->settings['UserFilesAbsolutePath'];
+ $current_user_files_absolute_path = strtr($current_user_files_absolute_path, array("%f" => variable_get('file_public_path', conf_path() . '/files'), "%u" => "UID", "%b" => base_path(), "%d" => ckeditor_get_document_root_full_path(), "%n" => "UNAME"));
+
+
+ $form['ckeditor_upload_settings']['UserFilesPath'] = array(
+ '#type' => 'textfield',
+ '#prefix' => '<fieldset><legend>' . t('CKFinder settings') . '</legend>',
+ '#title' => t('Path to uploaded files'),
+ '#default_value' => !empty($profile->settings['UserFilesPath']) ? $profile->settings['UserFilesPath'] : "%b%f/",
+ '#size' => 40,
+ '#maxlength' => 255,
+ '#description' => t('Path to uploaded files relative to the document root.') .
+ '<br />' .
+ t('Available placeholders:!b &ndash; the base URL path of the Drupal installation (!base).!f &ndash; the Drupal file system path where the files are stored (!files).!u &ndash; User ID.!n &ndash; Username.', array(
+ '!n' => '<br /><code>%n</code>',
+ '!u' => '<br /><code>%u</code>',
+ '!f' => '<br/><code>%f</code>',
+ '!b' => '<br/><code>%b</code>',
+ '!files' => '<code>' . variable_get('file_public_path', conf_path() . '/files') . '</code>',
+ '!base' => '<code>' . base_path() . '</code>'
+ )
+ ) .
+ '<br />' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . $current_user_files_path . '</code>'
+ )
+ )
+ );
+
+ $form['ckeditor_upload_settings']['UserFilesAbsolutePath'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Absolute path to uploaded files'),
+ '#default_value' => !empty($profile->settings['UserFilesAbsolutePath']) ? $profile->settings['UserFilesAbsolutePath'] : "%d%b%f/",
+ '#size' => 40,
+ '#maxlength' => 255,
+ '#suffix' => '</fieldset>',
+ '#description' => t('The path to the local directory (on the server) which points to the path defined above. If left empty, CKEditor will try to discover the right path.') .
+ '<br />' .
+ t('Available placeholders:!d &ndash; the server path to the document root (!root).!b &ndash; the base URL path of the Drupal installation (!base).!f &ndash; the Drupal file system path where the files are stored (!files).!u &ndash; User ID.!n &ndash; Username.', array(
+ '!u' => '<br /><code>%u</code>',
+ '!n' => '<br /><code>%n</code>',
+ '!d' => '<br/><code>%d</code>',
+ '!b' => '<br /><code>%b</code>',
+ '!f' => '<br/><code>%f</code>',
+ '!files' => '<code>' . variable_get('file_public_path', conf_path() . '/files') . '</code>',
+ '!base' => '<code>' . base_path() . '</code>',
+ '!root' => '<code>' . ckeditor_get_document_root_full_path() . '</code>'
+ )
+ ) .
+ '<br />' .
+ t('Current path: !path', array(
+ '!path' => '<code>' . $current_user_files_absolute_path . '</code>'
+ )
+ )
+ );
+ }
+ if (variable_get('file_default_scheme', '') == 'private') {
+ $form['ckeditor_upload_settings']['private_path_descrption'] = array(
+ '#markup' => '<div>' . t(
+ 'Setting a relative path to uploaded files was disabled because private downloads are enabled and thus this path is calculated automatically. To change the location of uploaded files in the private file system, edit the <strong>!url</strong>.', array(
+ '!url' => l(t('CKEditor Global Profile'), 'admin/config/content/ckeditor/editg')
+ )
+ ) . '</div>',
+ );
+ }
+
+ $form['advanced'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Advanced options'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ );
+ if (ckeditor_get_version(TRUE) == 3) {
+ $form['advanced']['ckeditor_load_method'] = array(
+ '#type' => 'select',
+ '#title' => t('Loading method'),
+ '#default_value' => !empty($profile->settings['ckeditor_load_method']) ? $profile->settings['ckeditor_load_method'] : 'ckeditor.js',
+ '#options' => _ckeditor_load_methods(),
+ '#description' => t('Select the loading method of CKEditor. If the !ckeditor_basic_js file is used, only a small file is loaded initially and the rest of the editor is loaded later (see <strong>Loading timeout</strong>). This might be useful if CKEditor is disabled by default.', array(
+ '!ckeditor_basic_js' => '<code>ckeditor_basic.js</code>'
+ )
+ )
+ );
+ $form['advanced']['ckeditor_load_time_out'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Loading timeout'),
+ '#default_value' => !empty($profile->settings['ckeditor_load_time_out']) ? $profile->settings['ckeditor_load_time_out'] : "0",
+ '#size' => 40,
+ '#maxlength' => 255,
+ '#description' => t('The time to wait (in seconds) to load the full editor code after the page is loaded, if the !ckeditor_basic_js file is used. If set to zero, the editor is loaded on demand.', array(
+ '!ckeditor_basic_js' => '<code>ckeditor_basic.js</code>'
+ )
+ )
+ );
+ }
+
+ $form['advanced']['forcePasteAsPlainText'] = array(
+ '#type' => 'select',
+ '#title' => t('Force pasting as plain text'),
+ '#default_value' => !empty($profile->settings['forcePasteAsPlainText']) ? $profile->settings['forcePasteAsPlainText'] : "f",
+ '#options' => array(
+ 't' => t('Enabled'),
+ 'f' => t('Disabled')
+ ),
+ '#description' => t('If enabled, HTML content will be automatically changed to plain text when pasting.'),
+ );
+ $form['advanced']['html_entities'] = array(
+ '#type' => 'radios',
+ '#title' => t('HTML Entities'),
+ '#default_value' => !empty($profile->settings['html_entities']) ? $profile->settings['html_entities'] : 'f',
+ '#description' => t('Convert all applicable characters to HTML entities.'),
+ '#options' => array(
+ 'f' => t('No'),
+ 't' => t('Yes')
+ ),
+ );
+ $form['advanced']['scayt_autoStartup'] = array(
+ '#type' => 'radios',
+ '#title' => t('Spellchecker'),
+ '#default_value' => !empty($profile->settings['scayt_autoStartup']) ? $profile->settings['scayt_autoStartup'] : 'f',
+ '#description' => t('If enabled, turns on SCAYT (Spell Check As You Type) automatically after loading the editor.'),
+ '#options' => array(
+ 'f' => t('No'),
+ 't' => t('Yes')
+ ),
+ );
+ $form['advanced']['theme_config_js'] = array(
+ '#type' => 'radios',
+ '#title' => t('Load !ckeditor_config_js from the theme path', array(
+ '!ckeditor_config_js' => '<code>ckeditor.config.js</code>'
+ )
+ ),
+ '#default_value' => !empty($profile->settings['theme_config_js']) ? $profile->settings['theme_config_js'] : 'f',
+ '#options' => array(
+ 't' => t('Yes'),
+ 'f' => t('No')
+ ),
+ '#description' => t('When enabled, the editor will try to load the !ckeditor_config_js file from the theme directory.', array(
+ '!ckeditor_config_js' => '<code>ckeditor.config.js</code>'
+ )
+ )
+ );
+ $form['advanced']['js_conf'] = array(
+ '#type' => 'textarea',
+ '#title' => t('Custom JavaScript configuration'),
+ '#default_value' => !empty($profile->settings['js_conf']) ? $profile->settings['js_conf'] : "",
+ '#cols' => 60,
+ '#rows' => 5,
+ '#description' => t(
+ 'In order to change CKEditor configuration globally, you should modify the !ckeditor_config configuration file. Sometimes it is required to change the CKEditor configuration for a single profile only. Use this box to define settings that are unique for this profile. Available options are listed in the !docs. Add the following code snippet to change the fonts available in the CKEditor <strong>Font</strong> and <strong>Size</strong> drop-down lists: <pre>@code</pre><strong>Warning</strong>: If you make a mistake here, CKEditor may not load correctly.', array(
+ '!ckeditor_config' => '<code>' . drupal_get_path('module', 'ckeditor') . "/ckeditor.config.js</code>",
+ '!docs' => l(t('CKEditor documentation'), 'http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html'),
+ '@code' => "config.font_names = 'Arial;Times New Roman;Verdana';\nconfig.fontSize_sizes = '16/16px;24/24px;48/48px;';"
+ )
+ ),
+ '#wysiwyg' => FALSE,
+ );
+
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Save')
+ );
+
+ return $form;
+}
+
+/**
+ * Form validation for a profile.
+ */
+function ckeditor_admin_profile_form_validate($form, &$form_state) {
+ $edit = & $form_state['values'];
+ /*
+ if ($edit['default'] == 't' && $edit['popup'] == 't') {
+ form_set_error('popup', t('If CKEditor is enabled by default, the popup window must be disabled.'));
+ }
+
+ if ($edit['show_toggle'] == 't' && $edit['popup'] == 't') {
+ form_set_error('popup', t('If toggle is enabled, the popup window must be disabled.'));
+ }
+ */
+ if (!$edit['name']) {
+ form_set_error('name', t('You must give a profile name.'));
+ }
+ elseif (!preg_match('/^[A-Za-z0-9_]+$/', $edit['name'])) {
+ form_set_error('name', t('Enter a valid profile name. Only alphanumeric and underscore characters are allowed.'));
+ }
+ elseif ($edit['name'] == 'CKEditor Global Profile') {
+ form_set_error('name', t('This profile name is reserved. Please choose a different name.'));
+ }
+ elseif (!isset($edit['_profile']) || ($edit['_profile']->name != $edit['name'])) {
+ $result = ckeditor_profile_load($edit['name']);
+ if (!empty($result)) {
+ form_set_error('name', t('The profile name must be unique. A profile with this name already exists.'));
+ }
+ }
+
+ if (!preg_match('/^\d+%?$/', $edit['width'])) {
+ form_set_error('width', t('Enter a valid width value. Examples: 400, 100%.'));
+ }
+
+ if (!empty($edit['css_path'])) {
+ if ($edit['css_mode'] != 'self') {
+ form_set_error('css_path', t('The CSS path is not empty. Please set the <strong>Editor CSS</strong> option to the <strong>Define CSS</strong> mode.'));
+ }
+ elseif (FALSE !== strpos($edit['css_path'], '"')) {
+ form_set_error('css_path', t('Double quotes are not allowed in the CSS path.'));
+ }
+ elseif (substr($edit['css_path'], 0, 1) == "'" && substr($edit['css_path'], -1) == "'") {
+ form_set_error('css_path', t('Enter a valid CSS path, do not surround it with quotes.'));
+ }
+ }
+
+ if (!empty($edit['styles_path'])) {
+ if ($edit['css_style'] != 'self') {
+ form_set_error('styles_path', t('The path to predefined styles is not empty. Please set the <strong>Predefined styles</strong> option to the <strong>Define path to ckeditor.styles.js</strong> mode.'));
+ }
+ elseif (FALSE !== strpos($edit['styles_path'], '"')) {
+ form_set_error('styles_path', t('Double quotes are not allowed in the styles path.'));
+ }
+ elseif (substr($edit['styles_path'], 0, 1) == "'" && substr($edit['styles_path'], -1) == "'") {
+ form_set_error('styles_path', t('Enter a valid styles path, do not surround it with quotes.'));
+ }
+ }
+
+ if (!empty($edit['font_format'])) {
+ if (!preg_match("/^((p|div|pre|address|h1|h2|h3|h4|h5|h6);)*(p|div|pre|address|h1|h2|h3|h4|h5|h6)$/", $edit['font_format'])) {
+ form_set_error('font_format', t('Enter a valid, semicolon-separated list of HTML font formats (no semicolon at the end of the list is expected).'));
+ }
+ }
+ // @todo DOWNLOAD API
+ if (!empty($edit['UserFilesAbsolutePath']) && empty($edit['UserFilesPath'])) {
+ form_set_error('UserFilesPath', t('The path to uploaded files is required.'));
+ }
+ if (!empty($edit['UserFilesPath']) && empty($edit['UserFilesAbsolutePath'])) {
+ form_set_error('UserFilesPath', t('An absolute path to uploaded files is required.'));
+ }
+
+ if (ckeditor_get_version(TRUE) == 3) {
+ $load_methods = _ckeditor_load_methods();
+ if (!isset($load_methods[$edit['ckeditor_load_method']])) {
+ form_set_error('ckeditor_load_method', t('Set a valid loading method.'));
+ }
+ if (!preg_match('#\d+#', $edit['ckeditor_load_time_out'])) {
+ form_set_error('ckeditor_load_time_out', t('Enter a valid loading timeout in seconds.'));
+ }
+ }
+ $toolbar = $edit['toolbar'];
+ $toolbar = str_replace("'", '"', $toolbar);
+ $toolbar = preg_replace('/(\w*)\s*\:/', '"${1}":', $toolbar);
+ if (!json_decode($toolbar)) {
+ form_set_error('toolbar', t('Enter a valid toolbar configuration.'));
+ }
+}
+
+/**
+ * Form submit for a profile
+ */
+function ckeditor_admin_profile_form_submit($form, &$form_state) {
+ $edit = & $form_state['values'];
+
+ if (isset($edit['_profile'])) {
+ ckeditor_profile_delete($edit['_profile']->name);
+ drupal_set_message(t('Your CKEditor profile was updated.'));
+ }
+ else {
+ drupal_set_message(t('Your CKEditor profile was created.'));
+ }
+
+ $settings = ckeditor_admin_values_to_settings($edit);
+ db_insert('ckeditor_settings')
+ ->fields(array(
+ "name" => $edit['name'],
+ "settings" => $settings
+ ))
+ ->execute();
+
+ if (!empty($edit['input_formats'])) {
+ foreach (array_keys($edit['input_formats']) as $format) {
+ if ($edit['input_formats'][$format] != '0') {
+ db_insert('ckeditor_input_format')->fields(array("name" => $edit['name'], "format" => $format))->execute();
+ }
+ }
+ }
+
+ $form_state['redirect'] = 'admin/config/content/ckeditor';
+}
+
+/**
+ * Form builder for a clone profile
+ */
+function ckeditor_admin_profile_clone_form($form, $form_state, $oldprofile) {
+ return ckeditor_admin_profile_form($form, $form_state, $oldprofile);
+}
+
+/**
+ * Form validation for a clone profile
+ */
+function ckeditor_admin_profile_clone_form_validate($form_state, $oldprofile) {
+ ckeditor_admin_profile_form_validate($form_state, $oldprofile);
+}
+
+/**
+ * Form submit for a clone profile
+ */
+function ckeditor_admin_profile_clone_form_submit($form, &$form_state) {
+ $edit = & $form_state['values'];
+ drupal_set_message(t('Your CKEditor profile was created.'));
+ $settings = ckeditor_admin_values_to_settings($edit);
+ db_insert('ckeditor_settings')
+ ->fields(array(
+ "name" => $edit['name'],
+ "settings" => $settings
+ ))
+ ->execute();
+
+ if (!empty($edit['input_formats'])) {
+ foreach (array_keys($edit['input_formats']) as $format) {
+ if ($edit['input_formats'][$format] != 0) {
+ db_insert('ckeditor_input_format')->fields(array("name" => $edit['name'], "format" => $format))->execute();
+ }
+ }
+ }
+
+ $form_state['redirect'] = 'admin/config/content/ckeditor';
+}
+
+/**
+ * Form builder for a profile delete
+ */
+function ckeditor_admin_profile_delete_form($form, $form_state, $profile) {
+ $form = array();
+
+ $form['_profile'] = array(
+ '#type' => 'value',
+ '#value' => $profile,
+ );
+
+ $form['question'] = array(
+ '#type' => 'item',
+ '#markup' => t(
+ 'Are you sure that you want to delete the CKEditor profile <strong>%profile</strong>?', array(
+ '%profile' => $profile->name
+ )
+ ),
+ );
+
+ $form['delete'] = array(
+ '#type' => 'submit',
+ '#id' => 'delete',
+ '#value' => t('Delete'),
+ );
+
+ $form['back'] = array(
+ '#type' => 'submit',
+ '#id' => 'back',
+ '#value' => t('Cancel'),
+ );
+
+ return $form;
+}
+
+/**
+ * Submit form for a profile delete
+ */
+function ckeditor_admin_profile_delete_form_submit($form, &$form_state) {
+ $v = & $form_state['values'];
+
+ if ($form_state['clicked_button']['#id'] == 'delete') {
+ ckeditor_profile_delete($v['_profile']->name);
+ drupal_set_message(t('The CKEditor profile was deleted.'));
+ }
+
+ $form_state['redirect'] = 'admin/config/content/ckeditor';
+}
+
+/**
+ * Converts an array of form values to a serialized array that does not
+ * contain Drupal Form API values
+ */
+function ckeditor_admin_values_to_settings($values) {
+ $plugins = array();
+ if (isset($values['loadPlugins'])) {
+ $plugins = $values['loadPlugins'];
+ }
+ unset($values['name'], $values['input_formats'], $values['_profile'], $values['op'], $values['submit'], $values['form_build_id'], $values['form_token'], $values['form_id'], $values['loadPlugins']);
+
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $plugin_list = ckeditor_load_plugins();
+ $values['loadPlugins'] = array();
+ if (!empty($plugins)) {
+ foreach (array_keys($plugins) as $plugin) {
+ if ($plugins[$plugin] != '0') {
+ $values['loadPlugins'][$plugin] = $plugin_list[$plugin];
+ }
+ }
+ }
+
+ return serialize($values);
+}
+
+/**
+ * Remove a profile from the database.
+ */
+function ckeditor_profile_delete($name) {
+ db_delete('ckeditor_settings')
+ ->condition('name', $name)
+ ->execute();
+ db_delete('ckeditor_input_format')
+ ->condition('name', $name)
+ ->execute();
+}
+
+/*
+ * List of CKEditor librares to load
+ */
+
+function _ckeditor_load_methods() {
+ $result = array('ckeditor.js' => 'ckeditor.js');
+ if (file_exists(ckeditor_path('local') . '/ckeditor_basic.js')) {
+ $result['ckeditor_basic.js'] = 'ckeditor_basic.js';
+ }
+ if (file_exists(ckeditor_path('local') . '/ckeditor_source.js')) {
+ $result['ckeditor_source.js'] = 'ckeditor_source.js (' . t('for developers only') . ')';
+ }
+ return $result;
+}
+
+/*
+ * Disable WYSIWYG module
+ */
+
+function ckeditor_disable_wysiwyg($token) {
+ if (!drupal_valid_token($token, 'ckeditorDisableWysiwyg')) {
+ exit();
+ }
+ module_disable(array('wysiwyg'));
+ drupal_set_message(t('The WYSIWYG module is disabled.'));
+
+ drupal_goto('admin/config/content/ckeditor');
+}
+
+/*
+ * Get all available toolbar buttons
+ */
+
+function ckeditor_toolbar_buttons_all() {
+ $path = base_path() . drupal_get_path('module', 'ckeditor');
+
+ //CKEditor default buttons
+ $buttons = array(
+ 'Source' => array('name' => 'Source', 'icon' => $path . '/images/buttons/source.png', 'title' => 'Source', 'row' => 1),
+ 'Save' => array('name' => 'Save', 'icon' => $path . '/images/buttons/save.png', 'title' => 'Save', 'row' => 1),
+ 'NewPage' => array('name' => 'NewPage', 'icon' => $path . '/images/buttons/newPage.png', 'title' => 'New Page', 'row' => 1),
+ 'Preview' => array('name' => 'Preview', 'icon' => $path . '/images/buttons/preview.png', 'title' => 'Preview', 'row' => 1),
+ 'Templates' => array('name' => 'Templates', 'icon' => $path . '/images/buttons/templates.png', 'title' => 'Templates', 'row' => 1),
+ 'Cut' => array('name' => 'Cut', 'icon' => $path . '/images/buttons/cut.png', 'title' => 'Cut', 'row' => 1),
+ 'Copy' => array('name' => 'Copy', 'icon' => $path . '/images/buttons/copy.png', 'title' => 'Copy', 'row' => 1),
+ 'Paste' => array('name' => 'Paste', 'icon' => $path . '/images/buttons/paste.png', 'title' => 'Paste', 'row' => 1),
+ 'PasteText' => array('name' => 'PasteText', 'icon' => $path . '/images/buttons/pastePlainText.png', 'title' => 'Paste as plain text', 'row' => 1),
+ 'PasteFromWord' => array('name' => 'PasteFromWord', 'icon' => $path . '/images/buttons/pasteWord.png', 'title' => 'Paste from Word', 'row' => 1),
+ 'Print' => array('name' => 'Print', 'icon' => $path . '/images/buttons/print.png', 'title' => 'Print', 'row' => 1),
+ 'SpellChecker' => array('name' => 'SpellChecker', 'icon' => $path . '/images/buttons/checkSpelling.png', 'title' => 'Check Spelling', 'row' => 1),
+ 'Scayt' => array('name' => 'Scayt', 'icon' => $path . '/images/buttons/checkSpelling.png', 'title' => 'Spell Check As you Type', 'row' => 1), //TODO sprawdzic ta opcje
+ 'Undo' => array('name' => 'Undo', 'icon' => $path . '/images/buttons/undo.png', 'title' => 'Undo', 'row' => 1),
+ 'Redo' => array('name' => 'Redo', 'icon' => $path . '/images/buttons/redo.png', 'title' => 'Redo', 'row' => 1),
+ 'Find' => array('name' => 'Find', 'icon' => $path . '/images/buttons/find.png', 'title' => 'Find', 'row' => 1),
+ 'Replace' => array('name' => 'Replace', 'icon' => $path . '/images/buttons/replace.png', 'title' => 'Replace', 'row' => 1),
+ 'SelectAll' => array('name' => 'SelectAll', 'icon' => $path . '/images/buttons/selectAll.png', 'title' => 'Select All', 'row' => 1),
+ 'RemoveFormat' => array('name' => 'RemoveFormat', 'icon' => $path . '/images/buttons/removeFormat.png', 'title' => 'Remove Format', 'row' => 1),
+ 'Form' => array('name' => 'Form', 'icon' => $path . '/images/buttons/form.png', 'title' => 'Form', 'row' => 1),
+ 'Checkbox' => array('name' => 'Checkbox', 'icon' => $path . '/images/buttons/checkbox.png', 'title' => 'Checkbox', 'row' => 1),
+ 'Radio' => array('name' => 'Radio', 'icon' => $path . '/images/buttons/radioButton.png', 'title' => 'Radio Button', 'row' => 1),
+ 'TextField' => array('name' => 'TextField', 'icon' => $path . '/images/buttons/textField.png', 'title' => 'Text Field', 'row' => 1),
+ 'Textarea' => array('name' => 'Textarea', 'icon' => $path . '/images/buttons/textarea.png', 'title' => 'Textarea', 'row' => 1),
+ 'Select' => array('name' => 'Select', 'icon' => $path . '/images/buttons/selectionField.png', 'title' => 'Selection Field', 'row' => 1),
+ 'Button' => array('name' => 'Button', 'icon' => $path . '/images/buttons/button.png', 'title' => 'Button', 'row' => 1),
+ 'ImageButton' => array('name' => 'ImageButton', 'icon' => $path . '/images/buttons/imageButton.png', 'title' => 'Image Button', 'row' => 1),
+ 'HiddenField' => array('name' => 'HiddenField', 'icon' => $path . '/images/buttons/hiddenField.png', 'title' => 'Hidden Field', 'row' => 1),
+ 'Bold' => array('name' => 'Bold', 'icon' => $path . '/images/buttons/bold.png', 'title' => 'Bold', 'row' => 2),
+ 'Italic' => array('name' => 'Italic', 'icon' => $path . '/images/buttons/italic.png', 'type' => 'command', 'title' => 'Italic', 'row' => 2),
+ 'Underline' => array('name' => 'Underline', 'icon' => $path . '/images/buttons/underline.png', 'title' => 'Underline', 'row' => 2),
+ 'Strike' => array('name' => 'Strike', 'icon' => $path . '/images/buttons/strike.png', 'title' => 'Strike Through', 'row' => 2),
+ 'Subscript' => array('name' => 'Subscript', 'icon' => $path . '/images/buttons/subscript.png', 'title' => 'Subscript', 'row' => 2),
+ 'Superscript' => array('name' => 'Superscript', 'icon' => $path . '/images/buttons/superscript.png', 'title' => 'Superscript', 'row' => 2),
+ 'NumberedList' => array('name' => 'NumberedList', 'icon' => $path . '/images/buttons/numberedList.png', 'title' => 'Insert/Remove Numbered List', 'row' => 2),
+ 'BulletedList' => array('name' => 'BulletedList', 'icon' => $path . '/images/buttons/bulletedList.png', 'title' => 'Insert/Remove Bulleted List', 'row' => 2),
+ 'Outdent' => array('name' => 'Outdent', 'icon' => $path . '/images/buttons/decreaseIndent.png', 'title' => 'Decrease Indent', 'row' => 2),
+ 'Indent' => array('name' => 'Indent', 'icon' => $path . '/images/buttons/increaseIndent.png', 'title' => 'Increase Indent', 'row' => 2),
+ 'Blockquote' => array('name' => 'Blockquote', 'icon' => $path . '/images/buttons/blockQuote.png', 'title' => 'Block Quote', 'row' => 2),
+ 'CreateDiv' => array('name' => 'CreateDiv', 'icon' => $path . '/images/buttons/createDivContainer.png', 'title' => 'Create Div Container', 'row' => 2),
+ 'JustifyLeft' => array('name' => 'JustifyLeft', 'icon' => $path . '/images/buttons/leftJustify.png', 'title' => 'Left Justify', 'row' => 2),
+ 'JustifyCenter' => array('name' => 'JustifyCenter', 'icon' => $path . '/images/buttons/centerJustify.png', 'title' => 'Center Justify', 'row' => 2),
+ 'JustifyRight' => array('name' => 'JustifyRight', 'icon' => $path . '/images/buttons/rightJustify.png', 'title' => 'Right Justify', 'row' => 2),
+ 'JustifyBlock' => array('name' => 'JustifyBlock', 'icon' => $path . '/images/buttons/blockJustify.png', 'title' => 'Block Justify', 'row' => 2),
+ 'BidiLtr' => array('name' => 'BidiLtr', 'icon' => $path . '/images/buttons/bidiLeft.png', 'title' => 'Text direction from left to right', 'row' => 2),
+ 'BidiRtl' => array('name' => 'BidiRtl', 'icon' => $path . '/images/buttons/bidiRight.png', 'title' => 'Text direction from right to left', 'row' => 2),
+ 'Link' => array('name' => 'Link', 'icon' => $path . '/images/buttons/link.png', 'title' => 'Link', 'row' => 2),
+ 'Unlink' => array('name' => 'Unlink', 'icon' => $path . '/images/buttons/unlink.png', 'title' => 'Unlink', 'row' => 2),
+ 'Anchor' => array('name' => 'Anchor', 'icon' => $path . '/images/buttons/anchor.png', 'title' => 'Anchor', 'row' => 2),
+ 'Image' => array('name' => 'Image', 'icon' => $path . '/images/buttons/image.png', 'title' => 'Image', 'row' => 2),
+ 'Flash' => array('name' => 'Flash', 'icon' => $path . '/images/buttons/flash.png', 'title' => 'Flash', 'row' => 2),
+ 'Table' => array('name' => 'Table', 'icon' => $path . '/images/buttons/table.png', 'title' => 'Table', 'row' => 2),
+ 'HorizontalRule' => array('name' => 'HorizontalRule', 'icon' => $path . '/images/buttons/horizontalLine.png', 'title' => 'Insert Horizontal Line', 'row' => 2),
+ 'Smiley' => array('name' => 'Smiley', 'icon' => $path . '/images/buttons/smiley.png', 'title' => 'Smiley', 'row' => 2),
+ 'SpecialChar' => array('name' => 'SpecialChar', 'icon' => $path . '/images/buttons/specialCharacter.png', 'title' => 'Inseert Special Character', 'row' => 2),
+ 'PageBreak' => array('name' => 'PageBreak', 'icon' => $path . '/images/buttons/pageBreakPrinting.png', 'title' => 'Insert Page Break for Printing', 'row' => 2),
+ 'Styles' => array('name' => 'Styles', 'icon' => $path . '/images/buttons/styles.png', 'title' => 'Formatting Styles', 'row' => 3),
+ 'Format' => array('name' => 'Format', 'icon' => $path . '/images/buttons/format.png', 'title' => 'Paragraph Format', 'row' => 3),
+ 'Font' => array('name' => 'Font', 'icon' => $path . '/images/buttons/font.png', 'title' => 'Font Name', 'row' => 3),
+ 'FontSize' => array('name' => 'FontSize', 'icon' => $path . '/images/buttons/fontSize.png', 'title' => 'Font Size', 'row' => 3),
+ 'TextColor' => array('name' => 'TextColor', 'icon' => $path . '/images/buttons/textColor.png', 'title' => 'Text Color', 'row' => 3),
+ 'BGColor' => array('name' => 'BGColor', 'icon' => $path . '/images/buttons/backgroundColor.png', 'title' => 'Background Color', 'row' => 3),
+ 'Maximize' => array('name' => 'Maximize', 'icon' => $path . '/images/buttons/maximize.png', 'title' => 'Maximize', 'row' => 3),
+ 'ShowBlocks' => array('name' => 'ShowBlocks', 'icon' => $path . '/images/buttons/showBlocks.png', 'title' => 'Show Blocks', 'row' => 3),
+ 'Iframe' => array('name' => 'Iframe', 'icon' => $path . '/images/buttons/iframe.png', 'title' => 'IFrame', 'row' => 3),
+ 'About' => array('name' => 'About', 'icon' => $path . '/images/buttons/about.png', 'title' => 'About', 'row' => 3),
+ '__spacer' => array('name' => FALSE, 'icon' => $path . '/images/buttons/spacer.png', 'title' => 'Spacer', 'row' => 4),
+ '__group' => array('name' => FALSE, 'icon' => $path . '/images/buttons/group.png', 'title' => 'Group', 'row' => 4)
+ );
+
+ $plugins = ckeditor_load_plugins(TRUE);
+ foreach ($plugins as $plugin_name => $plugin) {
+ if (!isset($plugin['buttons']) || $plugin['buttons'] == FALSE)
+ continue;
+ foreach ((array) $plugin['buttons'] as $button_name => $button) {
+ $buttons[$button_name] = array('name' => $button_name, 'icon' => $plugin['path'] . $button['icon'], 'title' => t($button['label']), 'row' => 4);
+ }
+ }
+
+ return $buttons;
+}
+
+/**
+ * Add security filters to the configuration panel available in the CKEditor profile administration section
+ */
+function _ckeditor_admin_profile_form_security_filters(&$form, $profile, $security_filters) {
+ foreach ((array) $security_filters['modules'] as $module_name => $module_conf) {
+ if (isset($module_conf['project_page']) && strlen($module_conf['project_page']) > 0) {
+ $form['security']['filters'][$module_name] = array(
+ '#type' => 'fieldset',
+ '#title' => t(
+ "!title <a href=\"!link\" target=\"_blank\">project page</a>", array(
+ "!title" => $module_conf['title'],
+ "!link" => $module_conf['project_page']
+ )
+ ),
+ '#weight' => $module_conf['weight']
+ );
+ }
+ else {
+ $form['security']['filters'][$module_name] = array(
+ '#type' => 'fieldset',
+ '#title' => t("!title", array("!title" => $module_conf['title'])),
+ '#weight' => $module_conf['weight']
+ );
+ }
+
+ if ($module_conf['installed'] == TRUE) {
+ foreach ((array) $module_conf['filters'] as $filter_name => $filter_conf) {
+ $filter_text_formats = '<div class="filter-text-formats" filter="' . $filter_name . '"></div><div class="filter-info">';
+ $form['security']['filters'][$module_name][$filter_name] = array(
+ '#type' => 'item',
+ '#title' => t("@data", array('@data' => $filter_conf['title'])),
+ '#description' => t("!data", array('!data' => $filter_conf['description'])),
+ '#prefix' => t("<div class=\"filter-wrapper\"></div>!formats", array("!formats" => $filter_text_formats)),
+ '#suffix' => "</div>"
+ );
+ }
+ }
+ else {
+ $form['security']['filters'][$module_name]['not_installed'] = array(
+ '#markup' => t("<i>Not installed</i>")
+ );
+ }
+ }
+}
+
+function ckeditor_skinframe() {
+ header('Content-Type: text/html; charset=utf-8');
+
+ if (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], 'ckeditorSkinframeCall')) {
+ exit;
+ }
+
+ $editor_path = ckeditor_path('relative');
+ $module_drupal_path = ckeditor_module_path('relative');
+
+ $html = "<!DOCTYPE html>";
+ $html .= "<head>";
+ $html .= "<script src=\"{$editor_path}/ckeditor.js\"></script>";
+ $html .= "</head>";
+ $html .= "<body>";
+ $html .= "<input type=\"hidden\" name=\"uicolor_user\"/>";
+ $html .= "<div id=\"editor\" style=\"height: 200px;\">Click the <strong>UI Color Picker</strong> button to set your color preferences.</div>";
+ $html .= "
+<script>
+var skin = window.location.search.match(/skin=([^&]*)/)[1];
+var uicolor = window.location.search.match(/uicolor=([^&]*)/)[1];
+var ckeditorUiColorOnChange = function() {
+ var color = CKEDITOR.instances['editor'].getUiColor();
+ if (typeof(color) != 'undefined') {
+ document.getElementsByName('uicolor_user').value = parent.document.getElementsByName('uicolor_user')[0].value = color;
+ var edit_uicolor = parent.document.getElementById('edit-uicolor');
+ for (i=0; i<edit_uicolor.options.length; i++) {
+ if (edit_uicolor[i].value == 'custom') {
+ edit_uicolor.selectedIndex = i;
+ edit_uicolor[i].selected = 'selected';
+ break;
+ }
+ }
+ }
+};
+CKEDITOR.on('dialogDefinition', function( ev ) {
+ var dialogName = ev.data.name;
+ var dialogDefinition = ev.data.definition;
+
+ if (dialogName == 'uicolor') {
+ dialogDefinition.getContents('tab1').get('configBox').style = 'display:none';
+ }
+});
+CKEDITOR.replace('editor', {
+ extraPlugins : 'uicolor',
+ height: 400,
+ uiColor: '#' + uicolor,
+ toolbar : [[ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList'],[ 'UIColor' ]],
+ skin: skin,
+ on: {
+ configLoaded: function(ev) {
+ var ckeditor_ver = CKEDITOR.version.split('.')[0];
+ if (ckeditor_ver == 3) {
+ if (skin != 'kama') {
+ ev.editor.config.toolbar = [[ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList']];
+ }
+ }
+ else {
+ CKEDITOR.plugins.addExternal('uicolor', '{$module_drupal_path}/includes/uicolor/', 'plugin.js');
+ if (uicolor.length == 0 || uicolor == 'default') {
+ delete ev.editor.config.uiColor;
+ }
+ }
+ },
+ blur: ckeditorUiColorOnChange,
+ focus: ckeditorUiColorOnChange
+ }
+});
+</script>";
+ $html .= "</body>";
+ $html .= "</html>";
+ echo $html;
+}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.js
new file mode 100644
index 0000000..f1d169f
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.admin.js
@@ -0,0 +1,132 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+(function ($) {
+ Drupal.ckeditor_ver = false;
+
+ $(document).ready(function() {
+ if (typeof(CKEDITOR) == "undefined")
+ return;
+
+ $('#edit-uicolor-textarea').show();
+
+ Drupal.ckeditor_ver = Drupal.settings.ckeditor_version.split('.')[0];
+
+ Drupal.editSkinEditorInit = function() {
+ var skinframe_src = $('#skinframe').attr('src');
+ //skinframe_src = skinframe_src.replace(/skin=[^&]+/, 'skin='+$("#edit-skin").val());
+ var skin = skinframe_src.match(/skin=([^&]+)/)[1];
+ if ($('#edit-uicolor').val() == 'custom') {
+ skinframe_src = skinframe_src.replace(/uicolor=[^&]+/, 'uicolor='+$('input[name$="uicolor_user"]').val().replace('#', '') || 'D3D3D3');
+ }
+ else {
+ skinframe_src = skinframe_src.replace(/uicolor=[^&]+/, 'uicolor=D3D3D3');
+ }
+ $('#skinframe').attr('src', skinframe_src);
+
+ if (Drupal.ckeditor_ver == 3) {
+ if (skin == "kama") {
+ $("#edit-uicolor").removeAttr('disabled');
+ $("#edit-uicolor").parent().removeClass('form-disabled');
+ }
+ else {
+ $("#edit-uicolor").attr('disabled', 'disabled');
+ $("#edit-uicolor").parent().addClass('form-disabled');
+ }
+ }
+ else {
+ $("#edit-uicolor").removeAttr('disabled');
+ $("#edit-uicolor").parent().removeClass('form-disabled');
+ }
+ };
+
+ Drupal.editSkinEditorInit();
+
+ $("#edit-uicolor").bind("change", function() {
+ Drupal.editSkinEditorInit();
+ });
+
+ $("#input-formats :checkbox").change(function() {
+ $('#security-filters .filter-warning').hide();
+ $('#security-filters div.filter-text-formats[filter]').html('');
+ $('#security-filters ul.text-formats-config').html('');
+ $('#input-formats :checked').each(function() {
+ var format_name = $(this).val();
+ var format_label = $('label[for="' + $(this).attr('id') + '"]').html();
+
+ if (typeof(Drupal.settings.text_formats_config_links[format_name]) != 'undefined') {
+ var text = "<li>" + format_label + " - <a href=\"" + Drupal.settings.text_formats_config_links[format_name].config_url + "\">configure</a></li>";
+ var dataSel = $('#security-filters ul.text-formats-config');
+ var html = dataSel.html();
+ if (html == null || html.length == 0) {
+ dataSel.html(text);
+ }
+ else {
+ html += text;
+ dataSel.html(html);
+ }
+ }
+
+ $('#security-filters div.filter-text-formats[filter]').each(function() {
+ var filter_name = $(this).attr('filter');
+ var dataSel = $(this);
+ var html = dataSel.html();
+ var status = "enabled";
+ if (typeof Drupal.settings.text_format_filters[format_name][filter_name] == 'undefined') {
+ status = "disabled";
+ }
+ var text = "<span class=\"filter-text-format-status " + status + "\">" + format_label + ': </span><br/>';
+
+ if (html == null || html.length == 0) {
+ dataSel.html(text);
+ }
+ else {
+ html += text;
+ dataSel.html(html);
+ }
+ });
+ });
+ });
+ $("#input-formats :checkbox:eq(0)").trigger('change');
+
+ $(".cke_load_toolbar").click(function() {
+ var buttons = eval('Drupal.settings.'+$(this).attr("id"));
+ var text = "[\n";
+ for(i in buttons) {
+ if (typeof buttons[i] == 'string'){
+ text = text + " '/',\n";
+ }
+ else {
+ text = text + " [";
+ max = buttons[i].length - 1;
+ rows = buttons.length - 1;
+ for (j in buttons[i]) {
+ if (j < max){
+ text = text + "'" + buttons[i][j] + "',";
+ } else {
+ text = text + "'" + buttons[i][j] + "'";
+ }
+ }
+ if (i < rows){
+ text = text + "],\n";
+ } else {
+ text = text + "]\n";
+ }
+ }
+ }
+
+ text = text + "]";
+ text = text.replace(/\['\/'\]/g,"'/'");
+ $("#edit-toolbar").attr('value',text);
+ if (Drupal.settings.ckeditor_toolbar_wizard == 't'){
+ Drupal.ckeditorToolbarReload();
+ }
+ return false;
+ });
+
+ if (Drupal.settings.ckeditor_toolbar_wizard == 'f'){
+ $("form#ckeditor-admin-profile-form textarea#edit-toolbar, form#ckeditor-admin-profile-form #edit-toolbar + .grippie").show();
+ }
+ });
+})(jQuery); \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.drush.inc b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.drush.inc
new file mode 100644
index 0000000..1d23960
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.drush.inc
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * Drush integration for the CKEditor module.
+ */
+
+/**
+ * Implements hook_drush_command().
+ */
+function ckeditor_drush_command() {
+ $items['ckeditor-download'] = array(
+ 'callback' => 'ckeditor_drush_download',
+ 'description' => dt('Downloads the required CKEditor library from svn.ckeditor.com.'),
+ 'arguments' => array(
+ 'path' => dt('Optional. The path to the download folder. If omitted, Drush will use the default location (<code>sites/all/libraries/ckeditor</code>).'),
+ ),
+ );
+ return $items;
+}
+
+/**
+ * Downloads
+ */
+function ckeditor_drush_download() {
+ $args = func_get_args();
+ if ($args[0]) {
+ $path = $args[0];
+ }
+ else {
+ $path = drush_get_context('DRUSH_DRUPAL_ROOT') . '/sites/all/libraries/ckeditor';
+ }
+ $svn_cmd = 'svn checkout http://svn.ckeditor.com/CKEditor/releases/stable/ ' . $path;
+ if (drush_shell_exec($svn_cmd)) {
+ drush_log(dt('CKEditor was downloaded to !path.', array('!path' => '<code>' . $path . '</code>')), 'success');
+ }
+ else {
+ drush_log(dt('Drush was unable to download CKEditor to !path.', array('!path' => '<code>' . $path . '</code>')) . '<br/>' . dt('Attempted command: !svn_cmd.', array('!svn_cmd' => '<code>' . $svn_cmd . '</code>')), 'error');
+ }
+}
+
+/**
+ * Implements drush_MODULE_post_COMMAND().
+ */
+function drush_ckeditor_post_enable() {
+ $modules = func_get_args();
+ if (in_array('ckeditor', $modules)) {
+ ckeditor_drush_download();
+ }
+}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.features.inc b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.features.inc
new file mode 100644
index 0000000..ee5b517
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.features.inc
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+
+/**
+ * Implementation of hook_features_export_options()
+ */
+function ckeditor_profile_features_export_options() {
+ $options = array();
+ $profiles = (array) ckeditor_profile_load();
+ foreach ($profiles as $name => $profile) {
+ $options[$name] = $profile->name;
+ }
+ return $options;
+}
+
+/**
+ * Implementation of hook_features_export()
+ */
+function ckeditor_profile_features_export($data, &$export, $module_name = '') {
+ $pipe = array();
+ foreach ((array) $data as $name) {
+ $profile = ckeditor_profile_load($name);
+ if ($profile) {
+ $export['features']['ckeditor_profile'][$name] = $name;
+
+ // Write dependencies on all the roles referenced by this profile
+ foreach ((array) $profile->input_formats as $input_format => $input_format_name) {
+ $pipe['input_formats'][] = $input_format;
+ }
+ }
+ }
+ $export['dependencies'][] = 'ckeditor';
+ return $pipe;
+}
+
+/**
+ * Implementation of hook_features_export_render()
+ */
+function ckeditor_profile_features_export_render($module_name, $data) {
+ $profiles = array();
+ $roles = user_roles();
+ foreach ($data as $name) {
+ $profile = (array) ckeditor_profile_load($name);
+
+ $profiles[$name] = $profile;
+ }
+ $code = ' $data = ' . features_var_export($profiles, ' ') . ';' . PHP_EOL;
+ $code .= ' return $data;';
+
+ return array('ckeditor_profile_defaults' => $code);
+}
+
+/**
+ * Implementation of hook_features_rebuild()
+ */
+function ckeditor_profile_features_rebuild($module) {
+ ckeditor_profile_features_revert($module);
+}
+
+/**
+ * Implementation of hook_features_revert()
+ */
+function ckeditor_profile_features_revert($module) {
+ if ($data = features_get_default('ckeditor_profile', $module)) {
+ $input_formats = filter_formats();
+ foreach ($data as $name => $profile) {
+ // Restore the profile settings
+ db_query("DELETE FROM {ckeditor_settings} WHERE name = :name", array(':name' => $name));
+ db_query("INSERT INTO {ckeditor_settings} (name, settings) VALUES(:name, :settings)", array(':name' => $name, ':settings' => serialize($profile['settings'])));
+
+ // Restore the profile roles
+ foreach ($profile["input_formats"] as $input_format => $input_format_name) {
+ if (isset($input_formats[$input_format])) {
+ if (!db_query("SELECT name FROM {ckeditor_input_format} WHERE format = :format AND name = :name", array(':name' => $name, ':format' => $input_format))->fetchField()) {
+ db_query("INSERT INTO {ckeditor_input_format} (name, format) VALUES(:name, :format)", array(':name' => $name, ':format' => $input_format));
+ }
+ }
+ else {
+ // Make sure they don't have access
+ db_query("DELETE FROM {ckeditor_input_format} WHERE format = :format AND name = :name", array(':name' => $name, ':format' => $input_format));
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.lib.inc b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.lib.inc
new file mode 100644
index 0000000..e054d16
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.lib.inc
@@ -0,0 +1,1545 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+
+/**
+ * Guess the absolute server path to the document root
+ * Usually it should return $_SERVER['DOCUMENT_ROOT']
+ *
+ * @todo Improve me!!
+ * Returns absolute path or false on failure
+ *
+ * @return string|boolean
+ */
+function ckeditor_get_document_root_full_path() {
+ $found = 0;
+ $index_dir = realpath(dirname($_SERVER['SCRIPT_FILENAME'])); // {/dir1/dir2/home/drupal}/index.php
+ if (getcwd() == $index_dir) {
+ $found++;
+ }
+ $drupal_dir = base_path();
+ $index_dir = str_replace('\\', "/", $index_dir);
+ $drupal_dir = str_replace('\\', "/", $drupal_dir);
+ $document_root_dir = $index_dir . '/' . str_repeat('../', substr_count($drupal_dir, '/') - 1);
+ $document_root_dir = realpath($document_root_dir);
+ $document_root_dir = rtrim($document_root_dir, '/\\');
+ if ($document_root_dir == $_SERVER['DOCUMENT_ROOT']) {
+ $found++;
+ }
+ $document_root_dir = str_replace('\\', '/', $document_root_dir);
+
+ if ($document_root_dir != '') {
+ $found++;
+ }
+ if (file_exists($document_root_dir)) {
+ $found++;
+ }
+ if (file_exists($document_root_dir . base_path() . 'includes/bootstrap.inc')) {
+ $found++;
+ }
+
+ if ($found >= 3) {
+ return $document_root_dir;
+ }
+ else {
+ return FALSE;
+ }
+}
+
+/**
+ * Emulates the asp Server.mapPath function.
+ * Given an url path return the physical directory that it corresponds to.
+ *
+ * Returns absolute path or false on failure
+ *
+ * @param string $path
+ * @return string|boolean
+ */
+function ckeditor_resolve_url($path) {
+ if (function_exists('apache_lookup_uri')) {
+ $info = @apache_lookup_uri($path);
+ if (!$info) {
+ return FALSE;
+ }
+ return $info->filename . $info->path_info;
+ }
+
+ $document_root = ckeditor_get_document_root_full_path();
+ if ($document_root !== FALSE) {
+ return $document_root . $path;
+ }
+
+ return FALSE;
+}
+
+/**
+ * List of configured CKEditor toolbars
+ *
+ * @return array
+ */
+function ckeditor_load_toolbar_options() {
+ $arr = array('Basic' => 'Basic', 'Full' => 'Full');
+ $module_drupal_path = drupal_get_path('module', 'ckeditor');
+ $editor_local_path = ckeditor_path('local');
+ $ckconfig_js = $editor_local_path . '/config.js';
+ $ckeditor_config_js = $module_drupal_path . '/ckeditor.config.js';
+ if (file_exists($ckconfig_js) && is_readable($ckconfig_js)) {
+ $fp = @fopen($ckconfig_js, "r");
+ if ($fp) {
+ while (!feof($fp)) {
+ $line = fgets($fp, 1024);
+ $matches = array();
+ if (preg_match('/config.toolbar_([a-z0-9_]+)/i', $line, $matches)) {
+ $arr[$matches[1]] = drupal_ucfirst($matches[1]);
+ }
+ }
+ fclose($fp);
+ }
+ }
+ if (file_exists($ckeditor_config_js) && is_readable($ckeditor_config_js)) {
+ $fp = @fopen($ckeditor_config_js, "r");
+ if ($fp) {
+ while (!feof($fp)) {
+ $line = fgets($fp, 1024);
+ $matches = array();
+ if (preg_match('/config.toolbar_([a-z0-9_]+)/i', $line, $matches)) {
+ $arr[$matches[1]] = drupal_ucfirst($matches[1]);
+ }
+ }
+ fclose($fp);
+ }
+ }
+
+ //oops, we have no information about toolbars, let's use hardcoded array
+ if (empty($arr)) {
+ $arr = array(
+ 'Basic' => 'Basic',
+ 'Default' => 'Default',
+ );
+ }
+ asort($arr);
+
+ return $arr;
+}
+
+/**
+ * List of installed CKEditor skins
+ *
+ * @return array
+ */
+function ckeditor_load_skin_options() {
+ $arr = array();
+ $editor_local_path = ckeditor_path('local');
+ $skin_dir = $editor_local_path . '/skins';
+ if (is_dir($skin_dir)) {
+ $dh = @opendir($skin_dir);
+ if (FALSE !== $dh) {
+ while (($file = readdir($dh)) !== FALSE) {
+ if (in_array($file, array(".", "..", "CVS", ".svn"))) {
+ continue;
+ }
+ if (is_dir($skin_dir . DIRECTORY_SEPARATOR . $file)) {
+ $arr[$file] = drupal_ucfirst($file);
+ }
+ }
+ closedir($dh);
+ }
+ }
+
+ //oops, we have no information about skins, let's use only default
+ if (empty($arr)) {
+ $arr = array(
+ 'kama' => 'Kama',
+ );
+ }
+ asort($arr);
+
+ return $arr;
+}
+
+/**
+ * Return default skin for CKEditor
+ *
+ * @return string
+ */
+function ckeditor_default_skin() {
+ $skin_options = ckeditor_load_skin_options();
+ if (array_key_exists('moono', $skin_options)) {
+ return 'moono';
+ }
+ if (array_key_exists('kama', $skin_options)) {
+ return 'kama';
+ }
+ //if any default theme not exists select first from the list
+ return key(reset($skin_options));
+}
+
+/**
+ * List of installed CKEditor languages
+ *
+ * @return array
+ */
+function ckeditor_load_lang_options() {
+ $arr = array();
+ $editor_local_path = ckeditor_path('local');
+ $lang_file = $editor_local_path . '/lang/_languages.js';
+ if (file_exists($lang_file)) {
+ $f = fopen($lang_file, 'r');
+ $file = fread($f, filesize($lang_file));
+ $tmp = explode('{', $file);
+ if (isset($tmp[2])) {
+ $tmp = explode('}', $tmp[2]);
+ }
+ $langs = explode(',', $tmp[0]);
+ foreach ($langs AS $key => $lang) {
+ preg_match("/'?(\w+-?\w+)'?:'([\w\s\(\)]+)'/i", $lang, $matches);
+ if (isset($matches[1]) && isset($matches[2]))
+ $arr[$matches[1]] = $matches[2];
+ }
+ }
+ //oops, we have no information about languages, let's use those available in CKEditor 2.4.3
+ if (empty($arr)) {
+ $arr = array(
+ 'af' => 'Afrikaans',
+ 'ar' => 'Arabic',
+ 'bg' => 'Bulgarian',
+ 'bn' => 'Bengali/Bangla',
+ 'bs' => 'Bosnian',
+ 'ca' => 'Catalan',
+ 'cs' => 'Czech',
+ 'da' => 'Danish',
+ 'de' => 'German',
+ 'el' => 'Greek',
+ 'en' => 'English',
+ 'en-au' => 'English (Australia)',
+ 'en-ca' => 'English (Canadian)',
+ 'en-uk' => 'English (United Kingdom)',
+ 'eo' => 'Esperanto',
+ 'es' => 'Spanish',
+ 'et' => 'Estonian',
+ 'eu' => 'Basque',
+ 'fa' => 'Persian',
+ 'fi' => 'Finnish',
+ 'fo' => 'Faroese',
+ 'fr' => 'French',
+ 'gl' => 'Galician',
+ 'he' => 'Hebrew',
+ 'hi' => 'Hindi',
+ 'hr' => 'Croatian',
+ 'hu' => 'Hungarian',
+ 'it' => 'Italian',
+ 'ja' => 'Japanese',
+ 'km' => 'Khmer',
+ 'ko' => 'Korean',
+ 'lt' => 'Lithuanian',
+ 'lv' => 'Latvian',
+ 'mn' => 'Mongolian',
+ 'ms' => 'Malay',
+ 'nb' => 'Norwegian Bokmal',
+ 'nl' => 'Dutch',
+ 'no' => 'Norwegian',
+ 'pl' => 'Polish',
+ 'pt' => 'Portuguese (Portugal)',
+ 'pt-br' => 'Portuguese (Brazil)',
+ 'ro' => 'Romanian',
+ 'ru' => 'Russian',
+ 'sk' => 'Slovak',
+ 'sl' => 'Slovenian',
+ 'sr' => 'Serbian (Cyrillic)',
+ 'sr-latn' => 'Serbian (Latin)',
+ 'sv' => 'Swedish',
+ 'th' => 'Thai',
+ 'tr' => 'Turkish',
+ 'uk' => 'Ukrainian',
+ 'vi' => 'Vietnamese',
+ 'zh' => 'Chinese Traditional',
+ 'zh-cn' => 'Chinese Simplified',
+ );
+ }
+ asort($arr);
+ return $arr;
+}
+
+/**
+ * Get the language locale code supported by Scayt for the specified language
+ */
+function ckeditor_scayt_langcode($lang) {
+ $scayt_langs = array(
+ 'en' => 'en_US',
+ 'es' => 'es_ES',
+ 'fr' => 'fr_FR',
+ 'de' => 'de_DE',
+ 'it' => 'it_IT',
+ 'el' => 'el_EL',
+ 'pt' => 'pt_PT',
+ 'da' => 'da_DA',
+ 'sv' => 'sv_SE',
+ 'nl' => 'nl_NL',
+ 'nb' => 'no_NO',
+ 'fi' => 'fi_FI',
+ );
+ if (array_key_exists($lang, $scayt_langs)) {
+ return $scayt_langs[$lang];
+ }
+
+ $default = language_default();
+ $default = $default->language;
+ if (array_key_exists($default, $scayt_langs)) {
+ return $scayt_langs[$default];
+ }
+
+ return 'en_US';
+}
+
+/**
+ * List of CKEditor plugins;
+ *
+ * @return array
+ */
+function ckeditor_load_plugins($render = FALSE) {
+ $arr = array();
+ $base_path = '%base_path%';
+ $editor_path = '%editor_path%';
+ $ckeditor_path = '%module_path%';
+ $plugin_dir = '%plugin_dir%';
+ $plugin_dir_additional = '%plugin_dir_extra%';
+ $pattern = '#\.addButton\([\s]*[\'"](.*?)[\'"][\s]*\,[\s]*\{[\s]*(.*?)[\s]*\}#s';
+
+ /*
+ * External plugins
+ */
+ if (module_exists('ckeditor_swf') && file_exists(drupal_get_path('module', 'ckeditor_swf') . '/plugins/swf/plugin.js')) {
+ $arr['ckeditor_swf'] = array(
+ 'name' => 'swf',
+ 'desc' => t('Support for the CKEditor SWF module'),
+ 'path' => $base_path . drupal_get_path('module', 'ckeditor_swf') . '/plugins/swf/',
+ 'buttons' => FALSE,
+ 'default' => 't'
+ );
+ }
+
+ if (module_exists('ckeditor_link') && file_exists(drupal_get_path('module', 'ckeditor_link') . '/plugins/link/plugin.js')) {
+ $arr['ckeditor_link'] = array(
+ 'name' => 'drupal_path',
+ 'desc' => t('Support for the CKEditor Link module'),
+ 'path' => $base_path . drupal_get_path('module', 'ckeditor_link') . '/plugins/link/',
+ 'buttons' => FALSE,
+ 'default' => 't'
+ );
+ }
+
+ if (module_exists('linkit') && file_exists(drupal_get_path('module', 'linkit') . '/editors/ckeditor/plugin.js')) {
+ $arr['linkit'] = array(
+ 'name' => 'Linkit',
+ 'desc' => t('Support for the Linkit module <em>(buttons: Linkit)</em>'),
+ 'path' => $base_path . drupal_get_path('module', 'linkit') . '/editors/ckeditor/',
+ 'buttons' => array(
+ 'Linkit' => array(
+ 'title' => 'Linkit',
+ 'icon' => $base_path . drupal_get_path('module', 'linkit') . '/editors/ckeditor/linkit.png'
+ )
+ ),
+ 'default' => 't'
+ );
+ }
+
+ /*
+ * CKEditor build-in plugins
+ */
+ $_editor_path = ckeditor_path('local') . '/';
+ if (file_exists($_editor_path . 'plugins/tableresize/plugin.js')) {
+ $arr['tableresize'] = array(
+ 'name' => 'tableresize',
+ 'desc' => t('Table Resize plugin'),
+ 'path' => $editor_path . 'plugins/tableresize/',
+ 'buttons' => FALSE,
+ 'default' => 't'
+ );
+ }
+
+ if (file_exists($_editor_path . 'plugins/autogrow/plugin.js')) {
+ $arr['autogrow'] = array(
+ 'name' => 'autogrow',
+ 'desc' => t('Auto Grow plugin'),
+ 'path' => $editor_path . 'plugins/autogrow/',
+ 'buttons' => FALSE,
+ 'default' => 'f'
+ );
+ }
+
+ if (file_exists($_editor_path . 'plugins/stylesheetparser/plugin.js')) {
+ $arr['stylesheetparser'] = array(
+ 'name' => 'stylesheetparser',
+ 'desc' => t('Stylesheet Parser plugin'),
+ 'path' => $editor_path . 'plugins/stylesheetparser/',
+ 'buttons' => FALSE,
+ 'default' => 'f'
+ );
+ }
+
+ /*
+ * CKEditor module plugins
+ */
+ $_plugin_dir = ckeditor_module_path('local') . '/plugins/';
+ if ($handle = opendir($_plugin_dir)) {
+ while (false !== ($file = readdir($handle))) {
+ if (is_dir($_plugin_dir . $file) && file_exists($_plugin_dir . $file . '/plugin.js')) {
+ $source = file_get_contents($_plugin_dir . $file . '/plugin.js');
+ $buttons = array();
+ if (preg_match_all($pattern, $source, $matches)) {
+ foreach ($matches[1] as $i => $button_name) {
+ if (preg_match('#(icon)[\s]*\:[\s]*([^\,\n]*)#', $matches[2][$i], $matches2)) {
+ $buttons[$button_name] = array();
+ $buttons[$button_name]['label'] = $button_name;
+ $matches2[2] = str_replace(array('this.path', '+', '\'', '"'), array('', '', '', ''), $matches2[2]);
+ $buttons[$button_name]['icon'] = trim($matches2[2]);
+ }
+ }
+ }
+ if (preg_match('#@file ([^\n\r]*)#', $source, $matches)) {
+ $arr[$file] = array(
+ 'name' => $file,
+ 'desc' => t($matches[1]),
+ 'path' => $plugin_dir . $file . '/',
+ 'buttons' => (count($buttons) > 0) ? $buttons : FALSE,
+ 'default' => 'f'
+ );
+ }
+ else {
+ $arr[$file] = array(
+ 'name' => $file,
+ 'desc' => t('Plugin file: ' . $file),
+ 'path' => $plugin_dir . $file . '/',
+ 'buttons' => (count($buttons) > 0) ? $buttons : FALSE,
+ 'default' => 'f'
+ );
+ }
+ }
+ }
+ closedir($handle);
+ }
+
+ /*
+ * CKEditor module plugins - additional directory
+ */
+ $_plugin_dir_additional = ckeditor_plugins_path('local') . '/';
+ if ($_plugin_dir != $_plugin_dir_additional && is_dir($_plugin_dir_additional) && $handle = opendir($_plugin_dir_additional)) {
+ while (false !== ($file = readdir($handle))) {
+ if (is_dir($_plugin_dir_additional . $file) && file_exists($_plugin_dir_additional . $file . '/plugin.js')) {
+ $source = file_get_contents($_plugin_dir_additional . $file . '/plugin.js');
+ $buttons = array();
+ if (preg_match_all($pattern, $source, $matches)) {
+ foreach ($matches[1] as $i => $button_name) {
+ if (preg_match('#(icon)[\s]*\:[\s]*([^\,\n]*)#', $matches[2][$i], $matches2)) {
+ $buttons[$button_name] = array();
+ $buttons[$button_name]['label'] = $button_name;
+ $matches2[2] = str_replace(array('this.path', '+', '\'', '"'), array('', '', '', ''), $matches2[2]);
+ $buttons[$button_name]['icon'] = trim($matches2[2]);
+ }
+ }
+ }
+ if (preg_match('#@file ([^\n\r]*)#', $source, $matches)) {
+ $arr[$file] = array(
+ 'name' => $file,
+ 'desc' => t($matches[1]),
+ 'path' => $plugin_dir_additional . $file . '/',
+ 'buttons' => (count($buttons) > 0) ? $buttons : FALSE,
+ 'default' => 'f'
+ );
+ }
+ else {
+ $arr[$file] = array(
+ 'name' => $file,
+ 'desc' => t('Plugin file: ' . $file),
+ 'path' => $plugin_dir_additional . $file . '/',
+ 'buttons' => (count($buttons) > 0) ? $buttons : FALSE,
+ 'default' => 'f'
+ );
+ }
+ }
+ }
+
+ closedir($handle);
+ }
+
+ /*
+ * CKEditor plugins registered by hook
+ */
+ $plugins = module_invoke_all('ckeditor_plugin');
+
+ foreach ($plugins as $i => $plugin) {
+ if (file_exists($plugin['path'] . 'plugin.js')) {
+ $source = file_get_contents($plugin['path'] . 'plugin.js');
+ $plugins[$i]['path'] = $base_path . $plugin['path'];
+ if (!isset($plugin['buttons']) || count($plugin['buttons']) == 0) {
+ $buttons = array();
+ if (preg_match_all($pattern, $source, $matches)) {
+ foreach ($matches[1] as $j => $button_name) {
+ if (preg_match('#(icon)[\s]*\:[\s]*([^\,\n]*)#', $matches[2][$j], $matches2)) {
+ $buttons[$button_name] = array();
+ $buttons[$button_name]['label'] = $button_name;
+ $matches2[2] = str_replace(array('this.path', '+', '\'', '"'), array('', '', '', ''), $matches2[2]);
+ $buttons[$button_name]['icon'] = trim($matches2[2]);
+ }
+ }
+ }
+ $plugins[$i]['buttons'] = (count($buttons) > 0) ? $buttons : FALSE;
+ }
+ }
+ else {
+ unset($plugins[$i]);
+ }
+ }
+ $arr = array_merge($arr, $plugins);
+
+ if (isset($arr['media']) && module_exists('media') == FALSE) {
+ unset($arr['media']);
+ }
+
+ if (isset($arr['imce']) && module_exists('imce') == FALSE) {
+ unset($arr['imce']);
+ }
+ //remove page break button if there is no module to do this
+ if (isset($arr['drupalbreaks']['buttons']['DrupalPageBreak']) && !module_exists('paging') && !module_exists('pagebreak')) {
+ unset($arr['drupalbreaks']['buttons']['DrupalPageBreak']);
+ }
+
+ if (isset($arr['drupalbreaks'])) {
+ $arr['drupalbreaks']['default'] = 't';
+ }
+
+ ksort($arr);
+ if ($render === TRUE) {
+ $arr = ckeditor_plugins_render($arr);
+ }
+ return $arr;
+}
+
+/**
+ * Render CKEditor plugins path
+ */
+function ckeditor_plugins_render($plugins) {
+ $render = array();
+ $render["%base_path%"] = ckeditor_base_path('relative') . '/';
+ $render["%editor_path%"] = ckeditor_path('relative') . '/';
+ $render["%module_path%"] = ckeditor_module_path('relative') . '/';
+ $render["%plugin_dir%"] = $render["%module_path%"] . 'plugins/';
+ $render["%plugin_dir_extra%"] = ckeditor_plugins_path('relative') . '/';
+
+ foreach ((array) $plugins as $i => $plugin) {
+ $plugins[$i]['path'] = str_replace(array_keys($render), array_values($render), $plugin['path']);
+ }
+
+ return $plugins;
+}
+
+/**
+ * Get default ckeditor settings
+ *
+ * @return array
+ */
+function ckeditor_user_get_setting_default() {
+ $default = array(
+ 'default' => 't',
+ 'show_toggle' => 't',
+ 'width' => '100%',
+ 'lang' => 'en',
+ 'auto_lang' => 't',
+ );
+
+ return $default;
+}
+
+/**
+ * Return CKEditor settings
+ *
+ * @param object $user
+ * @param object $profile
+ * @param string $setting
+ * @return array
+ */
+function ckeditor_user_get_setting($user, $profile, $setting) {
+ $default = ckeditor_user_get_setting_default();
+
+ if (user_access('customize ckeditor')) {
+ $status = isset($user->data['ckeditor_' . $setting]) ? $user->data['ckeditor_' . $setting] : (isset($profile->settings[$setting]) ? $profile->settings[$setting] : $default[$setting]);
+ }
+ else {
+ $status = isset($profile->settings[$setting]) ? $profile->settings[$setting] : $default[$setting];
+ }
+
+ return $status;
+}
+
+/**
+ * Return CKEditor profile by input format
+ *
+ * @param string $input_format
+ * @return object|boolean
+ */
+function ckeditor_get_profile($input_format) {
+ $select = db_select('ckeditor_settings', 's');
+ $select->join('ckeditor_input_format', 'f', 'f.name = s.name');
+ $result = $select->fields('s', array("name"))->condition('f.format', $input_format)->condition('f.name', 'CKEditor Global Profile', '<>')->range(0, 1)->execute()->fetchAssoc();
+
+ if ($result && $profile = ckeditor_profile_load($result['name'])) {
+ return $profile;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Return CKEditor profile list
+ */
+function ckeditor_profile_input_formats() {
+ $select = db_select('ckeditor_settings', 's');
+ $select->join('ckeditor_input_format', 'f', 'f.name = s.name');
+ $result = $select->fields('s', array("name"))->fields('f', array("format"))->execute();
+
+ $list = array();
+ while ($row = $result->fetchAssoc()) {
+ if (!isset($row['name'])) {
+ $list[$row['name']] = array();
+ }
+ $list[$row['name']][] = $row['format'];
+ }
+
+ return $list;
+}
+
+/**
+ * Search and return CKEditor plugin path
+ *
+ * @return string
+ */
+function _ckeditor_script_path() {
+ $jspath = FALSE;
+ $module_path = drupal_get_path('module', 'ckeditor');
+
+ if (file_exists($module_path . '/ckeditor/ckeditor.js')) {
+ $jspath = '%m/ckeditor';
+ }
+ elseif (file_exists($module_path . '/ckeditor/ckeditor/ckeditor.js')) {
+ $jspath = '%m/ckeditor/ckeditor';
+ }
+ elseif (file_exists('sites/all/libraries/ckeditor/ckeditor.js')) {
+ $jspath = '%l/ckeditor';
+ }
+ return $jspath;
+}
+
+/**
+ * Determines whether the CKEditor sources are present
+ *
+ * It checks if ckeditor.js is present.
+ *
+ * This function is used by ckeditor_requirements()
+ *
+ * @return boolean True if CKEditor is installed
+ */
+function _ckeditor_requirements_isinstalled() {
+ $editor_path = ckeditor_path('local');
+ $jspath = $editor_path . '/ckeditor.js';
+
+ $jsp = file_exists($jspath);
+ if (!$jsp && ($editor_path = _ckeditor_script_path())) {
+ $result = db_select('ckeditor_settings', 's')->fields('s')->condition('name', 'CKEditor Global Profile')->execute()->fetchAssoc();
+ if ($result) {
+ $result['settings'] = unserialize($result['settings']);
+ $result['settings']['ckeditor_path'] = $editor_path;
+ $result['settings'] = serialize($result['settings']);
+ db_update('ckeditor_settings')->fields(array("settings" => $result['settings']))->condition('name', 'CKEditor Global Profile')->execute();
+
+ $jsp = TRUE;
+ ckeditor_path('local', TRUE);
+ }
+ }
+ return $jsp;
+}
+
+/**
+ * Compile settings of all profiles at returns is as array
+ *
+ * @param string $input_format
+ * @param boolean $clear
+ * @return array
+ */
+function ckeditor_profiles_compile($input_format = FALSE, $clear = FALSE) {
+ static $compiled = FALSE;
+ static $_ckeditor_compiled = array();
+
+ if ($clear !== FALSE && $compiled !== FALSE) {
+ $compiled = FALSE;
+ }
+
+ if ($compiled === TRUE) {
+ return ( $input_format === FALSE ) ? $_ckeditor_compiled : ( isset($_ckeditor_compiled[$input_format]) ? $_ckeditor_compiled[$input_format] : array() );
+ }
+
+ $global_profile = ckeditor_profile_load('CKEditor Global Profile');
+
+ $profiles_list = ckeditor_profile_input_formats();
+
+ foreach ($profiles_list AS $_profile => $_inputs) {
+ $profile = ckeditor_profile_load($_profile);
+ $setting = ckeditor_profile_settings_compile($global_profile, $profile);
+
+ foreach ($_inputs AS $_input) {
+ $_ckeditor_compiled[$_input] = $setting;
+ }
+ }
+
+ $compiled = TRUE;
+
+ return ( $input_format === FALSE ) ? $_ckeditor_compiled : $_ckeditor_compiled[$input_format];
+}
+
+/**
+ * Compile settings of profile
+ *
+ * @param object $global_profile
+ * @param object $profile
+ * @return array
+ */
+function ckeditor_profile_settings_compile($global_profile, $profile) {
+ global $user, $language, $theme;
+
+ $current_theme = variable_get('theme_default', $theme);
+
+ $settings = array();
+ $conf = array();
+ $conf = $profile->settings;
+ $profile_name = $profile->name;
+
+ if (user_access('customize ckeditor')) {
+ foreach (array('default', 'show_toggle', 'width', 'lang', 'auto_lang') as $setting) {
+ $conf[$setting] = ckeditor_user_get_setting($user, $profile, $setting);
+ }
+ }
+
+ if (!isset($conf['ss'])) {
+ $conf['ss'] = 2;
+ }
+
+ $themepath = drupal_get_path('theme', $current_theme) . '/';
+ $host = base_path();
+
+ // setting some variables
+ $base_path = ckeditor_base_path('relative');
+ $module_drupal_path = ckeditor_module_path('relative');
+ $module_drupal_local_path = ckeditor_module_path('local');
+ $editor_path = ckeditor_path('relative');
+ $editor_local_path = ckeditor_path('local');
+
+ // get the default drupal files path
+ $files_path = $host . variable_get('file_private_path', conf_path() . '/files');
+
+ $toolbar = $conf['toolbar'];
+
+ if (!empty($conf['theme_config_js']) && $conf['theme_config_js'] == 't' && file_exists($themepath . 'ckeditor.config.js')) {
+ $ckeditor_config_path = $host . $themepath . 'ckeditor.config.js?' . @filemtime($themepath . 'ckeditor.config.js');
+ }
+ else {
+ $ckeditor_config_path = $module_drupal_path . "/ckeditor.config.js?" . @filemtime($module_drupal_path . "/ckeditor.config.js");
+ }
+
+ $settings['customConfig'] = $ckeditor_config_path;
+ $settings['defaultLanguage'] = $conf['lang'];
+ $settings['toolbar'] = $toolbar;
+ $settings['enterMode'] = constant("CKEDITOR_ENTERMODE_" . strtoupper($conf['enter_mode']));
+ $settings['shiftEnterMode'] = constant("CKEDITOR_ENTERMODE_" . strtoupper($conf['shift_enter_mode']));
+ $settings['toolbarStartupExpanded'] = ( $conf['expand'] == 't' );
+ $settings['width'] = $conf['width'];
+ //check if skin exists, if not select default one
+ if (isset($global_profile->settings['skin']) && file_exists($editor_local_path . '/skins/' . $global_profile->settings['skin'])) {
+ $settings['skin'] = $global_profile->settings['skin'];
+ }
+ else {
+ $settings['skin'] = ckeditor_default_skin();
+ }
+ $settings['format_tags'] = $conf['font_format'];
+ $settings['show_toggle'] = $conf['show_toggle'];
+ $settings['ss'] = $conf['ss'];
+
+ if (isset($conf['language_direction'])) {
+ switch ($conf['language_direction']) {
+ case 'default':
+ if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL) {
+ $settings['contentsLangDirection'] = 'rtl';
+ }
+ break;
+ case 'ltr':
+ $settings['contentsLangDirection'] = 'ltr';
+ break;
+ case 'rtl':
+ $settings['contentsLangDirection'] = 'rtl';
+ break;
+ }
+ }
+
+ if (isset($conf['loadPlugins'])) {
+ $settings['loadPlugins'] = ckeditor_plugins_render($conf['loadPlugins']);
+
+ if (array_key_exists('media', $settings['loadPlugins']) && module_exists('media')) {
+ module_load_include('inc', 'media', 'includes/media.browser');
+ $javascript = media_browser_js();
+ foreach ($javascript as $key => $definitions) {
+ foreach ($definitions as $definition) {
+ $function = 'drupal_add_' . $key;
+ call_user_func_array($function, $definition);
+ }
+ }
+ drupal_add_js(drupal_get_path('module', 'ckeditor') . '/plugins/media/library.js', array('scope' => 'footer', 'weight' => -20));
+ }
+ }
+ else {
+ $settings['loadPlugins'] = array();
+ }
+
+ //add support for divarea plugin from CKE4
+ if (((isset($conf['use_divarea']) && $conf['use_divarea'] == 't') || !isset($conf['use_divarea'])) && file_exists($editor_local_path . '/plugins/divarea/plugin.js')) {
+ $settings['loadPlugins']['divarea'] = array('name' => 'divarea', 'path' => $editor_path . '/plugins/divarea/', 'buttons' => FALSE, 'default' => 't');
+ }
+
+ if (isset($conf['html_entities']) && $conf['html_entities'] == 'f') {
+ $settings['entities'] = FALSE;
+ $settings['entities_greek'] = FALSE;
+ $settings['entities_latin'] = FALSE;
+ }
+ if (isset($conf['scayt_autoStartup']) && $conf['scayt_autoStartup'] == 't') {
+ $settings['scayt_autoStartup'] = TRUE;
+ }
+ else {
+ $settings['scayt_autoStartup'] = FALSE;
+ }
+
+ if ($conf['auto_lang'] == "f") {
+ $settings['language'] = $conf['lang'];
+ //[#1473010]
+ $settings['scayt_sLang'] = ckeditor_scayt_langcode($conf['lang']);
+ }
+
+ if (isset($conf['forcePasteAsPlainText']) && $conf['forcePasteAsPlainText'] == 't') {
+ $settings['forcePasteAsPlainText'] = TRUE;
+ }
+
+ if (isset($conf['custom_formatting']) && $conf['custom_formatting'] == 't') {
+ foreach ($conf['formatting']['custom_formatting_options'] as $k => $v) {
+ if ($v === 0) {
+ $conf['formatting']['custom_formatting_options'][$k] = FALSE;
+ }
+ else {
+ $conf['formatting']['custom_formatting_options'][$k] = TRUE;
+ }
+ }
+ $settings['output_pre_indent'] = $conf['formatting']['custom_formatting_options']['pre_indent'];
+ unset($conf['formatting']['custom_formatting_options']['pre_indent']);
+ $settings['custom_formatting'] = $conf['formatting']['custom_formatting_options'];
+ }
+
+ // add code for filebrowser for users that have access
+ $filebrowser = !empty($conf['filebrowser']) ? $conf['filebrowser'] : 'none';
+ $filebrowser_image = !empty($conf['filebrowser_image']) ? $conf['filebrowser_image'] : $filebrowser;
+ $filebrowser_flash = !empty($conf['filebrowser_flash']) ? $conf['filebrowser_flash'] : $filebrowser;
+
+ if ($filebrowser == 'imce' && !module_exists('imce')) {
+ $filebrowser = 'none';
+ }
+
+ if ($filebrowser == 'elfinder' && !module_exists('elfinder')) {
+ $filebrowser = 'none';
+ }
+
+ /* MODULES NOT PORTED TO D7
+ if ($filebrowser == 'tinybrowser' && !module_exists('tinybrowser')) {
+ $filebrowser = 'none';
+ }
+
+ if ($filebrowser == 'ib' && !module_exists('imagebrowser')) {
+ $filebrowser = 'none';
+ }
+ if ($filebrowser == 'webfm' && !module_exists('webfm_popup')) {
+ $filebrowser = 'none';
+ }
+ */
+ if ($filebrowser_image != $filebrowser) {
+ if ($filebrowser_image == 'imce' && !module_exists('imce')) {
+ $filebrowser_image = $filebrowser;
+ }
+
+ if ($filebrowser_image == 'elfinder' && !module_exists('elfinder')) {
+ $filebrowser_image = $filebrowser;
+ }
+ /* MODULES NOT PORTED TO D7
+ if ($filebrowser_image == 'tinybrowser' && !module_exists('tinybrowser')) {
+ $filebrowser_image = $filebrowser;
+ }
+ if ($filebrowser_image == 'ib' && !module_exists('imagebrowser')) {
+ $filebrowser_image = $filebrowser;
+ }
+ if ($filebrowser_image == 'webfm' && !module_exists('webfm_popup')) {
+ $filebrowser_image = $filebrowser;
+ }
+ */
+ }
+
+ if ($filebrowser_flash != $filebrowser) {
+ if ($filebrowser_flash == 'imce' && !module_exists('imce')) {
+ $filebrowser_flash = $filebrowser;
+ }
+
+ if ($filebrowser_image == 'elfinder' && !module_exists('elfinder')) {
+ $filebrowser_flash = $filebrowser;
+ }
+ /* MODULES NOT PORTED TO D7
+ if ($filebrowser_image == 'tinybrowser' && !module_exists('tinybrowser')) {
+ $filebrowser_flash = $filebrowser;
+ }
+ if ($filebrowser_flash == 'ib' && !module_exists('imagebrowser')) {
+ $filebrowser_flash = $filebrowser;
+ }
+ if ($filebrowser_flash == 'webfm' && !module_exists('webfm_popup')) {
+ $filebrowser_flash = $filebrowser;
+ }
+ */
+ }
+
+ if ($filebrowser == 'ckfinder' || $filebrowser_image == 'ckfinder' || $filebrowser_flash == 'ckfinder') {
+ if (user_access('allow CKFinder file uploads')) {
+ if (!empty($profile->settings['UserFilesPath'])) {
+ $_SESSION['ckeditor'][$profile_name]['UserFilesPath'] = strtr($profile->settings['UserFilesPath'], array("%f" => variable_get('file_public_path', conf_path() . '/files'), "%u" => $user->uid, "%b" => $host, "%n" => $user->name));
+ }
+ else {
+ $_SESSION['ckeditor'][$profile_name]['UserFilesPath'] = strtr('%b%f/', array("%f" => variable_get('file_public_path', conf_path() . '/files'), "%u" => $user->uid, "%b" => $host, "%n" => $user->name));
+ }
+ if (!empty($profile->settings['UserFilesAbsolutePath'])) {
+ $_SESSION['ckeditor'][$profile_name]['UserFilesAbsolutePath'] = strtr($profile->settings['UserFilesAbsolutePath'], array("%f" => variable_get('file_public_path', conf_path() . '/files'), "%u" => $user->uid, "%b" => base_path(), "%d" => ckeditor_get_document_root_full_path(), "%n" => $user->name));
+ }
+ else {
+ $_SESSION['ckeditor'][$profile_name]['UserFilesAbsolutePath'] = strtr('%d%b%f/', array("%f" => variable_get('file_public_path', conf_path() . '/files'), "%u" => $user->uid, "%b" => base_path(), "%d" => ckeditor_get_document_root_full_path(), "%n" => $user->name));
+ }
+ if (variable_get('file_default_scheme', '') == 'private') {
+ $private_dir = isset($global_profile->settings['private_dir']) ? trim($global_profile->settings['private_dir'], '\/') : '';
+ if (!empty($private_dir)) {
+ $private_dir = strtr($private_dir, array('%u' => $user->uid, '%n' => $user->name));
+ $_SESSION['ckeditor'][$profile_name]['UserFilesPath'] = url('system/files') . '/' . $private_dir . '/';
+ $_SESSION['ckeditor'][$profile_name]['UserFilesAbsolutePath'] = variable_get('file_private_path', '') . DIRECTORY_SEPARATOR . $private_dir . DIRECTORY_SEPARATOR;
+ }
+ else {
+ $_SESSION['ckeditor'][$profile_name]['UserFilesPath'] = url('system/files') . '/';
+ $_SESSION['ckeditor'][$profile_name]['UserFilesAbsolutePath'] = variable_get('file_private_path', '') . DIRECTORY_SEPARATOR;
+ }
+ }
+ }
+ }
+ /* MODULES NOT PORTED TO D7
+ if (in_array('tinybrowser', array($filebrowser, $filebrowser_image, $filebrowser_flash))) {
+ $popup_win_size = variable_get('tinybrowser_popup_window_size', '770x480');
+ if (!preg_match('#\d+x\d+#is', $popup_win_size)) {
+ $popup_win_size = '770x480';
+ }
+ $popup_win_size = trim($popup_win_size);
+ $popup_win_size = strtolower($popup_win_size);
+ $win_size = split('x', $popup_win_size);
+ }
+ */
+ switch ($filebrowser) {
+ case 'ckfinder':
+ if (user_access('allow CKFinder file uploads')) {
+ $ckfinder_full_path = ckfinder_path('relative');
+ $settings['filebrowserBrowseUrl'] = $ckfinder_full_path . '/ckfinder.html?id=' . $profile_name;
+ $settings['filebrowserImageBrowseUrl'] = $ckfinder_full_path . '/ckfinder.html?Type=Images&id=' . $profile_name;
+ $settings['filebrowserFlashBrowseUrl'] = $ckfinder_full_path . '/ckfinder.html?Type=Flash&id=' . $profile_name;
+ $settings['filebrowserUploadUrl'] = $ckfinder_full_path . '/core/connector/php/connector.php?command=QuickUpload&type=Files&id=' . $profile_name;
+ $settings['filebrowserImageUploadUrl'] = $ckfinder_full_path . '/core/connector/php/connector.php?command=QuickUpload&type=Images&id=' . $profile_name;
+ $settings['filebrowserFlashUploadUrl'] = $ckfinder_full_path . '/core/connector/php/connector.php?command=QuickUpload&type=Flash&id=' . $profile_name;
+ }
+ break;
+ case 'imce':
+ $settings['filebrowserBrowseUrl'] = url('imce', array('query' => array('app' => 'ckeditor|sendto@ckeditor_imceSendTo|')));
+ break;
+ case 'elfinder':
+ $settings['filebrowserBrowseUrl'] = $host . "index.php?q=elfinder&app=ckeditor";
+ break;
+ /* MODULES NOT PORTED TO D7
+ case 'webfm':
+ if (user_access('access webfm')) {
+ $settings['filebrowserBrowseUrl'] = $host . "index.php?q=webfm_popup";
+ }
+ break;
+ case 'ib':
+ if (user_access('browse own images')) {
+ $settings['filebrowserBrowseUrl'] = $host . "index.php?q=imagebrowser/view/browser&app=ckeditor";
+ $settings['filebrowserWindowWidth'] = 700;
+ $settings['filebrowserWindowHeight'] = 520;
+ }
+ break;
+ case 'tinybrowser':
+ $settings['filebrowserBrowseUrl'] = $host . drupal_get_path('module', 'tinybrowser') . "/tinybrowser/tinybrowser.php?type=file";
+ $settings['filebrowserWindowWidth'] = (int) $win_size[0] + 15;
+ $settings['filebrowserWindowHeight'] = (int) $win_size[1] + 15;
+ break;
+ */
+ }
+
+ if ($filebrowser_image != $filebrowser) {
+ switch ($filebrowser_image) {
+ case 'ckfinder':
+ if (user_access('allow CKFinder file uploads')) {
+ $ckfinder_full_path = ckfinder_path('relative');
+ $settings['filebrowserImageBrowseUrl'] = $ckfinder_full_path . '/ckfinder.html?Type=Images&id=' . $profile_name;
+ $settings['filebrowserImageUploadUrl'] = $ckfinder_full_path . '/core/connector/php/connector.php?command=QuickUpload&type=Images&id=' . $profile_name;
+ }
+ break;
+ case 'imce':
+ $settings['filebrowserImageBrowseUrl'] = url('imce', array('query' => array('app' => 'ckeditor|sendto@ckeditor_imceSendTo|')));
+ break;
+ case 'elfinder':
+ $settings['filebrowserImageBrowseUrl'] = $host . "index.php?q=elfinder&app=ckeditor";
+ break;
+ /* MODULES NOT PORTED TO D7
+ case 'webfm':
+ if (user_access('access webfm')) {
+ $settings['filebrowserImageBrowseUrl'] = $host . "index.php?q=webfm_popup";
+ }
+ break;
+ case 'ib':
+ if (user_access('browse own images')) {
+ $settings['filebrowserImageBrowseUrl'] = $host . "index.php?q=imagebrowser/view/browser&app=ckeditor";
+ $settings['filebrowserImageWindowWidth'] = 680;
+ $settings['filebrowserImageWindowHeight'] = 439;
+ }
+ break;
+ case 'tinybrowser':
+ $settings['filebrowserImageBrowseUrl'] = $host . drupal_get_path('module', 'tinybrowser') . "/tinybrowser/tinybrowser.php?type=image";
+ $settings['filebrowserImageWindowWidth'] = (int) $win_size[0] + 15;
+ $settings['filebrowserImageWindowHeight'] = (int) $win_size[1] + 15;
+ break;
+ */
+ }
+ }
+
+ if ($filebrowser_flash != $filebrowser) {
+ switch ($filebrowser_flash) {
+ case 'ckfinder':
+ if (user_access('allow CKFinder file uploads')) {
+ $ckfinder_full_path = ckfinder_path('relative');
+ $settings['filebrowserFlashBrowseUrl'] = $ckfinder_full_path . '/ckfinder.html?Type=Images&id=' . $profile_name;
+ $settings['filebrowserFlashUploadUrl'] = $ckfinder_full_path . '/core/connector/php/connector.php?command=QuickUpload&type=Images&id=' . $profile_name;
+ }
+ break;
+ case 'imce':
+ $settings['filebrowserFlashBrowseUrl'] = url('imce', array('query' => array('app' => 'ckeditor|sendto@ckeditor_imceSendTo|')));
+ break;
+ case 'elfinder':
+ $settings['filebrowserFlashBrowseUrl'] = $host . "index.php?q=elfinder&app=ckeditor";
+ break;
+ /* MODULES NOT PORTED TO D7
+ case 'webfm':
+ if (user_access('access webfm')) {
+ $settings['filebrowserFlashBrowseUrl'] = $host . "index.php?q=webfm_popup";
+ }
+ break;
+ case 'ib':
+ if (user_access('browse own images')) {
+ $settings['filebrowserFlashBrowseUrl'] = $host . "index.php?q=imagebrowser/view/browser&app=ckeditor";
+ $settings['filebrowserFlashWindowWidth'] = 680;
+ $settings['filebrowserFlashWindowHeight'] = 439;
+ }
+ break;
+ case 'tinybrowser':
+ $settings['filebrowserFlashBrowseUrl'] = $host . drupal_get_path('module', 'tinybrowser') . "/tinybrowser/tinybrowser.php?type=media";
+ $settings['filebrowserFlashWindowWidth'] = (int) $win_size[0] + 15;
+ $settings['filebrowserFlashWindowHeight'] = (int) $win_size[1] + 15;
+ break;
+ */
+ }
+ }
+
+ if (!empty($conf['js_conf'])) {
+ preg_match_all('#config\.(\w+)[\s]*=[\s]*(.+?);[\s]*(?=config\.|$)#is', preg_replace("/[\n\r]+/", "", $conf['js_conf']), $matches);
+ foreach ($matches[2] as $i => $match) {
+ if (!empty($match)) {
+ $value = trim($match, " ;\n\r\t\0\x0B");
+ if (strcasecmp($value, 'true') == 0) {
+ $value = TRUE;
+ }
+ if (strcasecmp($value, 'false') == 0) {
+ $value = FALSE;
+ }
+ $settings["js_conf"][$matches[1][$i]] = $value;
+ }
+ }
+ }
+
+ $settings['stylesCombo_stylesSet'] = "drupal:" . $module_drupal_path . '/ckeditor.styles.js';
+ if (!empty($conf['css_style'])) {
+ if ($conf['css_style'] == 'theme' && file_exists($themepath . 'ckeditor.styles.js')) {
+ $settings['stylesCombo_stylesSet'] = "drupal:" . $host . $themepath . 'ckeditor.styles.js';
+ }
+ elseif (!empty($conf['css_style']) && $conf['css_style'] == 'self') {
+ $conf['styles_path'] = str_replace("%h%t", "%t", $conf['styles_path']);
+ $settings['stylesCombo_stylesSet'] = "drupal:" . str_replace(array('%h', '%t', '%m'), array($host, $host . $themepath, $module_drupal_path), $conf['styles_path']);
+ }
+ }
+
+ // add custom stylesheet if configured
+ // lets hope it exists but we'll leave that to the site admin
+ $query_string = '?' . substr(variable_get('css_js_query_string', '0'), 0, 1);
+ $css_files = array();
+ switch ($conf['css_mode']) {
+ case 'theme':
+ global $language, $base_theme_info;
+ $themes = list_themes();
+ $theme_info = $themes[$current_theme];
+ if (!empty($theme_info->stylesheets)) {
+ $editorcss = "\"";
+ foreach ($base_theme_info as $base) { // Grab stylesheets from base theme
+ if (!empty($base->stylesheets)) { // may be empty when the base theme reference in the info file is invalid
+ foreach ($base->stylesheets as $type => $stylesheets) {
+ if ($type != "print") {
+ foreach ($stylesheets as $name => $path) {
+ if (file_exists($path)) {
+ $css_files[$name] = $host . $path . $query_string;
+ // Grab rtl stylesheets ( will get rtl css files when thay are named with suffix "-rtl.css" (ex: fusion baased themes) )
+ if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL && substr($path, 0, -8) != "-rtl.css") {
+ $rtl_path = substr($path, 0, -4) . "-rtl.css";
+ if (file_exists($rtl_path)) {
+ $css_files[$name . "-rtl"] = $host . $rtl_path . $query_string;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if (!empty($theme_info->stylesheets)) { // Grab stylesheets from current theme
+ foreach ($theme_info->stylesheets as $type => $stylesheets) {
+ if ($type != "print") {
+ foreach ($stylesheets as $name => $path) {
+ // Checks if less module exists...
+ if (strstr($path, '.less') && module_exists('less')) {
+ $path = 'sites/default/files/less/' . $path; // append the less file path
+ $path = str_replace('.less', '', $path); // remove the .less
+ }
+ if (file_exists($path)) {
+ $css_files[$name] = $host . $path . $query_string;
+ // Grab rtl stylesheets ( will get rtl css files when thay are named with suffix "-rtl.css" (ex: fusion baased themes) )
+ if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL && substr($path, 0, -8) != "-rtl.css") {
+ $rtl_path = substr($path, 0, -4) . "-rtl.css";
+ if (file_exists($rtl_path)) {
+ $css_files[$name . "-rtl"] = $host . $rtl_path . $query_string;
+ }
+ }
+ }
+ elseif (!empty($css_files[$name])) {
+ unset($css_files[$name]);
+ }
+ }
+ }
+ }
+ }
+ // Grab stylesheets local.css and local-rtl.css if they exist (fusion based themes)
+ if (file_exists($themepath . 'css/local.css')) {
+ $css_files[] = $host . $themepath . 'css/local.css' . $query_string;
+ }
+ if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL && file_exists($themepath . 'css/local-rtl.css')) {
+ $css_files[] = $host . $themepath . 'css/local-rtl.css' . $query_string;
+ }
+
+ // Grab stylesheets from color module
+ $color_paths = variable_get('color_' . $current_theme . '_stylesheets', array());
+ if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL) {
+ if (!empty($color_paths[1])) {
+ $css_files[] = $host . $color_paths[1] . $query_string;
+ }
+ }
+ elseif (!empty($color_paths[0])) {
+ $css_files[] = $host . $color_paths[0] . $query_string;
+ }
+ }
+ else {
+ if (!file_exists($themepath . 'ckeditor.css') && file_exists($themepath . 'style.css')) {
+ $css_files[] = $host . $themepath . 'style.css' . $query_string;
+ }
+ }
+ if (file_exists($module_drupal_local_path . '/ckeditor.css')) {
+ $css_files[] = $module_drupal_path . '/ckeditor.css' . $query_string;
+ }
+ if (file_exists($themepath . 'ckeditor.css')) {
+ $css_files[] = $host . $themepath . 'ckeditor.css' . $query_string;
+ }
+ break;
+
+ case 'self':
+ if (file_exists($module_drupal_local_path . '/ckeditor.css')) {
+ $css_files[] = $module_drupal_path . '/ckeditor.css' . $query_string;
+ if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL) {
+ if (file_exists($module_drupal_local_path . '/ckeditor-rtl.css')) {
+ $css_files[] = $module_drupal_path . '/ckeditor-rtl.css' . $query_string;
+ }
+ }
+ }
+ foreach (explode(',', $conf['css_path']) as $css_path) {
+ $css_path = trim(str_replace("%h%t", "%t", $css_path));
+ $css_files[] = str_replace(array('%h', '%t'), array($host, $host . $themepath), $css_path) . $query_string;
+ }
+ break;
+
+ case 'none':
+ if (file_exists($module_drupal_local_path . '/ckeditor.css')) {
+ $css_files[] = $module_drupal_path . '/ckeditor.css' . $query_string;
+ if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL) {
+ if (file_exists($module_drupal_local_path . '/ckeditor-rtl.css')) {
+ $css_files[] = $module_drupal_path . '/ckeditor-rtl.css' . $query_string;
+ }
+ }
+ }
+ if (file_exists($editor_local_path . '/contents.css')) {
+ $css_files[] = $editor_path . '/contents.css' . $query_string;
+ }
+ break;
+ }
+
+ if (isset($conf['ckeditor_load_method']) && $conf['ckeditor_load_method'] == 'ckeditor_source.js') {
+ foreach ($css_files as $k => $v) {
+ $css_files[$k] = $v . '&t=' . time();
+ }
+ }
+
+ $settings['contentsCss'] = array_values($css_files);
+
+ if (!empty($conf['uicolor']) && $conf['uicolor'] == "custom" && !empty($conf['uicolor_user'])) {
+ $settings['uiColor'] = $conf['uicolor_user'];
+ }
+
+ if (!empty($conf['uicolor']) && strpos($conf['uicolor'], "color_") === 0) {
+ if (function_exists('color_get_palette')) {
+ $palette = @color_get_palette($current_theme, FALSE); //[#652274]
+ $color = str_replace("color_", "", $conf['uicolor']);
+ if (!empty($palette[$color])) {
+ $settings['uiColor'] = $palette[$color];
+ }
+ }
+ }
+
+ return $settings;
+}
+
+/**
+ * Load CKEditor for field ID
+ *
+ * @param object $field
+ * @param string $format
+ *
+ * @return object
+ *
+ */
+function ckeditor_load_by_field($field, $format, $show_toggle = TRUE, $add_fields_to_toggle = FALSE) {
+ global $theme;
+ static $processed_ids = array();
+ static $is_running = FALSE;
+ $use_ckeditor = FALSE;
+ $format_arr = FALSE;
+ $suffix = '';
+
+ if (is_array($format)) {
+ $format_arr = $format;
+ $format = isset($format_arr['#value']) ? $format_arr['#value'] : $format_arr['#default_value'];
+ }
+
+ if (!isset($field['#id'])) {
+ return $field;
+ }
+
+ if (isset($processed_ids[$field['#id']])) {
+ return $field;
+ }
+
+ if (key_exists('#wysiwyg', $field) && !$field['#wysiwyg']) {
+ return $field;
+ }
+
+ if (isset($field['#access']) && !$field['#access']) {
+ return $field;
+ }
+
+ if ($field['#id'] == "edit-log") {
+ return $field;
+ }
+
+ if (isset($field['#attributes']['disabled']) && $field['#attributes']['disabled'] == 'disabled') {
+ return $field;
+ }
+
+ drupal_add_js(array('ckeditor' => array('textarea_default_format' => array($field['#id'] => $format))), 'setting');
+
+ if (!isset($processed_ids[$field['#id']])) {
+ $processed_ids[$field['#id']] = array();
+ }
+
+ $global_profile = ckeditor_profile_load('CKEditor Global Profile');
+ $profile = ckeditor_get_profile($format);
+ $host = base_path();
+
+ if ($profile === FALSE) {
+ $ckeditor_in_default_format = FALSE;
+ foreach ((array) $format_arr['#options'] as $key => $val) {
+ if ($key == $format)
+ continue;
+ if ($profile = ckeditor_get_profile($key)) {
+ $use_ckeditor = $key;
+ break;
+ }
+ }
+ if ($use_ckeditor === FALSE) {
+ return $field;
+ }
+ }
+ else {
+ $ckeditor_in_default_format = TRUE;
+ }
+
+ $settings = FALSE;
+ if ($settings = ckeditor_profiles_compile($format)) {
+ $ckeditor_on = ($profile->settings['default'] == 't') ? TRUE : FALSE;
+ }
+ elseif ($settings = ckeditor_profiles_compile($use_ckeditor)) {
+ $ckeditor_on = FALSE;
+ }
+ else {
+ return $field;
+ }
+
+ if ($settings) {
+ $textarea_id = $field['#id'];
+ $class[] = 'ckeditor-mod';
+ $_ckeditor_ids[] = $textarea_id;
+
+ //settings are saved as strings, not booleans
+ if ($settings['show_toggle'] == 't' && $show_toggle) {
+
+ if ($add_fields_to_toggle !== FALSE) {
+ if (is_array($add_fields_to_toggle)) {
+ $toggle_fields = "['" . $textarea_id . "','" . implode("','", $add_fields_to_toggle) . "']";
+ }
+ else {
+ $toggle_fields = "['" . $textarea_id . "','" . $add_fields_to_toggle . "']";
+ }
+ }
+ else {
+ $toggle_fields = "['{$textarea_id}']";
+ }
+
+ $wysiwyg_link = '';
+ $wysiwyg_link .= "<a class=\"ckeditor_links\" style=\"display:none\" href=\"javascript:void(0);\" onclick=\"javascript:Drupal.ckeditorToggle({$toggle_fields},'" . str_replace("'", "\\'", t('Switch to plain text editor')) . "','" . str_replace("'", "\\'", t('Switch to rich text editor')) . "');\" id=\"switch_{$textarea_id}\">";
+ $wysiwyg_link .= $ckeditor_on ? t('Switch to plain text editor') : t('Switch to rich text editor');
+ $wysiwyg_link .= '</a>';
+
+ // Make sure to append to #suffix so it isn't completely overwritten
+ $suffix .= $wysiwyg_link;
+ }
+
+ $editor_local_path = ckeditor_path('local');
+ $editor_url_path = ckeditor_path('url');
+ // get the default drupal files path
+ $files_path = $host . variable_get('file_private_path', conf_path() . '/files');
+
+ if (!$is_running) {
+ if (!$ckeditor_in_default_format) {
+ $load_method = 'ckeditor_basic.js';
+ $load_time_out = 0;
+ }
+ elseif (isset($profile->settings['ckeditor_load_method'])) {
+ $load_method = $profile->settings['ckeditor_load_method'];
+ $load_time_out = $profile->settings['ckeditor_load_time_out'];
+ }
+ drupal_add_js('window.CKEDITOR_BASEPATH = "' . ckeditor_path('relative') . '/"', array('type' => 'inline', 'weight' => -100));
+ drupal_add_js(ckeditor_module_path('url') . '/includes/ckeditor.utils.js', array('type' => 'file', 'scope' => 'footer'));
+
+ $preprocess = FALSE;
+ if (isset($global_profile->settings['ckeditor_aggregate']) && $global_profile->settings['ckeditor_aggregate'] == 't') {
+ $preprocess = TRUE;
+ }
+
+ if (isset($load_method) && file_exists($editor_local_path . '/' . $load_method)) {
+ drupal_add_js($editor_url_path . '/' . $load_method, array('type' => 'file', 'scope' => 'footer', 'preprocess' => $preprocess));
+ if ($load_method == 'ckeditor_basic.js') {
+ drupal_add_js('CKEDITOR.loadFullCoreTimeout = ' . $load_time_out . ';', array('type' => 'inline', 'scope' => 'footer'));
+ drupal_add_js(array('ckeditor' => array('load_timeout' => TRUE)), 'setting');
+ }
+ }
+ else {
+ drupal_add_js($editor_url_path . '/ckeditor.js', array('type' => 'file', 'scope' => 'footer', 'preprocess' => $preprocess));
+ }
+ drupal_add_js(array('ckeditor' => array('module_path' => ckeditor_module_path('relative'), 'editor_path' => ckeditor_path('relative') . '/')), 'setting');
+ if (module_exists('paging')) {
+ drupal_add_js(array('ckeditor' => array('pagebreak' => TRUE)), 'setting');
+ }
+ if (module_exists('linktocontent_node')) {
+ drupal_add_js(array('ckeditor' => array('linktocontent_node' => TRUE)), 'setting');
+ }
+ if (module_exists('linktocontent_menu')) {
+ drupal_add_js(array('ckeditor' => array('linktocontent_menu' => TRUE)), 'setting');
+ }
+ if (module_exists('pagebreak')) {
+ drupal_add_js(array('ckeditor' => array('pagebreak' => TRUE)), 'setting');
+ }
+ drupal_add_js(array('ckeditor' => array('ajaxToken' => drupal_get_token('ckeditorAjaxCall'), 'xss_url' => url('ckeditor/xss'))), 'setting');
+ $is_running = TRUE;
+ }
+
+ drupal_add_js(array('ckeditor' => array('theme' => $theme)), 'setting');
+ if (!empty($settings)) {
+ drupal_add_js(array('ckeditor' => array('elements' => array($textarea_id => $format))), 'setting');
+ }
+ if (!empty($ckeditor_on)) {
+ drupal_add_js(array('ckeditor' => array('autostart' => array($textarea_id => $ckeditor_on))), 'setting');
+ }
+ //[#1473010]
+ if (isset($settings['scayt_sLang'])) {
+ drupal_add_js(array('ckeditor' => array('scayt_language' => $settings['scayt_sLang'])), 'setting');
+ }
+ elseif (!empty($field["#language"]) && $field["#language"] != LANGUAGE_NONE) {
+ drupal_add_js(array('ckeditor' => array('scayt_language' => ckeditor_scayt_langcode($field["#language"]))), 'setting');
+ }
+
+ // Remember extra information and reuse it during "Preview"
+ $processed_ids[$field['#id']]['suffix'] = $suffix;
+ $processed_ids[$field['#id']]['class'] = $class;
+
+ if (empty($field['#suffix'])) {
+ $field['#suffix'] = $suffix;
+ }
+ else {
+ $field['#suffix'] .= $suffix;
+ }
+
+ if (empty($field['#attributes']['class'])) {
+ $field['#attributes']['class'] = $class;
+ }
+ else {
+ $field['#attributes']['class'] = array_merge($field['#attributes']['class'], $class);
+ }
+ }
+
+ return $field;
+}
+
+/**
+ * Return all modules that provide security filters.
+ */
+function ckeditor_security_filters() {
+ $security_filters = array();
+
+ $security_filters['modules'] = array(
+ 'htmLawed' => array(
+ 'title' => 'htmLawed',
+ 'project_page' => 'http://drupal.org/project/htmLawed',
+ 'weight' => 0,
+ 'installed' => FALSE,
+ 'filters' => array()
+ ),
+ 'htmltidy' => array(
+ 'title' => 'Htmltidy',
+ 'project_page' => 'http://drupal.org/project/htmltidy',
+ 'weight' => 0,
+ 'installed' => FALSE,
+ 'filters' => array()
+ ),
+ 'htmlpurifier' => array(
+ 'title' => 'HTML Purifier',
+ 'project_page' => 'http://drupal.org/project/htmlpurifier',
+ 'weight' => 0,
+ 'installed' => FALSE,
+ 'filters' => array()
+ ),
+ 'wysiwyg_filter' => array(
+ 'title' => 'WYSIWYG Filter',
+ 'project_page' => 'http://drupal.org/project/wysiwyg_filter',
+ 'weight' => 0,
+ 'installed' => FALSE,
+ 'filters' => array()
+ )
+ );
+
+ $security_filters['filters'] = array();
+
+ foreach ($security_filters['modules'] as $module_name => $module_conf) {
+ if (module_exists($module_name)) {
+ $security_filters['modules'][$module_name]['installed'] = TRUE;
+ $module_filters = module_invoke($module_name, 'filter_info');
+ foreach ($module_filters as $module_filter_name => $module_filter_conf) {
+ $security_filters['modules'][$module_name]['filters'][$module_filter_name] = $module_filter_conf;
+ $security_filters['filters'][$module_filter_name] = TRUE;
+ }
+ }
+ }
+
+ //add filters from Drupal core
+ $security_filters['modules']['__drupal'] = array(
+ 'title' => 'Drupal core',
+ 'project_page' => FALSE,
+ 'weight' => -1,
+ 'installed' => TRUE,
+ 'filters' => array(
+ 'filter_html' => array(
+ 'title' => 'Limit allowed HTML tags',
+ 'description' => 'Removes the attributes that the built-in "Limit allowed HTML tags"-filter does not allow inside HTML elements/tags'
+ )
+ )
+ );
+ $security_filters['filters']['filter_html'] = TRUE;
+
+ //load security filters added by API
+ $external_module_filters = module_invoke_all('ckeditor_security_filter');
+ if (count($external_module_filters) > 0) {
+ $security_filters['modules']['__external'] = array(
+ 'title' => 'External filters',
+ 'project_page' => FALSE,
+ 'weight' => 1,
+ 'installed' => TRUE,
+ 'filters' => array()
+ );
+ foreach ($external_module_filters as $module_filter_name => $module_filter_conf) {
+ $security_filters['modules']['__external']['filters'][$module_filter_name] = $module_filter_conf;
+ $security_filters['filters'][$module_filter_name] = TRUE;
+ }
+ }
+
+ return $security_filters;
+}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.page.inc b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.page.inc
new file mode 100644
index 0000000..c207a64
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.page.inc
@@ -0,0 +1,227 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+function ckeditor_help_delegate($path, $arg) {
+ global $base_url;
+ switch ($path) {
+ case 'admin/config/content/help#description':
+ $output = t('Enables the use of CKEditor (a rich text WYSIWYG editor) instead of plain text fields.');
+ break;
+
+ case 'admin/config/content/ckeditor/edit/%':
+ case 'admin/config/content/ckeditor/add':
+ $output = '<p>' . t('CKEditor is highly configurable. The most commonly used features are listed below. You can also adjust CKEditor to your needs by changing the !ckeditor_module_config configuration file.', array(
+ '!ckeditor_module_config' => '<code>' . ckeditor_module_path('local') . '/ckeditor.config.js</code>',
+ )
+ ) .
+ '</p><p>' .
+ t('It is recommended to not edit the !ckeditor_config_file (!ckeditor_config_path) configuration file that is distributed with CKEditor, because you may overwrite it accidentally when you update the editor.', array(
+ '!ckeditor_config_path' => '<code>' . ckeditor_path('local') . '/config.js</code>',
+ '!ckeditor_config_file' => '<code>config.js</code>',
+ )
+ ) .
+ '</p>';
+ break;
+
+ case 'admin/config/content/ckeditor/editg':
+ case 'admin/config/content/ckeditor/add':
+ $output = '<p>' . t('The Global Profile allows you to define settings that are common for all profiles. Values defined in other profiles will be appended to the global configuration. This way you can avoid repeating some of the settings that are usually the same for each profile.') . '</p>';
+ break;
+
+ case 'admin/config/content/ckeditor':
+ $output =
+ '<div style="padding:10px;border:1px solid #BEBFB9;margin-bottom:10px;"><p>' .
+ t('The CKEditor module allows Drupal to replace textarea fields with CKEditor. CKEditor is an online rich text editor that can be embedded inside web pages. It is a !wysiwyg editor which means that the text edited in it looks as similar as possible to the results end users will see after the document gets published. It brings to the Web popular editing features found in desktop word processors such as Microsoft Word and OpenOffice.org Writer. CKEditor is truly lightweight and does not require any kind of installation on the client computer.', array(
+ '!wysiwyg' => '<acronym title="' . t('What You See Is What You Get') . '">' . t('WYSIWYG') . '</acronym>',
+ )
+ ) .
+ '</p><p>' .
+ t('Useful links: !ckeditorlink | !devguidelink | !userguidelink.', array(
+ '!ckeditorlink' => l(t('CKEditor website'), 'http://ckeditor.com'),
+ '!devguidelink' => l(t('Developer\'s Guide'), 'http://docs.cksource.com/CKEditor_3.x/Developers_Guide'),
+ '!userguidelink' => l(t('User\'s Guide'), 'http://docs.cksource.com/CKEditor_3.x/Users_Guide')
+ )
+ ) .
+ '</p></div><p>' .
+ t('Profiles are linked with input format types. A CKEditor profile defines which buttons are available in the editor, how the editor is displayed, and a few other editor functions. The Global Profile stores some general information about CKEditor.') . '</p>';
+ break;
+
+ case 'admin/help#ckeditor':
+ $output =
+ '<h3>' . t('Introduction') . '</h3>' .
+ '<p>' .
+ t('The CKEditor module allows Drupal to replace textarea fields with CKEditor. CKEditor is an online rich text editor that can be embedded inside web pages. It is a !wysiwyg editor which means that the text edited in it looks as similar as possible to the results end users will see after the document gets published. It brings to the Web popular editing features found in desktop word processors such as Microsoft Word and OpenOffice.org Writer. CKEditor is truly lightweight and does not require any kind of installation on the client computer.', array(
+ '!wysiwyg' => '<acronym title="' . t('What You See Is What You Get') . '">' . t('WYSIWYG') . '</acronym>',
+ )
+ ) .
+ '</p>' .
+ '<p>' .
+ t('Useful links: !ckeditorlink | !devguidelink | !userguidelink.', array(
+ '!ckeditorlink' => l(t('CKEditor website'), 'http://ckeditor.com'),
+ '!devguidelink' => l(t('Developer\'s Guide'), 'http://docs.cksource.com/CKEditor_3.x/Developers_Guide'),
+ '!userguidelink' => l(t('User\'s Guide'), 'http://docs.cksource.com/CKEditor_3.x/Users_Guide')
+ )
+ ) .
+ '</p>' .
+ '<h4>' .
+ t('Configuration') .
+ '</h4>' .
+ '<ol>' .
+ '<li>' .
+ t('CKEditor profiles can be configured in the !adminpath section. Profiles determine which options are available to users based on the input format system.', array(
+ '!adminpath' => '<strong>' . l(t('Administration panel') . ' > ' . t('Configuration') . ' > ' . t('Content Authoring') . ' > ' . t('CKEditor'), 'admin/config/content/ckeditor') . '</strong>'
+ )
+ ) .
+ '</li>' .
+ '<li>' .
+ t('For the Rich Text Editing to work you also need to configure your !filterlink for the users that may access Rich Text Editing. Either grant those users <strong>Full HTML</strong> access or use the following list of tags in the HTML filter:', array(
+ '!filterlink' => l(t('filters'), 'admin/config/content/formats')
+ )
+ ) .
+ '<br /><code>' .
+ htmlspecialchars('<a> <p> <span> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <tbody> <th> <tr> <td> <em> <b> <u> <i> <strong> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike> <caption> <iframe>') .
+ '</code><br />' .
+ t('<strong>Note:</strong> be careful when granting users access to create tags like %iframe.<br />If you are going to use CKEditor with the <strong>Filtered HTML</strong> input format, please read the "Setting up filters" section in the !readme file.', array(
+ '%iframe' => '<iframe>',
+ '!readme' => '<code>' . l(t('README.txt'), $base_url . '/' . drupal_get_path('module', 'ckeditor') . '/README.txt', array('absolute' => TRUE)) . '</code>'
+ )
+ ) .
+ '</li>' .
+ '<li>' .
+ t('To have better control over line breaks, you should disable the <strong>%settingname</strong> setting in the chosen Text format (recommended).', array(
+ '%settingname' => t('Line break converter'),
+ )
+ ) .
+ '</li>' .
+ '<li>' .
+ t('All configuration options described in the !apidocs that cannot be easily changed in the administration area can be set in the <strong>Advanced Options</strong> section in the CKEditor profile.', array(
+ '!apidocs' => l(t('API documentation'), 'http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html')
+ )
+ ) .
+ '</li>' .
+ '</ol>' .
+ '<h3>' .
+ t('Troubleshooting') .
+ '</h3>' .
+ '<p>' .
+ t('Take a look at !listlink when installing CKEditor.', array(
+ '!listlink' => l(t('the list of common problems'), 'http://docs.cksource.com/CKEditor_for_Drupal/Troubleshooting')
+ )
+ ) .
+ ' ' .
+ t('If you are looking for more information, have any trouble with the configuration, or found an issue with the CKEditor module, please visit the !officiallink.', array(
+ '!officiallink' => l(t('official project page'), 'http://drupal.org/project/ckeditor')
+ )
+ ) .
+ ' ' .
+ t('More information about how to customize CKEditor for your theme can be found !herelink.', array(
+ '!herelink' => l(t('here'), 'http://drupal.ckeditor.com/tricks')
+ )
+ ) .
+ '</p>' .
+ '<h3>' .
+ t('Uploading images and files') .
+ '</h3>' .
+ '<p>' .
+ t('There are three ways for uploading files:') .
+ '</p>' .
+ '<ol>' .
+ '<li>' .
+ t('By using !ckfinder (commercial), an advanced Ajax file manager.', array(
+ '!ckfinder' => l(t('CKFinder'), 'http://ckfinder.com'),
+ )
+ ) .
+ '</li>' .
+ '<li>' .
+ t('By using a dedicated module like !imcelink.', array(
+ '!imcelink' => l(t('IMCE'), 'http://drupal.org/project/imce')
+ )
+ ) .
+ '</li>' .
+ '<li>' .
+ t('By using the core upload module.') .
+ '</li>' .
+ '</ol>';
+
+ break;
+ }
+ return !empty($output) ? $output : '';
+}
+
+/**
+ * AJAX callback - XSS filter
+ */
+function ckeditor_filter_xss() {
+ header('Content-Type: text/html; charset=utf-8');
+ $GLOBALS['devel_shutdown'] = FALSE;
+
+ if (!isset($_POST['text']) || !is_string($_POST['text']) || !isset($_POST['input_format']) || !is_string($_POST['input_format']) || !isset($_POST['token']) || !drupal_valid_token($_POST['token'], 'ckeditorAjaxCall', TRUE)) {
+ exit;
+ }
+
+ $format = filter_format_load($_POST['input_format']);
+ if ($format == FALSE || !is_object($format) || !filter_access($format)) {
+ exit;
+ }
+
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $profile = ckeditor_get_profile($_POST['input_format']);
+
+ $text = $_POST['text'];
+ $filters = filter_get_filters();
+ $format_filters = filter_list_format($_POST['input_format']);
+ $security_filters = ckeditor_security_filters();
+ $cache_id = $_POST['input_format'] . ':' . '' . ':' . hash('sha256', $text);
+
+ foreach ((array) $format_filters as $name => $object) {
+ //If filter is not security filter, not exists, cannot be called or isn't enabled in selected text format then skip this filter
+ if (!isset($security_filters['filters'][$name]) || !isset($filters[$name]) || !isset($filters[$name]['process callback']) || $object->status == 0) {
+ continue;
+ }
+
+ //Call default CKEditor built-in filter
+ if ($name == 'filter_html' && $security_filters['filters']['filter_html'] == 1) {
+ preg_match_all("|</?([a-z][a-z0-9]*)(?:\b[^>]*)>|i", $text, $matches);
+ if ($matches[1]) {
+ $tags = array_unique($matches[1]);
+ $text = filter_xss($text, $tags);
+ }
+ continue;
+ }
+ $text = $filters[$name]['process callback']($text, $format_filters[$name], $format, '', TRUE, $cache_id);
+ }
+
+ echo $text;
+}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.user.inc b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.user.inc
new file mode 100644
index 0000000..063f1bc
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.user.inc
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This module allows Drupal to replace textarea fields with CKEditor.
+ *
+ * CKEditor is an online rich text editor that can be embedded inside web pages.
+ * It is a WYSIWYG (What You See Is What You Get) editor which means that the
+ * text edited in it looks as similar as possible to the results end users will
+ * see after the document gets published. It brings to the Web popular editing
+ * features found in desktop word processors such as Microsoft Word and
+ * OpenOffice.org Writer. CKEditor is truly lightweight and does not require any
+ * kind of installation on the client computer.
+ */
+function ckeditor_user_customize(&$form, &$form_state, $form_id) {
+
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+
+ $data = $form['#user']->data;
+
+ $default = ckeditor_user_get_setting_default();
+ $lang_options = ckeditor_load_lang_options();
+
+ // because the settings are saved as strings we need to test for the string 'true'
+ if (user_access('customize ckeditor')) {
+ $form['ckeditor'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Rich text editor settings'),
+ '#weight' => 10,
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE
+ );
+
+ $form['ckeditor']['ckeditor_default'] = array(
+ '#type' => 'radios',
+ '#title' => t('Default state'),
+ '#default_value' => isset($data['ckeditor_default']) ? $data['ckeditor_default'] : $default['default'],
+ '#options' => array(
+ 't' => t('Enabled'),
+ 'f' => t('Disabled')
+ ),
+ '#description' => t('Should rich text editing be enabled or disabled by default in textarea fields? If disabled, the rich text editor may still be enabled by using toggle.'),
+ );
+
+ $form['ckeditor']['ckeditor_show_toggle'] = array(
+ '#type' => 'radios',
+ '#title' => t('Show the disable/enable rich text editor toggle'),
+ '#default_value' => isset($data['ckeditor_show_toggle']) ? $data['ckeditor_show_toggle'] : $default['show_toggle'],
+ '#options' => array(
+ 't' => t('Yes'),
+ 'f' => t('No')
+ ),
+ '#description' => t('Whether or not to show the disable/enable rich text editor toggle below the textarea.'),
+ );
+
+ $form['ckeditor']['ckeditor_width'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Editor width'),
+ '#default_value' => isset($data['ckeditor_width']) ? $data['ckeditor_width'] : $default['width'],
+ '#description' => t('Editor interface width in pixels or percent.') . ' ' . t('Examples') . ': 400 ' . t('or') . ' 100%.',
+ '#size' => 40,
+ '#maxlength' => 128,
+ );
+
+ $form['ckeditor']['ckeditor_lang'] = array(
+ '#type' => 'select',
+ '#title' => t('Language'),
+ '#default_value' => isset($data['ckeditor_lang']) ? $data['ckeditor_lang'] : $default['lang'],
+ '#options' => $lang_options,
+ '#description' => t('The language for the CKEditor interface.')
+ );
+
+ $form['ckeditor']['ckeditor_auto_lang'] = array(
+ '#type' => 'radios',
+ '#title' => t('Auto-detect language'),
+ '#default_value' => isset($data['ckeditor_auto_lang']) ? $data['ckeditor_auto_lang'] : $default['auto_lang'],
+ '#options' => array(
+ 't' => t('Yes'),
+ 'f' => t('No')
+ ),
+ '#description' => t('Automatically detect the user language.')
+ );
+
+ $form['#validate'][] = 'ckeditor_user_customize_form_validate';
+ }
+}
+
+function ckeditor_user_customize_form_validate(&$form, &$form_state) {
+ /*
+ if (isset($form_state['values']['ckeditor_default'], $form_state['values']['ckeditor_popup']) && $form_state['values']['ckeditor_default'] == 't' && $form_state['values']['ckeditor_popup'] == 't') {
+ form_set_error('ckeditor_popup', t('If CKEditor is enabled by default, the popup window must be disabled.'));
+ }
+
+ if (isset($form_state['values']['ckeditor_show_toggle'], $form_state['values']['ckeditor_popup']) && $form_state['values']['ckeditor_show_toggle'] == 't' && $form_state['values']['ckeditor_popup'] == 't') {
+ form_set_error('ckeditor_popup', t('If toggle is enabled, the popup window must be disabled.'));
+ }
+ */
+ if (isset($form_state['values']['ckeditor_width']) && !preg_match('/^\d+%?$/', $form_state['values']['ckeditor_width'])) {
+ form_set_error('ckeditor_width', t('Enter a valid width value.') . ' ' . t('Examples:') . ': 400 ' . t('or') . ' 100%.');
+ }
+}
+
+function ckeditor_user_presave(&$edit, $account, $category) {
+ if (user_access('customize ckeditor')) {
+ module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib');
+ $default = ckeditor_user_get_setting_default();
+
+ $edit['data']['ckeditor_default'] = isset($edit['ckeditor_default']) ? $edit['ckeditor_default'] : $default['default'];
+ $edit['data']['ckeditor_show_toggle'] = isset($edit['ckeditor_show_toggle']) ? $edit['ckeditor_show_toggle'] : $default['show_toggle'];
+ $edit['data']['ckeditor_width'] = isset($edit['ckeditor_width']) ? $edit['ckeditor_width'] : $default['width'];
+ $edit['data']['ckeditor_lang'] = isset($edit['ckeditor_lang']) ? $edit['ckeditor_lang'] : $default['lang'];
+ $edit['data']['ckeditor_auto_lang'] = isset($edit['ckeditor_auto_lang']) ? $edit['ckeditor_auto_lang'] : $default['auto_lang'];
+ }
+}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.utils.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.utils.js
new file mode 100644
index 0000000..27552a4
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/ckeditor.utils.js
@@ -0,0 +1,344 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+window.CKEDITOR_BASEPATH = Drupal.settings.ckeditor.editor_path;
+(function ($) {
+ Drupal.ckeditor = (typeof(CKEDITOR) != 'undefined');
+ Drupal.ckeditor_ver = false;
+
+ Drupal.ckeditorToggle = function(textarea_ids, TextTextarea, TextRTE){
+ if (!CKEDITOR.env.isCompatible) {
+ return;
+ }
+
+ for (i=0; i<textarea_ids.length; i++){
+ if (typeof(CKEDITOR.instances) != 'undefined' && typeof(CKEDITOR.instances[textarea_ids[i]]) != 'undefined'){
+ Drupal.ckeditorOff(textarea_ids[i]);
+ $('#switch_' + textarea_ids[0]).text(TextRTE);
+ }
+ else {
+ Drupal.ckeditorOn(textarea_ids[i]);
+ $('#switch_' + textarea_ids[0]).text(TextTextarea);
+ }
+ }
+ };
+
+ /**
+ * CKEditor starting function
+ *
+ * @param string textarea_id
+ */
+ Drupal.ckeditorInit = function(textarea_id) {
+ var ckeditor_obj = Drupal.settings.ckeditor;
+ $("#" + textarea_id).next(".grippie").css("display", "none");
+ $("#" + textarea_id).addClass("ckeditor-processed");
+
+ var textarea_settings = false;
+ ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]].toolbar = eval(ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]].toolbar);
+ textarea_settings = ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]];
+
+ var drupalTopToolbar = $('#toolbar, #admin-menu', Drupal.overlayChild ? window.parent.document : document);
+
+ textarea_settings['on'] =
+ {
+ configLoaded : function(ev)
+ {
+ Drupal.ckeditor_ver = CKEDITOR.version.split('.')[0];
+ if (Drupal.ckeditor_ver == 3) {
+ ev.editor.addCss(ev.editor.config.extraCss);
+ }
+ else {
+ CKEDITOR.addCss(ev.editor.config.extraCss);
+ }
+ },
+ instanceReady : function(ev)
+ {
+ var body = $(ev.editor.document.$.body);
+ if (typeof(ev.editor.dataProcessor.writer.setRules) != 'undefined') {
+ ev.editor.dataProcessor.writer.setRules('p', {
+ breakAfterOpen: false
+ });
+
+ if (typeof(ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]].custom_formatting) != 'undefined') {
+ var dtd = CKEDITOR.dtd;
+ for ( var e in CKEDITOR.tools.extend( {}, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {
+ ev.editor.dataProcessor.writer.setRules( e, ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]].custom_formatting);
+ }
+ ev.editor.dataProcessor.writer.setRules( 'pre',
+ {
+ indent: ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]].output_pre_indent
+ });
+ }
+ }
+
+ if (ev.editor.config.bodyClass)
+ body.addClass(ev.editor.config.bodyClass);
+ if (ev.editor.config.bodyId)
+ body.attr('id', ev.editor.config.bodyId);
+ if (typeof(Drupal.smileysAttach) != 'undefined' && typeof(ev.editor.dataProcessor.writer) != 'undefined')
+ ev.editor.dataProcessor.writer.indentationChars = ' ';
+ },
+ focus : function(ev)
+ {
+ Drupal.ckeditorInstance = ev.editor;
+ Drupal.ckeditorActiveId = ev.editor.name;
+ }
+ ,
+ afterCommandExec: function(ev)
+ {
+ if (ev.data.name != 'maximize') {
+ return;
+ }
+ if (ev.data.command.state == CKEDITOR.TRISTATE_ON) {
+ drupalTopToolbar.hide();
+ } else {
+ drupalTopToolbar.show();
+ }
+ }
+ };
+
+ if (typeof Drupal.settings.ckeditor.scayt_language != 'undefined'){
+ textarea_settings['scayt_sLang'] = Drupal.settings.ckeditor.scayt_language;
+ }
+
+ if (typeof textarea_settings['js_conf'] != 'undefined'){
+ for (var add_conf in textarea_settings['js_conf']){
+ textarea_settings[add_conf] = eval(textarea_settings['js_conf'][add_conf]);
+ }
+ }
+
+ //remove width 100% from settings because this may cause problems with theme css
+ if (textarea_settings.width == '100%') textarea_settings.width = '';
+
+ if (CKEDITOR.loadFullCore) {
+ CKEDITOR.on('loaded', function() {
+ textarea_settings = Drupal.ckeditorLoadPlugins(textarea_settings);
+ Drupal.ckeditorInstance = CKEDITOR.replace(textarea_id, textarea_settings);
+ });
+ CKEDITOR.loadFullCore();
+ }
+ else {
+ textarea_settings = Drupal.ckeditorLoadPlugins(textarea_settings);
+ Drupal.ckeditorInstance = CKEDITOR.replace(textarea_id, textarea_settings);
+ }
+ }
+
+ Drupal.ckeditorOn = function(textarea_id, run_filter) {
+
+ run_filter = typeof(run_filter) != 'undefined' ? run_filter : true;
+
+ if (typeof(textarea_id) == 'undefined' || textarea_id.length == 0 || $("#" + textarea_id).length == 0) {
+ return;
+ }
+ if ((typeof(Drupal.settings.ckeditor.load_timeout) == 'undefined') && (typeof(CKEDITOR.instances[textarea_id]) != 'undefined')) {
+ return;
+ }
+ if (typeof(Drupal.settings.ckeditor.elements[textarea_id]) == 'undefined') {
+ return;
+ }
+ var ckeditor_obj = Drupal.settings.ckeditor;
+
+ if (!CKEDITOR.env.isCompatible) {
+ return;
+ }
+
+ if (run_filter && ($("#" + textarea_id).val().length > 0) && typeof(ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]]) != 'undefined' && ((ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]]['ss'] == 1 && typeof(Drupal.settings.ckeditor.autostart) != 'undefined' && typeof(Drupal.settings.ckeditor.autostart[textarea_id]) != 'undefined') || ckeditor_obj.input_formats[ckeditor_obj.elements[textarea_id]]['ss'] == 2)) {
+ $.ajax({
+ type: 'POST',
+ url: Drupal.settings.ckeditor.xss_url,
+ async: false,
+ data: {
+ text: $('#' + textarea_id).val(),
+ input_format: ckeditor_obj.textarea_default_format[textarea_id],
+ token: Drupal.settings.ckeditor.ajaxToken
+ },
+ success: function(text){
+ $("#" + textarea_id).val(text);
+ Drupal.ckeditorInit(textarea_id);
+ }
+ })
+ }
+ else {
+ Drupal.ckeditorInit(textarea_id);
+ }
+ };
+
+ /**
+ * CKEditor destroy function
+ *
+ * @param string textarea_id
+ */
+ Drupal.ckeditorOff = function(textarea_id) {
+ if (!CKEDITOR.instances || typeof(CKEDITOR.instances[textarea_id]) == 'undefined') {
+ return;
+ }
+ if (!CKEDITOR.env.isCompatible) {
+ return;
+ }
+ if (Drupal.ckeditorInstance && Drupal.ckeditorInstance.name == textarea_id)
+ delete Drupal.ckeditorInstance;
+
+ $("#" + textarea_id).val(CKEDITOR.instances[textarea_id].getData());
+ CKEDITOR.instances[textarea_id].destroy(true);
+
+ $("#" + textarea_id).next(".grippie").css("display", "block");
+ };
+
+ /**
+* Loading selected CKEditor plugins
+*
+* @param object textarea_settings
+*/
+ Drupal.ckeditorLoadPlugins = function(textarea_settings) {
+ if (typeof(textarea_settings.extraPlugins) == 'undefined') {
+ textarea_settings.extraPlugins = '';
+ }
+ if (typeof CKEDITOR.plugins != 'undefined') {
+ for (var plugin in textarea_settings['loadPlugins']) {
+ if (typeof(textarea_settings['loadPlugins'][plugin]['active']) == 'undefined' || textarea_settings['loadPlugins'][plugin]['active'] == 1) {
+ textarea_settings.extraPlugins += (textarea_settings.extraPlugins) ? ',' + textarea_settings['loadPlugins'][plugin]['name'] : textarea_settings['loadPlugins'][plugin]['name'];
+ CKEDITOR.plugins.addExternal(textarea_settings['loadPlugins'][plugin]['name'], textarea_settings['loadPlugins'][plugin]['path']);
+ }
+ }
+ }
+ return textarea_settings;
+ }
+
+ /**
+ * Returns true if CKEDITOR.version >= version
+ */
+ Drupal.ckeditorCompareVersion = function (version){
+ var ckver = CKEDITOR.version;
+ ckver = ckver.match(/(([\d]\.)+[\d]+)/i);
+ version = version.match(/((\d+\.)+[\d]+)/i);
+ ckver = ckver[0].split('.');
+ version = version[0].split('.');
+ for (var x in ckver) {
+ if (ckver[x]<version[x]) {
+ return false;
+ }
+ else if (ckver[x]>version[x]) {
+ return true;
+ }
+ }
+ return true;
+ };
+
+ Drupal.ckeditorInsertHtml = function(html) {
+ if (!Drupal.ckeditorInstance)
+ return false;
+
+ if (Drupal.ckeditorInstance.mode == 'wysiwyg') {
+ Drupal.ckeditorInstance.insertHtml(html);
+ return true;
+ }
+ else {
+ alert(Drupal.t('Content can only be inserted into CKEditor in the WYSIWYG mode.'));
+ return false;
+ }
+ };
+
+ /**
+ * Ajax support
+ */
+ if (typeof(Drupal.Ajax) != 'undefined' && typeof(Drupal.Ajax.plugins) != 'undefined') {
+ Drupal.Ajax.plugins.CKEditor = function(hook, args) {
+ if (hook === 'submit' && typeof(CKEDITOR.instances) != 'undefined') {
+ for (var i in CKEDITOR.instances)
+ CKEDITOR.instances[i].updateElement();
+ }
+ return true;
+ };
+ }
+
+ //Support for Panels [#679976]
+ Drupal.ckeditorSubmitAjaxForm = function () {
+ if (typeof(CKEDITOR.instances) != 'undefined' && typeof(CKEDITOR.instances['edit-body']) != 'undefined') {
+ Drupal.ckeditorOff('edit-body');
+ }
+ };
+
+ /**
+ * Drupal behaviors
+ */
+ Drupal.behaviors.ckeditor = {
+ attach:
+ function (context) {
+ if ((typeof(CKEDITOR) == 'undefined') || !CKEDITOR.env.isCompatible) {
+ return;
+ }
+
+ // make sure the textarea behavior is run first, to get a correctly sized grippie
+ if (Drupal.behaviors.textarea && Drupal.behaviors.textarea.attach) {
+ Drupal.behaviors.textarea.attach(context);
+ }
+
+ $(context).find("textarea.ckeditor-mod:not(.ckeditor-processed)").each(function () {
+ var ta_id=$(this).attr("id");
+ if (CKEDITOR.instances && typeof(CKEDITOR.instances[ta_id]) != 'undefined'){
+ Drupal.ckeditorOff(ta_id);
+ }
+
+ if ((typeof(Drupal.settings.ckeditor.autostart) != 'undefined') && (typeof(Drupal.settings.ckeditor.autostart[ta_id]) != 'undefined')) {
+ Drupal.ckeditorOn(ta_id);
+ }
+
+ if (typeof(Drupal.settings.ckeditor.input_formats[Drupal.settings.ckeditor.elements[ta_id]]) != 'undefined') {
+ $('.ckeditor_links').show();
+ }
+
+ var sel_format = $("#" + ta_id.substr(0, ta_id.lastIndexOf("-")) + "-format--2");
+ if (sel_format && sel_format.not('.ckeditor-processed')) {
+ sel_format.addClass('ckeditor-processed').change(function() {
+ Drupal.settings.ckeditor.elements[ta_id] = $(this).val();
+ if (CKEDITOR.instances && typeof(CKEDITOR.instances[ta_id]) != 'undefined') {
+ $('#'+ta_id).val(CKEDITOR.instances[ta_id].getData());
+ }
+ Drupal.ckeditorOff(ta_id);
+ if (typeof(Drupal.settings.ckeditor.input_formats[$(this).val()]) != 'undefined'){
+ if ($('#'+ta_id).hasClass('ckeditor-processed')) {
+ Drupal.ckeditorOn(ta_id, false);
+ }
+ else {
+ Drupal.ckeditorOn(ta_id);
+ }
+ $('#switch_'+ta_id).show();
+ }
+ else {
+ $('#switch_'+ta_id).hide();
+ }
+ });
+ }
+ });
+ },
+ detach:
+ function(context, settings, trigger){
+ $(context).find("textarea.ckeditor-mod.ckeditor-processed").each(function () {
+ var ta_id=$(this).attr("id");
+ if (CKEDITOR.instances[ta_id])
+ $('#'+ta_id).val(CKEDITOR.instances[ta_id].getData());
+ if(trigger != 'serialize') {
+ Drupal.ckeditorOff(ta_id);
+ $(this).removeClass('ckeditor-processed');
+ }
+ });
+ }
+ };
+})(jQuery);
+
+/**
+ * IMCE support
+ */
+var ckeditor_imceSendTo = function (file, win){
+ var cfunc = win.location.href.split('&');
+
+ for (var x in cfunc) {
+ if (cfunc[x].match(/^CKEditorFuncNum=\d+$/)) {
+ cfunc = cfunc[x].split('=');
+ break;
+ }
+ }
+ CKEDITOR.tools.callFunction(cfunc[1], file.url);
+ win.close();
+}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/filemanager.config.php b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/filemanager.config.php
new file mode 100644
index 0000000..ea80deb
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/filemanager.config.php
@@ -0,0 +1,98 @@
+<?php
+
+/**
+ * CKEditor - The text editor for the Internet - http://ckeditor.com
+ * Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses of your
+ * choice:
+ *
+ * - GNU General Public License Version 2 or later (the "GPL")
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * - Mozilla Public License Version 1.1 or later (the "MPL")
+ * http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * @file
+ * CKEditor Module for Drupal 7.x
+ *
+ * This file is required by the CKEeditor module if you want to enable CKFinder,
+ * an advanced Ajax file browser.
+ *
+ */
+$GLOBALS['devel_shutdown'] = FALSE;
+
+if (!function_exists('ob_list_handlers') || ob_list_handlers()) {
+ @ob_end_clean();
+}
+
+$ckfinder_user_files_path = '';
+$ckfinder_user_files_absolute_path = '';
+
+function CheckAuthentication() {
+ static $authenticated;
+
+ if (!isset($authenticated)) {
+ if (!empty($_SERVER['SCRIPT_FILENAME'])) {
+ $drupal_path = dirname(dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME']))));
+ if (!file_exists($drupal_path . '/includes/bootstrap.inc')) {
+ $drupal_path = dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME'])));
+ $depth = 2;
+ do {
+ $drupal_path = dirname($drupal_path);
+ $depth++;
+ } while (!($bootstrap_file_found = file_exists($drupal_path . '/includes/bootstrap.inc')) && $depth < 10);
+ }
+ }
+
+ if (!isset($bootstrap_file_found) || !$bootstrap_file_found) {
+ $drupal_path = '../../../../..';
+ if (!file_exists($drupal_path . '/includes/bootstrap.inc')) {
+ $drupal_path = '../..';
+ do {
+ $drupal_path .= '/..';
+ $depth = substr_count($drupal_path, '..');
+ } while (!($bootstrap_file_found = file_exists($drupal_path . '/includes/bootstrap.inc')) && $depth < 10);
+ }
+ }
+ if (!isset($bootstrap_file_found) || $bootstrap_file_found) {
+ $current_cwd = getcwd();
+ chdir($drupal_path);
+ if (!defined('DRUPAL_ROOT')) {
+ define('DRUPAL_ROOT', $drupal_path);
+ }
+ require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
+ drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
+ $authenticated = user_access('allow CKFinder file uploads');
+ if (isset($_GET['id'], $_SESSION['ckeditor'][$_GET['id']]['UserFilesPath'], $_SESSION['ckeditor'][$_GET['id']]['UserFilesAbsolutePath'])) {
+ $_SESSION['ckeditor']['UserFilesPath'] = $_SESSION['ckeditor'][$_GET['id']]['UserFilesPath'];
+ $_SESSION['ckeditor']['UserFilesAbsolutePath'] = $_SESSION['ckeditor'][$_GET['id']]['UserFilesAbsolutePath'];
+ }
+ chdir($current_cwd);
+ }
+ }
+
+ return $authenticated;
+}
+
+CheckAuthentication();
+
+if (isset($_SESSION['ckeditor']['UserFilesPath'], $_SESSION['ckeditor']['UserFilesAbsolutePath'])) {
+ $baseUrl = $_SESSION['ckeditor']['UserFilesPath'];
+ $baseDir = $_SESSION['ckeditor']['UserFilesAbsolutePath'];
+}
+else {
+ // Nothing in session? Shouldn't happen... anyway let's try to upload it in the (almost) right place
+ // Path to user files relative to the document root.
+ $baseUrl = strtr(base_path(), array(
+ '/modules/ckeditor/ckfinder/core/connector/php' => '',
+ )) . variable_get('file_private_path', conf_path() . '/files') . '/';
+ $baseDir = resolveUrl($baseUrl);
+}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery-ui.min.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery-ui.min.js
new file mode 100644
index 0000000..0202506
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery-ui.min.js
@@ -0,0 +1,414 @@
+/*!
+ * jQuery UI 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){function c(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.16",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i=
+this;setTimeout(function(){a(i).focus();g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,
+"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==d)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":
+"mousedown")+".ui-disableSelection",function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,
+outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===d)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return c(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h,
+"tabindex"),i=isNaN(g);return(i||g>=0)&&c(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&
+h.element[0].parentNode)for(var b=0;b<g.length;b++)h.options[g[b][0]]&&g[b][1].apply(h.element,i)}},contains:function(h,g){return document.compareDocumentPosition?h.compareDocumentPosition(g)&16:h!==g&&h.contains(g)},hasScroll:function(h,g){if(a(h).css("overflow")==="hidden")return false;g=g&&g==="left"?"scrollLeft":"scrollTop";var i=false;if(h[g]>0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h<g+i},isOver:function(h,g,i,b,f,j){return a.ui.isOverAxis(h,i,f)&&
+a.ui.isOverAxis(g,b,j)}})}})(jQuery);
+(function(a,d){if(a.cleanData){var c=a.cleanData;a.cleanData=function(h){for(var g=0,i;(i=h[g])!=null;g++)try{a(i).triggerHandler("remove")}catch(b){}c(h)}}else{var e=a.fn.remove;a.fn.remove=function(h,g){return this.each(function(){if(!g)if(!h||a.filter(h,[this]).length)a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(i){}});return e.call(a(this),h,g)})}}a.widget=function(h,g,i){var b=h.split(".")[0],f;h=h.split(".")[1];f=b+"-"+h;if(!i){i=g;g=a.Widget}a.expr[":"][f]=
+function(j){return!!a.data(j,h)};a[b]=a[b]||{};a[b][h]=function(j,l){arguments.length&&this._createWidget(j,l)};g=new g;g.options=a.extend(true,{},g.options);a[b][h].prototype=a.extend(true,g,{namespace:b,widgetName:h,widgetEventPrefix:a[b][h].prototype.widgetEventPrefix||h,widgetBaseClass:f},i);a.widget.bridge(h,a[b][h])};a.widget.bridge=function(h,g){a.fn[h]=function(i){var b=typeof i==="string",f=Array.prototype.slice.call(arguments,1),j=this;i=!b&&f.length?a.extend.apply(null,[true,i].concat(f)):
+i;if(b&&i.charAt(0)==="_")return j;b?this.each(function(){var l=a.data(this,h),o=l&&a.isFunction(l[i])?l[i].apply(l,f):l;if(o!==l&&o!==d){j=o;return false}}):this.each(function(){var l=a.data(this,h);l?l.option(i||{})._init():a.data(this,h,new g(i,this))});return j}};a.Widget=function(h,g){arguments.length&&this._createWidget(h,g)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(h,g){a.data(g,this.widgetName,this);this.element=a(g);this.options=
+a.extend(true,{},this.options,this._getCreateOptions(),h);var i=this;this.element.bind("remove."+this.widgetName,function(){i.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(h,g){var i=h;if(arguments.length===0)return a.extend({},this.options);if(typeof h==="string"){if(g===d)return this.options[h];i={};i[h]=g}this._setOptions(i);return this},_setOptions:function(h){var g=this;a.each(h,function(i,b){g._setOption(i,b)});return this},_setOption:function(h,g){this.options[h]=g;if(h==="disabled")this.widget()[g?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+g);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(h,g,i){var b=this.options[h];g=a.Event(g);g.type=(h===this.widgetEventPrefix?h:this.widgetEventPrefix+h).toLowerCase();i=i||{};if(g.originalEvent){h=a.event.props.length;for(var f;h;){f=a.event.props[--h];g[f]=g.originalEvent[f]}}this.element.trigger(g,i);return!(a.isFunction(b)&&b.call(this.element[0],g,i)===false||g.isDefaultPrevented())}}})(jQuery);
+(function(a){var d=false;a(document).mouseup(function(){d=false});a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(e){return c._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===a.data(e.target,c.widgetName+".preventClickEvent")){a.removeData(e.target,c.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(c){if(!d){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var e=this,h=c.which==1,g=typeof this.options.cancel=="string"&&c.target.nodeName?a(c.target).closest(this.options.cancel).length:false;if(!h||g||!this._mouseCapture(c))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)){this._mouseStarted=
+this._mouseStart(c)!==false;if(!this._mouseStarted){c.preventDefault();return true}}true===a.data(c.target,this.widgetName+".preventClickEvent")&&a.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(i){return e._mouseMove(i)};this._mouseUpDelegate=function(i){return e._mouseUp(i)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return d=true}},_mouseMove:function(c){if(a.browser.msie&&
+!(document.documentMode>=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(d){var c=
+this.options;if(this.helper||c.disabled||a(d.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(d);if(!this.handle)return false;if(c.iframeFix)a(c.iframeFix===true?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(d){var c=this.options;
+this.helper=this._createHelper(d);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);c.containment&&this._setContainment();if(this._trigger("start",d)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(d,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,d);return true},
+_mouseDrag:function(d,c){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!c){c=this._uiHash();if(this._trigger("drag",d,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);return false},_mouseStop:function(d){var c=
+false;if(a.ui.ddmanager&&!this.options.dropBehaviour)c=a.ui.ddmanager.drop(this,d);if(this.dropped){c=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
+10),function(){e._trigger("stop",d)!==false&&e._clear()})}else this._trigger("stop",d)!==false&&this._clear();return false},_mouseUp:function(d){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,d);return a.ui.mouse.prototype._mouseUp.call(this,d)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(d){var c=!this.options.handle||
+!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==d.target)c=true});return c},_createHelper:function(d){var c=this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo);d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&
+d.css("position","absolute");return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(a.isArray(d))d={left:+d[0],top:+d[1]||0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)d={top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.element.position();return{top:d.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[d.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,d.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+(d.containment=="document"?0:a(window).scrollLeft())+a(d.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d.containment=="document"?0:a(window).scrollTop())+(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)&&d.containment.constructor!=Array){d=a(d.containment);var c=d[0];if(c){d.offset();var e=a(c).css("overflow")!=
+"hidden";this.containment=[(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0),(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0),(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),
+10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=d}}else if(d.containment.constructor==Array)this.containment=d.containment},_convertPositionTo:function(d,c){if(!c)c=this.position;d=d=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:c.top+
+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*d)}},_generatePosition:function(d){var c=this.options,e=this.cssPosition=="absolute"&&
+!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=d.pageX,i=d.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(d.pageX-this.offset.click.left<b[0])g=b[0]+this.offset.click.left;
+if(d.pageY-this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(d.pageX-this.offset.click.left>b[2])g=b[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(c.grid){i=c.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-c.grid[1]:i+c.grid[1]:i;g=c.grid[0]?this.originalPageX+Math.round((g-this.originalPageX)/
+c.grid[0])*c.grid[0]:this.originalPageX;g=b?!(g-this.offset.click.left<b[0]||g-this.offset.click.left>b[2])?g:!(g-this.offset.click.left<b[0])?g-c.grid[0]:g+c.grid[0]:g}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
+526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(d,c,e){e=e||this._uiHash();a.ui.plugin.call(this,d,[c,e]);if(d=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,d,c,
+e)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8.16"});a.ui.plugin.add("draggable","connectToSortable",{start:function(d,c){var e=a(this).data("draggable"),h=e.options,g=a.extend({},c,{item:e.element});e.sortables=[];a(h.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){e.sortables.push({instance:i,shouldRevert:i.options.revert});
+i.refreshPositions();i._trigger("activate",d,g)}})},stop:function(d,c){var e=a(this).data("draggable"),h=a.extend({},c,{item:e.element});a.each(e.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;e.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(d);this.instance.options.helper=this.instance.options._helper;e.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+false;this.instance._trigger("deactivate",d,h)}})},drag:function(d,c){var e=a(this).data("draggable"),h=this;a.each(e.sortables,function(){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(h).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return c.helper[0]};d.target=this.instance.currentItem[0];this.instance._mouseCapture(d,true);this.instance._mouseStart(d,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;
+e._trigger("toSortable",d);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}this.instance.currentItem&&this.instance._mouseDrag(d)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",d,this.instance._uiHash(this.instance));this.instance._mouseStop(d,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+this.instance.placeholder.remove();e._trigger("fromSortable",d);e.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var d=a("body"),c=a(this).data("draggable").options;if(d.css("cursor"))c._cursor=d.css("cursor");d.css("cursor",c.cursor)},stop:function(){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(d,c){d=a(c.helper);c=a(this).data("draggable").options;if(d.css("opacity"))c._opacity=
+d.css("opacity");d.css("opacity",c.opacity)},stop:function(d,c){d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var d=a(this).data("draggable");if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML")d.overflowOffset=d.scrollParent.offset()},drag:function(d){var c=a(this).data("draggable"),e=c.options,h=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!=
+"x")if(c.overflowOffset.top+c.scrollParent[0].offsetHeight-d.pageY<e.scrollSensitivity)c.scrollParent[0].scrollTop=h=c.scrollParent[0].scrollTop+e.scrollSpeed;else if(d.pageY-c.overflowOffset.top<e.scrollSensitivity)c.scrollParent[0].scrollTop=h=c.scrollParent[0].scrollTop-e.scrollSpeed;if(!e.axis||e.axis!="y")if(c.overflowOffset.left+c.scrollParent[0].offsetWidth-d.pageX<e.scrollSensitivity)c.scrollParent[0].scrollLeft=h=c.scrollParent[0].scrollLeft+e.scrollSpeed;else if(d.pageX-c.overflowOffset.left<
+e.scrollSensitivity)c.scrollParent[0].scrollLeft=h=c.scrollParent[0].scrollLeft-e.scrollSpeed}else{if(!e.axis||e.axis!="x")if(d.pageY-a(document).scrollTop()<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed);else if(a(window).height()-(d.pageY-a(document).scrollTop())<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed);if(!e.axis||e.axis!="y")if(d.pageX-a(document).scrollLeft()<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()-
+e.scrollSpeed);else if(a(window).width()-(d.pageX-a(document).scrollLeft())<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed)}h!==false&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(c,d)}});a.ui.plugin.add("draggable","snap",{start:function(){var d=a(this).data("draggable"),c=d.options;d.snapElements=[];a(c.snap.constructor!=String?c.snap.items||":data(draggable)":c.snap).each(function(){var e=a(this),h=e.offset();this!=d.element[0]&&d.snapElements.push({item:this,
+width:e.outerWidth(),height:e.outerHeight(),top:h.top,left:h.left})})},drag:function(d,c){for(var e=a(this).data("draggable"),h=e.options,g=h.snapTolerance,i=c.offset.left,b=i+e.helperProportions.width,f=c.offset.top,j=f+e.helperProportions.height,l=e.snapElements.length-1;l>=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g<i&&i<n+g&&k-g<f&&f<m+g||o-g<i&&i<n+g&&k-g<j&&j<m+g||o-g<b&&b<n+g&&k-g<f&&f<m+g||o-g<b&&b<n+g&&k-g<j&&
+j<m+g){if(h.snapMode!="inner"){var p=Math.abs(k-j)<=g,q=Math.abs(m-f)<=g,s=Math.abs(o-b)<=g,r=Math.abs(n-i)<=g;if(p)c.position.top=e._convertPositionTo("relative",{top:k-e.helperProportions.height,left:0}).top-e.margins.top;if(q)c.position.top=e._convertPositionTo("relative",{top:m,left:0}).top-e.margins.top;if(s)c.position.left=e._convertPositionTo("relative",{top:0,left:o-e.helperProportions.width}).left-e.margins.left;if(r)c.position.left=e._convertPositionTo("relative",{top:0,left:n}).left-e.margins.left}var u=
+p||q||s||r;if(h.snapMode!="outer"){p=Math.abs(k-f)<=g;q=Math.abs(m-j)<=g;s=Math.abs(o-i)<=g;r=Math.abs(n-b)<=g;if(p)c.position.top=e._convertPositionTo("relative",{top:k,left:0}).top-e.margins.top;if(q)c.position.top=e._convertPositionTo("relative",{top:m-e.helperProportions.height,left:0}).top-e.margins.top;if(s)c.position.left=e._convertPositionTo("relative",{top:0,left:o}).left-e.margins.left;if(r)c.position.left=e._convertPositionTo("relative",{top:0,left:n-e.helperProportions.width}).left-e.margins.left}if(!e.snapElements[l].snapping&&
+(p||q||s||r||u))e.options.snap.snap&&e.options.snap.snap.call(e.element,d,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=p||q||s||r||u}else{e.snapElements[l].snapping&&e.options.snap.release&&e.options.snap.release.call(e.element,d,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var d=a(this).data("draggable").options;d=a.makeArray(a(d.stack)).sort(function(e,h){return(parseInt(a(e).css("zIndex"),
+10)||0)-(parseInt(a(h).css("zIndex"),10)||0)});if(d.length){var c=parseInt(d[0].style.zIndex)||0;a(d).each(function(e){this.style.zIndex=c+e});this[0].style.zIndex=c+d.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(d,c){d=a(c.helper);c=a(this).data("draggable").options;if(d.css("zIndex"))c._zIndex=d.css("zIndex");d.css("zIndex",c.zIndex)},stop:function(d,c){d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);
+(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var d=this.options,c=d.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(c)?c:function(e){return e.is(c)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[d.scope]=a.ui.ddmanager.droppables[d.scope]||[];a.ui.ddmanager.droppables[d.scope].push(this);
+d.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var d=a.ui.ddmanager.droppables[this.options.scope],c=0;c<d.length;c++)d[c]==this&&d.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(d,c){if(d=="accept")this.accept=a.isFunction(c)?c:function(e){return e.is(c)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(d){var c=a.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);c&&this._trigger("activate",d,this.ui(c))},_deactivate:function(d){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);c&&this._trigger("deactivate",d,this.ui(c))},_over:function(d){var c=a.ui.ddmanager.current;if(!(!c||(c.currentItem||c.element)[0]==this.element[0]))if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",d,this.ui(c))}},_out:function(d){var c=a.ui.ddmanager.current;if(!(!c||(c.currentItem||c.element)[0]==this.element[0]))if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",d,this.ui(c))}},_drop:function(d,c){var e=c||a.ui.ddmanager.current;if(!e||(e.currentItem||e.element)[0]==this.element[0])return false;var h=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+a.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==e.options.scope&&g.accept.call(g.element[0],e.currentItem||e.element)&&a.ui.intersect(e,a.extend(g,{offset:g.element.offset()}),g.options.tolerance)){h=true;return false}});if(h)return false;if(this.accept.call(this.element[0],e.currentItem||e.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+d,this.ui(e));return this.element}return false},ui:function(d){return{draggable:d.currentItem||d.element,helper:d.helper,position:d.position,offset:d.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8.16"});a.ui.intersect=function(d,c,e){if(!c.offset)return false;var h=(d.positionAbs||d.position.absolute).left,g=h+d.helperProportions.width,i=(d.positionAbs||d.position.absolute).top,b=i+d.helperProportions.height,f=c.offset.left,j=f+c.proportions.width,l=c.offset.top,o=l+c.proportions.height;
+switch(e){case "fit":return f<=h&&g<=j&&l<=i&&b<=o;case "intersect":return f<h+d.helperProportions.width/2&&g-d.helperProportions.width/2<j&&l<i+d.helperProportions.height/2&&b-d.helperProportions.height/2<o;case "pointer":return a.ui.isOver((d.positionAbs||d.position.absolute).top+(d.clickOffset||d.offset.click).top,(d.positionAbs||d.position.absolute).left+(d.clickOffset||d.offset.click).left,l,f,c.proportions.height,c.proportions.width);case "touch":return(i>=l&&i<=o||b>=l&&b<=o||i<l&&b>o)&&(h>=
+f&&h<=j||g>=f&&g<=j||h<f&&g>j);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(d,c){var e=a.ui.ddmanager.droppables[d.options.scope]||[],h=c?c.type:null,g=(d.currentItem||d.element).find(":data(droppable)").andSelf(),i=0;a:for(;i<e.length;i++)if(!(e[i].options.disabled||d&&!e[i].accept.call(e[i].element[0],d.currentItem||d.element))){for(var b=0;b<g.length;b++)if(g[b]==e[i].element[0]){e[i].proportions.height=0;continue a}e[i].visible=e[i].element.css("display")!=
+"none";if(e[i].visible){h=="mousedown"&&e[i]._activate.call(e[i],c);e[i].offset=e[i].element.offset();e[i].proportions={width:e[i].element[0].offsetWidth,height:e[i].element[0].offsetHeight}}}},drop:function(d,c){var e=false;a.each(a.ui.ddmanager.droppables[d.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(d,this,this.options.tolerance))e=e||this._drop.call(this,c);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],d.currentItem||
+d.element)){this.isout=1;this.isover=0;this._deactivate.call(this,c)}}});return e},dragStart:function(d,c){d.element.parents(":not(body,html)").bind("scroll.droppable",function(){d.options.refreshPositions||a.ui.ddmanager.prepareOffsets(d,c)})},drag:function(d,c){d.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(d,c);a.each(a.ui.ddmanager.droppables[d.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var e=a.ui.intersect(d,this,this.options.tolerance);
+if(e=!e&&this.isover==1?"isout":e&&this.isover==0?"isover":null){var h;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){h=a.data(g[0],"droppable");h.greedyChild=e=="isover"?1:0}}if(h&&e=="isover"){h.isover=0;h.isout=1;h._out.call(h,c)}this[e]=1;this[e=="isout"?"isover":"isout"]=0;this[e=="isover"?"_over":"_out"].call(this,c);if(h&&e=="isout"){h.isout=0;h.isover=1;h._over.call(h,c)}}}})},dragStop:function(d,c){d.element.parents(":not(body,html)").unbind("scroll.droppable");
+d.options.refreshPositions||a.ui.ddmanager.prepareOffsets(d,c)}}})(jQuery);
+(function(a){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var e=this,h=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i<g.length;i++){var b=a.trim(g[i]),f=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor==
+String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h=
+false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();g=d(this.helper.css("left"));var b=d(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff=
+{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis];
+if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false},
+_mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b,
+{top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:c(h.minWidth)?h.minWidth:0,maxWidth:c(h.maxWidth)?h.maxWidth:Infinity,minHeight:c(h.minHeight)?h.minHeight:0,maxHeight:c(h.maxHeight)?h.maxHeight:
+Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(g<h.maxWidth)h.maxWidth=g;if(b<h.maxHeight)h.maxHeight=b}this._vBoundaries=h},_updateCache:function(e){this.offset=this.helper.offset();if(c(e.left))this.position.left=e.left;if(c(e.top))this.position.top=e.top;if(c(e.height))this.size.height=e.height;if(c(e.width))this.size.width=
+e.width},_updateRatio:function(e){var h=this.position,g=this.size,i=this.axis;if(c(e.height))e.width=e.height*this.aspectRatio;else if(c(e.width))e.height=e.width/this.aspectRatio;if(i=="sw"){e.left=h.left+(g.width-e.width);e.top=null}if(i=="nw"){e.top=h.top+(g.height-e.height);e.left=h.left+(g.width-e.width)}return e},_respectSize:function(e){var h=this._vBoundaries,g=this.axis,i=c(e.width)&&h.maxWidth&&h.maxWidth<e.width,b=c(e.height)&&h.maxHeight&&h.maxHeight<e.height,f=c(e.width)&&h.minWidth&&
+h.minWidth>e.width,j=c(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left=
+null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h<this._proportionallyResizeElements.length;h++){var g=this._proportionallyResizeElements[h];if(!this.borderDif){var i=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],b=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=a.map(i,function(f,j){f=parseInt(f,10)||
+0;j=parseInt(b[j],10)||0;return f+j})}a.browser.msie&&(a(e).is(":hidden")||a(e).parents(":hidden").length)||g.css({height:e.height()-this.borderDif[0]-this.borderDif[2]||0,width:e.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var e=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+
+g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]);
+e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.16"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),
+10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top-
+b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?
+a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h=
+a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing,
+step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement=
+a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=d(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset;
+var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left:
+h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top-
+i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition,
+b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,
+display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e=
+a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height=
+i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var d=function(e){return parseInt(e,10)||0},c=function(e){return!isNaN(parseInt(e,10))}})(jQuery);
+(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(d.options.filter,d.element[0]);c.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"),
+selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var c=this;this.opos=[d.pageX,
+d.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",d);a(e.appendTo).append(this.helper);this.helper.css({left:d.clientX,top:d.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!d.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;c._trigger("unselecting",
+d,{unselecting:h.element})}});a(d.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!d.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?c._trigger("selecting",d,{selecting:h.element}):c._trigger("unselecting",d,{unselecting:h.element});return false}})}},_mouseDrag:function(d){var c=this;this.dragged=true;if(!this.options.disabled){var e=
+this.options,h=this.opos[0],g=this.opos[1],i=d.pageX,b=d.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==c.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.right<h||j.top>b||j.bottom<g);else if(e.tolerance=="fit")l=j.left>h&&j.right<i&&j.top>g&&j.bottom<b;if(l){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");
+j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",d,{selecting:j.element})}}else{if(j.selecting)if(d.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",d,{unselecting:j.element})}if(j.selected)if(!d.metaKey&&
+!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",d,{unselecting:j.element})}}}});return false}},_mouseStop:function(d){var c=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;c._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=
+a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;c._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8.16"})})(jQuery);
+(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var d=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?d.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var d=this.items.length-1;d>=0;d--)this.items[d].item.removeData("sortable-item");return this},_setOption:function(d,c){if(d===
+"disabled"){this.options[d]=c;this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(d,c){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(d);var e=null,h=this;a(d.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(d.target,"sortable-item")==h)e=a(d.target);if(!e)return false;if(this.options.handle&&
+!c){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==d.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(d,c,e){c=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(d);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();c.containment&&this._setContainment();if(c.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",c.cursor)}if(c.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",c.opacity)}if(c.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",c.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",d,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",d,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(d);
+return true},_mouseDrag:function(d){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var c=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-d.pageY<c.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop+c.scrollSpeed;else if(d.pageY-this.overflowOffset.top<
+c.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop-c.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-d.pageX<c.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft+c.scrollSpeed;else if(d.pageX-this.overflowOffset.left<c.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(d.pageY-a(document).scrollTop()<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-
+c.scrollSpeed);else if(a(window).height()-(d.pageY-a(document).scrollTop())<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed);if(d.pageX-a(document).scrollLeft()<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed);else if(a(window).width()-(d.pageX-a(document).scrollLeft())<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed)}e!==false&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,
+d)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(c=this.items.length-1;c>=0;c--){e=this.items[c];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],
+h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(d,e);else break;this._trigger("change",d,this._uiHash());break}}this._contactContainers(d);a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);this._trigger("sort",d,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(d,c){if(d){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,d);if(this.options.revert){var e=this;c=e.placeholder.offset();
+e.reverting=true;a(this.helper).animate({left:c.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:c.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(d)})}else this._clear(d,c);return false}},cancel:function(){var d=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,d._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,d._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};a(c).each(function(){var h=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||/(.+)[-=_](.+)/);if(h)e.push((d.key||h[1]+"[]")+"="+(d.key&&d.expression?h[1]:h[2]))});!e.length&&d.key&&e.push(d.key+"=");return e.join("&")},
+toArray:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};c.each(function(){e.push(a(d.item||this).attr(d.attribute||"id")||"")});return e},_intersectsWith:function(d){var c=this.positionAbs.left,e=c+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=d.left,b=i+d.width,f=d.top,j=f+d.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+l<j&&c+o>i&&c+o<b;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>d[this.floating?"width":"height"]?l:i<c+this.helperProportions.width/2&&e-this.helperProportions.width/2<b&&f<h+this.helperProportions.height/2&&g-this.helperProportions.height/2<j},_intersectsWithPointer:function(d){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height);d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width);c=c&&d;d=this._getDragVerticalDirection();
+var e=this._getDragHorizontalDirection();if(!c)return false;return this.floating?e&&e=="right"||d=="down"?2:1:d&&(d=="down"?2:1)},_intersectsWithSides:function(d){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top+d.height/2,d.height);d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left+d.width/2,d.width);var e=this._getDragVerticalDirection(),h=this._getDragHorizontalDirection();return this.floating&&h?h=="right"&&d||h=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},
+_getDragVerticalDirection:function(){var d=this.positionAbs.top-this.lastPositionAbs.top;return d!=0&&(d>0?"down":"up")},_getDragHorizontalDirection:function(){var d=this.positionAbs.left-this.lastPositionAbs.left;return d!=0&&(d>0?"right":"left")},refresh:function(d){this._refreshItems(d);this.refreshPositions();return this},_connectWith:function(){var d=this.options;return d.connectWith.constructor==String?[d.connectWith]:d.connectWith},_getItemsAsjQuery:function(d){var c=[],e=[],h=this._connectWith();
+if(h&&d)for(d=h.length-1;d>=0;d--)for(var g=a(h[d]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(d=e.length-1;d>=0;d--)e[d][0].each(function(){c.push(this)});return a(c)},_removeCurrentsFromItems:function(){for(var d=this.currentItem.find(":data(sortable-item)"),c=0;c<this.items.length;c++)for(var e=0;e<d.length;e++)d[e]==this.items[c].item[0]&&this.items.splice(c,1)},_refreshItems:function(d){this.items=[];this.containers=[this];var c=this.items,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],d,{item:this.currentItem}):a(this.options.items,this.element),
+this]],h=this._connectWith();if(h)for(var g=h.length-1;g>=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],d,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){d=e[g][1];h=e[g][0];b=0;for(i=h.length;b<i;b++){f=a(h[b]);f.data("sortable-item",d);c.push({item:f,instance:d,width:0,height:0,left:0,top:0})}}},refreshPositions:function(d){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var c=this.items.length-1;c>=0;c--){var e=this.items[c];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!d){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c=
+this.containers.length-1;c>=0;c--){h=this.containers[c].element.offset();this.containers[c].containerCache.left=h.left;this.containers[c].containerCache.top=h.top;this.containers[c].containerCache.width=this.containers[c].element.outerWidth();this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(d){var c=d||this,e=c.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g=
+a(document.createElement(c.currentItem[0].nodeName)).addClass(h||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10));i.width()||i.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||
+0,10))}}}}c.placeholder=a(e.placeholder.element.call(c.element,c.currentItem));c.currentItem.after(c.placeholder);e.placeholder.update(c,c.placeholder)},_contactContainers:function(d){for(var c=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(c&&a.ui.contains(this.containers[h].element[0],c.element[0]))){c=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out",
+d,this._uiHash(this));this.containers[h].containerCache.over=0}if(c)if(this.containers.length===1){this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){c=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b-
+g)<c){c=Math.abs(b-g);h=this.items[i]}}if(h||this.options.dropOnEmpty){this.currentContainer=this.containers[e];h?this._rearrange(d,h,null,true):this._rearrange(d,null,this.containers[e].element,true);this._trigger("change",d,this._uiHash());this.containers[e]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}}},_createHelper:function(d){var c=
+this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]);if(d[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(d[0].style.width==
+""||c.forceHelperSize)d.width(this.currentItem.width());if(d[0].style.height==""||c.forceHelperSize)d.height(this.currentItem.height());return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(a.isArray(d))d={left:+d[0],top:+d[1]||0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=
+this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)d=
+{top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.currentItem.position();return{top:d.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(d.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)){var c=a(d.containment)[0];d=a(d.containment).offset();var e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),
+10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(d,c){if(!c)c=
+this.position;d=d=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*d)}},_generatePosition:function(d){var c=this.options,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var g=d.pageX,i=d.pageY;if(this.originalPosition){if(this.containment){if(d.pageX-this.offset.click.left<this.containment[0])g=this.containment[0]+this.offset.click.left;if(d.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(d.pageX-this.offset.click.left>this.containment[2])g=this.containment[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(c.grid){i=this.originalPageY+Math.round((i-
+this.originalPageY)/c.grid[1])*c.grid[1];i=this.containment?!(i-this.offset.click.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-c.grid[1]:i+c.grid[1]:i;g=this.originalPageX+Math.round((g-this.originalPageX)/c.grid[0])*c.grid[0];g=this.containment?!(g-this.offset.click.left<this.containment[0]||g-this.offset.click.left>this.containment[2])?g:!(g-this.offset.click.left<this.containment[0])?g-c.grid[0]:g+c.grid[0]:g}}return{top:i-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_rearrange:function(d,c,e,h){e?e[0].appendChild(this.placeholder[0]):c.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?c.item[0]:c.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var g=this,i=this.counter;window.setTimeout(function(){i==g.counter&&g.refreshPositions(!h)},0)},_clear:function(d,c){this.reverting=false;var e=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var h in this._storedCSS)if(this._storedCSS[h]=="auto"||this._storedCSS[h]=="static")this._storedCSS[h]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&e.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c)e.push(function(g){this._trigger("update",g,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||e.push(function(g){this._trigger("remove",
+g,this._uiHash())});for(h=this.containers.length-1;h>=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!c){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){c||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this,
+this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",
+d,this._uiHash());for(h=0;h<e.length;h++)e[h].call(this,d);this._trigger("stop",d,this._uiHash())}return false}c||this._trigger("beforeStop",d,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!c){for(h=0;h<e.length;h++)e[h].call(this,d);this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(d){var c=d||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:d?d.element:null}}});a.extend(a.ui.sortable,{version:"1.8.16"})})(jQuery);
+jQuery.effects||function(a,d){function c(n){var k;if(n&&n.constructor==Array&&n.length==3)return n;if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)];if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55];if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return[parseInt(k[1],
+16),parseInt(k[2],16),parseInt(k[3],16)];if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(n))return j.transparent;return j[a.trim(n).toLowerCase()]}function e(n,k){var m;do{m=a.curCSS(n,k);if(m!=""&&m!="transparent"||a.nodeName(n,"body"))break;k="backgroundColor"}while(n=n.parentNode);return c(m)}function h(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+k={},m,p;if(n&&n.length&&n[0]&&n[n[0]])for(var q=n.length;q--;){m=n[q];if(typeof n[m]=="string"){p=m.replace(/\-(\w)/g,function(s,r){return r.toUpperCase()});k[p]=n[m]}}else for(m in n)if(typeof n[m]==="string")k[m]=n[m];return k}function g(n){var k,m;for(k in n){m=n[k];if(m==null||a.isFunction(m)||k in o||/scrollbar/.test(k)||!/color/i.test(k)&&isNaN(parseFloat(m)))delete n[k]}return n}function i(n,k){var m={_:0},p;for(p in k)if(n[p]!=k[p])m[p]=k[p];return m}function b(n,k,m,p){if(typeof n=="object"){p=
+k;m=null;k=n;n=k.effect}if(a.isFunction(k)){p=k;m=null;k={}}if(typeof k=="number"||a.fx.speeds[k]){p=m;m=k;k={}}if(a.isFunction(m)){p=m;m=null}k=k||{};m=m||k.duration;m=a.fx.off?0:typeof m=="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;p=p||k.complete;return[n,k,m,p]}function f(n){if(!n||typeof n==="number"||a.fx.speeds[n])return true;if(typeof n==="string"&&!a.effects[n])return true;return false}a.effects={};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+"borderTopColor","borderColor","color","outlineColor"],function(n,k){a.fx.step[k]=function(m){if(!m.colorInit){m.start=e(m.elem,k);m.end=c(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var j={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},l=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(n,k,m,
+p){if(a.isFunction(m)){p=m;m=null}return this.queue(function(){var q=a(this),s=q.attr("style")||" ",r=g(h.call(this)),u,v=q.attr("class");a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});u=g(h.call(this));q.attr("class",v);q.animate(i(r,u),{queue:false,duration:k,easing:m,complete:function(){a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});if(typeof q.attr("style")=="object"){q.attr("style").cssText="";q.attr("style").cssText=s}else q.attr("style",s);p&&p.apply(this,arguments);a.dequeue(this)}})})};
+a.fn.extend({_addClass:a.fn.addClass,addClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{add:n},k,m,p]):this._addClass(n)},_removeClass:a.fn.removeClass,removeClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{remove:n},k,m,p]):this._removeClass(n)},_toggleClass:a.fn.toggleClass,toggleClass:function(n,k,m,p,q){return typeof k=="boolean"||k===d?m?a.effects.animateClass.apply(this,[k?{add:n}:{remove:n},m,p,q]):this._toggleClass(n,k):a.effects.animateClass.apply(this,
+[{toggle:n},k,m,p])},switchClass:function(n,k,m,p,q){return a.effects.animateClass.apply(this,[{add:k,remove:n},m,p,q])}});a.extend(a.effects,{version:"1.8.16",save:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.data("ec.storage."+k[m],n[0].style[k[m]])},restore:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.css(k[m],n.data("ec.storage."+k[m]))},setMode:function(n,k){if(k=="toggle")k=n.is(":hidden")?"show":"hide";return k},getBaseline:function(n,k){var m;switch(n[0]){case "top":m=
+0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=n[0]/k.height}switch(n[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=n[1]/k.width}return{x:n,y:m}},createWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent();var k={width:n.outerWidth(true),height:n.outerHeight(true),"float":n.css("float")},m=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
+p=document.activeElement;n.wrap(m);if(n[0]===p||a.contains(n[0],p))a(p).focus();m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(q,s){k[s]=n.css(s);if(isNaN(parseInt(k[s],10)))k[s]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){var k,m=document.activeElement;
+if(n.parent().is(".ui-effects-wrapper")){k=n.parent().replaceWith(n);if(n[0]===m||a.contains(n[0],m))a(m).focus();return k}return n},setTransition:function(n,k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});
+return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,
+arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%","pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/
+2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p*((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,
+p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,
+k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/=q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,
+p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return-(r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s))+m},easeOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return r*Math.pow(2,-10*k)*Math.sin((k*q-n)*2*Math.PI/s)+p+m},easeInOutElastic:function(n,k,m,p,q){n=1.70158;var s=
+0,r=p;if(k==0)return m;if((k/=q/2)==2)return m+p;s||(s=q*0.3*1.5);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);if(k<1)return-0.5*r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)+m;return r*Math.pow(2,-10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)*0.5+p+m},easeInBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;return p*(k/=q)*k*((s+1)*k-s)+m},easeOutBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;return p*((k=k/q-1)*k*((s+1)*k+s)+1)+m},easeInOutBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;
+if((k/=q/2)<1)return p/2*k*k*(((s*=1.525)+1)*k-s)+m;return p/2*((k-=2)*k*(((s*=1.525)+1)*k+s)+2)+m},easeInBounce:function(n,k,m,p,q){return p-a.easing.easeOutBounce(n,q-k,0,p,q)+m},easeOutBounce:function(n,k,m,p,q){return(k/=q)<1/2.75?p*7.5625*k*k+m:k<2/2.75?p*(7.5625*(k-=1.5/2.75)*k+0.75)+m:k<2.5/2.75?p*(7.5625*(k-=2.25/2.75)*k+0.9375)+m:p*(7.5625*(k-=2.625/2.75)*k+0.984375)+m},easeInOutBounce:function(n,k,m,p,q){if(k<q/2)return a.easing.easeInBounce(n,k*2,0,p,q)*0.5+m;return a.easing.easeOutBounce(n,
+k*2-q,0,p,q)*0.5+p*0.5+m}})}(jQuery);
+(function(a){a.effects.blind=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"vertical";a.effects.save(c,e);c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),b=g=="vertical"?"height":"width";g=g=="vertical"?i.height():i.width();h=="show"&&i.css(b,0);var f={};f[b]=h=="show"?g:0;i.animate(f,d.duration,d.options.easing,function(){h=="hide"&&c.hide();a.effects.restore(c,
+e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery);
+(function(a){a.effects.bounce=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"effect"),g=d.options.direction||"up",i=d.options.distance||20,b=d.options.times||5,f=d.duration||250;/show|hide/.test(h)&&e.push("opacity");a.effects.save(c,e);c.show();a.effects.createWrapper(c);var j=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";i=d.options.distance||(j=="top"?c.outerHeight({margin:true})/3:c.outerWidth({margin:true})/
+3);if(h=="show")c.css("opacity",0).css(j,g=="pos"?-i:i);if(h=="hide")i/=b*2;h!="hide"&&b--;if(h=="show"){var l={opacity:1};l[j]=(g=="pos"?"+=":"-=")+i;c.animate(l,f/2,d.options.easing);i/=2;b--}for(l=0;l<b;l++){var o={},n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;c.animate(o,f/2,d.options.easing).animate(n,f/2,d.options.easing);i=h=="hide"?i*2:i/2}if(h=="hide"){l={opacity:0};l[j]=(g=="pos"?"-=":"+=")+i;c.animate(l,f/2,d.options.easing,function(){c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);
+d.callback&&d.callback.apply(this,arguments)})}else{o={};n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;c.animate(o,f/2,d.options.easing).animate(n,f/2,d.options.easing,function(){a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
+(function(a){a.effects.clip=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"vertical";a.effects.save(c,e);c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"});i=c[0].tagName=="IMG"?i:c;var b={size:g=="vertical"?"height":"width",position:g=="vertical"?"top":"left"};g=g=="vertical"?i.height():i.width();if(h=="show"){i.css(b.size,0);i.css(b.position,
+g/2)}var f={};f[b.size]=h=="show"?g:0;f[b.position]=h=="show"?0:g/2;i.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.drop=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","opacity"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"left";a.effects.save(c,e);c.show();a.effects.createWrapper(c);var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=d.options.distance||(i=="top"?c.outerHeight({margin:true})/2:c.outerWidth({margin:true})/2);if(h=="show")c.css("opacity",0).css(i,g=="pos"?-b:b);var f={opacity:h==
+"show"?1:0};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;c.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.explode=function(d){return this.queue(function(){var c=d.options.pieces?Math.round(Math.sqrt(d.options.pieces)):3,e=d.options.pieces?Math.round(Math.sqrt(d.options.pieces)):3;d.options.mode=d.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":d.options.mode;var h=a(this).show().css("visibility","hidden"),g=h.offset();g.top-=parseInt(h.css("marginTop"),10)||0;g.left-=parseInt(h.css("marginLeft"),10)||0;for(var i=h.outerWidth(true),b=h.outerHeight(true),f=0;f<c;f++)for(var j=
+0;j<e;j++)h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/c,left:g.left+j*(i/e)+(d.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/c)+(d.options.mode=="show"?(f-Math.floor(c/2))*(b/c):0),opacity:d.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(d.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+
+f*(b/c)+(d.options.mode=="show"?0:(f-Math.floor(c/2))*(b/c)),opacity:d.options.mode=="show"?1:0},d.duration||500);setTimeout(function(){d.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();d.callback&&d.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},d.duration||500)})}})(jQuery);
+(function(a){a.effects.fade=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide");c.animate({opacity:e},{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.fold=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.size||15,i=!!d.options.horizFirst,b=d.duration?d.duration/2:a.fx.speeds._default/2;a.effects.save(c,e);c.show();var f=a.effects.createWrapper(c).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1],
+10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,d.options.easing).animate(o,b,d.options.easing,function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery);
+(function(a){a.effects.highlight=function(d){return this.queue(function(){var c=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(c,d.options.mode||"show"),g={backgroundColor:c.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(c,e);c.show().css({backgroundImage:"none",backgroundColor:d.options.color||"#ffff99"}).animate(g,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);h=="show"&&!a.support.opacity&&
+this.style.removeAttribute("filter");d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.pulsate=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"show");times=(d.options.times||5)*2-1;duration=d.duration?d.duration/2:a.fx.speeds._default/2;isVisible=c.is(":visible");animateTo=0;if(!isVisible){c.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e<times;e++){c.animate({opacity:animateTo},duration,d.options.easing);animateTo=(animateTo+1)%2}c.animate({opacity:animateTo},duration,
+d.options.easing,function(){animateTo==0&&c.hide();d.callback&&d.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);
+(function(a){a.effects.puff=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide"),h=parseInt(d.options.percent,10)||150,g=h/100,i={height:c.height(),width:c.width()};a.extend(d.options,{fade:true,mode:e,percent:e=="hide"?h:100,from:e=="hide"?i:{height:i.height*g,width:i.width*g}});c.effect("scale",d.options,d.duration,d.callback);c.dequeue()})};a.effects.scale=function(d){return this.queue(function(){var c=a(this),e=a.extend(true,{},d.options),h=a.effects.setMode(c,
+d.options.mode||"effect"),g=parseInt(d.options.percent,10)||(parseInt(d.options.percent,10)==0?0:h=="hide"?0:100),i=d.options.direction||"both",b=d.options.origin;if(h!="effect"){e.origin=b||["middle","center"];e.restore=true}b={height:c.height(),width:c.width()};c.from=d.options.from||(h=="show"?{height:0,width:0}:b);g={y:i!="horizontal"?g/100:1,x:i!="vertical"?g/100:1};c.to={height:b.height*g.y,width:b.width*g.x};if(d.options.fade){if(h=="show"){c.from.opacity=0;c.to.opacity=1}if(h=="hide"){c.from.opacity=
+1;c.to.opacity=0}}e.from=c.from;e.to=c.to;e.mode=h;c.effect("size",e,d.duration,d.callback);c.dequeue()})};a.effects.size=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],g=["width","height","overflow"],i=["fontSize"],b=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+j=a.effects.setMode(c,d.options.mode||"effect"),l=d.options.restore||false,o=d.options.scale||"both",n=d.options.origin,k={height:c.height(),width:c.width()};c.from=d.options.from||k;c.to=d.options.to||k;if(n){n=a.effects.getBaseline(n,k);c.from.top=(k.height-c.from.height)*n.y;c.from.left=(k.width-c.from.width)*n.x;c.to.top=(k.height-c.to.height)*n.y;c.to.left=(k.width-c.to.width)*n.x}var m={from:{y:c.from.height/k.height,x:c.from.width/k.width},to:{y:c.to.height/k.height,x:c.to.width/k.width}};
+if(o=="box"||o=="both"){if(m.from.y!=m.to.y){e=e.concat(b);c.from=a.effects.setTransition(c,b,m.from.y,c.from);c.to=a.effects.setTransition(c,b,m.to.y,c.to)}if(m.from.x!=m.to.x){e=e.concat(f);c.from=a.effects.setTransition(c,f,m.from.x,c.from);c.to=a.effects.setTransition(c,f,m.to.x,c.to)}}if(o=="content"||o=="both")if(m.from.y!=m.to.y){e=e.concat(i);c.from=a.effects.setTransition(c,i,m.from.y,c.from);c.to=a.effects.setTransition(c,i,m.to.y,c.to)}a.effects.save(c,l?e:h);c.show();a.effects.createWrapper(c);
+c.css("overflow","hidden").css(c.from);if(o=="content"||o=="both"){b=b.concat(["marginTop","marginBottom"]).concat(i);f=f.concat(["marginLeft","marginRight"]);g=e.concat(b).concat(f);c.find("*[width]").each(function(){child=a(this);l&&a.effects.save(child,g);var p={height:child.height(),width:child.width()};child.from={height:p.height*m.from.y,width:p.width*m.from.x};child.to={height:p.height*m.to.y,width:p.width*m.to.x};if(m.from.y!=m.to.y){child.from=a.effects.setTransition(child,b,m.from.y,child.from);
+child.to=a.effects.setTransition(child,b,m.to.y,child.to)}if(m.from.x!=m.to.x){child.from=a.effects.setTransition(child,f,m.from.x,child.from);child.to=a.effects.setTransition(child,f,m.to.x,child.to)}child.css(child.from);child.animate(child.to,d.duration,d.options.easing,function(){l&&a.effects.restore(child,g)})})}c.animate(c.to,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity);j=="hide"&&c.hide();a.effects.restore(c,
+l?e:h);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.shake=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"];a.effects.setMode(c,d.options.mode||"effect");var h=d.options.direction||"left",g=d.options.distance||20,i=d.options.times||3,b=d.duration||d.options.duration||140;a.effects.save(c,e);c.show();a.effects.createWrapper(c);var f=h=="up"||h=="down"?"top":"left",j=h=="up"||h=="left"?"pos":"neg";h={};var l={},o={};h[f]=(j=="pos"?"-=":"+=")+g;l[f]=(j=="pos"?"+=":"-=")+g*2;o[f]=
+(j=="pos"?"-=":"+=")+g*2;c.animate(h,b,d.options.easing);for(g=1;g<i;g++)c.animate(l,b,d.options.easing).animate(o,b,d.options.easing);c.animate(l,b,d.options.easing).animate(h,b/2,d.options.easing,function(){a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
+(function(a){a.effects.slide=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"show"),g=d.options.direction||"left";a.effects.save(c,e);c.show();a.effects.createWrapper(c).css({overflow:"hidden"});var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=d.options.distance||(i=="top"?c.outerHeight({margin:true}):c.outerWidth({margin:true}));if(h=="show")c.css(i,g=="pos"?isNaN(b)?"-"+b:-b:b);
+var f={};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;c.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.transfer=function(d){return this.queue(function(){var c=a(this),e=a(d.options.to),h=e.offset();e={top:h.top,left:h.left,height:e.innerHeight(),width:e.innerWidth()};h=c.offset();var g=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(d.options.className).css({top:h.top,left:h.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(e,d.duration,d.options.easing,function(){g.remove();d.callback&&d.callback.apply(c[0],arguments);
+c.dequeue()})})}})(jQuery);
+(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var d=this,c=d.options;d.running=0;d.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");d.headers=
+d.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")});d.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+if(c.navigation){var e=d.element.find("a").filter(c.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");d.active=h.length?h:e.closest(".ui-accordion-content").prev()}}d.active=d._findActive(d.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");d.active.next().addClass("ui-accordion-content-active");d._createIcons();d.resize();d.element.attr("role","tablist");d.headers.attr("role","tab").bind("keydown.accordion",
+function(g){return d._keydown(g)}).next().attr("role","tabpanel");d.headers.not(d.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();d.active.length?d.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):d.headers.eq(0).attr("tabIndex",0);a.browser.safari||d.headers.find("a").attr("tabIndex",-1);c.event&&d.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(g){d._clickHandler.call(d,g,this);g.preventDefault()})},_createIcons:function(){var d=
+this.options;if(d.icons){a("<span></span>").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var d=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
+this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(d.autoHeight||d.fillHeight)c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(d,c){a.Widget.prototype._setOption.apply(this,arguments);d=="active"&&this.activate(c);if(d=="icons"){this._destroyIcons();
+c&&this._createIcons()}if(d=="disabled")this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(d){if(!(this.options.disabled||d.altKey||d.ctrlKey)){var c=a.ui.keyCode,e=this.headers.length,h=this.headers.index(d.target),g=false;switch(d.keyCode){case c.RIGHT:case c.DOWN:g=this.headers[(h+1)%e];break;case c.LEFT:case c.UP:g=this.headers[(h-1+e)%e];break;case c.SPACE:case c.ENTER:this._clickHandler({target:d.target},d.target);
+d.preventDefault()}if(g){a(d.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var d=this.options,c;if(d.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){c-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+
+a(this).height()))}).css("overflow","auto")}else if(d.autoHeight){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c)}return this},activate:function(d){this.options.active=d;d=this._findActive(d)[0];this._clickHandler({target:d},d);return this},_findActive:function(d){return d?typeof d==="number"?this.headers.filter(":eq("+d+")"):this.headers.not(this.headers.not(d)):d===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(d,c){var e=this.options;
+if(!e.disabled)if(d.target){d=a(d.currentTarget||c);c=d[0]===this.active[0];e.active=e.collapsible&&c?false:this.headers.index(d);if(!(this.running||!e.collapsible&&c)){var h=this.active;f=d.next();i=this.active.next();b={options:e,newHeader:c&&e.collapsible?a([]):d,oldHeader:this.active,newContent:c&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(d[0]);this.active=c?a([]):d;this._toggle(f,i,b,c,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);
+if(!c){d.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);d.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(),
+b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(d,c,e,h,g){var i=this,b=i.options;i.toShow=d;i.toHide=c;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=c.size()===0?d.size():c.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:c,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:d,toHide:c,complete:f,down:g,autoHeight:b.autoHeight||
+b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)d.toggle();else{c.hide();d.show()}f(true)}c.prev().attr({"aria-expanded":"false",
+"aria-selected":"false",tabIndex:-1}).blur();d.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(d){this.running=d?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.16",
+animations:{slide:function(d,c){d=a.extend({easing:"swing",duration:300},d,c);if(d.toHide.size())if(d.toShow.size()){var e=d.toShow.css("overflow"),h=0,g={},i={},b;c=d.toShow;b=c[0].style.width;c.width(parseInt(c.parent().width(),10)-parseInt(c.css("paddingLeft"),10)-parseInt(c.css("paddingRight"),10)-(parseInt(c.css("borderLeftWidth"),10)||0)-(parseInt(c.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(d.toShow[0],j)).match(/^([\d+-.]+)(.*)$/);
+g[j]={value:f[1],unit:f[2]||"px"}});d.toShow.css({height:0,overflow:"hidden"}).show();d.toHide.filter(":hidden").each(d.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);d.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:d.duration,easing:d.easing,complete:function(){d.autoHeight||d.toShow.css("height","");d.toShow.css({width:b,overflow:e});d.complete()}})}else d.toHide.animate({height:"hide",
+paddingTop:"hide",paddingBottom:"hide"},d);else d.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},d)},bounceslide:function(d){this.slide(d,{easing:d.down?"easeOutBounce":"swing",duration:d.down?1E3:200})}}})})(jQuery);
+(function(a){var d=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var c=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(c.options.disabled||c.element.propAttr("readOnly"))){h=
+false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:c._move("previousPage",g);break;case i.PAGE_DOWN:c._move("nextPage",g);break;case i.UP:c._move("previous",g);g.preventDefault();break;case i.DOWN:c._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(c.menu.active){h=true;g.preventDefault()}case i.TAB:if(!c.menu.active)return;c.menu.select(g);break;case i.ESCAPE:c.element.val(c.term);c.close(g);break;default:clearTimeout(c.searching);c.searching=setTimeout(function(){if(c.term!=
+c.element.val()){c.selectedItem=null;c.search(null,g)}},c.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!c.options.disabled){c.selectedItem=null;c.previous=c.element.val()}}).bind("blur.autocomplete",function(g){if(!c.options.disabled){clearTimeout(c.searching);c.closing=setTimeout(function(){c.close(g);c._change(g)},150)}});this._initSource();this.response=function(){return c._response.apply(c,arguments)};
+this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=c.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==c.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&c.close()})},1);setTimeout(function(){clearTimeout(c.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==c._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&&
+c.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=c.previous;if(c.element[0]!==e.activeElement){c.element.focus();c.previous=f;setTimeout(function(){c.previous=f;c.selectedItem=b},1)}false!==c._trigger("select",g,{item:b})&&c.element.val(b.value);c.term=c.element.val();c.close(g);c.selectedItem=b},blur:function(){c.menu.element.is(":visible")&&c.element.val()!==c.term&&c.element.val(c.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(c,e){a.Widget.prototype._setOption.apply(this,arguments);c==="source"&&this._initSource();if(c==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);c==="disabled"&&
+e&&this.xhr&&this.xhr.abort()},_initSource:function(){var c=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){c.xhr&&c.xhr.abort();c.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++d,success:function(b){this.autocompleteRequest===d&&i(b)},error:function(){this.autocompleteRequest===d&&i([])}})}}else this.source=
+this.options.source},search:function(c,e){c=c!=null?c:this.element.val();this.term=this.element.val();if(c.length<this.options.minLength)return this.close(e);clearTimeout(this.closing);if(this._trigger("search",e)!==false)return this._search(c)},_search:function(c){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:c},this.response)},_response:function(c){if(!this.options.disabled&&c&&c.length){c=this._normalize(c);this._suggest(c);this._trigger("open")}else this.close();
+this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(c){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",c)}},_change:function(c){this.previous!==this.element.val()&&this._trigger("change",c,{item:this.selectedItem})},_normalize:function(c){if(c.length&&c[0].label&&c[0].value)return c;return a.map(c,function(e){if(typeof e==="string")return{label:e,value:e};return a.extend({label:e.label||
+e.value,value:e.value||e.label},e)})},_suggest:function(c){var e=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(e,c);this.menu.deactivate();this.menu.refresh();e.show();this._resizeMenu();e.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var c=this.menu.element;c.outerWidth(Math.max(c.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(c,e){var h=this;
+a.each(e,function(g,i){h._renderItem(c,i)})},_renderItem:function(c,e){return a("<li></li>").data("item.autocomplete",e).append(a("<a></a>").text(e.label)).appendTo(c)},_move:function(c,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(c)||this.menu.last()&&/^next/.test(c)){this.element.val(this.term);this.menu.deactivate()}else this.menu[c](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(c){return c.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+"\\$&")},filter:function(c,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(c,function(g){return h.test(g.label||g.value||g)})}})})(jQuery);
+(function(a){a.widget("ui.menu",{_create:function(){var d=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(a(c.target).closest(".ui-menu-item a").length){c.preventDefault();d.select(c)}});this.refresh()},refresh:function(){var d=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(c){d.activate(c,a(this).parent())}).mouseleave(function(){d.deactivate()})},activate:function(d,c){this.deactivate();if(this.hasScroll()){var e=c.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",d,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+this._trigger("blur");this.active=null}},next:function(d){this.move("next",".ui-menu-item:first",d)},previous:function(d){this.move("prev",".ui-menu-item:last",d)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(d,c,e){if(this.active){d=this.active[d+"All"](".ui-menu-item").eq(0);d.length?this.activate(e,d):this.activate(e,this.element.children(c))}else this.activate(e,
+this.element.children(c))},nextPage:function(d){if(this.hasScroll())if(!this.active||this.last())this.activate(d,this.element.children(".ui-menu-item:first"));else{var c=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-c-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(d,h)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active||
+this.last()?":first":":last"))},previousPage:function(d){if(this.hasScroll())if(!this.active||this.first())this.activate(d,this.element.children(".ui-menu-item:last"));else{var c=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-c+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(d,result)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active||
+this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(d){this._trigger("selected",d,{item:this.active})}})})(jQuery);
+(function(a){var d,c,e,h,g=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var f=b.name,j=b.form,l=a([]);if(f)l=j?a(j).find("[name='"+f+"']"):a("[name='"+f+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",g);if(typeof this.options.disabled!==
+"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,f=this.options,j=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!j?" ui-state-active":"");if(f.label===null)f.label=this.buttonElement.html();if(this.element.is(":disabled"))f.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!f.disabled){a(this).addClass("ui-state-hover");
+this===d&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){f.disabled||a(this).removeClass(l)}).bind("click.button",function(o){if(f.disabled){o.preventDefault();o.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(j){this.element.bind("change.button",function(){h||b.refresh()});this.buttonElement.bind("mousedown.button",function(o){if(!f.disabled){h=
+false;c=o.pageX;e=o.pageY}}).bind("mouseup.button",function(o){if(!f.disabled)if(c!==o.pageX||e!==o.pageY)h=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");
+var o=b.element[0];i(o).not(o).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(f.disabled)return false;a(this).addClass("ui-state-active");d=this;a(document).one("mouseup",function(){d=null})}).bind("mouseup.button",function(){if(f.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(o){if(f.disabled)return false;if(o.keyCode==a.ui.keyCode.SPACE||
+o.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(o){o.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",f.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
+"radio"){var b=this.element.parents().filter(":last"),f="label[for='"+this.element.attr("id")+"']";this.buttonElement=b.find(f);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(f);if(!this.buttonElement.length)this.buttonElement=b.find(f)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},
+widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
+a.Widget.prototype.destroy.call(this)},_setOption:function(b,f){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")f?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+"true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+f=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+j.primary+"'></span>");j.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+j.secondary+"'></span>");if(!this.options.text){o.push(l?"ui-button-icons-only":
+"ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")===
+"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
+a.Widget.prototype.destroy.call(this)}})})(jQuery);
+(function(a,d){function c(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function e(b){return b.bind("mouseout",
+function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+f.addClass("ui-state-hover");f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==d)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.16"}});var g=(new Date).getTime(),i;a.extend(c.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
+setDefaults:function(b){h(this._defaults,b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,
+"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f);f.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a('<span class="'+this._appendClass+'">'+j+"</span>");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j==
+"focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j=this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('<button type="button"></button>').addClass(this._triggerClass).html(o==""?j:a("<img/>").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():
+a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;m<o.length;m++)if(o[m].length>n){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,
+f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker",function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.settings.disabled&&this._disableDatepicker(b);f.dpDiv.css("display","block")}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=
+1;this._dialogInput=a('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=
+a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=
+b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,
+"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==
+b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f<this._disabledInputs.length;f++)if(this._disabledInputs[f]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(f){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,f,j){var l=this._getInst(b);if(arguments.length==2&&typeof f=="string")return f=="defaults"?a.extend({},a.datepicker._defaults):l?f=="all"?
+a.extend({},l.settings):this._get(l,f):null;var o=f||{};if(typeof f=="string"){o={};o[f]=j}if(l){this._curInst==l&&this._hideDatepicker();var n=this._getDateDatepicker(b,true),k=this._getMinMaxDate(l,"min"),m=this._getMinMaxDate(l,"max");h(l.settings,o);if(k!==null&&o.dateFormat!==d&&o.minDate===d)l.settings.minDate=this._formatDate(l,k);if(m!==null&&o.dateFormat!==d&&o.maxDate===d)l.settings.maxDate=this._formatDate(l,m);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,n);this._updateAlternate(l);
+this._updateDatepicker(l)}},_changeDatepicker:function(b,f,j){this._optionDatepicker(b,f,j)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,f){if(b=this._getInst(b)){this._setDate(b,f);this._updateDatepicker(b);this._updateAlternate(b)}},_getDateDatepicker:function(b,f){(b=this._getInst(b))&&!b.inline&&this._setDateFromField(b,f);return b?this._getDate(b):null},_doKeyDown:function(b){var f=a.datepicker._getInst(b.target),j=true,l=f.dpDiv.is(".ui-datepicker-rtl");
+f._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();j=false;break;case 13:j=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv);j[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,j[0]);if(b=a.datepicker._get(f,"onSelect")){j=a.datepicker._formatDate(f);b.apply(f.input?f.input[0]:null,[j,f])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,
+b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);j=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);j=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?+1:-1,"D");j=
+b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");j=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");j=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,
+"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");j=b.ctrlKey||b.metaKey;break;default:j=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else j=false;if(j){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var f=a.datepicker._getInst(b.target);if(a.datepicker._get(f,"constrainInput")){f=a.datepicker._possibleChars(a.datepicker._get(f,"dateFormat"));var j=String.fromCharCode(b.charCode==d?b.keyCode:b.charCode);
+return b.ctrlKey||b.metaKey||j<" "||!f||f.indexOf(j)>-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",
+b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j=a.datepicker._get(f,"beforeShow");j=j?j.apply(b,[b,f]):{};if(j!==false){h(f.settings,j);f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value=
+"";if(!a.datepicker._pos){a.datepicker._pos=a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);
+j=a.datepicker._checkOffset(f,j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover");if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=
+true;a.effects&&a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});
+b.dpDiv.find("."+this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&
+!b.input.is(":disabled")&&b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]||j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),
+n=b.input?b.input.outerWidth():0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=
+this._get(this._getInst(b),"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f=this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);
+this._curInst=null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):
+0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth=f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l["selected"+(j=="M"?
+"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);
+this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b);b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];typeof b.input[0]!="object"&&b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");
+if(f){var j=this._get(b,"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b));a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?
+f.toString():f+"";if(f=="")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1<b.length&&b.charAt(H+1)==z)&&H++;return z},v=function(z){var I=
+u(z);z=new RegExp("^\\d{1,"+(z=="@"?14:z=="!"?20:z=="y"&&I?4:z=="o"?3:2)+"}");z=f.substring(y).match(z);if(!z)throw"Missing number at position "+y;y+=z[0].length;return parseInt(z[0],10)},w=function(z,I,N){z=a.map(u(z)?N:I,function(D,E){return[[E,D]]}).sort(function(D,E){return-(D[1].length-E[1].length)});var J=-1;a.each(z,function(D,E){D=E[1];if(f.substr(y,D.length).toLowerCase()==D.toLowerCase()){J=E[0];y+=D.length;return false}});if(J!=-1)return J+1;else throw"Unknown name at position "+y;},x=
+function(){if(f.charAt(y)!=b.charAt(H))throw"Unexpected literal at position "+y;y++},y=0,H=0;H<b.length;H++)if(r)if(b.charAt(H)=="'"&&!u("'"))r=false;else x();else switch(b.charAt(H)){case "d":q=v("d");break;case "D":w("D",o,n);break;case "o":s=v("o");break;case "m":p=v("m");break;case "M":p=w("M",k,m);break;case "y":j=v("y");break;case "@":var C=new Date(v("@"));j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "!":C=new Date((v("!")-this._ticksTo1970)/1E4);j=C.getFullYear();p=C.getMonth()+
+1;q=C.getDate();break;case "'":if(u("'"))x();else r=true;break;default:x()}if(y<f.length)throw"Extra/unparsed characters found in date: "+f.substring(y);if(j==-1)j=(new Date).getFullYear();else if(j<100)j+=(new Date).getFullYear()-(new Date).getFullYear()%100+(j<=l?0:-100);if(s>-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",
+COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:
+null)||this._defaults.monthNames;var k=function(u){(u=r+1<b.length&&b.charAt(r+1)==u)&&r++;return u},m=function(u,v,w){v=""+v;if(k(u))for(;v.length<w;)v="0"+v;return v},p=function(u,v,w,x){return k(u)?x[v]:w[v]},q="",s=false;if(f)for(var r=0;r<b.length;r++)if(s)if(b.charAt(r)=="'"&&!k("'"))s=false;else q+=b.charAt(r);else switch(b.charAt(r)){case "d":q+=m("d",f.getDate(),2);break;case "D":q+=p("D",f.getDay(),l,o);break;case "o":q+=m("o",Math.round(((new Date(f.getFullYear(),f.getMonth(),f.getDate())).getTime()-
+(new Date(f.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":q+=m("m",f.getMonth()+1,2);break;case "M":q+=p("M",f.getMonth(),n,j);break;case "y":q+=k("y")?f.getFullYear():(f.getYear()%100<10?"0":"")+f.getYear()%100;break;case "@":q+=f.getTime();break;case "!":q+=f.getTime()*1E4+this._ticksTo1970;break;case "'":if(k("'"))q+="'";else s=true;break;default:q+=b.charAt(r)}return q},_possibleChars:function(b){for(var f="",j=false,l=function(n){(n=o+1<b.length&&b.charAt(o+1)==n)&&o++;return n},o=
+0;o<b.length;o++)if(j)if(b.charAt(o)=="'"&&!l("'"))j=false;else f+=b.charAt(o);else switch(b.charAt(o)){case "d":case "m":case "y":case "@":f+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))f+="'";else j=true;break;default:f+=b.charAt(o)}return f},_get:function(b,f){return b.settings[f]!==d?b.settings[f]:this._defaults[f]},_setDateFromField:function(b,f){if(b.input.val()!=b.lastVal){var j=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,o,n;o=n=this._getDefaultDate(b);
+var k=this._getFormatConfig(b);try{o=this.parseDate(j,l,k)||n}catch(m){this.log(m);l=f?"":l}b.selectedDay=o.getDate();b.drawMonth=b.selectedMonth=o.getMonth();b.drawYear=b.selectedYear=o.getFullYear();b.currentDay=l?o.getDate():0;b.currentMonth=l?o.getMonth():0;b.currentYear=l?o.getFullYear():0;this._adjustInstDate(b)}},_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,f,j){var l=function(n){var k=new Date;
+k.setDate(k.getDate()+n);return k},o=function(n){try{return a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),n,a.datepicker._getFormatConfig(b))}catch(k){}var m=(n.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,p=m.getFullYear(),q=m.getMonth();m=m.getDate();for(var s=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=s.exec(n);r;){switch(r[2]||"d"){case "d":case "D":m+=parseInt(r[1],10);break;case "w":case "W":m+=parseInt(r[1],10)*7;break;case "m":case "M":q+=parseInt(r[1],10);m=
+Math.min(m,a.datepicker._getDaysInMonth(p,q));break;case "y":case "Y":p+=parseInt(r[1],10);m=Math.min(m,a.datepicker._getDaysInMonth(p,q));break}r=s.exec(n)}return new Date(p,q,m)};if(f=(f=f==null||f===""?j:typeof f=="string"?o(f):typeof f=="number"?isNaN(f)?j:l(f):new Date(f.getTime()))&&f.toString()=="Invalid Date"?j:f){f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0)}return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>
+12?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay=b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b))},_getDate:function(b){return!b.currentYear||b.input&&
+b.input.val()==""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(),f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?
+new Date(9999,9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&w<r?r:w;this._daylightSavingAdjust(new Date(v,m,1))>w;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));
+w=this._canAdjustMonth(b,-1,v,m)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>":o?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,
+m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>":o?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&
+b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+g+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(j?n:"")+(this._isInRange(b,x)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+g+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(j?"":n)+"</div>":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H=this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E<k[0];E++){var P=
+"";this.maxRows=4;for(var L=0;L<k[1];L++){var Q=this._daylightSavingAdjust(new Date(v,m,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(k[1]>1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right":"left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/all|left/.test(B)&&
+E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="<th"+((B+n+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[A]+'">'+y[A]+"</span></th>"}F+=G+"</tr></thead><tbody>";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,
+G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R<G;R++){F+="<tr>";var S=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(A)+"</td>";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&A<r||u&&A>u;S+='<td class="'+((B+n+6)%7>=5?" ui-datepicker-week-end":"")+(K?" ui-datepicker-other-month":"")+(A.getTime()==
+Q.getTime()&&m==b.selectedMonth&&b._keyEvent||J.getTime()==A.getTime()&&J.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(K&&!I?"":" "+M[1]+(A.getTime()==s.getTime()?" "+this._currentClass:"")+(A.getTime()==f.getTime()?" ui-datepicker-today":""))+'"'+((!K||I)&&M[2]?' title="'+M[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+g+".datepicker._selectDay('#"+b.id+"',"+A.getMonth()+","+A.getFullYear()+', this);return false;"')+">"+(K&&!I?"&#xa0;":O?'<span class="ui-state-default">'+
+A.getDate()+"</span>":'<a class="ui-state-default'+(A.getTime()==f.getTime()?" ui-state-highlight":"")+(A.getTime()==s.getTime()?" ui-state-active":"")+(K?" ui-priority-secondary":"")+'" href="#">'+A.getDate()+"</a>")+"</td>";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+"</tr>"}m++;if(m>11){m=0;v++}F+="</tbody></table>"+(q?"</div>"+(k[0]>0&&L==k[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='<div class="ui-datepicker-title">',u="";if(n||!p)u+='<span class="ui-datepicker-month">'+k[f]+"</span>";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var w=0;w<12;w++)if((!k||w>=l.getMonth())&&
+(!v||w<=o.getMonth()))u+='<option value="'+w+'"'+(w==f?' selected="selected"':"")+">"+m[w]+"</option>";u+="</select>"}s||(r+=u+(n||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+='<span class="ui-datepicker-year">'+j+"</span>";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,
+l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()):m;for(b.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";f<=m;f++)b.yearshtml+='<option value="'+f+'"'+(f==j?' selected="selected"':"")+">"+f+"</option>";b.yearshtml+="</select>";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?"&#xa0;":"")+u;r+="</div>";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j=="Y"?f:0),o=b.drawMonth+
+(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&f<j?j:f;return f=b&&f>b?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear");if(f)f.apply(b.input?
+b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b);j=this._daylightSavingAdjust(new Date(j,
+l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,
+"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;
+if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));return this.each(function(){typeof b==
+"string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new c;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.16";window["DP_jQuery_"+g]=a})(jQuery);
+(function(a,d){var c={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
+position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||"&#160;",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),
+o=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("<span></span>").addClass("ui-dialog-title").attr("id",
+f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
+g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!==
+i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.scrollTop(),scrollLeft:b.element.scrollLeft()};a.ui.dialog.maxZ+=1;
+b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target===
+l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g,
+function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('<button type="button"></button>').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
+handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition,
+originalSize:l.originalSize,position:l.position,size:l.size}}g=g===d?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize",
+l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "):
+[g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l);
+if(j in c)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"):
+f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||"&#160;"));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g=
+this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height-
+i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "),
+create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(b){if(g.options.closeOnEscape&&!b.isDefaultPrevented()&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE){g.close(b);b.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var i=(this.oldInstances.pop()||
+a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&
+a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g<i?a(window).height()+"px":g+"px"}else return a(document).height()+"px"},width:function(){var g,i;if(a.browser.msie){g=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);i=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return g<i?a(window).width()+"px":g+"px"}else return a(document).width()+
+"px"},resize:function(){var g=a([]);a.each(a.ui.dialog.overlay.instances,function(){g=g.add(this)});g.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+(function(a){a.ui=a.ui||{};var d=/left|center|right/,c=/top|center|bottom/,e=a.fn.position,h=a.fn.offset;a.fn.position=function(g){if(!g||!g.of)return e.apply(this,arguments);g=a.extend({},g);var i=a(g.of),b=i[0],f=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],l,o,n;if(b.nodeType===9){l=i.width();o=i.height();n={top:0,left:0}}else if(b.setTimeout){l=i.width();o=i.height();n={top:i.scrollTop(),left:i.scrollLeft()}}else if(b.preventDefault){g.at="left top";l=o=0;n={top:g.of.pageY,
+left:g.of.pageX}}else{l=i.outerWidth();o=i.outerHeight();n=i.offset()}a.each(["my","at"],function(){var k=(g[this]||"").split(" ");if(k.length===1)k=d.test(k[0])?k.concat(["center"]):c.test(k[0])?["center"].concat(k):["center","center"];k[0]=d.test(k[0])?k[0]:"center";k[1]=c.test(k[1])?k[1]:"center";g[this]=k});if(f.length===1)f[1]=f[0];j[0]=parseInt(j[0],10)||0;if(j.length===1)j[1]=j[0];j[1]=parseInt(j[1],10)||0;if(g.at[0]==="right")n.left+=l;else if(g.at[0]==="center")n.left+=l/2;if(g.at[1]==="bottom")n.top+=
+o;else if(g.at[1]==="center")n.top+=o/2;n.left+=j[0];n.top+=j[1];return this.each(function(){var k=a(this),m=k.outerWidth(),p=k.outerHeight(),q=parseInt(a.curCSS(this,"marginLeft",true))||0,s=parseInt(a.curCSS(this,"marginTop",true))||0,r=m+q+(parseInt(a.curCSS(this,"marginRight",true))||0),u=p+s+(parseInt(a.curCSS(this,"marginBottom",true))||0),v=a.extend({},n),w;if(g.my[0]==="right")v.left-=m;else if(g.my[0]==="center")v.left-=m/2;if(g.my[1]==="bottom")v.top-=p;else if(g.my[1]==="center")v.top-=
+p/2;v.left=Math.round(v.left);v.top=Math.round(v.top);w={left:v.left-q,top:v.top-s};a.each(["left","top"],function(x,y){a.ui.position[f[x]]&&a.ui.position[f[x]][y](v,{targetWidth:l,targetHeight:o,elemWidth:m,elemHeight:p,collisionPosition:w,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});a.fn.bgiframe&&k.bgiframe();k.offset(a.extend(v,{using:g.using}))})};a.ui.position={fit:{left:function(g,i){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();g.left=
+b>0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+=
+i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g),
+f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery);
+(function(a,d){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(c){if(c===d)return this._value();this._setOption("value",c);return this},_setOption:function(c,e){if(c==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var c=this.options.value;if(typeof c!=="number")c=0;return Math.min(this.options.max,Math.max(this.min,c))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var c=this.value(),e=this._percentage();if(this.oldValue!==c){this.oldValue=c;this._trigger("change")}this.valueDiv.toggle(c>this.min).toggleClass("ui-corner-right",c===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",c)}});a.extend(a.ui.progressbar,{version:"1.8.16"})})(jQuery);
+(function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var d=this,c=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=c.values&&c.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(c.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(c.range){if(c.range===true){if(!c.values)c.values=[this._valueMin(),this._valueMin()];if(c.values.length&&c.values.length!==2)c.values=[c.values[0],c.values[0]]}this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(c.range==="min"||c.range==="max"?" ui-slider-range-"+c.range:""))}for(var i=e.length;i<h;i+=1)g.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=e.add(a(g.join("")).appendTo(d.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){c.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(c.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle",
+b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!d.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!d._keySliding){d._keySliding=true;a(this).addClass("ui-state-active");l=d._start(b,j);if(l===false)return}break}n=d.options.step;l=d.options.values&&d.options.values.length?
+(o=d.values(j)):(o=d.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=d._valueMin();break;case a.ui.keyCode.END:o=d._valueMax();break;case a.ui.keyCode.PAGE_UP:o=d._trimAlignValue(l+(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=d._trimAlignValue(l-(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===d._valueMax())return;o=d._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===d._valueMin())return;o=d._trimAlignValue(l-
+n);break}d._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(d._keySliding){d._keySliding=false;d._stop(b,f);d._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(d){var c=this.options,e,h,g,i,b;if(c.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:d.pageX,y:d.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(c.range===true&&this.values(1)===c.min){b+=1;g=a(this.handles[b])}if(this._start(d,b)===false)return false;
+this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();c=g.offset();this._clickOffset=!a(d.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:d.pageX-c.left-g.width()/2,top:d.pageY-c.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(d,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(d){var c=
+this._normValueFromMouse({x:d.pageX,y:d.pageY});this._slide(d,this._handleIndex,c);return false},_mouseStop:function(d){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(d,this._handleIndex);this._change(d,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c;if(this.orientation==="horizontal"){c=
+this.elementSize.width;d=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;d=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}c=d/c;if(c>1)c=1;if(c<0)c=0;if(this.orientation==="vertical")c=1-c;d=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+c*d)},_start:function(d,c){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c);
+e.values=this.values()}return this._trigger("start",d,e)},_slide:function(d,c,e){var h;if(this.options.values&&this.options.values.length){h=this.values(c?0:1);if(this.options.values.length===2&&this.options.range===true&&(c===0&&e>h||c===1&&e<h))e=h;if(e!==this.values(c)){h=this.values();h[c]=e;d=this._trigger("slide",d,{handle:this.handles[c],value:e,values:h});this.values(c?0:1);d!==false&&this.values(c,e,true)}}else if(e!==this.value()){d=this._trigger("slide",d,{handle:this.handles[c],value:e});
+d!==false&&this.value(e)}},_stop:function(d,c){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c);e.values=this.values()}this._trigger("stop",d,e)},_change:function(d,c){if(!this._keySliding&&!this._mouseSliding){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c);e.values=this.values()}this._trigger("change",d,e)}},value:function(d){if(arguments.length){this.options.value=
+this._trimAlignValue(d);this._refreshValue();this._change(null,0)}else return this._value()},values:function(d,c){var e,h,g;if(arguments.length>1){this.options.values[d]=this._trimAlignValue(c);this._refreshValue();this._change(null,d)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g<e.length;g+=1){e[g]=this._trimAlignValue(h[g]);this._change(null,g)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(d):
+this.value();else return this._values()},_setOption:function(d,c){var e,h=0;if(a.isArray(this.options.values))h=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(d){case "disabled":if(c){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(e=0;e<h;e+=1)this._change(null,e);this._animateOff=false;break}},_value:function(){var d=this.options.value;return d=this._trimAlignValue(d)},_values:function(d){var c,e;if(arguments.length){c=this.options.values[d];
+return c=this._trimAlignValue(c)}else{c=this.options.values.slice();for(e=0;e<c.length;e+=1)c[e]=this._trimAlignValue(c[e]);return c}},_trimAlignValue:function(d){if(d<=this._valueMin())return this._valueMin();if(d>=this._valueMax())return this._valueMax();var c=this.options.step>0?this.options.step:1,e=(d-this._valueMin())%c;d=d-e;if(Math.abs(e)*2>=c)d+=e>0?c:-c;return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var d=
+this.options.range,c=this.options,e=this,h=!this._animateOff?c.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,c.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({width:g-
+b+"%"},{queue:false,duration:c.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:c.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,c.animate);if(d==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[h?"animate":"css"]({width:g+"%"},
+c.animate);if(d==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:c.animate});if(d==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},c.animate);if(d==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:c.animate})}}});a.extend(a.ui.slider,{version:"1.8.16"})})(jQuery);
+(function(a,d){function c(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&&
+b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+c()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i=
+a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]||
+(x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===d){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+
+r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal",
+function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")};
+this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected=
+-1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b=
+a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i,
+b,f){if(f===d)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]);
+o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove();
+if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1<this.anchors.length?1:-1));b.disabled=a.map(a.grep(b.disabled,function(l){return l!=i}),function(l){return l>=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null,
+this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this},
+load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j,
+"cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.16"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n<f.anchors.length?n:0)},i);o&&o.stopPropagation()});b=f._unrotate||(f._unrotate=!b?function(o){o.clientX&&
+f.rotate(null)}:function(){t=j.selected;l()});if(i){this.element.bind("tabsshow",l);this.anchors.bind(j.event+".tabs",b);l()}else{clearTimeout(f.rotation);this.element.unbind("tabsshow",l);this.anchors.unbind(j.event+".tabs",b);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.sortable.min.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.sortable.min.js
new file mode 100644
index 0000000..d0ad528
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.sortable.min.js
@@ -0,0 +1,60 @@
+/*
+ * jQuery UI Sortable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
+"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
+!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
+return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
+b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
+b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
+a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
+e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
+c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
+toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
+var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
+_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
+if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
+this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
+this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
+d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
+0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
+a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
+f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
+this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
+""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
+this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
+{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
+10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
+this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
+this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
+f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
+this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
+a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.widget.min.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.widget.min.js
new file mode 100644
index 0000000..64893bb
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/jquery.ui.widget.min.js
@@ -0,0 +1,15 @@
+/*!
+ * jQuery UI Widget 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
+function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
+d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
+b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/sort.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/sort.js
new file mode 100644
index 0000000..1598773
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/jqueryUI/sort.js
@@ -0,0 +1,150 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+jQuery(document).ready(function() {
+ function Tools(event, ui) {
+ //outer loop for rows
+ var tools = "[\n";
+ rows = jQuery("#groupLayout div.sortableListDiv").length;
+ jQuery.each(jQuery("#groupLayout div.sortableListDiv"), function(rowIndex, rowValue) {
+ if (jQuery("li",rowValue).length > 0) {
+ tools = tools + " [";
+ }
+ //inner loop for toolbar buttons
+ jQuery.each(jQuery("li",rowValue), function(buttonIndex, buttonValue) {
+ if (jQuery(buttonValue).hasClass('spacer')) {
+ tools = tools + ",'-'";
+ }
+ else if (jQuery(buttonValue).hasClass('group')) {
+ tools = tools + "],\n [";
+ }
+ else {
+ tools = tools + ",'" + jQuery(buttonValue).attr('id') + "'" ;
+ }
+ });
+
+ if (jQuery("li" ,rowValue).length > 0) {
+ if (rowIndex < (rows -1)) {
+ tools = tools + "],\n '/',\n";
+ }
+ else {
+ tools = tools + "]\n";
+ }
+ }
+ });
+ tools = tools + "]";
+ tools = tools.replace(/\[,/g, '[');
+ tools = tools.replace(/\[],/g, '');
+ jQuery("#edit-toolbar").attr('value', tools);
+ }
+
+ Drupal.ckeditorToolbaInit = function() {
+ Drupal.ckeditorToolbarUsedRender();
+ Drupal.ckeditorToolbarAllRender();
+
+ var firefox = navigator.userAgent.toLowerCase().match(/firefox\/[0-9]\./);
+ jQuery(".sortableList").sortable({
+ connectWith: ".sortableList",
+ items: "div.sortableListDiv",
+ sort: function(event, ui) {
+ if (firefox){
+ ui.helper.css({'top' : ui.position.top - 35 + 'px'});
+ }
+ },
+ stop: function(event, ui) {
+ Tools(event, ui);
+ }
+ }).disableSelection();
+
+ jQuery(".sortableRow").sortable({
+ connectWith: ".sortableRow",
+ items: "li.sortableItem",
+ sort: function(event, ui) {
+ if (firefox){
+ ui.helper.css({'top' : ui.position.top - 35 + 'px'});
+ }
+ },
+ stop: function(event, ui) {
+ Tools(event, ui);
+ }
+ }).disableSelection();
+
+ jQuery("li.sortableItem").mouseover(function(){
+ jQuery(".sortableList").sortable("disable");
+ });
+ jQuery("li.sortableItem").mouseout(function(){
+ jQuery(".sortableList").sortable("enable");
+ });
+ }
+
+ Drupal.ckeditorToolbarReload = function() {
+ jQuery(".sortableList").sortable('destroy');
+ jQuery(".sortableRow").sortable('destroy');
+ jQuery("li.sortableItem").unbind();
+ Drupal.ckeditorToolbaInit();
+ }
+
+ Drupal.ckeditorToolbarUsedRender = function() {
+ var toolbar = jQuery('#edit-toolbar').val();
+ toolbar = eval(toolbar);
+ var html = '<div class="sortableListDiv"><span class="sortableListSpan"><ul class="sortableRow">';
+ var group = false;
+
+ for (var row in toolbar) {
+ if (typeof toolbar[row] == 'string' && toolbar[row] == '/') {
+ group = false;
+ html += '</ul></span></div><div class="sortableListDiv"><span class="sortableListSpan"><ul class="sortableRow">';
+ }
+ else {
+ if (group == false){
+ group = true;
+ }
+ else {
+ html += '<li class="sortableItem group"><img src="' + Drupal.settings.cke_toolbar_buttons_all['__group']['icon'] + '" alt="group" title="group" /></li>';
+ }
+ for (var button in toolbar[row]) {
+ if (toolbar[row][button] == '-') {
+ html += '<li class="sortableItem spacer"><img src="' + Drupal.settings.cke_toolbar_buttons_all['__spacer']['icon'] + '" alt="spacer" title="spacer" /></li>';
+ }
+ else if (Drupal.settings.cke_toolbar_buttons_all[toolbar[row][button]]) {
+ html += '<li class="sortableItem" id="' + Drupal.settings.cke_toolbar_buttons_all[toolbar[row][button]]['name'] + '"><img src="' + Drupal.settings.cke_toolbar_buttons_all[toolbar[row][button]]['icon'] + '" alt="' + Drupal.settings.cke_toolbar_buttons_all[toolbar[row][button]]['title'] + '" title="' + Drupal.settings.cke_toolbar_buttons_all[toolbar[row][button]]['title'] + '" /></li>';
+ }
+ }
+ }
+ }
+ html += '</ul></span></div>';
+ jQuery('#groupLayout').empty().append(html);
+ }
+
+ Drupal.ckeditorToolbarAllRender = function() {
+ var toolbarUsed = jQuery('#edit-toolbar').val();
+ var toolbarAll = Drupal.settings.cke_toolbar_buttons_all;
+
+ var htmlArray = new Array();
+ var html = '';
+
+ for (var i in toolbarAll) {
+ if (new RegExp("\'[\s]*" + toolbarAll[i].name + "[\s]*\'").test(toolbarUsed) == false) {
+ if (toolbarAll[i].name == false) continue;
+ if (typeof htmlArray[toolbarAll[i].row] == 'undefined') htmlArray[toolbarAll[i].row] = '';
+ htmlArray[toolbarAll[i].row] += '<li class="sortableItem" id="' + toolbarAll[i].name + '"><img src="' + toolbarAll[i].icon + '" alt="' + toolbarAll[i].title + '" title="' + toolbarAll[i].title + '" /></li>';
+ }
+ }
+
+ if (typeof htmlArray[5] == 'undefined') htmlArray[5] = '';
+ htmlArray[5] += '<li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li><li class="sortableItem group"><img src="' + toolbarAll['__group'].icon + '" alt="' + toolbarAll['__group'].title + '" title="' + toolbarAll['__group'].title + '" /></li>';
+
+ if (typeof htmlArray[6] == 'undefined') htmlArray[6] = '';
+ htmlArray[6] += '<li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li><li class="sortableItem spacer"><img src="' + toolbarAll['__spacer'].icon + '" alt="' + toolbarAll['__spacer'].title + '" title="' + toolbarAll['__spacer'].title + '" /></li>';
+
+ if (typeof htmlArray[7] == 'undefined') htmlArray[7] = '';
+
+ for (var j in htmlArray){
+ html += '<div class="sortableListDiv"><span class="sortableListSpan"><ul class="sortableRow">' + htmlArray[j] + '</ul></span></div>';
+ }
+ jQuery('#allButtons').empty().append(html);
+ }
+
+ Drupal.ckeditorToolbaInit();
+}); \ No newline at end of file
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/dialogs/uicolor.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/dialogs/uicolor.js
new file mode 100644
index 0000000..86c1d3a
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/dialogs/uicolor.js
@@ -0,0 +1,179 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.dialog.add( 'uicolor', function( editor ) {
+ var dialog, picker, pickerContents,
+ // Actual UI color value.
+ uiColor = editor.getUiColor(),
+ pickerId = 'cke_uicolor_picker' + CKEDITOR.tools.getNextNumber();
+
+ function setNewPickerColor( color ) {
+ // Convert HEX representation to RGB, stripping # char.
+ if ( /^#/.test( color ) )
+ color = window.YAHOO.util.Color.hex2rgb( color.substr( 1 ) );
+ picker.setValue( color, true );
+ // Refresh picker UI.
+ picker.refresh( pickerId );
+ }
+
+ function setNewUiColor( color, force ) {
+ if ( force || dialog._.contents.tab1.livePeview.getValue() )
+ editor.setUiColor( color );
+ // Write new config string into textbox.
+ dialog._.contents.tab1.configBox.setValue( 'config.uiColor = "#' + picker.get( "hex" ) + '"' );
+ }
+
+ pickerContents = {
+ id: 'yuiColorPicker',
+ type: 'html',
+ html: "<div id='" + pickerId + "' class='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",
+ onLoad: function( event ) {
+ var url = CKEDITOR.getUrl( editor.plugins.uicolor.path + 'yui/' );
+
+ // Create new color picker widget.
+ picker = new window.YAHOO.widget.ColorPicker( pickerId, {
+ showhsvcontrols: true,
+ showhexcontrols: true,
+ images: {
+ PICKER_THUMB: url + "assets/picker_thumb.png",
+ HUE_THUMB: url + "assets/hue_thumb.png"
+ }
+ });
+
+ // Set actual UI color to the picker.
+ if ( uiColor )
+ setNewPickerColor( uiColor );
+
+ // Subscribe to the rgbChange event.
+ picker.on( "rgbChange", function() {
+ // Reset predefined box.
+ dialog._.contents.tab1.predefined.setValue( '' );
+ setNewUiColor( '#' + picker.get( 'hex' ) );
+ });
+
+ // Fix input class names.
+ var inputs = new CKEDITOR.dom.nodeList( picker.getElementsByTagName( 'input' ) );
+ for ( var i = 0; i < inputs.count(); i++ )
+ inputs.getItem( i ).addClass( 'cke_dialog_ui_input_text' );
+ }
+ };
+
+ var skipPreviewChange = true;
+
+ return {
+ title: editor.lang.uicolor.title,
+ minWidth: 360,
+ minHeight: 320,
+ onLoad: function() {
+ dialog = this;
+ this.setupContent();
+
+ // #3808
+ if ( CKEDITOR.env.ie7Compat )
+ dialog.parts.contents.setStyle( 'overflow', 'hidden' );
+ },
+ contents: [
+ {
+ id: 'tab1',
+ label: '',
+ title: '',
+ expand: true,
+ padding: 0,
+ elements: [
+ pickerContents,
+ {
+ id: 'tab1',
+ type: 'vbox',
+ children: [
+ {
+ id: 'livePeview',
+ type: 'checkbox',
+ label: editor.lang.uicolor.preview,
+ 'default': 1,
+ onLoad: function() {
+ skipPreviewChange = true;
+ },
+ onChange: function() {
+ if ( skipPreviewChange )
+ return;
+ var on = this.getValue(),
+ color = on ? '#' + picker.get( 'hex' ) : uiColor;
+ setNewUiColor( color, true );
+ }
+ },
+ {
+ type: 'hbox',
+ children: [
+ {
+ id: 'predefined',
+ type: 'select',
+ 'default': '',
+ label: editor.lang.uicolor.predefined,
+ items: [
+ [ '' ],
+ [ 'Light blue', '#9AB8F3' ],
+ [ 'Sand', '#D2B48C' ],
+ [ 'Metallic', '#949AAA' ],
+ [ 'Purple', '#C2A3C7' ],
+ [ 'Olive', '#A2C980' ],
+ [ 'Happy green', '#9BD446' ],
+ [ 'Jezebel Blue', '#14B8C4' ],
+ [ 'Burn', '#FF893A' ],
+ [ 'Easy red', '#FF6969' ],
+ [ 'Pisces 3', '#48B4F2' ],
+ [ 'Aquarius 5', '#487ED4' ],
+ [ 'Absinthe', '#A8CF76' ],
+ [ 'Scrambled Egg', '#C7A622' ],
+ [ 'Hello monday', '#8E8D80' ],
+ [ 'Lovely sunshine', '#F1E8B1' ],
+ [ 'Recycled air', '#B3C593' ],
+ [ 'Down', '#BCBCA4' ],
+ [ 'Mark Twain', '#CFE91D' ],
+ [ 'Specks of dust', '#D1B596' ],
+ [ 'Lollipop', '#F6CE23' ]
+ ],
+ onChange: function() {
+ var color = this.getValue();
+ if ( color ) {
+ setNewPickerColor( color );
+ setNewUiColor( color );
+ // Refresh predefined preview box.
+ CKEDITOR.document.getById( 'predefinedPreview' ).setStyle( 'background', color );
+ } else
+ CKEDITOR.document.getById( 'predefinedPreview' ).setStyle( 'background', '' );
+ },
+ onShow: function() {
+ var color = editor.getUiColor();
+ if ( color )
+ this.setValue( color );
+ }
+ },
+ {
+ id: 'predefinedPreview',
+ type: 'html',
+ html: '<div id="cke_uicolor_preview" style="border: 1px solid black; padding: 3px; width: 30px;">' +
+ '<div id="predefinedPreview" style="width: 30px; height: 30px;">&nbsp;</div>' +
+ '</div>'
+ }
+ ]
+ },
+ {
+ id: 'configBox',
+ type: 'text',
+ label: editor.lang.uicolor.config,
+ onShow: function() {
+ var color = editor.getUiColor();
+ if ( color )
+ this.setValue( 'config.uiColor = "' + color + '"' );
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ buttons: [ CKEDITOR.dialog.okButton ]
+ };
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/icons/uicolor.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/icons/uicolor.png
new file mode 100644
index 0000000..8ec6b11
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/icons/uicolor.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/_translationstatus.txt b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/_translationstatus.txt
new file mode 100644
index 0000000..e9f06e2
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/_translationstatus.txt
@@ -0,0 +1,27 @@
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+
+bg.js Found: 4 Missing: 0
+cs.js Found: 4 Missing: 0
+cy.js Found: 4 Missing: 0
+da.js Found: 4 Missing: 0
+de.js Found: 4 Missing: 0
+el.js Found: 4 Missing: 0
+eo.js Found: 4 Missing: 0
+et.js Found: 4 Missing: 0
+fa.js Found: 4 Missing: 0
+fi.js Found: 4 Missing: 0
+fr.js Found: 4 Missing: 0
+he.js Found: 4 Missing: 0
+hr.js Found: 4 Missing: 0
+it.js Found: 4 Missing: 0
+mk.js Found: 4 Missing: 0
+nb.js Found: 4 Missing: 0
+nl.js Found: 4 Missing: 0
+no.js Found: 4 Missing: 0
+pl.js Found: 4 Missing: 0
+tr.js Found: 4 Missing: 0
+ug.js Found: 4 Missing: 0
+uk.js Found: 4 Missing: 0
+vi.js Found: 4 Missing: 0
+zh-cn.js Found: 4 Missing: 0
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/bg.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/bg.js
new file mode 100644
index 0000000..8447d0e
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/bg.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'bg', {
+ title: 'ПИ избор на цвят',
+ preview: 'Преглед',
+ config: 'Вмъкнете този низ във Вашия config.js fajl',
+ predefined: 'Предефинирани цветови палитри'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cs.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cs.js
new file mode 100644
index 0000000..94ddba9
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cs.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'cs', {
+ title: 'Výběr barvy rozhraní',
+ preview: 'Živý náhled',
+ config: 'Vložte tento řetězec do Vašeho souboru config.js',
+ predefined: 'Přednastavené sady barev'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cy.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cy.js
new file mode 100644
index 0000000..d8322bd
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/cy.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'cy', {
+ title: 'Dewisydd Lliwiau\'r UI',
+ preview: 'Rhagolwg Byw',
+ config: 'Gludwch y llinyn hwn i\'ch ffeil config.js',
+ predefined: 'Setiau lliw wedi\'u cyn-ddiffinio'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/da.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/da.js
new file mode 100644
index 0000000..eb4965f
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/da.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'da', {
+ title: 'Brugerflade på farvevælger',
+ preview: 'Vis liveeksempel',
+ config: 'Indsæt denne streng i din config.js fil',
+ predefined: 'Prædefinerede farveskemaer'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/de.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/de.js
new file mode 100644
index 0000000..9c303d9
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/de.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'de', {
+ title: 'UI Pipette',
+ preview: 'Live-Vorschau',
+ config: 'Fügen Sie diese Zeichenfolge in die \'config.js\' Datei.',
+ predefined: 'Vordefinierte Farbsätze'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/el.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/el.js
new file mode 100644
index 0000000..7be30c4
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/el.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'el', {
+ title: 'Διεπαφή Επιλογέα Χρωμάτων',
+ preview: 'Ζωντανή Προεπισκόπηση',
+ config: 'Επικολλήστε αυτό το κείμενο στο αρχείο config.js',
+ predefined: 'Προκαθορισμένα σύνολα χρωμάτων'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/en.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/en.js
new file mode 100644
index 0000000..fbae027
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/en.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'en', {
+ title: 'UI Color Picker',
+ preview: 'Live preview',
+ config: 'Paste this string into your config.js file',
+ predefined: 'Predefined color sets'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/eo.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/eo.js
new file mode 100644
index 0000000..a8efd89
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/eo.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'eo', {
+ title: 'UI Kolorselektilo',
+ preview: 'Vidigi la aspekton',
+ config: 'Gluu tiun signoĉenon en vian dosieron config.js',
+ predefined: 'Antaŭdifinita koloraro'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/et.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/et.js
new file mode 100644
index 0000000..6a13b07
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/et.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'et', {
+ title: 'Värvivalija kasutajaliides',
+ preview: 'Automaatne eelvaade',
+ config: 'Aseta see sõne oma config.js faili.',
+ predefined: 'Eelmääratud värvikomplektid'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fa.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fa.js
new file mode 100644
index 0000000..87ca9c3
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fa.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'fa', {
+ title: 'انتخاب رنگ UI',
+ preview: 'پیش‌نمایش زنده',
+ config: 'این رشته را در فایل config.js خود بچسبانید.',
+ predefined: 'مجموعه رنگ از پیش تعریف شده'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fi.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fi.js
new file mode 100644
index 0000000..111eb69
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fi.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'fi', {
+ title: 'Käyttöliittymän värivalitsin',
+ preview: 'Esikatsele',
+ config: 'Liitä tämä merkkijono config.js tiedostoosi',
+ predefined: 'Esimääritellyt värijoukot'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fr.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fr.js
new file mode 100644
index 0000000..3feab4b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/fr.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'fr', {
+ title: 'UI Sélecteur de couleur',
+ preview: 'Aperçu',
+ config: 'Collez cette chaîne de caractères dans votre fichier config.js',
+ predefined: 'Palettes de couleurs prédéfinies'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/he.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/he.js
new file mode 100644
index 0000000..bbe2f21
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/he.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'he', {
+ title: 'בחירת צבע ממשק משתמש',
+ preview: 'תצוגה מקדימה',
+ config: 'הדבק את הטקסט הבא לתוך הקובץ config.js',
+ predefined: 'קבוצות צבעים מוגדרות מראש'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/hr.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/hr.js
new file mode 100644
index 0000000..c3d2e5b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/hr.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'hr', {
+ title: 'UI odabir boja',
+ preview: 'Pregled uživo',
+ config: 'Zalijepite ovaj tekst u Vašu config.js datoteku.',
+ predefined: 'Već postavljeni setovi boja'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/it.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/it.js
new file mode 100644
index 0000000..02065f5
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/it.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'it', {
+ title: 'Selettore Colore UI',
+ preview: 'Anteprima Live',
+ config: 'Incolla questa stringa nel tuo file config.js',
+ predefined: 'Set di colori predefiniti'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/mk.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/mk.js
new file mode 100644
index 0000000..3d01092
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/mk.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'mk', {
+ title: 'Палета со бои',
+ preview: 'Преглед',
+ config: 'Залепи го овој текст во config.js датотеката',
+ predefined: 'Предефинирани множества на бои'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nb.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nb.js
new file mode 100644
index 0000000..5758be1
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nb.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'nb', {
+ title: 'Fargevelger for brukergrensesnitt',
+ preview: 'Forhåndsvisning i sanntid',
+ config: 'Lim inn følgende tekst i din config.js-fil',
+ predefined: 'Forhåndsdefinerte fargesett'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nl.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nl.js
new file mode 100644
index 0000000..103152f
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/nl.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'nl', {
+ title: 'UI Kleurenkiezer',
+ preview: 'Live voorbeeld',
+ config: 'Plak deze tekst in jouw config.js bestand',
+ predefined: 'Voorgedefinieerde kleurensets'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/no.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/no.js
new file mode 100644
index 0000000..6b979e4
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/no.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'no', {
+ title: 'Fargevelger for brukergrensesnitt',
+ preview: 'Forhåndsvisning i sanntid',
+ config: 'Lim inn følgende tekst i din config.js-fil',
+ predefined: 'Forhåndsdefinerte fargesett'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/pl.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/pl.js
new file mode 100644
index 0000000..34c8163
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/pl.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'pl', {
+ title: 'Wybór koloru interfejsu',
+ preview: 'Podgląd na żywo',
+ config: 'Wklej poniższy łańcuch znaków do pliku config.js:',
+ predefined: 'Predefiniowane zestawy kolorów'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/tr.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/tr.js
new file mode 100644
index 0000000..d1920bf
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/tr.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'tr', {
+ title: 'UI Renk Seçicisi',
+ preview: 'Canlı önizleme',
+ config: 'Bu dizeyi config.js dosyasının içine yapıştırın',
+ predefined: 'Önceden tanımlanmış renk kümeleri'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/ug.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/ug.js
new file mode 100644
index 0000000..b067647
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/ug.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'ug', {
+ title: 'ئىشلەتكۈچى ئارايۈزى رەڭ تاللىغۇچ',
+ preview: 'شۇئان ئالدىن كۆزىتىش',
+ config: 'بۇ ھەرپ تىزىقىنى config.js ھۆججەتكە چاپلايدۇ',
+ predefined: 'ئالدىن بەلگىلەنگەن رەڭلەر'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/uk.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/uk.js
new file mode 100644
index 0000000..d0c8ee3
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/uk.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'uk', {
+ title: 'Color Picker Інтерфейс',
+ preview: 'Перегляд наживо',
+ config: 'Вставте цей рядок у файл config.js',
+ predefined: 'Стандартний набір кольорів'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/vi.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/vi.js
new file mode 100644
index 0000000..090329b
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/vi.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'vi', {
+ title: 'Giao diện người dùng Color Picker',
+ preview: 'Xem trước trực tiếp',
+ config: 'Dán chuỗi này vào tập tin config.js của bạn',
+ predefined: 'Tập màu định nghĩa sẵn'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/zh-cn.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/zh-cn.js
new file mode 100644
index 0000000..a0a3b33
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/lang/zh-cn.js
@@ -0,0 +1,11 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.setLang( 'uicolor', 'zh-cn', {
+ title: '用户界面颜色选择器',
+ preview: '即时预览',
+ config: '粘贴此字符串到你的 config.js 文件',
+ predefined: '预定义颜色集'
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/plugin.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/plugin.js
new file mode 100644
index 0000000..9ced4cc
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/plugin.js
@@ -0,0 +1,28 @@
+/**
+ * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.add( 'uicolor', {
+ requires: 'dialog',
+ lang: 'bg,cs,cy,da,de,el,en,eo,et,fa,fi,fr,he,hr,it,ku,mk,nb,nl,no,pl,tr,ug,uk,vi,zh-cn', // %REMOVE_LINE_CORE%
+ icons: 'uicolor', // %REMOVE_LINE_CORE%
+ init: function( editor ) {
+ if ( CKEDITOR.env.ie6Compat )
+ return;
+
+ editor.addCommand( 'uicolor', new CKEDITOR.dialogCommand( 'uicolor' ) );
+ editor.ui.addButton && editor.ui.addButton( 'UIColor', {
+ label: editor.lang.uicolor.title,
+ command: 'uicolor',
+ toolbar: 'tools,1'
+ });
+ CKEDITOR.dialog.add( 'uicolor', this.path + 'dialogs/uicolor.js' );
+
+ // Load YUI js files.
+ CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( this.path + 'yui/yui.js' ) );
+
+ // Load YUI css files.
+ CKEDITOR.document.appendStyleSheet( CKEDITOR.getUrl( this.path + 'yui/assets/yui.css' ) );
+ }
+});
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/samples/uicolor.html b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/samples/uicolor.html
new file mode 100644
index 0000000..8b656f0
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/samples/uicolor.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html>
+<head>
+ <title>UI Color Picker &mdash; CKEditor Sample</title>
+ <meta charset="utf-8">
+ <script src="../../../ckeditor.js"></script>
+ <link rel="stylesheet" href="../../../samples/sample.css">
+ <meta name="ckeditor-sample-name" content="UIColor plugin">
+ <meta name="ckeditor-sample-group" content="Plugins">
+ <meta name="ckeditor-sample-description" content="Using the UIColor plugin to pick up skin color.">
+</head>
+<body>
+ <h1 class="samples">
+ <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; UI Color Plugin
+ </h1>
+ <div class="description">
+ <p>
+ This sample shows how to use the UI Color picker toolbar button to preview the skin color of the editor.
+ <strong>Note:</strong>The UI skin color feature depends on the CKEditor skin
+ compatibility. The Moono and Kama skins are examples of skins that work with it.
+ </p>
+ </div>
+ <form action="../../../samples/sample_posteddata.php" method="post">
+ <div id="ui-color-plugin">
+ <p>
+ If the <strong>uicolor</strong> plugin along with the dedicated <strong>UIColor</strong>
+ toolbar button is added to CKEditor, the user will also be able to pick the color of the
+ UI from the color palette available in the <strong>UI Color Picker</strong> dialog window.
+ </p>
+ <p>
+ To insert a CKEditor instance with the <strong>uicolor</strong> plugin enabled,
+ use the following JavaScript call:
+ </p>
+ <pre class="samples">
+CKEDITOR.replace( '<em>textarea_id</em>', {
+ <strong>extraPlugins: 'uicolor',</strong>
+ toolbar: [ [ 'Bold', 'Italic' ], [ <strong>'UIColor'</strong> ] ]
+});</pre>
+ <h2>Used in themed instance</h2>
+ <p>
+ Click the <strong>UI Color Picker</strong> toolbar button to open up a color picker dialog.
+ </p>
+ <p>
+ <textarea cols="80" id="editor1" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+ <script>
+
+ // Replace the <textarea id="editor"> with an CKEditor
+ // instance, using default configurations.
+ CKEDITOR.replace( 'editor1', {
+ extraPlugins: 'uicolor',
+ toolbar: [
+ [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],
+ [ 'FontSize', 'TextColor', 'BGColor' ],
+ [ 'UIColor' ]
+ ]
+ });
+
+ </script>
+ </p>
+ <h2>Used in inline instance</h2>
+ <p>
+ Click the below editable region to display floating toolbar, then click <strong>UI Color Picker</strong> button.
+ </p>
+ <div id="editor2" contenteditable="true">
+ <p>This is some <strong>sample text</strong>. You are using <a data-cke-saved-href="http://ckeditor.com/" href="http://ckeditor.com/">CKEditor</a>.</p>
+ </div>
+ <script>
+
+ // Disable automatic creation of inline instances.
+ CKEDITOR.disableAutoInline = true;
+
+ // Replace the <div id="editor3"> with an inline CKEditor instance.
+ CKEDITOR.inline( 'editor2', {
+ extraPlugins: 'uicolor',
+ toolbar: [
+ [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],
+ [ 'FontSize', 'TextColor', 'BGColor' ],
+ [ 'UIColor' ]
+ ]
+ });
+
+ </script>
+ </div>
+ <p>
+ <input type="submit" value="Submit">
+ </p>
+ </form>
+ <div id="footer">
+ <hr>
+ <p>
+ CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
+ </p>
+ <p id="copy">
+ Copyright &copy; 2003-2012, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
+ Knabben. All rights reserved.
+ </p>
+ </div>
+</body>
+</html>
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_bg.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_bg.png
new file mode 100644
index 0000000..d9bcdeb
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_bg.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_thumb.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_thumb.png
new file mode 100644
index 0000000..14d5db4
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/hue_thumb.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_mask.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_mask.png
new file mode 100644
index 0000000..f8d9193
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_mask.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_thumb.png b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_thumb.png
new file mode 100644
index 0000000..78445a2
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/picker_thumb.png
Binary files differ
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/yui.css b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/yui.css
new file mode 100644
index 0000000..1bb7c75
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/assets/yui.css
@@ -0,0 +1,15 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}
+
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+.cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}.cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.cke_uicolor_picker .yui-picker{position:relative;}.cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}.cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}.cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}.cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}.cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}.cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}.cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;}
diff --git a/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/yui.js b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/yui.js
new file mode 100644
index 0000000..7af4080
--- /dev/null
+++ b/kolab.org/www/drupal-7.18/sites/all/modules/ckeditor/includes/uicolor/yui/yui.js
@@ -0,0 +1,5914 @@
+/*jsl:ignoreall*/
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+if ( typeof YAHOO == "undefined" || !YAHOO ) {
+ var YAHOO = {};
+}
+YAHOO.namespace = function() {
+ var A = arguments,
+ E = null,
+ C, B, D;
+ for ( C = 0; C < A.length; C = C + 1 ) {
+ D = ( "" + A[ C ] ).split( "." );
+ E = YAHOO;
+ for ( B = ( D[ 0 ] == "YAHOO" ) ? 1 : 0; B < D.length; B = B + 1 ) {
+ E[ D[ B ] ] = E[ D[ B ] ] || {};
+ E = E[ D[ B ] ];
+ }
+ }
+ return E;
+};
+YAHOO.log = function( D, A, C ) {
+ var B = YAHOO.widget.Logger;
+ if ( B && B.log ) {
+ return B.log( D, A, C );
+ } else {
+ return false;
+ }
+};
+YAHOO.register = function( A, E, D ) {
+ var I = YAHOO.env.modules,
+ B, H, G, F, C;
+ if ( !I[ A ] ) {
+ I[ A ] = { versions: [], builds: [] };
+ }
+ B = I[ A ];
+ H = D.version;
+ G = D.build;
+ F = YAHOO.env.listeners;
+ B.name = A;
+ B.version = H;
+ B.build = G;
+ B.versions.push( H );
+ B.builds.push( G );
+ B.mainClass = E;
+ for ( C = 0; C < F.length; C = C + 1 ) {
+ F[ C ]( B );
+ }
+ if ( E ) {
+ E.VERSION = H;
+ E.BUILD = G;
+ } else {
+ YAHOO.log( "mainClass is undefined for module " + A, "warn" );
+ }
+};
+YAHOO.env = YAHOO.env || { modules: [], listeners: [] }; YAHOO.env.getVersion = function( A ) {
+ return YAHOO.env.modules[ A ] || null;
+};
+YAHOO.env.ua = function() {
+ var C = { ie: 0, opera: 0, gecko: 0, webkit: 0, mobile: null, air: 0, caja: 0 },
+ B = navigator.userAgent,
+ A; if ( ( /KHTML/ ).test( B ) ) {
+ C.webkit = 1;
+ }
+ A = B.match( /AppleWebKit\/([^\s]*)/ );
+ if ( A && A[ 1 ] ) {
+ C.webkit = parseFloat( A[ 1 ] );
+ if ( / Mobile\//.test( B ) ) {
+ C.mobile = "Apple";
+ } else {
+ A = B.match( /NokiaN[^\/]*/ );
+ if ( A ) {
+ C.mobile = A[ 0 ];
+ }
+ }
+ A = B.match( /AdobeAIR\/([^\s]*)/ );
+ if ( A ) {
+ C.air = A[ 0 ];
+ }
+ }
+ if ( !C.webkit ) {
+ A = B.match( /Opera[\s\/]([^\s]*)/ );
+ if ( A && A[ 1 ] ) {
+ C.opera = parseFloat( A[ 1 ] );
+ A = B.match( /Opera Mini[^;]*/ );
+ if ( A ) {
+ C.mobile = A[ 0 ];
+ }
+ } else {
+ A = B.match( /MSIE\s([^;]*)/ );
+ if ( A && A[ 1 ] ) {
+ C.ie = parseFloat( A[ 1 ] );
+ } else {
+ A = B.match( /Gecko\/([^\s]*)/ );
+ if ( A ) {
+ C.gecko = 1;
+ A = B.match( /rv:([^\s\)]*)/ );
+ if ( A && A[ 1 ] ) {
+ C.gecko = parseFloat( A[ 1 ] );
+ }
+ }
+ }
+ }
+ }
+ A = B.match( /Caja\/([^\s]*)/ );
+ if ( A && A[ 1 ] ) {
+ C.caja = parseFloat( A[ 1 ] );
+ }
+ return C;
+}();
+(function() {
+ YAHOO.namespace( "util", "widget", "example" );
+ if ( "undefined" !== typeof YAHOO_config ) {
+ var B = YAHOO_config.listener,
+ A = YAHOO.env.listeners,
+ D = true,
+ C;
+ if ( B ) {
+ for ( C = 0; C < A.length; C = C + 1 ) {
+ if ( A[ C ] == B ) {
+ D = false;
+ break;
+ }
+ }
+ if ( D ) {
+ A.push( B );
+ }
+ }
+ }
+})();
+YAHOO.lang = YAHOO.lang || {};
+(function() {
+ var B = YAHOO.lang,
+ F = "[object Array]",
+ C = "[object Function]",
+ A = Object.prototype,
+ E = [ "toString", "valueOf" ],
+ D = {
+ isArray: function( G ) {
+ return A.toString.apply( G ) === F;
+ },
+ isBoolean: function( G ) {
+ return typeof G === "boolean";
+ },
+ isFunction: function( G ) {
+ return A.toString.apply( G ) === C;
+ },
+ isNull: function( G ) {
+ return G === null;
+ },
+ isNumber: function( G ) {
+ return typeof G === "number" && isFinite( G );
+ },
+ isObject: function( G ) {
+ return ( G && ( typeof G === "object" || B.isFunction( G ) ) ) || false;
+ },
+ isString: function( G ) {
+ return typeof G === "string";
+ },
+ isUndefined: function( G ) {
+ return typeof G === "undefined";
+ },
+ _IEEnumFix: ( YAHOO.env.ua.ie ) ?
+ function( I, H ) {
+ var G, K, J; for ( G = 0; G < E.length; G = G + 1 ) {
+ K = E[ G ];
+ J = H[ K ];
+ if ( B.isFunction( J ) && J != A[ K ] ) {
+ I[ K ] = J;
+ }
+ }
+ } : function() {},
+ extend: function( J, K, I ) {
+ if ( !K || !J ) {
+ throw new Error( "extend failed, please check that " + "all dependencies are included." );
+ }
+ var H = function() {},
+ G;
+ H.prototype = K.prototype;
+ J.prototype = new H();
+ J.prototype.constructor = J;
+ J.superclass = K.prototype;
+ if ( K.prototype.constructor == A.constructor ) {
+ K.prototype.constructor = K;
+ }
+ if ( I ) {
+ for ( G in I ) {
+ if ( B.hasOwnProperty( I, G ) ) {
+ J.prototype[ G ] = I[ G ];
+ }
+ }
+ B._IEEnumFix( J.prototype, I );
+ }
+ },
+ augmentObject: function( K, J ) {
+ if ( !J || !K ) {
+ throw new Error( "Absorb failed, verify dependencies." );
+ }
+ var G = arguments,
+ I, L,
+ H = G[ 2 ];
+ if ( H && H !== true ) {
+ for ( I = 2; I < G.length; I = I + 1 ) {
+ K[ G[ I ] ] = J[ G[ I ] ];
+ }
+ } else {
+ for ( L in J ) {
+ if ( H || !( L in K ) ) {
+ K[ L ] = J[ L ];
+ }
+ }
+ B._IEEnumFix( K, J );
+ }
+ },
+ augmentProto: function( J, I ) {
+ if ( !I || !J ) {
+ throw new Error( "Augment failed, verify dependencies." );
+ }
+ var G = [ J.prototype, I.prototype ],
+ H;
+ for ( H = 2; H < arguments.length; H = H + 1 ) {
+ G.push( arguments[ H ] );
+ }
+ B.augmentObject.apply( this, G );
+ },
+ dump: function( G, L ) {
+ var I, K,
+ N = [],
+ O = "{...}",
+ H = "f(){...}",
+ M = ", ",
+ J = " => ";
+ if ( !B.isObject( G ) ) {
+ return G + "";
+ } else {
+ if ( G instanceof Date || ( "nodeType" in G && "tagName" in G ) ) {
+ return G;
+ } else {
+ if ( B.isFunction( G ) ) {
+ return H;
+ }
+ }
+ }
+ L = ( B.isNumber( L ) ) ? L : 3;
+ if ( B.isArray( G ) ) {
+ N.push( "[" );
+ for ( I = 0, K = G.length; I < K; I = I + 1 ) {
+ if ( B.isObject( G[ I ] ) ) {
+ N.push( ( L > 0 ) ? B.dump( G[ I ], L - 1 ) : O );
+ } else {
+ N.push( G[ I ] );
+ }
+ N.push( M );
+ }
+ if ( N.length > 1 ) {
+ N.pop();
+ }
+ N.push( "]" );
+ } else {
+ N.push( "{" );
+ for ( I in G ) {
+ if ( B.hasOwnProperty( G, I ) ) {
+ N.push( I + J );
+ if ( B.isObject( G[ I ] ) ) {
+ N.push( ( L > 0 ) ? B.dump( G[ I ], L - 1 ) : O );
+ } else {
+ N.push( G[ I ] );
+ }
+ N.push( M );
+ }
+ }
+ if ( N.length > 1 ) {
+ N.pop();
+ }
+ N.push( "}" );
+ }
+ return N.join( "" );
+ },
+ substitute: function( V, H, O ) {
+ var L, K, J, R, S, U,
+ Q = [],
+ I,
+ M = "dump",
+ P = " ",
+ G = "{",
+ T = "}",
+ N;
+ for ( ;; ) {
+ L = V.lastIndexOf( G );
+ if ( L < 0 ) {
+ break;
+ }
+ K = V.indexOf( T, L );
+ if ( L + 1 >= K ) {
+ break;
+ }
+ I = V.substring( L + 1, K );
+ R = I;
+ U = null;
+ J = R.indexOf( P );
+ if ( J > -1 ) {
+ U = R.substring( J + 1 );
+ R = R.substring( 0, J );
+ }
+ S = H[ R ];
+ if ( O ) {
+ S = O( R, S, U );
+ }
+ if ( B.isObject( S ) ) {
+ if ( B.isArray( S ) ) {
+ S = B.dump( S, parseInt( U, 10 ) );
+ } else {
+ U = U || "";
+ N = U.indexOf( M );
+ if ( N > -1 ) {
+ U = U.substring( 4 );
+ }
+ if ( S.toString === A.toString || N > -1 ) {
+ S = B.dump( S, parseInt( U, 10 ) );
+ } else {
+ S = S.toString();
+ }
+ }
+ } else {
+ if ( !B.isString( S ) && !B.isNumber( S ) ) {
+ S = "~-" + Q.length + "-~";
+ Q[ Q.length ] = I;
+ }
+ }
+ V = V.substring( 0, L ) + S + V.substring( K + 1 );
+ }
+ for ( L = Q.length - 1; L >= 0; L = L - 1 ) {
+ V = V.replace( new RegExp( "~-" + L + "-~" ), "{" + Q[ L ] + "}", "g" );
+ }
+ return V;
+ },
+ trim: function( G ) {
+ try {
+ return G.replace( /^\s+|\s+$/g, "" );
+ } catch ( H ) {
+ return G;
+ }
+ },
+ merge: function() {
+ var J = {},
+ H = arguments,
+ G = H.length,
+ I;
+ for ( I = 0; I < G; I = I + 1 ) {
+ B.augmentObject( J, H[ I ], true );
+ }
+ return J;
+ },
+ later: function( N, H, O, J, K ) {
+ N = N || 0; H = H || {};
+ var I = O,
+ M = J,
+ L, G;
+ if ( B.isString( O ) ) {
+ I = H[ O ];
+ }
+ if ( !I ) {
+ throw new TypeError( "method undefined" );
+ }
+ if ( !B.isArray( M ) ) {
+ M = [ J ];
+ }
+ L = function() {
+ I.apply( H, M );
+ };
+ G = ( K ) ? setInterval( L, N ) : setTimeout( L, N );
+ return {
+ interval: K, cancel: function() {
+ if ( this.interval ) {
+ clearInterval( G );
+ } else {
+ clearTimeout( G );
+ }
+ } };
+ },
+ isValue: function( G ) {
+ return ( B.isObject( G ) || B.isString( G ) || B.isNumber( G ) || B.isBoolean( G ) );
+ } }; B.hasOwnProperty = ( A.hasOwnProperty ) ?
+ function( G, H ) {
+ return G && G.hasOwnProperty( H );
+ } : function( G, H ) {
+ return !B.isUndefined( G[ H ] ) && G.constructor.prototype[ H ] !== G[ H ];
+ };
+ D.augmentObject( B, D, true );
+ YAHOO.util.Lang = B;
+ B.augment = B.augmentProto;
+ YAHOO.augment = B.augmentProto;
+ YAHOO.extend = B.extend;
+})();
+YAHOO.register( "yahoo", YAHOO, { version: "2.7.0", build: "1796" } );
+(function() {
+ YAHOO.env._id_counter = YAHOO.env._id_counter || 0;
+ var E = YAHOO.util,
+ L = YAHOO.lang,
+ m = YAHOO.env.ua,
+ A = YAHOO.lang.trim,
+ d = {},
+ h = {},
+ N = /^t(?:able|d|h)$/i,
+ X = /color$/i,
+ K = window.document,
+ W = K.documentElement,
+ e = "ownerDocument",
+ n = "defaultView",
+ v = "documentElement",
+ t = "compatMode",
+ b = "offsetLeft",
+ P = "offsetTop",
+ u = "offsetParent",
+ Z = "parentNode",
+ l = "nodeType",
+ C = "tagName",
+ O = "scrollLeft",
+ i = "scrollTop",
+ Q = "getBoundingClientRect",
+ w = "getComputedStyle",
+ a = "currentStyle",
+ M = "CSS1Compat",
+ c = "BackCompat",
+ g = "class",
+ F = "className",
+ J = "",
+ B = " ",
+ s = "(?:^|\\s)",
+ k = "(?= |$)",
+ U = "g",
+ p = "position",
+ f = "fixed",
+ V = "relative",
+ j = "left",
+ o = "top",
+ r = "medium",
+ q = "borderLeftWidth",
+ R = "borderTopWidth",
+ D = m.opera,
+ I = m.webkit,
+ H = m.gecko,
+ T = m.ie;
+ E.Dom = {
+ CUSTOM_ATTRIBUTES: ( !W.hasAttribute ) ? { "for": "htmlFor", "class": F } : { "htmlFor": "for", "className": g },
+ get: function( y ) {
+ var AA, Y, z, x, G; if ( y ) {
+ if ( y[ l ] || y.item ) {
+ return y;
+ }
+ if ( typeof y === "string" ) {
+ AA = y;
+ y = K.getElementById( y );
+ if ( y && y.id === AA ) {
+ return y;
+ } else {
+ if ( y && K.all ) {
+ y = null;
+ Y = K.all[ AA ];
+ for ( x = 0, G = Y.length; x < G; ++x ) {
+ if ( Y[ x ].id === AA ) {
+ return Y[ x ];
+ }
+ }
+ }
+ }
+ return y;
+ }
+ if ( y.DOM_EVENTS ) {
+ y = y.get( "element" );
+ }
+ if ( "length" in y ) {
+ z = [];
+ for ( x = 0, G = y.length; x < G; ++x ) {
+ z[ z.length ] = E.Dom.get( y[ x ] );
+ }
+ return z;
+ }
+ return y;
+ }
+ return null;
+ },
+ getComputedStyle: function( G, Y ) {
+ if ( window[ w ] ) {
+ return G[ e ][ n ][ w ]( G, null )[ Y ];
+ } else {
+ if ( G[ a ] ) {
+ return E.Dom.IE_ComputedStyle.get( G, Y );
+ }
+ }
+ },
+ getStyle: function( G, Y ) {
+ return E.Dom.batch( G, E.Dom._getStyle, Y );
+ },
+ _getStyle: function() {
+ if ( window[ w ] ) {
+ return function( G, y ) {
+ y = ( y === "float" ) ? y = "cssFloat" : E.Dom._toCamel( y );
+ var x = G.style[ y ],
+ Y;
+ if ( !x ) {
+ Y = G[ e ][ n ][ w ]( G, null );
+ if ( Y ) {
+ x = Y[ y ];
+ }
+ }
+ return x;
+ };
+ } else {
+ if ( W[ a ] ) {
+ return function( G, y ) {
+ var x;
+ switch ( y ) {
+ case "opacity":
+ x = 100;
+ try {
+ x = G.filters[ "DXImageTransform.Microsoft.Alpha" ].opacity;
+ } catch ( z ) {
+ try {
+ x = G.filters( "alpha" ).opacity;
+ } catch ( Y ) {}
+ }
+ return x / 100;case "float":
+ y = "styleFloat";default:
+ y = E.Dom._toCamel( y );
+ x = G[ a ] ? G[ a ][ y ] : null;
+ return ( G.style[ y ] || x );
+ }
+ };
+ }
+ }
+ }(), setStyle: function( G, Y, x ) {
+ E.Dom.batch( G, E.Dom._setStyle, { prop: Y, val: x } );
+ },
+ _setStyle: function() {
+ if ( T ) {
+ return function( Y, G ) {
+ var x = E.Dom._toCamel( G.prop ),
+ y = G.val;
+ if ( Y ) {
+ switch ( x ) {
+ case "opacity":
+ if ( L.isString( Y.style.filter ) ) {
+ Y.style.filter = "alpha(opacity=" + y * 100 + ")";
+ if ( !Y[ a ] || !Y[ a ].hasLayout ) {
+ Y.style.zoom = 1;
+ }
+ }
+ break;case "float":
+ x = "styleFloat";default:
+ Y.style[ x ] = y;
+ }
+ } else {}
+ };
+ } else {
+ return function( Y, G ) {
+ var x = E.Dom._toCamel( G.prop ),
+ y = G.val;
+ if ( Y ) {
+ if ( x == "float" ) {
+ x = "cssFloat";
+ }
+ Y.style[ x ] = y;
+ } else {}
+ };
+ }
+ }(), getXY: function( G ) {
+ return E.Dom.batch( G, E.Dom._getXY );
+ },
+ _canPosition: function( G ) {
+ return ( E.Dom._getStyle( G, "display" ) !== "none" && E.Dom._inDoc( G ) );
+ },
+ _getXY: function() {
+ if ( K[ v ][ Q ] ) {
+ return function( y ) {
+ var z, Y, AA, AF, AE, AD, AC, G, x,
+ AB = Math.floor,
+ AG = false;
+ if ( E.Dom._canPosition( y ) ) {
+ AA = y[ Q ]();
+ AF = y[ e ];
+ z = E.Dom.getDocumentScrollLeft( AF );
+ Y = E.Dom.getDocumentScrollTop( AF );
+ AG = [ AB( AA[ j ] ), AB( AA[ o ] ) ];
+ if ( T && m.ie < 8 ) {
+ AE = 2;
+ AD = 2;
+ AC = AF[ t ];
+ G = S( AF[ v ], q );
+ x = S( AF[ v ], R );
+ if ( m.ie === 6 ) {
+ if ( AC !== c ) {
+ AE = 0;
+ AD = 0;
+ }
+ }
+ if ( ( AC == c ) ) {
+ if ( G !== r ) {
+ AE = parseInt( G, 10 );
+ }
+ if ( x !== r ) {
+ AD = parseInt( x, 10 );
+ }
+ }
+ AG[ 0 ] -= AE;
+ AG[ 1 ] -= AD;
+ }
+ if ( ( Y || z ) ) {
+ AG[ 0 ] += z;
+ AG[ 1 ] += Y;
+ }
+ AG[ 0 ] = AB( AG[ 0 ] );
+ AG[ 1 ] = AB( AG[ 1 ] );
+ } else {}
+ return AG;
+ };
+ } else {
+ return function( y ) {
+ var x, Y, AA, AB, AC,
+ z = false,
+ G = y;
+ if ( E.Dom._canPosition( y ) ) {
+ z = [ y[ b ], y[ P ] ];
+ x = E.Dom.getDocumentScrollLeft( y[ e ] );
+ Y = E.Dom.getDocumentScrollTop( y[ e ] );
+ AC = ( ( H || m.webkit > 519 ) ? true : false );
+ while ( ( G = G[ u ] ) ) {
+ z[ 0 ] += G[ b ];
+ z[ 1 ] += G[ P ];
+ if ( AC ) {
+ z = E.Dom._calcBorders( G, z );
+ }
+ }
+ if ( E.Dom._getStyle( y, p ) !== f ) {
+ G = y;
+ while ( ( G = G[ Z ] ) && G[ C ] ) {
+ AA = G[ i ];
+ AB = G[ O ];
+ if ( H && ( E.Dom._getStyle( G, "overflow" ) !== "visible" ) ) {
+ z = E.Dom._calcBorders( G, z );
+ }
+ if ( AA || AB ) {
+ z[ 0 ] -= AB;
+ z[ 1 ] -= AA;
+ }
+ }
+ z[ 0 ] += x;
+ z[ 1 ] += Y;
+ } else {
+ if ( D ) {
+ z[ 0 ] -= x;
+ z[ 1 ] -= Y;
+ } else {
+ if ( I || H ) {
+ z[ 0 ] += x;
+ z[ 1 ] += Y;
+ }
+ }
+ }
+ z[ 0 ] = Math.floor( z[ 0 ] );
+ z[ 1 ] = Math.floor( z[ 1 ] );
+ } else {}
+ return z;
+ };
+ }
+ }(), getX: function( G ) {
+ var Y = function( x ) {
+ return E.Dom.getXY( x )[ 0 ];
+ };
+ return E.Dom.batch( G, Y, E.Dom, true );
+ },
+ getY: function( G ) {
+ var Y = function( x ) {
+ return E.Dom.getXY( x )[ 1 ];
+ };
+ return E.Dom.batch( G, Y, E.Dom, true );
+ },
+ setXY: function( G, x, Y ) {
+ E.Dom.batch( G, E.Dom._setXY, { pos: x, noRetry: Y } );
+ },
+ _setXY: function( G, z ) {
+ var AA = E.Dom._getStyle( G, p ),
+ y = E.Dom.setStyle,
+ AD = z.pos,
+ Y = z.noRetry,
+ AB = [ parseInt( E.Dom.getComputedStyle( G, j ), 10 ), parseInt( E.Dom.getComputedStyle( G, o ), 10 ) ],
+ AC, x;
+ if ( AA == "static" ) {
+ AA = V;
+ y( G, p, AA );
+ }
+ AC = E.Dom._getXY( G );
+ if ( !AD || AC === false ) {
+ return false;
+ }
+ if ( isNaN( AB[ 0 ] ) ) {
+ AB[ 0 ] = ( AA == V ) ? 0 : G[ b ];
+ }
+ if ( isNaN( AB[ 1 ] ) ) {
+ AB[ 1 ] = ( AA == V ) ? 0 : G[ P ];
+ }
+ if ( AD[ 0 ] !== null ) {
+ y( G, j, AD[ 0 ] - AC[ 0 ] + AB[ 0 ] + "px" );
+ }
+ if ( AD[ 1 ] !== null ) {
+ y( G, o, AD[ 1 ] - AC[ 1 ] + AB[ 1 ] + "px" );
+ }
+ if ( !Y ) {
+ x = E.Dom._getXY( G );
+ if ( ( AD[ 0 ] !== null && x[ 0 ] != AD[ 0 ] ) || ( AD[ 1 ] !== null && x[ 1 ] != AD[ 1 ] ) ) {
+ E.Dom._setXY( G, { pos: AD, noRetry: true } );
+ }
+ }
+ },
+ setX: function( Y, G ) {
+ E.Dom.setXY( Y, [ G, null ] );
+ },
+ setY: function( G, Y ) {
+ E.Dom.setXY( G, [ null, Y ] );
+ },
+ getRegion: function( G ) {
+ var Y = function( x ) {
+ var y = false;
+ if ( E.Dom._canPosition( x ) ) {
+ y = E.Region.getRegion( x );
+ } else {}
+ return y;
+ };
+ return E.Dom.batch( G, Y, E.Dom, true );
+ },
+ getClientWidth: function() {
+ return E.Dom.getViewportWidth();
+ },
+ getClientHeight: function() {
+ return E.Dom.getViewportHeight();
+ },
+ getElementsByClassName: function( AB, AF, AC, AE, x, AD ) {
+ AB = L.trim( AB );
+ AF = AF || "*";
+ AC = ( AC ) ? E.Dom.get( AC ) : null || K;
+ if ( !AC ) {
+ return [];
+ }
+ var Y = [],
+ G = AC.getElementsByTagName( AF ),
+ z = E.Dom.hasClass;
+ for ( var y = 0, AA = G.length; y < AA; ++y ) {
+ if ( z( G[ y ], AB ) ) {
+ Y[ Y.length ] = G[ y ];
+ }
+ }
+ if ( AE ) {
+ E.Dom.batch( Y, AE, x, AD );
+ }
+ return Y;
+ },
+ hasClass: function( Y, G ) {
+ return E.Dom.batch( Y, E.Dom._hasClass, G );
+ },
+ _hasClass: function( x, Y ) {
+ var G = false,
+ y; if ( x && Y ) {
+ y = E.Dom.getAttribute( x, F ) || J;
+ if ( Y.exec ) {
+ G = Y.test( y );
+ } else {
+ G = Y && ( B + y + B ).indexOf( B + Y + B ) > -1;
+ }
+ } else {}
+ return G;
+ },
+ addClass: function( Y, G ) {
+ return E.Dom.batch( Y, E.Dom._addClass, G );
+ },
+ _addClass: function( x, Y ) {
+ var G = false,
+ y; if ( x && Y ) {
+ y = E.Dom.getAttribute( x, F ) || J;
+ if ( !E.Dom._hasClass( x, Y ) ) {
+ E.Dom.setAttribute( x, F, A( y + B + Y ) );
+ G = true;
+ }
+ } else {}
+ return G;
+ },
+ removeClass: function( Y, G ) {
+ return E.Dom.batch( Y, E.Dom._removeClass, G );
+ },
+ _removeClass: function( y, x ) {
+ var Y = false,
+ AA, z, G; if ( y && x ) {
+ AA = E.Dom.getAttribute( y, F ) || J;
+ E.Dom.setAttribute( y, F, AA.replace( E.Dom._getClassRegex( x ), J ) );
+ z = E.Dom.getAttribute( y, F );
+ if ( AA !== z ) {
+ E.Dom.setAttribute( y, F, A( z ) );
+ Y = true;
+ if ( E.Dom.getAttribute( y, F ) === "" ) {
+ G = ( y.hasAttribute && y.hasAttribute( g ) ) ? g : F;
+ y.removeAttribute( G );
+ }
+ }
+ } else {}
+ return Y;
+ },
+ replaceClass: function( x, Y, G ) {
+ return E.Dom.batch( x, E.Dom._replaceClass, { from: Y, to: G } );
+ },
+ _replaceClass: function( y, x ) {
+ var Y, AB, AA,
+ G = false,
+ z; if ( y && x ) {
+ AB = x.from;
+ AA = x.to;
+ if ( !AA ) {
+ G = false;
+ } else {
+ if ( !AB ) {
+ G = E.Dom._addClass( y, x.to );
+ } else {
+ if ( AB !== AA ) {
+ z = E.Dom.getAttribute( y, F ) || J;
+ Y = ( B + z.replace( E.Dom._getClassRegex( AB ), B + AA ) ).split( E.Dom._getClassRegex( AA ) );
+ Y.splice( 1, 0, B + AA );
+ E.Dom.setAttribute( y, F, A( Y.join( J ) ) );
+ G = true;
+ }
+ }
+ }
+ } else {}
+ return G;
+ },
+ generateId: function( G, x ) {
+ x = x || "yui-gen"; var Y = function( y ) {
+ if ( y && y.id ) {
+ return y.id;
+ }
+ var z = x + YAHOO.env._id_counter++;
+ if ( y ) {
+ if ( y[ e ].getElementById( z ) ) {
+ return E.Dom.generateId( y, z + x );
+ }
+ y.id = z;
+ }
+ return z;
+ };
+ return E.Dom.batch( G, Y, E.Dom, true ) || Y.apply( E.Dom, arguments );
+ },
+ isAncestor: function( Y, x ) {
+ Y = E.Dom.get( Y );
+ x = E.Dom.get( x );
+ var G = false;
+ if ( ( Y && x ) && ( Y[ l ] && x[ l ] ) ) {
+ if ( Y.contains && Y !== x ) {
+ G = Y.contains( x );
+ } else {
+ if ( Y.compareDocumentPosition ) {
+ G = !!( Y.compareDocumentPosition( x ) & 16 );
+ }
+ }
+ } else {}
+ return G;
+ },
+ inDocument: function( G, Y ) {
+ return E.Dom._inDoc( E.Dom.get( G ), Y );
+ },
+ _inDoc: function( Y, x ) {
+ var G = false; if ( Y && Y[ C ] ) {
+ x = x || Y[ e ];
+ G = E.Dom.isAncestor( x[ v ], Y );
+ } else {}
+ return G;
+ },
+ getElementsBy: function( Y, AF, AB, AD, y, AC, AE ) {
+ AF = AF || "*"; AB = ( AB ) ? E.Dom.get( AB ) : null || K;
+ if ( !AB ) {
+ return [];
+ }
+ var x = [],
+ G = AB.getElementsByTagName( AF );
+ for ( var z = 0, AA = G.length; z < AA; ++z ) {
+ if ( Y( G[ z ] ) ) {
+ if ( AE ) {
+ x = G[ z ];
+ break;
+ } else {
+ x[ x.length ] = G[ z ];
+ }
+ }
+ }
+ if ( AD ) {
+ E.Dom.batch( x, AD, y, AC );
+ }
+ return x;
+ },
+ getElementBy: function( x, G, Y ) {
+ return E.Dom.getElementsBy( x, G, Y, null, null, null, true );
+ },
+ batch: function( x, AB, AA, z ) {
+ var y = [],
+ Y = ( z ) ? AA : window;
+ x = ( x && ( x[ C ] || x.item ) ) ? x : E.Dom.get( x );
+ if ( x && AB ) {
+ if ( x[ C ] || x.length === undefined ) {
+ return AB.call( Y, x, AA );
+ }
+ for ( var G = 0; G < x.length; ++G ) {
+ y[ y.length ] = AB.call( Y, x[ G ], AA );
+ }
+ } else {
+ return false;
+ }
+ return y;
+ },
+ getDocumentHeight: function() {
+ var Y = ( K[ t ] != M || I ) ? K.body.scrollHeight : W.scrollHeight,
+ G = Math.max( Y, E.Dom.getViewportHeight() );
+ return G;
+ },
+ getDocumentWidth: function() {
+ var Y = ( K[ t ] != M || I ) ? K.body.scrollWidth : W.scrollWidth,
+ G = Math.max( Y, E.Dom.getViewportWidth() );
+ return G;
+ },
+ getViewportHeight: function() {
+ var G = self.innerHeight,
+ Y = K[ t ];
+ if ( ( Y || T ) && !D ) {
+ G = ( Y == M ) ? W.clientHeight : K.body.clientHeight;
+ }
+ return G;
+ },
+ getViewportWidth: function() {
+ var G = self.innerWidth,
+ Y = K[ t ];
+ if ( Y || T ) {
+ G = ( Y == M ) ? W.clientWidth : K.body.clientWidth;
+ }
+ return G;
+ },
+ getAncestorBy: function( G, Y ) {
+ while ( ( G = G[ Z ] ) ) {
+ if ( E.Dom._testElement( G, Y ) ) {
+ return G;
+ }
+ }
+ return null;
+ },
+ getAncestorByClassName: function( Y, G ) {
+ Y = E.Dom.get( Y );
+ if ( !Y ) {
+ return null;
+ }
+ var x = function( y ) {
+ return E.Dom.hasClass( y, G );
+ };
+ return E.Dom.getAncestorBy( Y, x );
+ },
+ getAncestorByTagName: function( Y, G ) {
+ Y = E.Dom.get( Y );
+ if ( !Y ) {
+ return null;
+ }
+ var x = function( y ) {
+ return y[ C ] && y[ C ].toUpperCase() == G.toUpperCase();
+ };
+ return E.Dom.getAncestorBy( Y, x );
+ },
+ getPreviousSiblingBy: function( G, Y ) {
+ while ( G ) {
+ G = G.previousSibling;
+ if ( E.Dom._testElement( G, Y ) ) {
+ return G;
+ }
+ }
+ return null;
+ },
+ getPreviousSibling: function( G ) {
+ G = E.Dom.get( G );
+ if ( !G ) {
+ return null;
+ }
+ return E.Dom.getPreviousSiblingBy( G );
+ },
+ getNextSiblingBy: function( G, Y ) {
+ while ( G ) {
+ G = G.nextSibling;
+ if ( E.Dom._testElement( G, Y ) ) {
+ return G;
+ }
+ }
+ return null;
+ },
+ getNextSibling: function( G ) {
+ G = E.Dom.get( G );
+ if ( !G ) {
+ return null;
+ }
+ return E.Dom.getNextSiblingBy( G );
+ },
+ getFirstChildBy: function( G, x ) {
+ var Y = ( E.Dom._testElement( G.firstChild, x ) ) ? G.firstChild : null;
+ return Y || E.Dom.getNextSiblingBy( G.firstChild, x );
+ },
+ getFirstChild: function( G, Y ) {
+ G = E.Dom.get( G );
+ if ( !G ) {
+ return null;
+ }
+ return E.Dom.getFirstChildBy( G );
+ },
+ getLastChildBy: function( G, x ) {
+ if ( !G ) {
+ return null;
+ }
+ var Y = ( E.Dom._testElement( G.lastChild, x ) ) ? G.lastChild : null;
+ return Y || E.Dom.getPreviousSiblingBy( G.lastChild, x );
+ },
+ getLastChild: function( G ) {
+ G = E.Dom.get( G );
+ return E.Dom.getLastChildBy( G );
+ },
+ getChildrenBy: function( Y, y ) {
+ var x = E.Dom.getFirstChildBy( Y, y ),
+ G = x ? [ x ] : [];
+ E.Dom.getNextSiblingBy( x, function( z ) {
+ if ( !y || y( z ) ) {
+ G[ G.length ] = z;
+ }
+ return false;
+ });
+ return G;
+ },
+ getChildren: function( G ) {
+ G = E.Dom.get( G );
+ if ( !G ) {}
+ return E.Dom.getChildrenBy( G );
+ },
+ getDocumentScrollLeft: function( G ) {
+ G = G || K; return Math.max( G[ v ].scrollLeft, G.body.scrollLeft );
+ },
+ getDocumentScrollTop: function( G ) {
+ G = G || K; return Math.max( G[ v ].scrollTop, G.body.scrollTop );
+ },
+ insertBefore: function( Y, G ) {
+ Y = E.Dom.get( Y );
+ G = E.Dom.get( G );
+ if ( !Y || !G || !G[ Z ] ) {
+ return null;
+ }
+ return G[ Z ].insertBefore( Y, G );
+ },
+ insertAfter: function( Y, G ) {
+ Y = E.Dom.get( Y );
+ G = E.Dom.get( G );
+ if ( !Y || !G || !G[ Z ] ) {
+ return null;
+ }
+ if ( G.nextSibling ) {
+ return G[ Z ].insertBefore( Y, G.nextSibling );
+ } else {
+ return G[ Z ].appendChild( Y );
+ }
+ },
+ getClientRegion: function() {
+ var x = E.Dom.getDocumentScrollTop(),
+ Y = E.Dom.getDocumentScrollLeft(),
+ y = E.Dom.getViewportWidth() + Y,
+ G = E.Dom.getViewportHeight() + x;
+ return new E.Region( x, y, G, Y );
+ },
+ setAttribute: function( Y, G, x ) {
+ G = E.Dom.CUSTOM_ATTRIBUTES[ G ] || G;
+ Y.setAttribute( G, x );
+ },
+ getAttribute: function( Y, G ) {
+ G = E.Dom.CUSTOM_ATTRIBUTES[ G ] || G;
+ return Y.getAttribute( G );
+ },
+ _toCamel: function( Y ) {
+ var x = d;
+
+ function G( y, z ) {
+ return z.toUpperCase();
+ }
+ return x[ Y ] || ( x[ Y ] = Y.indexOf( "-" ) === -1 ? Y : Y.replace( /-([a-z])/gi, G ) );
+ },
+ _getClassRegex: function( Y ) {
+ var G; if ( Y !== undefined ) {
+ if ( Y.exec ) {
+ G = Y;
+ } else {
+ G = h[ Y ];
+ if ( !G ) {
+ Y = Y.replace( E.Dom._patterns.CLASS_RE_TOKENS, "\\$1" );
+ G = h[ Y ] = new RegExp( s + Y + k, U );
+ }
+ }
+ }
+ return G;
+ },
+ _patterns: { ROOT_TAG: /^body|html$/i, CLASS_RE_TOKENS: /([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g },
+ _testElement: function( G, Y ) {
+ return G && G[ l ] == 1 && ( !Y || Y( G ) );
+ },
+ _calcBorders: function( x, y ) {
+ var Y = parseInt( E.Dom[ w ]( x, R ), 10 ) || 0,
+ G = parseInt( E.Dom[ w ]( x, q ), 10 ) || 0;
+ if ( H ) {
+ if ( N.test( x[ C ] ) ) {
+ Y = 0;
+ G = 0;
+ }
+ }
+ y[ 0 ] += G;
+ y[ 1 ] += Y;
+ return y;
+ } }; var S = E.Dom[ w ];
+ if ( m.opera ) {
+ E.Dom[ w ] = function( Y, G ) {
+ var x = S( Y, G );
+ if ( X.test( G ) ) {
+ x = E.Dom.Color.toRGB( x );
+ }
+ return x;
+ };
+ }
+ if ( m.webkit ) {
+ E.Dom[ w ] = function( Y, G ) {
+ var x = S( Y, G );
+ if ( x === "rgba(0, 0, 0, 0)" ) {
+ x = "transparent";
+ }
+ return x;
+ };
+ }
+})();
+YAHOO.util.Region = function( C, D, A, B ) {
+ this.top = C;
+ this.y = C;
+ this[ 1 ] = C;
+ this.right = D;
+ this.bottom = A;
+ this.left = B;
+ this.x = B;
+ this[ 0 ] = B;
+ this.width = this.right - this.left;
+ this.height = this.bottom - this.top;
+};
+YAHOO.util.Region.prototype.contains = function( A ) {
+ return ( A.left >= this.left && A.right <= this.right && A.top >= this.top && A.bottom <= this.bottom );
+};
+YAHOO.util.Region.prototype.getArea = function() {
+ return ( ( this.bottom - this.top ) * ( this.right - this.left ) );
+};
+YAHOO.util.Region.prototype.intersect = function( E ) {
+ var C = Math.max( this.top, E.top ),
+ D = Math.min( this.right, E.right ),
+ A = Math.min( this.bottom, E.bottom ),
+ B = Math.max( this.left, E.left );
+ if ( A >= C && D >= B ) {
+ return new YAHOO.util.Region( C, D, A, B );
+ } else {
+ return null;
+ }
+};
+YAHOO.util.Region.prototype.union = function( E ) {
+ var C = Math.min( this.top, E.top ),
+ D = Math.max( this.right, E.right ),
+ A = Math.max( this.bottom, E.bottom ),
+ B = Math.min( this.left, E.left );
+ return new YAHOO.util.Region( C, D, A, B );
+};
+YAHOO.util.Region.prototype.toString = function() {
+ return ( "Region {" + "top: " + this.top + ", right: " + this.right + ", bottom: " + this.bottom + ", left: " + this.left + ", height: " + this.height + ", width: " + this.width + "}" );
+};
+YAHOO.util.Region.getRegion = function( D ) {
+ var F = YAHOO.util.Dom.getXY( D ),
+ C = F[ 1 ],
+ E = F[ 0 ] + D.offsetWidth,
+ A = F[ 1 ] + D.offsetHeight,
+ B = F[ 0 ];
+ return new YAHOO.util.Region( C, E, A, B );
+};
+YAHOO.util.Point = function( A, B ) {
+ if ( YAHOO.lang.isArray( A ) ) {
+ B = A[ 1 ];
+ A = A[ 0 ];
+ }
+ YAHOO.util.Point.superclass.constructor.call( this, B, A, B, A );
+};
+YAHOO.extend( YAHOO.util.Point, YAHOO.util.Region );
+(function() {
+ var B = YAHOO.util,
+ A = "clientTop",
+ F = "clientLeft",
+ J = "parentNode",
+ K = "right",
+ W = "hasLayout",
+ I = "px",
+ U = "opacity",
+ L = "auto",
+ D = "borderLeftWidth",
+ G = "borderTopWidth",
+ P = "borderRightWidth",
+ V = "borderBottomWidth",
+ S = "visible",
+ Q = "transparent",
+ N = "height",
+ E = "width",
+ H = "style",
+ T = "currentStyle",
+ R = /^width|height$/,
+ O = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,
+ M = {
+ get: function( X, Z ) {
+ var Y = "",
+ a = X[ T ][ Z ];
+ if ( Z === U ) {
+ Y = B.Dom.getStyle( X, U );
+ } else {
+ if ( !a || ( a.indexOf && a.indexOf( I ) > -1 ) ) {
+ Y = a;
+ } else {
+ if ( B.Dom.IE_COMPUTED[ Z ] ) {
+ Y = B.Dom.IE_COMPUTED[ Z ]( X, Z );
+ } else {
+ if ( O.test( a ) ) {
+ Y = B.Dom.IE.ComputedStyle.getPixel( X, Z );
+ } else {
+ Y = a;
+ }
+ }
+ }
+ }
+ return Y;
+ },
+ getOffset: function( Z, e ) {
+ var b = Z[ T ][ e ],
+ X = e.charAt( 0 ).toUpperCase() + e.substr( 1 ),
+ c = "offset" + X,
+ Y = "pixel" + X,
+ a = "",
+ d;
+ if ( b == L ) {
+ d = Z[ c ];
+ if ( d === undefined ) {
+ a = 0;
+ }
+ a = d;
+ if ( R.test( e ) ) {
+ Z[ H ][ e ] = d;
+ if ( Z[ c ] > d ) {
+ a = d - ( Z[ c ] - d );
+ }
+ Z[ H ][ e ] = L;
+ }
+ } else {
+ if ( !Z[ H ][ Y ] && !Z[ H ][ e ] ) {
+ Z[ H ][ e ] = b;
+ }
+ a = Z[ H ][ Y ];
+ }
+ return a + I;
+ },
+ getBorderWidth: function( X, Z ) {
+ var Y = null; if ( !X[ T ][ W ] ) {
+ X[ H ].zoom = 1;
+ }
+ switch ( Z ) {
+ case G:
+ Y = X[ A ];
+ break;case V:
+ Y = X.offsetHeight - X.clientHeight - X[ A ];
+ break;case D:
+ Y = X[ F ];
+ break;case P:
+ Y = X.offsetWidth - X.clientWidth - X[ F ];
+ break;
+ }
+ return Y + I;
+ },
+ getPixel: function( Y, X ) {
+ var a = null,
+ b = Y[ T ][ K ],
+ Z = Y[ T ][ X ];
+ Y[ H ][ K ] = Z;
+ a = Y[ H ].pixelRight;
+ Y[ H ][ K ] = b;
+ return a + I;
+ },
+ getMargin: function( Y, X ) {
+ var Z; if ( Y[ T ][ X ] == L ) {
+ Z = 0 + I;
+ } else {
+ Z = B.Dom.IE.ComputedStyle.getPixel( Y, X );
+ }
+ return Z;
+ },
+ getVisibility: function( Y, X ) {
+ var Z; while ( ( Z = Y[ T ] ) && Z[ X ] == "inherit" ) {
+ Y = Y[ J ];
+ }
+ return ( Z ) ? Z[ X ] : S;
+ },
+ getColor: function( Y, X ) {
+ return B.Dom.Color.toRGB( Y[ T ][ X ] ) || Q;
+ },
+ getBorderColor: function( Y, X ) {
+ var Z = Y[ T ],
+ a = Z[ X ] || Z.color;
+ return B.Dom.Color.toRGB( B.Dom.Color.toHex( a ) );
+ } },
+ C = {};
+ C.top = C.right = C.bottom = C.left = C[ E ] = C[ N ] = M.getOffset;
+ C.color = M.getColor;
+ C[ G ] = C[ P ] = C[ V ] = C[ D ] = M.getBorderWidth;
+ C.marginTop = C.marginRight = C.marginBottom = C.marginLeft = M.getMargin;
+ C.visibility = M.getVisibility;
+ C.borderColor = C.borderTopColor = C.borderRightColor = C.borderBottomColor = C.borderLeftColor = M.getBorderColor;
+ B.Dom.IE_COMPUTED = C;
+ B.Dom.IE_ComputedStyle = M;
+})();
+(function() {
+ var C = "toString",
+ A = parseInt,
+ B = RegExp,
+ D = YAHOO.util;
+ D.Dom.Color = {
+ KEYWORDS: { black: "000", silver: "c0c0c0", gray: "808080", white: "fff", maroon: "800000", red: "f00", purple: "800080", fuchsia: "f0f", green: "008000", lime: "0f0", olive: "808000", yellow: "ff0", navy: "000080", blue: "00f", teal: "008080", aqua: "0ff" },
+ re_RGB: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i, re_hex: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i, re_hex3: /([0-9A-F])/gi, toRGB: function( E ) {
+ if ( !D.Dom.Color.re_RGB.test( E ) ) {
+ E = D.Dom.Color.toHex( E );
+ }
+ if ( D.Dom.Color.re_hex.exec( E ) ) {
+ E = "rgb(" + [ A( B.$1, 16 ), A( B.$2, 16 ), A( B.$3, 16 ) ].join( ", " ) + ")";
+ }
+ return E;
+ },
+ toHex: function( H ) {
+ H = D.Dom.Color.KEYWORDS[ H ] || H;
+ if ( D.Dom.Color.re_RGB.exec( H ) ) {
+ var G = ( B.$1.length === 1 ) ? "0" + B.$1 : Number( B.$1 ),
+ F = ( B.$2.length === 1 ) ? "0" + B.$2 : Number( B.$2 ),
+ E = ( B.$3.length === 1 ) ? "0" + B.$3 : Number( B.$3 );
+ H = [ G[ C ]( 16 ), F[ C ]( 16 ), E[ C ]( 16 ) ].join( "" );
+ }
+ if ( H.length < 6 ) {
+ H = H.replace( D.Dom.Color.re_hex3, "$1$1" );
+ }
+ if ( H !== "transparent" && H.indexOf( "#" ) < 0 ) {
+ H = "#" + H;
+ }
+ return H.toLowerCase();
+ } };
+}() );
+YAHOO.register( "dom", YAHOO.util.Dom, { version: "2.7.0", build: "1796" } );
+YAHOO.util.CustomEvent = function( D, C, B, A ) {
+ this.type = D;
+ this.scope = C || window;
+ this.silent = B;
+ this.signature = A || YAHOO.util.CustomEvent.LIST;
+ this.subscribers = [];
+ if ( !this.silent ) {}
+ var E = "_YUICEOnSubscribe";
+ if ( D !== E ) {
+ this.subscribeEvent = new YAHOO.util.CustomEvent( E, this, true );
+ }
+ this.lastError = null;
+};
+YAHOO.util.CustomEvent.LIST = 0;
+YAHOO.util.CustomEvent.FLAT = 1;
+YAHOO.util.CustomEvent.prototype = {
+ subscribe: function( A, B, C ) {
+ if ( !A ) {
+ throw new Error( "Invalid callback for subscriber to '" + this.type + "'" );
+ }
+ if ( this.subscribeEvent ) {
+ this.subscribeEvent.fire( A, B, C );
+ }
+ this.subscribers.push( new YAHOO.util.Subscriber( A, B, C ) );
+ },
+ unsubscribe: function( D, F ) {
+ if ( !D ) {
+ return this.unsubscribeAll();
+ }
+ var E = false;
+ for ( var B = 0, A = this.subscribers.length; B < A; ++B ) {
+ var C = this.subscribers[ B ];
+ if ( C && C.contains( D, F ) ) {
+ this._delete( B );
+ E = true;
+ }
+ }
+ return E;
+ },
+ fire: function() {
+ this.lastError = null; var K = [],
+ E = this.subscribers.length;
+ if ( !E && this.silent ) {
+ return true;
+ }
+ var I = [].slice.call( arguments, 0 ),
+ G = true,
+ D,
+ J = false;
+ if ( !this.silent ) {}
+ var C = this.subscribers.slice(),
+ A = YAHOO.util.Event.throwErrors;
+ for ( D = 0; D < E; ++D ) {
+ var M = C[ D ];
+ if ( !M ) {
+ J = true;
+ } else {
+ if ( !this.silent ) {}
+ var L = M.getScope( this.scope );
+ if ( this.signature == YAHOO.util.CustomEvent.FLAT ) {
+ var B = null;
+ if ( I.length > 0 ) {
+ B = I[ 0 ];
+ }
+ try {
+ G = M.fn.call( L, B, M.obj );
+ } catch ( F ) {
+ this.lastError = F;
+ if ( A ) {
+ throw F;
+ }
+ }
+ } else {
+ try {
+ G = M.fn.call( L, this.type, I, M.obj );
+ } catch ( H ) {
+ this.lastError = H;
+ if ( A ) {
+ throw H;
+ }
+ }
+ }
+ if ( false === G ) {
+ if ( !this.silent ) {}
+ break;
+ }
+ }
+ }
+ return ( G !== false );
+ },
+ unsubscribeAll: function() {
+ var A = this.subscribers.length,
+ B; for ( B = A - 1; B > -1; B-- ) {
+ this._delete( B );
+ }
+ this.subscribers = [];
+ return A;
+ },
+ _delete: function( A ) {
+ var B = this.subscribers[ A ];
+ if ( B ) {
+ delete B.fn;
+ delete B.obj;
+ }
+ this.subscribers.splice( A, 1 );
+ },
+ toString: function() {
+ return "CustomEvent: " + "'" + this.type + "', " + "context: " + this.scope;
+ } }; YAHOO.util.Subscriber = function( A, B, C ) {
+ this.fn = A;
+ this.obj = YAHOO.lang.isUndefined( B ) ? null : B;
+ this.overrideContext = C;
+};
+YAHOO.util.Subscriber.prototype.getScope = function( A ) {
+ if ( this.overrideContext ) {
+ if ( this.overrideContext === true ) {
+ return this.obj;
+ } else {
+ return this.overrideContext;
+ }
+ }
+ return A;
+};
+YAHOO.util.Subscriber.prototype.contains = function( A, B ) {
+ if ( B ) {
+ return ( this.fn == A && this.obj == B );
+ } else {
+ return ( this.fn == A );
+ }
+};
+YAHOO.util.Subscriber.prototype.toString = function() {
+ return "Subscriber { obj: " + this.obj + ", overrideContext: " + ( this.overrideContext || "no" ) + " }";
+};
+if ( !YAHOO.util.Event ) {
+ YAHOO.util.Event = function() {
+ var H = false;
+ var I = [];
+ var J = [];
+ var G = [];
+ var E = [];
+ var C = 0;
+ var F = [];
+ var B = [];
+ var A = 0;
+ var D = { 63232: 38, 63233: 40, 63234: 37, 63235: 39, 63276: 33, 63277: 34, 25: 9 }; var K = YAHOO.env.ua.ie ? "focusin" : "focus"; var L = YAHOO.env.ua.ie ? "focusout" : "blur"; return {
+ POLL_RETRYS: 2000, POLL_INTERVAL: 20, EL: 0, TYPE: 1, FN: 2, WFN: 3, UNLOAD_OBJ: 3, ADJ_SCOPE: 4, OBJ: 5, OVERRIDE: 6, lastError: null, isSafari: YAHOO.env.ua.webkit, webkit: YAHOO.env.ua.webkit, isIE: YAHOO.env.ua.ie, _interval: null, _dri: null, DOMReady: false, throwErrors: false, startInterval: function() {
+ if ( !this._interval ) {
+ var M = this;
+ var N = function() {
+ M._tryPreloadAttach();
+ };
+ this._interval = setInterval( N, this.POLL_INTERVAL );
+ }
+ },
+ onAvailable: function( S, O, Q, R, P ) {
+ var M = ( YAHOO.lang.isString( S ) ) ? [ S ] : S;
+ for ( var N = 0; N < M.length; N = N + 1 ) {
+ F.push({ id: M[ N ], fn: O, obj: Q, overrideContext: R, checkReady: P } );
+ }
+ C = this.POLL_RETRYS;
+ this.startInterval();
+ },
+ onContentReady: function( P, M, N, O ) {
+ this.onAvailable( P, M, N, O, true );
+ },
+ onDOMReady: function( M, N, O ) {
+ if ( this.DOMReady ) {
+ setTimeout( function() {
+ var P = window;
+ if ( O ) {
+ if ( O === true ) {
+ P = N;
+ } else {
+ P = O;
+ }
+ }
+ M.call( P, "DOMReady", [], N );
+ }, 0 );
+ } else {
+ this.DOMReadyEvent.subscribe( M, N, O );
+ }
+ },
+ _addListener: function( O, M, Y, S, W, b ) {
+ if ( !Y || !Y.call ) {
+ return false;
+ }
+ if ( this._isValidCollection( O ) ) {
+ var Z = true;
+ for ( var T = 0, V = O.length; T < V; ++T ) {
+ Z = this.on( O[ T ], M, Y, S, W ) && Z;
+ }
+ return Z;
+ } else {
+ if ( YAHOO.lang.isString( O ) ) {
+ var R = this.getEl( O );
+ if ( R ) {
+ O = R;
+ } else {
+ this.onAvailable( O, function() {
+ YAHOO.util.Event.on( O, M, Y, S, W );
+ });
+ return true;
+ }
+ }
+ }
+ if ( !O ) {
+ return false;
+ }
+ if ( "unload" == M && S !== this ) {
+ J[ J.length ] = [ O, M, Y, S, W ];
+ return true;
+ }
+ var N = O;
+ if ( W ) {
+ if ( W === true ) {
+ N = S;
+ } else {
+ N = W;
+ }
+ }
+ var P = function( c ) {
+ return Y.call( N, YAHOO.util.Event.getEvent( c, O ), S );
+ };
+ var a = [ O, M, Y, P, N, S, W ];
+ var U = I.length;
+ I[ U ] = a;
+ if ( this.useLegacyEvent( O, M ) ) {
+ var Q = this.getLegacyIndex( O, M );
+ if ( Q == -1 || O != G[ Q ][ 0 ] ) {
+ Q = G.length;
+ B[ O.id + M ] = Q;
+ G[ Q ] = [ O, M, O[ "on" + M ] ];
+ E[ Q ] = [];
+ O[ "on" + M ] = function( c ) {
+ YAHOO.util.Event.fireLegacyEvent( YAHOO.util.Event.getEvent( c ), Q );
+ };
+ }
+ E[ Q ].push( a );
+ } else {
+ try {
+ this._simpleAdd( O, M, P, b );
+ } catch ( X ) {
+ this.lastError = X;
+ this.removeListener( O, M, Y );
+ return false;
+ }
+ }
+ return true;
+ },
+ addListener: function( N, Q, M, O, P ) {
+ return this._addListener( N, Q, M, O, P, false );
+ },
+ addFocusListener: function( N, M, O, P ) {
+ return this._addListener( N, K, M, O, P, true );
+ },
+ removeFocusListener: function( N, M ) {
+ return this.removeListener( N, K, M );
+ },
+ addBlurListener: function( N, M, O, P ) {
+ return this._addListener( N, L, M, O, P, true );
+ },
+ removeBlurListener: function( N, M ) {
+ return this.removeListener( N, L, M );
+ },
+ fireLegacyEvent: function( R, P ) {
+ var T = true,
+ M, V, U, N, S; V = E[ P ].slice();
+ for ( var O = 0, Q = V.length; O < Q; ++O ) {
+ U = V[ O ];
+ if ( U && U[ this.WFN ] ) {
+ N = U[ this.ADJ_SCOPE ];
+ S = U[ this.WFN ].call( N, R );
+ T = ( T && S );
+ }
+ }
+ M = G[ P ];
+ if ( M && M[ 2 ] ) {
+ M[ 2 ]( R );
+ }
+ return T;
+ },
+ getLegacyIndex: function( N, O ) {
+ var M = this.generateId( N ) + O;
+ if ( typeof B[ M ] == "undefined" ) {
+ return -1;
+ } else {
+ return B[ M ];
+ }
+ },
+ useLegacyEvent: function( M, N ) {
+ return ( this.webkit && this.webkit < 419 && ( "click" == N || "dblclick" == N ) );
+ },
+ removeListener: function( N, M, V ) {
+ var Q, T, X; if ( typeof N == "string" ) {
+ N = this.getEl( N );
+ } else {
+ if ( this._isValidCollection( N ) ) {
+ var W = true;
+ for ( Q = N.length - 1; Q > -1; Q-- ) {
+ W = ( this.removeListener( N[ Q ], M, V ) && W );
+ }
+ return W;
+ }
+ }
+ if ( !V || !V.call ) {
+ return this.purgeElement( N, false, M );
+ }
+ if ( "unload" == M ) {
+ for ( Q = J.length - 1; Q > -1; Q-- ) {
+ X = J[ Q ];
+ if ( X && X[ 0 ] == N && X[ 1 ] == M && X[ 2 ] == V ) {
+ J.splice( Q, 1 );
+ return true;
+ }
+ }
+ return false;
+ }
+ var R = null;
+ var S = arguments[ 3 ];
+ if ( "undefined" === typeof S ) {
+ S = this._getCacheIndex( N, M, V );
+ }
+ if ( S >= 0 ) {
+ R = I[ S ];
+ }
+ if ( !N || !R ) {
+ return false;
+ }
+ if ( this.useLegacyEvent( N, M ) ) {
+ var P = this.getLegacyIndex( N, M );
+ var O = E[ P ];
+ if ( O ) {
+ for ( Q = 0, T = O.length; Q < T; ++Q ) {
+ X = O[ Q ];
+ if ( X && X[ this.EL ] == N && X[ this.TYPE ] == M && X[ this.FN ] == V ) {
+ O.splice( Q, 1 );
+ break;
+ }
+ }
+ }
+ } else {
+ try {
+ this._simpleRemove( N, M, R[ this.WFN ], false );
+ } catch ( U ) {
+ this.lastError = U;
+ return false;
+ }
+ }
+ delete I[ S ][ this.WFN ];
+ delete I[ S ][ this.FN ];
+ I.splice( S, 1 );
+ return true;
+ },
+ getTarget: function( O, N ) {
+ var M = O.target || O.srcElement; return this.resolveTextNode( M );
+ },
+ resolveTextNode: function( N ) {
+ try {
+ if ( N && 3 == N.nodeType ) {
+ return N.parentNode;
+ }
+ } catch ( M ) {}
+ return N;
+ },
+ getPageX: function( N ) {
+ var M = N.pageX; if ( !M && 0 !== M ) {
+ M = N.clientX || 0;
+ if ( this.isIE ) {
+ M += this._getScrollLeft();
+ }
+ }
+ return M;
+ },
+ getPageY: function( M ) {
+ var N = M.pageY; if ( !N && 0 !== N ) {
+ N = M.clientY || 0;
+ if ( this.isIE ) {
+ N += this._getScrollTop();
+ }
+ }
+ return N;
+ },
+ getXY: function( M ) {
+ return [ this.getPageX( M ), this.getPageY( M ) ];
+ },
+ getRelatedTarget: function( N ) {
+ var M = N.relatedTarget; if ( !M ) {
+ if ( N.type == "mouseout" ) {
+ M = N.toElement;
+ } else {
+ if ( N.type == "mouseover" ) {
+ M = N.fromElement;
+ }
+ }
+ }
+ return this.resolveTextNode( M );
+ },
+ getTime: function( O ) {
+ if ( !O.time ) {
+ var N = new Date().getTime();
+ try {
+ O.time = N;
+ } catch ( M ) {
+ this.lastError = M;
+ return N;
+ }
+ }
+ return O.time;
+ },
+ stopEvent: function( M ) {
+ this.stopPropagation( M );
+ this.preventDefault( M );
+ },
+ stopPropagation: function( M ) {
+ if ( M.stopPropagation ) {
+ M.stopPropagation();
+ } else {
+ M.cancelBubble = true;
+ }
+ },
+ preventDefault: function( M ) {
+ if ( M.preventDefault ) {
+ M.preventDefault();
+ } else {
+ M.returnValue = false;
+ }
+ },
+ getEvent: function( O, M ) {
+ var N = O || window.event; if ( !N ) {
+ var P = this.getEvent.caller;
+ while ( P ) {
+ N = P.arguments[ 0 ];
+ if ( N && Event == N.constructor ) {
+ break;
+ }
+ P = P.caller;
+ }
+ }
+ return N;
+ },
+ getCharCode: function( N ) {
+ var M = N.keyCode || N.charCode || 0; if ( YAHOO.env.ua.webkit && ( M in D ) ) {
+ M = D[ M ];
+ }
+ return M;
+ },
+ _getCacheIndex: function( Q, R, P ) {
+ for ( var O = 0, N = I.length; O < N; O = O + 1 ) {
+ var M = I[ O ];
+ if ( M && M[ this.FN ] == P && M[ this.EL ] == Q && M[ this.TYPE ] == R ) {
+ return O;
+ }
+ }
+ return -1;
+ },
+ generateId: function( M ) {
+ var N = M.id; if ( !N ) {
+ N = "yuievtautoid-" + A;
+ ++A;
+ M.id = N;
+ }
+ return N;
+ },
+ _isValidCollection: function( N ) {
+ try {
+ return ( N && typeof N !== "string" && N.length && !N.tagName && !N.alert && typeof N[ 0 ] !== "undefined" );
+ } catch ( M ) {
+ return false;
+ }
+ },
+ elCache: {},
+ getEl: function( M ) {
+ return ( typeof M === "string" ) ? document.getElementById( M ) : M;
+ },
+ clearCache: function() {},
+ DOMReadyEvent: new YAHOO.util.CustomEvent( "DOMReady", this ), _load: function( N ) {
+ if ( !H ) {
+ H = true;
+ var M = YAHOO.util.Event;
+ M._ready();
+ M._tryPreloadAttach();
+ }
+ },
+ _ready: function( N ) {
+ var M = YAHOO.util.Event; if ( !M.DOMReady ) {
+ M.DOMReady = true;
+ M.DOMReadyEvent.fire();
+ M._simpleRemove( document, "DOMContentLoaded", M._ready );
+ }
+ },
+ _tryPreloadAttach: function() {
+ if ( F.length === 0 ) {
+ C = 0;
+ if ( this._interval ) {
+ clearInterval( this._interval );
+ this._interval = null;
+ }
+ return;
+ }
+ if ( this.locked ) {
+ return;
+ }
+ if ( this.isIE ) {
+ if ( !this.DOMReady ) {
+ this.startInterval();
+ return;
+ }
+ }
+ this.locked = true;
+ var S = !H;
+ if ( !S ) {
+ S = ( C > 0 && F.length > 0 );
+ }
+ var R = [];
+ var T = function( V, W ) {
+ var U = V;
+ if ( W.overrideContext ) {
+ if ( W.overrideContext === true ) {
+ U = W.obj;
+ } else {
+ U = W.overrideContext;
+ }
+ }
+ W.fn.call( U, W.obj );
+ };
+ var N, M, Q, P,
+ O = [];
+ for ( N = 0, M = F.length; N < M; N = N + 1 ) {
+ Q = F[ N ];
+ if ( Q ) {
+ P = this.getEl( Q.id );
+ if ( P ) {
+ if ( Q.checkReady ) {
+ if ( H || P.nextSibling || !S ) {
+ O.push( Q );
+ F[ N ] = null;
+ }
+ } else {
+ T( P, Q );
+ F[ N ] = null;
+ }
+ } else {
+ R.push( Q );
+ }
+ }
+ }
+ for ( N = 0, M = O.length; N < M; N = N + 1 ) {
+ Q = O[ N ];
+ T( this.getEl( Q.id ), Q );
+ }
+ C--;
+ if ( S ) {
+ for ( N = F.length - 1; N > -1; N-- ) {
+ Q = F[ N ];
+ if ( !Q || !Q.id ) {
+ F.splice( N, 1 );
+ }
+ }
+ this.startInterval();
+ } else {
+ if ( this._interval ) {
+ clearInterval( this._interval );
+ this._interval = null;
+ }
+ }
+ this.locked = false;
+ },
+ purgeElement: function( Q, R, T ) {
+ var O = ( YAHOO.lang.isString( Q ) ) ? this.getEl( Q ) : Q;
+ var S = this.getListeners( O, T ),
+ P, M;
+ if ( S ) {
+ for ( P = S.length - 1; P > -1; P-- ) {
+ var N = S[ P ];
+ this.removeListener( O, N.type, N.fn );
+ }
+ }
+ if ( R && O && O.childNodes ) {
+ for ( P = 0, M = O.childNodes.length; P < M; ++P ) {
+ this.purgeElement( O.childNodes[ P ], R, T );
+ }
+ }
+ },
+ getListeners: function( O, M ) {
+ var R = [],
+ N;
+ if ( !M ) {
+ N = [ I, J ];
+ } else {
+ if ( M === "unload" ) {
+ N = [ J ];
+ } else {
+ N = [ I ];
+ }
+ }
+ var T = ( YAHOO.lang.isString( O ) ) ? this.getEl( O ) : O;
+ for ( var Q = 0; Q < N.length; Q = Q + 1 ) {
+ var V = N[ Q ];
+ if ( V ) {
+ for ( var S = 0, U = V.length; S < U; ++S ) {
+ var P = V[ S ];
+ if ( P && P[ this.EL ] === T && ( !M || M === P[ this.TYPE ] ) ) {
+ R.push({ type: P[ this.TYPE ], fn: P[ this.FN ], obj: P[ this.OBJ ], adjust: P[ this.OVERRIDE ], scope: P[ this.ADJ_SCOPE ], index: S } );
+ }
+ }
+ }
+ }
+ return ( R.length ) ? R : null;
+ },
+ _unload: function( T ) {
+ var N = YAHOO.util.Event,
+ Q, P, O, S, R,
+ U = J.slice(),
+ M;
+ for ( Q = 0, S = J.length; Q < S; ++Q ) {
+ O = U[ Q ];
+ if ( O ) {
+ M = window;
+ if ( O[ N.ADJ_SCOPE ] ) {
+ if ( O[ N.ADJ_SCOPE ] === true ) {
+ M = O[ N.UNLOAD_OBJ ];
+ } else {
+ M = O[ N.ADJ_SCOPE ];
+ }
+ }
+ O[ N.FN ].call( M, N.getEvent( T, O[ N.EL ] ), O[ N.UNLOAD_OBJ ] );
+ U[ Q ] = null;
+ }
+ }
+ O = null;
+ M = null;
+ J = null;
+ if ( I ) {
+ for ( P = I.length - 1; P > -1; P-- ) {
+ O = I[ P ];
+ if ( O ) {
+ N.removeListener( O[ N.EL ], O[ N.TYPE ], O[ N.FN ], P );
+ }
+ }
+ O = null;
+ }
+ G = null;
+ N._simpleRemove( window, "unload", N._unload );</